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 |