Compare commits

...

4 Commits

Author SHA1 Message Date
Eric Smith
c80f8653c8 Add ZIP rev M. 2023-07-01 15:14:59 -06:00
Eric Smith
988c140bc7 Add ZIP rev M. 2023-07-01 15:13:24 -06:00
Eric Smith
dfba493013 Add ZIP rev K. 2023-07-01 14:52:18 -06:00
Eric Smith
06d5238abf Add ZIP rev H. 2023-07-01 13:54:02 -06:00
4 changed files with 475 additions and 76 deletions

View File

@ -4,6 +4,9 @@ all: zip1.lst zip1.bin zip1-check \
zip3a.lst zip3a.bin zip3a-check \
zip3b.lst zip3b.bin zip3b-check \
zip3f.lst zip3f.bin zip3f-check \
zip3h.lst zip3h.bin zip3h-check \
zip3k.lst zip3k.bin zip3k-check \
zip3m.lst zip3m.bin zip3m-check \
ezip2a.lst ezip2a.bin ezip2a-check \
ezip2b.lst ezip2b.bin ezip2b-check \
ezip2c.lst ezip2c.bin ezip2c-check \
@ -65,7 +68,7 @@ zip3b-check: zip3b.bin
echo "98ab866beb68f1d78b978a36106e611fd9196ffe7cd6d2e534c145197be3ebc1 zip3b.bin" | sha256sum -c -
zip3f.p zip3f.lst: zip.asm
zip3f.p zip3f.lst: zip-late.asm
asl zip-late.asm -o zip3f.p -L -OLIST zip3f.lst -D iver='$$0306'
zip3f.bin: zip3f.p
@ -75,6 +78,36 @@ zip3f-check: zip3f.bin
echo "6bcc991eb5bdc55a6c0ddb6f307c630ee273f7b95ad0d5f3bc1d9e34ee0ed988 zip3f.bin" | sha256sum -c -
zip3h.p zip3h.lst: zip-late.asm
asl zip-late.asm -o zip3h.p -L -OLIST zip3h.lst -D iver='$$0308'
zip3h.bin: zip3h.p
p2bin -r '$$0900-$$27ff' zip3h.p
zip3h-check: zip3h.bin
echo "7523c44811190cbce363eaf9ed04f67780794a86d849470acd5e0b8b6bb4d6a7 zip3h.bin" | sha256sum -c -
zip3k.p zip3k.lst: zip-late.asm
asl zip-late.asm -o zip3k.p -L -OLIST zip3k.lst -D iver='$$030b'
zip3k.bin: zip3k.p
p2bin -r '$$0900-$$27ff' zip3k.p
zip3k-check: zip3k.bin
echo "0fd531fb0366bff94fdc1e4e95fee8ca77d2a513d3dbb5ddc4fd518acbeb0c60 zip3k.bin" | sha256sum -c -
zip3m.p zip3m.lst: zip-late.asm
asl zip-late.asm -o zip3m.p -L -OLIST zip3m.lst -D iver='$$030d'
zip3m.bin: zip3m.p
p2bin -r '$$0900-$$27ff' zip3m.p
zip3m-check: zip3m.bin
echo "e9f42d7f2ea8b8cd942a95abc11a90a46d69fa4dd3102bd1ec35bb9cfd3f9a97 zip3m.bin" | sha256sum -c -
ezip2a.p ezip2a.lst: ezip.asm
asl ezip.asm -o ezip2a.p -L -OLIST ezip2a.lst -D iver='$$0201'

View File

@ -66,14 +66,15 @@ Revision B added support for splitting the screen into two windows.
## Later ZIP interpreters
Between revision B and revision F of the Apple II ZIP interpreters, a
substantial rearrangement of the code occurred. These and later changes
to the v3 interpreter have not yet been fully analyzed.
substantial rearrangement of the code occurred.
Currently revision F can be built from the source file "zip-late.asm".
The disk I/O routines are derived from RWTS but no longer structured
in the same way as Apple DOS RWTS, and are now more tightly integrated
with the interpreter.
Currently revisions F, H, K, and M can be built from the source file
"zip-late.asm".
The disk I/O routines are derived from RWTS but no longer
structured in the same way as RWTS, and are now more tightly integrated with
the interpreter.
## EZIP

View File

