Reset-Routine ($eaa0)
I/O initialisieren
AF24: 78 SEI
AF25: D8 CLD
AF26: A9 FE LDA #$FE Port A (PA) und
AF28: 8D 00 40 STA $4000
AF2B: A9 65 LDA #$65 Datenrichtung A (DDRA)
AF2D: 8D 02 40 STA $4002
AF30: A9 D5 LDA #$D5
AF32: 8D 01 40 STA $4001 PB setzen
AF35: A9 3A LDA #$3A
AF37: 8D 03 40 STA $4003 DDRB
AF3A: A9 00 LDA #$00 Timer A fuer FSM auf $0006 stellen
AF3C: 8D 05 40 STA $4005 [3,5 us Takt, 2 Takte pro Bit, 8 Bits
AF3F: A9 06 LDA #$06 = 56 us Uebertragungsdauer fuer 1 Byte
AF41: 8D 04 40 STA $4004 = 2,9 s fuer 202 Blocks]
AF44: A9 01 LDA #$01 Timer A starten
AF46: 8D 0E 40 STA $400E
AF49: A9 9A LDA #$9A IRQ bei: b1: Unterlauf von Timer B;
AF4B: 8D 0D 40 STA $400D b3: SDR-voll/leer; b4: ATN-Signal
Zero-Page testen
AF4E: A0 00 LDY #$00
AF50: A2 00 LDX #$00
Einsprung von $AF56:
AF52: 8A TXA
AF53: 95 00 STA $00,X :0000 00 01 02 03 .. ..
AF55: E8 INX in entsprechende Z-Adressen schreiben
AF56: D0 FA BNE $AF52
Einsprung von $AF6D:
AF58: 8A TXA
AF59: D5 00 CMP $00,X und pruefen
AF5B: D0 95 BNE $AEF2 ungleich, (RAM-Fehler) ==>
Einsprung von $AF60:
AF5D: F6 00 INC $00,X 256 mal incrementieren
AF5F: C8 INY
AF60: D0 FB BNE $AF5D
AF62: D5 00 CMP $00,X muss alten Wert ergeben
AF64: D0 8C BNE $AEF2 ansonsten RAM-Fehler ==>
AF66: 94 00 STY $00,X y=0 abspeichern
AF68: B5 00 LDA $00,X ist Speicherzelle wirklich 0 ?
AF6A: D0 86 BNE $AEF2 nein, (RAM-Fehler) ==>
AF6C: E8 INX ganze Z-Page testen
AF6D: D0 E9 BNE $AF58
ROM testen
AF6F: E6 40 INC $40 = 1
AF71: A2 7F LDX #$7F Anfangen bei $8002
AF73: 86 47 STX $47
AF75: E8 INX x=$80 (ROM-Laenge)
AF76: A9 00 LDA #$00
AF78: 85 46 STA $46
AF7A: A0 02 LDY #$02
AF7C: 18 CLC
Einsprung von $AF85:
AF7D: E6 47 INC $47
Einsprung von $AF82:
AF7F: 71 46 ADC ($46),Y Alle Bytes des ROMs addieren
AF81: C8 INY (bei Uebertrag +1)
AF82: D0 FB BNE $AF7F
AF84: CA DEX
AF85: D0 F6 BNE $AF7D
AF87: 69 FF ADC #$FF +$ff
AF89: 85 47 STA $47 sollte 0 ergeben
AF8B: D0 00 BNE $AF8D Fehler ignorieren
* Old ROM:
AF8B: D0 3A BNE $AFC7 zur Fehlerroutine
RAM mit Testwerten fuellen
Page 1 mit $01,$02,$03, ...
Page 2 mit $02,$03,$04, ...
...
AF8D: A9 01 LDA #$01 Bei $0100 anfangen
AF8F: 85 47 STA $47
AF91: E6 40 INC $40 = 2
AF93: A2 1F LDX #$1F RAM-Groesse
Einsprung von $AF9C, $AFA1:
AF95: 98 TYA Index
AF96: 18 CLC
AF97: 65 47 ADC $47 + PageNr
AF99: 91 46 STA ($46),Y abspeichern
AF9B: C8 INY
AF9C: D0 F7 BNE $AF95
AF9E: E6 47 INC $47
AFA0: CA DEX
AFA1: D0 F2 BNE $AF95
RAM testen und loeschen
AFA3: A2 1F LDX #$1F RAM-Groesse
Einsprung von $AFBE:
AFA5: C6 47 DEC $47 RAM rueckwaerts testen
Einsprung von $AFBB:
AFA7: 88 DEY Anfangen mit $ff
AFA8: 98 TYA Index
AFA9: 18 CLC
AFAA: 65 47 ADC $47 + PageNr
AFAC: D1 46 CMP ($46),Y sollte abgespeichert sein
AFAE: D0 17 BNE $AFC7 wenn nicht, (RAM-Fehler) ==>
AFB0: 49 FF EOR #$FF Bits negieren
AFB2: 91 46 STA ($46),Y und abspeichern
AFB4: 51 46 EOR ($46),Y Dies sollte 0 ergeben
AFB6: 91 46 STA ($46),Y RAM loeschen
AFB8: D0 0D BNE $AFC7 <>0, (RAM-Fehler) ==>
AFBA: 98 TYA
AFBB: D0 EA BNE $AFA7 naechstes Byte der Page testen, ==>
AFBD: CA DEX
AFBE: D0 E5 BNE $AFA5 naechste Page testen, ==>
AFC0: A9 80 LDA #$80 Autoboot einschalten
AFC2: 8D FB 01 STA $01FB
AFC5: D0 03 BNE $AFCA
Einsprung von $AF8B, $AFAE, $AFB8:
AFC7: 4C F5 AE JMP $AEF5 RAM/ROM-Fehler ==>
Previous Page / Next Page