mirror of
https://github.com/a2-4am/4cade.git
synced 2024-11-23 12:33:32 +00:00
sync latest, hook up seek, now Lode Runner can start
use of $1Fxx causes conflict, though
This commit is contained in:
parent
27e9821b11
commit
73f8a2d635
@ -4,4 +4,4 @@ c = b.read(0x40)
|
||||
b.skip(0x200)
|
||||
d = b.read(0x1fff600)
|
||||
b.close()
|
||||
b=a.createtextfile(WScript.Arguments(0), 1).write(c+a.opentextfile("res\\proboothd").read(512)+d)
|
||||
b=a.createtextfile(WScript.Arguments(0), 1).write(c+a.opentextfile(WScript.Arguments(1)).read(512)+d)
|
@ -73,6 +73,7 @@ LoadDHRFile
|
||||
lda #$20 ; read next $2000 bytes
|
||||
sta sizehi
|
||||
dec auxreq ; 0 = read into main memory
|
||||
clc ; not a subdirectory
|
||||
jmp hddrdwrpart ; call ProRWTS2
|
||||
|
||||
traverse
|
||||
@ -194,8 +195,6 @@ traverse
|
||||
; stack set to next instruction after parameters
|
||||
;
|
||||
; to do: preserve non-$4x zpage locations for titles that open files after start
|
||||
; enable seek
|
||||
; enable < 512 bytes reads
|
||||
;------------------------------------------------------------------------------
|
||||
packet = $40 ;word
|
||||
buffer = $42 ;word
|
||||
@ -230,8 +229,8 @@ ProDOS_enter
|
||||
beq @do_write
|
||||
cmp #$cc
|
||||
beq @do_close
|
||||
;; cmp #$ce
|
||||
;; beq @do_seek
|
||||
cmp #$ce
|
||||
beq @do_seek
|
||||
;;any others??
|
||||
jmp ProDOS_fatal
|
||||
@do_prefix
|
||||
@ -249,9 +248,9 @@ ProDOS_enter
|
||||
@do_close
|
||||
jsr @imp_close
|
||||
jmp ProDOS_exit
|
||||
;;@do_seek
|
||||
;; jsr @imp_seek
|
||||
;; jmp ProDOS_exit
|
||||
@do_seek
|
||||
jsr @imp_seek
|
||||
jmp ProDOS_exit
|
||||
|
||||
|
||||
PREV_BLOCK_LO = $0 ;ProDOS constant
|
||||
@ -306,11 +305,25 @@ PREV_BLOCK_HI = $1 ;ProDOS constant
|
||||
iny
|
||||
lda (packet), y
|
||||
sta @handle-1, x
|
||||
tax
|
||||
jsr @patch_buffer
|
||||
iny
|
||||
txa
|
||||
lda #1
|
||||
sta (packet), y
|
||||
rts
|
||||
lda #0
|
||||
sta reqcmd
|
||||
sta sizehi
|
||||
sta sizelo
|
||||
jsr hddopendir
|
||||
ldx encbufpatch1+1
|
||||
inx
|
||||
stx @block_index2+2
|
||||
lda #0
|
||||
beq @block_index2 ;always
|
||||
|
||||
@imp_seek
|
||||
lda #cmdseek
|
||||
!byte $2c
|
||||
@imp_read
|
||||
lda #cmdread
|
||||
!byte $2c
|
||||
@ -318,34 +331,42 @@ PREV_BLOCK_HI = $1 ;ProDOS constant
|
||||
lda #cmdwrite
|
||||
sta reqcmd
|
||||
jsr @set_rdwrbuff
|
||||
jmp hddopendir
|
||||
ldx encbufpatch1+1
|
||||
inx
|
||||
stx @block_index1+2
|
||||
stx @block_index2+2
|
||||
@block_index1
|
||||
lda $d1ff
|
||||
sta blkidx
|
||||
clc ;not a subdirectory
|
||||
jsr hddrdwrpart
|
||||
lda blkidx
|
||||
@block_index2
|
||||
sta $d1ff
|
||||
rts
|
||||
|
||||
@imp_close
|
||||
dec @handles+1
|
||||
bne @close_ret
|
||||
lda #$b1
|
||||
sta overridepatch1
|
||||
sta overridepatch2
|
||||
lda #bloklo
|
||||
sta overridepatch1+1
|
||||
sta overridepatch2+1
|
||||
lda #>hdddirbuf
|
||||
lda #>hddencbuf
|
||||
|
||||
@patch_buffer
|
||||
sta bufferpatch2+2
|
||||
sta bufferpatch3+2
|
||||
sta bufferpatch4+2
|
||||
sta bufferpatch6+1
|
||||
sta bufferpatch7+2
|
||||
sta bufferpatch9+2
|
||||
sta bufferpatch10+1
|
||||
sta encbufpatch1+1
|
||||
sta encbufpatch2+1
|
||||
tax
|
||||
inx
|
||||
stx bufferpatch5+2
|
||||
stx bufferpatch8+2
|
||||
dex
|
||||
dex
|
||||
stx bufferpatch1+1
|
||||
stx dirbufpatch1+1
|
||||
inx
|
||||
stx dirbufpatch2+2
|
||||
stx dirbufpatch3+2
|
||||
stx dirbufpatch4+2
|
||||
stx dirbufpatch6+1
|
||||
stx dirbufpatch7+2
|
||||
stx dirbufpatch9+2
|
||||
stx dirbufpatch10+1
|
||||
inx
|
||||
stx dirbufpatch5+2
|
||||
stx dirbufpatch8+2
|
||||
@close_ret
|
||||
rts
|
||||
|
||||
@ -361,17 +382,12 @@ PREV_BLOCK_HI = $1 ;ProDOS constant
|
||||
ldy #1
|
||||
lda (packet), y
|
||||
tax
|
||||
lda @handle-1,x
|
||||
lda @handle-1, x
|
||||
tax
|
||||
jsr @patch_buffer
|
||||
lda #$a9
|
||||
sta overridepatch1
|
||||
sta overridepatch2
|
||||
ldx #ldrlo
|
||||
iny
|
||||
lda (packet), y
|
||||
sta overridepatch1+1
|
||||
iny
|
||||
lda (packet), y
|
||||
sta overridepatch2+1
|
||||
jsr @setbuffer
|
||||
ldx #sizelo
|
||||
iny
|
||||
!byte $2c
|
||||
|
248
src/prorwts2.a
248
src/prorwts2.a
@ -16,12 +16,15 @@ ver_02 = 1
|
||||
verbose_info = 0 ;set to 1 to enable display of memory usage
|
||||
enable_floppy = 0 ;set to 1 to enable floppy drive support
|
||||
poll_drive = 0 ;set to 1 to check if disk is in drive, recommended if allow_multi is enabled
|
||||
allow_extend = 0 ;enable support for more than four partitions (note: it has overhead)
|
||||
override_adr = 0 ;set to 1 to require an explicit load address
|
||||
aligned_read = 1 ;set to 1 if all reads can be a multiple of block size
|
||||
aligned_read = 0 ;set to 1 if all reads can be a multiple of block size
|
||||
enable_readseq=0 ;set to 1 to enable reading multiple sequential times from the same file without seek
|
||||
;(exposes a fixed address that can be called for either floppy or hard disk support)
|
||||
enable_write = 1 ;set to 1 to enable write support
|
||||
;file must exist already and its size cannot be altered
|
||||
;writes occur in multiples of block size
|
||||
enable_seek = 0 ;set to 1 to enable seek support
|
||||
enable_seek = 1 ;set to 1 to enable seek support
|
||||
;seeking with aligned_read=1 requires non-zero offset
|
||||
allow_multi = 0 ;set to 1 to allow multiple floppies
|
||||
check_chksum = 0 ;set to 1 to enforce checksum verification for floppies
|
||||
@ -55,14 +58,14 @@ ver_02 = 1
|
||||
load_aux = 0 ;load to aux memory
|
||||
load_banked = 1 ;set to 1 to load into banked RAM instead of main RAM (can be combined with load_aux for aux banked)
|
||||
lc_bank = 1 ;load into specified bank (1 or 2) if load_banked=1
|
||||
one_page = 1 ;set to 1 if verbose mode says that you should (smaller code)
|
||||
one_page = 0 ;set to 1 if verbose mode says that you should (smaller code)
|
||||
|
||||
;user-defined driver load address
|
||||
!if load_banked = 1 {
|
||||
!if load_high = 1 {
|
||||
!ifdef PASS2 {
|
||||
} else { ;PASS2 not defined
|
||||
reloc = $ff00 ;page-aligned, as high as possible, the ideal value will be shown on mismatch
|
||||
reloc = $fe00 ;page-aligned, as high as possible, the ideal value will be shown on mismatch
|
||||
} ;PASS2
|
||||
} else { ;load_high = 0
|
||||
reloc = $d000 ;page-aligned, but otherwise wherever you want
|
||||
@ -202,7 +205,7 @@ init jsr SETKBD
|
||||
jsr SETVID
|
||||
lda DEVNUM
|
||||
sta x80_parms + 1
|
||||
sta unrunit + 1
|
||||
sta unrunit1 + 1
|
||||
and #$70
|
||||
!if (enable_floppy + enable_write) > 1 {
|
||||
sta unrslot1 + 1
|
||||
@ -221,14 +224,19 @@ init jsr SETKBD
|
||||
!if (might_exist + poll_drive) > 0 {
|
||||
sta unrdrvoff2 + 1
|
||||
} ;might_exist or poll_drive
|
||||
!if (aligned_read + allow_aux) = 0 {
|
||||
sta unrdrvoff3 + 1
|
||||
} ;not aligned_read and not allow_aux
|
||||
sta unrdrvoff4 + 1
|
||||
tax
|
||||
inx ;MOTORON
|
||||
!if allow_multi = 1 {
|
||||
stx unrdrvon1 + 1
|
||||
} ;allow_multi
|
||||
stx unrdrvon2 + 1
|
||||
!if aligned_read = 0 {
|
||||
stx unrdrvon3 + 1
|
||||
} ;aligned_read
|
||||
stx unrdrvon4 + 1
|
||||
inx ;DRV0EN
|
||||
!if allow_multi = 1 {
|
||||
@ -395,7 +403,63 @@ adjpath tya
|
||||
beq -
|
||||
|
||||
set_slot stx slot + 2
|
||||
stx unrentry + 2
|
||||
!if allow_extend = 1 {
|
||||
stx unrentry1 + 2
|
||||
} ;allow_extend
|
||||
stx unrentry2 + 2
|
||||
!if allow_extend = 1 {
|
||||
stx unrentry3 + 2
|
||||
} ;allow_extend
|
||||
slot ldx $cfff
|
||||
!if enable_floppy = 1 {
|
||||
php
|
||||
beq bankram
|
||||
} ;enable_floppy
|
||||
stx unrentry2 + 1
|
||||
!if allow_extend = 1 {
|
||||
;use ProDOS entrypoint instead
|
||||
|
||||
inx
|
||||
inx
|
||||
inx
|
||||
stx unrentry1 + 1
|
||||
stx unrentry3 + 1
|
||||
|
||||
;detect extended remapping and update unit accordingly
|
||||
|
||||
lda #<(readbuff + $200)
|
||||
sta adrlo
|
||||
ldy #>(readbuff + $200)
|
||||
ldx #2
|
||||
stx x80_parms + 4
|
||||
lda #0
|
||||
sta x80_parms + 5
|
||||
jsr unrhddrd
|
||||
jsr MLI
|
||||
!byte $80
|
||||
!word x80_parms
|
||||
bcc + ;always
|
||||
iterunit inc iterunit + 1
|
||||
|
||||
;enable use of ProDOS SmartPort entrypoint
|
||||
|
||||
lda #$2c
|
||||
sta unrentry2
|
||||
|
||||
unrentry1 jsr $d1d1
|
||||
!byte cmdread
|
||||
!word unrpacket
|
||||
bcs iterunit
|
||||
|
||||
+ ldy #$0f
|
||||
- lda readbuff + 4, y
|
||||
cmp readbuff + $204, y
|
||||
bne iterunit
|
||||
dey
|
||||
bpl -
|
||||
} ;allow_extend
|
||||
|
||||
bankram
|
||||
!if load_banked = 1 {
|
||||
lda LCBANK2 - ((lc_bank - 1) * 8)
|
||||
lda LCBANK2 - ((lc_bank - 1) * 8)
|
||||
@ -406,8 +470,7 @@ set_slot stx slot + 2
|
||||
!if enable_floppy = 1 {
|
||||
ldx #>unrelocdsk
|
||||
ldy #<unrelocdsk
|
||||
slot lda $cfff
|
||||
sta unrentry + 1
|
||||
plp
|
||||
php
|
||||
beq copydrv
|
||||
ldx #>unrelochdd
|
||||
@ -476,8 +539,6 @@ unrdrvsel1 lda DRV0EN + 1
|
||||
unrdrvoff1 lda MOTOROFF
|
||||
++
|
||||
} else { ;enable_floppy = 0
|
||||
slot lda $cfff
|
||||
sta unrentry + 1
|
||||
ldy #0
|
||||
- lda unrelochdd, y
|
||||
sta reloc, y
|
||||
@ -608,11 +669,9 @@ x80_parms !byte 3, $d1
|
||||
unrelocdsk
|
||||
!pseudopc reloc {
|
||||
rdwrpart
|
||||
!if (override_adr + allow_subdir) > 0 {
|
||||
;only available when load address is specified
|
||||
|
||||
!if (enable_readseq + allow_subdir) > 0 {
|
||||
jmp rdwrfile
|
||||
} ;override_adr or allow_subdir
|
||||
} ;enable_readseq or allow_subdir
|
||||
opendir
|
||||
!if no_interrupts = 1 {
|
||||
!if detect_err = 1 {
|
||||
@ -902,7 +961,7 @@ unrdrvon2 = unrelocdsk + (* - reloc)
|
||||
} ;no_interrupts
|
||||
|
||||
rdwrfilei
|
||||
!if (allow_subdir + allow_saplings + allow_trees + (aligned_read xor 1)) > 0 {
|
||||
!if (override_adr + allow_subdir + allow_saplings + allow_trees + (aligned_read xor 1)) > 0 {
|
||||
;restore load offset
|
||||
|
||||
ldx ldrhi
|
||||
@ -922,12 +981,12 @@ rdwrfilei
|
||||
} ;allow_subdir
|
||||
sta adrlo
|
||||
stx adrhi
|
||||
} else { ;allow_subdir = 0 and allow_saplings = 0 and allow_trees = 0 and aligned_read = 1
|
||||
} else { ;override_adr = 0 and allow_subdir = 0 and allow_saplings = 0 and allow_trees = 0 and aligned_read = 1
|
||||
pla
|
||||
sta adrhi
|
||||
pla
|
||||
sta adrlo
|
||||
} ;allow_subdir or allow_saplings or allow_trees
|
||||
} ;override_adr or allow_subdir or allow_saplings or allow_trees and not aligned_read
|
||||
|
||||
;set requested size to min(length, requested size)
|
||||
|
||||
@ -1012,9 +1071,11 @@ unrdrvon3 = unrelocdsk + (* - reloc)
|
||||
ora sizelo
|
||||
bne rdwrfilei
|
||||
!if allow_aux = 0 {
|
||||
unrdrvoff3 = unrelocdsk + (* - reloc)
|
||||
lda MOTOROFF
|
||||
rts
|
||||
} else { ;allow_aux = 1
|
||||
beq rdwrdone
|
||||
beq rdwrdonedrv
|
||||
} ;allow_aux
|
||||
} else { ;aligned_read = 1
|
||||
!if bounds_check = 1 {
|
||||
@ -1074,10 +1135,10 @@ rdwrloop
|
||||
|
||||
ldy blkidx
|
||||
bne +
|
||||
!if always_trees = 0 {
|
||||
!if always_trees = 0 {
|
||||
lda istree
|
||||
beq +
|
||||
} ;always_trees
|
||||
} ;always_trees
|
||||
lda adrhi
|
||||
pha
|
||||
lda adrlo
|
||||
@ -1177,7 +1238,8 @@ resparse
|
||||
dec sizehi
|
||||
bne rdwrloop
|
||||
|
||||
unrdrvoff3 = unrelocdsk + (* - reloc)
|
||||
rdwrdonedrv
|
||||
unrdrvoff4 = unrelocdsk + (* - reloc)
|
||||
lda MOTOROFF
|
||||
!if aligned_read = 0 {
|
||||
bcc +
|
||||
@ -1405,7 +1467,6 @@ readdirsel
|
||||
pha
|
||||
phx
|
||||
} ;ver_02
|
||||
;;; jsr poll
|
||||
|
||||
unrdrvon4 = unrelocdsk + (* - reloc)
|
||||
lda MOTORON
|
||||
@ -1517,7 +1578,7 @@ cmpsecrd jsr readadr
|
||||
|
||||
jsr readd5aa
|
||||
eor #$ad ;zero A if match
|
||||
;; bne * ;lock if read failure
|
||||
bne cmdsecrd
|
||||
unrread4 = unrelocdsk + (* - reloc)
|
||||
- ldx Q6L
|
||||
bpl -
|
||||
@ -1577,8 +1638,9 @@ cmpsecwr jsr readadr
|
||||
|
||||
;skip tail #$DE #$AA #$EB some #$FFs ...
|
||||
|
||||
ldy #$24
|
||||
- dey
|
||||
ldy #6
|
||||
- jsr readnib
|
||||
dey
|
||||
bpl -
|
||||
|
||||
;write sector data
|
||||
@ -1590,12 +1652,17 @@ unrslot1 = unrelocdsk + (* - reloc)
|
||||
tya
|
||||
sta Q7H, x
|
||||
ora Q6L, x
|
||||
pha ;3 cycles
|
||||
pla ;4 cycles
|
||||
nop ;2 cycles
|
||||
|
||||
;40 cycles
|
||||
|
||||
ldy #4 ;2 cycles
|
||||
cmp $ea ;3 cycles
|
||||
cmp ($ea, x) ;6 cycles
|
||||
pha ;3 cycles
|
||||
pla ;4 cycles
|
||||
nop ;2 cycles
|
||||
loopchk1
|
||||
- jsr writenib1 ;(29 cycles)
|
||||
|
||||
;+6 cycles
|
||||
@ -1606,8 +1673,15 @@ unrslot1 = unrelocdsk + (* - reloc)
|
||||
;+10 cycles
|
||||
ldy #(prolog_e - prolog)
|
||||
;2 cycles
|
||||
!if >loopchk1 != >* {
|
||||
!serious "loop1 crosses a page"
|
||||
}
|
||||
cmp $ea ;3 cycles
|
||||
loopchk2
|
||||
- lda prolog - 1, y ;4 cycles
|
||||
!if >(prolog - 1) != >prolog_e {
|
||||
!serious "prologue crosses a page"
|
||||
}
|
||||
jsr writenib2 ;(17 cycles)
|
||||
|
||||
;32 cycles if branch taken
|
||||
@ -1618,7 +1692,11 @@ unrslot1 = unrelocdsk + (* - reloc)
|
||||
;36 cycles on first pass
|
||||
;+10 cycles
|
||||
tya ;2 cycles
|
||||
!if >loopchk2 != >* {
|
||||
!serious "loop2 crosses a page"
|
||||
}
|
||||
ldy #$56 ;2 cycles
|
||||
loopchk3
|
||||
- eor bit2tbl - 1, y ;5 cycles
|
||||
tax ;2 cycles
|
||||
lda xlattbl, x ;4 cycles
|
||||
@ -1636,7 +1714,12 @@ unrslot2 = unrelocdsk + (* - reloc)
|
||||
;32 cycles
|
||||
;+9 cycles
|
||||
clc ;2 cycles
|
||||
!if >loopchk3 != >* {
|
||||
!serious "loop3 crosses a page"
|
||||
}
|
||||
loopchk4
|
||||
-- eor encbuf, y ;4 cycles
|
||||
loopchk5
|
||||
- tax ;2 cycles
|
||||
lda xlattbl, x ;4 cycles
|
||||
unrslot3 = unrelocdsk + (* - reloc)
|
||||
@ -1648,20 +1731,36 @@ unrslot3 = unrelocdsk + (* - reloc)
|
||||
;32 cycles if branch taken
|
||||
|
||||
lda encbuf, y ;4 cycles
|
||||
loopchk6 ;belongs to the "bcs +" above
|
||||
iny ;2 cycles
|
||||
bne -- ;3 cycles if taken, 2 if not
|
||||
|
||||
;32 cycles
|
||||
;+10 cycles
|
||||
sec ;2 cycles
|
||||
!if >loopchk4 != >* {
|
||||
!serious "loop4 crosses a page"
|
||||
}
|
||||
bcs - ;3 cycles
|
||||
|
||||
;32 cycles
|
||||
;+3 cycles
|
||||
!if >loopchk6 != >* {
|
||||
!serious "loop6 crosses a page"
|
||||
}
|
||||
+ ldy #(epilog_e - epilog)
|
||||
;2 cycles
|
||||
cmp ($ea, x) ;6 cycles
|
||||
!if >loopchk5 != >* {
|
||||
!serious "loop5 crosses a page"
|
||||
}
|
||||
nop ;2 cycles
|
||||
nop ;2 cycles
|
||||
nop ;2 cycles
|
||||
loopchk7
|
||||
- lda epilog - 1, y ;4 cycles
|
||||
!if >(epilog - 1) != >epilog_e {
|
||||
!serious "epilogue crosses a page"
|
||||
}
|
||||
jsr writenib2 ;(17 cycles)
|
||||
|
||||
;32 cycles if branch taken
|
||||
@ -1670,6 +1769,9 @@ unrslot3 = unrelocdsk + (* - reloc)
|
||||
bne - ;3 cycles if branch taken, 2 if not
|
||||
|
||||
lda Q7L, x
|
||||
!if >loopchk7 != >* {
|
||||
!serious "loop7 crosses a page"
|
||||
}
|
||||
lda Q6L, x ;flush final value
|
||||
inc adrhi
|
||||
rts
|
||||
@ -1688,8 +1790,8 @@ epilog !byte $ff, $eb, $aa, $de
|
||||
epilog_e
|
||||
} ;enable_write
|
||||
codeend
|
||||
trackd1 !byte 0
|
||||
trackd2 !byte 0
|
||||
trackd1 !byte 0
|
||||
trackd2 !byte 0
|
||||
|
||||
bit2tbl = (* + 255) & -256
|
||||
nibtbl = bit2tbl + 86
|
||||
@ -1885,9 +1987,9 @@ seek1 sta blkidx
|
||||
lda #1
|
||||
sta sizehi
|
||||
} else { ;rwts_mode
|
||||
!if (override_adr + allow_subdir) > 0 {
|
||||
!if (enable_readseq + allow_subdir) > 0 {
|
||||
hddrdwrpart jmp hddrdwrfile
|
||||
} ;override_adr or allow_subdir
|
||||
} ;enable_readseq or allow_subdir
|
||||
hddopendir
|
||||
!if no_interrupts = 1 {
|
||||
!if detect_err = 1 {
|
||||
@ -1925,7 +2027,7 @@ unrhddblockhi = unrelochdd + (* - reloc)
|
||||
hddreaddir ;note that calling this location directly limits subdirectories to 14 entries!
|
||||
lda #NAME_LENGTH + ENTRY_SIZE
|
||||
hddfirstent sta bloklo
|
||||
bufferpatch1
|
||||
dirbufpatch1
|
||||
lda #>(hdddirbuf - 1)
|
||||
sta blokhi
|
||||
|
||||
@ -2000,9 +2102,9 @@ hddnextent ldy #0
|
||||
|
||||
;read next directory block when we reach the end of this block
|
||||
|
||||
bufferpatch2
|
||||
dirbufpatch2
|
||||
ldx hdddirbuf + NEXT_BLOCK_LO
|
||||
bufferpatch3
|
||||
dirbufpatch3
|
||||
lda hdddirbuf + NEXT_BLOCK_HI
|
||||
jsr hddreaddirsec
|
||||
lda #NAME_LENGTH
|
||||
@ -2091,13 +2193,11 @@ hddfoundname iny
|
||||
|
||||
!if override_adr = 0 {
|
||||
ldy #AUX_TYPE
|
||||
overridepatch1
|
||||
lda (bloklo), y
|
||||
!if (allow_subdir + allow_saplings + allow_trees + (aligned_read xor 1)) > 0 {
|
||||
sta ldrlo
|
||||
sta ldrlo2
|
||||
iny
|
||||
overridepatch2
|
||||
lda (bloklo), y
|
||||
sta ldrhi
|
||||
sta ldrhi2
|
||||
@ -2115,14 +2215,14 @@ overridepatch2
|
||||
lda (bloklo), y
|
||||
tax
|
||||
!if (allow_subdir + allow_saplings + allow_trees) > 0 {
|
||||
bufferpatch4
|
||||
dirbufpatch4
|
||||
sta hdddirbuf
|
||||
!if (allow_trees + (fast_trees xor 1)) > 1 {
|
||||
sta treeblklo
|
||||
} ;allow_trees = 1 and fast_trees = 0
|
||||
iny
|
||||
lda (bloklo), y
|
||||
bufferpatch5
|
||||
dirbufpatch5
|
||||
sta hdddirbuf + 256
|
||||
!if (allow_trees + (fast_trees xor 1)) > 1 {
|
||||
sta treeblkhi
|
||||
@ -2183,7 +2283,7 @@ hddrdwrfile
|
||||
|
||||
hddrdwrfilei
|
||||
!if rwts_mode = 0 {
|
||||
!if (allow_subdir + allow_saplings + allow_trees + (aligned_read xor 1)) > 0 {
|
||||
!if (override_adr + allow_subdir + allow_saplings + allow_trees + (aligned_read xor 1)) > 0 {
|
||||
;restore load offset
|
||||
|
||||
ldx ldrhi
|
||||
@ -2194,7 +2294,7 @@ hddrdwrfilei
|
||||
bcc +
|
||||
ldy #2
|
||||
sty sizehi
|
||||
bufferpatch6
|
||||
dirbufpatch6
|
||||
ldx #>hdddirbuf
|
||||
lda #0
|
||||
!if aligned_read = 0 {
|
||||
@ -2204,12 +2304,12 @@ bufferpatch6
|
||||
} ;allow_subdir
|
||||
sta adrlo
|
||||
stx adrhi
|
||||
} else { ;allow_subdir = 0 and allow_saplings = 0 and allow_trees = 0 and aligned_read = 1
|
||||
} else { ;override_adr = 0 and allow_subdir = 0 and allow_saplings = 0 and allow_trees = 0 and aligned_read = 1
|
||||
pla
|
||||
sta adrhi
|
||||
pla
|
||||
sta adrlo
|
||||
} ;allow_subdir or allow_saplings or allow_trees
|
||||
} ;override_adr or allow_subdir or allow_saplings or allow_trees and not aligned_read
|
||||
|
||||
;set requested size to min(length, requested size)
|
||||
|
||||
@ -2240,7 +2340,7 @@ hddcopyblock
|
||||
|
||||
lda blkofflo
|
||||
tax
|
||||
ora blkofflo
|
||||
ora blkoffhi
|
||||
beq hddrdwrloop
|
||||
lda sizehi
|
||||
pha
|
||||
@ -2251,6 +2351,7 @@ hddcopyblock
|
||||
lda adrlo
|
||||
sta bloklo
|
||||
stx adrlo
|
||||
encbufpatch1
|
||||
lda #>hddencbuf
|
||||
clc
|
||||
adc blkoffhi
|
||||
@ -2340,6 +2441,7 @@ hddrdwrloop
|
||||
lda #2
|
||||
sta sizehi
|
||||
} ;rwts_mode
|
||||
encbufpatch2
|
||||
lda #>hddencbuf
|
||||
sta adrhi
|
||||
!if ver_02 = 1 {
|
||||
@ -2364,12 +2466,12 @@ hddrdwrloop
|
||||
!if rwts_mode = 0 {
|
||||
ldy blkidx
|
||||
bne +
|
||||
!if always_trees = 0 {
|
||||
!if always_trees = 0 {
|
||||
lda istree
|
||||
beq +
|
||||
} ;always_trees
|
||||
} else { ;rwts_mode = 1
|
||||
ldy istree
|
||||
ldy #>hddtreebuf
|
||||
} ;rwts_mode
|
||||
lda adrhi
|
||||
pha
|
||||
@ -2486,9 +2588,9 @@ skiptree
|
||||
sty lastblk
|
||||
} ;rwts_mode
|
||||
|
||||
bufferpatch7
|
||||
dirbufpatch7
|
||||
ldx hdddirbuf, y
|
||||
bufferpatch8
|
||||
dirbufpatch8
|
||||
lda hdddirbuf + 256, y
|
||||
!if detect_treof = 1 {
|
||||
bne noteof2
|
||||
@ -2502,7 +2604,7 @@ noteof2
|
||||
} ;detect_treof
|
||||
!if allow_sparse = 1 {
|
||||
pha
|
||||
bufferpatch9
|
||||
dirbufpatch9
|
||||
ora hdddirbuf, y
|
||||
tay
|
||||
pla
|
||||
@ -2546,7 +2648,7 @@ hddresparse
|
||||
dec sizehi
|
||||
bne hddrdwrloop
|
||||
!if aligned_read = 0 {
|
||||
!if bounds_check = 0 {
|
||||
!if bounds_check = 1 {
|
||||
bcc +
|
||||
} ;bounds_check
|
||||
lda sizelo
|
||||
@ -2649,7 +2751,7 @@ hddcopycache
|
||||
sta blkoffhi
|
||||
bcc hddrdwrdone ;always
|
||||
} else { ;rwts_mode = 1
|
||||
rts
|
||||
hddrdwrdone rts
|
||||
} ;rwts_mode
|
||||
} ;aligned_read
|
||||
|
||||
@ -2674,12 +2776,13 @@ hddreaddirsel
|
||||
|
||||
hddreaddirsec
|
||||
!if allow_trees = 0 {
|
||||
bufferpatch10
|
||||
dirbufpatch10
|
||||
hddreaddirsect ldy #>hdddirbuf
|
||||
} else { ;allow_trees = 1
|
||||
ldy #>hdddirbuf
|
||||
hddreaddirsect
|
||||
} ;allow_trees
|
||||
unrhddrd = unrelochdd + (* - reloc)
|
||||
sty adrhi
|
||||
hddseekrd ldy #cmdread
|
||||
!if (aligned_read + enable_write) > 1 {
|
||||
@ -2692,12 +2795,35 @@ hddseekrdwr
|
||||
stx bloklo
|
||||
sta blokhi
|
||||
|
||||
unrunit=unrelochdd+(*-reloc)
|
||||
unrunit1 = unrelochdd + (* - reloc)
|
||||
lda #$d1
|
||||
sta unit
|
||||
unrentry=unrelochdd+(*-reloc)
|
||||
unrentry2 = unrelochdd + (* - reloc)
|
||||
jmp $d1d1
|
||||
|
||||
!if allow_extend = 1 {
|
||||
ldx #4
|
||||
- lda command + 1, x
|
||||
sta packet + 1, x
|
||||
dex
|
||||
bne -
|
||||
lda command
|
||||
sta pcommand
|
||||
|
||||
unrentry3 = unrelochdd + (* - reloc)
|
||||
jsr $d1d1
|
||||
pcommand !byte 0
|
||||
!word packet
|
||||
rts
|
||||
|
||||
unrpacket = unrelochdd + (* - reloc)
|
||||
packet !byte 3
|
||||
unrunit2 = unrelochdd + (* - reloc)
|
||||
!byte 0
|
||||
!word readbuff + $200
|
||||
!word 2
|
||||
} ;allow_extend
|
||||
|
||||
!if rwts_mode = 1 {
|
||||
vollist_b
|
||||
!byte D1S1
|
||||
@ -2733,7 +2859,7 @@ hdddataend
|
||||
!pseudopc ((dataend + $ff) & -256) {
|
||||
dirbuf = *
|
||||
}
|
||||
encbuf=dirbuf + $200
|
||||
encbuf = dirbuf + $200
|
||||
!if allow_trees = 1 {
|
||||
treebuf = encbuf + $200
|
||||
} ;allow_trees
|
||||
@ -2801,7 +2927,7 @@ hdddataend
|
||||
}
|
||||
!if aligned_read = 0 {
|
||||
hddencbuf = hdddirbuf + $200
|
||||
!if hddencbuf >= $c000 {
|
||||
!if (hddencbuf + $200) > $c000 {
|
||||
!if hddencbuf < $d000 {
|
||||
!set hddencbuf = reloc - $200
|
||||
}
|
||||
@ -2813,10 +2939,20 @@ hdddataend
|
||||
!if hddtreebuf >= reloc {
|
||||
!if hddencbuf < hddcodeend {
|
||||
!set hddtreebuf = hddencbuf - $200
|
||||
!if (hddtreebuf + $200) > $c000 {
|
||||
!if hddtreebuf < $d000 {
|
||||
!set hddtreebuf = reloc - $200
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else { ;aligned_read = 1
|
||||
hddtreebuf = hdddirbuf + $200
|
||||
!if (hddtreebuf + $200) > $c000 {
|
||||
!if hddtreebuf < $d000 {
|
||||
!set hddtreebuf = reloc - $200
|
||||
}
|
||||
}
|
||||
} ;aligned_read
|
||||
} ;allow_trees
|
||||
} ;load_high
|
||||
|
@ -38,6 +38,7 @@ if "%1" equ "asm" (
|
||||
%ACME% src\fx\fx.hgr.block.fizzle.a
|
||||
%ACME% src\fx\fx.hgr.block.mosaic.a
|
||||
%ACME% src\fx\fx.hgr.2pass.lr.a
|
||||
%ACME% src\fx\fx.hgr.crystal.a
|
||||
goto :EOF
|
||||
)
|
||||
|
||||
@ -53,15 +54,11 @@ call :asm
|
||||
2>nul del build\log
|
||||
%CADIUS% CREATEVOLUME "build\%DISK%" "%VOLUME%" 32766KB >>build\log
|
||||
1>nul copy /y res\_FileInformation.txt build\ >>build\log
|
||||
cscript /nologo bin/buildproboot.js "build\%DISK%"
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\PRODOS" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "build\LAUNCHER.SYSTEM" >>build\log
|
||||
%CADIUS% CREATEFOLDER "build\%DISK%" "/%VOLUME%/X/" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\GAMES.CONF" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\ATTRACT.CONF" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\FX.CONF" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\COVER" >>build\log
|
||||
%CADIUS% ADDFILE "build\%DISK%" "/%VOLUME%/" "res\COVER.A2FC" >>build\log
|
||||
1>nul copy /y res\hgr\* build\HGR >>build\log
|
||||
cscript /nologo bin/buildfileinfo.js build\HGR >>build\log
|
||||
%CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/HGR" "build/HGR" >>build/log
|
||||
@ -75,6 +72,8 @@ cscript /nologo bin/buildfileinfo.js build\DHGR >>build\log
|
||||
1>nul copy /y res\fx\* build\FX >>build\log
|
||||
%CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/FX" "build/FX" >>build\log
|
||||
cscript /nologo bin/do2po.js res\dsk\ build\po\
|
||||
%CADIUS% ADDFOLDER "build\%DISK%" "/%VOLUME%/X" "build/X" >>build\log
|
||||
cscript /nologo bin/changebootloader.js "build\%DISK%" res\proboothd
|
||||
goto :EOF
|
||||
)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user