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
zcmeHtdq7iHw)Y_cLY^e36&1n(!cz)KcotE4BpOnBE93zQI5%SlO4PP99s9bsRyuMl
z<1}q>#*W@j?U8b
kLGdC
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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
zcmeHudt4J|*8h+IAy*RAiV9(XaFs$5u0>QXiH4NE6>@ezwbGTb
ztlPA~UAy}0t~*l38Y&WS`@VHoYmiF`B%nMs;K`?=(2wQ?9Ltfs*5+fg5a#C`xRB%o}
zjy27f`sYiIHE7Os8FHF8=5R-EJ{l(PWEf}2j@G(wzia6%E*gAuAm&`|wO6{2cWxzL
z>fAwETrf{)kx?`Va?q70#=%$^8@q)$unCNY(LsPUYYZjx=D@6a)erOPp|ABf<|_op
z!3Dypn+t?nPJ-h{35R1PNZcBpmw?L3k@*TS;S@i#(7qC}g&=O0bOx#=c;oVO+}@>}B+Sy$R96p&=mT`?og+>L
zk>AV*GbsAqAv*DL1KoPVf;2El29a+sB3%s5)(pbKDMsXkS(0~lsj3&-NJLxP&P2?SdA?KAL-osnX)2H3W
z(2I{ipqvRXzO@j35KnfTyr1zF3GFRzn1^KsV_2A25J-KpAcYnT;9|7A^9TdoGEhR^
z!8f6K0|a9P#TbnqANyd#J;$ln?O0
z^yN45NPq|94+#i?-Gls|>Yr-i0X_vXM){LJ>rVk-M7MLuaTr}cOof9a3q}VP{&94E
zqC{wHU}S`v+Ru*ZCiIKOJ+yFOOdc>M1arrjX!w|A7dC(nccEV0VETQFALfC|W{V&(
z#DofLmSnI3g~&p{^{!wEt<-fcvcM7pIc^b{kWkAC6B0p{#3m%hgd|vYnvf)m#Dpj;
z=_Vw@l43$OS^Q0inv%(}ykkQ07VLBy3Dy@3WZ1jFP5=xr#E~+@f}obMG8fBo^uuxd
z%t8UkP@m<0IBu{YH9RnG`sEWipaT#O07mz_Aqj76wy=QYZ5`T5Yz2{3*vmvAR)ChA
zceYrDLB-hu7(iT*0|idGU!S*xI%Rx8BlJNv1m1!i8)MGNQ3s39kF5DFf}r6VO2u4L
zryL7o&Z~IRI*@g0o3oA@1r0{?Z_ehwK2K~lF2{^>67%h;szv{k*28>Zf_fY&eyO;y
zxS;su;w_f-*e}ra7aD&7p*4f?Abti2o_)qaN8K+}{@liQ!xJ)|J72klDm_P)5F7s@
zmT!M(b+z|d^Xxa{<;eYDr6CIf<4T=wNmSbK)r~C0}yBk?G(PMx*B}CKxI8ViPugb~}i&@y2J
zS}tg6G&cTNA&d!w&~||dy;DJVavOrZR9pa~DlcfNFNC?6OpODOhUMWWd4}?rPG0V(
z&W^DEc~kLAFrf|DmLUV0djXVI8!CnjByH&D)rQ$4HNGw6kU>aix-#9E45kN@$z(G*
zOfHkoVzAgOI@^`aV0*BcY&M(DVRG0UI@gu!#$|9lxJ)ja%i(gloE21c`iJ2K#wV21m)w;HL93c&*wceJYVq4;AaRtbJ=<9&Fr7Cb2;$k
z=5aT3f5!Wn=g;_?1$ly8zTh?XtL#_U+d12~+j!e~ukc>wz2>>i6Mp>H_}c}q2woMi
z-(&A$7qQ=Gzt1V+?&7`Y`5ym0!A`c|W44)H%KnJ6kMj|CANOOPnODmD$aA0PNBn*K
zj|FByslXFwA7+=a|HAo<^B3-CT%329SH}B{_nBuI|F8fTcv;!i>>73z=LDyUdxBfV
zJHd1QJWqI5@lWurf@(pHfMMg-a?f(>xb@ryZX=h|!Rh35ak@F*an5r(c%8g1UN`SM
z-g#a^AG43u$A&MbkK50@#=6G7#_8t{GKZMgnS-oB_7M9zdyq589pYZ+jxa}9BkU2*
z2zQkG1NSC#j5*G{$-2oNW8dW5Q^*(c{P=!6l#hD(Eb;O3UFz#4Tq5-H
zTk7Y9EO`AGY@=|iaGP+u@D<@UzisF?
z|7`)=0=J1+{~_EZ{13lfe($31p*#I|2J8&nDf0YKXcm6xXZHILHKQN;oBclwFb8}X
zXbv=qJ`#N_VjL14@;ihc@;?-CDDaTT>$tE=XcblqEB$KxD$yFW(!a*PGN2})GO#A_
zxTs2G6;+G4XM{Fkt?-QBS-&&rS@ev*&A-JYK}g#E&6!fSrl&};tJ0)2FXQGyhmx-53o{=n-J|kTbxiZo_%3JI$Ss`61T@|%Tyh`F5=^N!M_LcZb
zg;IW)BvcwM4T)YI9TKxTCL}gAHY_$gc6Dq>-0HZH_|@^A&q)#`Ya|KMBxyqQb1{iA
zYhsdOlj7FIC&oV)pAfe+U80mcFUgRkOJ9&Wf6*^Qr^mbylOFp*YoDG6!VvuL$P@5p}50whvLiP*;SG%X;pMpOjT@ETvfa^
zzB;}p{zSa%+32&eXX9$)>7CJ?F`cpTy^+09z2aU;ue2|+KdMjMFX@*KL=Hp^hzBGC
z(!t1~$U*U-bVxcJITASk}peHmbxr$nQWQdJ7q=6$`tQZ@3a+Z-ZF2wPl|7fFvU03
zH_cb(EBB0&iDeR*R2D6ZmPAWqn0@)V%7I}eu%Z7ptTQ(MK
z+@dH@yp*1w{tM;O9kMrMZ_3`1?U27M-?8EC4LdfzvGL7~Z*AP6cw4a}{q6J}$~Tm6
zD&JBHie<&};tjH7pf7i<`;I1b7;*hL%msq3LLPS}r};J=-mZk>jRg
z=-l)Sy?ZV*o0ZMXVd|KAW-cq2lg-KD=s0>#E-#0xIPUcSPCv}rKli8EnNzJ5sQZ<=1
znRz>FA}e^c=2=aYCPEvjU7h`Gc2stFPDD;*&T8GWx+q<^dbK)2{j54t9iWgVFu2rp5tyd+h
zQdFs`B=s828tt0wH92c^YxGIEYxCCStbR;(WmQ$HzEB@iSE`SztJGF?wYo-Kq4`2{OjD^j
zuBp;kHPxCLO@;Og?J;eo_PDl6Yt>e3E3&`HK9*gXeLTA=+nQaSU6J!e&as@zoZ~rF
zIo6!&oSK{yITgAubjNg+y5qVkomE$@tI?g%Rp`IaAJbRrkL#=SR(-X;Mt?&8MeecO
z%G~3*Rk_yO>fD;#V|kT%$MdT4ta;UW>4j>eYO89SYP-5nW7KZdZqshh-k!5fw^e7<
z73RFA`laeus@K)8YksBurS>)LYwFiDu+M%i=QZ71syEedtKZPPqj^L7j`of0H?!Z$
zemnb}>^E}W$$3Nfj_zIcPSty=U8*AWyP9{k?`FT7vs3q;ZkMhoXSZs%dbeh`c6avf
zoZY%&6{gywD%N7!VjZU2qx-bF=EPsW{LlaT>ZG;u^vrM1op0#q>gl$(lb0@kU)x#V
z_)Syuw=IAF+;s6m-FIi(T8|w+^SEUH-rwPGUN~`~<-*_vq{p`>spsE&-t0Np^HtB~
zo*O-G7vH>Cd6B$$=i<^!&t2MdDgRROrQcur>Qd*W(MvAho4!B(ee3skzxTWxe))yV
zTQ2Xq{K@6NTt0Gn>y_VLDZg^&%J)~?u7+NH;i~#-_SNKGP46#zf7g4Y*Q=k`m)p1O
z%GRs3S8IED&gbr-@QgeKo+2ZsWece%=tqyrkiAsOOe4eL0nf@O8yVy{P~m~?y!6(m
zq?7+gX~+`*-TR)Bw*8YdJaA`};d5m2-h5Zd&c
z0(|;(j)~h4oysx!wAjL@vPMh{o23>cAz$FA_pcxY&(3;
zv^M^u)&vZ4m1Y&g<8=olw@5(w6A4D1j^#iIUC65;*pMeeu&88_f&ujTfsB}Q02)Ms
zGtuX*5({E1G8WlgAeZN@5`5+W^=unTkXZyNLOlqTT|^0u6xoaBis5s@fDJN)5XeGx
z>w<{4Q|DY;7nYqi+mxo9mvtd$)p}TpLT7n1VIFpm*`f!ASZ0EdxoU!y67@Dy`!Zy>
zcg|9z$u?WE@Q>Q~vklRTUesBFC-}$_q<7YUGM7C_IWjLDfFWgp%>#3`1!4#;DruOj
zF)_xJH^DHvV2ld{!#<}~0|^%ua>g7m7KG`rJ7)VsyhmKbPP>x#Fhq=B&KKRGvWcp^
z?NJ!!N>Zg9s^p+bFe_-548q8HDHuWeAm$#%LExu
z0-Nc58&Eb3n~H1^UN+NjY+@QeVc6tmi&$zixl*<8VH499@r=#nLDhVQA=55mIi(M3
zykV1zEyCLd83|&4KFk_txVzhC!xmyEbs;$|;|LgXdZlgiCzJ`=;a+zzfoqHKvza)Q
zD%r5f(-tALnRrw!ZrHTR7O~Q1%B0K-9X4rf5k5APn&Pb-HmPh8t8At$s>T^ML8h3m
z&7`%7{r=ei(T@g%lvq3f3CctW_gk~F5cJWI(*mabn05!1{Do#vDPE{7=+8JnE{u_}
zz|PoPQZ#qDRWw^LnL65A@!BrDwY{sUp#wkLUfWTRx3t&QcG=t8@cOTCdnbOjw%&yN
zE6Hl>6QcP4h1T|OLFc~^oK;Fm;y4Zlb~fN$=iBiXds{;%-r3aN-BORAZNTkq-!*h}
zHc*t=#&L-k8R+FILH*96`^k3$FTE!|F^FLXd@IdAW3
zf;Q~{JcL6_JILXkJ*{U!Z&&Tvmf4>E#o+6@!Tz?cmL8ny7si0MHng^P^iW|}UT?Kp
zE6W?8W7s
zXz1$hXrsciwV|yWLJ}~9&yy{1vZc1C6aNx~V1CUBP(lD-M*}o-IOU@Ia$$(+I=*uz0ZIGE4@g3+46pq
zE!5nLBi8S|iF0uB53=kE5=(-~6+@#`i7%KX^Qwd8K0#v0R~x1JAkO7?hSBY`t=4^F
zu{RMC!FG@V?!nfT5q{$iH=|#I)yo*DAcBonE6wPDQNh8lAlNvKg&08G=t?!1bPqOr
z8+*MY^y3aMklmE-aM030niw+EjJ*ZH=5q>wuNUjX`U@2agT0EqgMC=1l~tHNV{`%5
zU?+AC>n_Adtg8^~-P3o#d$8Z^3e3k?M{$2aXTl&^VVM~`hxwKdTHRRae~l#&UHKhY
z7tuX}VBNDrqJ}d}x(@j|wh*1xi)hfeHwb}BqC5ZGrk?kIQ(R)kZ9X%PGsbW9bv69;
zu<7ler%SwNh+r0YhaT=04F1CUi4dhSjN#S~r9oEyAgiL85Qps=R+7_L-(K(hK{IWr
z59>9|ox~RpiwGX$O*&D
z%nbUQDMfW6++-_rL6!IGqngaO%IG#%^F-m%leYU<#7X1<_N)cL-Q1rIjtDOyr;KOd
zc4sqr1NtwIDs%6pJAB+D&Aihm?gRbw$@}nv3B|u|C=p+$Zs0}QhpQ9K6R7rn#W3m8
zbO303GoU-V^VVrIIb}#7qRQ7)@Lfvs6U{D723J%q<`%h{=>h6!>In7u;~J`t1jwSf
zO)^9VJ&c5{IBq<;B2c7S1-})Ck(If*gi$0qe*9=<81gQ%>`$-!i7W@HDU5X1-MpB-~N~$ie}6dVu^*=n(ctvZ>G?T4>Iy+E}+Ga
z(Wr;$?;oSTeO#GitJK>nH`^-z-Bvl%PTe?0$eGGXdOFd1n@%pToS>7QmfqG$I_ZJa
zKb)XvAidis=&0dgncL~<2Y()id&BoEO?wc`1!pw65H5C`K3;gONIzdDSPPj%xU2RaHQol?7mcj(}u;v2HgXsSB}mgGxV9H`M>P-XKQEb
zAdqS=^pKsEzl1wpqob#PVdKMFYEvZ!P^hTX+A7ty%1rp*<6y(zpGtU9D{cy2>T>^*LZeGVpp{Eet3yk}OZfN2
zeK-Qjtb58u7Q8gHsovjw-;kgfaUrJ*VRzRslnVdR(ukynb;R1i^+QQeTWi3dM=wp2
z_l=LOcW{3wHo=PU$n1to;cyJK;StS-G7km%V7f3IPizJx&_~lHl?IzUia#Zf!lGqVl8)|szR1)jVwDg($B!x4`3l-G*iVi+14D)1K?SF%1*?oH)V#m$2AZc-|0)6{oVR@{f
zF~;$iX7U;P-^jmX5@KCx@=!92I>k^Pb8^N7lNicezFfCIb-%2cf6q{zRGNzZb=pjo
z&ZRnhz!0YmPHQYjVR+T4V3Nf`4H)El4Cot=ElU+BIfbh3V~NFU3KPJA4fuLEo6HnTshPE|ECF8yw-=~V9PS|2g~1!cOqhWVn&r_Sko_)((NS0rGU&aa
z7hONIJrT(`|G+Q`WcXxE(IMXL(|AZ3l9Hr2oP^$d4Cvs#h2}9l04k0b%J?kwyJ_-)
z0Yx4c7LwZ`8Z6I16D$%+xCkP`dLMT98uZ5W`$_Uhpo4-~vjgf4kq)k<0Y+x&poRy>
z4=CR#6omZ9hVqS}228#O-XQQO#1wzqlYYVQfndl|B4-JbO)5n5Ba
z)y^_^8cXaCtgQyiW5vm9GYUciQ%zzxRr7VtczuoK??=kr_cLg24&;a5f8Kbo#{P9}
g?1%NAR4re=+Hd!+%`IO}FJFF#{*b=qLGpwD2Hw7GG5`Po
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