From a37f7847fbb6ee2fadebf6cdf8d1d5acac0e9485 Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Tue, 10 Nov 2020 11:41:07 +0100 Subject: [PATCH] Mass upload The code from the Apple IIe diagnostics card --- diag/BINARY | Bin 0 -> 12288 bytes diag/DIAG18B1.S | 3069 +++++++++++++++++++++++++++++++++++++++++++++ diag/DIAG18B2.S | 17 + diag/DIAG19B.S | 2046 ++++++++++++++++++++++++++++++ diag/EPROM | Bin 0 -> 16384 bytes diag/EQUATES.S | 148 +++ diag/MAKEBIN.S | 19 + diag/MAKEEPROM.S | 28 + diag/MONITORIIE.S | 1250 ++++++++++++++++++ 9 files changed, 6577 insertions(+) create mode 100644 diag/BINARY create mode 100644 diag/DIAG18B1.S create mode 100644 diag/DIAG18B2.S create mode 100644 diag/DIAG19B.S create mode 100644 diag/EPROM create mode 100644 diag/EQUATES.S create mode 100644 diag/MAKEBIN.S create mode 100644 diag/MAKEEPROM.S create mode 100644 diag/MONITORIIE.S diff --git a/diag/BINARY b/diag/BINARY new file mode 100644 index 0000000000000000000000000000000000000000..86fe295cb95bafa3f2186a4d11e100fd4c7a5512 GIT binary patch literal 12288 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 bX6e$E0XuhWZ2fY2>C#*D2lP$%Q}6#D4n1r# literal 0 HcmV?d00001 diff --git a/diag/DIAG18B1.S b/diag/DIAG18B1.S new file mode 100644 index 0000000..e196f8c --- /dev/null +++ b/diag/DIAG18B1.S @@ -0,0 +1,3069 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + + mx %11 + org $d000 + lst off + + use EQUATES.S + +*--------------------------------------------------------- +* EPROM18B.BIN +* Code and data at $D000..$DFFF +* First bank +*--------------------------------------------------------- + +FNDSLOT LDA #>LC000 + STA SETSLOTCXROM + STA SETSLOTC3ROM + STA SCRATCH+1 + STA ROMCTRL+1 + LDA #L0200 ; 02 + STA $0D + LDA #>LC000-1 ; BF + STA $67 + JSR LD27A + JSR HOME + BIT TXTSET + BIT MIXCLR + BIT LORES + LDX #$00 +LD207 LDA CTAMSG,X + BEQ LD212 + JSR COUT + INX + BNE LD207 +LD212 LDA #L7237 + STA $03 + LDA #>LD237 + STA $05 + LDA #LD000 + STA $0D + LDA #>LE000-1 + STA $67 + LDY #$00 + LDA #$10 + STA (ROMCTRL),Y + BIT LCBANK1 + BIT LCBANK1 + JSR LD27A + BIT LCBANK2 + BIT LCBANK2 + LDA #>LD000 + STA $0D + LDA #>LFE00 + STA $67 + JSR LD27A + BIT ROMIN2 + BIT ROMIN2 + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + LDA LOOPFLG + BEQ LD275 + JSR HOME + JMP CPUTST + +LD275 INC RAMFLG + JMP TSTS + +LD27A LDA #$00 + STA $0C + TAY + STA $02 +LD281 STA $65 + LDX #$02 + STX $07 +LD287 LDA $0D + STA $03 + LDX $67 + LDA $65 + EOR #$FF + STA $08 +LD293 STA ($02),Y + INY + BNE LD293 + INC $03 + CPX $03 + BCS LD293 + LDX $07 + LDA $0D + STA $03 +LD2A4 LDA $65 +LD2A6 DEX + BPL LD2AD + LDX #$02 + STA ($02),Y +LD2AD INY + BNE LD2A6 + INC $03 + LDA $67 + CMP $03 + BCS LD2A4 + LDA #$00 + CMP $07 + BNE LD2C5 + LDA $65 + CMP #$80 + BNE LD2C5 + RTS + +LD2C5 LDA $0D + STA $03 + LDX $07 +LD2CB LDA $08 + DEX + BPL LD2D4 + LDX #$02 + LDA $65 +LD2D4 CMP ($02),Y + BNE LD2FF + INY + BNE LD2CB + INC $03 + LDA $67 + CMP $03 + BCS LD2CB + DEC $07 + BPL LD287 + LDA $65 + EOR #$FF + BMI LD281 + RTS + +LD2EE STA L0800+$E + LDY #$00 +LD2F3 LDA L0800,Y + STA |L0000,Y + INY + BNE LD2F3 + JMP ERROR + +LD2FF STA $0E + STY $09 + LDA ($02),Y + STA $07 + BIT ROMIN2 + BIT ROMIN2 + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + STA $0C + STY RAMFLG + BIT TXTSET + BIT MIXCLR + BIT LORES + JMP ERROR + +* +* End of relocated code +* + +*--------------------------------------------------------- +* +* The main error routine +* +*--------------------------------------------------------- + + org $D323 + +ERROR JSR HOME + JSR BELL + LDY #$00 +PSPF LDA SPFMSG,Y + BEQ SPF2 + JSR COUT + INY + BNE PSPF +SPF2 LDA $07 + EOR $0E + LDX #$00 + CLC +BITS INX + ROR + BCC BITS + LDA BITMAP,X + JSR PRBYTE + JSR BELL + LDY $09 + LDX #$00 +PERRWT LDA ESPACE,X + BEQ WHOA + JSR COUT + INX + BNE PERRWT +WHOA LDA KBD + CMP #$A0 + BNE WHOA + JMP INI + +*--------------------------------------------------------- +* +* Command: S - Speaker test +* +*--------------------------------------------------------- + +SNDTST JSR HOME + LDA #$05 + STA $08 + LDA #$FF + STA $07 + LDA #$09 + STA CV + LDX #$00 +TO1 LDA TMSG,X + BEQ PIT1 + JSR COUT + INX + BNE TO1 + +PIT1 JSR PAUSE +PITCH LDY #$30 +LOW1 JSR TONE + LDX $07 + JSR DLY + DEY + BNE LOW1 + LDY #$50 + JSR DELAY + LDA $07 + SBC #$20 + STA $07 + DEC $08 + BNE PITCH + BIT KBDSTROBE + JMP TSTS + +TONE STA SPKR + LDA SPKR + STA SPKR + RTS + +*--------------------------------------------------------- +* +* Command: V - Video tests +* +*--------------------------------------------------------- + +VIDTST JSR SETGR + BIT LORES + LDA #>L0400 + STA $11 + LDA #L0800 + BNE LD3BF + JSR HOME + LDA #>L0400 + STA $11 + LDA #>L0800 + STA $03 + LDA #L0C00 + BNE LD3F6 + LDY #$00 +LD409 LDA LRP2,Y ; low-res page 2 + BEQ LD414 + STA L0AD0,Y + INY + BNE LD409 +LD414 LDX #$00 +LD416 LDA LRMSG,X + BEQ LD421 + JSR COUT + INX + BNE LD416 +LD421 BIT TXTPAGE2 + JSR PAUSE + BIT TXTPAGE1 + JSR PAUSE + LDA KBD + CMP #$A0 + BNE LD421 + BIT KBDSTROBE + JSR SETTXT + LDA #>L0C00 + STA $08 + LDA #>L0800 + STA $07 + LDA #L4000 + STA $03 + LDA #>L2000 + STA $05 + LDA #L6000 + BNE LD480 + + LDA #$11 + STA $2800 + LDA #$19 + STA $2C00 + LDA #$11 + STA $3000 + STA $3400 + STA $3800 + LDA #$7D + STA $3C00 + LDA #$31 + STA $4800 + LDA #$49 + STA $4C00 + LDA #$41 + STA $5000 + LDA #$21 + STA $5400 + LDA #$11 + STA $5800 + LDA #$79 + STA $5C00 +LD4C9 BIT TXTPAGE2 + JSR PAUSE + BIT TXTPAGE1 + LDA KBD + CMP #$A0 + BEQ LD4DF + JSR PAUSE + JMP LD4C9 + +LD4DF JSR SETTXT + BIT LORES + JMP TSTS + +LD4E8 LDY #$00 + LDX #$00 + LDA #$00 + JSR LEEA9 + LDX #$01 + LDA #$17 + JSR LEF8C + LDY #$BF + LDX #$01 + LDA #$17 + JSR LEF8C + LDY #$BF + LDA #$00 + JSR LEF8C + LDY #$00 + LDX #$00 + LDA #$00 + JSR LEF8C + RTS + +LD512 LDA #$00 + LDY $07 + JSR LEF8C + LDA $07 + TAY + ADC #$07 + STA $07 + LDX #$01 + LDA #$18 + JSR LEF8C + LDX #$01 + LDA #$18 + LDY $07 + JSR LEF8C + LDA #$00 + LDY $07 + JSR LEF8C + LDA $07 + ADC #$07 + TAY + STA $07 + LDA #$00 + JSR LEF8C + RTS + +LD544 LDY #$BF + LDX $09 + LDA $06 + JSR LEF8C + LDY #$00 + LDX $09 + LDA $06 + JSR LEF8C + LDY #$00 + LDX $09 + LDA $06 + ADC #$08 + STA $06 + JSR LEF8C + LDY #$BF + LDX $09 + LDA $06 + JSR LEF8C + RTS + +*--------------------------------------------------------- +* +* Command: K - Keyboard test +* +*--------------------------------------------------------- + +KBDTST JSR HOME + LDA #$14 + STA CV + LDX #$00 +LD576 LDA KMSG,X + BEQ LD581 + JSR COUT + INX + BNE LD576 +LD581 LDA #$01 + STA $69 + LDA #$02 + STA $66 + STA $68 + LDA #$0D + STA $09 + LDA #$0D + STA $67 + LDA #$7F + STA $E4 + JSR LEE34 + BIT MIXSET + JSR LD773 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA #$1B + STA $67 + LDA $68 + STA $66 + JSR LD788 + LDA #$01 + STA $69 + LDA #$15 + STA $68 + STA $66 + LDA #$0D + STA $09 + LDA #$1B + STA $67 + JSR LD788 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA #$0D + STA $67 + LDA $68 + STA $66 + JSR LD773 + LDA #$28 + STA $68 + STA $66 + LDA #$1D + STA $67 + LDA #$01 + STA $69 + JSR LD788 + LDA #$0D + STA $67 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA #$0B + STA $09 + LDA $68 + STA $66 + JSR LD773 + LDA $68 + STA $66 + LDA #$1C + STA $67 + INC $6A + INC $6A + LDA $6A + STA $69 + JSR LD788 + LDA #$01 + STA $69 + LDA #$25 + STA $67 + LDA #$3B + STA $68 + STA $66 + JSR LD788 + LDA #$0D + STA $67 + LDA $68 + STA $66 + LDA #$0A + STA $09 + INC $6A + INC $6A + LDA $6A + STA $69 + JSR LD773 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA #$25 + STA $67 + LDA $68 + STA $66 + JSR LD788 + LDA #$01 + STA $69 + LDA #$0D + STA $67 + LDA #$02 + STA $09 + LDA #$4E + STA $68 + STA $66 + JSR LD773 + LDA $6A + ADC #$17 + STA $69 + LDA $68 + STA $66 + JSR LD788 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA $68 + STA $66 + LDA #$5A + STA $67 + JSR LD788 + INC $6A + INC $6A + LDA $6A + STA $69 + LDA #$0D + STA $67 + LDA $68 + STA $66 + LDA #$05 + STA $09 + JSR LD773 + LDY #$00 + STY $63 + STY $68 + STY $66 + STY $67 + STY $62 + LDA #$3F + STA $64 +LD6AD JSR LD83F + DEC $64 + BNE LD6AD + LDA #$FF + STA $0E +LD6B8 LDA #$00 + STA $E4 + LDA $0E + CMP #$FF + BEQ LD6C5 + JSR LD806 +LD6C5 LDA BUTN0 + BPL LD6CF + LDY #$38 + JMP LD739 + +LD6CF LDA BUTN1 + BPL LD6D9 + LDY #$39 + JMP LD739 + +LD6D9 LDA KBD + BPL LD6B8 + STA $65 + CMP #$FB + BCS LD6E8 + CMP #$E1 + BCS LD74D +LD6E8 CMP #$83 + BEQ LD743 + BIT KBDSTROBE + LDA #$00 + STA KBD + LDA #$80 + JSR WAIT + LDA KBD + CMP $65 + BNE LD728 + JSR BELL + JSR BELL + LDA #$00 + STA $0E + LDA $65 + LDY #$00 +LD70E CMP LE2A5,Y + BEQ LD71B + INY + CPY #LE2DD-LE2A5 ; $38 + BNE LD70E + JMP LD6B8 + +LD71B TYA + ASL + LDY $68 + STA |$006B,Y + INY + STY $68 + JMP LD6B8 + +LD728 LDA $65 + LDY #$00 +LD72C CMP LE2A5,Y + BEQ LD739 + INY + CPY #LE2DD-LE2A5 ; $38 + BNE LD72C + JMP LD6B8 + +LD739 TYA + ASL + STA $63 + JSR LD83F + JMP LD6B8 + +LD743 JSR SETTXT + LDA #$00 + STA $0C + JMP TSTS + +LD74D LDA #$3C + ASL + STA $63 + JSR LD83F + LDA #$FF + JSR WAIT + LDA #$FF + JSR WAIT + LDA #$7F + STA $E4 + LDA #$3C + ASL + STA $63 + JSR LD83F + LDA #$FF + JSR WAIT + JMP LD6B8 + +LD773 JSR LD788 + DEC $09 + BEQ LD787 + LDA $69 + ADC #$0F + STA $69 + LDA $68 + STA $66 + JMP LD773 +LD787 RTS + +LD788 LDY #$00 + LDX $69 + LDA $66 + JSR LEEA9 + DEC $69 + INC $66 + LDA $69 + LDY $66 + LDX #$00 + JSR LEF8C + LDA $66 + CLC + ADC #$0F + STA $66 + TAY + LDA $69 + LDX #$00 + JSR LEF8C + INC $69 + INC $66 + LDA $69 + LDY $66 + LDX #$00 + JSR LEF8C + LDA $69 + ADC $67 + STA $69 + LDY $66 + LDX #$00 + JSR LEF8C + DEC $66 + DEC $66 + INC $69 + LDA $69 + STA $6A + LDY $66 + LDX #$00 + JSR LEF8C + LDA $66 + SEC + SBC #$0F + STA $66 + LDA $69 + LDY $66 + LDX #$00 + JSR LEF8C + DEC $69 + DEC $66 + LDA $69 + LDY $66 + LDX #$00 + JSR LEF8C + LDA $69 + SEC + SBC $67 + STA $69 + LDA $69 + LDY $66 + LDX #$00 + JSR LEF8C + RTS + +LD806 LDY #$00 + LDA #$7F + STA $E4 +LD80C LDA |$006B,Y + STA $63 + STY $66 + JSR LD83F + LDY $66 + INY + CPY $68 + BNE LD80C + LDA #$40 + JSR WAIT + LDA #$00 + STA $E4 + LDY #$00 +LD828 LDA |$006B,Y + STA $63 + STY $66 + JSR LD83F + LDY $66 + INY + CPY $68 + BNE LD828 + LDA #$40 + JSR WAIT + RTS + +LD83F LDY $63 + LDA LE2DD,Y + STA POINTER + INY + LDA LE2DD,Y + STA POINTER+1 + INY + STY $63 + LDY #$00 + LDA (POINTER),Y + STA $62 + INC POINTER + JSR LD85B + RTS + +LD85B LDY #$00 + LDA (POINTER),Y + TAX + INC POINTER + BNE LD866 + INC POINTER+1 +LD866 LDA (POINTER),Y + INC POINTER + BNE LD86E + INC POINTER+1 +LD86E JSR LEEA9 + DEC $62 + BNE LD85B + RTS + +LD876 DB $1E + DB $03 + DB $09 + DB $04 + DB $09 + DB $05 + DB $09 + DB $07 + DB $09 + DB $08 + DB $09 + DB $09 + DB $09 + DB $0B + DB $09 + DB $0C + DB $09 + DB $0D + DB $09 + DB $03 + DB $0A + DB $07 + DB $0A + DB $0B + DB $0A + DB $03 + DB $0B + DB $04 + DB $0B + DB $07 + DB $0B + DB $08 + DB $0B + DB $09 + DB $0B + DB $0B + DB $0B + DB $03 + DB $0C + DB $09 + DB $0C + DB $0B + DB $0C + DB $03 + DB $0D + DB $04 + DB $0D + DB $05 + DB $0D + DB $07 + DB $0D + DB $08 + DB $0D + DB $09 + DB $0D + DB $0B + DB $0D + DB $0C + DB $0D + DB $0D + DB $0D + DB $0C + DB $19 + DB $0B + DB $18 + DB $0C + DB $19 + DB $0C + DB $19 + DB $0D + DB $19 + DB $0E + DB $19 + DB $0F + DB $19 + DB $10 + DB $17 + DB $11 + DB $18 + DB $11 + DB $19 + DB $11 + DB $1A + DB $11 + DB $1B + DB $11 + DB $0C + DB $29 + DB $0B + DB $2A + DB $0B + DB $28 + DB $0C + DB $2B + DB $0C + DB $2B + DB $0D + DB $2A + DB $0E + DB $29 + DB $0F + DB $28 + DB $10 + DB $28 + DB $11 + DB $29 + DB $11 + DB $2A + DB $11 + DB $2B + DB $11 + DB $0D + DB $3A + DB $0B + DB $3B + DB $0B + DB $3C + DB $0B + DB $3D + DB $0B + DB $3D + DB $0C + DB $3C + DB $0D + DB $3B + DB $0E + DB $3C + DB $0E + DB $3D + DB $0F + DB $3D + DB $10 + DB $3C + DB $11 + DB $3B + DB $11 + DB $3A + DB $10 + DB $0E + DB $4C + DB $0B + DB $4B + DB $0C + DB $4C + DB $0C + DB $4A + DB $0D + DB $4C + DB $0D + DB $49 + DB $0E + DB $4C + DB $0E + DB $49 + DB $0F + DB $4A + DB $0F + DB $4B + DB $0F + DB $4C + DB $0F + DB $4D + DB $0F + DB $4C + DB $10 + DB $4C + DB $11 + DB $0F + DB $5B + DB $0B + DB $5C + DB $0B + DB $5D + DB $0B + DB $5E + DB $0B + DB $5B + DB $0C + DB $5B + DB $0C + DB $5B + DB $0D + DB $5C + DB $0D + DB $5D + DB $0D + DB $5E + DB $0E + DB $5E + DB $0F + DB $5E + DB $10 + DB $5D + DB $11 + DB $5C + DB $11 + DB $5B + DB $10 + DB $11 + DB $6F + DB $0B + DB $6E + DB $0B + DB $6D + DB $0B + DB $6C + DB $0C + DB $6B + DB $0D + DB $6B + DB $0E + DB $6C + DB $0E + DB $6D + DB $0E + DB $6E + DB $0E + DB $6F + DB $0F + DB $6B + DB $0F + DB $6F + DB $0F + DB $6B + DB $10 + DB $6F + DB $10 + DB $6C + DB $11 + DB $6D + DB $11 + DB $6E + DB $11 + DB $0B + DB $7E + DB $0B + DB $7F + DB $0B + DB $80 + DB $0B + DB $81 + DB $0B + DB $81 + DB $0C + DB $80 + DB $0D + DB $7F + DB $0E + DB $7E + DB $0F + DB $7E + DB $10 + DB $7E + DB $11 + DB $7D + DB $0B + DB $11 + DB $8F + DB $0B + DB $90 + DB $0B + DB $91 + DB $0B + DB $8E + DB $0C + DB $92 + DB $0C + DB $8E + DB $0D + DB $92 + DB $0D + DB $8F + DB $0E + DB $90 + DB $0E + DB $91 + DB $0E + DB $8E + DB $0F + DB $92 + DB $0F + DB $8E + DB $10 + DB $92 + DB $10 + DB $8F + DB $11 + DB $90 + DB $11 + DB $91 + DB $11 + DB $0F + DB $A0 + DB $0B + DB $A1 + DB $0B + DB $A2 + DB $0B + DB $9F + DB $0C + DB $A3 + DB $0C + DB $9F + DB $0D + DB $A3 + DB $0D + DB $A0 + DB $0E + DB $A1 + DB $0E + DB $A2 + DB $0E + DB $A3 + DB $0E + DB $A3 + DB $0F + DB $A2 + DB $10 + DB $A1 + DB $11 + DB $A0 + DB $11 + DB $12 + DB $B0 + DB $0B + DB $B1 + DB $0B + DB $B2 + DB $0B + DB $AF + DB $0C + DB $B3 + DB $0C + DB $AF + DB $0D + DB $B3 + DB $0D + DB $AF + DB $0E + DB $B3 + DB $0E + DB $AF + DB $0E + DB $B3 + DB $0E + DB $AF + DB $0F + DB $B3 + DB $0F + DB $AF + DB $10 + DB $B3 + DB $10 + DB $B0 + DB $11 + DB $B1 + DB $11 + DB $B2 + DB $11 + DB $07 + DB $C0 + DB $0D + DB $C1 + DB $0D + DB $C2 + DB $0D + DB $C3 + DB $0D + DB $C4 + DB $0D + DB $C5 + DB $0D + DB $C6 + DB $0D + DB $0C + DB $D2 + DB $0C + DB $D3 + DB $0C + DB $D4 + DB $0C + DB $D5 + DB $0C + DB $D6 + DB $0C + DB $D7 + DB $0C + DB $D2 + DB $0E + DB $D3 + DB $0E + DB $D4 + DB $0E + DB $D5 + DB $0E + DB $D6 + DB $0E + DB $D7 + DB $0E + DB $38 + DB $E1 + DB $09 + DB $E1 + DB $0A + DB $E1 + DB $0B + DB $E1 + DB $0B + DB $E1 + DB $0C + DB $E1 + DB $0D + DB $E2 + DB $09 + DB $E3 + DB $0A + DB $E3 + DB $0B + DB $E3 + DB $0C + DB $E2 + DB $0D + DB $E5 + DB $09 + DB $E6 + DB $09 + DB $E7 + DB $09 + DB $E5 + DB $0A + DB $E5 + DB $0B + DB $E6 + DB $0B + DB $E7 + DB $0B + DB $E5 + DB $0C + DB $E5 + DB $0D + DB $E6 + DB $0D + DB $E7 + DB $0D + DB $E9 + DB $09 + DB $E9 + DB $0A + DB $E9 + DB $0B + DB $E9 + DB $0C + DB $E9 + DB $0D + DB $EA + DB $0D + DB $EB + DB $0D + DB $ED + DB $09 + DB $EE + DB $09 + DB $EF + DB $09 + DB $ED + DB $0A + DB $ED + DB $0B + DB $EE + DB $0B + DB $ED + DB $0C + DB $ED + DB $0D + DB $EE + DB $0D + DB $EF + DB $0D + DB $F1 + DB $09 + DB $F2 + DB $09 + DB $F3 + DB $09 + DB $F2 + DB $0A + DB $F2 + DB $0B + DB $F2 + DB $0C + DB $F2 + DB $0D + DB $F5 + DB $09 + DB $F6 + DB $09 + DB $F7 + DB $09 + DB $F5 + DB $0A + DB $F5 + DB $0B + DB $F6 + DB $0B + DB $F5 + DB $0C + DB $F5 + DB $0D + DB $F6 + DB $0D + DB $F7 + DB $0D + DB $1B + DB $0A + DB $1C + DB $0B + DB $1C + DB $0C + DB $1C + DB $0B + DB $1D + DB $0B + DB $1E + DB $0B + DB $1F + DB $0B + DB $20 + DB $0F + DB $1C + DB $0E + DB $1D + DB $10 + DB $1D + DB $0E + DB $1E + DB $0F + DB $1E + DB $10 + DB $1E + DB $0E + DB $1F + DB $10 + DB $1F + DB $0E + DB $20 + DB $10 + DB $20 + DB $12 + DB $1C + DB $13 + DB $1C + DB $12 + DB $1D + DB $14 + DB $1D + DB $12 + DB $1E + DB $13 + DB $1E + DB $12 + DB $1F + DB $14 + DB $1F + DB $12 + DB $20 + DB $13 + DB $20 + DB $11 + DB $26 + DB $1E + DB $27 + DB $1E + DB $28 + DB $1E + DB $25 + DB $1F + DB $29 + DB $1F + DB $25 + DB $20 + DB $29 + DB $20 + DB $25 + DB $21 + DB $29 + DB $21 + DB $25 + DB $22 + DB $27 + DB $22 + DB $29 + DB $22 + DB $25 + DB $23 + DB $28 + DB $23 + DB $26 + DB $24 + DB $27 + DB $24 + DB $29 + DB $24 + DB $12 + DB $36 + DB $1E + DB $36 + DB $1F + DB $36 + DB $20 + DB $36 + DB $21 + DB $36 + DB $22 + DB $36 + DB $23 + DB $36 + DB $24 + DB $37 + DB $23 + DB $38 + DB $22 + DB $38 + DB $21 + DB $39 + DB $23 + DB $3A + DB $24 + DB $3A + DB $23 + DB $3A + DB $22 + DB $3A + DB $21 + DB $3A + DB $20 + DB $3A + DB $1F + DB $3A + DB $1E + DB $0F + DB $48 + DB $1E + DB $49 + DB $1E + DB $4A + DB $1E + DB $4B + DB $1E + DB $48 + DB $1F + DB $48 + DB $20 + DB $48 + DB $21 + DB $49 + DB $21 + DB $4A + DB $21 + DB $48 + DB $22 + DB $48 + DB $23 + DB $48 + DB $24 + DB $49 + DB $24 + DB $4A + DB $24 + DB $4B + DB $24 + DB $12 + DB $59 + DB $1E + DB $5A + DB $1E + DB $5B + DB $1E + DB $5C + DB $1E + DB $59 + DB $1F + DB $5D + DB $1F + DB $59 + DB $20 + DB $5D + DB $20 + DB $59 + DB $21 + DB $5A + DB $21 + DB $5B + DB $21 + DB $5C + DB $21 + DB $59 + DB $22 + DB $5B + DB $22 + DB $59 + DB $23 + DB $5C + DB $23 + DB $59 + DB $24 + DB $5D + DB $24 + DB $0B + DB $69 + DB $1E + DB $6A + DB $1E + DB $6B + DB $1E + DB $6C + DB $1E + DB $6D + DB $1E + DB $6B + DB $1F + DB $6B + DB $20 + DB $6B + DB $21 + DB $6B + DB $22 + DB $6B + DB $23 + DB $6B + DB $24 + DB $0A + DB $7B + DB $1E + DB $7F + DB $1E + DB $7B + DB $1F + DB $7F + DB $1F + DB $7C + DB $20 + DB $7E + DB $20 + DB $7D + DB $21 + DB $7D + DB $22 + DB $7D + DB $23 + DB $7D + DB $24 + DB $0F + DB $8C + DB $1E + DB $90 + DB $1E + DB $8C + DB $1F + DB $90 + DB $1F + DB $8C + DB $20 + DB $90 + DB $20 + DB $8C + DB $21 + DB $90 + DB $21 + DB $8C + DB $22 + DB $90 + DB $22 + DB $8C + DB $23 + DB $90 + DB $23 + DB $8D + DB $24 + DB $8E + DB $24 + DB $8F + DB $24 + DB $07 + DB $9E + DB $1E + DB $9E + DB $1F + DB $9E + DB $20 + DB $9E + DB $21 + DB $9E + DB $22 + DB $9E + DB $23 + DB $9E + DB $24 + DB $12 + DB $AE + DB $1E + DB $AF + DB $1E + DB $B0 + DB $1E + DB $B1 + DB $1E + DB $AD + DB $1F + DB $B2 + DB $1F + DB $AD + DB $20 + DB $B2 + DB $20 + DB $AD + DB $21 + DB $B2 + DB $21 + DB $AD + DB $22 + DB $B2 + DB $22 + DB $AD + DB $23 + DB $B2 + DB $23 + DB $AE + DB $24 + DB $AF + DB $24 + DB $B0 + DB $24 + DB $B1 + DB $24 + DB $0D + DB $BF + DB $1E + DB $C0 + DB $1E + DB $C1 + DB $1E + DB $BF + DB $1F + DB $C2 + DB $1F + DB $BF + DB $20 + DB $C2 + DB $20 + DB $BF + DB $21 + DB $C0 + DB $21 + DB $C1 + DB $21 + DB $BF + DB $22 + DB $BF + DB $23 + DB $BF + DB $24 + DB $0B + DB $D0 + DB $1E + DB $D1 + DB $1E + DB $D2 + DB $1E + DB $D0 + DB $1F + DB $D0 + DB $20 + DB $D0 + DB $21 + DB $D0 + DB $22 + DB $D0 + DB $23 + DB $D0 + DB $24 + DB $D1 + DB $24 + DB $D2 + DB $24 + DB $0B + DB $E1 + DB $1E + DB $E2 + DB $1E + DB $E3 + DB $1E + DB $E3 + DB $1F + DB $E3 + DB $20 + DB $E3 + DB $21 + DB $E3 + DB $22 + DB $E3 + DB $23 + DB $E3 + DB $24 + DB $E2 + DB $24 + DB $E1 + DB $24 + DB $06 + DB $F0 + DB $1E + DB $F1 + DB $1F + DB $F2 + DB $20 + DB $F3 + DB $21 + DB $F4 + DB $22 + DB $F5 + DB $23 + DB $3F + DB $02 + DB $2E + DB $03 + DB $2E + DB $04 + DB $2E + DB $02 + DB $2F + DB $02 + DB $30 + DB $02 + DB $31 + DB $02 + DB $32 + DB $03 + DB $32 + DB $04 + DB $32 + DB $07 + DB $2E + DB $08 + DB $2E + DB $06 + DB $2F + DB $09 + DB $2F + DB $06 + DB $30 + DB $09 + DB $30 + DB $06 + DB $31 + DB $09 + DB $31 + DB $07 + DB $32 + DB $08 + DB $32 + DB $0B + DB $2F + DB $0B + DB $2F + DB $0B + DB $30 + DB $0B + DB $31 + DB $0B + DB $32 + DB $0C + DB $2E + DB $0D + DB $2E + DB $0E + DB $2F + DB $0E + DB $30 + DB $0E + DB $31 + DB $0E + DB $32 + DB $10 + DB $2E + DB $11 + DB $2E + DB $12 + DB $2E + DB $11 + DB $2F + DB $11 + DB $30 + DB $11 + DB $31 + DB $11 + DB $32 + DB $14 + DB $2E + DB $15 + DB $2E + DB $14 + DB $2F + DB $16 + DB $2F + DB $14 + DB $30 + DB $15 + DB $30 + DB $14 + DB $31 + DB $16 + DB $31 + DB $14 + DB $32 + DB $16 + DB $32 + DB $19 + DB $2E + DB $1A + DB $2E + DB $18 + DB $2F + DB $18 + DB $30 + DB $18 + DB $31 + DB $19 + DB $32 + DB $1A + DB $32 + DB $1B + DB $2F + DB $1B + DB $30 + DB $1B + DB $31 + DB $1D + DB $2E + DB $1D + DB $2F + DB $1D + DB $30 + DB $1D + DB $31 + DB $1D + DB $32 + DB $1E + DB $32 + DB $10 + DB $29 + DB $31 + DB $28 + DB $32 + DB $2A + DB $32 + DB $27 + DB $33 + DB $2B + DB $33 + DB $27 + DB $34 + DB $2B + DB $34 + DB $27 + DB $35 + DB $28 + DB $35 + DB $29 + DB $35 + DB $2A + DB $35 + DB $2B + DB $35 + DB $27 + DB $36 + DB $2B + DB $36 + DB $27 + DB $37 + DB $2B + DB $37 + DB $0F + DB $39 + DB $31 + DB $3A + DB $31 + DB $3B + DB $31 + DB $38 + DB $32 + DB $3C + DB $32 + DB $38 + DB $33 + DB $39 + DB $34 + DB $3A + DB $34 + DB $3B + DB $34 + DB $3C + DB $35 + DB $3C + DB $36 + DB $3B + DB $37 + DB $3A + DB $37 + DB $39 + DB $37 + DB $38 + DB $36 + DB $14 + DB $49 + DB $31 + DB $4A + DB $31 + DB $4B + DB $31 + DB $4C + DB $31 + DB $49 + DB $32 + DB $4D + DB $32 + DB $49 + DB $32 + DB $4D + DB $32 + DB $49 + DB $33 + DB $4D + DB $33 + DB $49 + DB $34 + DB $4D + DB $34 + DB $49 + DB $35 + DB $4D + DB $35 + DB $49 + DB $36 + DB $4D + DB $36 + DB $49 + DB $37 + DB $4A + DB $37 + DB $4B + DB $37 + DB $4C + DB $37 + DB $0C + DB $5A + DB $31 + DB $5B + DB $31 + DB $5C + DB $31 + DB $5D + DB $31 + DB $5A + DB $32 + DB $5A + DB $33 + DB $5A + DB $34 + DB $5B + DB $34 + DB $5C + DB $34 + DB $5A + DB $35 + DB $5A + DB $36 + DB $5A + DB $37 + DB $0D + DB $6C + DB $31 + DB $6D + DB $31 + DB $6E + DB $31 + DB $6B + DB $32 + DB $6B + DB $33 + DB $6B + DB $34 + DB $6B + DB $35 + DB $6D + DB $35 + DB $6E + DB $35 + DB $6B + DB $36 + DB $6E + DB $36 + DB $6C + DB $37 + DB $6D + DB $37 + DB $11 + DB $7D + DB $31 + DB $80 + DB $31 + DB $7D + DB $32 + DB $7D + DB $32 + DB $80 + DB $32 + DB $7D + DB $33 + DB $80 + DB $33 + DB $7D + DB $34 + DB $7E + DB $34 + DB $7F + DB $34 + DB $80 + DB $34 + DB $7D + DB $35 + DB $80 + DB $35 + DB $7D + DB $36 + DB $80 + DB $36 + DB $7D + DB $37 + DB $80 + DB $37 + DB $0A + DB $92 + DB $31 + DB $92 + DB $32 + DB $92 + DB $33 + DB $92 + DB $34 + DB $92 + DB $35 + DB $92 + DB $36 + DB $91 + DB $37 + DB $90 + DB $37 + DB $8F + DB $37 + DB $8E + DB $36 + DB $0E + DB $9E + DB $31 + DB $A2 + DB $31 + DB $9E + DB $32 + DB $A1 + DB $32 + DB $9E + DB $33 + DB $A0 + DB $33 + DB $9E + DB $34 + DB $9F + DB $34 + DB $9E + DB $35 + DB $A0 + DB $35 + DB $9E + DB $36 + DB $A1 + DB $36 + DB $9E + DB $37 + DB $A2 + DB $37 + DB $0B + DB $AF + DB $31 + DB $AF + DB $32 + DB $AF + DB $33 + DB $AF + DB $34 + DB $AF + DB $35 + DB $AF + DB $36 + DB $AF + DB $37 + DB $B0 + DB $37 + DB $B1 + DB $37 + DB $B2 + DB $37 + DB $B3 + DB $37 + DB $04 + DB $C2 + DB $33 + DB $C2 + DB $35 + DB $C2 + DB $36 + DB $C1 + DB $37 + DB $03 + DB $D3 + DB $33 + DB $D3 + DB $34 + DB $D3 + DB $35 + DB $37 + DB $E0 + DB $2E + DB $E0 + DB $2F + DB $E0 + DB $30 + DB $E0 + DB $31 + DB $E0 + DB $32 + DB $E1 + DB $2E + DB $E2 + DB $2F + DB $E1 + DB $30 + DB $E2 + DB $31 + DB $E2 + DB $32 + DB $E4 + DB $2E + DB $E4 + DB $2F + DB $E4 + DB $30 + DB $E4 + DB $31 + DB $E4 + DB $32 + DB $E5 + DB $2E + DB $E6 + DB $2E + DB $E5 + DB $30 + DB $E5 + DB $32 + DB $E6 + DB $32 + DB $E8 + DB $2E + DB $E9 + DB $2E + DB $EA + DB $2E + DB $E9 + DB $2F + DB $E9 + DB $30 + DB $E9 + DB $31 + DB $E9 + DB $32 + DB $EC + DB $2E + DB $EE + DB $2E + DB $EC + DB $2F + DB $EE + DB $2F + DB $EC + DB $30 + DB $EE + DB $30 + DB $EC + DB $31 + DB $EE + DB $31 + DB $ED + DB $32 + DB $F0 + DB $2E + DB $F1 + DB $2E + DB $F0 + DB $2F + DB $F2 + DB $2F + DB $F0 + DB $30 + DB $F1 + DB $30 + DB $F0 + DB $31 + DB $F2 + DB $31 + DB $F0 + DB $32 + DB $F2 + DB $32 + DB $F4 + DB $2F + DB $F4 + DB $30 + DB $F4 + DB $31 + DB $F4 + DB $32 + DB $F5 + DB $2E + DB $F6 + DB $2F + DB $F6 + DB $30 + DB $F6 + DB $31 + DB $F6 + DB $32 + DB $2A + DB $0C + DB $41 + DB $0D + DB $41 + DB $0E + DB $41 + DB $0C + DB $42 + DB $0C + DB $43 + DB $0D + DB $43 + DB $0E + DB $43 + DB $0E + DB $44 + DB $0E + DB $45 + DB $0D + DB $45 + DB $0C + DB $45 + DB $10 + DB $41 + DB $12 + DB $41 + DB $10 + DB $42 + DB $12 + DB $42 + DB $10 + DB $43 + DB $11 + DB $43 + DB $12 + DB $43 + DB $10 + DB $44 + DB $12 + DB $44 + DB $10 + DB $45 + DB $12 + DB $45 + DB $15 + DB $41 + DB $15 + DB $42 + DB $15 + DB $43 + DB $15 + DB $44 + DB $15 + DB $45 + DB $18 + DB $41 + DB $19 + DB $41 + DB $1A + DB $41 + DB $18 + DB $42 + DB $18 + DB $43 + DB $19 + DB $43 + DB $18 + DB $44 + DB $18 + DB $45 + DB $1C + DB $41 + DB $1D + DB $41 + DB $1E + DB $41 + DB $1D + DB $42 + DB $1D + DB $43 + DB $1D + DB $44 + DB $1D + DB $45 + DB $0F + DB $2F + DB $44 + DB $30 + DB $44 + DB $31 + DB $44 + DB $32 + DB $44 + DB $33 + DB $44 + DB $33 + DB $45 + DB $32 + DB $46 + DB $31 + DB $47 + DB $30 + DB $48 + DB $2F + DB $49 + DB $2F + DB $4A + DB $30 + DB $4A + DB $31 + DB $4A + DB $32 + DB $4A + DB $33 + DB $4A + DB $0D + DB $40 + DB $44 + DB $44 + DB $44 + DB $40 + DB $45 + DB $44 + DB $45 + DB $41 + DB $46 + DB $43 + DB $46 + DB $42 + DB $47 + DB $41 + DB $48 + DB $43 + DB $48 + DB $40 + DB $49 + DB $44 + DB $49 + DB $40 + DB $4A + DB $44 + DB $4A + DB $0D + DB $52 + DB $44 + DB $53 + DB $44 + DB $54 + DB $44 + DB $51 + DB $45 + DB $55 + DB $45 + DB $51 + DB $46 + DB $51 + DB $47 + DB $51 + DB $48 + DB $51 + DB $49 + DB $52 + DB $4A + DB $53 + DB $4A + DB $54 + DB $4A + DB $55 + DB $49 + DB $0E + DB $62 + DB $44 + DB $66 + DB $44 + DB $62 + DB $45 + DB $62 + DB $45 + DB $66 + DB $45 + DB $62 + DB $46 + DB $66 + DB $46 + DB $62 + DB $47 + DB $66 + DB $47 + DB $62 + DB $48 + DB $66 + DB $48 + DB $63 + DB $49 + DB $65 + DB $49 + DB $64 + DB $4A + DB $14 + DB $74 + DB $44 + DB $75 + DB $44 + DB $76 + DB $44 + DB $77 + DB $44 + DB $74 + DB $45 + DB $78 + DB $45 + DB $74 + DB $46 + DB $78 + DB $46 + DB $74 + DB $47 + DB $75 + DB $47 + DB $76 + DB $47 + DB $77 + DB $47 + DB $74 + DB $48 + DB $78 + DB $48 + DB $74 + DB $49 + DB $78 + DB $49 + DB $74 + DB $4A + DB $75 + DB $4A + DB $76 + DB $4A + DB $77 + DB $4A + DB $11 + DB $84 + DB $44 + DB $84 + DB $45 + DB $84 + DB $46 + DB $84 + DB $47 + DB $84 + DB $48 + DB $84 + DB $49 + DB $84 + DB $4A + DB $85 + DB $46 + DB $86 + DB $47 + DB $87 + DB $48 + DB $88 + DB $48 + DB $88 + DB $49 + DB $88 + DB $4A + DB $88 + DB $44 + DB $88 + DB $45 + DB $88 + DB $46 + DB $88 + DB $47 + DB $12 + DB $95 + DB $44 + DB $95 + DB $45 + DB $95 + DB $46 + DB $95 + DB $47 + DB $95 + DB $48 + DB $95 + DB $49 + DB $95 + DB $4A + DB $96 + DB $45 + DB $97 + DB $46 + DB $97 + DB $47 + DB $98 + DB $45 + DB $99 + DB $44 + DB $99 + DB $45 + DB $99 + DB $46 + DB $99 + DB $47 + DB $99 + DB $48 + DB $99 + DB $49 + DB $99 + DB $4A + DB $03 + DB $A8 + DB $47 + DB $A8 + DB $48 + DB $A7 + DB $49 + DB $01 + DB $B9 + DB $47 + DB $09 + DB $C8 + DB $3E + DB $C9 + DB $3D + DB $CA + DB $3D + DB $CB + DB $3D + DB $CC + DB $3E + DB $CB + DB $3F + DB $CA + DB $40 + DB $CA + DB $41 + DB $CA + DB $43 + DB $2B + DB $DE + DB $41 + DB $DF + DB $41 + DB $E0 + DB $41 + DB $DE + DB $42 + DB $DE + DB $43 + DB $DF + DB $43 + DB $E0 + DB $43 + DB $E0 + DB $44 + DB $E0 + DB $45 + DB $DF + DB $45 + DB $DE + DB $45 + DB $E2 + DB $41 + DB $E2 + DB $42 + DB $E2 + DB $43 + DB $E2 + DB $44 + DB $E2 + DB $45 + DB $E3 + DB $43 + DB $E4 + DB $43 + DB $E4 + DB $41 + DB $E4 + DB $42 + DB $E4 + DB $43 + DB $E4 + DB $44 + DB $E4 + DB $45 + DB $E7 + DB $41 + DB $E7 + DB $42 + DB $E7 + DB $43 + DB $E7 + DB $44 + DB $E7 + DB $45 + DB $EA + DB $41 + DB $EB + DB $41 + DB $EC + DB $41 + DB $EA + DB $42 + DB $EA + DB $43 + DB $EA + DB $44 + DB $EA + DB $45 + DB $EB + DB $43 + DB $EE + DB $41 + DB $EF + DB $41 + DB $F0 + DB $41 + DB $EF + DB $42 + DB $EF + DB $43 + DB $EF + DB $44 + DB $EF + DB $45 + DB $3F + DB $02 + DB $51 + DB $03 + DB $51 + DB $02 + DB $52 + DB $02 + DB $53 + DB $02 + DB $54 + DB $02 + DB $55 + DB $03 + DB $55 + DB $06 + DB $51 + DB $05 + DB $52 + DB $07 + DB $52 + DB $05 + DB $53 + DB $06 + DB $53 + DB $07 + DB $53 + DB $05 + DB $54 + DB $07 + DB $54 + DB $05 + DB $55 + DB $07 + DB $55 + DB $09 + DB $51 + DB $0A + DB $51 + DB $09 + DB $52 + DB $09 + DB $53 + DB $09 + DB $54 + DB $09 + DB $55 + DB $0A + DB $53 + DB $0B + DB $52 + DB $0D + DB $51 + DB $0E + DB $51 + DB $0D + DB $52 + DB $0D + DB $53 + DB $0E + DB $53 + DB $0E + DB $54 + +*--- End of code diff --git a/diag/DIAG18B2.S b/diag/DIAG18B2.S new file mode 100644 index 0000000..14cd059 --- /dev/null +++ b/diag/DIAG18B2.S @@ -0,0 +1,17 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + +*--------------------------------------------------------- +* EPROM18B.BIN +* Code and data at $D000..$DFFF +* Second bank +*--------------------------------------------------------- + +* DS $1000,$FF + DS $1000 + +*--- End of code diff --git a/diag/DIAG19B.S b/diag/DIAG19B.S new file mode 100644 index 0000000..9732c5f --- /dev/null +++ b/diag/DIAG19B.S @@ -0,0 +1,2046 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + +*--------------------------------------------------------- +* EPROM189.BIN +* Code and data at $E000..$E7FF +*--------------------------------------------------------- + +LE000 DB $0E + DB $55 + DB $0D +LE003 DB $55 + DB $02 + DB $57 + DB $02 + DB $58 + DB $02 + DB $59 + DB $02 + DB $5A + DB $02 + DB $5B + DB $03 + DB $5B + DB $06 + DB $57 + DB $05 + DB $58 + DB $07 + DB $58 + DB $05 + DB $59 + DB $07 + DB $59 + DB $05 + DB $5A + DB $07 + DB $5A + DB $06 + DB $5B + DB $09 + DB $57 + DB $0A + DB $57 + DB $09 + DB $58 + DB $09 + DB $59 + DB $09 + DB $5A + DB $09 + DB $5B + DB $0A + DB $5B + DB $0C + DB $57 + DB $0C + DB $58 + DB $0C + DB $59 + DB $0C + DB $5A + DB $0C + DB $5B + DB $0E + DB $58 + DB $0D + DB $59 + DB $0E + DB $5A + DB $0E + DB $5B + DB $09 + DB $15 + DB $53 + DB $16 + DB $52 + DB $17 + DB $51 + DB $18 + DB $51 + DB $19 + DB $52 + DB $1A + DB $53 + DB $1B + DB $53 + DB $1C + DB $52 + DB $1D + DB $51 + DB $1E + DB $51 + DB $0D + DB $BB + DB $56 + DB $BC + DB $56 + DB $BD + DB $56 + DB $BE + DB $56 + DB $BF + DB $56 + DB $C0 + DB $56 + DB $C1 + DB $56 + DB $C2 + DB $56 + DB $C3 + DB $56 + DB $C4 + DB $56 + DB $C5 + DB $56 + DB $BC + DB $55 + DB $BC + DB $57 + DB $0D + DB $CC + DB $56 + DB $CD + DB $56 + DB $CE + DB $56 + DB $CF + DB $56 + DB $D0 + DB $56 + DB $D1 + DB $56 + DB $D2 + DB $56 + DB $D3 + DB $56 + DB $D4 + DB $56 + DB $D5 + DB $56 + DB $D6 + DB $56 + DB $D5 + DB $55 + DB $D5 + DB $57 + DB $0D + DB $E2 + DB $51 + DB $E2 + DB $52 + DB $E2 + DB $53 + DB $E2 + DB $54 + DB $E2 + DB $55 + DB $E2 + DB $56 + DB $E2 + DB $57 + DB $E2 + DB $58 + DB $E2 + DB $59 + DB $E2 + DB $5A + DB $E2 + DB $5B + DB $E3 + DB $5A + DB $E1 + DB $5A + DB $0D + DB $F3 + DB $5B + DB $F3 + DB $5A + DB $F3 + DB $59 + DB $F3 + DB $58 + DB $F3 + DB $57 + DB $F3 + DB $56 + DB $F3 + DB $55 + DB $F3 + DB $54 + DB $F3 + DB $53 + DB $F3 + DB $52 + DB $F3 + DB $51 + DB $F4 + DB $52 + DB $F2 + DB $52 + DB $26 + DB $2B + DB $55 + DB $2D + DB $55 + DB $2F + DB $55 + DB $2C + DB $56 + DB $2E + DB $56 + DB $2B + DB $57 + DB $2D + DB $57 + DB $2F + DB $57 + DB $2A + DB $58 + DB $2C + DB $58 + DB $2E + DB $58 + DB $2B + DB $59 + DB $2D + DB $59 + DB $2F + DB $59 + DB $2A + DB $54 + DB $2B + DB $54 + DB $2C + DB $54 + DB $2D + DB $54 + DB $2E + DB $54 + DB $2F + DB $54 + DB $30 + DB $54 + DB $2A + DB $55 + DB $2A + DB $56 + DB $2A + DB $57 + DB $2A + DB $58 + DB $2A + DB $59 + DB $2A + DB $5A + DB $2B + DB $5A + DB $2C + DB $5A + DB $2D + DB $5A + DB $2E + DB $5A + DB $2F + DB $5A + DB $30 + DB $5A + DB $30 + DB $59 + DB $30 + DB $58 + DB $30 + DB $57 + DB $30 + DB $56 + DB $30 + DB $55 + DB $27 + DB $40 + DB $52 + DB $41 + DB $52 + DB $40 + DB $51 + DB $42 + DB $51 + DB $41 + DB $50 + DB $43 + DB $50 + DB $42 + DB $4F + DB $43 + DB $4F + DB $3D + DB $53 + DB $3E + DB $53 + DB $3F + DB $53 + DB $40 + DB $53 + DB $41 + DB $53 + DB $42 + DB $53 + DB $3C + DB $54 + DB $3B + DB $55 + DB $3B + DB $56 + DB $3B + DB $57 + DB $3B + DB $58 + DB $3B + DB $59 + DB $3B + DB $5A + DB $3C + DB $5B + DB $3D + DB $5C + DB $3E + DB $5C + DB $3F + DB $5C + DB $40 + DB $5C + DB $41 + DB $5C + DB $42 + DB $5C + DB $43 + DB $5B + DB $44 + DB $5A + DB $44 + DB $59 + DB $44 + DB $58 + DB $43 + DB $58 + DB $42 + DB $57 + DB $42 + DB $56 + DB $42 + DB $55 + DB $43 + DB $55 + DB $43 + DB $54 + DB $5B + DB $AF + DB $52 + DB $B0 + DB $52 + DB $AF + DB $51 + DB $B1 + DB $51 + DB $B0 + DB $50 + DB $B2 + DB $50 + DB $B1 + DB $4F + DB $B2 + DB $4F + DB $AC + DB $53 + DB $AD + DB $53 + DB $AE + DB $53 + DB $AF + DB $53 + DB $B0 + DB $53 + DB $B1 + DB $53 + DB $AB + DB $54 + DB $AC + DB $54 + DB $AD + DB $54 + DB $AE + DB $54 + DB $AF + DB $54 + DB $B0 + DB $54 + DB $B1 + DB $54 + DB $B2 + DB $54 + DB $AA + DB $55 + DB $AB + DB $55 + DB $AC + DB $55 + DB $AD + DB $55 + DB $AE + DB $55 + DB $AF + DB $55 + DB $B0 + DB $55 + DB $B1 + DB $55 + DB $B2 + DB $55 + DB $AA + DB $56 + DB $AB + DB $56 + DB $AC + DB $56 + DB $AD + DB $56 + DB $AE + DB $56 + DB $AF + DB $56 + DB $B0 + DB $56 + DB $B1 + DB $56 + DB $AA + DB $57 + DB $AB + DB $57 + DB $AC + DB $57 + DB $AD + DB $57 + DB $AE + DB $57 + DB $AF + DB $57 + DB $B0 + DB $57 + DB $B1 + DB $57 + DB $AA + DB $58 + DB $AB + DB $58 + DB $AC + DB $58 + DB $AD + DB $58 + DB $AE + DB $58 + DB $AF + DB $58 + DB $B0 + DB $58 + DB $B1 + DB $58 + DB $B2 + DB $58 + DB $B3 + DB $58 + DB $AA + DB $59 + DB $AB + DB $59 + DB $AC + DB $59 + DB $AD + DB $59 + DB $AE + DB $59 + DB $AF + DB $59 + DB $B0 + DB $59 + DB $B1 + DB $59 + DB $B2 + DB $59 + DB $B3 + DB $59 + DB $AA + DB $5A + DB $AB + DB $5A + DB $AC + DB $5A + DB $AD + DB $5A + DB $AE + DB $5A + DB $AF + DB $5A + DB $B0 + DB $5A + DB $B1 + DB $5A + DB $B2 + DB $5A + DB $B3 + DB $5A + DB $AB + DB $5B + DB $AC + DB $5B + DB $AD + DB $5B + DB $AE + DB $5B + DB $AF + DB $5B + DB $B0 + DB $5B + DB $B1 + DB $5B + DB $B2 + DB $5B + DB $AC + DB $5C + DB $AD + DB $5C + DB $AE + DB $5C + DB $AF + DB $5C + DB $B0 + DB $5C + DB $B1 + DB $5C + DB $49 + DB $68 + DB $54 + DB $69 + DB $53 + DB $6A + DB $53 + DB $6B + DB $53 + DB $6C + DB $54 + DB $68 + DB $55 + DB $69 + DB $56 + DB $6A + DB $56 + DB $6B + DB $56 + DB $6C + DB $57 + DB $6C + DB $58 + DB $6B + DB $59 + DB $6A + DB $59 + DB $69 + DB $59 + DB $68 + DB $58 + DB $6F + DB $53 + DB $70 + DB $53 + DB $71 + DB $53 + DB $72 + DB $54 + DB $72 + DB $55 + DB $71 + DB $56 + DB $70 + DB $56 + DB $6F + DB $56 + DB $6F + DB $54 + DB $6F + DB $55 + DB $6F + DB $56 + DB $6F + DB $57 + DB $6F + DB $58 + DB $6F + DB $59 + DB $77 + DB $53 + DB $76 + DB $54 + DB $78 + DB $54 + DB $75 + DB $55 + DB $79 + DB $55 + DB $75 + DB $56 + DB $79 + DB $56 + DB $75 + DB $57 + DB $76 + DB $57 + DB $77 + DB $57 + DB $78 + DB $57 + DB $79 + DB $57 + DB $75 + DB $58 + DB $79 + DB $58 + DB $75 + DB $59 + DB $79 + DB $59 + DB $7C + DB $54 + DB $7D + DB $53 + DB $7E + DB $53 + DB $7F + DB $53 + DB $80 + DB $54 + DB $7C + DB $55 + DB $7C + DB $56 + DB $7C + DB $57 + DB $7C + DB $58 + DB $7D + DB $59 + DB $7E + DB $59 + DB $7F + DB $59 + DB $80 + DB $58 + DB $83 + DB $53 + DB $83 + DB $54 + DB $83 + DB $55 + DB $83 + DB $56 + DB $83 + DB $57 + DB $83 + DB $58 + DB $83 + DB $59 + DB $84 + DB $53 + DB $85 + DB $53 + DB $86 + DB $53 + DB $84 + DB $56 + DB $85 + DB $56 + DB $84 + DB $59 + DB $85 + DB $59 + DB $86 + DB $59 +LE2A5 DB $9B + DB $B1 + DB $B2 + DB $B3 + DB $B4 + DB $B5 + DB $B6 + DB $B7 + DB $B8 + DB $B9 + DB $B0 + DB $AD + DB $BD + DB $FF + DB $89 + DB $D1 + DB $D7 + DB $C5 + DB $D2 + DB $D4 + DB $D9 + DB $D5 + DB $C9 + DB $CF + DB $D0 + DB $DB + DB $DD + DB $DC + DB $C1 + DB $D3 + DB $C4 + DB $C6 + DB $C7 + DB $C8 + DB $CA + DB $CB + DB $CC + DB $BB + DB $A7 + DB $8D + DB $DA + DB $D8 + DB $C3 + DB $D6 + DB $C2 + DB $CE + DB $CD + DB $AC + DB $AE + DB $BF + DB $FE + DB $88 + DB $95 + DB $8A + DB $8B + DB $A0 +LE2DD DB $76 + DB $D8 + DB $B3 + DB $D8 + DB $CC + DB $D8 + DB $E5 + DB $D8 + DB $00 + DB $D9 + DB $1D + DB $D9 + DB $3C + DB $D9 + DB $5F + DB $D9 + DB $76 + DB $D9 + DB $99 + DB $D9 + DB $B8 + DB $D9 + DB $DD + DB $D9 + DB $EC + DB $D9 + DB $05 + DB $DA + DB $76 + DB $DA + DB $AD + DB $DA + DB $D0 + DB $DA + DB $F5 + DB $DA + DB $14 + DB $DB + DB $39 + DB $DB + DB $50 + DB $DB + DB $65 + DB $DB + DB $84 + DB $DB + DB $93 + DB $DB + DB $B8 + DB $DB + DB $D3 + DB $DB + DB $EA + DB $DB + DB $01 + DB $DC + DB $8D + DB $DC + DB $AE + DB $DC + DB $CD + DB $DC + DB $F6 + DB $DC + DB $0F + DB $DD + DB $2A + DB $DD + DB $4D + DB $DD + DB $62 + DB $DD + DB $7F + DB $DD + DB $96 + DB $DD + DB $9F + DB $DD + DB $A6 + DB $DD + DB $6A + DB $DE + DB $89 + DB $DE + DB $A4 + DB $DE + DB $BF + DB $DE + DB $DC + DB $DE + DB $05 + DB $DF + DB $28 + DB $DF + DB $4D + DB $DF + DB $54 + DB $DF + DB $57 + DB $DF + DB $40 + DB $E0 + DB $55 + DB $E0 + DB $70 + DB $E0 + DB $8B + DB $E0 + DB $A6 + DB $E0 + DB $12 + DB $E2 + DB $0E + DB $E1 + DB $5B + DB $E1 + DB $15 + DB $DE + DB $6A + DB $DF + DB $C1 + DB $DF + DB $C1 + DB $E0 + DB $0E + DB $DC + +*--------------------------------------------------------- +* +* Command: C - Character set test +* +*--------------------------------------------------------- + +CHRTST JSR HOME + LDA #$28 + STA $08 + LDA #$41 + STA $07 + LDX #$00 +PL1 LDA L1MSG,X + BEQ CL1 + JSR COUT + INX + BNE PL1 +CL1 JSR CROUT + LDX #$00 +CHR TXA + JSR COUT + INX + DEC $07 + BEQ LE389 + DEC $08 + BNE CHR + DEC $07 + BNE CHR +LE389 JSR CROUT + LDA #$28 + STA $08 + LDA #$41 + STA $07 + LDX #$00 +LE396 LDA L2MSG,X + BEQ LE3A1 + JSR COUT + INX + BNE LE396 +LE3A1 JSR CROUT + LDX #$40 +LE3A6 TXA + JSR COUT + INX + DEC $07 + BEQ LE3B7 + DEC $08 + BNE LE3A6 + DEC $07 + BNE LE3A6 +LE3B7 JSR CROUT + LDA #$28 + STA $08 + LDA #$20 + STA $07 + LDX #$00 +LE3C4 LDA L3MSG,X + BEQ LE3CF + JSR COUT + INX + BNE LE3C4 +LE3CF JSR CROUT + LDX #$C0 +LE3D4 TXA + JSR COUT + INX + DEC $07 + BEQ LE3E5 + DEC $08 + BNE LE3D4 + DEC $07 + BNE LE3D4 +LE3E5 LDA #$20 + STA $07 + LDX #$A0 +LE3EB TXA + JSR COUT + INX + DEC $07 + BNE LE3EB + JSR CROUT + LDA #$28 + STA $08 + LDA #$40 + STA $07 + LDX #$00 +LE401 LDA L4MSG,X + BEQ LE40C + JSR COUT + INX + BNE LE401 +LE40C JSR CROUT + LDA #$A0 + JSR COUT + JSR COUT + JSR COUT + JSR COUT + LDX #$E1 +LE41F TXA + JSR COUT + INX + BEQ LE431 + DEC $08 + BNE LE41F + DEC $07 + BNE LE41F + JMP LE41F + +LE431 LDX #$00 +LE433 LDA PRESSSPC,X + BEQ LE43E + JSR COUT + INX + BNE LE433 +LE43E LDA KBD + CMP #$A0 + BNE LE43E + BIT KBDSTROBE + JMP TSTS + +LE44B LDA KBD + CMP #$A0 + BNE LE45B + LDY #$00 + LDA #$08 + STA (ROMCTRL),Y + JMP INI +LE45B RTS + +DELAY DEX + BNE DELAY + DEY + BNE DELAY +DLY DEX + BNE DLY + RTS + +PAUSE JSR DELAY + JSR DELAY + JSR DELAY + JSR DELAY + JSR DELAY + RTS + +*--------------------------------------------------------- +* +* Command: R - Read only memory test (aka DO CX) +* +*--------------------------------------------------------- + +ROMTST LDA #L849B + STA $03 + LDA #>LE49B + STA $05 + LDA #LC100 + STA $03 + LDA #CXCHKSUM + BNE LE4BE + INY + BNE LE4AD +LE4BE CPX #>LE000 + BEQ LE4C4 + BNE LE4AD +LE4C4 CMP CXCHKSUM + BEQ LE4E5 + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + LDX #$00 +LE4D1 LDA CXBADMSG,X + BEQ LE4DC + JSR COUT + INX + BNE LE4D1 +LE4DC JSR BELL + JSR BELL +LE4E2 JMP LE4E2 + +LE4E5 LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + LDA LOOPFLG + BEQ LE4FC + LDX #$00 +LE4F1 LDA CXOKMSG,X + BEQ LE4FC + JSR COUT + INX + BNE LE4F1 +LE4FC LDA #$10 + LDY #$00 + STA (ROMCTRL),Y + LDY #$00 + TYA +LE505 CLC + ADC ($02),Y + INY + BEQ LE516 + CPY #$FF + BNE LE505 + LDX $03 + CPX #>LF800-1 + BNE LE505 + INY +LE516 INC $03 + BNE LE505 + CMP LF7FF + BEQ LE53B + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + LDX #$00 +LE527 LDA FXBADMSG,X + BEQ LE532 + JSR COUT + INX + BNE LE527 +LE532 JSR BELL + JSR BELL +LE538 JMP LE538 + +LE53B STA SETSLOTCXROM + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + LDA #$01 + STA ROMFLG + LDA LOOPFLG + BEQ LE57D + LDX #$00 +LE54E LDA FXOKMSG,X + BEQ LE559 + JSR COUT + INX + BNE LE54E + +LE559 LDA LOOPFLG + BEQ LE574 + LDX #$00 +LE55F LDA LPMSG,X + BEQ LE56A + JSR COUT + INX + BNE LE55F +LE56A LDA $0B + JSR PRBYTE + LDA $0A + JSR PRBYTE +LE574 JSR PAUSE + JSR LE44B + JMP RAMTST +LE57D JMP TSTS + +* +* End of relocated code +* + +*--------------------------------------------------------- +* +* Command: P - Processor test +* +*--------------------------------------------------------- + + org $E580 + +CPUTST LDX #$00 + TXA + CMP #$00 + BEQ LE58A + JMP LE877 + +LE58A LDA #$00 + ADC #$80 + ADC #$80 + CMP #$01 + BEQ LE597 + JMP LE877 + +LE597 LDY #$FF + TYA + CMP #$FF + BEQ LE5A1 + JMP LE877 + +LE5A1 LDA |L0000,Y + STA |L0000,Y + CMP |L0000,Y + BEQ LE5AF + JMP LE877 + +LE5AF LDA #$00 + SBC #$80 + CMP #$80 + BEQ LE5BA + JMP LE877 + +LE5BA LDA #$00 + ROL + CMP #$01 + BEQ LE5C4 + JMP LE877 + +LE5C4 LDA #$00 + STA $00 + INC $00 + LDA $00 + CMP #$01 + BEQ LE5D3 + JMP LE877 + +LE5D3 LDA #$00 + ROR + CMP #$80 + BEQ LE5DD + JMP LE877 + +LE5DD LDA #$00 + CLC + ADC #$80 + ADC #$80 + CMP #$00 + BEQ LE5EB + JMP LE877 + +LE5EB LDA #$01 + ASL + CMP #$02 + BEQ LE5F5 + JMP LE877 + +LE5F5 LDA #$02 + LSR + CMP #$01 + BEQ LE5FF + JMP LE877 + +LE5FF LDA #$01 + BNE LE606 + JMP LE877 + +LE606 LDA #$00 + PHP + LDA #$80 + PLP + BEQ LE611 + JMP LE877 + +LE611 LDA #$FF + AND #$08 + CMP #$08 + BEQ LE61C + JMP LE877 + +LE61C LDA #$08 + STA $00 + LDA #$FF + AND $00 + CMP #$08 + BEQ LE62B + JMP LE877 + +LE62B SEC + BCS LE631 + JMP LE877 + +LE631 CLC + BCC LE637 + JMP LE877 + +LE637 LDX #$00 + INX + CPX #$01 + BEQ LE641 + JMP LE877 + +LE641 LDY #$00 + INY + CPY #$01 + BEQ LE64B + JMP LE877 + +LE64B LDA #$10 + TAY + CPY #$10 + BEQ LE655 + JMP LE877 + +LE655 LDA #$20 + TAX + CPX #$20 + BEQ LE65F + JMP LE877 + +LE65F LDY #$00 + STY $00 + LDX $00 + CPX #$00 + BEQ LE66C + JMP LE877 + +LE66C LDX #$01 + STX $00 + LDY $00 + CPY #$01 + BEQ LE679 + JMP LE877 + +LE679 LDA #$22 + STA $00 + LDX #$23 + DEX + CPX $00 + BEQ LE687 + JMP LE877 + +LE687 LDA #$23 + STA $00 + LDY #$24 + DEY + CMP $00 + BEQ LE695 + JMP LE877 + +LE695 LDA #$09 + STA $07 + SED + CLC + LDA $07 + ADC #$01 + STA $07 + CLD + LDA $07 + CMP #$10 + BEQ LE6AB + JMP LE877 + +LE6AB LDA #$55 + STA $07 + LDA #$AA + EOR $07 + CMP #$FF + BEQ LE6BA + JMP LE877 + +LE6BA LDA #$00 + ORA #$F0 + CMP #$F0 + BEQ LE6C5 + JMP LE877 + +LE6C5 LDA #$00 + CLC + SBC #$01 + BMI LE6CF + JMP LE877 + +LE6CF LDX #$40 + STX $07 + BIT $07 + BVS LE6DA + JMP LE877 + +LE6DA LDX #$40 + STX $07 + ASL $07 + BIT $07 + BVC LE6E7 + JMP LE877 + +LE6E7 SEI + PHP + PLA + AND #$04 + BNE LE6F1 + JMP LE877 + +LE6F1 CLI + PHP + PLA + AND #$04 + BEQ LE6FB + JMP LE877 + +LE6FB LDA #L8720 + STA $03 + LDA #LE720 + STA $04 + LDX #$02 + LDY #$00 +LE70F LDA ($04),Y + STA ($02),Y + INY + BNE LE70F + INC $05 + INC $03 + DEX + BNE LE70F + JMP L8720 + +* +* Code is relocated at $8720 +* + +LE720 = * + org L8720 + + LDX #$00 + STA SETSLOTCXROM + STA SETINTC3ROM +LE728 LDA MMUADR,X + EOR LE88D,X + BPL LE732 + BMI LE78A +LE732 INX + CPX #$08 + BNE LE728 + STA LCBANK1 + BIT RDLCBNK2 + STA ROMIN2 + BPL LE744 + BMI LE78A +LE744 INX + STA RDBANK2 + BIT RDLCRAM + STA RDROM2 + BMI LE752 + BPL LE78A +LE752 INX + STA WRCARDRAM + BIT RDRAMWRT + STA WRMAINRAM + BMI LE760 + BPL LE78A +LE760 INX + STA SETALTZP + BIT RDALTZP + STA SETSTDZP + BMI LE76E + BPL LE78A +LE76E INX + STA SETSLOTC3ROM + BIT RDC3ROM + STA SETINTC3ROM + BMI LE77C + BPL LE78A +LE77C INX + STA SET80COL + BIT RD80COL + STA KBD + BMI LE7A9 + BPL LE78A +LE78A LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + STA SETSLOTCXROM + JSR BELL + JSR BELL + LDX #$00 +LE79B LDA MMUBAD,X + BEQ LE7A6 + JSR COUT + INX + BNE LE79B +LE7A6 JMP LE7A6 + +LE7A9 LDX #$00 +LE7AB LDA IOUADDR,X + EOR LE896,X + BPL LE7B5 + BMI LE80B +LE7B5 INX + CPX #$06 + BNE LE7AB + STA SET80VID + BIT RD80VID + STA CLR80VID + BMI LE7C7 + BPL LE80B +LE7C7 INX + STA SETALTCHAR + BIT ALTCHARSET + STA CLRALTCHAR + BMI LE7D5 + BPL LE80B +LE7D5 INX + STA TXTCLR + BIT RDTEXT + STA TXTSET + BPL LE7E3 + BMI LE80B +LE7E3 INX + STA TXTPAGE2 + BIT RDPAGE2 + STA TXTPAGE1 + BMI LE7F1 + BPL LE80B +LE7F1 INX + STA MIXSET + BIT RDMIX + STA MIXCLR + BMI LE7FF + BPL LE80B +LE7FF INX + STA HIRES + BIT RDHIRES + STA LORES + BMI LE82A + +LE80B LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + STA SETSLOTCXROM + JSR BELL + JSR BELL + LDX #$00 +LE81C LDA IOUBAD,X + BEQ LE827 + JSR COUT + INX + BNE LE81C +LE827 JMP LE827 ; Infinite loop + +LE82A LDA #$08 + STA SETSLOTCXROM + LDY #$00 + STA (ROMCTRL),Y + LDA #$01 + STA CPUFLG + LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + + LDA LOOPFLG + BEQ LE874 + JSR HOME + LDX #$00 +LE846 LDA CPUOK,X + BEQ LE851 + JSR COUT + INX + BNE LE846 +LE851 LDX #$00 +LE853 LDA MMUOK,X + BEQ LE85E + JSR COUT + INX + BNE LE853 +LE85E LDX #$00 +LE860 LDA IOUOK,X + BEQ LE86B + JSR COUT + INX + BNE LE860 +LE86B LDA #$08 + LDY #$00 + STA (ROMCTRL),Y + STA SETSLOTCXROM +LE874 JMP TST0 + +LE877 JSR BELL + JSR BELL + LDX #$00 +LE87F LDA CPUBAD,X + BEQ LE88A + JSR COUT + INX + BNE LE87F +LE88A JMP LE88A ; Infinite loop + +* +* End of relocated code +* + +*--------------------------------------------------------- +* +* All data for the program +* +*--------------------------------------------------------- + + org $E88D + +LE88D DB $80 + DB $00 + DB $00 + DB $00 + DB $00 + DB $00 + DB $00 + DB $00 + DB $80 +LE896 DB $80 + DB $00 + DB $00 + DB $00 + DB $00 + DB $00 + +CXBADMSG ASC 8D8D + ASC "ROM AT MOTHER BOARD LOCATION D8 IS BAD"8D + ASC 00 +FXBADMSG ASC 8D8D + ASC "ROM AT MOTHER BOARD LOCATION D10 IS BAD"8D + ASC 00 +CXOKMSG ASC 8D8D + ASC " ROM AT MOTHER BOARD LOCATION D8 IS OK"00 +FXOKMSG ASC 8D8D + ASC " ROM AT MOTHER BOARD LOCATION D10 IS OK"00 +L1MSG ASC 8D + ASC " THESE TWO LINES SHOULD BE INVERSE"00 +L2MSG ASC 8D8D + ASC " THESE TWO LINES SHOULD BE FLASHING"00 +L3MSG ASC 8D8D + ASC " THESE TWO LINES SHOULD BE NORMAL"00 +L4MSG ASC 8D8D + ASC " THIS LINE SHOULD BE LOWER CASE"00 +PRESSSPC ASC 8D8D8D + ASC " PRESS SPACE BAR TO CONTINUE"8D + ASC 00 +KMSG ASC 8D + ASC "** APPLE ][e KEYBOARD TEST PROGRAM **"8D + ASC " ALARM WILL SOUND AND CORRESPONDING"8D + ASC "CHARACTER WILL FLICKER IF KEY BOUNCES"8D + ASC " CONTROL 'C' WILL EXIT THIS TEST"00 +LRMSG ASC 8D + ASC " MATCH LOW RESOLUTION CHARACTERS"8D + ASC " WITH THOSE ON LORES SYMBOL TABLES"8D + ASC " PRESS SPACE BAR TO CONTINUE"8D + ASC 00 +CTAMSG ASC "CURRENTLY TESTING MEMORY AT $D000-$FFFF"00 +LPMSG ASC 8D8D + ASC " LOOP #"00 +SPFMSG ASC 8D + ASC "SUSPECTED FAILURE AT LOCATION F"00 +HELLO ASC " APPLE ][e DIAGNOSTICS"8D + ASC " 1983 APPLE COMPUTER INC"8D8D + ASC " Enter the Letter of"8D + ASC " the Desired Test"8D8D + ASC "

