Hier mal das erste rudimentäre FGC (Floppy-/Graphics-Controller) BIOS und die neue dazu benötigte System BIOS Version 1.1.1.
Ich habe insgesamt ein klein wenig geschummelt und den PS/2 Tastatur Treiber noch in das System BIOS reingeschmuggelt. Das schien mir sinnvoller und ich hatte ja noch genug Platz.
Ebenfalls im System BIOS ist nun eine Routine READ_JOYSTICK an der festen Adresse $E1B9, über die der - guess what?! - Joystick Port abgefragt wird.
Ausgegeben wird hier dann im X Register ein Wert -1 bzw $FF für LINKS, 0 für CENTER und 1 für RECHTS. Im Y Register das gleiche -1 = UP, 0 = CENTER und 1 = DOWN. Der Accumulator enthält für die maximal drei unterstützen Buttons jeweils ein gesetzes Bit (Bit 0 = Button 0, Bit 1 = ...) wenn gedrückt.
Das Carry Flag gibt an, ob ein Joystick Port vorhanden ist (C = 1) oder nicht.
Die Routine DECODE_JOYSTICK an $E1BC kann genutzt werden, um beliebige Daten in diesen Joystick Code umzuwandeln. Dann kann man z.B. am User Port A oder B der IO-Karte einen zweiten Joystickp Port basteln, den Port abfragen und das Byte im Accumulator an DECODE_JOSTICK übergeben.
Die Signale müssen in folgender Reihenfolge am Port (oder in einem beliebigen Daten Byte) liegen
Bit 0 ... 6 : /UP, /DOWN, LEFT, /RIGHT, /BTN3, /BTN1, /BTN2, wobei jedes Signal Low Aktiv sein muss.
Der Joystick Port ist gemäß den üblichen Standards belegt:
Pin 1 = /UP, 2 = /DOWN, 3 = /LEFT, 4 = /RIGHT, 5 = /BTN3, 6 = /BTN1, 7 = +5V, 8 = GND, 9 = /BTN2
Auch neu im System BIOS ist nun ein auf $0000 legbarer Rücksprungpunkt aus dem Monitor. Durch diesen ist es jetzt möglich in M/OS-65 über das Kommando MON in den Hex Monitor zu springen und diesen durch den Befehl Q wieder zu verlassen und zum Betriebssystem zurückzukehren.
Auf $0000 liegt übrigens auch der Warmstart Vektor von EhBASIC, weshalb das dann da auch gehen sollte (CALL $E003 in den Monitor und Q wieder zurück).
Zu guter letzt sind natürlich auch Dietrich s Geschwindigkeitsoptimierten SD Karten Read und Write Routinen eingeflossen, die auch dazu geführt haben, im begrenzten RAM des 6532 RIOT wieder Platz zu schaffen. Dieses freie RAM habe ich gleich dankend zum Teil für andere Dinge wieder verbraten .
Vielen Dank nochmals an Dietrich für seine tolle Arbeit.
Wird der DIP Switch SW2 auf 1111 gestellt, wird der PS/2 Tastatur Treiber deaktiviert und es wird eine eventuell angeschlossene ASCII Tastatur oder - falls auch nicht vorhanden - die Terminal Tastatur stattdessen genutzt.
-
Das FGC BIOS wird von der DETECT_FGC Routine anhand der Magic Number $99,$33,$76,$5B erkannt (V9938 und GM82C765B) und dann wird über einen im FGC BIOS liegenden Einsprungpunkt die Hauptinitialisierungsroutine aufgerufen. Diese kopiert die nach einem Reset ausgewählte, oberste 1KB ROM Seite zunächst in das RAM an Adresse $4000 und springt dort hin.
Das ist nötig, da das Initialisieren der PIA den Port C der selbigen auf Ausgang und auf Bitmuster 00000000 stellt, was dann wiederum auf die ROM Seite 0 umschaltet und einer in Seite $0F gestarteten Routine den Ast unter dem Hintern absägen würde. Aber genug Details.
Ich werde das System BIOS jetzt erst einmal wieder einfrieren. Viel Platz habe ich sowieso nicht mehr (ca 360 Bytes). Es fehlt aber natürlich noch die Funktion für den Paper Tape Reader (ja, hab ich nicht vergessen!) .
Das FGC BIOS wird jetzt von mir sukzessive erweitert. Das heißt erst mal eine Initialisierung für die VPU und den Floppy-Controller Baustein. Dann folgen erst mal über M/OS ladbare Demos und dann kommen die Treiberfunktionen in das ROM. Das wird wieder etwas dauern, aber ihr seit ja alle recht geduldig mit mir.
In der Zip sind auch nochmal die Dateien zum Flashen der GALs und des ATMega328P mit drinnen. Falls ihr das schon fertig haben solltet, Brennt einfach ein 27C256 EPROM oder ein 28C256 EEPROM mit den Daten im Ordner JC2_Floppy_Graphics_Controller\BIOS ROM.
Bei Einsatz eines EEPROMs macht bitte auf alle Fälle den kleinen Hardware Patch den ich beschrieben hatte (steht auch nochmal in der Zip).
Das System BIOS muss auch auf den neuesten Stand gebracht werden und die BOOT.SYS Datei muss für das MON Kommando auch noch getauscht werden.
Phuuu, das war ne Menge Holz... soweit erst mal alles von mir. Bei Fragen wie immer melden.
Slainté
Jörg