@ -7,40 +7,42 @@
cpu 6502
iver2a equ $0201 ; 2A has exactly four save positions per disk, will only
; The differences between revisions stated here is not comprehensizve.
iver2a equ $0201 ; Has exactly four save positions per disk, will only
; work for games that have up to 32 KiB saves.
; released with A Mind Forever Voyaging r77 850814
; Released with A Mind Forever Voyaging r77 850814
iver2b equ $0202 ; 2B allows disks to have three or four save positions,
iver2b equ $0202 ; Allows disks to have three or four save positions,
; supporting games with up to 46 KiB saves.
; 2B forces CSWL to be COUT1 at start.
; 2B adds "be patient" message to verify.
; 2B radically changes implementation of get_prop_addr,
; Forces CSWL to be COUT1 at start.
; Adds "be patient" message to verify.
; Radically changes implementation of get_prop_addr,
; purpose unknown.
; 2B changes random number generator, purpose unknown.
; 2B changes subroutine Seb96, purpose unknown.
; 2B changes some constants in save and restore,
; Changes random number generator, purpose unknown.
; Changes subroutine Seb96, purpose unknown.
; Changes some constants in save and restore,
; purpose unknown.
; released with Trinity r11 860509
; Released with Trinity r11 860509
iver2c equ $0203 ; 2C makes a change to deselecting output stream 3
iver2c equ $0203 ; Changes deselecting output stream 3
; (table), to prevent table stream stack underflow.
; 2C changes data tables used by random number generator,
; Changes data tables used by random number generator,
; purpose unknown.
; released with Bureaucracy r86 870212
; Released with Bureaucracy r86 870212
iver2d equ $0204 ; 2D changes spaces to tabs in save messages (probably
iver2d equ $0204 ; Changes spaces to tabs in save messages (probably
; by mistake).
; 2D changes a constant in scan_table, purpose unknown.
; released with Bureaucracy r116 870602
; Changes a constant in scan_table, purpose unknown.
; Released with Bureaucracy r116 870602
; No Apple II games with EZIP versions 2E through 2G have been found
iver2h equ $0208 ; 2H removes several calls to HOME.
; 2H changes the tabs in messages back to spaces.
; 2H adds two extra carriage returns at the end of
iver2h equ $0208 ; Removes several calls to HOME.
; Changes the tabs in messages back to spaces.
; Adds two extra carriage returns at the end of
; some messages.
; released with Nord and Bert r19 870723
; Released with Nord and Bert r19 870723
char_tab equ $09
@ -501,8 +503,7 @@ Sd03a: stx Z0e
ldy #rwts_sec_buf_size
bne .lp2a
.loop2: lda rwts_sec_buf,y
.lp2a:
eor rwts_sec_buf-1,y
.lp2a: eor rwts_sec_buf-1,y
tax
lda nib_tab,x
ldx Z0e
@ -791,7 +792,7 @@ denib_tab equ *-$96
; $01 = write 16-sector
; $80 = read 18-sector
rwts_inner:
sta rwts_cmd ; command
sta rwts_cmd
lda #$02
sta Dd475
asl

View File

@ -7,13 +7,23 @@
cpu 6502
iver3f equ $0306
; The differences between revisions stated here is not comprehensizve.
iver3h equ $0308
iver3f equ $0306 ; Substantially rearranged compared to B.
; Incorporates RWTS-equivalent routines.
iver3k equ $030b
iver3h equ $0308 ; Sends 80-col sequence to printer firmware.
; Accepts backspace character.
; Quit says end of session rather than end of story.
; Doesn't use self-modifying code for verify.
iver3k equ $030b ; Disk routines rearranged.
; Forces CSWL to be COUT at start.
iver3m equ $030d ; Eliminated some manipulation of the screen window
; in save and restore.
; Fixed a bug in upper/lower case conversion.
iver3m equ $030d
ifndef iver
@ -22,6 +32,7 @@ iver equ iver3f
char_bs equ $08
char_tab equ $09
char_cr equ $0d
char_del equ $7f
@ -234,6 +245,9 @@ rwts_sec_buf: rmb rwts_sec_buf_size
D2c00: rmb 256
D2d00: rmb 256
if iver>=iver3h
D2e00:
endif
rmb 256
stk_low_bytes: rmb 256 ; stack, low bytes
@ -300,6 +314,7 @@ home equ $fc58
clreol equ $fc9c
rdkey equ $fd0c
cout equ $fded
cout1 equ $fdf0
bell equ $ff3a
org $0900
@ -381,9 +396,9 @@ S093a: stx Z6e
; write secondary buffer (reverse order)
tya
ldy #rwts_sec_buf_size
bne .lp2Z
bne .lp2a
.loop2: lda rwts_sec_buf,y
.lp2Z: eor rwts_sec_buf-1,y
.lp2a: eor rwts_sec_buf-1,y
tax
lda nib_tab,x
ldx Z6e
@ -439,6 +454,8 @@ write_21:
; +6 jsr
if iver<=iver3h
post_nibble:
ldy #$00
.loop1: ldx #rwts_sec_buf_size
@ -455,6 +472,8 @@ post_nibble:
bne .loop2
rts
endif
read_data_field_16:
ldy #$20
@ -515,7 +534,8 @@ read_data_field_16:
bpl .loop12
cmp #$aa ; check for data field epilogue 2nd byte
beq read_address_field_success
read_data_field_16_fail: sec
read_data_field_16_fail:
sec
rts
@ -582,7 +602,7 @@ seek_track:
sta Z6e
sec
sbc Z6c
beq .fwd4
beq .fwd5
bcs .fwd1
eor #$ff
inc D0d3e
@ -593,9 +613,9 @@ seek_track:
bcc .fwd3
lda Z6d
.fwd3: cmp #$0c
bcs denib_tab
bcs .fwd4
tay
sec
.fwd4: sec
jsr .subr1
lda motor_on_time_tab,y
jsr delay
@ -606,7 +626,7 @@ seek_track:
jsr delay
inc Z6d
bne .loop1
.fwd4: jsr delay
.fwd5: jsr delay
clc
.subr1: lda D0d3e
.subr2: and #$03
@ -618,6 +638,13 @@ seek_track:
.rtn: rts
if iver>=iver3k
align $0100,$00
endif
if iver<=iver3h
delay: ldx #$11
.loop1: dex
bne .loop1
@ -629,6 +656,28 @@ delay: ldx #$11
bne delay
rts
endif
if iver>=iver3k
S0cfc: sta Z6c
jsr S0d1f
lda D0d3e,y
bit Z6a
bmi L0d0b
lda D0d46,y
L0d0b: sta D0d3e
lda Z6c
bit Z6a
bmi L0d19
sta D0d46,y
bpl L0d1c
L0d19: sta D0d3e,y
L0d1c: jmp seek_track
endif
motor_on_time_tab:
fcb $01,$30,$28,$24,$20,$1e,$1d,$1c
@ -665,6 +714,24 @@ denib_tab equ *-$96
fcb $3e,$3f
if iver>=iver3k
align $0100,$00
delay: ldx #$11
.loop1: dex
bne .loop1
inc Z73
bne .fwd1
inc Z74
.fwd1: sec
sbc #$01
bne delay
rts
endif
; On entry:
; A = command
; $00 = read 16-sector
@ -793,18 +860,31 @@ L0cc2: ldy rwts_sector ; logical sector number
lda D0835,y ; map to physical sector number via interleave table in boot1
cmp Z70 ; does it match physical sector number?
bne L0c80 ; no
plp
bcs L0ceb
jsr read_data_field_16
if iver<=iver3h
php
bcs L0c80
plp
else
bcc L0d08
clc
php
bcc L0c80
L0d08:
endif
ldx #$00
stx Z6d
jsr post_nibble
ldx D0d50
L0cdf: lda #$00
clc
bcc L0ce5
@ -826,6 +906,8 @@ S0cf4: asl
rts
if iver<=iver3h
S0cfc: sta Z6c
jsr S0d1f
lda D0d3e,y
@ -841,6 +923,8 @@ L0d0b: sta D0d3e
L0d19: sta D0d3e,y
L0d1c: jmp seek_track
endif
S0d1f: txa
lsr
@ -865,6 +949,28 @@ S0d26: pha
.fwd1: sta D0d3e,y
.rtn: rts
if iver>=iver3k
post_nibble:
ldy #$00
.loop1: ldx #rwts_sec_buf_size
.loop2: dex
bmi .loop1
lda rwts_pri_buf,y
lsr rwts_sec_buf,x
rol
lsr rwts_sec_buf,x
rol
sta (rwts_buf),y
iny
cpy Z6d
bne .loop2
rts
endif
D0d3e: fcb $00,$00,$00,$00,$00,$00,$00,$00
D0d46: fcb $00,$00,$00,$00,$00,$00,$00,$00
D0d4e: fcb $00
@ -967,6 +1073,8 @@ int_err_0e_alt:
e_0dd9: jsr op_new_line
if iver<=iver3k
lda #$00
sta wndtop
jsr home
@ -977,6 +1085,14 @@ e_0dd9: jsr op_new_line
sta cursrv
jmp S144e
else
lda #$00
sta Zdf
rts
endif
msg_default_is: text_str " (Default is "
D0dfe: text_str "*) >"
@ -1067,7 +1183,7 @@ S0e91: prt_msg position
lda Zf1
jsr S0e02
.loop2: jsr S11c5
cmp #$0d
cmp #char_cr
beq .fwd3
sec
sbc #'1'
@ -1093,10 +1209,10 @@ S0e91: prt_msg position
lda D0e34
jsr S0e02
.loop3: jsr S11c5
cmp #$0d
cmp #char_cr
beq .fwd6
sec
sbc #$31
sbc #'1'
cmp #$07
bcc .fwd7
jsr bell
@ -1131,11 +1247,15 @@ S0e91: prt_msg position
.fwd10: prt_msg yes
lda Zf3
if iver==iver3f
sta Zf1
endif
sta Z62
inc Z62
ldx Zf4
if iver==iver3f
stx D0e34
endif
inx
txa
asl
@ -1144,7 +1264,9 @@ S0e91: prt_msg position
asl
sta Z60
lda Zf2
if iver==iver3f
sta Zf0
endif
asl
asl
sta rwts_track
@ -1176,12 +1298,26 @@ msg_insert_story:
msg_len_insert_story equ *-msg_insert_story
S0ff8: lda D172e
S0ff8:
if iver>=iver3h
lda Z62
pha
endif
lda D172e
ldx D172d
sta Z62
stx Z60
if iver==iver3f
lda Zf1
bne .fwd2
else
pla
cmp #$02
beq .fwd2
endif
.loop1: prt_msg insert_story
jsr S0f9e
ldx #$01
@ -1228,8 +1364,11 @@ msg_len_saving_position equ *-msg_saving_position
op_save:
if iver<=iver3k
lda wndtop
pha
endif
jsr e_0dd9
prt_msg save_position
jsr S0e91
@ -1255,9 +1394,13 @@ op_save:
bcc .fwd1
.loop2: jsr S0ff8
if iver<=iver3k
pla
sta wndtop
jsr home
endif
jmp predicate_false
.fwd1: lda #(hdr_arch>>8)-3
@ -1275,11 +1418,23 @@ op_save:
bcs .loop2
dec Z8e
bne .loop4
jsr S0ff8
if iver>=iver3h
lda Zf3
sta Zf1
lda Zf4
sta D0e34
lda Zf2
sta Zf0
endif
if iver<=iver3k
pla
sta wndtop
jsr home
endif
jmp predicate_true
@ -1298,8 +1453,11 @@ msg_len_restoring_position equ *-msg_restoring_position
op_restore:
if iver<=iver3k
lda wndtop
pha
endif
jsr e_0dd9
prt_msg restore_position
jsr S0e91
@ -1329,9 +1487,13 @@ op_restore:
bpl .loop3
jsr S0ff8
if iver<=iver3k
pla
sta wndtop
jsr home
endif
jmp predicate_false
.fwd1: lda hdr_flags2
@ -1374,9 +1536,22 @@ op_restore:
lda #$00
sta Z99
jsr S0ff8
if iver>=iver3h
lda Zf3
sta Zf1
lda Zf4
sta D0e34
lda Zf2
sta Zf0
endif
if iver<=iver3k
pla
sta wndtop
jsr home
endif
jmp predicate_true
@ -1385,10 +1560,14 @@ S11c5: cld
pha
tya
pha
.loop1: lda D172b
.loop1:
if iver==iver3f
lda D172b
beq .fwd0
lda cur80h
sta cursrh
endif
.fwd0: jsr rdkey
and #$7f
cmp #$0d
@ -1403,10 +1582,28 @@ S11c5: cld
bne .fwd3
jmp .fwd6
.fwd3: cmp #$20
.fwd3:
if iver>=iver3h
ldx #D1243_len-1
.loop1a:
cmp D1243,x
beq .fwd3a
dex
bpl .loop1a
bmi .fwd3b ; always taken
.fwd3a: lda D124d,x
bne .fwd6 ; always taken
.fwd3b:
endif
cmp #$20
bcc .fwd5
cmp #$2b
beq .fwd5
if iver==iver3f
cmp #$3c
bne .fwd4
lda #$2c
@ -1456,6 +1653,7 @@ S11c5: cld
bne .fwd4i
lda #$39
bne .fwd6 ; always taken
endif
.fwd4i: cmp #$3c
bcc .fwd6
@ -1485,15 +1683,35 @@ S11c5: cld
rts
if iver>=iver3h
D1243: fcb "<_>)@%^&*("
D1243_len equ *-D1243
D124d: fcb ",-.0256789"
endif
S1275: sta Ze2
txa
pha
tya
pha
lda Ze2
if iver<=iver3k
cmp #$60
else
cmp #$61
endif
bcc .fwd1
if iver<=iver3k
cmp #$80
else
cmp #$7b
endif
bcs .fwd1
ldx D172b
bne .fwd1
@ -1529,6 +1747,12 @@ e_1296: jsr S156f
beq .fwd3
cmp #char_del
beq .fwd1
if iver>=iver3h
cmp #char_bs
beq .fwd1
endif
jsr bell
jmp .loop3
@ -1557,9 +1781,20 @@ e_1296: jsr S156f
cmp #$5b
bcs .fwd4
adc #$20
.fwd4: sta (arg1),y
.fwd4:
if iver>=iver3h
and #$7f
endif
sta (arg1),y
dey
if iver==iver3f
bpl .loop4
else
bne .loop4
endif
jsr S1328
lda Zc2
ldx D172b
@ -1603,11 +1838,13 @@ S1328: lda Zdf
pha
lda D13ad
sta cswl
lda D13ae
lda D13ad+1
sta cswl+1
lda #$00
sta cursrh
sta cur80h
if iver==iver3f
lda D13ac
cmp #$01
bne .fwd1
@ -1615,7 +1852,7 @@ S1328: lda Zdf
lda #$89
jsr cout
lda cswl+1
sta D13ae
sta D13ad+1
lda cswl
sta D13ad
lda #$b8
@ -1624,8 +1861,10 @@ S1328: lda Zdf
jsr cout
lda #$ce
jsr cout
lda #$8d
lda #char_cr+$80
jsr cout
endif
.fwd1: ldy #$00
.loop1: lda D0200,y
jsr cout
@ -1649,9 +1888,8 @@ msg_printer_slot
msg_len_printer_slot equ *-msg_printer_slot
D13ac: fcb $00 ; "."
D13ad: fcb $00 ; "."
D13ae: fcb $00 ; "."
D13ac: fcb $00
D13ad: fdb $0000
S13af: prt_msg printer_slot
@ -1668,9 +1906,39 @@ S13af: prt_msg printer_slot
.fwd1: lda #$01
.fwd2: clc
adc #$c0
sta D13ae
sta D13ad+1
jsr S144e
inc D13ac
if iver>=iver3h
; send sequence <Control-I>80N to convince printer firmware to use
; 80 columns
lda cswl
pha
lda cswl+1
pha
lda D13ad
sta cswl
lda D13ad+1
sta cswl+1
lda #char_tab+$80
jsr cout
lda #'8'+$80
jsr cout
lda #'0'+$80
jsr cout
lda #'N'+$80
jsr cout
lda cswl
sta D13ad
lda cswl+1
sta D13ad+1
pla
sta cswl+1
pla
sta cswl
endif
rts
@ -1778,7 +2046,11 @@ op_quit:
msg_end_of_session:
if iver==iver3f
text_str "End of story."
else
text_str "End of session."
endif
fcb char_cr
msg_len_end_of_session equ *-msg_end_of_session
@ -2099,6 +2371,14 @@ op_show_status:
sta cursrh
pla
sta cur80h
if iver>=iver3k
ldx D172b
beq .fwd13
sta cursrh
.fwd13:
endif
jsr vtab
ldx #$ff
stx Zdf
@ -2129,6 +2409,13 @@ interp_start:
sta Z60
sta Z61
if iver>=iver3k
lda #cout1>>8
sta cswl+1
lda #cout1&$ff
sta cswl
endif
ldx #$00
stx rwts_sector
stx Zec
@ -2222,7 +2509,7 @@ restart:
inx
bne .loop4
txa
.loop5: sta D2442,x
.loop5: sta D2e00,x
inx
bne .loop5
inc Z94
@ -2380,8 +2667,8 @@ op_c0_ff:
cmp #$e0
bcs .fwd6
jmp L19b3
.fwd6: ldx #$94
ldy #$1b
.fwd6: ldx #D1b94&$ff
ldy #D1b94>>8
and #$1f
cmp #$0c
bcc L1935
@ -2402,8 +2689,8 @@ L1946: jsr $0000
jmp main_loop
op_b0_bf:
ldx #$26
ldy #$1b
ldx #D1b26&$ff
ldy #D1b26>>8
and #$0f
cmp #$0e
bcc L1935
@ -2425,8 +2712,8 @@ op_80_af:
bne int_err_03
jsr S19ea
.fwd3: jsr S19c7
ldx #$42
ldy #$1b
ldx #D1b42&$ff
ldy #D1b42>>8
lda opcode
and #$0f
cmp #$10
@ -2457,8 +2744,8 @@ op_00_7f:
lda Z8c+1
sta arg2+1
inc argcnt
L19b3: ldx #$62
ldy #$1b
L19b3: ldx #D1b62&$ff
ldy #D1b62>>8
lda opcode
and #$1f
cmp #$19
@ -2777,7 +3064,7 @@ D1b62: fdb int_err_04 ; [illegal]
; VAR instructions (0-4 operands), opcodes $e0..$ff
fdb op_call
D1b94: fdb op_call
fdb op_storew
fdb op_storeb
fdb op_put_prop
@ -2849,9 +3136,34 @@ op_verify:
sta Z8e
rol Z8e+1
rol acb
if iver==iver3f
lda #acb+1 ; modify code in S236c subroutine
sta L2376+1
.loop2: jsr S236c
else
lda #$00
sta Zea
sta Zeb
jmp .fwd0a
.loop2: lda Z9c
bne .fwd0b
.fwd0a lda #$29
sta Zed
jsr S0d6b
.fwd0b: ldy Z9c
lda rwts_data_buf,y
inc Z9c
bne .fwd0c
inc Z9d
bne .fwd0c
inc Z9e
.fwd0c:
endif
clc
adc Z90
sta Z90
@ -2866,8 +3178,12 @@ op_verify:
lda Z9e
cmp acb
bne .loop2
if iver==iver3f
lda #Za3+1
sta L2376+1 ; modify code in S236c subroutine
endif
lda hdr_checksum+1
cmp Z90
bne L1c41
@ -3865,7 +4181,13 @@ L22aa: cmp D22b4,x
rts
D22b4: fcb $21,$3f,$2c,$2e,$8d,$20 ; "!?,.. "
D22b4: fcb "!?,."
if iver==iver3f
fcb char_cr+$80
else
fcb char_cr
endif
fcb " "
S22ba: tax
@ -4033,18 +4355,24 @@ S23a2: sta Za8
jsr S0d6b
bcs int_err_0e
.fwd1: ldy Za7
lda D2442,y
lda D2e00,y
cmp Zaa
beq .fwd4
inc Zaa
bne .fwd3
if iver==iver3f
jsr S2419
else
jsr S243b
endif
ldx #$00
.loop3: lda D2442,x
.loop3: lda D2e00,x
beq .fwd2
sec
sbc Za2
sta D2442,x
sta D2e00,x
.fwd2: inx
cpx Za6
bcc .loop3
@ -4053,7 +4381,7 @@ S23a2: sta Za8
sbc Za2
sta Zaa
.fwd3: lda Zaa
sta D2442,y
sta D2e00,y
.fwd4: lda Za7
clc
adc Za5
@ -4067,11 +4395,11 @@ int_err_0e:
S2419: ldx #$00
stx Zab
lda D2442
lda D2e00
inx
.loop1: cmp D2442,x
.loop1: cmp D2e00,x
bcc .fwd1
lda D2442,x
lda D2e00,x
stx Zab
.fwd1: inx
cpx Za6
@ -4080,6 +4408,38 @@ S2419: ldx #$00
rts
if iver>=iver3h
D243a: fcb $00
S243b: ldx #$00
stx Zab
sty D243a
.loop1: lda D2e00,x
cmp #$00
bne .fwd1
inx
cpx Za6
bcc .loop1
bcs .fwd3
.fwd1: inx
.loop2: cmp D2e00,x
bcc .fwd2
ldy D2e00,x
beq .fwd2
tya
stx Zab
.fwd2: inx
cpx Za6
bcc .loop2
.fwd3: sta Za2
ldy D243a
rts
endif
S2433: lda Z8e
sta Z9c
lda Z8e+1
@ -4090,7 +4450,11 @@ S2433: lda Z8e
rts
D2442: fcb [256]$00
if iver==iver3f
; A buffer was allocated at $2e00, but in revision F, instead
; of that buffer being used, another one is allocated here.
D2e00: fcb [256]$00
endif
S2542: lda Z8e