diff --git a/diag/BINARY b/diag/BINARY new file mode 100644 index 0000000..86fe295 Binary files /dev/null and b/diag/BINARY differ 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 0000000..dc11ce1 Binary files /dev/null and b/diag/EPROM differ 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