$EAA0/60064: Power-up RESET routine EAA0: 78 SEI EAA1: D8 CLD EAA2: A2 FF LDX #$FF EAA4: 4C 10 FF JMP $FF10 ; port A to output Jump from $FF1D: EAA7: E8 INX EAA8: A0 00 LDY #$00 EAAA: A2 00 LDX #$00 Jump from $EAB0: EAAC: 8A TXA EAAD: 95 00 STA $00,X ; erase zero page EAAF: E8 INX EAB0: D0 FA BNE $EAAC Jump from $EAC7: EAB2: 8A TXA EAB3: D5 00 CMP $00,X ; is byte erased? EAB5: D0 B7 BNE $EA6E ; no, then to error display (blink) Jump from $EABA: EAB7: F6 00 INC $00,X EAB9: C8 INY EABA: D0 FB BNE $EAB7 EABC: D5 00 CMP $00,X EABE: D0 AE BNE $EA6E ; error EAC0: 94 00 STY $00,X EAC2: B5 00 LDA $00,X EAC4: D0 A8 BNE $EA6E ; error EAC6: E8 INX EAC7: D0 E9 BNE $EAB2 Jump from $EAE8: EAC9: E6 6F INC $6F EACB: 86 76 STX $76 EACD: A9 00 LDA #$00 EACF: 85 75 STA $75 EAD1: A8 TAY EAD2: A2 20 LDX #$20 ; test 32 pages EAD4: 18 CLC Jump from $EADD: EAD5: C6 76 DEC $76 Jump from $EADA: EAD7: 71 75 ADC ($75),Y EAD9: C8 INY EADA: D0 FB BNE $EAD7 EADC: CA DEX EADD: D0 F6 BNE $EAD5 ; test ROM EADF: 69 00 ADC #$00 EAE1: AA TAX EAE2: C5 76 CMP $76 EAE4: D0 39 BNE $EB1F ; ROM error EAE6: E0 C0 CPX #$C0 EAE8: D0 DF BNE $EAC9 EAEA: A9 01 LDA #$01 EAEC: 85 76 STA $76 EAEE: E6 6F INC $6F EAF0: A2 07 LDX #$07 ; test RAM, beginning at page 7 Jump from $EAF9, $EAFE: EAF2: 98 TYA EAF3: 18 CLC EAF4: 65 76 ADC $76 EAF6: 91 75 STA ($75),Y EAF8: C8 INY EAF9: D0 F7 BNE $EAF2 EAFB: E6 76 INC $76 EAFD: CA DEX EAFE: D0 F2 BNE $EAF2 EB00: A2 07 LDX #$07 Jump from $EB1B: EB02: C6 76 DEC $76 Jump from $EB18: EB04: 88 DEY EB05: 98 TYA EB06: 18 CLC EB07: 65 76 ADC $76 EB09: D1 75 CMP ($75),Y EB0B: D0 12 BNE $EB1F ; RAM error EB0D: 49 FF EOR #$FF EB0F: 91 75 STA ($75),Y EB11: 51 75 EOR ($75),Y EB13: 91 75 STA ($75),Y EB15: D0 08 BNE $EB1F ; RAM error EB17: 98 TYA EB18: D0 EA BNE $EB04 EB1A: CA DEX EB1B: D0 E5 BNE $EB02 ; continue test EB1D: F0 03 BEQ $EB22 ; ok Jump from $EAE4, $EB0B, $EB15: EB1F: 4C 71 EA JMP $EA71 ; to error display Jump from $EB1D: EB22: A2 45 LDX #$45 EB24: 9A TXS ; initialize stack pointer EB25: AD 00 1C LDA $1C00 EB28: 29 F7 AND #$F7 ; turn LED off EB2A: 8D 00 1C STA $1C00 EB2D: A9 01 LDA #$01 EB2F: 8D 0C 18 STA $180C ; CA1 (ATN IN) trigger on positive edge EB32: A9 82 LDA #$82 EB34: 8D 0D 18 STA $180D ; interrupt possible through ATN IN EB37: 8D 0E 18 STA $180E EB3A: AD 00 18 LDA $1800 ; read port B EB3D: 29 60 AND #$60 ; isolate bits 5 & 6 (device number) EB3F: 0A ASL EB40: 2A ROL EB41: 2A ROL ; rotate to bit positions 0 & 1 EB42: 2A ROL EB43: 09 48 ORA #$48 ; add offset from 8 + $40 for TALK EB45: 85 78 STA $78 ; device number for TALK (send) EB47: 49 60 EOR #$60 ; erase bit 6, set bit 5 EB49: 85 77 STA $77 ; device number + $20 for LISTEN EB4B: A2 00 LDX #$00 EB4D: A0 00 LDY #$00 Jump from $EB5D: EB4F: A9 00 LDA #$00 EB51: 95 99 STA $99,X ; low-byte of buffer address EB53: E8 INX EB54: B9 E0 FE LDA $FEE0,Y ; high-byte of address from table EB57: 95 99 STA $99,X ; save EB59: E8 INX EB5A: C8 INY EB5B: C0 05 CPY #$05 EB5D: D0 F0 BNE $EB4F EB5F: A9 00 LDA #$00 EB61: 95 99 STA $99,X EB63: E8 INX ; pointer $A3/$A4 to $200, input buffer EB64: A9 02 LDA #$02 EB66: 95 99 STA $99,X EB68: E8 INX EB69: A9 D5 LDA #$D5 EB6B: 95 99 STA $99,X EB6D: E8 INX ; pointer $A5/$A6 to $2D5, error EB6E: A9 02 LDA #$02 ; message pointer EB70: 95 99 STA $99,X EB72: A9 FF LDA #$FF EB74: A2 12 LDX #$12 Jump from $EB7A: EB76: 9D 2B 02 STA $022B,X ; fill channel table with $FF EB79: CA DEX EB7A: 10 FA BPL $EB76 EB7C: A2 05 LDX #$05 Jump from $EB85: EB7E: 95 A7 STA $A7,X ; erase buffer table EB80: 95 AE STA $AE,X EB82: 95 CD STA $CD,X ; erase side-sector table EB84: CA DEX EB85: 10 F7 BPL $EB7E EB87: A9 05 LDA #$05 ; buffer 5 EB89: 85 AB STA $AB ; associate with channel 4 EB8B: A9 06 LDA #$06 ; buffer 4 EB8D: 85 AC STA $AC ; associate with channel 5 EB8F: A9 FF LDA #$FF EB91: 85 AD STA $AD EB93: 85 B4 STA $B4 EB95: A9 05 LDA #$05 EB97: 8D 3B 02 STA $023B ; channel 5 WRITE flag erased EB9A: A9 84 LDA #$84 EB9C: 8D 3A 02 STA $023A ; channel 4 WRITE flag set EB9F: A9 0F LDA #$0F ; initialize channel allocation register EBA1: 8D 56 02 STA $0256 ; bit '1' equals channel free EBA4: A9 01 LDA #$01 EBA6: 85 F6 STA $F6 ; WRITE flag EBA8: A9 88 LDA #$88 EBAA: 85 F7 STA $F7 ; READ flag EBAC: A9 E0 LDA #$E0 ; 5 buffers free EBAE: 8D 4F 02 STA $024F ; initialize buffer allocation register EBB1: A9 FF LDA #$FF ; $24F/$250, 16 bit EBB3: 8D 50 02 STA $0250 EBB6: A9 01 LDA #$01 EBB8: 85 1C STA $1C ; flag for WRITE protect EBBA: 85 1D STA $1D EBBC: 20 63 CB JSR $CB63 ; set vector for U0 EBBF: 20 FA CE JSR $CEFA ; initialize channel table EBC2: 20 59 F2 JSR $F259 ; initialization for disk controller EBC5: A9 22 LDA #$22 EBC7: 85 65 STA $65 EBC9: A9 EB LDA #$EB ; pointer $65/$66 to $EB22 EBCB: 85 66 STA $66 EBCD: A9 0A LDA #$0A EBCF: 85 69 STA $69 ; step width 10 EBD1: A9 05 LDA #$05 ; for sector assignment EBD3: 85 6A STA $6A ; 5 read attempts EBD5: A9 73 LDA #$73 ; prepare power-up message EBD7: 20 C1 E6 JSR $E6C1 ; 73, 'cbm dos v2.6 1541' EBDA: A9 00 LDA #$00 ; bit 1, 3 & 4 to output EBDC: 8D 00 18 STA $1800 ; data direction of port B EBDF: A9 1A LDA #$1A EBE1: 8D 02 18 STA $1802 ; erase data register EBE4: 20 80 E7 JSR $E780 ; check for auto-start Jump from $E698, $E8EA, $EA53: EBE7: 58 CLI EBE8: AD 00 18 LDA $1800 EBEB: 29 E5 AND #$E5 ; reset serial port EBED: 8D 00 18 STA $1800 EBF0: AD 55 02 LDA $0255 ; command flag set? EBF3: F0 0A BEQ $EBFF ; no EBF5: A9 00 LDA #$00 EBF7: 8D 55 02 STA $0255 ; reset command flag EBFA: 85 67 STA $67 EBFC: 20 46 C1 JSR $C146 ; analyze and execute command Previous Page / Next Page |