PROCESSOR TEST"8D + ASC " READ ONLY MEMORY TEST"8D + ASC " RANDOM ACCESS MEMORY TEST"8D + ASC " CHARACTER SET TEST"8D + ASC " KEYBOARD TEST"8D + ASC " VIDEO TESTS"00 +HELLO2 ASC 8D + ASC " LOOP ROM RAM AND PROCESSOR TESTS"8D + ASC " SPEAKER TEST" +ESPACE ASC 8D8D + ASC "SPACE BAR TO RETURN TO MENU"8D + ASC 00 +TMSG ASC 8D + ASC " SPEAKER TEST PLAYS 5 TONES"8D + ASC " INCREMENTING FROM"8D + ASC " LOW TO HIGH PITCH"00 +CPUOK ASC 8D + ASC " MICROPROCESSOR IS OK"00 +CPUBAD ASC 8D8D + ASC " >MICROPROCESSOR IS BAD<"00 +IOUBAD ASC 8D + ASC " >INPUT/OUTPUT UNIT ERROR<"00 +MMUBAD ASC 8D + ASC " >MEMORY MANAGEMENT UNIT ERROR<"00 +MMUOK ASC 8D + ASC " MEMORY MANAGEMENT UNIT IS OK"00 +IOUOK ASC 8D + ASC " INPUT/OUTPUT UNIT IS OK"00 +RAMOK ASC 8D8D + ASC " RANDOM ACCESS MEMORY IS OK"00 +BADRAM ASC 8D + ASC ">RANDOM ACCESS MEMORY FAILED TESTS<"8D00 +LRP2 ASC " LOW RESOLUTION GRAPHICS-PAGE TWO"00 + +* +* This is the place of the RAM chips on the mother board +* + +BITMAP DB $00 + DB $06 + DB $07 + DB $08 + DB $09 + DB $10 + DB $11 + DB $12 + DB $13 + +NOCARDMSG ASC " CAN'T FIND THE ROM CARD !"8D00 + +*--------------------------------------------------------- +* +* Some code +* +*--------------------------------------------------------- + +LEE2A BIT TXTPAGE2 + BIT MIXCLR + LDA #$40 + BNE LEE3C +LEE34 LDA #$20 + BIT TXTPAGE1 + BIT MIXSET +LEE3C STA $E6 + LDA HIRES + LDA TXTCLR + LDA #$00 + STA $1C + LDA $E6 + STA $1B + LDY #$00 + STY $1A +LEE50 LDA $1C + STA ($1A),Y + JSR LEED0 + INY + BNE LEE50 + INC $1B + LDA $1B + AND #$1F + BNE LEE50 + RTS + +LEE63 STA $E2 + STX $E0 + STY $E1 + PHA + AND #$C0 + STA $26 + LSR + LSR + ORA $26 + STA $26 + PLA + STA $27 + ASL + ASL + ASL + ROL $27 + ASL + ROL $27 + ASL + ROR $26 + LDA $27 + AND #$1F + ORA $E6 + STA $27 + TXA + CPY #$00 + BEQ LEE94 + LDY #$23 + ADC #$04 +LEE93 INY +LEE94 SBC #$07 + BCS LEE93 + STY $E5 + TAX + LDA LF004-$F9,X ; Probably $F004 - TBV + STA $30 + TYA + LSR + LDA $E4 + STA $1C + BCS LEED0 + RTS + +LEEA9 JSR LEE63 + LDA $1C + EOR ($26),Y + AND $30 + EOR ($26),Y + STA ($26),Y + RTS + +LEEB7 BPL LEEDC + LDA $30 + LSR + BCS LEEC3 + EOR #$C0 +LEEC0 STA $30 + RTS + +LEEC3 DEY + BPL LEEC8 + LDY #$27 +LEEC8 LDA #$C0 +LEECA STA $30 + STY $E5 + LDA $1C +LEED0 ASL + CMP #$C0 + BPL LEEDB + LDA $1C + EOR #$7F + STA $1C +LEEDB RTS + +LEEDC LDA $30 + ASL + EOR #$80 + BMI LEEC0 + LDA #$81 + INY + CPY #$28 + BCC LEECA + LDY #$00 + BCS LEECA + CLC + LDA $D1 + AND #$04 + BEQ LEF1A + LDA #$7F + AND $30 + AND ($26),Y + BNE LEF16 + INC $EA + LDA #$7F + AND $30 + BPL LEF16 + CLC + LDA $D1 + AND #$04 +LEF0A BEQ LEF1A + LDA ($26),Y + EOR $1C + AND $30 + BNE LEF16 + INC $EA +LEF16 EOR ($26),Y + STA ($26),Y +LEF1A LDA $D1 + ADC $D3 +LEF1E AND #$03 + CMP #$02 + ROR + BCS LEEB7 +LEF25 BMI LEF57 + CLC + LDA $27 + BIT LF00B + BNE LEF51 + ASL $26 + BCS LEF4D + BIT LEF1E+1 ; in ROM? + BEQ LEF3D + ADC #$1F + SEC + BCS LEF4F +LEF3D ADC #$23 + PHA + LDA $26 + ADC #$B0 + BCS LEF48 + ADC #$F0 +LEF48 STA $26 + PLA + BCS LEF4F +LEF4D ADC #$1F +LEF4F ROR $26 +LEF51 ADC #$FC +LEF53 STA $27 + RTS + +LEF56 CLC +LEF57 LDA $27 +LEF59 ADC #$04 + BIT LF00B + BNE LEF53 + ASL $26 + BCC LEF7C + ADC #$E0 + CLC + BIT LEF59+1 ; in ROM? + BEQ LEF7E + LDA $26 + ADC #$50 + EOR #$F0 + BEQ LEF76 + EOR #$F0 +LEF76 STA $26 + LDA $E6 + BCC LEF7E +LEF7C ADC #$E0 +LEF7E ROR $26 + BCC LEF53 + PHA + LDA #$00 + STA $E0 + STA $E1 + STA $E2 + PLA +LEF8C PHA + SEC + SBC $E0 + PHA + TXA + SBC $E1 + STA $D3 + BCS LEFA2 + PLA + EOR #$FF + ADC #$01 + PHA + LDA #$00 + SBC $D3 +LEFA2 STA $D1 + STA $D5 + PLA + STA $D0 + STA $D4 + PLA + STA $E0 + STX $E1 + TYA + CLC + SBC $E2 + BCC LEFBA + EOR #$FF + ADC #$FE +LEFBA STA $D2 + STY $E2 + ROR $D3 + SEC + SBC $D0 + TAX + LDA #$FF + SBC $D1 + STA $1D + LDY $E5 + BCS LEFD3 +LEFCE ASL + JSR LEEB7 + SEC +LEFD3 LDA $D4 + ADC $D2 + STA $D4 + LDA $D5 + SBC #$00 +LEFDD STA $D5 + LDA ($26),Y + EOR $1C + AND $30 + EOR ($26),Y + STA ($26),Y + INX + BNE LEFF0 + INC $1D + BEQ LF052 +LEFF0 LDA $D3 + BCS LEFCE + JSR LEF25 + CLC + LDA $D4 + ADC $D0 + STA $D4 + LDA $D5 + ADC $D1 + BVC LEFDD + +LF004 DB $81 + DB $82 + DB $84 + DB $88 + DB $90 + DB $A0 + DB $C0 +LF00B DB $1C + DB $FF + DB $FE + DB $4C + DB $EF + DB $EC + DB $E1 + DB $D4 + DB $C5 + DB $B4 + DB $A1 + DB $8D + DB $78 + DB $61 + DB $49 + DB $31 + DB $18 + DB $FF + +LF01D LDA $26 + ASL + LDA $27 + AND #$03 + ROL + ORA $26 + ASL + ASL + ASL + STA $E2 + LDA $27 + LSR + LSR + AND #$07 + ORA $E2 + STA $E2 + LDA $E5 + ASL + ADC $E5 + ASL + TAX + DEX + LDA $30 + AND #$7F +LF042 INX + LSR + BNE LF042 + STA $E1 + TXA + CLC + ADC $E5 + BCC LF050 + INC $E1 +LF050 STA $E0 +LF052 RTS + +*--------------------------------------------------------- +* +* Fill until $F7FE (because there's a byte at $F7FF) +* +*--------------------------------------------------------- + + ds \ ; ..$F0FF + ds 256 ; ..$F1FF + ds 256 ; ..$F2FF + ds 256 ; ..$F3FF + ds 256 ; ..$F4FF + ds 256 ; ..$F5FF + ds 256 ; ..$6FFF + ds 255 ; ..$F7FE + +LF7FF DB $C3 diff --git a/diag/EPROM b/diag/EPROM new file mode 100644 index 0000000000000000000000000000000000000000..dc11ce10c1701832a3d12a05140443e26b23fd7c GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/diag/EQUATES.S b/diag/EQUATES.S new file mode 100644 index 0000000..be079c2 --- /dev/null +++ b/diag/EQUATES.S @@ -0,0 +1,148 @@ + +* TFBD generated equates +* (c) PHC 1992,93 + +* +* Firmware +* + +CH = $24 +CV = CH+1 +COLOR = $E4 + +SOFTEV = $03F2 +PWREDUP = $03F4 +USRADR = $03F8 +IRQLOC = $03FE +MSLOT = $07F8 + +* +* Zero page usage +* + +LOOPFLG = $0F +DRAM = LOOPFLG+1 ; $10 +SCRATCH = DRAM+1 ; $11 +ROMCTRL = SCRATCH+2 ; $13 +POINTER = $60 +SIZE = POINTER+2 ; $62 +YTEMP = SIZE+1 ; $63 +COUNTER = YTEMP+1 ; $64 +DATA = COUNTER+1 ; $65 +LAT = DATA+1 ; $66 +LEN = LAT+1 ; $67 +GAP = LEN+1 ; $68 +LONG = GAP+1 ; $69 +NEXTV = LONG+1 ; $6A +ERRPTR = NEXTV+1 ; $6B +ROMFLG = $F0 +CPUFLG = ROMFLG+1 ; $F1 +RAMFLG = CPUFLG+1 ; $F2 + +* +* Addresses for relocation and test usage +* + +L0000 = $0000 +L0100 = $0100 +L0200 = $0200 +L0400 = $0400 +L0800 = L0400+$0400 +L0AD0 = $0AD0 +L0C00 = L0800+$0400 +L2000 = $2000 +L4000 = L2000+$2000 +L6000 = L4000+$2000 + +BEGIN = $0200 +FIRST = $0200 +OFFSET = $6000 + +L7237 = $7237 +L849B = $849B +L8720 = $8720 + +* +* Softswitches (from the diag pov) +* + +MMUADR = $C011 +IOUADDR = $C01A +CXCHKSUM = $C400 + +* +* Softswitches +* + +KBD EQU $C000 +SET80COL EQU $C001 +WRMAINRAM EQU $C004 +WRCARDRAM EQU $C005 +SETSLOTCXROM EQU $C006 +SETINTCXROM EQU $C007 +SETSTDZP EQU $C008 +SETALTZP EQU $C009 +SETINTC3ROM EQU $C00A +SETSLOTC3ROM EQU $C00B +CLR80VID EQU $C00C +SET80VID EQU $C00D +CLRALTCHAR EQU $C00E +SETALTCHAR EQU $C00F +KBDSTROBE EQU $C010 +RDLCBNK2 EQU $C011 +RDLCRAM EQU $C012 +RDRAMWRT EQU $C014 +RDALTZP EQU $C016 +RDC3ROM EQU $C017 +RD80COL EQU $C018 +RDTEXT EQU $C01A +RDMIX EQU $C01B +RDPAGE2 EQU $C01C +RDHIRES EQU $C01D +ALTCHARSET EQU $C01E +RD80VID EQU $C01F +SPKR EQU $C030 +TXTCLR EQU $C050 +TXTSET EQU $C051 +MIXCLR EQU $C052 +MIXSET EQU $C053 +TXTPAGE1 EQU $C054 +TXTPAGE2 EQU $C055 +LORES EQU $C056 +HIRES EQU $C057 +SETAN0 EQU $C058 +SETAN1 EQU $C05A +CLRAN2 EQU $C05D +CLRAN3 EQU $C05F +BUTN3 EQU $C060 +BUTN0 EQU $C061 +BUTN1 EQU $C062 +PTRIG EQU $C070 +RDBANK2 EQU $C080 +ROMIN2 EQU $C081 +RDROM2 EQU $C082 +LCBANK2 EQU $C083 +LCBANK1 EQU $C08B + +LC000 = $C000 +LC100 = $C100 +LC200 = $C200 +LC300 = $C300 +LC400 = $C400 +LC500 = $C500 +LC600 = $C600 +LC700 = $C700 +CLRROM = $CFFF +LD000 = $D000 + +* +* ROM calls (replaced) +* + +*SETGR EQU $FB40 +*HOME EQU $FC58 +*WAIT EQU $FCA8 +*PRBYTE EQU $FDDA +*COUT EQU $FDED +*BELL EQU $FF3A +*MONZ EQU $FF69 diff --git a/diag/MAKEBIN.S b/diag/MAKEBIN.S new file mode 100644 index 0000000..1adde1c --- /dev/null +++ b/diag/MAKEBIN.S @@ -0,0 +1,19 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + + mx %11 + lst off + + use EQUATES.S + +*--------------------------------------------------------- + + org $d000 + put DIAG18B1.S + put DIAG19B.S + put MONITORIIE.S + sav BINARY \ No newline at end of file diff --git a/diag/MAKEEPROM.S b/diag/MAKEEPROM.S new file mode 100644 index 0000000..df0d6fe --- /dev/null +++ b/diag/MAKEEPROM.S @@ -0,0 +1,28 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + + mx %11 + lst off + + use EQUATES.S + +*--------------------------------------------------------- +* Code and data $D000..$DFFF for 1st bank +* Empty FF data $D000..$DFFF for 2nd bank + + org $d000 + put DIAG18B1.S + put DIAG18B2.S + +*--------------------------------------------------------- +* Code and data $E000..$F7FF for Diag code +* Code and data $F800..$FFFF for Monitor ROM + + org $e000 + put DIAG19B.S + put MONITORIIE.S + sav EPROM diff --git a/diag/MONITORIIE.S b/diag/MONITORIIE.S new file mode 100644 index 0000000..7883937 --- /dev/null +++ b/diag/MONITORIIE.S @@ -0,0 +1,1250 @@ +* +* Apple II diagnostics code +* +* (c) 1983, Apple Computer, Inc. +* (s) 2018, Brutal Deluxe Software +* + +*--------------------------------------------------------- +* EPROM19B.BIN +* $F800..$FFFF +* This is a slightly modified AUTOSTART MONITOR ROM +*--------------------------------------------------------- + +LF800 LSR + PHP + JSR LF847 + PLP + LDA #$0F + BCC LF80C + ADC #$E0 +LF80C STA $2E +LF80E LDA ($26),Y + EOR $30 + AND $2E + EOR ($26),Y + STA ($26),Y + RTS + +LF819 JSR LF800 +LF81C CPY $2C + BCS LF831 + INY + JSR LF80E + BCC LF81C +LF826 ADC #$01 +VLINE PHA + JSR LF800 + PLA + CMP $2D + BCC LF826 +LF831 RTS + +LF832 LDY #$2F + BNE LF838 +CLRTOP LDY #$27 +LF838 STY $2D + LDY #$27 +LF83C LDA #$00 + STA $30 + JSR VLINE + DEY + BPL LF83C + RTS + +LF847 PHA + LSR + AND #$03 + ORA #$04 + STA $27 + PLA + AND #$18 + BCC LF856 + ADC #$7F +LF856 STA $26 + ASL + ASL + ORA $26 + STA $26 + RTS + + LDA $30 + CLC + ADC #$03 + AND #$0F + STA $30 + ASL + ASL + ASL + ASL + ORA $30 + STA $30 + RTS + + LSR + PHP + JSR LF847 + LDA ($26),Y + PLP +LF879 BCC LF87F + LSR + LSR + LSR + LSR +LF87F AND #$0F + RTS + +LF882 LDX $3A + LDY $3B + JSR LFD96 + JSR LF948 + LDA ($3A,X) + TAY + LSR + BCC LF89B + ROR + BCS LF8A5 + CMP #$A2 + BEQ LF8A5 + AND #$87 +LF89B LSR + TAX + LDA FMT1,X + JSR LF879 + BNE LF8A9 +LF8A5 LDY #$80 + LDA #$00 +LF8A9 TAX + LDA FMT2,X + STA $2E + AND #$03 + STA $2F + TYA + AND #$8F + TAX + TYA + LDY #$03 + CPX #$8A + BEQ LF8C9 +LF8BE LSR + BCC LF8C9 + LSR +LF8C2 LSR + ORA #$20 + DEY + BNE LF8C2 + INY +LF8C9 DEY + BNE LF8BE + RTS + + DB $FF + DB $FF + DB $FF +LF8D0 JSR LF882 + PHA +LF8D4 LDA ($3A),Y + JSR PRBYTE + LDX #$01 +LF8DB JSR LF94A + CPY $2F + INY + BCC LF8D4 + LDX #$03 + CPY #$04 + BCC LF8DB + PLA + TAY + LDA MNEML,Y + STA $2C + LDA MNEMR,Y + STA $2D +LF8F5 LDA #$00 + LDY #$05 +LF8F9 ASL $2D + ROL $2C + ROL + DEY + BNE LF8F9 + ADC #$BF + JSR COUT + DEX + BNE LF8F5 + JSR LF948 + LDY $2F + LDX #$06 +LF910 CPX #$03 + BEQ LF930 +LF914 ASL $2E + BCC LF926 + LDA CHAR1-1,X + JSR COUT + LDA CHAR2-1,X + BEQ LF926 + JSR COUT +LF926 DEX + BNE LF910 + RTS + +LF92A DEY + BMI LF914 + JSR PRBYTE +LF930 LDA $2E + CMP #$E8 + LDA ($3A),Y + BCC LF92A + JSR LF956 + TAX + INX + BNE LF940 + INY +LF940 TYA + JSR PRBYTE + TXA + JMP PRBYTE + +LF948 LDX #$03 +LF94A LDA #$A0 + JSR COUT + DEX + BNE LF94A + RTS + +LF953 SEC + LDA $2F +LF956 LDY $3B + TAX + BPL LF95C + DEY +LF95C ADC $3A + BCC LF961 + INY +LF961 RTS + +FMT1 DB $04 + DB $20 + DB $54 + DB $30 + DB $0D + DB $80 + DB $04 + DB $90 + DB $03 + DB $22 + DB $54 + DB $33 + DB $0D + DB $80 + DB $04 + DB $90 + DB $04 + DB $20 + DB $54 + DB $33 + DB $0D + DB $80 + DB $04 + DB $90 + DB $04 + DB $20 + DB $54 + DB $3B + DB $0D + DB $80 + DB $04 + DB $90 + DB $00 + DB $22 + DB $44 + DB $33 + DB $0D + DB $C8 + DB $44 + DB $00 + DB $11 + DB $22 + DB $44 + DB $33 + DB $0D + DB $C8 + DB $44 + DB $A9 + DB $01 + DB $22 + DB $44 + DB $33 + DB $0D + DB $80 + DB $04 + DB $90 + DB $01 + DB $22 + DB $44 + DB $33 + DB $0D + DB $80 + DB $04 + DB $90 + DB $26 + DB $31 + DB $87 + DB $9A +FMT2 DB $00 + DB $21 + DB $81 + DB $82 + DB $00 + DB $00 + DB $59 + DB $4D + DB $91 + DB $92 + DB $86 + DB $4A + DB $85 + DB $9D +CHAR1 DB $AC + DB $A9 + DB $AC + DB $A3 + DB $A8 + DB $A4 +CHAR2 DB $D9 + DB $00 + DB $D8 + DB $A4 + DB $A4 + DB $00 + +MNEML DB $1C + DB $8A + DB $1C + DB $23 + DB $5D + DB $8B + DB $1B + DB $A1 + DB $9D + DB $8A + DB $1D + DB $23 + DB $9D + DB $8B + DB $1D + DB $A1 + DB $00 + DB $29 + DB $19 + DB $AE + DB $69 + DB $A8 + DB $19 + DB $23 + DB $24 + DB $53 + DB $1B + DB $23 + DB $24 + DB $53 + DB $19 + DB $A1 + DB $00 + DB $1A + DB $5B + DB $5B + DB $A5 + DB $69 + DB $24 + DB $24 + DB $AE + DB $AE + DB $A8 + DB $AD + DB $29 + DB $00 + DB $7C + DB $00 + DB $15 + DB $9C + DB $6D + DB $9C + DB $A5 + DB $69 + DB $29 + DB $53 + DB $84 + DB $13 + DB $34 + DB $11 + DB $A5 + DB $69 + DB $23 + DB $A0 + +MNEMR DB $D8 + DB $62 + DB $5A + DB $48 + DB $26 + DB $62 + DB $94 + DB $88 + DB $54 + DB $44 + DB $C8 + DB $54 + DB $68 + DB $44 + DB $E8 + DB $94 + DB $00 + DB $B4 + DB $08 + DB $84 + DB $74 + DB $B4 + DB $28 + DB $6E + DB $74 + DB $F4 + DB $CC + DB $4A + DB $72 + DB $F2 + DB $A4 + DB $8A + DB $00 + DB $AA + DB $A2 + DB $A2 + DB $74 + DB $74 + DB $74 + DB $72 + DB $44 + DB $68 + DB $B2 + DB $32 + DB $B2 + DB $00 + DB $22 + DB $00 + DB $1A + DB $1A + DB $26 + DB $26 + DB $72 + DB $72 + DB $88 + DB $C8 + DB $C4 + DB $CA + DB $26 + DB $48 + DB $44 + DB $44 + DB $A2 + DB $C8 + +LFA40 STA $45 + PLA + PHA + ASL + ASL + ASL + BMI LFA4C + JMP (IRQLOC) + +LFA4C PLP + JSR LFF4C + PLA + STA $3A + PLA + STA $3B + JMP ($03F0) + +LFA59 JSR LF882 + JSR LFADA + JMP LFF65 + +LFA62 CLD + JSR LFE84 + JSR LFB2F + JSR LFE93 + JSR LFE89 +LFA6F LDA SETAN0 + LDA SETAN1 + LDA CLRAN2 + LDA CLRAN3 + LDA CLRROM + BIT KBDSTROBE + +* +* This is the change in the AUTOSTART ROM +* It forces a jump to the DIAG CODE +* + +LFA81 JMP FNDSLOT ; WAS CLD JSR BELL + DB $FF + + LDA SOFTEV+1 + EOR #$A5 + CMP PWREDUP + BNE LFAA6 + LDA SOFTEV + BNE LFAA3 + LDA #$E0 + CMP SOFTEV+1 + BNE LFAA3 +LFA9B LDY #$03 + STY SOFTEV + JMP LE000 +LFAA3 JMP (SOFTEV) + +LFAA6 JSR LFB60 + LDX #$05 +LFAAB LDA LFAFC,X + STA $03EF,X + DEX + BNE LFAAB + LDA #$C8 + STX $00 + STA $01 +LFABA LDY #$07 + DEC $01 + LDA $01 + CMP #$C0 + BEQ LFA9B + STA MSLOT +LFAC7 LDA ($00),Y + CMP LFB02-1,Y + BNE LFABA + DEY + DEY + BPL LFAC7 + JMP ($0000) + + NOP + NOP +LFAD7 JSR CROUT +LFADA LDA #$45 + STA $40 + LDA #$00 + STA $41 + LDX #$FB +LFAE4 LDA #$A0 + JSR COUT + LDA LFB19-$FB,X + JSR COUT + LDA #$BD + JSR COUT + LDA $4A,X + JSR PRBYTE + INX + BMI LFAE4 +LFAFC RTS + +* +* +* + +LFAFD DA LFA59 + DA $E000 + DB $45 +LFB02 HEX 20FF00FF03FF3C +LFB09 ASC "APPLE ][" +XLTBL ASC "DBA"FF"C"FFFFFF +LFB19 ASC "AXYPS" + +* +* +* + +LFB1E LDA PTRIG + LDY #$00 + NOP + NOP +LFB25 LDA $C064,X + BPL LFB2E + INY + BNE LFB25 + DEY +LFB2E RTS + +LFB2F LDA #$00 + STA $48 + LDA LORES +SETTXT LDA TXTPAGE1 + LDA TXTSET + LDA #$00 + BEQ LFB4B + +SETGR LDA TXTCLR + LDA MIXSET + JSR CLRTOP + LDA #$14 +LFB4B STA $22 + LDA #$00 + STA $20 + LDA #$28 + STA $21 + LDA #$18 + STA $23 + LDA #$17 + STA CV + JMP LFC22 + +LFB60 JSR HOME + LDY #$08 +LFB65 LDA LFB09-1,Y + STA $040E,Y + DEY + BNE LFB65 + RTS + +LFB6F LDA SOFTEV+1 + EOR #$A5 + STA PWREDUP + RTS + +LFB78 CMP #$8D + BNE LFB94 + LDY KBD + BPL LFB94 + CPY #$93 + BNE LFB94 + BIT KBDSTROBE +LFB88 LDY KBD + BPL LFB88 + CPY #$83 + BEQ LFB94 + BIT KBDSTROBE +LFB94 JMP LFBFD + +LFB97 SEC + JMP LFC2C + +LFB9B TAY + LDA XLTBL-$C9,Y + JSR LFB97 + JSR LFD0C +LFBA5 CMP #$CE + BCS LFB97 + CMP #$C9 + BCC LFB97 + CMP #$CC + BEQ LFB97 + BNE LFB9B + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP + NOP +LFBC1 PHA + LSR + AND #$03 + ORA #$04 + STA $29 + PLA + AND #$18 + BCC LFBD0 + ADC #$7F +LFBD0 STA $28 + ASL + ASL + ORA $28 + STA $28 + RTS + +LFBD9 CMP #$87 + BNE LFBEF + LDA #$40 + JSR WAIT + LDY #$C0 +LFBE4 LDA #$0C + JSR WAIT + LDA SPKR + DEY + BNE LFBE4 +LFBEF RTS + +LFBF0 LDY CH + STA ($28),Y +LFBF4 INC CH + LDA CH + CMP $21 + BCS LFC62 +LFBFC RTS + +LFBFD CMP #$A0 + BCS LFBF0 + TAY + BPL LFBF0 + CMP #$8D + BEQ LFC62 + CMP #$8A + BEQ LFC66 + CMP #$88 + BNE LFBD9 +LFC10 DEC CH + BPL LFBFC + LDA $21 + STA CH + DEC CH +LFC1A LDA $22 + CMP CV + BCS LFC2B + DEC CV +LFC22 LDA CV +LFC24 JSR LFBC1 + ADC $20 + STA $28 +LFC2B RTS + +LFC2C EOR #$C0 + BEQ HOME + ADC #$FD + BCC LFBF4 + BEQ LFC10 + ADC #$FD + BCC LFC66 + BEQ LFC1A + ADC #$FD + BCC LFC9C + BNE LFC2B + LDY CH + LDA CV +LFC46 PHA + JSR LFC24 + JSR LFC9E + LDY #$00 + PLA + ADC #$00 + CMP $23 + BCC LFC46 + BCS LFC22 + +HOME LDA $22 + STA CV + LDY #$00 + STY CH + BEQ LFC46 +LFC62 LDA #$00 + STA CH +LFC66 INC CV + LDA CV + CMP $23 + BCC LFC24 + DEC CV + LDA $22 + PHA + JSR LFC24 +LFC76 LDA $28 + STA $2A + LDA $29 + STA $2B + LDY $21 + DEY + PLA + ADC #$01 + CMP $23 + BCS LFC95 + PHA + JSR LFC24 +LFC8C LDA ($28),Y + STA ($2A),Y + DEY + BPL LFC8C + BMI LFC76 +LFC95 LDY #$00 + JSR LFC9E + BCS LFC22 +LFC9C LDY CH +LFC9E LDA #$A0 +LFCA0 STA ($28),Y + INY + CPY $21 + BCC LFCA0 + RTS + +WAIT SEC +LFCA9 PHA +LFCAA SBC #$01 + BNE LFCAA + PLA + SBC #$01 + BNE LFCA9 + RTS + +LFCB4 INC $42 + BNE LFCBA + INC $43 +LFCBA LDA $3C + CMP $3E + LDA $3D + SBC $3F + INC $3C + BNE LFCC8 + INC $3D +LFCC8 RTS + +LFCC9 LDY #$4B + JSR LFCDB + BNE LFCC9 + ADC #$FE + BCS LFCC9 + LDY #$21 +LFCD6 JSR LFCDB + INY + INY +LFCDB DEY + BNE LFCDB + BCC LFCE5 + LDY #$32 +LFCE2 DEY + BNE LFCE2 +LFCE5 LDY $C020 + LDY #$2C + DEX + RTS + +LFCEC LDX #$08 +LFCEE PHA + JSR LFCFA + PLA + ROL + LDY #$3A + DEX + BNE LFCEE + RTS + +LFCFA JSR LFCFD +LFCFD DEY + LDA BUTN3 + EOR $2F + BPL LFCFD + EOR $2F + STA $2F + CPY #$80 + RTS + +LFD0C LDY CH + LDA ($28),Y + PHA + AND #$3F + ORA #$40 + STA ($28),Y + PLA + JMP ($0038) + +LFD1B INC $4E + BNE LFD21 + INC $4F +LFD21 BIT KBD + BPL LFD1B + STA ($28),Y + LDA KBD + BIT KBDSTROBE + RTS + +LFD2F JSR LFD0C + JSR LFBA5 +LFD35 JSR LFD0C + CMP #$9B + BEQ LFD2F + RTS + +LFD3D LDA $32 + PHA + LDA #$FF + STA $32 + LDA $0200,X + JSR COUT + PLA + STA $32 + LDA $0200,X + CMP #$88 + BEQ LFD71 + CMP #$98 + BEQ LFD62 + CPX #$F8 + BCC LFD5F + JSR BELL +LFD5F INX + BNE LFD75 +LFD62 LDA #$DC + JSR COUT +LFD67 JSR CROUT + LDA $33 + JSR COUT + LDX #$01 +LFD71 TXA + BEQ LFD67 + DEX +LFD75 JSR LFD35 + CMP #$95 + BNE LFD7E + LDA ($28),Y +LFD7E CMP #$E0 + BCC LFD84 + AND #$DF +LFD84 STA $0200,X + CMP #$8D + BNE LFD3D + JSR LFC9C +CROUT LDA #$8D + BNE COUT +LFD92 LDY $3D + LDX $3C +LFD96 JSR CROUT + JSR LF940 + LDY #$00 + LDA #$AD + JMP COUT + +LFDA3 LDA $3C + ORA #$07 + STA $3E + LDA $3D + STA $3F +LFDAD LDA $3C + AND #$07 + BNE LFDB6 +LFDB3 JSR LFD92 +LFDB6 LDA #$A0 + JSR COUT + LDA ($3C),Y + JSR PRBYTE + JSR LFCBA + BCC LFDAD + RTS + +LFDC6 LSR + BCC LFDB3 + LSR + LSR + LDA $3E + BCC LFDD1 + EOR #$FF +LFDD1 ADC $3C + PHA + LDA #$BD + JSR COUT + PLA + +PRBYTE PHA + LSR + LSR + LSR + LSR + JSR LFDE5 + PLA + AND #$0F +LFDE5 ORA #$B0 + CMP #$BA + BCC COUT + ADC #$06 + +COUT JMP ($0036) + +LFDF0 CMP #$A0 + BCC LFDF6 + AND $32 +LFDF6 STY $35 + PHA + JSR LFB78 + PLA + LDY $35 + RTS + +LFE00 DEC $34 + BEQ LFDA3 +LFE04 DEX + BNE LFE1D + CMP #$BA + BNE LFDC6 + STA $31 + LDA $3E + STA ($40),Y + INC $40 + BNE LFE17 + INC $41 +LFE17 RTS + +LFE18 LDY $34 + LDA $01FF,Y +LFE1D STA $31 + RTS + +LFE20 LDX #$01 +LFE22 LDA $3E,X + STA $42,X + STA $44,X + DEX + BPL LFE22 + RTS + +LFE2C LDA ($3C),Y + STA ($42),Y + JSR LFCB4 + BCC LFE2C + RTS + +LFE36 LDA ($3C),Y + CMP ($42),Y + BEQ LFE58 + JSR LFD92 + LDA ($3C),Y + JSR PRBYTE + LDA #$A0 + JSR COUT + LDA #$A8 + JSR COUT + LDA ($42),Y + JSR PRBYTE + LDA #$A9 + JSR COUT +LFE58 JSR LFCB4 + BCC LFE36 + RTS + +LFE5E JSR LFE75 + LDA #$14 +LFE63 PHA + JSR LF8D0 + JSR LF953 + STA $3A + STY $3B + PLA + SEC + SBC #$01 + BNE LFE63 + RTS + +LFE75 TXA + BEQ LFE7F +LFE78 LDA $3C,X + STA $3A,X + DEX + BPL LFE78 +LFE7F RTS + +LFE80 LDY #$3F + BNE LFE86 +LFE84 LDY #$FF +LFE86 STY $32 + RTS + +LFE89 LDA #$00 + STA $3E +LFE8D LDX #$38 + LDY #$1B + BNE LFE9B +LFE93 LDA #$00 + STA $3E +LFE97 LDX #$36 + LDY #$F0 +LFE9B LDA $3E + AND #$0F + BEQ LFEA7 + ORA #$C0 + LDY #$00 + BEQ LFEA9 +LFEA7 LDA #$FD +LFEA9 STY $00,X + STA $01,X + RTS + + NOP + NOP +LFEB0 JMP LE000 +LFEB3 JMP LE003 + +LFEB6 JSR LFE75 + JSR LFF3F + JMP ($003A) +LFEBF JMP LFAD7 +LFEC2 RTS + + NOP + RTS + +LFEC5 NOP + NOP + NOP + NOP + NOP +LFECA JMP USRADR + +LFECD LDA #$40 + JSR LFCC9 + LDY #$27 +LFED4 LDX #$00 + EOR ($3C,X) + PHA + LDA ($3C,X) + JSR LFEED + JSR LFCBA + LDY #$1D + PLA + BCC LFED4 + LDY #$22 + JSR LFEED + BEQ BELL +LFEED LDX #$10 +LFEEF ASL + JSR LFCD6 + BNE LFEEF + RTS + +LFEF6 JSR LFE00 + PLA + PLA + BNE MONZ +LFEFD JSR LFCFA + LDA #$16 + JSR LFCC9 + STA $2E + JSR LFCFA +LFF0A LDY #$24 + JSR LFCFD + BCS LFF0A + JSR LFCFD + LDY #$3B +LFF16 JSR LFCEC + STA ($3C,X) + EOR $2E + STA $2E + JSR LFCBA + LDY #$35 + BCC LFF16 + JSR LFCEC + CMP $2E + BEQ BELL + LDA #$C5 + JSR COUT + LDA #$D2 + JSR COUT + JSR COUT + +BELL LDA #$87 + JMP COUT + +LFF3F LDA $48 + PHA + LDA $45 + LDX $46 + LDY $47 + PLP + RTS + +LFF4A STA $45 +LFF4C STX $46 + STY $47 + PHP + PLA + STA $48 + TSX + STX $49 + CLD + RTS + +LFF59 JSR LFE84 + JSR LFB2F + JSR LFE93 + JSR LFE89 +LFF65 CLD + JSR BELL + +MONZ LDA #$AA + STA $33 + JSR LFD67 + JSR LFFC7 +LFF73 JSR LFFA7 + STY $34 + LDY #$17 +LFF7A DEY + BMI LFF65 + CMP LFFCC,Y + BNE LFF7A + JSR LFFBE + LDY $34 + JMP LFF73 + +LFF8A LDX #$03 + ASL + ASL + ASL + ASL +LFF90 ASL + ROL $3E + ROL $3F + DEX + BPL LFF90 +LFF98 LDA $31 + BNE LFFA2 + LDA $3F,X + STA $3D,X + STA $41,X +LFFA2 INX + BEQ LFF98 + BNE LFFAD +LFFA7 LDX #$00 + STX $3E + STX $3F +LFFAD LDA $0200,Y + INY + EOR #$B0 + CMP #$0A + BCC LFF8A + ADC #$88 + CMP #$FA + BCS LFF8A + RTS + +LFFBE LDA #>LFE00 + PHA + LDA LFFE3,Y + PHA + LDA $31 +LFFC7 LDY #$00 + STY $31 + RTS + +LFFCC HEX BCB2BEB2EFC4B2A9BBA6A40695070205F000EB93A7C699 +LFFE3 DB LFEB3-1 + DB LFECA-1 + DB LFEBF-1 + DB LFEC2-1 + DB LFE36-1 + DB LFE8D-1 + DB LFEC5-1 + DB LFE97-1 + DB LFEB0-1 + DB LFE18-1 + DB LFE18-1 + DB LFE2C-1 + DB LFE20-1 + DB LFE84-1 + DB LFE80-1 + DB LFE5E-1 + DB LFECD-1 + DB LFEB6-1 + DB LFEFD-1 + DB LFE18-1 + DB LFE18-1 + DB LFEF6-1 + DB LFE04-1 + + DA $03FB + DA LFA62 + DA LFA40