$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