mirror of https://github.com/brouhaha/a3a2em.git
1344 lines
28 KiB
NASM
1344 lines
28 KiB
NASM
; Partially reverse-engineered code from the Apple II emulation disk for
|
|
; the Apple ///
|
|
; Code copyright Apple Computer
|
|
; Reverse-engineering (macros, functions, labels, comments) copyright 2018
|
|
; Eric Smith <spacewar@gmail.com>
|
|
|
|
; Cross-assemble with Macro Assembler AS:
|
|
; http://john.ccac.rwth-aachen.de:8000/as/
|
|
|
|
; Apple II emulation disk organization:
|
|
|
|
; disk scectors memory
|
|
; T00S0..T01S7 a000..b7ff boot, configuration, charset, emulation setup code
|
|
; T02S0..T09S5 2000..95ff ROM images
|
|
|
|
; T02S0..T02S2 2000..22ff peripheral card ROMs for slots 5-7
|
|
; T02Sb..T05Sa 2b00..5aff Programmer's Aid #1, Integer BASIC, monitor
|
|
; T05Sb..T05Sd 5b00..5dff peripheral card ROMs for slots 5-7
|
|
; T06S6..T09S5 6600..95ff Applesoft BASIC, monitor
|
|
|
|
; Apple /// boot ROM loads block zero (T00S0 and T00S1) to a000..a1ff
|
|
; that code loads T00S2..T01S7 to a200..b7ff
|
|
; loads ROM images from T02S0..T09S5 to 2000..95ff
|
|
; based on user configuration choices, copies selected ROM images to
|
|
; final locations
|
|
|
|
cpu 6502
|
|
|
|
fillto macro addr, val
|
|
while * < addr
|
|
size set addr-*
|
|
if size > 256
|
|
size set 256
|
|
endif
|
|
fcb [size] val
|
|
endm
|
|
endm
|
|
|
|
fcch macro string
|
|
irpc char,string
|
|
fcb $80+'char'
|
|
endm
|
|
endm
|
|
|
|
text_addr function x, y, (((y & 7) * 128) + ((y >> 3) * 40) + x)
|
|
|
|
text_line macro y
|
|
if (y > 0) && ((y >> 3) == 0)
|
|
org text_origin + ((y & 7) * 128) + ((y >> 3) * 40) - 8
|
|
fcch " " ; screen holes
|
|
else
|
|
org text_origin + ((y & 7) * 128) + ((y >> 3) * 40)
|
|
endif
|
|
endm
|
|
|
|
|
|
char_bs equ $08
|
|
char_cr equ $0d
|
|
char_esc equ $1b
|
|
|
|
Z00 equ $00
|
|
Z02 equ $02
|
|
blk equ $04
|
|
lstblk equ $05
|
|
|
|
ibbufp equ $85 ; disk buffer pointer
|
|
ibcmd equ $87 ; disk command, 0 = seek, 1 = read, 2 = write
|
|
|
|
Zf0 equ $f0
|
|
Zf1 equ $f1
|
|
Zf2 equ $f2
|
|
Zf3 equ $f3
|
|
Zf4 equ $f4
|
|
Zf5 equ $f5
|
|
|
|
|
|
a2resetvec equ $03f2
|
|
a2resetvecchk equ $03f4
|
|
|
|
text_page_1 equ $0400
|
|
text_page_2 equ $0800
|
|
|
|
r03c01 equ text_addr(1, 3)
|
|
r05c01 equ text_addr(1, 5)
|
|
r07c01 equ text_addr(1, 7)
|
|
r10c01 equ text_addr(1, 10)
|
|
r12c01 equ text_addr(1, 12)
|
|
r14c01 equ text_addr(1, 14)
|
|
|
|
r10c00 equ text_addr(0, 10)
|
|
r12c00 equ text_addr(0, 12)
|
|
r14c00 equ text_addr(0, 14)
|
|
|
|
|
|
D05ab equ $05ab
|
|
D05b0 equ $05b0
|
|
|
|
D0826 equ $0826
|
|
|
|
|
|
ext_pg equ $1400
|
|
|
|
alt_zp equ $1800
|
|
|
|
D9600 equ $9600
|
|
|
|
|
|
; keyboard
|
|
kbd equ $c000
|
|
Dc008 equ $c008
|
|
kbd_clr equ $c010
|
|
|
|
Dc040 equ $c040
|
|
|
|
Dc051 equ $c051
|
|
Dc054 equ $c054
|
|
Dc056 equ $c056
|
|
|
|
Dc0da equ $c0da
|
|
Dc0db equ $c0db
|
|
|
|
Dc529 equ $c529
|
|
Dc552 equ $c552
|
|
Dc557 equ $c557
|
|
Dc55c equ $c55c
|
|
Dc561 equ $c561
|
|
Dc729 equ $c729
|
|
|
|
|
|
; Apple III ROM entry points
|
|
blockio equ $f479
|
|
|
|
; Apple III VIA ports
|
|
Dffd0 equ $ffd0
|
|
Dffdf equ $ffdf
|
|
Dffe3 equ $ffe3
|
|
Dffec equ $ffec
|
|
Dffed equ $ffed
|
|
Dffee equ $ffee
|
|
Dffef equ $ffef
|
|
|
|
|
|
; Apple II ROM entry points
|
|
a2rst equ $fa62
|
|
a2init equ $fb2f
|
|
Sfb6f equ $fb6f
|
|
a2wait equ $fca8
|
|
a2normal equ $fe84
|
|
a2setkbd equ $fe89
|
|
a2setvid equ $fe93
|
|
a2rtrn equ $ff58
|
|
|
|
|
|
org $a000
|
|
|
|
; Apple /// Apple II
|
|
boot: fcb $01 ; entry (ORA ZP,X) boot0 sector count
|
|
nop ; second byte of ORA entry point
|
|
|
|
lda #$60 ; is Apple II emulation alread running?
|
|
cmp a2rtrn ; RTS in Apple II monitor ROM
|
|
bne La049 ; no
|
|
|
|
; Apple II emulation is already running, tell user
|
|
ldx #$00 ; copy message to display
|
|
La00b: lda (La026-$a000)+$0800,x ; Apple II boot block loads at $0800
|
|
sta D05ab,x
|
|
inx
|
|
cpx #$23
|
|
bne La00b
|
|
|
|
ldx #$1e
|
|
La018: lda #$ff
|
|
jsr a2wait ; Apple II monitor
|
|
dex
|
|
bne La018
|
|
|
|
inc a2resetvecchk ; mark Apple II reset vector as invalid
|
|
jmp a2rst
|
|
|
|
La026: fcch "EMULATION DISK-INSERT APPLE II DISK"
|
|
|
|
|
|
;; real Apple /// entry point
|
|
La049: sei
|
|
cld
|
|
lda #$77
|
|
sta Dffdf
|
|
|
|
ldx #$fb
|
|
txs
|
|
|
|
bit kbd_clr
|
|
|
|
; copy zero page to alt zero page, and clear extend page
|
|
ldy #$00
|
|
La058: lda Z00,y
|
|
sta alt_zp,y
|
|
lda #$00
|
|
sta ext_pg,y
|
|
iny
|
|
bne La058
|
|
|
|
lda #$18
|
|
sta Dffd0
|
|
|
|
; read blocks $0001..$000b to $a200..$b7ff
|
|
lda #$01
|
|
sta ibcmd
|
|
lda #$00
|
|
sta ibbufp
|
|
lda #$a2
|
|
sta ibbufp+1
|
|
lda #$01
|
|
sta blk
|
|
lda #$0c
|
|
sta lstblk
|
|
jsr Sa094
|
|
|
|
; read blocks $0010..$004a to $2000..$95ff
|
|
lda #$10
|
|
sta blk
|
|
lda #$4b
|
|
sta lstblk
|
|
lda #$20
|
|
sta ibbufp+1
|
|
jsr Sa094
|
|
|
|
jmp La0d9
|
|
|
|
|
|
Sa094: lda blk
|
|
cmp lstblk
|
|
bcs La0a9
|
|
ldx #$00
|
|
jsr blockio
|
|
bcs La0aa
|
|
inc ibbufp+1
|
|
inc ibbufp+1
|
|
inc blk
|
|
bne Sa094
|
|
La0a9: rts
|
|
|
|
La0aa: ldx #$00 ; copy I/O error message to display
|
|
La0ac: lda Da0c2,x
|
|
sta D05b0,x
|
|
inx
|
|
cpx #$17
|
|
bne La0ac
|
|
|
|
lda Dffdf
|
|
ora #$10
|
|
sta Dffdf
|
|
|
|
La0bf: jmp La0bf
|
|
|
|
Da0c2: fcc "** I/O ERROR - RETRY **"
|
|
|
|
|
|
; Everything before this point must be in first disk block
|
|
if *>$a200
|
|
error "boot block too long"
|
|
endif
|
|
|
|
|
|
La0d9: jsr load_charset_a3
|
|
La0dc: jsr clear_screen
|
|
ldx #$00
|
|
stx Da3c5
|
|
lda #main_menu&$ff
|
|
sta Z00
|
|
lda #main_menu>>8
|
|
sta Z00+1
|
|
lda #text_page_1&$ff
|
|
sta Z02
|
|
lda #text_page_1>>8
|
|
sta Z02+1
|
|
jsr Sa5b7
|
|
|
|
La0f7: lda kbd
|
|
bpl La0f7
|
|
bit kbd_clr
|
|
|
|
cmp #char_cr+$80
|
|
bne La106
|
|
jmp La4c7
|
|
La106: cmp #char_esc+$80
|
|
bne La0f7
|
|
|
|
La10a: jsr clear_screen
|
|
|
|
lda #config_menu&$ff
|
|
sta Z00
|
|
lda #config_menu>>8
|
|
sta Da3c5
|
|
sta Z00+1
|
|
|
|
lda #text_page_1&$ff
|
|
sta Z02
|
|
lda #text_page_1>>8
|
|
sta Z02+1
|
|
|
|
jsr Sa5b7
|
|
bit Dc051
|
|
|
|
ldy #$05
|
|
La128: lda Da4a3,y
|
|
sta Da496,y
|
|
dey
|
|
bpl La128
|
|
|
|
ldx #$00
|
|
jsr Sa301
|
|
inx
|
|
jsr Sa301
|
|
inx
|
|
jsr Sa301
|
|
stx Da4a2
|
|
lda Da497
|
|
beq La14e
|
|
jsr Sa28c
|
|
ldx #$00
|
|
jmp La153
|
|
La14e: jsr Sa29d
|
|
ldx #$00
|
|
La153: lda kbd
|
|
bpl La153
|
|
cmp #char_cr+$80
|
|
bne La1d7
|
|
lda Dc008
|
|
bit kbd_clr
|
|
and #$20
|
|
beq La169
|
|
jmp La4c7
|
|
|
|
La169: ldx #$05
|
|
La16b: lda Da496,x
|
|
sta Da4a3,x
|
|
dex
|
|
bpl La16b
|
|
|
|
lda #$01 ; read block 0 of disk
|
|
sta ibcmd
|
|
lda #D9600&$ff
|
|
sta ibbufp
|
|
lda #D9600>>8
|
|
sta ibbufp+1
|
|
lda #$00
|
|
sta blk
|
|
ldx #$00
|
|
jsr blockio
|
|
bcc La18e
|
|
jmp La337 ; error
|
|
|
|
La18e: ldx #$00 ; is it the emulation disk?
|
|
La190: lda boot,x
|
|
cmp D9600,x
|
|
beq La19b
|
|
jmp La358
|
|
La19b: inx
|
|
bne La190
|
|
|
|
lda #$02 ; write the page containing the config ($a400)
|
|
sta ibcmd ; to block 2 of the disk
|
|
lda #$00
|
|
sta ibbufp
|
|
lda #$a4
|
|
sta ibbufp+1
|
|
lda #$02
|
|
ldx #$00
|
|
jsr blockio
|
|
bcs La1b6
|
|
jmp La10a
|
|
|
|
La1b6: jsr clear_screen
|
|
|
|
ldx #$00
|
|
La1bb: lda msg_remove_write_protect,x
|
|
sta D05ab,x
|
|
inx
|
|
cpx #msg_remove_write_protect_len
|
|
bne La1bb
|
|
|
|
bit Dc040
|
|
ldx #$ff
|
|
La1cb: jsr Sa325
|
|
dex
|
|
bne La1cb
|
|
bit kbd_clr
|
|
jmp La10a
|
|
La1d7: bit kbd_clr
|
|
cmp #char_bs+$80
|
|
bne La213
|
|
jsr Sa2dd
|
|
ldy Da496,x
|
|
dey
|
|
tya
|
|
bpl La1eb
|
|
lda Da490,x
|
|
La1eb: sta Da496,x
|
|
La1ee: jsr Sa301
|
|
cpx #$01
|
|
beq La1f8
|
|
jmp La153
|
|
La1f8: lda Da497
|
|
beq La208
|
|
jsr Sa28c
|
|
lda #$02
|
|
sta Da4a2
|
|
jmp La153
|
|
La208: jsr Sa29d
|
|
lda #$05
|
|
sta Da4a2
|
|
jmp La153
|
|
La213: cmp #$95
|
|
bne La22e
|
|
jsr Sa2dd
|
|
lda Da496,x
|
|
cmp Da490,x
|
|
bne La229
|
|
lda #$00
|
|
sta Da496,x
|
|
beq La1ee
|
|
La229: inc Da496,x
|
|
bne La1ee
|
|
La22e: cmp #$8a
|
|
bne La243
|
|
jsr Sa277
|
|
cpx Da4a2
|
|
bne La23c
|
|
ldx #$ff
|
|
La23c: inx
|
|
jsr Sa263
|
|
jmp La153
|
|
La243: cmp #$8b
|
|
bne La256
|
|
jsr Sa277
|
|
dex
|
|
bpl La250
|
|
ldx Da4a2
|
|
La250: jsr Sa263
|
|
jmp La153
|
|
La256: cmp #$9b
|
|
bne La25d
|
|
jmp La10a
|
|
La25d: bit Dc040
|
|
jmp La153
|
|
|
|
Sa263: txa
|
|
asl
|
|
tay
|
|
lda Da484,y
|
|
sta Z02
|
|
lda Da484+1,y
|
|
sta Z02+1
|
|
lda #$a3
|
|
ldy #$00
|
|
sta (Z02),y
|
|
rts
|
|
|
|
Sa277: lda #$a0
|
|
sta text_page_1+r03c01
|
|
sta text_page_1+r05c01
|
|
sta text_page_1+r07c01
|
|
sta text_page_1+r10c01
|
|
sta text_page_1+r12c01
|
|
sta text_page_1+r14c01
|
|
rts
|
|
|
|
Sa28c: ldy #$27
|
|
lda #$00
|
|
La290: sta text_page_2+r10c00,y
|
|
sta text_page_2+r12c00,y
|
|
sta text_page_2+r14c00,y
|
|
dey
|
|
bne La290
|
|
rts
|
|
|
|
Sa29d: ldy #$27
|
|
lda #$f0
|
|
La2a1: sta text_page_2+r10c00,y
|
|
sta text_page_2+r12c00,y
|
|
sta text_page_2+r14c00,y
|
|
dey
|
|
bne La2a1
|
|
txa
|
|
pha
|
|
ldx #$03
|
|
jsr Sa301
|
|
inx
|
|
jsr Sa301
|
|
inx
|
|
jsr Sa301
|
|
stx Da4a2
|
|
pla
|
|
tax
|
|
rts
|
|
|
|
|
|
Sa2c2: clc
|
|
lda Da49c,x
|
|
adc Da496,x
|
|
asl
|
|
tay
|
|
lda Da45a,y
|
|
sta Z00
|
|
sta Z02
|
|
lda Da45a+1,y
|
|
sta Z02+1
|
|
clc
|
|
adc #$04
|
|
sta Z00+1
|
|
rts
|
|
|
|
|
|
Sa2dd: jsr Sa2c2
|
|
txa
|
|
pha
|
|
ldx #$0f
|
|
La2e4: cpx #$0a
|
|
bcc La2eb
|
|
jsr Sa325
|
|
La2eb: ldy #$00
|
|
La2ed: lda (Z00),y
|
|
clc
|
|
adc #$0f
|
|
sta (Z00),y
|
|
iny
|
|
lda (Z02),y
|
|
cmp #$a0
|
|
bne La2ed
|
|
dex
|
|
bne La2e4
|
|
pla
|
|
tax
|
|
rts
|
|
|
|
Sa301: jsr Sa2c2
|
|
txa
|
|
pha
|
|
ldx #$0f
|
|
La308: cpx #$05
|
|
bcs La30f
|
|
jsr Sa325
|
|
La30f: ldy #$00
|
|
La311: lda (Z00),y
|
|
sec
|
|
sbc #$0f
|
|
sta (Z00),y
|
|
iny
|
|
lda (Z02),y
|
|
cmp #$a0
|
|
bne La311
|
|
dex
|
|
bne La308
|
|
pla
|
|
tax
|
|
rts
|
|
|
|
Sa325: lda #$18
|
|
sta Dffed
|
|
La32a: lda kbd
|
|
bmi La336
|
|
lda Dffed
|
|
and #$10
|
|
beq La32a
|
|
La336: rts
|
|
|
|
La337: jsr clear_screen
|
|
|
|
ldx #$00
|
|
La33c: lda msg_emu_disk_error,x
|
|
sta D05ab,x
|
|
inx
|
|
cpx #msg_emu_disk_error_len
|
|
bne La33c
|
|
|
|
bit Dc040
|
|
ldx #$ff
|
|
La34c: jsr Sa325
|
|
dex
|
|
bne La34c
|
|
bit kbd_clr
|
|
jmp La10a
|
|
|
|
|
|
La358: jsr clear_screen
|
|
|
|
ldx #$00
|
|
La35d: lda msg_insert_emu_disk,x
|
|
sta D05ab,x
|
|
inx
|
|
cpx #msg_insert_emu_disk_len
|
|
bne La35d
|
|
|
|
bit Dc040
|
|
ldx #$ff
|
|
La36d: jsr Sa325
|
|
dex
|
|
bne La36d
|
|
bit kbd_clr
|
|
jmp La10a
|
|
|
|
La379: ldx #$00
|
|
La37b: lda msg_insert_a2_disk,x
|
|
sta D05ab,x
|
|
inx
|
|
cpx #msg_insert_a2_disk_len
|
|
bne La37b
|
|
|
|
bit Dc040
|
|
ldx #$ff
|
|
La38b: jsr Sa325
|
|
dex
|
|
bne La38b
|
|
bit kbd_clr
|
|
lda Da3c5
|
|
bne La39c
|
|
jmp La0dc
|
|
La39c: jmp La10a
|
|
|
|
La39f: ldx #$00
|
|
La3a1: lda msg_a2_disk_error,x
|
|
sta D05ab,x
|
|
inx
|
|
cpx #msg_a2_disk_error_len
|
|
bne La3a1
|
|
bit Dc040
|
|
ldx #$ff
|
|
La3b1: jsr Sa325
|
|
dex
|
|
bne La3b1
|
|
bit kbd_clr
|
|
lda Da3c5
|
|
bne La3c2
|
|
jmp La0dc
|
|
La3c2: jmp La10a
|
|
|
|
Da3c5: fcb $00
|
|
|
|
|
|
msg_remove_write_protect:
|
|
fcch "PLEASE REMOVE WRITE PROTECT TAB"
|
|
msg_remove_write_protect_len equ *-msg_remove_write_protect
|
|
|
|
msg_insert_emu_disk:
|
|
fcch "PLEASE INSERT EMULATION DISK"
|
|
msg_insert_emu_disk_len equ *-msg_insert_emu_disk
|
|
|
|
msg_emu_disk_error:
|
|
fcch "UNABLE TO READ EMULATION DISK"
|
|
msg_emu_disk_error_len equ *-msg_emu_disk_error
|
|
|
|
msg_insert_a2_disk:
|
|
fcch "PLEASE INSERT APPLE II BOOT DISK"
|
|
msg_insert_a2_disk_len equ *-msg_insert_a2_disk
|
|
|
|
msg_a2_disk_error:
|
|
fcch "UNABLE TO READ APPLE II DISK"
|
|
msg_a2_disk_error_len equ *-msg_a2_disk_error
|
|
|
|
|
|
; configuration screen field locations
|
|
Da45a: fdb text_page_1+text_addr(15,3) ; lang: Applesoft
|
|
fdb text_page_1+text_addr(26,3) ; lang: Integer BASIC
|
|
|
|
fdb text_page_1+text_addr(15,5) ; card: Serial
|
|
fdb text_page_1+text_addr(23,5) ; card: Communications
|
|
|
|
fdb text_page_1+text_addr(16,7) ; baud: 110
|
|
fdb text_page_1+text_addr(21,7) ; baud: 300
|
|
fdb text_page_1+text_addr(26,7) ; baud: 600
|
|
fdb text_page_1+text_addr(31,7) ; baud: 1200
|
|
fdb text_page_1+text_addr(15,8) ; baud: 2400
|
|
fdb text_page_1+text_addr(20,8) ; baud: 4800
|
|
fdb text_page_1+text_addr(25,8) ; baud: 9600
|
|
fdb text_page_1+text_addr(30,8) ; baud: 19200
|
|
|
|
fdb text_page_1+text_addr(15,10) ; line feed: enabled
|
|
fdb text_page_1+text_addr(24,10) ; line feed: disabled
|
|
|
|
fdb text_page_1+text_addr(15,12) ; line width: 40
|
|
fdb text_page_1+text_addr(18,12) ; line width: 72
|
|
fdb text_page_1+text_addr(21,12) ; line width: 80
|
|
fdb text_page_1+text_addr(24,12) ; line width: 132
|
|
|
|
fdb text_page_1+text_addr(28,12) ; characters
|
|
|
|
fdb text_page_1+text_addr(27,14) ; CR delay: on
|
|
fdb text_page_1+text_addr(31,14) ; CR delay: off
|
|
|
|
|
|
Da484: fdb text_page_1+r03c01
|
|
fdb text_page_1+r05c01
|
|
fdb text_page_1+r07c01
|
|
fdb text_page_1+r10c01
|
|
fdb text_page_1+r12c01
|
|
fdb text_page_1+r14c01
|
|
|
|
|
|
; default configuration choices
|
|
Da490: fcb $01,$01,$07,$01,$04,$01
|
|
|
|
config_start equ *
|
|
|
|
Da496: fcb $00 ; $00 for Applesoft, $01 for Integer BASIC
|
|
Da497: fcb $00 ; $00 for slot ROMs from $5b00, $01 for $2000
|
|
Da498: fcb $03
|
|
Da499: fcb $00
|
|
Da49a: fcb $04 ; line length setting
|
|
Da49b: fcb $01
|
|
|
|
config_end equ *
|
|
|
|
|
|
Da49c: fcb $00,$02,$04,$0c,$0e,$13
|
|
|
|
Da4a2: fcb $05
|
|
|
|
Da4a3: fcb $00,$00,$03,$00,$04,$01
|
|
|
|
Da4a9: fcb $93,$16,$17,$18,$1a,$1c,$1e,$1f ; indexed by Da498
|
|
Da4b1: fcb $b0,$40,$20,$10,$08,$04,$02,$01 ; indexed by Da498
|
|
|
|
Da4b9: fcb $01,$00 ; indexed by Da499
|
|
|
|
Da4bb: fcb $00,$80,$80,$80,$80 ; indexed for line length (Da49a)
|
|
|
|
Da4c0: fcb $00,$40 ; indexed by Da49b
|
|
|
|
Da4c2: fcb 41,72,80,132,0 ; line lengths (why 41?) (Da49a)
|
|
|
|
|
|
La4c7: jsr clear_screen
|
|
jsr load_charset_a2
|
|
|
|
lda Da496 ; copy which ROM image, Integer or Applesoft?
|
|
beq La4d8
|
|
lda #$2b ; 2b00..5aff Integer BASIC
|
|
sta Z00+1
|
|
bne La4dc
|
|
La4d8: lda #$66 ; 6600..95ff Applesoft
|
|
sta Z00+1
|
|
|
|
; copy main ROM image using extended addressing
|
|
; (avoids writing to VIA and ACIA registers)
|
|
La4dc: lda #$8f ; set Z02 to extended addressing
|
|
sta ext_pg+Z02+1
|
|
|
|
lda #$00
|
|
sta Z02
|
|
sta Z00
|
|
lda #$d0
|
|
sta Z02+1
|
|
|
|
ldy #$00
|
|
La4ed: lda (Z00),y
|
|
sta (Z02),y
|
|
inc Z00
|
|
inc Z02
|
|
bne La4ed
|
|
inc Z00+1
|
|
inc Z02+1
|
|
bne La4ed
|
|
|
|
; copy peripheral ROM images for slots 5 through 7
|
|
lda Da497 ; which set of ROMs?
|
|
beq La508
|
|
lda #$20 ; 2000..22ff
|
|
sta Z00+1
|
|
bne La50c
|
|
La508: lda #$5b ; 5b00..5dff
|
|
sta Z00+1
|
|
La50c: lda #$00
|
|
sta Z02
|
|
sta Z00
|
|
lda #$c5
|
|
sta Z02+1
|
|
ldy #$00
|
|
La518: lda (Z00),y
|
|
sta (Z02),y
|
|
inc Z00
|
|
inc Z02
|
|
bne La518
|
|
inc Z00+1
|
|
inc Z02+1
|
|
lda Z02+1
|
|
cmp #$c8
|
|
bne La518
|
|
|
|
lda #$00 ; change Z02 back to normal addressing
|
|
sta ext_pg+Z02+1
|
|
|
|
lda Da497
|
|
beq La545
|
|
|
|
ldx Da498
|
|
lda Da4a9,x
|
|
sta Dc529
|
|
sta Dc729
|
|
jmp La56f
|
|
|
|
La545: ldx Da498 ; slot 5 settings
|
|
lda Da4a9,x
|
|
sta Dc552
|
|
lda Da4b1,x
|
|
sta Dc557
|
|
|
|
ldx Da499
|
|
lda Da4b9,x
|
|
|
|
ldx Da49b
|
|
ora Da4c0,x
|
|
|
|
ldx Da49a
|
|
ora Da4bb,x
|
|
sta Dc55c
|
|
lda Da4c2,x
|
|
sta Dc561
|
|
|
|
La56f: lda #$00
|
|
sta Dffd0
|
|
lda #$fc
|
|
sta Dffdf
|
|
lda Dffef
|
|
sta Dffef
|
|
lda Dffe3
|
|
ora #$40
|
|
sta Dffe3
|
|
lda Dffef
|
|
and #$b0
|
|
sta Dffef
|
|
|
|
jsr a2init
|
|
jsr a2setvid
|
|
jsr a2setkbd
|
|
jsr a2normal
|
|
|
|
lda #$00
|
|
sta a2resetvec
|
|
lda #$e0
|
|
sta a2resetvec+1
|
|
|
|
jsr Sfb6f ; mark Apple II reset vector as valid
|
|
|
|
lda Dc051
|
|
lda Dc056
|
|
lda Dc054
|
|
|
|
inc a2resetvecchk ; mark Apple II reset vector as invalid
|
|
jmp a2rst
|
|
|
|
|
|
Sa5b7: ldy #$00
|
|
La5b9: lda (Z00),y
|
|
beq La5cd
|
|
sta (Z02),y
|
|
inc Z00
|
|
bne La5c5
|
|
inc Z00+1
|
|
La5c5: inc Z02
|
|
bne La5b9
|
|
inc Z02+1
|
|
bne La5b9
|
|
La5cd: rts
|
|
|
|
|
|
clear_screen:
|
|
ldy #$00
|
|
La5d0: lda #$a0
|
|
sta text_page_1,y
|
|
sta text_page_1+$0100,y
|
|
sta text_page_1+$0200,y
|
|
sta text_page_1+$0300,y
|
|
lda #$f0
|
|
sta text_page_2,y
|
|
sta text_page_2+$0100,y
|
|
sta text_page_2+$0200,y
|
|
sta text_page_2+$0300,y
|
|
iny
|
|
bne La5d0
|
|
rts
|
|
|
|
|
|
load_charset_a3:
|
|
lda #$00
|
|
sta Zf4
|
|
lda #charset_a3&$ff
|
|
sta Zf0
|
|
lda #charset_a3>>8
|
|
sta Zf1
|
|
bne La60a
|
|
|
|
load_charset_a2:
|
|
lda #$00
|
|
sta Zf4
|
|
lda #charset_a2&$ff
|
|
sta Zf0
|
|
lda #charset_a2>>8
|
|
sta Zf1
|
|
|
|
La60a: lda #$18
|
|
sta Dffee
|
|
lda Dffec
|
|
and #$0f
|
|
ora #$30
|
|
sta Dffec
|
|
La619: lda #$07
|
|
sta Zf5
|
|
La61d: jsr Sa652
|
|
inc Zf4
|
|
clc
|
|
lda Zf0
|
|
adc #$08
|
|
sta Zf0
|
|
bcc La62d
|
|
inc Zf1
|
|
La62d: dec Zf5
|
|
bpl La61d
|
|
|
|
bit Dc0db
|
|
|
|
ldx #$18
|
|
stx Dffed
|
|
|
|
La639: lda Dffed
|
|
and #$10
|
|
beq La639
|
|
|
|
stx Dffed
|
|
|
|
La643: lda Dffed
|
|
and #$08
|
|
beq La643
|
|
|
|
bit Dc0da
|
|
|
|
bit Zf4
|
|
bpl La619
|
|
rts
|
|
|
|
|
|
Sa652: ldx #$00
|
|
ldy #$00
|
|
La656: lda Zf5
|
|
and #$03
|
|
ora Da67e,y
|
|
sta Zf2
|
|
lda Zf5
|
|
lsr
|
|
lsr
|
|
cpy #$04
|
|
rol
|
|
ora #$08
|
|
sta Zf3
|
|
lda Zf4
|
|
sta (Zf2,x)
|
|
lda Zf3
|
|
eor #$0c
|
|
sta Zf3
|
|
lda (Zf0),y
|
|
sta (Zf2,x)
|
|
iny
|
|
cpy #$08
|
|
bcc La656
|
|
rts
|
|
|
|
|
|
Da67e: fcb $78,$7c,$f8,$fc,$78,$7c,$f8,$fc
|
|
|
|
|
|
charset_a3:
|
|
fcb $00,$1c,$22,$2a,$3a,$1a,$02,$3c ; $00
|
|
fcb $00,$08,$14,$22,$22,$3e,$22,$22 ; $01
|
|
fcb $00,$1e,$22,$22,$1e,$22,$22,$1e ; $02
|
|
fcb $00,$1c,$22,$02,$02,$02,$22,$1c ; $03
|
|
fcb $00,$1e,$22,$22,$22,$22,$22,$1e ; $04
|
|
fcb $00,$3e,$02,$02,$1e,$02,$02,$3e ; $05
|
|
fcb $00,$3e,$02,$02,$1e,$02,$02,$02 ; $06
|
|
fcb $00,$3c,$02,$02,$02,$32,$22,$3c ; $07
|
|
fcb $00,$22,$22,$22,$3e,$22,$22,$22 ; $08
|
|
fcb $00,$1c,$08,$08,$08,$08,$08,$1c ; $09
|
|
fcb $00,$20,$20,$20,$20,$20,$22,$1c ; $0a
|
|
fcb $00,$22,$12,$0a,$06,$0a,$12,$22 ; $0b
|
|
fcb $00,$02,$02,$02,$02,$02,$02,$3e ; $0c
|
|
fcb $00,$22,$36,$2a,$2a,$22,$22,$22 ; $0d
|
|
fcb $00,$22,$22,$26,$2a,$32,$22,$22 ; $0e
|
|
fcb $00,$1c,$22,$22,$22,$22,$22,$1c ; $0f
|
|
fcb $00,$1e,$22,$22,$1e,$02,$02,$02 ; $10
|
|
fcb $00,$1c,$22,$22,$22,$2a,$12,$2c ; $11
|
|
fcb $00,$1e,$22,$22,$1e,$0a,$12,$22 ; $12
|
|
fcb $00,$1c,$22,$02,$1c,$20,$22,$1c ; $13
|
|
fcb $00,$3e,$08,$08,$08,$08,$08,$08 ; $14
|
|
fcb $00,$22,$22,$22,$22,$22,$22,$1c ; $15
|
|
fcb $00,$22,$22,$22,$22,$22,$14,$08 ; $16
|
|
fcb $00,$22,$22,$22,$2a,$2a,$36,$22 ; $17
|
|
fcb $00,$22,$22,$14,$08,$14,$22,$22 ; $18
|
|
fcb $00,$22,$22,$14,$08,$08,$08,$08 ; $19
|
|
fcb $00,$3e,$20,$10,$08,$04,$02,$3e ; $1a
|
|
fcb $00,$3e,$06,$06,$06,$06,$06,$3e ; $1b
|
|
fcb $00,$00,$02,$04,$08,$10,$20,$00 ; $1c
|
|
fcb $00,$3e,$30,$30,$30,$30,$30,$3e ; $1d
|
|
fcb $00,$00,$00,$08,$14,$22,$00,$00 ; $1e
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$7f ; $1f
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$00 ; $20 space
|
|
fcb $01,$01,$01,$01,$01,$01,$01,$00 ; $21
|
|
fcb $00,$14,$14,$14,$00,$00,$00,$00 ; $22
|
|
fcb $08,$10,$3f,$40,$3f,$10,$08,$00 ; $23
|
|
fcb $00,$00,$00,$00,$00,$00,$7f,$7f ; $24
|
|
fcb $01,$01,$00,$00,$00,$00,$00,$00 ; $25
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$00 ; $26
|
|
fcb $00,$00,$00,$36,$49,$36,$00,$00 ; $27
|
|
fcb $00,$08,$04,$02,$02,$02,$04,$08 ; $28
|
|
fcb $00,$08,$10,$20,$20,$20,$10,$08 ; $29
|
|
fcb $00,$08,$2a,$1c,$08,$1c,$2a,$08 ; $2a
|
|
fcb $00,$00,$08,$08,$3e,$08,$08,$00 ; $2b
|
|
fcb $00,$00,$00,$00,$00,$08,$08,$04 ; $2c
|
|
fcb $00,$00,$00,$00,$3e,$00,$00,$00 ; $2d
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$08 ; $2e
|
|
fcb $00,$00,$20,$10,$08,$04,$02,$00 ; $2f
|
|
fcb $00,$1c,$22,$32,$2a,$26,$22,$1c ; $30 0
|
|
fcb $00,$08,$0c,$08,$08,$08,$08,$1c ; $31 1
|
|
fcb $00,$1c,$22,$20,$18,$04,$02,$3e ; $32 2
|
|
fcb $00,$3e,$20,$10,$18,$20,$22,$1c ; $33 3
|
|
fcb $00,$10,$18,$14,$12,$3e,$10,$10 ; $34 4
|
|
fcb $00,$3e,$02,$1e,$20,$20,$22,$1c ; $35 5
|
|
fcb $00,$38,$04,$02,$1e,$22,$22,$1c ; $36 6
|
|
fcb $00,$3e,$20,$10,$08,$04,$04,$04 ; $37 7
|
|
fcb $00,$1c,$22,$22,$1c,$22,$22,$1c ; $38 8
|
|
fcb $00,$1c,$22,$22,$3c,$20,$10,$0e ; $39 9
|
|
fcb $00,$00,$00,$08,$00,$08,$00,$00 ; $3a
|
|
fcb $00,$00,$00,$08,$00,$08,$08,$04 ; $3b
|
|
fcb $00,$10,$08,$04,$02,$04,$08,$10 ; $3c
|
|
fcb $00,$00,$00,$3e,$00,$3e,$00,$00 ; $3d
|
|
fcb $00,$04,$08,$10,$20,$10,$08,$04 ; $3e
|
|
fcb $00,$1c,$22,$10,$08,$08,$00,$08 ; $3f
|
|
fcb $80,$9c,$a2,$aa,$ba,$9a,$82,$bc ; $40 @
|
|
fcb $80,$88,$94,$a2,$a2,$be,$a2,$a2 ; $41 A
|
|
fcb $80,$9e,$a2,$a2,$9e,$a2,$a2,$9e ; $42 B
|
|
fcb $80,$9c,$a2,$82,$82,$82,$a2,$9c ; $43 C
|
|
fcb $80,$9e,$a2,$a2,$a2,$a2,$a2,$9e ; $44 D
|
|
fcb $80,$be,$82,$82,$9e,$82,$82,$be ; $45 E
|
|
fcb $80,$be,$82,$82,$9e,$82,$82,$82 ; $46 F
|
|
fcb $80,$bc,$82,$82,$82,$b2,$a2,$bc ; $47 G
|
|
fcb $80,$a2,$a2,$a2,$be,$a2,$a2,$a2 ; $48 H
|
|
fcb $80,$9c,$88,$88,$88,$88,$88,$9c ; $49 I
|
|
fcb $80,$a0,$a0,$a0,$a0,$a0,$a2,$9c ; $4a J
|
|
fcb $80,$a2,$92,$8a,$86,$8a,$92,$a2 ; $4b K
|
|
fcb $80,$82,$82,$82,$82,$82,$82,$be ; $4c L
|
|
fcb $80,$a2,$b6,$aa,$aa,$a2,$a2,$a2 ; $4d M
|
|
fcb $80,$a2,$a2,$a6,$aa,$b2,$a2,$a2 ; $4e N
|
|
fcb $80,$9c,$a2,$a2,$a2,$a2,$a2,$9c ; $4f O
|
|
fcb $80,$9e,$a2,$a2,$9e,$82,$82,$82 ; $50 P
|
|
fcb $80,$9c,$a2,$a2,$a2,$aa,$92,$ac ; $51 Q
|
|
fcb $80,$9e,$a2,$a2,$9e,$8a,$92,$a2 ; $52 R
|
|
fcb $80,$9c,$a2,$82,$9c,$a0,$a2,$9c ; $53 S
|
|
fcb $80,$be,$88,$88,$88,$88,$88,$88 ; $54 T
|
|
fcb $80,$a2,$a2,$a2,$a2,$a2,$a2,$9c ; $55 U
|
|
fcb $80,$a2,$a2,$a2,$a2,$a2,$94,$88 ; $56 V
|
|
fcb $80,$a2,$a2,$a2,$aa,$aa,$b6,$a2 ; $57 W
|
|
fcb $80,$a2,$a2,$94,$88,$94,$a2,$a2 ; $58 X
|
|
fcb $80,$a2,$a2,$94,$88,$88,$88,$88 ; $59 Y
|
|
fcb $80,$be,$a0,$90,$88,$84,$82,$be ; $5a Z
|
|
fcb $80,$be,$86,$86,$86,$86,$86,$be ; $5b
|
|
fcb $80,$80,$82,$84,$88,$90,$a0,$80 ; $5c
|
|
fcb $80,$be,$b0,$b0,$b0,$b0,$b0,$be ; $5d
|
|
fcb $80,$80,$80,$88,$94,$a2,$80,$80 ; $5e
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$ff ; $5f
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$80 ; $60
|
|
fcb $00,$00,$00,$1e,$11,$11,$11,$16 ; $61
|
|
fcb $00,$00,$00,$0f,$11,$11,$11,$0d ; $62
|
|
fcb $00,$01,$01,$71,$09,$49,$09,$71 ; $63
|
|
fcb $00,$00,$00,$01,$01,$00,$00,$00 ; $64
|
|
fcb $00,$1b,$0a,$0a,$0a,$0a,$0a,$1b ; $65
|
|
fcb $01,$01,$00,$00,$00,$00,$7f,$7f ; $66
|
|
fcb $40,$40,$40,$40,$40,$40,$40,$00 ; $67
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$7f ; $68
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$3f ; $69
|
|
fcb $00,$4e,$22,$4e,$02,$6e,$00,$7f ; $6a
|
|
fcb $00,$19,$44,$44,$45,$58,$00,$7f ; $6b
|
|
fcb $00,$19,$2a,$1b,$0a,$0a,$00,$7f ; $6c
|
|
fcb $40,$47,$41,$47,$41,$47,$40,$3f ; $6d
|
|
fcb $00,$66,$2a,$66,$2a,$6a,$00,$7f ; $6e
|
|
fcb $00,$5d,$48,$49,$48,$49,$00,$7f ; $6f
|
|
fcb $00,$1a,$2a,$1a,$2a,$2b,$00,$7f ; $70
|
|
fcb $40,$49,$4b,$4f,$4d,$49,$40,$3f ; $71
|
|
fcb $40,$40,$40,$40,$40,$40,$40,$40 ; $72
|
|
fcb $20,$10,$3c,$1e,$1e,$3e,$1c,$7f ; $73
|
|
fcb $01,$21,$51,$51,$21,$51,$11,$60 ; $74
|
|
fcb $40,$40,$40,$40,$40,$42,$41,$02 ; $75
|
|
fcb $00,$08,$1c,$08,$08,$08,$00,$7f ; $76
|
|
fcb $41,$41,$41,$41,$41,$49,$49,$04 ; $77
|
|
fcb $00,$08,$08,$08,$1c,$08,$00,$7f ; $78
|
|
fcb $00,$00,$04,$3e,$04,$00,$00,$7f ; $79
|
|
fcb $00,$00,$10,$3e,$10,$00,$00,$7f ; $7a
|
|
fcb $80,$80,$80,$88,$80,$88,$88,$84 ; $7b
|
|
fcb $80,$90,$88,$84,$82,$84,$88,$90 ; $7c
|
|
fcb $80,$80,$80,$be,$80,$be,$80,$80 ; $7d
|
|
fcb $80,$84,$88,$90,$a0,$90,$88,$84 ; $7e
|
|
fcb $80,$9c,$a2,$90,$88,$88,$80,$88 ; $7f
|
|
|
|
|
|
charset_a2:
|
|
fcb $00,$1c,$22,$2a,$3a,$1a,$02,$3c ; $00
|
|
fcb $00,$08,$14,$22,$22,$3e,$22,$22 ; $01
|
|
fcb $00,$1e,$22,$22,$1e,$22,$22,$1e ; $02
|
|
fcb $00,$1c,$22,$02,$02,$02,$22,$1c ; $03
|
|
fcb $00,$1e,$22,$22,$22,$22,$22,$1e ; $04
|
|
fcb $00,$3e,$02,$02,$1e,$02,$02,$3e ; $05
|
|
fcb $00,$3e,$02,$02,$1e,$02,$02,$02 ; $06
|
|
fcb $00,$3c,$02,$02,$02,$32,$22,$3c ; $07
|
|
fcb $00,$22,$22,$22,$3e,$22,$22,$22 ; $08
|
|
fcb $00,$1c,$08,$08,$08,$08,$08,$1c ; $09
|
|
fcb $00,$20,$20,$20,$20,$20,$22,$1c ; $0a
|
|
fcb $00,$22,$12,$0a,$06,$0a,$12,$22 ; $0b
|
|
fcb $00,$02,$02,$02,$02,$02,$02,$3e ; $0c
|
|
fcb $00,$22,$36,$2a,$2a,$22,$22,$22 ; $0d
|
|
fcb $00,$22,$22,$26,$2a,$32,$22,$22 ; $0e
|
|
fcb $00,$1c,$22,$22,$22,$22,$22,$1c ; $0f
|
|
fcb $00,$1e,$22,$22,$1e,$02,$02,$02 ; $10
|
|
fcb $00,$1c,$22,$22,$22,$2a,$12,$2c ; $11
|
|
fcb $00,$1e,$22,$22,$1e,$0a,$12,$22 ; $12
|
|
fcb $00,$1c,$22,$02,$1c,$20,$22,$1c ; $13
|
|
fcb $00,$3e,$08,$08,$08,$08,$08,$08 ; $14
|
|
fcb $00,$22,$22,$22,$22,$22,$22,$1c ; $15
|
|
fcb $00,$22,$22,$22,$22,$22,$14,$08 ; $16
|
|
fcb $00,$22,$22,$22,$2a,$2a,$36,$22 ; $17
|
|
fcb $00,$22,$22,$14,$08,$14,$22,$22 ; $18
|
|
fcb $00,$22,$22,$14,$08,$08,$08,$08 ; $19
|
|
fcb $00,$3e,$20,$10,$08,$04,$02,$3e ; $1a
|
|
fcb $00,$3e,$06,$06,$06,$06,$06,$3e ; $1b
|
|
fcb $00,$00,$02,$04,$08,$10,$20,$00 ; $1c
|
|
fcb $00,$3e,$30,$30,$30,$30,$30,$3e ; $1d
|
|
fcb $00,$00,$00,$08,$14,$22,$00,$00 ; $1e
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$7f ; $1f
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$00 ; $20 space
|
|
fcb $00,$08,$08,$08,$08,$08,$00,$08 ; $21 !
|
|
fcb $00,$14,$14,$14,$00,$00,$00,$00 ; $22 "
|
|
fcb $00,$14,$14,$3e,$14,$3e,$14,$14 ; $23
|
|
fcb $00,$08,$3c,$0a,$1c,$28,$1e,$08 ; $24
|
|
fcb $00,$06,$26,$10,$08,$04,$32,$30 ; $25
|
|
fcb $00,$04,$0a,$0a,$04,$2a,$12,$2c ; $26
|
|
fcb $00,$08,$08,$08,$00,$00,$00,$00 ; $27
|
|
fcb $00,$08,$04,$02,$02,$02,$04,$08 ; $28
|
|
fcb $00,$08,$10,$20,$20,$20,$10,$08 ; $29
|
|
fcb $00,$08,$2a,$1c,$08,$1c,$2a,$08 ; $2a
|
|
fcb $00,$00,$08,$08,$3e,$08,$08,$00 ; $2b
|
|
fcb $00,$00,$00,$00,$00,$08,$08,$04 ; $2c
|
|
fcb $00,$00,$00,$00,$3e,$00,$00,$00 ; $2d
|
|
fcb $00,$00,$00,$00,$00,$00,$00,$08 ; $2e
|
|
fcb $00,$00,$20,$10,$08,$04,$02,$00 ; $2f
|
|
fcb $00,$1c,$22,$32,$2a,$26,$22,$1c ; $30 0
|
|
fcb $00,$08,$0c,$08,$08,$08,$08,$1c ; $31 1
|
|
fcb $00,$1c,$22,$20,$18,$04,$02,$3e ; $32 2
|
|
fcb $00,$3e,$20,$10,$18,$20,$22,$1c ; $33 3
|
|
fcb $00,$10,$18,$14,$12,$3e,$10,$10 ; $34 4
|
|
fcb $00,$3e,$02,$1e,$20,$20,$22,$1c ; $35 5
|
|
fcb $00,$38,$04,$02,$1e,$22,$22,$1c ; $36 6
|
|
fcb $00,$3e,$20,$10,$08,$04,$04,$04 ; $37 7
|
|
fcb $00,$1c,$22,$22,$1c,$22,$22,$1c ; $38 8
|
|
fcb $00,$1c,$22,$22,$3c,$20,$10,$0e ; $39 9
|
|
fcb $00,$00,$00,$08,$00,$08,$00,$00 ; $3a
|
|
fcb $00,$00,$00,$08,$00,$08,$08,$04 ; $3b
|
|
fcb $00,$10,$08,$04,$02,$04,$08,$10 ; $3c
|
|
fcb $00,$00,$00,$3e,$00,$3e,$00,$00 ; $3d
|
|
fcb $00,$04,$08,$10,$20,$10,$08,$04 ; $3e
|
|
fcb $00,$1c,$22,$10,$08,$08,$00,$08 ; $3f
|
|
fcb $80,$9c,$a2,$aa,$ba,$9a,$82,$bc ; $40 @
|
|
fcb $80,$88,$94,$a2,$a2,$be,$a2,$a2 ; $41 A
|
|
fcb $80,$9e,$a2,$a2,$9e,$a2,$a2,$9e ; $42 B
|
|
fcb $80,$9c,$a2,$82,$82,$82,$a2,$9c ; $43 C
|
|
fcb $80,$9e,$a2,$a2,$a2,$a2,$a2,$9e ; $44 D
|
|
fcb $80,$be,$82,$82,$9e,$82,$82,$be ; $45 E
|
|
fcb $80,$be,$82,$82,$9e,$82,$82,$82 ; $46 F
|
|
fcb $80,$bc,$82,$82,$82,$b2,$a2,$bc ; $47 G
|
|
fcb $80,$a2,$a2,$a2,$be,$a2,$a2,$a2 ; $48 H
|
|
fcb $80,$9c,$88,$88,$88,$88,$88,$9c ; $49 I
|
|
fcb $80,$a0,$a0,$a0,$a0,$a0,$a2,$9c ; $4a J
|
|
fcb $80,$a2,$92,$8a,$86,$8a,$92,$a2 ; $4b K
|
|
fcb $80,$82,$82,$82,$82,$82,$82,$be ; $4c L
|
|
fcb $80,$a2,$b6,$aa,$aa,$a2,$a2,$a2 ; $4d M
|
|
fcb $80,$a2,$a2,$a6,$aa,$b2,$a2,$a2 ; $4e N
|
|
fcb $80,$9c,$a2,$a2,$a2,$a2,$a2,$9c ; $4f O
|
|
fcb $80,$9e,$a2,$a2,$9e,$82,$82,$82 ; $50 P
|
|
fcb $80,$9c,$a2,$a2,$a2,$aa,$92,$ac ; $51 Q
|
|
fcb $80,$9e,$a2,$a2,$9e,$8a,$92,$a2 ; $52 R
|
|
fcb $80,$9c,$a2,$82,$9c,$a0,$a2,$9c ; $53 S
|
|
fcb $80,$be,$88,$88,$88,$88,$88,$88 ; $54 T
|
|
fcb $80,$a2,$a2,$a2,$a2,$a2,$a2,$9c ; $55 U
|
|
fcb $80,$a2,$a2,$a2,$a2,$a2,$94,$88 ; $56 V
|
|
fcb $80,$a2,$a2,$a2,$aa,$aa,$b6,$a2 ; $57 W
|
|
fcb $80,$a2,$a2,$94,$88,$94,$a2,$a2 ; $58 X
|
|
fcb $80,$a2,$a2,$94,$88,$88,$88,$88 ; $59 Y
|
|
fcb $80,$be,$a0,$90,$88,$84,$82,$be ; $5a Z
|
|
fcb $80,$be,$86,$86,$86,$86,$86,$be ; $5b
|
|
fcb $80,$80,$82,$84,$88,$90,$a0,$80 ; $5c
|
|
fcb $80,$be,$b0,$b0,$b0,$b0,$b0,$be ; $5d
|
|
fcb $80,$80,$80,$88,$94,$a2,$80,$80 ; $5e
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$ff ; $5f
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$80 ; $60
|
|
fcb $80,$88,$88,$88,$88,$88,$80,$88 ; $61
|
|
fcb $80,$94,$94,$94,$80,$80,$80,$80 ; $62
|
|
fcb $80,$94,$94,$be,$94,$be,$94,$94 ; $63
|
|
fcb $80,$88,$bc,$8a,$9c,$a8,$9e,$88 ; $64
|
|
fcb $80,$86,$a6,$90,$88,$84,$b2,$b0 ; $65
|
|
fcb $80,$84,$8a,$8a,$84,$aa,$92,$ac ; $66
|
|
fcb $80,$88,$88,$88,$80,$80,$80,$80 ; $67
|
|
fcb $80,$88,$84,$82,$82,$82,$84,$88 ; $68
|
|
fcb $80,$88,$90,$a0,$a0,$a0,$90,$88 ; $69
|
|
fcb $80,$88,$aa,$9c,$88,$9c,$aa,$88 ; $6a
|
|
fcb $80,$80,$88,$88,$be,$88,$88,$80 ; $6b
|
|
fcb $80,$80,$80,$80,$80,$88,$88,$84 ; $6c
|
|
fcb $80,$80,$80,$80,$be,$80,$80,$80 ; $6d
|
|
fcb $80,$80,$80,$80,$80,$80,$80,$88 ; $6e
|
|
fcb $80,$80,$a0,$90,$88,$84,$82,$80 ; $6f
|
|
fcb $80,$9c,$a2,$b2,$aa,$a6,$a2,$9c ; $70
|
|
fcb $80,$88,$8c,$88,$88,$88,$88,$9c ; $71
|
|
fcb $80,$9c,$a2,$a0,$98,$84,$82,$be ; $72
|
|
fcb $80,$be,$a0,$90,$98,$a0,$a2,$9c ; $73
|
|
fcb $80,$90,$98,$94,$92,$be,$90,$90 ; $74
|
|
fcb $80,$be,$82,$9e,$a0,$a0,$a2,$9c ; $75
|
|
fcb $80,$b8,$84,$82,$9e,$a2,$a2,$9c ; $76
|
|
fcb $80,$be,$a0,$90,$88,$84,$84,$84 ; $77
|
|
fcb $80,$9c,$a2,$a2,$9c,$a2,$a2,$9c ; $78
|
|
fcb $80,$9c,$a2,$a2,$bc,$a0,$90,$8e ; $79
|
|
fcb $80,$80,$80,$88,$80,$88,$80,$80 ; $7a
|
|
fcb $80,$80,$80,$88,$80,$88,$88,$84 ; $7b
|
|
fcb $80,$90,$88,$84,$82,$84,$88,$90 ; $7c
|
|
fcb $80,$80,$80,$be,$80,$be,$80,$80 ; $7d
|
|
fcb $80,$84,$88,$90,$a0,$90,$88,$84 ; $7e
|
|
fcb $80,$9c,$a2,$90,$88,$88,$80,$88 ; $7f
|
|
|
|
|
|
config_menu:
|
|
text_origin set *
|
|
text_line 0
|
|
fcch " abbcde EMULATION MODE "
|
|
text_line 1
|
|
fcch "$$$$$$$$$ff$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
|
|
text_line 2
|
|
fcch " "
|
|
text_line 3
|
|
fcch " # LANGUAGE: APPLESOFT INTEGER&BASIC "
|
|
text_line 4
|
|
fcch " "
|
|
text_line 5
|
|
fcch " CARD: SERIAL COMMUNICATIONS "
|
|
text_line 6
|
|
fcch " "
|
|
text_line 7
|
|
fcch " BAUD RATE: 110 300 600 1200 "
|
|
text_line 8
|
|
fcch " 2400 4800 9600 19200 "
|
|
text_line 9
|
|
fcch " "
|
|
text_line 10
|
|
fcch " LINE FEED: ENABLED DISABLED "
|
|
text_line 11
|
|
fcch " "
|
|
text_line 12
|
|
fcch " LINE WIDTH: 40 72 80 132 "
|
|
fcb $a7
|
|
fcch " CHARACTERS"
|
|
text_line 13
|
|
fcch " "
|
|
text_line 14
|
|
fcch " CARRIAGE RETURN DELAY: ON OFF "
|
|
text_line 15
|
|
fcch " "
|
|
text_line 16
|
|
fcch " hhhi "
|
|
text_line 17
|
|
fcch " gnopq - BOOT abbcde DISK "
|
|
text_line 18
|
|
fcch " hhhi %% "
|
|
text_line 19
|
|
fcch " gjklm - RESTORE DEFAULTS "
|
|
text_line 20
|
|
fcch " h hhhi "
|
|
text_line 21
|
|
fcch " rstunopq - SAVE CONFIGURATION "
|
|
text_line 22
|
|
fcch " h h h h TO EMULATION DISK "
|
|
text_line 23
|
|
fcch " gvwxwywz! - SELECTION KEYS "
|
|
|
|
fcb $00 ; end
|
|
|
|
|
|
main_menu:
|
|
text_origin set *
|
|
text_line 0
|
|
fcch " "
|
|
text_line 1
|
|
fcch " "
|
|
text_line 2
|
|
fcch " abbcde EMULATION MODE "
|
|
text_line 3
|
|
fcch " %% "
|
|
text_line 4
|
|
fcch "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"
|
|
text_line 5
|
|
fcch " "
|
|
text_line 6
|
|
fcch " "
|
|
text_line 7
|
|
fcch " "
|
|
text_line 8
|
|
fcch " "
|
|
text_line 9
|
|
fcch " hhhi "
|
|
text_line 10
|
|
fcch " gnopq - BOOT abbcde DISK "
|
|
text_line 11
|
|
fcch " %% "
|
|
text_line 12
|
|
fcch " "
|
|
text_line 13
|
|
fcch " hhhi "
|
|
text_line 14
|
|
fcch " gjklm - CONFIGURATION MENU "
|
|
text_line 15
|
|
fcch " "
|
|
text_line 16
|
|
fcch " "
|
|
text_line 17
|
|
fcch " "
|
|
text_line 18
|
|
fcch " "
|
|
text_line 19
|
|
fcch " "
|
|
text_line 20
|
|
fcch " "
|
|
text_line 21
|
|
fcch " "
|
|
text_line 22
|
|
fcch " "
|
|
text_line 23
|
|
fcch " "
|
|
|
|
fcb $00 ; end
|
|
|
|
fillto $b800,$00
|