mirror of
https://github.com/a2-4am/pitch-dark.git
synced 2024-09-27 19:57:56 +00:00
ZInfo for Z1
This commit is contained in:
parent
42c3a9a1d4
commit
89b8fecb6c
790
src/zinfo/info.a
790
src/zinfo/info.a
@ -1,790 +0,0 @@
|
|||||||
;license:MIT
|
|
||||||
;(c) 2018 by qkumba
|
|
||||||
|
|
||||||
!to "info#063000",plain
|
|
||||||
*=$3000
|
|
||||||
|
|
||||||
save_name = $300
|
|
||||||
;;read_size = ?? can be as large as $4000-$300 bytes
|
|
||||||
read_buffer = $3500 ;read_size bytes, must be page-aligned
|
|
||||||
file_buffer = $7400 ;$400 bytes, must not overlap with read_buffer, must be page-aligned
|
|
||||||
record_size = $40
|
|
||||||
info_buffer = $7200 ;record_size*8 (currently $200) bytes, can be anywhere
|
|
||||||
zpage_info = $fe ;word
|
|
||||||
zpage_ptr = $fd
|
|
||||||
name_offset = 0 ;1+37 bytes
|
|
||||||
time_offset = 42 ;1+8 bytes ("12:01 pm")
|
|
||||||
score_offset = 51 ;1+6 bytes (-12345)
|
|
||||||
moves_offset = 58 ;1+5 bytes (12345)
|
|
||||||
|
|
||||||
|
|
||||||
;zpage used by Infocom code
|
|
||||||
zp_8C = $8c
|
|
||||||
zp_8D = $8d
|
|
||||||
zp_8E = $8e ;word
|
|
||||||
zp_9C = $9c
|
|
||||||
zp_9D = $9d
|
|
||||||
zp_9E = $9e
|
|
||||||
zp_9F = $9f
|
|
||||||
zp_A0 = $a0 ;word
|
|
||||||
zp_A3 = $a3
|
|
||||||
zp_AC = $ac
|
|
||||||
zp_AD = $ad
|
|
||||||
zp_B0 = $b0 ;word
|
|
||||||
zp_B2 = $b2
|
|
||||||
zp_B3 = $b3
|
|
||||||
zp_C9 = $c9
|
|
||||||
zp_CA = $ca
|
|
||||||
zp_CB = $cb
|
|
||||||
zp_CC = $cc
|
|
||||||
zp_CD = $cd
|
|
||||||
zp_CE = $ce
|
|
||||||
zp_CF = $cf
|
|
||||||
zp_D3 = $d3
|
|
||||||
zp_D4 = $d4
|
|
||||||
zp_D5 = $d5
|
|
||||||
zp_D6 = $d6
|
|
||||||
zp_D7 = $d7
|
|
||||||
zp_D8 = $d8
|
|
||||||
zp_DB = $db
|
|
||||||
zp_DC = $dc
|
|
||||||
|
|
||||||
|
|
||||||
;set prefix if not defined, needed only if stand-alone code
|
|
||||||
|
|
||||||
- jsr $bf00
|
|
||||||
op_c7
|
|
||||||
!byte $c7
|
|
||||||
!word c7_parms
|
|
||||||
ldx $200
|
|
||||||
bne +
|
|
||||||
lda $bf30
|
|
||||||
sta c5_parms+1
|
|
||||||
jsr $bf00
|
|
||||||
!byte $c5
|
|
||||||
!word c5_parms
|
|
||||||
ldx $201
|
|
||||||
inx
|
|
||||||
txa
|
|
||||||
and #$0f
|
|
||||||
sta $200
|
|
||||||
lda #$2f
|
|
||||||
sta $201
|
|
||||||
dec op_c7
|
|
||||||
bne -
|
|
||||||
+
|
|
||||||
|
|
||||||
jsr exchange
|
|
||||||
lda #>info_buffer
|
|
||||||
sta zpage_info+1
|
|
||||||
lda #<info_buffer
|
|
||||||
sta zpage_info
|
|
||||||
jsr $bf00
|
|
||||||
!byte $c8 ;open file
|
|
||||||
!word c8_parms
|
|
||||||
lda c8_handle
|
|
||||||
sta ce_handle
|
|
||||||
sta ca_handle
|
|
||||||
|
|
||||||
;position to file offset
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
sta position+1
|
|
||||||
|
|
||||||
fetch_info
|
|
||||||
ldy #name_offset
|
|
||||||
sty zpage_ptr
|
|
||||||
!if name_offset=0 {
|
|
||||||
tya
|
|
||||||
} else {
|
|
||||||
lda #0
|
|
||||||
}
|
|
||||||
sta (zpage_info),y
|
|
||||||
|
|
||||||
position
|
|
||||||
lda #0
|
|
||||||
ldx #0
|
|
||||||
stx ce_offset+2
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
ora #3
|
|
||||||
sta ce_offset+1
|
|
||||||
rol ce_offset+2
|
|
||||||
|
|
||||||
jsr $bf00
|
|
||||||
!byte $ce ;seek
|
|
||||||
!word ce_parms
|
|
||||||
bcs nextpos
|
|
||||||
lda #1
|
|
||||||
sta ca_size+1
|
|
||||||
jsr $bf00
|
|
||||||
!byte $ca ;read file
|
|
||||||
!word ca_parms
|
|
||||||
lda read_buffer+$0e
|
|
||||||
sta ca_size+1
|
|
||||||
inc ca_offset+1
|
|
||||||
jsr $bf00
|
|
||||||
!byte $ca ;read file
|
|
||||||
!word ca_parms
|
|
||||||
dec ca_offset+1
|
|
||||||
jsr dump_info
|
|
||||||
|
|
||||||
nextpos
|
|
||||||
clc
|
|
||||||
lda zpage_info
|
|
||||||
adc #record_size
|
|
||||||
sta zpage_info
|
|
||||||
bcc +
|
|
||||||
inc zpage_info+1
|
|
||||||
+ inc position+1
|
|
||||||
lda position+1
|
|
||||||
cmp #8
|
|
||||||
bcc fetch_info
|
|
||||||
jsr $bf00
|
|
||||||
!byte $cc ;close file
|
|
||||||
!word cc_parms
|
|
||||||
|
|
||||||
exchange
|
|
||||||
ldx #(zp_DC-zp_8C)
|
|
||||||
- ldy zpage_old-1,x
|
|
||||||
lda zp_8C-1,x
|
|
||||||
sty zp_8C-1,x
|
|
||||||
sta zpage_old-1,x
|
|
||||||
dex
|
|
||||||
bne -
|
|
||||||
rts
|
|
||||||
|
|
||||||
c7_parms
|
|
||||||
!byte 1
|
|
||||||
!word $200
|
|
||||||
|
|
||||||
c5_parms
|
|
||||||
!byte 2
|
|
||||||
!byte 0
|
|
||||||
!word $201
|
|
||||||
|
|
||||||
c8_parms
|
|
||||||
!byte 3
|
|
||||||
!word save_name
|
|
||||||
!word file_buffer
|
|
||||||
c8_handle
|
|
||||||
!byte 0
|
|
||||||
|
|
||||||
ce_parms
|
|
||||||
!byte 2
|
|
||||||
ce_handle
|
|
||||||
!byte 0
|
|
||||||
ce_offset
|
|
||||||
!byte 0,0,0
|
|
||||||
|
|
||||||
ca_parms
|
|
||||||
!byte 4
|
|
||||||
ca_handle
|
|
||||||
!byte 0
|
|
||||||
ca_offset
|
|
||||||
!word read_buffer
|
|
||||||
ca_size
|
|
||||||
!word 0
|
|
||||||
!word $ffff
|
|
||||||
|
|
||||||
cc_parms
|
|
||||||
!byte 1
|
|
||||||
!byte 0
|
|
||||||
|
|
||||||
dump_info
|
|
||||||
tsx
|
|
||||||
stx stack_pointer+1
|
|
||||||
|
|
||||||
;set up pointers for decompression and "score" display
|
|
||||||
|
|
||||||
lda #>read_buffer
|
|
||||||
sta zp_A3
|
|
||||||
lda read_buffer+1
|
|
||||||
and #2
|
|
||||||
sta zp_DC
|
|
||||||
clc
|
|
||||||
lda read_buffer+$0d
|
|
||||||
sta zp_AC
|
|
||||||
lda read_buffer+$0c
|
|
||||||
adc #>read_buffer
|
|
||||||
sta zp_AD
|
|
||||||
clc
|
|
||||||
lda read_buffer+$19
|
|
||||||
sta zp_B0
|
|
||||||
lda read_buffer+$18
|
|
||||||
adc #>read_buffer
|
|
||||||
sta zp_B0+1
|
|
||||||
clc
|
|
||||||
lda read_buffer+$0b
|
|
||||||
sta zp_B2
|
|
||||||
lda read_buffer+$0a
|
|
||||||
adc #>read_buffer
|
|
||||||
sta zp_B3
|
|
||||||
|
|
||||||
;dump info, actual Infocom code in upper-case
|
|
||||||
|
|
||||||
lda #42
|
|
||||||
sta max_chars
|
|
||||||
LDA #$10 ; location
|
|
||||||
JSR fetch_obj
|
|
||||||
LDA zp_8C
|
|
||||||
JSR decompress
|
|
||||||
|
|
||||||
lda zpage_ptr
|
|
||||||
!if name_offset>0 {
|
|
||||||
sec
|
|
||||||
sbc #name_offset
|
|
||||||
}
|
|
||||||
ldy #name_offset
|
|
||||||
sta (zpage_info),y
|
|
||||||
|
|
||||||
ldy #time_offset
|
|
||||||
sty zpage_ptr
|
|
||||||
lda #0
|
|
||||||
sta max_chars ;can't overflow anymore
|
|
||||||
sta (zpage_info),y
|
|
||||||
|
|
||||||
LDA #$11 ; score
|
|
||||||
JSR fetch_obj
|
|
||||||
|
|
||||||
LDA zp_DC
|
|
||||||
BNE loc_1627
|
|
||||||
|
|
||||||
ldy #score_offset
|
|
||||||
sty zpage_ptr
|
|
||||||
|
|
||||||
LDA zp_8C
|
|
||||||
STA zp_D3
|
|
||||||
LDA zp_8D
|
|
||||||
STA zp_D4
|
|
||||||
JSR sub_215D
|
|
||||||
|
|
||||||
sec
|
|
||||||
lda zpage_ptr
|
|
||||||
sbc #score_offset
|
|
||||||
ldy #score_offset
|
|
||||||
sta (zpage_info),y
|
|
||||||
JMP loc_165F
|
|
||||||
|
|
||||||
loc_1627:
|
|
||||||
LDA zp_8C
|
|
||||||
BNE loc_164B
|
|
||||||
LDA #$18
|
|
||||||
|
|
||||||
loc_164B:
|
|
||||||
CMP #$0D
|
|
||||||
BCC loc_1651
|
|
||||||
SBC #$0C
|
|
||||||
|
|
||||||
loc_1651:
|
|
||||||
STA zp_D3
|
|
||||||
LDA #$00
|
|
||||||
STA zp_D4
|
|
||||||
JSR sub_215D
|
|
||||||
LDA #$3A
|
|
||||||
JSR emit_char
|
|
||||||
|
|
||||||
loc_165F:
|
|
||||||
LDA #$12 ; moves or minutes
|
|
||||||
JSR fetch_obj
|
|
||||||
LDA zp_8C
|
|
||||||
STA zp_D3
|
|
||||||
LDA zp_8D
|
|
||||||
STA zp_D4
|
|
||||||
LDA zp_DC
|
|
||||||
BNE loc_1676
|
|
||||||
|
|
||||||
ldy #moves_offset
|
|
||||||
sty zpage_ptr
|
|
||||||
|
|
||||||
JSR sub_215D
|
|
||||||
|
|
||||||
sec
|
|
||||||
lda zpage_ptr
|
|
||||||
sbc #moves_offset
|
|
||||||
ldy #moves_offset
|
|
||||||
sta (zpage_info),y
|
|
||||||
rts
|
|
||||||
|
|
||||||
loc_1676:
|
|
||||||
LDA zp_8C
|
|
||||||
CMP #$0A
|
|
||||||
BCS loc_1681
|
|
||||||
LDA #$30
|
|
||||||
JSR emit_char
|
|
||||||
|
|
||||||
loc_1681:
|
|
||||||
JSR sub_215D
|
|
||||||
LDA #$20
|
|
||||||
JSR emit_char
|
|
||||||
LDA #$11 ; hours
|
|
||||||
JSR fetch_obj
|
|
||||||
LDA zp_8C
|
|
||||||
CMP #$0C
|
|
||||||
BCS loc_1698
|
|
||||||
LDA #$61
|
|
||||||
BNE loc_169A
|
|
||||||
|
|
||||||
loc_1698:
|
|
||||||
LDA #$70
|
|
||||||
|
|
||||||
loc_169A:
|
|
||||||
JSR emit_char
|
|
||||||
LDA #$6D
|
|
||||||
JSR emit_char
|
|
||||||
|
|
||||||
sec
|
|
||||||
lda zpage_ptr
|
|
||||||
sbc #time_offset
|
|
||||||
ldy #time_offset
|
|
||||||
sta (zpage_info),y
|
|
||||||
rts
|
|
||||||
|
|
||||||
loc_1459:
|
|
||||||
jmp * ;internal error
|
|
||||||
|
|
||||||
fetch_obj:
|
|
||||||
JSR sub_1A70
|
|
||||||
LDA (zp_8E),Y
|
|
||||||
STA zp_8D
|
|
||||||
INY
|
|
||||||
LDA (zp_8E),Y
|
|
||||||
STA zp_8C
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_1A70:
|
|
||||||
SEC
|
|
||||||
SBC #$10
|
|
||||||
LDY #0
|
|
||||||
STY zp_8E+1
|
|
||||||
ASL
|
|
||||||
ROL zp_8E+1
|
|
||||||
CLC
|
|
||||||
ADC zp_AC
|
|
||||||
STA zp_8E
|
|
||||||
LDA zp_8E+1
|
|
||||||
ADC zp_AD
|
|
||||||
STA zp_8E+1
|
|
||||||
|
|
||||||
locret_1A85:
|
|
||||||
RTS
|
|
||||||
|
|
||||||
decompress:
|
|
||||||
JSR sub_26A0
|
|
||||||
LDY #7
|
|
||||||
LDA (zp_8E),Y
|
|
||||||
TAX
|
|
||||||
INY
|
|
||||||
LDA (zp_8E),Y
|
|
||||||
STA zp_8E
|
|
||||||
STX zp_8E+1
|
|
||||||
INC zp_8E
|
|
||||||
BNE loc_1D23
|
|
||||||
INC zp_8E+1
|
|
||||||
|
|
||||||
loc_1D23:
|
|
||||||
JSR sub_2474
|
|
||||||
JMP sub_2495
|
|
||||||
|
|
||||||
sub_1FE2:
|
|
||||||
LDA #0
|
|
||||||
SEC
|
|
||||||
SBC zp_D3
|
|
||||||
STA zp_D3
|
|
||||||
LDA #0
|
|
||||||
SBC zp_D4
|
|
||||||
STA zp_D4
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_1FF0:
|
|
||||||
LDA zp_D5
|
|
||||||
ORA zp_D6
|
|
||||||
BEQ loc_2021
|
|
||||||
JSR sub_2026
|
|
||||||
|
|
||||||
loc_1FF9:
|
|
||||||
ROL zp_D3
|
|
||||||
ROL zp_D4
|
|
||||||
ROL zp_D7
|
|
||||||
ROL zp_D8
|
|
||||||
LDA zp_D7
|
|
||||||
SEC
|
|
||||||
SBC zp_D5
|
|
||||||
TAY
|
|
||||||
LDA zp_D8
|
|
||||||
SBC zp_D6
|
|
||||||
BCC loc_2011
|
|
||||||
STY zp_D7
|
|
||||||
STA zp_D8
|
|
||||||
|
|
||||||
loc_2011:
|
|
||||||
DEX
|
|
||||||
BNE loc_1FF9
|
|
||||||
ROL zp_D3
|
|
||||||
ROL zp_D4
|
|
||||||
LDA zp_D7
|
|
||||||
STA zp_D5
|
|
||||||
LDA zp_D8
|
|
||||||
STA zp_D6
|
|
||||||
RTS
|
|
||||||
|
|
||||||
loc_2021:
|
|
||||||
LDA #8
|
|
||||||
JMP loc_1459
|
|
||||||
|
|
||||||
sub_2026:
|
|
||||||
LDX #$10
|
|
||||||
LDA #0
|
|
||||||
STA zp_D7
|
|
||||||
STA zp_D8
|
|
||||||
CLC
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_215D:
|
|
||||||
LDA zp_D4
|
|
||||||
BPL loc_2169
|
|
||||||
LDA #$2D
|
|
||||||
JSR emit_char
|
|
||||||
JSR sub_1FE2
|
|
||||||
|
|
||||||
loc_2169:
|
|
||||||
LDA #0
|
|
||||||
STA zp_DB
|
|
||||||
|
|
||||||
loc_216D:
|
|
||||||
LDA zp_D3
|
|
||||||
ORA zp_D4
|
|
||||||
BEQ loc_2185
|
|
||||||
LDA #$A
|
|
||||||
STA zp_D5
|
|
||||||
LDA #0
|
|
||||||
STA zp_D6
|
|
||||||
JSR sub_1FF0
|
|
||||||
LDA zp_D5
|
|
||||||
PHA
|
|
||||||
INC zp_DB
|
|
||||||
BNE loc_216D
|
|
||||||
|
|
||||||
loc_2185:
|
|
||||||
LDA zp_DB
|
|
||||||
BNE loc_218E
|
|
||||||
LDA #$30
|
|
||||||
JMP emit_char
|
|
||||||
|
|
||||||
loc_218E:
|
|
||||||
PLA
|
|
||||||
CLC
|
|
||||||
ADC #$30
|
|
||||||
JSR emit_char
|
|
||||||
DEC zp_DB
|
|
||||||
BNE loc_218E
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_237E:
|
|
||||||
LDA zp_9D
|
|
||||||
CLC
|
|
||||||
ADC zp_A3
|
|
||||||
STA zp_A0+1
|
|
||||||
LDX #$FF
|
|
||||||
STX zp_9F
|
|
||||||
INX
|
|
||||||
STX zp_A0
|
|
||||||
|
|
||||||
loc_23A0:
|
|
||||||
LDY zp_9C
|
|
||||||
LDA (zp_A0),Y
|
|
||||||
INC zp_9C
|
|
||||||
BNE loc_23B2
|
|
||||||
LDY #0
|
|
||||||
STY zp_9F
|
|
||||||
INC zp_9D
|
|
||||||
BNE loc_23B2
|
|
||||||
INC zp_9E
|
|
||||||
|
|
||||||
loc_23B2:
|
|
||||||
TAY
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_2474:
|
|
||||||
LDA zp_8E
|
|
||||||
STA zp_9C
|
|
||||||
LDA zp_8E+1
|
|
||||||
STA zp_9D
|
|
||||||
LDA #0
|
|
||||||
STA zp_9E
|
|
||||||
STA zp_9F
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_2483:
|
|
||||||
LDA zp_8E
|
|
||||||
ASL
|
|
||||||
STA zp_9C
|
|
||||||
LDA zp_8E+1
|
|
||||||
ROL
|
|
||||||
STA zp_9D
|
|
||||||
LDA #0
|
|
||||||
STA zp_9F
|
|
||||||
ROL
|
|
||||||
STA zp_9E
|
|
||||||
|
|
||||||
locret_2494:
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_2495:
|
|
||||||
LDX #0
|
|
||||||
STX zp_C9
|
|
||||||
STX zp_CD
|
|
||||||
DEX
|
|
||||||
STX zp_CA
|
|
||||||
|
|
||||||
loc_249E:
|
|
||||||
JSR sub_2569
|
|
||||||
BCS locret_2494
|
|
||||||
STA zp_CB
|
|
||||||
TAX
|
|
||||||
BEQ loc_24E9
|
|
||||||
CMP #4
|
|
||||||
BCC loc_2507
|
|
||||||
CMP #6
|
|
||||||
BCC loc_24ED
|
|
||||||
JSR sub_255D
|
|
||||||
TAX
|
|
||||||
BNE loc_24C1
|
|
||||||
LDA #$5B
|
|
||||||
|
|
||||||
loc_24B8:
|
|
||||||
CLC
|
|
||||||
ADC zp_CB
|
|
||||||
|
|
||||||
loc_24BB:
|
|
||||||
JSR emit_char
|
|
||||||
JMP loc_249E
|
|
||||||
|
|
||||||
loc_24C1:
|
|
||||||
CMP #1
|
|
||||||
BNE loc_24C9
|
|
||||||
LDA #$3B
|
|
||||||
BNE loc_24B8
|
|
||||||
|
|
||||||
loc_24C9:
|
|
||||||
LDA zp_CB
|
|
||||||
SEC
|
|
||||||
SBC #6
|
|
||||||
BEQ loc_24D7
|
|
||||||
TAX
|
|
||||||
LDA byte_2686,X
|
|
||||||
JMP loc_24BB
|
|
||||||
|
|
||||||
loc_24D7:
|
|
||||||
JSR sub_2569
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
STA zp_CB
|
|
||||||
JSR sub_2569
|
|
||||||
ORA zp_CB
|
|
||||||
JMP loc_24BB
|
|
||||||
|
|
||||||
loc_24E9:
|
|
||||||
LDA #$20
|
|
||||||
BNE loc_24BB
|
|
||||||
|
|
||||||
loc_24ED:
|
|
||||||
SEC
|
|
||||||
SBC #3
|
|
||||||
TAY
|
|
||||||
JSR sub_255D
|
|
||||||
BNE loc_24FB
|
|
||||||
STY zp_CA
|
|
||||||
JMP loc_249E
|
|
||||||
|
|
||||||
loc_24FB:
|
|
||||||
STY zp_C9
|
|
||||||
CMP zp_C9
|
|
||||||
BEQ loc_249E
|
|
||||||
LDA #0
|
|
||||||
STA zp_C9
|
|
||||||
BEQ loc_249E
|
|
||||||
|
|
||||||
loc_2507:
|
|
||||||
SEC
|
|
||||||
SBC #1
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
ASL
|
|
||||||
STA zp_CC
|
|
||||||
JSR sub_2569
|
|
||||||
ASL
|
|
||||||
CLC
|
|
||||||
ADC zp_CC
|
|
||||||
TAY
|
|
||||||
LDA (zp_B0),Y
|
|
||||||
STA zp_8E+1
|
|
||||||
INY
|
|
||||||
LDA (zp_B0),Y
|
|
||||||
STA zp_8E
|
|
||||||
LDA zp_9E
|
|
||||||
PHA
|
|
||||||
LDA zp_9D
|
|
||||||
PHA
|
|
||||||
LDA zp_9C
|
|
||||||
PHA
|
|
||||||
LDA zp_C9
|
|
||||||
PHA
|
|
||||||
LDA zp_CD
|
|
||||||
PHA
|
|
||||||
LDA zp_CF
|
|
||||||
PHA
|
|
||||||
LDA zp_CE
|
|
||||||
PHA
|
|
||||||
JSR sub_2483
|
|
||||||
JSR sub_2495
|
|
||||||
PLA
|
|
||||||
STA zp_CE
|
|
||||||
PLA
|
|
||||||
STA zp_CF
|
|
||||||
PLA
|
|
||||||
STA zp_CD
|
|
||||||
PLA
|
|
||||||
STA zp_C9
|
|
||||||
PLA
|
|
||||||
STA zp_9C
|
|
||||||
PLA
|
|
||||||
STA zp_9D
|
|
||||||
PLA
|
|
||||||
STA zp_9E
|
|
||||||
LDX #$FF
|
|
||||||
STX zp_CA
|
|
||||||
INX
|
|
||||||
STX zp_9F
|
|
||||||
JMP loc_249E
|
|
||||||
|
|
||||||
sub_255D:
|
|
||||||
LDA zp_CA
|
|
||||||
BPL loc_2564
|
|
||||||
LDA zp_C9
|
|
||||||
RTS
|
|
||||||
|
|
||||||
loc_2564:
|
|
||||||
LDY #$FF
|
|
||||||
STY zp_CA
|
|
||||||
RTS
|
|
||||||
|
|
||||||
sub_2569:
|
|
||||||
LDA zp_CD
|
|
||||||
BPL loc_256F
|
|
||||||
SEC
|
|
||||||
RTS
|
|
||||||
|
|
||||||
loc_256F:
|
|
||||||
BNE loc_2584
|
|
||||||
INC zp_CD
|
|
||||||
JSR sub_237E
|
|
||||||
STA zp_CF
|
|
||||||
JSR sub_237E
|
|
||||||
STA zp_CE
|
|
||||||
LDA zp_CF
|
|
||||||
LSR
|
|
||||||
LSR
|
|
||||||
JMP loc_25AD
|
|
||||||
|
|
||||||
loc_2584:
|
|
||||||
SEC
|
|
||||||
SBC #1
|
|
||||||
BNE loc_259F
|
|
||||||
LDA #2
|
|
||||||
STA zp_CD
|
|
||||||
LDA zp_CE
|
|
||||||
STA zp_8E
|
|
||||||
LDA zp_CF
|
|
||||||
ASL zp_8E
|
|
||||||
ROL
|
|
||||||
ASL zp_8E
|
|
||||||
ROL
|
|
||||||
ASL zp_8E
|
|
||||||
ROL
|
|
||||||
JMP loc_25AD
|
|
||||||
|
|
||||||
loc_259F:
|
|
||||||
LDA #0
|
|
||||||
STA zp_CD
|
|
||||||
LDA zp_CF
|
|
||||||
BPL loc_25AB
|
|
||||||
LDA #$FF
|
|
||||||
STA zp_CD
|
|
||||||
|
|
||||||
loc_25AB:
|
|
||||||
LDA zp_CE
|
|
||||||
|
|
||||||
loc_25AD:
|
|
||||||
AND #$1F
|
|
||||||
CLC
|
|
||||||
RTS
|
|
||||||
|
|
||||||
byte_2686:
|
|
||||||
!BYTE 0
|
|
||||||
!BYTE $D, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '!', '?', '_'
|
|
||||||
!BYTE '#', $27, '"', '/', $5C, '-', ':', '(', ')'
|
|
||||||
|
|
||||||
sub_26A0:
|
|
||||||
STA zp_8E
|
|
||||||
LDX #0
|
|
||||||
STX zp_8E+1
|
|
||||||
ASL
|
|
||||||
ROL zp_8E+1
|
|
||||||
ASL
|
|
||||||
ROL zp_8E+1
|
|
||||||
ASL
|
|
||||||
ROL zp_8E+1
|
|
||||||
CLC
|
|
||||||
ADC zp_8E
|
|
||||||
BCC loc_26B6
|
|
||||||
INC zp_8E+1
|
|
||||||
|
|
||||||
loc_26B6:
|
|
||||||
CLC
|
|
||||||
ADC #$35
|
|
||||||
BCC loc_26BD
|
|
||||||
INC zp_8E+1
|
|
||||||
|
|
||||||
loc_26BD:
|
|
||||||
CLC
|
|
||||||
ADC zp_B2
|
|
||||||
STA zp_8E
|
|
||||||
LDA zp_8E+1
|
|
||||||
ADC zp_B3
|
|
||||||
STA zp_8E+1
|
|
||||||
RTS
|
|
||||||
|
|
||||||
emit_char
|
|
||||||
sty yreg+1
|
|
||||||
inc zpage_ptr
|
|
||||||
ldy zpage_ptr
|
|
||||||
sta (zpage_info),y
|
|
||||||
dec max_chars
|
|
||||||
beq fail_slot
|
|
||||||
yreg
|
|
||||||
ldy #0
|
|
||||||
rts
|
|
||||||
|
|
||||||
fail_slot
|
|
||||||
stack_pointer
|
|
||||||
ldx #0
|
|
||||||
txs
|
|
||||||
rts
|
|
||||||
|
|
||||||
max_chars !byte 0
|
|
||||||
|
|
||||||
zpage_old
|
|
||||||
!if *+(zp_DC-zp_8C)>=read_buffer {
|
|
||||||
!error "Code is too large"
|
|
||||||
}
|
|
682
src/zinfo/z1/z1.s
Normal file
682
src/zinfo/z1/z1.s
Normal file
@ -0,0 +1,682 @@
|
|||||||
|
;license:MIT
|
||||||
|
;(c) 2018 by qkumba
|
||||||
|
|
||||||
|
!cpu 6502
|
||||||
|
!to "build/zinfo1#063000",plain
|
||||||
|
*=$3000
|
||||||
|
|
||||||
|
save_name = $2006
|
||||||
|
read_buffer = $3500 ;512 bytes
|
||||||
|
file_buffer = $3900 ;$400 bytes, must not overlap with read_buffer, must be page-aligned
|
||||||
|
record_size = $40
|
||||||
|
info_buffer = $2000 ;record_size*8 (currently $200) bytes, can be anywhere
|
||||||
|
zpage_info = $fe ;word
|
||||||
|
zpage_ptr = $fd
|
||||||
|
name_offset = 0 ;1+37 bytes
|
||||||
|
time_offset = 42 ;1+8 bytes ("12:01 pm")
|
||||||
|
score_offset = 51 ;1+6 bytes (-12345)
|
||||||
|
moves_offset = 58 ;1+5 bytes (12345)
|
||||||
|
|
||||||
|
|
||||||
|
;zpage used by Infocom code
|
||||||
|
|
||||||
|
zp_91 = $91
|
||||||
|
zp_92 = $92
|
||||||
|
zp_93 = $93
|
||||||
|
zp_94 = $94
|
||||||
|
zp_95 = $95
|
||||||
|
zp_96 = $96
|
||||||
|
zp_98 = $98
|
||||||
|
zp_99 = $99
|
||||||
|
zp_BA = $BA
|
||||||
|
zp_BB = $BB
|
||||||
|
zp_CE = $CE
|
||||||
|
zp_CF = $CF
|
||||||
|
zp_D0 = $D0
|
||||||
|
zp_D1 = $D1
|
||||||
|
zp_D2 = $D2
|
||||||
|
zp_E2 = $E2
|
||||||
|
zp_E3 = $E3
|
||||||
|
zp_E4 = $E4
|
||||||
|
zp_E5 = $E5
|
||||||
|
zp_E6 = $E6
|
||||||
|
zp_E7 = $E7
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c8 ;open file
|
||||||
|
!word c8_parms
|
||||||
|
bcs quit
|
||||||
|
lda c8_handle
|
||||||
|
sta ce_handle
|
||||||
|
sta ca_handle
|
||||||
|
|
||||||
|
jsr exchange
|
||||||
|
lda #>info_buffer
|
||||||
|
sta zpage_info+1
|
||||||
|
lda #<info_buffer
|
||||||
|
sta zpage_info
|
||||||
|
|
||||||
|
zero_info
|
||||||
|
ldy #name_offset
|
||||||
|
sty zpage_ptr
|
||||||
|
!if name_offset=0 {
|
||||||
|
tya
|
||||||
|
} else {
|
||||||
|
lda #0
|
||||||
|
}
|
||||||
|
sta (zpage_info),y
|
||||||
|
clc
|
||||||
|
lda zpage_info
|
||||||
|
adc #record_size
|
||||||
|
sta zpage_info
|
||||||
|
bcc +
|
||||||
|
inc zpage_info+1
|
||||||
|
+ inc index+1
|
||||||
|
index
|
||||||
|
lda #0
|
||||||
|
cmp #8
|
||||||
|
bcc zero_info
|
||||||
|
|
||||||
|
lda #>info_buffer
|
||||||
|
sta zpage_info+1
|
||||||
|
lda #<info_buffer
|
||||||
|
sta zpage_info
|
||||||
|
|
||||||
|
fetch_info
|
||||||
|
jsr $bf00
|
||||||
|
!byte $ca ;read file
|
||||||
|
!word ca_parms
|
||||||
|
jsr dump_info
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $cc ;close file
|
||||||
|
!word cc_parms
|
||||||
|
|
||||||
|
exchange
|
||||||
|
ldx #(zp_E7-zp_91)
|
||||||
|
- ldy zpage_old-1,x
|
||||||
|
lda zp_91-1,x
|
||||||
|
sty zp_91-1,x
|
||||||
|
sta zpage_old-1,x
|
||||||
|
dex
|
||||||
|
bne -
|
||||||
|
quit
|
||||||
|
rts
|
||||||
|
|
||||||
|
load_page
|
||||||
|
cmp zp_BB
|
||||||
|
beq seek_ret
|
||||||
|
sta zp_BB
|
||||||
|
clc
|
||||||
|
ce_base1
|
||||||
|
adc #3
|
||||||
|
sta ce_offset+1
|
||||||
|
lda #0
|
||||||
|
ce_base2
|
||||||
|
adc #0
|
||||||
|
sta ce_offset+2
|
||||||
|
|
||||||
|
seekread
|
||||||
|
jsr $bf00
|
||||||
|
!byte $ce ;seek
|
||||||
|
!word ce_parms
|
||||||
|
bcs seek_ret
|
||||||
|
jsr $bf00
|
||||||
|
!byte $ca ;read file
|
||||||
|
!word ca_parms
|
||||||
|
seek_ret
|
||||||
|
rts
|
||||||
|
|
||||||
|
c7_parms
|
||||||
|
!byte 1
|
||||||
|
!word $200
|
||||||
|
|
||||||
|
c5_parms
|
||||||
|
!byte 2
|
||||||
|
!byte 0
|
||||||
|
!word $201
|
||||||
|
|
||||||
|
c8_parms
|
||||||
|
!byte 3
|
||||||
|
!word save_name
|
||||||
|
!word file_buffer
|
||||||
|
c8_handle
|
||||||
|
!byte 0
|
||||||
|
|
||||||
|
ce_parms
|
||||||
|
!byte 2
|
||||||
|
ce_handle
|
||||||
|
!byte 0
|
||||||
|
ce_offset
|
||||||
|
!byte 0,0,0
|
||||||
|
|
||||||
|
ca_parms
|
||||||
|
!byte 4
|
||||||
|
ca_handle
|
||||||
|
!byte 0
|
||||||
|
ca_offset
|
||||||
|
!word read_buffer
|
||||||
|
ca_size
|
||||||
|
!word $100
|
||||||
|
!word $ffff
|
||||||
|
|
||||||
|
cc_parms
|
||||||
|
!byte 1
|
||||||
|
!byte 0
|
||||||
|
|
||||||
|
dump_info
|
||||||
|
tsx
|
||||||
|
stx stack_pointer+1
|
||||||
|
|
||||||
|
;set up pointers for decompression and score display
|
||||||
|
|
||||||
|
lda #$3c ;read_buffer+$0d
|
||||||
|
sta zp_98
|
||||||
|
lda #$20 ;read_buffer+$0c
|
||||||
|
sta zp_99
|
||||||
|
lda #$40 ;read_buffer+$0b
|
||||||
|
sta zp_BA
|
||||||
|
lda #$00 ;read_buffer+$0a
|
||||||
|
sta zp_BB
|
||||||
|
|
||||||
|
;dump info, actual Infocom code in upper-case
|
||||||
|
|
||||||
|
lda #42
|
||||||
|
sta max_chars
|
||||||
|
LDA #$10 ; location
|
||||||
|
JSR fetch_obj
|
||||||
|
LDA zp_E4
|
||||||
|
JSR decompress
|
||||||
|
|
||||||
|
lda zpage_ptr
|
||||||
|
!if name_offset>0 {
|
||||||
|
sec
|
||||||
|
sbc #name_offset
|
||||||
|
}
|
||||||
|
ldy #name_offset
|
||||||
|
sta (zpage_info),y
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta max_chars ;can't overflow anymore
|
||||||
|
ldy #time_offset
|
||||||
|
sta (zpage_info),y
|
||||||
|
|
||||||
|
LDA #$11 ; score
|
||||||
|
JSR fetch_obj
|
||||||
|
|
||||||
|
ldy #score_offset
|
||||||
|
sty zpage_ptr
|
||||||
|
JSR sub_1521
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda zpage_ptr
|
||||||
|
sbc #score_offset
|
||||||
|
ldy #score_offset
|
||||||
|
sta (zpage_info),y
|
||||||
|
|
||||||
|
LDA #$12 ; moves
|
||||||
|
JSR fetch_obj
|
||||||
|
|
||||||
|
ldy #moves_offset
|
||||||
|
sty zpage_ptr
|
||||||
|
|
||||||
|
JSR sub_1521
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda zpage_ptr
|
||||||
|
sbc #moves_offset
|
||||||
|
ldy #moves_offset
|
||||||
|
sta (zpage_info),y
|
||||||
|
rts
|
||||||
|
|
||||||
|
fetch_obj:
|
||||||
|
SEC
|
||||||
|
SBC #$10
|
||||||
|
ASL
|
||||||
|
STA zp_E2
|
||||||
|
LDA #0
|
||||||
|
ROL
|
||||||
|
STA zp_E3
|
||||||
|
CLC
|
||||||
|
LDA zp_98
|
||||||
|
ADC zp_E2
|
||||||
|
STA zp_E2
|
||||||
|
LDA zp_99
|
||||||
|
ADC zp_E3
|
||||||
|
STA zp_E3
|
||||||
|
LDY #0
|
||||||
|
lda zp_E3
|
||||||
|
pha
|
||||||
|
jsr load_page
|
||||||
|
lda #>read_buffer
|
||||||
|
sta zp_E3
|
||||||
|
LDA (zp_E2),Y
|
||||||
|
STA zp_E5
|
||||||
|
INY
|
||||||
|
LDA (zp_E2),Y
|
||||||
|
STA zp_E4
|
||||||
|
pla
|
||||||
|
sta zp_E3
|
||||||
|
RTS
|
||||||
|
|
||||||
|
decompress:
|
||||||
|
JSR sub_170D
|
||||||
|
LDY #7
|
||||||
|
jsr load_page
|
||||||
|
lda #>read_buffer
|
||||||
|
sta zp_E5
|
||||||
|
LDA (zp_E4),Y
|
||||||
|
STA zp_E3
|
||||||
|
INY
|
||||||
|
LDA (zp_E4),Y
|
||||||
|
STA zp_E2
|
||||||
|
LDA zp_E2
|
||||||
|
STA zp_E4
|
||||||
|
LDA zp_E3
|
||||||
|
STA zp_E5
|
||||||
|
INC zp_E4
|
||||||
|
BNE loc_E01
|
||||||
|
INC zp_E5
|
||||||
|
|
||||||
|
loc_E01:
|
||||||
|
JSR sub_1823
|
||||||
|
JMP loc_1948
|
||||||
|
|
||||||
|
sub_1521:
|
||||||
|
LDA zp_E5
|
||||||
|
BPL loc_1528
|
||||||
|
JSR sub_155A
|
||||||
|
|
||||||
|
loc_1528:
|
||||||
|
LDA #0
|
||||||
|
STA zp_E6
|
||||||
|
|
||||||
|
loc_152C:
|
||||||
|
LDA zp_E5
|
||||||
|
ORA zp_E4
|
||||||
|
BEQ loc_1545
|
||||||
|
LDA #$A
|
||||||
|
STA zp_E2
|
||||||
|
LDA #0
|
||||||
|
STA zp_E3
|
||||||
|
JSR sub_1613
|
||||||
|
LDA zp_E2
|
||||||
|
PHA
|
||||||
|
INC zp_E6
|
||||||
|
JMP loc_152C
|
||||||
|
|
||||||
|
loc_1545:
|
||||||
|
LDA zp_E6
|
||||||
|
BEQ loc_1555
|
||||||
|
|
||||||
|
loc_1549:
|
||||||
|
PLA
|
||||||
|
CLC
|
||||||
|
ADC #$30
|
||||||
|
JSR emit_char
|
||||||
|
DEC zp_E6
|
||||||
|
BNE loc_1549
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1555:
|
||||||
|
LDA #$30
|
||||||
|
JMP emit_char
|
||||||
|
|
||||||
|
sub_155A:
|
||||||
|
LDA #$2D
|
||||||
|
JSR emit_char
|
||||||
|
JMP loc_1677
|
||||||
|
|
||||||
|
sub_1613:
|
||||||
|
LDA zp_E6
|
||||||
|
PHA
|
||||||
|
LDA zp_E7
|
||||||
|
PHA
|
||||||
|
LDA zp_E4
|
||||||
|
STA zp_E6
|
||||||
|
LDA zp_E5
|
||||||
|
STA zp_E7
|
||||||
|
LDA #0
|
||||||
|
STA zp_E4
|
||||||
|
LDA #0
|
||||||
|
STA zp_E5
|
||||||
|
LDX #$11
|
||||||
|
|
||||||
|
loc_162B:
|
||||||
|
SEC
|
||||||
|
LDA zp_E4
|
||||||
|
SBC zp_E2
|
||||||
|
TAY
|
||||||
|
LDA zp_E5
|
||||||
|
SBC zp_E3
|
||||||
|
BCC loc_163C
|
||||||
|
STA zp_E5
|
||||||
|
TYA
|
||||||
|
STA zp_E4
|
||||||
|
|
||||||
|
loc_163C:
|
||||||
|
ROL zp_E6
|
||||||
|
ROL zp_E7
|
||||||
|
ROL zp_E4
|
||||||
|
ROL zp_E5
|
||||||
|
DEX
|
||||||
|
BNE loc_162B
|
||||||
|
CLC
|
||||||
|
LDA zp_E5
|
||||||
|
ROR
|
||||||
|
STA zp_E3
|
||||||
|
LDA zp_E4
|
||||||
|
ROR
|
||||||
|
STA zp_E2
|
||||||
|
LDA zp_E6
|
||||||
|
STA zp_E4
|
||||||
|
LDA zp_E7
|
||||||
|
STA zp_E5
|
||||||
|
PLA
|
||||||
|
STA zp_E7
|
||||||
|
PLA
|
||||||
|
STA zp_E6
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1677:
|
||||||
|
SEC
|
||||||
|
LDA #0
|
||||||
|
SBC zp_E4
|
||||||
|
STA zp_E4
|
||||||
|
LDA #0
|
||||||
|
SBC zp_E5
|
||||||
|
STA zp_E5
|
||||||
|
RTS
|
||||||
|
|
||||||
|
sub_170D:
|
||||||
|
STA zp_E4
|
||||||
|
LDA #0
|
||||||
|
STA zp_E5
|
||||||
|
LDA zp_E4
|
||||||
|
ASL zp_E4
|
||||||
|
ROL zp_E5
|
||||||
|
ASL zp_E4
|
||||||
|
ROL zp_E5
|
||||||
|
ASL zp_E4
|
||||||
|
ROL zp_E5
|
||||||
|
CLC
|
||||||
|
ADC zp_E4
|
||||||
|
BCC loc_1729
|
||||||
|
INC zp_E5
|
||||||
|
CLC
|
||||||
|
|
||||||
|
loc_1729:
|
||||||
|
ADC #$35
|
||||||
|
STA zp_E4
|
||||||
|
BCC loc_1731
|
||||||
|
INC zp_E5
|
||||||
|
|
||||||
|
loc_1731:
|
||||||
|
lda zp_BA
|
||||||
|
CLC
|
||||||
|
ADC zp_E4
|
||||||
|
STA zp_E4
|
||||||
|
lda #0
|
||||||
|
ADC zp_E5
|
||||||
|
STA zp_E5
|
||||||
|
RTS
|
||||||
|
|
||||||
|
sub_1823:
|
||||||
|
LDA zp_E4
|
||||||
|
STA zp_93
|
||||||
|
LDA zp_E5
|
||||||
|
STA zp_91
|
||||||
|
LDA #0
|
||||||
|
STA zp_92
|
||||||
|
|
||||||
|
loc_182F:
|
||||||
|
LDA #0
|
||||||
|
STA zp_96
|
||||||
|
RTS
|
||||||
|
|
||||||
|
sub_1863:
|
||||||
|
JSR sub_1870
|
||||||
|
PHA
|
||||||
|
JSR sub_1870
|
||||||
|
STA zp_E4
|
||||||
|
PLA
|
||||||
|
STA zp_E5
|
||||||
|
RTS
|
||||||
|
|
||||||
|
sub_1870:
|
||||||
|
LDA zp_96
|
||||||
|
BEQ loc_1889
|
||||||
|
LDY zp_93
|
||||||
|
lda zp_95
|
||||||
|
pha
|
||||||
|
jsr load_page
|
||||||
|
lda #>read_buffer
|
||||||
|
sta zp_95
|
||||||
|
LDA (zp_94),Y
|
||||||
|
STY zp_93
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
sta zp_95
|
||||||
|
tya
|
||||||
|
inc zp_93
|
||||||
|
BEQ loc_187E
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_187E:
|
||||||
|
LDY #0
|
||||||
|
STY zp_96
|
||||||
|
INC zp_91
|
||||||
|
BNE locret_1888
|
||||||
|
INC zp_92
|
||||||
|
|
||||||
|
locret_1888:
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1889:
|
||||||
|
LDA zp_91
|
||||||
|
STA zp_95
|
||||||
|
LDA #0
|
||||||
|
STA zp_94
|
||||||
|
LDA #$FF
|
||||||
|
STA zp_96
|
||||||
|
JMP sub_1870
|
||||||
|
|
||||||
|
loc_1948:
|
||||||
|
LDA #0
|
||||||
|
STA zp_CF
|
||||||
|
STA zp_D0
|
||||||
|
LDA #$FF
|
||||||
|
STA zp_CE
|
||||||
|
|
||||||
|
loc_1952:
|
||||||
|
JSR sub_1A08
|
||||||
|
BCC loc_1958
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1958:
|
||||||
|
STA zp_E6
|
||||||
|
BEQ loc_19AB
|
||||||
|
CMP #1
|
||||||
|
BEQ loc_19B0
|
||||||
|
CMP #4
|
||||||
|
BCC loc_19BA
|
||||||
|
CMP #6
|
||||||
|
BCC loc_19CA
|
||||||
|
JSR sub_19FC
|
||||||
|
ORA #0
|
||||||
|
BNE loc_197A
|
||||||
|
LDA #$5B
|
||||||
|
|
||||||
|
loc_1971:
|
||||||
|
CLC
|
||||||
|
ADC zp_E6
|
||||||
|
|
||||||
|
loc_1974:
|
||||||
|
JSR emit_char
|
||||||
|
JMP loc_1952
|
||||||
|
|
||||||
|
loc_197A:
|
||||||
|
CMP #1
|
||||||
|
BNE loc_1983
|
||||||
|
LDA #$3B
|
||||||
|
JMP loc_1971
|
||||||
|
|
||||||
|
loc_1983:
|
||||||
|
LDA zp_E6
|
||||||
|
SEC
|
||||||
|
SBC #7
|
||||||
|
BCC loc_1991
|
||||||
|
TAY
|
||||||
|
LDA byte_19E3,Y
|
||||||
|
JMP loc_1974
|
||||||
|
|
||||||
|
loc_1991:
|
||||||
|
JSR sub_1A08
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
ASL
|
||||||
|
PHA
|
||||||
|
JSR sub_1A08
|
||||||
|
STA zp_E6
|
||||||
|
PLA
|
||||||
|
ORA zp_E6
|
||||||
|
CMP #9
|
||||||
|
BNE loc_1974
|
||||||
|
LDA #$20
|
||||||
|
JMP loc_1974
|
||||||
|
|
||||||
|
loc_19AB:
|
||||||
|
LDA #$20
|
||||||
|
JMP loc_1974
|
||||||
|
|
||||||
|
loc_19B0:
|
||||||
|
LDA #$D
|
||||||
|
JSR emit_char
|
||||||
|
LDA #$A
|
||||||
|
JMP loc_1974
|
||||||
|
|
||||||
|
loc_19BA:
|
||||||
|
JSR sub_19FC
|
||||||
|
CLC
|
||||||
|
ADC #2
|
||||||
|
ADC zp_E6
|
||||||
|
JSR sub_19D8
|
||||||
|
STA zp_CE
|
||||||
|
JMP loc_1952
|
||||||
|
|
||||||
|
loc_19CA:
|
||||||
|
JSR sub_19FC
|
||||||
|
CLC
|
||||||
|
ADC zp_E6
|
||||||
|
JSR sub_19D8
|
||||||
|
STA zp_CF
|
||||||
|
JMP loc_1952
|
||||||
|
|
||||||
|
sub_19D8:
|
||||||
|
CMP #3
|
||||||
|
BCC locret_19E2
|
||||||
|
SEC
|
||||||
|
SBC #3
|
||||||
|
JMP sub_19D8
|
||||||
|
|
||||||
|
locret_19E2:
|
||||||
|
RTS
|
||||||
|
|
||||||
|
byte_19E3:
|
||||||
|
!BYTE '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', ',', '!', '?', '_', '#'
|
||||||
|
!BYTE $27, '"', '/', $5C, '|', '-', ':', '(', ')'
|
||||||
|
|
||||||
|
sub_19FC:
|
||||||
|
LDA zp_CE
|
||||||
|
BPL loc_1A03
|
||||||
|
LDA zp_CF
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1A03:
|
||||||
|
LDY #$FF
|
||||||
|
STY zp_CE
|
||||||
|
RTS
|
||||||
|
|
||||||
|
sub_1A08:
|
||||||
|
LDA zp_D0
|
||||||
|
BPL loc_1A0E
|
||||||
|
SEC
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1A0E:
|
||||||
|
BNE loc_1A25
|
||||||
|
INC zp_D0
|
||||||
|
JSR sub_1863
|
||||||
|
LDA zp_E4
|
||||||
|
STA zp_D1
|
||||||
|
LDA zp_E5
|
||||||
|
STA zp_D2
|
||||||
|
LDA zp_D2
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
AND #$1F
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1A25:
|
||||||
|
SEC
|
||||||
|
SBC #1
|
||||||
|
BNE loc_1A42
|
||||||
|
LDA #2
|
||||||
|
STA zp_D0
|
||||||
|
LDA zp_D2
|
||||||
|
LSR
|
||||||
|
LDA zp_D1
|
||||||
|
ROR
|
||||||
|
TAY
|
||||||
|
LDA zp_D2
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
TYA
|
||||||
|
ROR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
LSR
|
||||||
|
AND #$1F
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
|
||||||
|
loc_1A42:
|
||||||
|
LDA #0
|
||||||
|
STA zp_D0
|
||||||
|
LDA zp_D2
|
||||||
|
BPL loc_1A4E
|
||||||
|
LDA #$FF
|
||||||
|
STA zp_D0
|
||||||
|
|
||||||
|
loc_1A4E:
|
||||||
|
LDA zp_D1
|
||||||
|
AND #$1F
|
||||||
|
CLC
|
||||||
|
RTS
|
||||||
|
|
||||||
|
emit_char
|
||||||
|
sty yreg+1
|
||||||
|
inc zpage_ptr
|
||||||
|
ldy zpage_ptr
|
||||||
|
sta (zpage_info),y
|
||||||
|
dec max_chars
|
||||||
|
beq fail_slot
|
||||||
|
yreg
|
||||||
|
ldy #0
|
||||||
|
rts
|
||||||
|
|
||||||
|
fail_slot
|
||||||
|
stack_pointer
|
||||||
|
ldx #0
|
||||||
|
txs
|
||||||
|
rts
|
||||||
|
|
||||||
|
max_chars !byte 0
|
||||||
|
|
||||||
|
zpage_old
|
||||||
|
!if *+(zp_E7-zp_91)>=read_buffer {
|
||||||
|
!error "Code is too large"
|
||||||
|
}
|
173
src/zinfo/zinfo.system.s
Normal file
173
src/zinfo/zinfo.system.s
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
;license:MIT
|
||||||
|
;(c) 2018 by qkumba
|
||||||
|
|
||||||
|
!to "ZINFO.SYSTEM",plain
|
||||||
|
*=$2000
|
||||||
|
|
||||||
|
jmp init
|
||||||
|
!byte $ee,$ee,64
|
||||||
|
!fill 64
|
||||||
|
|
||||||
|
filetype=$f5
|
||||||
|
auxtype=$8000 ;really $80xx
|
||||||
|
|
||||||
|
;get prefix, if any
|
||||||
|
init
|
||||||
|
lda $bf30
|
||||||
|
sta c5_parms+1
|
||||||
|
- jsr $bf00
|
||||||
|
op_c7
|
||||||
|
!byte $c7
|
||||||
|
!word c7_parms
|
||||||
|
ldx $200
|
||||||
|
bne +
|
||||||
|
|
||||||
|
;if not, get volume name
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c5
|
||||||
|
!word c5_parms
|
||||||
|
ldx $201
|
||||||
|
inx
|
||||||
|
txa
|
||||||
|
and #$0f
|
||||||
|
sta $200
|
||||||
|
lda #$2f
|
||||||
|
sta $201
|
||||||
|
|
||||||
|
;set that as prefix
|
||||||
|
|
||||||
|
dec op_c7
|
||||||
|
bne -
|
||||||
|
+ lda #$2f
|
||||||
|
cmp $200,x
|
||||||
|
beq +
|
||||||
|
inc $200
|
||||||
|
sta $201,x
|
||||||
|
|
||||||
|
;get attributes for passed file
|
||||||
|
|
||||||
|
+ jsr $bf00
|
||||||
|
!byte $c4
|
||||||
|
!word c4_parms
|
||||||
|
bcc +
|
||||||
|
quit jsr $bf00
|
||||||
|
!byte $65
|
||||||
|
!word quit_parms
|
||||||
|
+ lda c4_parms+4
|
||||||
|
cmp #filetype
|
||||||
|
bne quit
|
||||||
|
lda c4_parms+6
|
||||||
|
cmp #>auxtype
|
||||||
|
bne quit
|
||||||
|
|
||||||
|
;select interpreter by auxtype
|
||||||
|
;1, 2, 3, 4, 5, "$55" (special case)
|
||||||
|
|
||||||
|
lda c4_parms+5
|
||||||
|
beq quit
|
||||||
|
cmp #$55
|
||||||
|
beq +
|
||||||
|
cmp #6
|
||||||
|
bcs quit
|
||||||
|
dec filename
|
||||||
|
ora #$30
|
||||||
|
sta version
|
||||||
|
+
|
||||||
|
|
||||||
|
;get volume name
|
||||||
|
|
||||||
|
inc c5_parms+3
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c5
|
||||||
|
!word c5_parms
|
||||||
|
ldx $301
|
||||||
|
inx
|
||||||
|
txa
|
||||||
|
and #$0f
|
||||||
|
sta $300
|
||||||
|
lda #$2f
|
||||||
|
sta $301
|
||||||
|
|
||||||
|
;use that for intepreter location
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c6
|
||||||
|
!word c6_parms
|
||||||
|
|
||||||
|
;open/read/close
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c8
|
||||||
|
!word c8_parms
|
||||||
|
lda c8_parms+5
|
||||||
|
sta ca_parms+1
|
||||||
|
jsr $bf00
|
||||||
|
!byte $ca
|
||||||
|
!word ca_parms
|
||||||
|
jsr $bf00
|
||||||
|
!byte $cc
|
||||||
|
!word cc_parms
|
||||||
|
|
||||||
|
;replace suffix
|
||||||
|
|
||||||
|
ldy $2006
|
||||||
|
inc $2006
|
||||||
|
lda #'V'
|
||||||
|
sta $2006+1,y
|
||||||
|
lda #'A'
|
||||||
|
sta $2006,y
|
||||||
|
lda #'S'
|
||||||
|
sta $2006-1,y
|
||||||
|
|
||||||
|
;set prefix to passed file
|
||||||
|
|
||||||
|
jsr $bf00
|
||||||
|
!byte $c6
|
||||||
|
!word c7_parms
|
||||||
|
|
||||||
|
;run interpreter
|
||||||
|
|
||||||
|
jmp $3000
|
||||||
|
|
||||||
|
c7_parms
|
||||||
|
cc_parms
|
||||||
|
!byte 1
|
||||||
|
!word $200
|
||||||
|
|
||||||
|
c5_parms
|
||||||
|
!byte 2
|
||||||
|
!byte 0
|
||||||
|
!word $201
|
||||||
|
!byte $d1
|
||||||
|
|
||||||
|
c6_parms
|
||||||
|
!byte 1
|
||||||
|
!word $300
|
||||||
|
|
||||||
|
c4_parms
|
||||||
|
!byte $0a
|
||||||
|
!word $2006
|
||||||
|
!text "qkumba was here"
|
||||||
|
|
||||||
|
c8_parms
|
||||||
|
!byte 3
|
||||||
|
!word filename
|
||||||
|
!word $800
|
||||||
|
!byte 0
|
||||||
|
|
||||||
|
quit_parms
|
||||||
|
ca_parms
|
||||||
|
!byte 4
|
||||||
|
!byte $ff
|
||||||
|
!word $3000
|
||||||
|
!word $ffff
|
||||||
|
!word $ffff
|
||||||
|
|
||||||
|
filename
|
||||||
|
!byte (filename_e-filename)-1
|
||||||
|
!text "LIB/ZINFO"
|
||||||
|
version !text "5U"
|
||||||
|
filename_e
|
||||||
|
|
||||||
|
!byte $D3,$C1,$CE,$A0,$C9,$CE,$C3,$AE
|
Loading…
Reference in New Issue
Block a user