1990 lines
30 KiB
NASM
1990 lines
30 KiB
NASM
; Applied Engineering RamFactor firmware version 1.4
|
|
|
|
; Partially reverse-engineered by Eric Smith <spacewar@gmail.com>
|
|
|
|
; Cross-assemble with Macro Assembler AS:
|
|
; http://john.ccac.rwth-aachen.de:8000/as/
|
|
; Depends on AS "section" pseudo-op to provide separate namespaces
|
|
; for each slot ROM, and for diagnostics and partition manager
|
|
|
|
|
|
fillto macro endaddr,value,{noexpand}
|
|
ifnb value
|
|
v set value
|
|
else
|
|
v set $00
|
|
endif
|
|
while *<endaddr
|
|
if (endaddr-*)>1024
|
|
fcb [1024] v
|
|
else
|
|
fcb [endaddr-*] v
|
|
endif
|
|
endm
|
|
endm
|
|
|
|
|
|
L00 equ $00
|
|
Z39 equ $39
|
|
Z3e equ $3e
|
|
Z3f equ $3f
|
|
Z41 equ $41
|
|
Z42 equ $42 ; ProDOS interface command
|
|
Z43 equ $43 ; ProDOS interface unit number
|
|
Z44 equ $44 ; ProDOS interface buffer pointer (two bytes)
|
|
Z45 equ $45
|
|
Z46 equ $46 ; ProDOS interface block number (two bytes)
|
|
Z47 equ $47
|
|
Z48 equ $48
|
|
Z49 equ $49
|
|
Z4a equ $4a
|
|
Z4b equ $4b
|
|
|
|
D010b equ $010b
|
|
D010c equ $010c
|
|
D01a9 equ $01a9
|
|
D0200 equ $0200
|
|
|
|
; screen holes, global
|
|
mslot equ $07f8
|
|
|
|
; screen holes, slot-indexed
|
|
D0478 equ $0478 ; # blocks of whole card, divided by 256
|
|
D04f8 equ $04f8 ; index to partition data
|
|
D0578 equ $0578 ; partition base address, high bbyte
|
|
D05f8 equ $05f8 ; partition base address, mid byte
|
|
D0678 equ $0678 ; current partition size, pages, high byte
|
|
D06f8 equ $06f8 ; current partition size, pages, low byte
|
|
D0778 equ $0778 ; operating system code
|
|
D07f8 equ $07f8 ; operating system check code
|
|
|
|
D0800 equ $0800
|
|
L0801 equ $0801
|
|
D0900 equ $0900
|
|
|
|
L0a00 equ $0a00
|
|
|
|
Dbd12 equ $bd12 ; RWTS patch loc, three bytes
|
|
|
|
proflag equ $bf00 ; used to detect OS
|
|
; $00 - Pascal
|
|
; $4C - ProDOS
|
|
; $33 - DOS 3.3
|
|
Dbff8 equ $bff8
|
|
Dbff9 equ $bff9
|
|
Dbffa equ $bffa
|
|
Dbffb equ $bffb
|
|
|
|
kbd equ $c000 ; read keyboard
|
|
rdmainram equ $c002 ; IIe read main RAM
|
|
rdcardram equ $c003 ; IIe read auxilliary RAM
|
|
wrmainram equ $c004 ; IIe write main RAM
|
|
wrcardram equ $c005 ; IIe write auxilliary RAM
|
|
clr80vid equ $c00c ; IIe disable 80col
|
|
clraltchar equ $c00e ; IIe disable altchar
|
|
kbdstrb equ $c010 ; clea rkeyboard strobe
|
|
rdramrd equ $c013 ; IIe MSB reads 1 if main RAM read enabled
|
|
rdramwrt equ $c014 ; IIe MSB reads 1 if main RAM write enabled
|
|
|
|
Dc0nf equ $c08f ; bank select, add slot*$10
|
|
|
|
Dcfff equ $cfff ; turn off C800 shared ROM space
|
|
|
|
sloop equ $faba
|
|
init equ $fb2f
|
|
bell12 equ $fbe2
|
|
clreop equ $fc42
|
|
home equ $fc58
|
|
rdkey equ $fd0c
|
|
crout equ $fd8e
|
|
prbyte equ $fdda
|
|
cout equ $fded
|
|
setkbd equ $fe89
|
|
setvid equ $fe93
|
|
resetvec equ $fffc
|
|
|
|
|
|
pc_err_bad_cmd equ $01
|
|
pc_err_bad_pcnt equ $04
|
|
pc_err_bus_err equ $06
|
|
pc_err_bad_unit_num equ $11
|
|
pc_err_bad_ctl equ $21
|
|
pc_err_bad_ctl_param equ $22
|
|
pc_err_io_error equ $27
|
|
pc_err_no_drive equ $28
|
|
pc_err_no_write equ $2b ; write-protected
|
|
pc_err_bad_block_num equ $2d
|
|
pc_err_offline equ $2f
|
|
; Protocol Converter error codes $30..$3f are device-specific errors
|
|
; Protocol Converter error codes $50..$7f are device-specific non-fatal errors
|
|
|
|
|
|
irp banknum,0,1
|
|
|
|
org $c000+(banknum*$1000)
|
|
fcb "COPYRIGHT (C) 1986-89 APPLIED ENGINEERING",$00
|
|
fcb "BOB SANDER-CEDERLOF",$00
|
|
fcb "MICHAEL WILKS",$00
|
|
fcb "STEVEN MALECHEK",$00
|
|
fillto $c100+(banknum*$1000),$ae
|
|
|
|
irp slotnum,1,2,3,4,5,6,7
|
|
|
|
; per-slot ROM code
|
|
section bank_banknum_slot_slotnum
|
|
org $c000+(banknum*$1000)+(slotnum*$0100)
|
|
phase $c000+(slotnum*$0100)
|
|
|
|
; Bytes at Cn0{1,3,5} = $20, $00, $03 identify card as a block device
|
|
; Byte at Cn07 = $3C for Disk II,
|
|
; $00 for SmartPort interface supported
|
|
; Byte at CnFF = $00 for 16-sector Disk II, $ff for 13-sector Disk II,
|
|
; other value $xx = ProDOS block device, entry point = Cnxx, in this case
|
|
; $Cn2A
|
|
; For ProDOS block device:
|
|
; word at CnFC = device size in blocks,
|
|
; byte at CnFE = STATUS byte
|
|
|
|
slot0: cmp #$20 ; $Cn01 = $20
|
|
cmp #$00 ; $Cn03 = $00
|
|
cmp #$03 ; $Cn05 = $03
|
|
cmp #$00 ; $cn07 = $00
|
|
bcs boot4 ; always taken
|
|
|
|
; cn0a - RamFactor diagnostic (same entry point as Slinky memory test)
|
|
jsr Scn16
|
|
jmp Lcn9b
|
|
|
|
; cn10 - RamFactor Partion Manager
|
|
jsr Scn16
|
|
jmp Lcn9f
|
|
|
|
Scn16: sta clr80vid
|
|
sta kbd
|
|
sta clraltchar
|
|
jsr init
|
|
jsr setvid
|
|
jsr setkbd
|
|
|
|
romsel: ldy #$c0+slotnum
|
|
ldx Dcfff ; turn off all shared (c800) ROMs, except our
|
|
asl Dc0nf+(slotnum*$10) ; set bank 0
|
|
ldx #$88+(slotnum*$10)
|
|
sty mslot
|
|
stx D0778
|
|
jmp Lc9df
|
|
|
|
boot4: lda #$c0+slotnum
|
|
cmp Z39
|
|
php
|
|
jsr Scn16
|
|
plp
|
|
bne Lcn60
|
|
jsr Scdec
|
|
beq Lcn60
|
|
|
|
lda #$20 ; Patch RWTS with jsr $eaea ???
|
|
sta Dbd12
|
|
lda #$ea
|
|
sta Dbd12+1
|
|
sty Dbd12+2
|
|
|
|
ldx #$00
|
|
lda #$8d
|
|
sta D0200
|
|
rts
|
|
|
|
Lcn60: lda L00
|
|
bne Lcn6e
|
|
cpy L00+1
|
|
bne Lcn6e
|
|
jsr Scn7b
|
|
jmp sloop
|
|
|
|
Lcn6e: lda D04f8-$c0,Y
|
|
cmp #$01
|
|
bne Lcn9f
|
|
jsr Scn7b
|
|
clc
|
|
bcc Lcn9f
|
|
|
|
Scn7b: jsr Sca9a
|
|
jsr Scaeb
|
|
ldy #$c0+slotnum ; high byte of slot ROM base c100
|
|
lda L0801
|
|
beq Lcn9a
|
|
lda D07f8-$c0,Y
|
|
eor #$5a
|
|
cmp D0778-$c0,Y
|
|
bne Lcn9a
|
|
sta proflag
|
|
ldx #(slotnum*$10)
|
|
jmp L0801
|
|
|
|
Lcn9a: rts
|
|
|
|
; diagnostic
|
|
Lcn9b: ldy #$03
|
|
bne Lcna1
|
|
|
|
; partition managere
|
|
Lcn9f: ldy #$05
|
|
|
|
; copy four bytes from table to Z42..Z45
|
|
; gets download routine start address in Z42, end+1 in Z44
|
|
Lcna1: ldx #$03
|
|
Lcna3: lda Dcnd5,Y
|
|
sta Z42,X
|
|
dey
|
|
dex
|
|
bpl Lcna3
|
|
|
|
php
|
|
sei
|
|
stx Dc0nf+(slotnum*$10) ; set bank 1 ?
|
|
ldx #$88+(slotnum*$10)
|
|
|
|
ldy #$00 ; set Z3e to point to RAM where diag/partmgr load
|
|
sty Z3e
|
|
lda #$0a
|
|
sta Z3f
|
|
|
|
Lcnbb: lda (Z42),Y ; copy down to RAM
|
|
sta (Z3e),Y
|
|
iny
|
|
bne Lcnc6
|
|
inc Z3f
|
|
inc Z43
|
|
Lcnc6: cpy Z44
|
|
lda Z43
|
|
sbc Z45
|
|
bcc Lcnbb
|
|
|
|
asl Dc0nf+(slotnum*$10) ; set bank 0
|
|
plp
|
|
jmp L0a00
|
|
|
|
; table of bank 1 regions
|
|
Dcnd5: fdb b1_diag ; start of diag code
|
|
fdb b1_partmgr ; end of diag, start of partition manager
|
|
fdb b1_partmgr_end ; end of partition manager
|
|
|
|
|
|
slot_prodos:
|
|
clv
|
|
bvc slot_prodos_x
|
|
|
|
slot_protocol_converter
|
|
jsr romsel
|
|
jmp protocol_converter
|
|
|
|
slot_prodos_x:
|
|
jsr romsel
|
|
jmp prodos
|
|
|
|
; cnea
|
|
cmp #(slotnum*$10)
|
|
beq Lcnf2
|
|
tax
|
|
ldy #$0f
|
|
rts
|
|
|
|
Lcnf2: pla
|
|
pla
|
|
jsr romsel
|
|
jmp Lcc6f
|
|
|
|
fcb $ae ; distinguishes vendor of mem exp card
|
|
; $ae = Applied Engineering
|
|
|
|
fcb $01 ; low bit set = ramdisk
|
|
|
|
fdb $0000 ; block count (must be obtained by a STATUS request)
|
|
fcb $4f ; status byte
|
|
; 7 = 0: non-removable
|
|
; 6 = 1: interruptible
|
|
; 5..4 = 0: 0 volumes on device
|
|
; 3 = 1: supports format
|
|
; 2 = 1: supports write
|
|
; 1 = 1: supports read
|
|
; 0 = 1: supports status
|
|
fcb slot_prodos & $db ; ProDOS entry point pointer
|
|
|
|
dephase
|
|
endsection bank_banknum_slot_slotnum
|
|
|
|
endm ; irp slotnum,...
|
|
endm ; irp banknum,...
|
|
|
|
|
|
; C800 shared ROM code
|
|
|
|
org $c800
|
|
|
|
protocol_converter:
|
|
jsr Scd99
|
|
|
|
ldx #$09 ; save ten bytes from Z42 on stack
|
|
Lc805: lda Z42,X
|
|
pha
|
|
dex
|
|
bpl Lc805
|
|
tsx
|
|
|
|
lda D010c,X
|
|
sta Z46
|
|
lda D010b,X
|
|
sta Z45
|
|
|
|
ldy #$03
|
|
Lc818: lda (Z45),Y
|
|
sta Z41,Y
|
|
inc D010b,X
|
|
bne Lc825
|
|
inc D010c,X
|
|
Lc825: dey
|
|
bne Lc818
|
|
sty D04f8
|
|
sty D0578
|
|
sty D05f8
|
|
tax
|
|
cmp #$0a
|
|
bcs ret_pc_err_bad_cmd
|
|
lda Dc887,X
|
|
cmp (Z43),Y
|
|
bne ret_pc_err_bad_pcnt
|
|
|
|
ldy #$08
|
|
Lc83f: lda (Z43),Y
|
|
sta Z43,Y
|
|
dey
|
|
bne Lc83f
|
|
|
|
lsr ; first param is unit num, only allow 0 and 1
|
|
bne ret_pc_err_bad_unit_num
|
|
|
|
ldx D0778
|
|
|
|
ldy Z42 ; protocol converter command
|
|
lda #$c8
|
|
pha
|
|
lda Dc87d,Y
|
|
pha
|
|
lsr Z44
|
|
lda Z47
|
|
rts
|
|
|
|
ret_pc_err_bad_unit_num:
|
|
lda #$11
|
|
fcb $2c ; BIT abs opcode to skip two bytes
|
|
ret_pc_err_bad_cmd:
|
|
lda #pc_err_bad_cmd
|
|
fcb $2c ; BIT abs opcode to skip two bytes
|
|
ret_pc_err_bad_pcnt:
|
|
lda #pc_err_bad_pcnt
|
|
LC863: sta D04f8
|
|
Lc866: ldx #$00
|
|
Lc868: pla
|
|
sta Z42,X
|
|
inx
|
|
cpx #$0a
|
|
bcc Lc868
|
|
ldy D05f8
|
|
ldx D0578
|
|
lda D04f8
|
|
bne Lc87c
|
|
clc
|
|
Lc87c: rts
|
|
|
|
; dispatch table for Protocol Converter calls
|
|
Dc87d: fcb (pc_cmd_status-1)&$ff ; status
|
|
fcb (pc_cmd_read_block-1)&$ff ; read block
|
|
fcb (pc_cmd_write_block-1)&$ff ; write block
|
|
fcb (pc_cmd_format_init-1)&$ff ; format (no-op)
|
|
fcb (pc_cmd_control-1)&$ff ; control
|
|
fcb (pc_cmd_format_init-1)&$ff ; init
|
|
fcb (pc_cmd_rw_char-1)&$ff ; open character
|
|
fcb (pc_cmd_rw_char-1)&$ff ; close character
|
|
fcb (pc_cmd_read_bytes-1)&$ff ; read bytes
|
|
fcb (pc_cmd_write_bytes-1)&$ff ; write bytes
|
|
|
|
; parameter count for Protocol Converter calls
|
|
Dc887: fcb 3 ; status
|
|
fcb 3 ; read block
|
|
fcb 3 ; write block
|
|
fcb 1 ; format
|
|
fcb 3 ; control
|
|
fcb 1 ; init
|
|
fcb 1 ; open character
|
|
fcb 1 ; close character
|
|
fcb 4 ; read bytes
|
|
fcb 4 ; write bytes
|
|
|
|
pc_cmd_format_init:
|
|
jmp Lc866
|
|
|
|
pc_cmd_rw_char:
|
|
jmp ret_pc_err_bad_cmd
|
|
|
|
pc_cmd_write_bytes:
|
|
bcs Lc8c5
|
|
|
|
pc_cmd_read_bytes:
|
|
bcs Lc8b3
|
|
bcc pc_cmd_rw_char
|
|
|
|
pc_cmd_control:
|
|
beq pc_cmd_format_init
|
|
|
|
Lc89f: lda #$21
|
|
jmp Lc863
|
|
|
|
pc_cmd_read_block:
|
|
bcc pc_cmd_rw_char
|
|
jsr Sc90c
|
|
bcs Lc8c8
|
|
lda rdramrd
|
|
asl Z4b
|
|
asl
|
|
ror Z4b
|
|
Lc8b3: jmp Lc923
|
|
|
|
pc_cmd_write_block:
|
|
bcc pc_cmd_rw_char
|
|
jsr Sc90c
|
|
bcs Lc8c8
|
|
lda rdramwrt
|
|
asl Z4b
|
|
asl
|
|
ror Z4b
|
|
Lc8c5: jmp Lc982
|
|
|
|
Lc8c8: jmp Lc97d
|
|
|
|
pc_cmd_status:
|
|
bcs Lc8e0
|
|
bne Lc89f
|
|
ldy #$08
|
|
sty D0578
|
|
Lc8d4: dey
|
|
sta (Z45),Y
|
|
bne Lc8d4
|
|
lda #$01
|
|
sta (Z45),Y
|
|
jmp Lc866
|
|
|
|
Lc8e0: beq Lc8e9
|
|
ldy #$19
|
|
cmp #$03
|
|
bne Lc89f
|
|
fcb $2c ; BIT abs opcode to skip two bytes
|
|
Lc8e9: ldy #$04
|
|
sty D0578
|
|
dey
|
|
Lc8ef: lda Dc9c6,Y
|
|
cpy #$02
|
|
bne Lc904
|
|
ldx D07f8
|
|
lda D0678-$c0,X
|
|
lsr
|
|
sta (Z45),Y
|
|
dey
|
|
lda D06f8-$c0,X
|
|
ror
|
|
Lc904: sta (Z45),Y
|
|
dey
|
|
bpl Lc8ef
|
|
jmp Lc866
|
|
|
|
Sc90c: asl
|
|
sta Z4a
|
|
lda Z48
|
|
rol
|
|
bcs Lc922
|
|
sta Z4b
|
|
lda Z49
|
|
cmp #$01
|
|
bcs Lc922
|
|
sta Z47
|
|
lda #$02
|
|
sta Z48
|
|
Lc922: rts
|
|
|
|
Lc923: jsr Sc964
|
|
bcs Lc97d
|
|
bit rdramwrt
|
|
php
|
|
asl
|
|
bcc Lc932
|
|
sta wrcardram
|
|
Lc932: lda Z48
|
|
sta D05f8
|
|
beq Lc947
|
|
Lc939: lda Dbffb,X
|
|
sta (Z45),Y
|
|
iny
|
|
bne Lc939
|
|
inc Z46
|
|
dec Z48
|
|
bne Lc939
|
|
Lc947: lda Z47
|
|
beq Lc958
|
|
sta D0578
|
|
Lc94e: lda Dbffb,X
|
|
sta (Z45),Y
|
|
iny
|
|
cpy Z47
|
|
bne Lc94e
|
|
Lc958: sta wrmainram
|
|
plp
|
|
bpl Lc961
|
|
sta wrcardram
|
|
Lc961: jmp Lc866
|
|
|
|
Sc964: lda Z49
|
|
sta Dbff8,X
|
|
lda Z4a
|
|
sta Dbff9,X
|
|
lda Z4b
|
|
and #$7f
|
|
sta Dbffa,X
|
|
jsr Sca9d
|
|
ldy #$00
|
|
lda Z4b
|
|
rts
|
|
Lc97d: lda #$2d
|
|
jmp Lc863
|
|
|
|
Lc982: jsr Sc964
|
|
bcs Lc97d
|
|
bit rdramrd
|
|
php
|
|
sta rdmainram
|
|
asl
|
|
bcc Lc994
|
|
sta rdcardram
|
|
Lc994: lda Z48
|
|
sta D05f8
|
|
beq Lc9a9
|
|
Lc99b: lda (Z45),Y
|
|
sta Dbffb,X
|
|
iny
|
|
bne Lc99b
|
|
inc Z46
|
|
dec Z48
|
|
bne Lc99b
|
|
Lc9a9: lda Z47
|
|
sta D0578
|
|
beq Lc9ba
|
|
Lc9b0: lda (Z45),Y
|
|
sta Dbffb,X
|
|
iny
|
|
cpy Z47
|
|
bne Lc9b0
|
|
Lc9ba: sta rdmainram
|
|
plp
|
|
bpl Lc9c3
|
|
sta rdcardram
|
|
Lc9c3: jmp Lc866
|
|
|
|
Dc9c6: fcb $f8,$00,$00,$00
|
|
|
|
fcb $07,"RAMCARD"
|
|
fcb " "
|
|
|
|
fcb $00,$00,$00,$00
|
|
|
|
Lc9df: ldy D07f8
|
|
jsr Sca8e
|
|
lda Dbffb,X
|
|
cmp #$ae
|
|
bne Lca31
|
|
eor Dbffb,X
|
|
cmp #$5a
|
|
bne Lca31
|
|
lda Dbffb,X
|
|
sta D04f8-$c0,Y
|
|
eor #$5a
|
|
cmp Dbffb,X
|
|
bne Lca31
|
|
lda Dbffb,X
|
|
sta D0478-$c0,Y
|
|
lda D04f8-$c0,Y
|
|
sta Dbff8,X
|
|
lda Dbffb,X
|
|
sta D0578-$c0,Y
|
|
lda Dbffb,X
|
|
sta D05f8-$c0,Y
|
|
lda Dbffb,X
|
|
sta D0678-$c0,Y
|
|
lda Dbffb,X
|
|
sta D06f8-$c0,Y
|
|
lda Dbffb,X
|
|
sta D0778-$c0,Y
|
|
lda Dbffb,X
|
|
sta D07f8-$c0,Y
|
|
rts
|
|
|
|
Lca31: lda D0778-$c0,Y
|
|
eor D07f8-$c0,Y
|
|
cmp #$5a
|
|
beq Lca73
|
|
jsr Sca8e
|
|
lda #$04
|
|
sta Dbff9,X
|
|
lda Dbffb,X
|
|
eor Dbffb,X
|
|
eor Dbffb,X
|
|
eor Dbffb,X
|
|
ldx #$4c
|
|
cmp #$03
|
|
beq Lca61
|
|
ldx #$00
|
|
cmp #$06
|
|
beq Lca61
|
|
ldx #$33
|
|
cmp #$be
|
|
bne Lca6a
|
|
Lca61: txa
|
|
sta D0778-$c0,Y
|
|
eor #$5a
|
|
sta D07f8-$c0,Y
|
|
Lca6a: jsr Scb00
|
|
ldy D07f8
|
|
sta D0478-$c0,Y
|
|
Lca73: lda D0478-$c0,Y
|
|
asl
|
|
sta D0678-$c0,Y
|
|
lda #$00
|
|
sta D06f8-$c0,Y
|
|
sta D05f8-$c0,Y
|
|
sta D0578-$c0,Y
|
|
lda #$01
|
|
sta D04f8-$c0,Y
|
|
rts
|
|
|
|
Sca8b: ldx D0778
|
|
|
|
Sca8e: lda #$00
|
|
sta Dbff8,X
|
|
sta Dbff9,X
|
|
sta Dbffa,X
|
|
rts
|
|
|
|
Sca9a: jsr Sca8e
|
|
|
|
Sca9d: ldy D07f8
|
|
lda D0478-$c0,Y
|
|
cmp #$09
|
|
lda Dbffa,X
|
|
bcs Lcaac
|
|
and #$0f
|
|
Lcaac: pha
|
|
bne Lcacd
|
|
lda D04f8-$c0,Y
|
|
cmp #$08
|
|
bne Lcacd
|
|
lda Dbff9,X
|
|
cmp #$02
|
|
bcs Lcacd
|
|
ora #$fe
|
|
sta Dbff9,X
|
|
lda D0478-$c0,Y
|
|
sbc #$00
|
|
rol
|
|
sta Dbffa,X
|
|
Lcacb: pla
|
|
rts
|
|
|
|
Lcacd: lda Dbff9,X
|
|
cmp D06f8-$c0,Y
|
|
pla
|
|
pha
|
|
sbc D0678-$c0,Y
|
|
bcs Lcacb
|
|
lda Dbff9,X
|
|
adc D05f8-$c0,Y
|
|
sta Dbff9,X
|
|
pla
|
|
adc D0578-$c0,Y
|
|
sta Dbffa,X
|
|
rts
|
|
|
|
Scaeb: ldy #$00
|
|
Lcaed: lda Dbffb,X
|
|
sta D0800,Y
|
|
iny
|
|
bne Lcaed
|
|
Lcaf6: lda Dbffb,X
|
|
sta D0900,Y
|
|
iny
|
|
bne Lcaf6
|
|
rts
|
|
|
|
Scb00: jsr Sca8b
|
|
tay
|
|
cmp Dbffa,X
|
|
bne Lcb0b
|
|
ldy #$02
|
|
Lcb0b: ora Dcb95,Y
|
|
Lcb0e: sta Z3f
|
|
sta Z3e
|
|
sta Dbffa,X
|
|
lda Dbffb,X
|
|
dec Dbff8,X
|
|
pha
|
|
lda Z3f
|
|
sta Dbffb,X
|
|
dec Dbff8,X
|
|
and Dcb95,Y
|
|
beq Lcb3d
|
|
lda Z3f
|
|
sec
|
|
sbc Dcb98,Y
|
|
jmp Lcb0e
|
|
|
|
Lcb32: clc
|
|
lda Z3f
|
|
adc Dcb98,Y
|
|
sta Z3f
|
|
sta Dbffa,X
|
|
Lcb3d: lda Dbffb,X
|
|
cmp Z3f
|
|
bne Lcb83
|
|
eor #$ff
|
|
dec Dbff8,X
|
|
sta Dbffb,X
|
|
dec Dbff8,X
|
|
cmp Dbffb,X
|
|
bne Lcb83
|
|
dec Dbff8,X
|
|
lda Z3f
|
|
and Dcb95,Y
|
|
cmp Dcb95,Y
|
|
bne Lcb32
|
|
Lcb61: lda Z3e
|
|
sta Dbffa,X
|
|
pla
|
|
sta Dbffb,X
|
|
dec Dbff8,X
|
|
clc
|
|
lda Z3e
|
|
adc Dcb98,Y
|
|
sta Z3e
|
|
and Dcb95,Y
|
|
bne Lcb61
|
|
lda Z3f
|
|
dey
|
|
bpl Lcb0b
|
|
lsr
|
|
adc #$02
|
|
rts
|
|
|
|
Lcb83: dec Dbff8,X
|
|
sec
|
|
lda Z3f
|
|
beq Lcb61
|
|
sbc Dcb98,Y
|
|
sta Z3f
|
|
jmp Lcb61
|
|
|
|
fcb $ea,$ea
|
|
|
|
Dcb95: fcb $0c,$30,$c0
|
|
Dcb98: fcb $04,$10,$40
|
|
|
|
Scb9b:
|
|
fcb $a2,$04,$a0,$00,$a9
|
|
fcb $00,$48,$38,$a5,$3e,$fd,$de,$cb
|
|
fcb $48,$a5,$3f,$fd,$e3,$cb,$90,$0a
|
|
fcb $85,$3f,$68,$85,$3e,$68,$69,$00
|
|
fcb $d0,$e7,$68,$68,$d0,$08,$88,$10
|
|
fcb $05,$8a,$f0,$02,$a9,$10,$c8,$49
|
|
fcb $b0,$20,$ed,$fd,$ca,$10,$d0,$a9
|
|
fcb $cb,$4c,$ed,$fd,$08,$08,$20,$38
|
|
fcb $50,$68,$80,$98,$b0,$c8,$04,$28
|
|
fcb $90,$a0,$40,$00,$00,$01,$0f,$9c
|
|
|
|
prodos:
|
|
ldy Z42
|
|
iny
|
|
beq Scc58
|
|
jsr Scd99
|
|
ldy #$2b
|
|
bcs Lcc0c
|
|
ldy #$28
|
|
lda Z43
|
|
bmi Lcc0c
|
|
ldy Z42
|
|
beq Lcc0f
|
|
dey
|
|
beq Lcc1f
|
|
dey
|
|
beq Lcc3d
|
|
dey
|
|
beq Lcc1b
|
|
ldy #$01
|
|
fcb $2c ; BIT abs opcode to skip two bytes
|
|
lcc0a: ldy #$27
|
|
Lcc0c: tya
|
|
sec
|
|
rts
|
|
|
|
Lcc0f: ldy D07f8
|
|
jsr Scfe4
|
|
ldy D0478
|
|
ldx D04f8
|
|
Lcc1b: lda #$00
|
|
clc
|
|
rts
|
|
|
|
Lcc1f: jsr Scc58
|
|
bcs Lcc0a
|
|
ldy #$00
|
|
Lcc26: lda Dbffb,X
|
|
sta (Z44),Y
|
|
iny
|
|
bne Lcc26
|
|
inc Z45
|
|
Lcc30: lda Dbffb,X
|
|
sta (Z44),Y
|
|
iny
|
|
bne Lcc30
|
|
Lcc38: dec Z45
|
|
tya
|
|
clc
|
|
rts
|
|
|
|
Lcc3d: jsr Scc58
|
|
bcs Lcc0a
|
|
ldy #$00
|
|
Lcc44: lda (Z44),Y
|
|
sta Dbffb,X
|
|
iny
|
|
bne Lcc44
|
|
inc Z45
|
|
Lcc4e: lda (Z44),Y
|
|
sta Dbffb,X
|
|
iny
|
|
bne Lcc4e
|
|
beq Lcc38
|
|
|
|
Scc58: lda #$00
|
|
sta Dbff8,X
|
|
lda Z46
|
|
asl
|
|
sta Dbff9,X
|
|
lda Z47
|
|
rol
|
|
bcs Lcc6e
|
|
sta Dbffa,X
|
|
jsr Sca9d
|
|
Lcc6e: rts
|
|
|
|
Lcc6f: jsr Scd56
|
|
ldy #$10
|
|
bcs Lcce0
|
|
jsr Sccfb
|
|
ldy #$02
|
|
lda (Z48),Y
|
|
sta Z3e
|
|
eor #$01
|
|
beq Lcc88
|
|
bcc Lccdd
|
|
jsr Scd16
|
|
Lcc88: ldy #$0e
|
|
lda #$fe
|
|
sta (Z48),Y
|
|
ldy #$04
|
|
sty Z3f
|
|
lda (Z48),Y
|
|
cmp Dcd35,X
|
|
bcs Lccdd
|
|
lsr
|
|
ror Z3f
|
|
lsr
|
|
ror Z3f
|
|
lsr
|
|
ror Z3f
|
|
cpx #$01
|
|
beq Lcca9
|
|
lsr
|
|
ror Z3f
|
|
Lcca9: pha
|
|
iny
|
|
lda (Z48),Y
|
|
cmp Dcd37,X
|
|
bcs Lccdd
|
|
ora Z3f
|
|
pha
|
|
jsr Sca8b
|
|
pla
|
|
sta Dbff9,X
|
|
pla
|
|
sta Dbffa,X
|
|
jsr Sca9d
|
|
bcs Lccdd
|
|
ldy #$08
|
|
lda (Z48),Y
|
|
sta Z3e
|
|
iny
|
|
lda (Z48),Y
|
|
sta Z3f
|
|
ldy #$0c
|
|
lda (Z48),Y
|
|
tay
|
|
beq Lccf4
|
|
dey
|
|
beq Lccec
|
|
dey
|
|
beq Lcce2
|
|
Lccdd: sec
|
|
ldy #$80
|
|
Lcce0: bne Lccf5
|
|
Lcce2: lda (Z3e),Y
|
|
sta Dbffb,X
|
|
iny
|
|
bne Lcce2
|
|
beq Lccf4
|
|
Lccec: lda Dbffb,X
|
|
sta (Z3e),Y
|
|
iny
|
|
bne Lccec
|
|
Lccf4: clc
|
|
Lccf5: tya
|
|
ldy #$0d
|
|
sta (Z48),Y
|
|
rts
|
|
|
|
Sccfb: ldy D07f8
|
|
ldx #$03
|
|
Lcd00: lda D06f8-$c0,Y
|
|
cmp Dcd31,X
|
|
lda D0678-$c0,Y
|
|
sbc Dcd2d,X
|
|
bcs Lcd12
|
|
dex
|
|
bpl Lcd00
|
|
rts
|
|
|
|
Lcd12: txa
|
|
lsr
|
|
tax
|
|
rts
|
|
|
|
Scd16: clc
|
|
ldy D07f8
|
|
lda D05f8-$c0,Y
|
|
adc Dcd3b,X
|
|
sta D05f8-$c0,Y
|
|
lda D0578-$c0,Y
|
|
adc Dcd39,X
|
|
sta D0578-$c0,Y
|
|
rts
|
|
|
|
Dcd2d: fcb $02,$04,$06,$0c
|
|
Dcd31: fcb $30,$60,$40,$80
|
|
Dcd35: fcb $23,$32
|
|
Dcd37: fcb $10,$20
|
|
Dcd39: fcb $02,$06
|
|
Dcd3b: fcb $30,$40
|
|
|
|
|
|
Scd3d: ldy D07f8
|
|
jsr Scfe4
|
|
cmp #$10
|
|
bcs Lcd4c
|
|
lda D0478
|
|
beq Lcd55
|
|
Lcd4c: lda D07f8-$c0,Y
|
|
eor #$5a
|
|
cmp D0778-$c0,Y
|
|
sec
|
|
Lcd55: rts
|
|
|
|
Scd56: jsr Scd3d
|
|
bcc Lcd97
|
|
bne Lcd63
|
|
cmp #$33
|
|
bne Lcd97
|
|
clc
|
|
rts
|
|
|
|
Lcd63: lda #$33
|
|
sta D0778-$c0,Y
|
|
jsr Sccfb
|
|
bmi Lcd97
|
|
bcc Lcd91
|
|
lda D05f8-$c0,Y
|
|
pha
|
|
lda D0578-$c0,Y
|
|
pha
|
|
stx D04f8
|
|
jsr Scd16
|
|
ldy Dcfe2,X
|
|
jsr Scdfb
|
|
ldx D04f8
|
|
ldy D07f8
|
|
pla
|
|
sta D0578-$c0,Y
|
|
pla
|
|
sta D05f8-$c0,Y
|
|
Lcd91: ldy Dcfe2,X
|
|
jmp Lcdc1
|
|
|
|
Lcd97: sec
|
|
rts
|
|
|
|
Scd99: jsr Scd3d
|
|
bcc Lcdb0
|
|
bne Lcdb2
|
|
cmp #$cd
|
|
bne Lcda6
|
|
Lcda4: clc
|
|
rts
|
|
|
|
Lcda6: jsr Scdec
|
|
bne Lcdb0
|
|
cmp D0778-$c0,Y
|
|
beq Lcda4
|
|
Lcdb0: sec
|
|
rts
|
|
|
|
Lcdb2: jsr Scdec
|
|
bne Lcdb0
|
|
sta D0778-$c0,Y
|
|
ldy #$00
|
|
asl
|
|
bne Lcdc1
|
|
ldy #$87
|
|
Lcdc1: jsr Scdfb
|
|
jsr Sca8e
|
|
ldy D07f8
|
|
lda D04f8-$c0,Y
|
|
cmp #$01
|
|
beq Lcde2
|
|
clc
|
|
adc #$04
|
|
sta Dbff8,X
|
|
lda D0778-$c0,Y
|
|
sta Dbffb,X
|
|
eor #$5a
|
|
sta Dbffb,X
|
|
Lcde2: lda D0778-$c0,Y
|
|
eor #$5a
|
|
sta D07f8-$c0,Y
|
|
clc
|
|
rts
|
|
|
|
Scdec: lda proflag
|
|
beq Lcdf3
|
|
cmp #$4c
|
|
Lcdf3: rts
|
|
|
|
Lcdf4: ldx D0778
|
|
jsr Sce67
|
|
iny
|
|
|
|
Scdfb: lda Dcf30,Y
|
|
bne Lcdf4
|
|
rts
|
|
|
|
Lce01: and #$0f
|
|
sta Dbffb,X
|
|
|
|
Sce06: lda #$00
|
|
sta Dbffb,X
|
|
rts
|
|
|
|
Lce0c: tya
|
|
pha
|
|
lda D04f8
|
|
cmp #$01
|
|
lda D0478
|
|
sbc #$00
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tay
|
|
lda #$ff
|
|
sta Z3e
|
|
lda #$03
|
|
Lce23: lsr
|
|
ror Z3e
|
|
dey
|
|
bpl Lce23
|
|
sta Dbffb,X
|
|
lda Z3e
|
|
sta Dbffb,X
|
|
pla
|
|
tay
|
|
rts
|
|
|
|
Lce34: jsr Sce53
|
|
lda #$01
|
|
Lce39: pha
|
|
jsr Sce06
|
|
lda #$11
|
|
sta Dbffb,X
|
|
pla
|
|
pha
|
|
sta Dbffb,X
|
|
jsr Sce53
|
|
pla
|
|
clc
|
|
adc #$01
|
|
cmp #$1f
|
|
bcc Lce39
|
|
rts
|
|
|
|
Sce53: lda #$00
|
|
fcb $2c ; BIT abs opcode to skip two bytes
|
|
Lce56: lda #$ff
|
|
Lce58: sta Dbffb,X
|
|
cmp Dbff8,X
|
|
bne Lce58
|
|
ror
|
|
bcc Lce66
|
|
sta Dbffb,X
|
|
Lce66: rts
|
|
|
|
Sce67: cmp #$40
|
|
bcs Lce8e
|
|
cmp #$30
|
|
bcs Lcead
|
|
cmp #$20
|
|
bcs Lce01
|
|
cmp #$10
|
|
bcs Lce0c
|
|
cmp #$04
|
|
beq Lcec5
|
|
bcs Lce85
|
|
cmp #$02
|
|
bcc Lced9
|
|
beq Sce53
|
|
bcs Lce56
|
|
Lce85: cmp #$06
|
|
bcc Lced2
|
|
beq Lce34
|
|
jmp Lcef4
|
|
|
|
Lce8e: pha
|
|
and #$3f
|
|
beq Lceab
|
|
pla
|
|
pha
|
|
and #$c0
|
|
asl
|
|
beq Lcea2
|
|
lda #$ff
|
|
bcs Lcea2
|
|
iny
|
|
lda Dcf30,Y
|
|
Lcea2: sta Dbffb,X
|
|
pla
|
|
sec
|
|
sbc #$01
|
|
bne Lce8e
|
|
Lceab: pla
|
|
rts
|
|
|
|
Lcead: and #$0f
|
|
Lceaf: pha
|
|
lda #$ff
|
|
sta Dbffb,X
|
|
sta Dbffb,X
|
|
jsr Sce06
|
|
sta Dbffb,X
|
|
pla
|
|
sec
|
|
sbc #$01
|
|
bne Lceaf
|
|
rts
|
|
|
|
Lcec5: lda D04f8
|
|
sta Dbffb,X
|
|
lda D0478
|
|
Lcece: sta Dbffb,X
|
|
rts
|
|
|
|
Lced2: lda D07f8
|
|
eor #$f0
|
|
bne Lcece
|
|
Lced9: lda #$00
|
|
sta Dbff8,X
|
|
iny
|
|
lda Dcf30,Y
|
|
sta Dbff9,X
|
|
iny
|
|
lda Dcf30,Y
|
|
sta Dbffa,X
|
|
tya
|
|
pha
|
|
jsr Sca9d
|
|
pla
|
|
tay
|
|
rts
|
|
|
|
Lcef4: tya
|
|
pha
|
|
ldy D0478
|
|
beq Lcf08
|
|
nop
|
|
Lcefc: tya
|
|
pha
|
|
ldy #$20
|
|
jsr Scf27
|
|
pla
|
|
tay
|
|
dey
|
|
bne Lcefc
|
|
Lcf08: lda D04f8
|
|
pha
|
|
lsr
|
|
lsr
|
|
lsr
|
|
beq Lcf15
|
|
tay
|
|
jsr Scf27
|
|
Lcf15: pla
|
|
and #$07
|
|
tay
|
|
lda #$00
|
|
Lcf1b: sec
|
|
ror
|
|
dey
|
|
bpl Lcf1b
|
|
asl
|
|
sta Dbffb,X
|
|
pla
|
|
tay
|
|
rts
|
|
|
|
Scf27: lda #$ff
|
|
Lcf29: sta Dbffb,X
|
|
dey
|
|
bne Lcf29
|
|
rts
|
|
|
|
Dcf30: fcb $01,$00,$00,$02,$02,$01,$02,$00
|
|
fcb $02,$02,$20,$23,$44,$f4
|
|
fcb "RAM"
|
|
fcb $05,$99,$43,$c3,$27,$0d,$20
|
|
fcb $26,$04,$02,$02,$22,$24,$02,$02
|
|
fcb $23,$25,$02,$02,$24,$20,$02,$02
|
|
fcb $07,$02,$02,$01,$0c,$00,$10,$00
|
|
fcb $01,$00,$00,$02,$01,$04,$00,$44
|
|
fcb $02,$0f,$20,$93,$01,$10,$01,$47
|
|
fcb $33,$11,$0f,$04,$00,$00,$fe,$a0
|
|
fcb $41,$7a,$88,$48,$11,$01,$00,$00
|
|
fcb $23,$10,$00,$01,$88,$3f,$84,$3f
|
|
fcb $32,$02,$06,$00,$01,$00,$00,$02
|
|
fcb $01,$04,$00,$44,$02,$0f,$20,$93
|
|
fcb $01,$20,$02,$47,$33,$11,$1f,$04
|
|
fcb $00,$00,$fe,$a0,$41,$7a,$88,$48
|
|
fcb $11,$01,$00,$00,$32,$20,$00,$01
|
|
fcb $84,$c8,$f8,$84,$03,$06,$00,$01
|
|
fcb $00,$00,$02,$02,$01,$02,$00,$02
|
|
fcb $02,$82,$41,$06,$83,$44,$04
|
|
fcb "RAM"
|
|
fcb $05,$83,$04,$02,$02,$02
|
|
fcb $02,$02,$02,$02,$02,$02,$02,$02
|
|
fcb $02,$00,$44,$ae,$f4,$08,$52,$02
|
|
fcb $02,$00
|
|
|
|
Dcfe2: fcb $30,$5c
|
|
|
|
Scfe4: lda D0678-$c0,Y
|
|
lsr
|
|
sta D0478
|
|
lda D06f8-$c0,Y
|
|
ror
|
|
sta D04f8
|
|
rts
|
|
|
|
fillto $d000,$ff
|
|
|
|
; bank 1 common space ($c800-$cfff)
|
|
org $d800
|
|
|
|
b1_diag equ *-$1000
|
|
|
|
section diag
|
|
phase $0a00
|
|
|
|
Z24 equ $24
|
|
Z28 equ $28
|
|
Z29 equ $29
|
|
|
|
D0400 equ $0400
|
|
|
|
D0d29 equ $0d29
|
|
D0d2a equ $0d2a
|
|
D0d2b equ $0d2b
|
|
D0d2f equ $0d2f
|
|
|
|
diag: stx D0d2b
|
|
jsr home
|
|
ldy #$00
|
|
jsr S0c7d
|
|
jsr Scb00
|
|
sta D0d2a
|
|
ldy #$00
|
|
sty D0d2f
|
|
asl
|
|
bcc L0a1b
|
|
dey
|
|
tya
|
|
L0a1b: sty Z3e
|
|
sta Z3f
|
|
jsr Scb9b
|
|
ldy #$21
|
|
jsr S0c7d
|
|
jsr Sca8b
|
|
sta Dbffb,X
|
|
lda #$04
|
|
sta Dbff9,X
|
|
lda #$ff
|
|
sta Dbffb,X
|
|
ldy D07f8
|
|
sta D0778-$c0,Y
|
|
L0a3d: lda #$00
|
|
sta Z24
|
|
ldy #$27
|
|
jsr S0c7d
|
|
lda D0d2f
|
|
jsr prbyte
|
|
ldy #$2c
|
|
jsr S0c7d
|
|
lda Z24
|
|
clc
|
|
adc Z28
|
|
sta S0ae4+1
|
|
lda #$00
|
|
adc Z29
|
|
sta S0ae4+2
|
|
ldy #$08
|
|
L0a62: dey
|
|
dey
|
|
sty D0d29
|
|
jsr S0ae4
|
|
jsr S0ae8
|
|
bcs L0a80
|
|
ldy D0d29
|
|
bne L0a62
|
|
inc D0d2f
|
|
lda kbd
|
|
bpl L0a3d
|
|
sta kbdstrb
|
|
rts
|
|
|
|
L0a80: tya
|
|
pha
|
|
ldy #$35
|
|
jsr S0c7d
|
|
lda #$08
|
|
sec
|
|
sbc D0d29
|
|
lsr
|
|
tay
|
|
ora #$b0
|
|
jsr cout
|
|
cpy #$03
|
|
bcs L0a9a
|
|
pla
|
|
rts
|
|
|
|
L0a9a: ldy #$42
|
|
jsr S0c7d
|
|
ldx D0778
|
|
lda Dbff8,X
|
|
dec Dbff8,X
|
|
and #$7f
|
|
bne L0ab9
|
|
lda Dbff9,X
|
|
dec Dbff9,X
|
|
and #$7f
|
|
bne L0ab9
|
|
dec Dbffa,X
|
|
L0ab9: lda Dbffa,X
|
|
ldy D0d2a
|
|
cpy #$09
|
|
bcs L0ac5
|
|
and #$0f
|
|
L0ac5: jsr prbyte
|
|
lda Dbff9,X
|
|
jsr prbyte
|
|
lda Dbff8,X
|
|
jsr prbyte
|
|
lda #$ad
|
|
jsr cout
|
|
pla
|
|
eor Dbffb,X
|
|
jsr prbyte
|
|
jsr crout
|
|
rts
|
|
|
|
S0ae4: inc D0400
|
|
rts
|
|
|
|
S0ae8: lda D0af5,Y
|
|
pha
|
|
lda D0af4,Y
|
|
pha
|
|
ldx D0d2b
|
|
rts
|
|
|
|
D0af4: fcb $e3
|
|
D0af5: fcb $0b,$80,$0b,$1d,$0b,$fb,$0a,$a0
|
|
fcb $00,$98,$20,$0a,$0d,$5d,$fa,$bf
|
|
fcb $29,$0f,$d0,$13,$98,$dd,$f9,$bf
|
|
fcb $d0,$0d,$dd,$f8,$bf,$d0,$08,$20
|
|
fcb $e4,$0a,$c8,$d0,$e4,$18,$60,$38
|
|
fcb $60,$a9,$00,$a0,$f0,$20,$0a,$0d
|
|
fcb $ad,$28,$0d,$20,$6b,$0b,$8d,$28
|
|
fcb $0d,$ad,$27,$0d,$20,$6b,$0b,$8d
|
|
fcb $27,$0d,$20,$13,$0d,$ee,$28,$0d
|
|
fcb $d0,$0c,$ee,$27,$0d,$d0,$07,$ee
|
|
fcb $26,$0d,$d0,$02,$18,$60,$20,$e4
|
|
fcb $0a,$bd,$fb,$bf,$bd,$fa,$bf,$4d
|
|
fcb $26,$0d,$d0,$10,$bd,$f9,$bf,$cd
|
|
fcb $27,$0d,$d0,$08,$bd,$f8,$bf,$cd
|
|
fcb $28,$0d,$f0,$bc,$38,$60,$c9,$10
|
|
fcb $90,$06,$c9,$70,$b0,$03,$a9,$70
|
|
fcb $60,$c9,$90,$90,$fb,$c9,$f0,$b0
|
|
fcb $f7,$a9,$f0,$60,$ad,$2a,$0d,$f0
|
|
fcb $0e,$a9,$00,$8d,$30,$0d,$20,$96
|
|
fcb $0b,$20,$96,$0b,$20,$96,$0b,$18
|
|
fcb $60,$20,$8e,$ca,$a8,$98,$9d,$fb
|
|
fcb $bf,$20,$be,$0b,$d0,$f7,$20,$e4
|
|
fcb $0a,$98,$20,$0a,$0d,$98,$dd,$fb
|
|
fcb $bf,$d0,$0a,$20,$be,$0b,$d0,$f5
|
|
fcb $38,$6e,$30,$0d,$60,$68,$68,$38
|
|
fcb $60,$2c,$30,$0d,$10,$18,$ee,$26
|
|
fcb $0d,$fe,$fa,$bf,$ad,$26,$0d,$4a
|
|
fcb $cd,$2a,$0d,$90,$09,$a0,$00,$60
|
|
fcb $ee,$27,$0d,$fe,$f9,$bf,$ee,$28
|
|
fcb $0d,$c8,$60,$00,$55,$aa,$ff,$ad
|
|
fcb $2a,$0d,$f0,$13,$a0,$03,$b9,$e0
|
|
fcb $0b,$8d,$2c,$0d,$20,$fe,$0b,$20
|
|
fcb $2e,$0c,$b0,$04,$88,$10,$ef,$18
|
|
fcb $60,$20,$6d,$0c,$20,$0a,$0c,$ce
|
|
fcb $2d,$0d,$d0,$f8,$60,$98,$48,$ad
|
|
fcb $2c,$0d,$a0,$00,$8c,$2e,$0d,$9d
|
|
fcb $fb,$bf,$9d,$fb,$bf,$9d,$fb,$bf
|
|
fcb $9d,$fb,$bf,$c8,$d0,$f1,$20,$e4
|
|
fcb $0a,$ee,$2e,$0d,$d0,$e9,$68,$a8
|
|
fcb $60,$20,$6d,$0c,$20,$3c,$0c,$b0
|
|
fcb $05,$ce,$2d,$0d,$d0,$f6,$60,$98
|
|
fcb $48,$ad,$2c,$0d,$a0,$00,$8c,$2e
|
|
fcb $0d,$dd,$fb,$bf,$d0,$1e,$dd,$fb
|
|
fcb $bf,$d0,$19,$dd,$fb,$bf,$d0,$14
|
|
fcb $dd,$fb,$bf,$d0,$0f,$c8,$d0,$e9
|
|
fcb $20,$e4,$0a,$ee,$2e,$0d,$d0,$e1
|
|
fcb $68,$a8,$18,$60,$a8,$68,$38,$60
|
|
fcb $ad,$2a,$0d,$4a,$8d,$2d,$0d,$4c
|
|
fcb $8e,$ca
|
|
|
|
L0c77: php
|
|
jsr cout
|
|
plp
|
|
fcb $24 ; BIT zp opcode to skip one byte
|
|
S0c7d: clc
|
|
jsr S0c8f
|
|
lda D0ca1,X
|
|
bne L0c77
|
|
jsr S0c8f
|
|
lda D0cb0,X
|
|
bne L0c77
|
|
rts
|
|
|
|
S0c8f: lda D0cc0,Y
|
|
bcs L0c9b
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
sec
|
|
rts
|
|
|
|
L0c9b: iny
|
|
and #$0f
|
|
tax
|
|
clc
|
|
rts
|
|
|
|
D0ca1: fcb $00,$8d,$d2,$c1,$cd,$ae,$d4,$c9 ; "..RAM.TI"
|
|
fcb $d3,$a0,$c7,$cf,$cc,$c4,$c5 ; "S GOLDE"
|
|
D0cb0: fcb $ce,$00,$c2,$c3,$c6,$c8,$d0,$d9 ; "N.BCFHPY"
|
|
fcb $da,$cd,$d1,$d5,$d6,$b1,$b4,$ba ; "ZMQUV14:"
|
|
D0cc0: fcb $30,$60,$6c,$7e,$d9,$ef,$a7,$fe
|
|
fcb $e2,$7f,$a9,$23,$40,$43,$03,$6b
|
|
fcb $29,$6e,$86,$90,$c0,$d5,$0e,$11
|
|
fcb $4e,$4b,$20,$79,$87,$08,$e0,$f9
|
|
fcb $01,$90,$20,$76,$e8,$11,$01,$06
|
|
fcb $38,$80,$f9,$01,$99,$99,$6e,$86
|
|
fcb $7f,$a9,$55,$50,$19,$11,$03,$32
|
|
fcb $d9,$04,$37,$c0,$b2,$e5,$97,$d0
|
|
fcb $f9,$01,$99,$93,$dd,$2e,$88,$0f
|
|
fcb $90,$19,$8d,$28,$0d,$8d,$27,$0d
|
|
fcb $8c,$26,$0d,$ad,$28,$0d,$9d,$f8
|
|
fcb $bf,$ad,$27,$0d,$9d,$f9,$bf,$ad
|
|
fcb $26,$0d,$9d,$fa,$bf,$60
|
|
|
|
dephase
|
|
endsection diag
|
|
|
|
b1_diag_end equ *-$1000
|
|
|
|
b1_partmgr equ *-$1000
|
|
|
|
section partmgr
|
|
phase $0a00
|
|
|
|
Z24 equ $24
|
|
Z25 equ $25
|
|
Z32 equ $32
|
|
Z3e equ $3e
|
|
Z3f equ $3f
|
|
|
|
D03b8 equ $03b8
|
|
D06b8 equ $06b8
|
|
D0738 equ $0738
|
|
D0778 equ $0778
|
|
nnD07f8 equ $07f8
|
|
|
|
D0800 equ $0800
|
|
D0802 equ $0802
|
|
D0803 equ $0803
|
|
D0804 equ $0804
|
|
D0805 equ $0805
|
|
D0808 equ $0808
|
|
D0900 equ $0900
|
|
D0901 equ $0901
|
|
D0902 equ $0902
|
|
D0903 equ $0903
|
|
D0908 equ $0908
|
|
|
|
Dbff8 equ $bff8
|
|
Dbffb equ $bffb
|
|
|
|
Lc9df equ $c9df
|
|
Sca8b equ $ca8b
|
|
Sca8e equ $ca8e
|
|
Scaeb equ $caeb
|
|
Scb9b equ $cb9b
|
|
Scdfb equ $cdfb
|
|
|
|
bell12 equ $fbe2
|
|
clreop equ $fc42
|
|
home equ $fc58
|
|
rdkey equ $fd0c
|
|
crout equ $fd8e
|
|
cout equ $fded
|
|
|
|
partmgr:
|
|
jsr Sca8b
|
|
lda Dbffb,X
|
|
cmp #$ae
|
|
bne L0a1b
|
|
eor Dbffb,X
|
|
cmp #$5a
|
|
bne L0a1b
|
|
lda Dbffb,X
|
|
eor Dbffb,X
|
|
cmp #$5a
|
|
beq L0a6b
|
|
L0a1b: ldy D07f8
|
|
lda D06b8,Y
|
|
eor D0738,Y
|
|
cmp #$5a
|
|
bne L0a3f
|
|
jsr home
|
|
ldy #$88
|
|
jsr S0c8e
|
|
lda #'?'+$80
|
|
jsr cout
|
|
jsr rdkey_uc
|
|
cmp #'Y'+$80
|
|
beq L0a3f
|
|
jmp L0e06
|
|
|
|
L0a3f: jsr Sca8b
|
|
ldy #$aa
|
|
jsr Scdfb
|
|
jsr Sca8b
|
|
lda #$04
|
|
sta Dbff8,X
|
|
ldy D07f8
|
|
lda D03b8,Y
|
|
pha
|
|
sta Dbffb,X
|
|
lda #$0a
|
|
sta Dbff8,X
|
|
pla
|
|
asl
|
|
sec
|
|
sbc #$01
|
|
sta Dbffb,X
|
|
lda #$fc
|
|
sta Dbffb,X
|
|
L0a6b: jsr Sca8e
|
|
jsr Scaeb
|
|
lda D0802
|
|
sta D0901
|
|
jsr home
|
|
lsr D0900
|
|
L0a7d: lda #$00
|
|
sta Z24
|
|
sta Z25
|
|
ldy #$00
|
|
jsr S0c8e
|
|
lda D07f8
|
|
eor #$70
|
|
jsr cout
|
|
jsr crout
|
|
jsr crout
|
|
ldy #$00
|
|
L0a98: jsr S0c03
|
|
iny
|
|
cpy #$09
|
|
bcc L0a98
|
|
ldy #$14
|
|
jsr S0c8e
|
|
ldy #$59
|
|
bit D0900
|
|
bpl L0aae
|
|
ldy #$27
|
|
L0aae: jsr S0c8e
|
|
jsr clreop
|
|
|
|
jsr rdkey_uc
|
|
cmp #'1'+$80
|
|
bcc L0acf ; not a digit
|
|
cmp #'9'+1+$80
|
|
bcs L0acf ; not a digit
|
|
|
|
sbc #$b0 ; ASCII to binary digit
|
|
jsr S0c81
|
|
sta D0901
|
|
bit D0900
|
|
bmi L0a7d
|
|
jmp L0df6
|
|
|
|
L0acf: sta D0902
|
|
ldy #$06
|
|
bit D0900
|
|
bpl L0adb
|
|
ldy #$fd ; 253 }
|
|
L0adb: iny
|
|
iny
|
|
iny
|
|
lda D0af7,Y
|
|
beq L0af1
|
|
cmp D0902
|
|
bne L0adb
|
|
lda D0af9,Y
|
|
pha
|
|
lda D0af8,Y
|
|
pha
|
|
rts
|
|
|
|
L0af1: jsr bell12
|
|
jmp L0a7d
|
|
|
|
D0af7: fcb $ce ; "N"
|
|
D0af8: fcb $50 ; "P"
|
|
D0af9: fcb $0b,$c3,$f4,$0b,$d3,$70,$0b,$8d ; ".Ct.Sp.."
|
|
fcb $15,$0b,$88,$38,$0b,$8b,$38,$0b ; "...8..8."
|
|
fcb $8a,$48,$0b,$95,$48,$0b,$9b,$2a ; ".H..H..*"
|
|
fcb $0b,$d2,$23,$0b,$00,$2c,$00,$09 ; ".R#..,.."
|
|
fcb $30,$03,$4c,$f6,$0d,$20,$e8,$0d ; "0.Lv. h."
|
|
fcb $4c,$7a,$0a,$38,$6e,$00,$09,$4c ; "Lz.8n..L"
|
|
fcb $7d,$0a,$2c,$00,$09,$10,$03,$4c ; "}.,....L"
|
|
fcb $00,$0a,$20,$d7,$0d,$4c,$36,$0e ; ".. W.L6."
|
|
fcb $ad,$01,$09,$38,$e9,$18,$c9,$e0 ; "-..8i.I`"
|
|
fcb $b0,$03,$8d,$01,$09,$4c,$7d,$0a ; "0....L}."
|
|
fcb $ad,$01,$09,$18,$69,$18,$90,$ee ; "-...i..n"
|
|
fcb $a0,$76,$20,$8e,$0c,$a2,$10,$20 ; " v ..". "
|
|
fcb $4f,$0e,$b0,$11,$a2,$00,$ac,$01 ; "O.0.".,."
|
|
fcb $09,$bd,$08,$09,$99,$08,$08,$c8 ; ".=.....H"
|
|
fcb $e8,$e0,$10,$90,$f4,$4c,$7d,$0a ; "h`..tL}."
|
|
fcb $20,$43,$0e,$f0,$74,$98,$18,$69 ; " C.pt..i"
|
|
fcb $18,$a8,$c0,$e0,$b0,$6b,$20,$46 ; ".(@`0k F"
|
|
fcb $0e,$f0,$66,$a0,$7f,$20,$8e,$0c ; ".pf . .."
|
|
fcb $a2,$06,$20,$4f,$0e,$20,$a1,$0e ; "". O. !."
|
|
fcb $0e,$04,$09,$2e,$05,$09,$0e,$04 ; "........"
|
|
fcb $09,$2e,$05,$09,$18,$ac,$01,$09 ; ".....,.."
|
|
fcb $b9,$03,$08,$79,$1b,$08,$8d,$06 ; "9..y...."
|
|
fcb $09,$b9,$02,$08,$79,$1a,$08,$8d ; ".9..y..."
|
|
fcb $07,$09,$38,$ad,$06,$09,$ed,$04 ; "..8-..m."
|
|
fcb $09,$48,$ad,$07,$09,$ed,$05,$09 ; ".H-..m.."
|
|
fcb $90,$23,$99,$1a,$08,$68,$99,$1b ; ".#...h.."
|
|
fcb $08,$18,$ad,$04,$09,$99,$03,$08 ; "..-....."
|
|
fcb $79,$01,$08,$99,$19,$08,$ad,$05 ; "y.....-."
|
|
fcb $09,$99,$02,$08,$79,$00,$08,$99 ; "....y..."
|
|
fcb $18,$08,$4c,$7d,$0a,$68,$a0,$d5 ; "..L}.h U"
|
|
fcb $2c,$a0,$c9,$20,$8e,$0c,$20,$0c ; ", I .. ."
|
|
fcb $fd,$4c,$7d,$0a,$20,$43,$0e,$d0 ; "}L}. C.P"
|
|
fcb $06,$ae,$01,$09,$fe,$05,$08,$4c ; "....~..L"
|
|
fcb $7d,$0a ; "}."
|
|
|
|
S0c03: tya
|
|
pha
|
|
jsr S0c81
|
|
pha
|
|
ldx #$ff
|
|
cmp D0901
|
|
bne L0c12
|
|
ldx #$3f
|
|
L0c12: stx Z32
|
|
jsr S0c79
|
|
tya
|
|
clc
|
|
adc #$b1
|
|
jsr cout
|
|
jsr S0c79
|
|
pla
|
|
pha
|
|
tay
|
|
ldx #$10
|
|
L0c26: lda D0808,Y
|
|
bne L0c2d
|
|
lda #' '+$80
|
|
L0c2d: jsr cout
|
|
iny
|
|
dex
|
|
bne L0c26
|
|
jsr S0c79
|
|
pla
|
|
pha
|
|
tay
|
|
lda D0802,Y
|
|
sta Z3f
|
|
lda D0803,Y
|
|
sta Z3e
|
|
jsr Scb9b
|
|
lda #$ff
|
|
sta Z32
|
|
jsr S0c79
|
|
pla
|
|
tay
|
|
lda D0805,Y
|
|
eor #$5a
|
|
cmp D0804,Y
|
|
beq L0c5c
|
|
lda #$01
|
|
L0c5c: ldy #$04
|
|
L0c5e: cmp D0c6f,Y
|
|
beq L0c66
|
|
dey
|
|
bne L0c5e
|
|
L0c66: lda D0c74,Y
|
|
tay
|
|
jsr S0c8e
|
|
pla
|
|
tay
|
|
D0c6f: rts
|
|
|
|
fcb $4c,$00,$33,$cd ; "L.3M"
|
|
D0c74: fcb $df,$e9,$f5,$e4,$ef ; "_iudo"
|
|
|
|
S0c79: lda #' '+$80
|
|
jsr cout
|
|
jmp cout
|
|
|
|
S0c81: sta D0902
|
|
asl
|
|
adc D0902
|
|
asl
|
|
asl
|
|
asl
|
|
adc #$08
|
|
rts
|
|
|
|
S0c8e: clc
|
|
L0c8f: jsr S0cac
|
|
lda D0cbe,X
|
|
bne L0ca0
|
|
jsr S0cac
|
|
lda D0ccd,X
|
|
bne L0ca0
|
|
rts
|
|
|
|
L0ca0: php
|
|
bmi L0ca6
|
|
jsr S0c79
|
|
L0ca6: jsr cout
|
|
plp
|
|
bne L0c8f
|
|
|
|
S0cac: lda D0cdd,Y
|
|
bcs L0cb8
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
sec
|
|
rts
|
|
|
|
L0cb8: iny
|
|
and #$0f
|
|
tax
|
|
clc
|
|
rts
|
|
|
|
D0cbe: fcb $00,$8d,$01,$c7,$cc,$c9,$d4,$c3 ; "...GLITC"
|
|
fcb $c8,$a0,$d2,$c5,$c1,$d3,$cf ; "H REASO"
|
|
D0ccd: fcb $ce,$00,$c6,$d0,$d5,$c4,$cd,$ad ; "N.FPUDM-"
|
|
fcb $b1,$b9,$bd,$c2,$d1,$d7,$da,$d9 ; "19=BQWZY"
|
|
D0cdd: fcb $1a,$c0,$60,$2c,$76,$ea,$90,$3c ; ".@`,vj.<"
|
|
fcb $a6,$56,$5e,$fd,$22,$29,$9d,$4e ; "&V^}").N"
|
|
fcb $69,$0a,$90,$19,$10,$4d,$b9,$ca ; "i....M9J"
|
|
fcb $ae,$0d,$d9,$ea,$90,$80,$70,$99 ; "..Yj..p."
|
|
fcb $6e,$9d,$b4,$b7,$61,$10,$19,$f0 ; "n.47a..p"
|
|
fcb $af,$c0,$6b,$97,$8c,$f3,$b2,$29 ; "/@k..s2)"
|
|
fcb $ab,$60,$a5,$fd,$6c,$44,$97,$8c ; "+`%}lD.."
|
|
fcb $f3,$bd,$1d,$0a,$d5,$0e,$b9,$78 ; "s=..U.9x"
|
|
fcb $cf,$3b,$22,$9b,$d7,$0a,$02,$ea ; "O;".W..j"
|
|
fcb $3b,$69,$78,$cf,$3b,$d1,$70,$a7 ; ";ixO;Qp'"
|
|
fcb $4b,$ca,$90,$3c,$a6,$56,$5e,$f0 ; "KJ.<&V^p"
|
|
fcb $19,$ab,$60,$a0,$be,$e6,$96,$8b ; ".+` >f.."
|
|
fcb $90,$3c,$a6,$56,$5e,$f2,$9a,$0a ; ".<&V^r.."
|
|
fcb $ab,$7e,$f0,$25,$30,$4a,$b1,$bd ; "+~p%0J1="
|
|
fcb $70,$a0,$c0,$45,$60,$19,$11,$fb ; "p @E`..{"
|
|
fcb $0d,$9f,$c0,$6b,$90,$a9,$01,$11 ; "..@k.).."
|
|
fcb $fb,$0d,$9d,$50,$eb,$90,$a9,$01 ; "{..Pk.)."
|
|
fcb $10,$dc,$af,$5f,$30,$79,$5f,$d6 ; ".\/_0y_V"
|
|
fcb $c4,$45,$f3,$90,$3c,$a6,$56,$5e ; "DEs.<&V^"
|
|
fcb $fd,$90,$5b,$d6,$ae,$0f,$d1,$68 ; "}.[V..Qh"
|
|
fcb $b9,$05,$5a,$b7,$6e,$a0,$f0,$79 ; "9.Z7n py"
|
|
fcb $3e,$9c,$8b,$c0,$50,$19,$11,$7c ; ">..@P..|"
|
|
fcb $ff,$e6,$90,$be,$e6,$96,$8c,$69 ; ".f.>f..i"
|
|
fcb $03,$ca,$65,$65,$ef,$10,$be,$e6 ; ".Jeeo.>f"
|
|
fcb $90,$2a,$e0,$69,$d4,$e6,$90,$a9 ; ".*`iTf.)"
|
|
fcb $01,$11,$7c,$ff,$e6,$97,$8c,$f3 ; "..|.f..s"
|
|
fcb $b9,$d5,$0e,$b0,$19,$11,$d5,$0e ; "9U.0..U."
|
|
fcb $b9,$6e,$e9,$4c,$a3,$b0,$19,$74 ; "9niL#0.t"
|
|
fcb $bc,$a9,$10,$19,$05,$ed,$99,$91 ; "<)...m.."
|
|
fcb $01,$03,$ae,$05,$ed,$10,$19,$70 ; "....m..p"
|
|
fcb $30,$70,$69,$91,$01,$03,$cd,$7c ; "0pi...M|"
|
|
fcb $41,$01 ; "A."
|
|
|
|
S0dd7: lda D0901
|
|
sta D0802
|
|
eor #$5a
|
|
sta D0803
|
|
jsr S0de8
|
|
jmp Lc9df
|
|
|
|
S0de8: jsr Sca8b
|
|
tay
|
|
L0dec: lda D0800,Y
|
|
sta Dbffb,X
|
|
iny
|
|
bne L0dec
|
|
rts
|
|
|
|
L0df6: jsr S0dd7
|
|
jsr S0e43
|
|
bne L0e09
|
|
lda D0802,Y
|
|
ora D0803,Y
|
|
beq L0e09
|
|
L0e06: jsr S0e27
|
|
L0e09: ldy #$ae
|
|
jsr S0c8e
|
|
L0e0e: ldx #$01
|
|
jsr S0e4f
|
|
bcs L0e36
|
|
lda D0908
|
|
cmp #$b1
|
|
bcc L0e0e
|
|
cmp #$b8
|
|
bcs L0e0e
|
|
adc #$10
|
|
tay
|
|
lda #$00
|
|
beq L0e2f
|
|
|
|
S0e27: ldx D0778
|
|
ldy D07f8
|
|
lda #$7b
|
|
L0e2f: sty L00+1
|
|
sta L00
|
|
jmp (L00)
|
|
|
|
L0e36: ldx #$02
|
|
lda #$00
|
|
L0e3a: sta D0800,X
|
|
dex
|
|
bpl L0e3a
|
|
jmp (resetvec)
|
|
|
|
S0e43: ldy D0901
|
|
lda D0804,Y
|
|
eor D0805,Y
|
|
cmp #$5a
|
|
rts
|
|
|
|
S0e4f: stx D0903
|
|
lda #$a0
|
|
L0e54: sta D0908,X
|
|
dex
|
|
bpl L0e54
|
|
inx
|
|
L0e5b: jsr rdkey_uc
|
|
cmp #$88
|
|
beq L0e84
|
|
cmp #$8d
|
|
beq L0e82
|
|
cmp #$9b
|
|
beq L0e83
|
|
cmp #$a0
|
|
bcs L0e74
|
|
L0e6e: jsr bell12
|
|
jmp L0e5b
|
|
|
|
L0e74: cpx D0903
|
|
bcs L0e6e
|
|
sta D0908,X
|
|
jsr cout
|
|
inx
|
|
bne L0e5b
|
|
L0e82: clc
|
|
L0e83: rts
|
|
|
|
L0e84: txa
|
|
beq L0e5b
|
|
dex
|
|
dec Z24
|
|
lda #$a0
|
|
sta D0908,X
|
|
jsr cout
|
|
dec Z24
|
|
jmp L0e5b
|
|
|
|
rdkey_uc:
|
|
jsr rdkey
|
|
cmp #$e0 ; lower case?
|
|
bcc L0ea0 ; no
|
|
and #$df ; yes, convert to upper case
|
|
L0ea0: rts
|
|
|
|
fcb $a9,$00,$a8,$aa,$8d,$04,$09,$8e ; ").(*...."
|
|
fcb $05,$09,$a9,$0a,$8d,$02,$09,$a2 ; "..)....""
|
|
fcb $00,$b9,$08,$09,$49,$b0,$c9,$0a ; ".9..I0I."
|
|
fcb $90,$01,$60,$6d,$04,$09,$48,$8a ; "..`m..H."
|
|
fcb $6d,$05,$09,$aa,$68,$ce,$02,$09 ; "m..*hN.."
|
|
fcb $d0,$f1,$c8,$d0,$d7 ; "PqHPW"
|
|
|
|
dephase
|
|
endsection partmgr
|
|
|
|
b1_partmgr_end equ *-$1000
|
|
|
|
fillto $dfff,$ff
|