Z80-Assembler und die Firmware des CPC 6128
Der Amstrad/Schneider CPC hat ein Betriebssystem im ROM, das man aus Maschinensprache über Sprungleisten aufruft:CALL &BB5A gibt ein Zeichen aus,CALL &BB06 wartet auf eine Taste. Hier gibt es alle Einsprünge, für jeden ein lauffähiges Beispiel – und einen Z80-Emulator mit Debugger, der jeden Schritt sichtbar macht.
🔍Was passiert bei CALL &BB5A?
- 1&4000LD A,&41
- 2&4002CALL &BB5A
- 3&BB5ARST &08; TXT OUTPUT
- 4&0008HLE ▸ LOW JUMP
- 5&0178HLE ▸ TXT OUTPUT
- 6&BDD9JP &0510; TXT OUT ACTION
- 7&0510HLE ▸ IND: TXT OUT ACTION
- 8&BDD3JP &0508; TXT WRITE CHAR
- 9&0508HLE ▸ IND: TXT WRITE CHAR
- 10&3602HLE ▸ TXT WRITE CHAR (Rückkehr)
- 11&3600HLE ▸ TXT OUTPUT (Rückkehr)
- 12&0600HLE ▸ LOW JUMP (Rückkehr: ROM-Zustand wiederherstellen)
- 13&4005RET
- 14&3FFCNOP
🧭Kapitel
Firmware-Tabelle
Alle 245 Einsprünge: Hauptsprungleiste, Indirections, High und Low Kernel – filtern, suchen, aufklappen.
Schritt-Debugger
Assembler, Einzelschritt vor und zurück, Haltepunkte, Register, Flags, Speicher, Stapel, laufende Firmware-Routine.
Z80-Architektur
Register, Flags S Z H P/V N C zum Ausprobieren, Adressierungsarten, Interrupt-Modi, Takte und das 1-µs-Raster des CPC.
Befehlssatz
Über 1100 Befehlsformen mit Opcode, Länge, Z80-Takten, gemessener CPC-Dauer und Flag-Wirkung – durchsuchbar.
Speicherkarte & Banking
64 KB + 64 KB, unteres/oberes ROM, Gate Array &7Fxx und die RAM-Konfigurationen &C0–&C7 zum Anklicken.
Sprungleisten & RSX
LOW JUMP, Indirections umlenken, RSX mit KL LOG EXT, CALL &4000 aus BASIC und ein BASIC-Lader.
Bildschirm & Farben
Modus 0/1/2 Pixel für Pixel, Adressrechner für &C000, die 27 Farben mit Firmware- und Hardware-Nummer.
Geschichte & Quellen
CPC 464 (1984), 664 und 6128 (1985), Firmware 1.0/1.1 – und alle verwendeten Quellen.
⚡Ein CPC-Programm in 60 Sekunden
; Maxam-/WinAPE-Stil: org, Labels, &-Hex
org &4000
ld hl,text
schleife:
ld a,(hl) ; Zeichen holen
or a ; 0 = Ende?
ret z ; zurück zu BASIC
call &bb5a ; TXT OUTPUT
inc hl
jr schleife
text: db "Hallo CPC!",010 REM Aus BASIC laden und starten
20 MEMORY &3FFF : ' BASIC bleibt unter &4000
30 FOR a=&4000 TO &4016
40 READ b$: POKE a,VAL("&"+b$)
50 NEXT
60 CALL &4000
70 DATA 21,0C,40,7E,B7,C8,CD,5A,BB,23,18
80 DATA F7,48,61,6C,6C,6F,20,43,50,43,21,00👾Mehr CPC in der Sammlung
VisualBoulderDash – ein CPC-Spiel zerlegt
Sprites in Modus 0 mit der CPC-Farbpalette, Steuerung, Spielmechanik und Z80-Aufbau eines Klassikers – die Pixelkodierung dort ist dieselbe wie hier auf der Seite „Bildschirm & Farben“.