a bit smaller, a lot faster

This commit is contained in:
Peter Ferrie 2016-05-31 13:40:11 -07:00
parent dd8ea7f117
commit 470f30b6ef

View File

@ -47,7 +47,9 @@
} }
sizelo = $f5 ;must set if writing sizelo = $f5 ;must set if writing
sizehi = $f6 ;must set if writing sizehi = $f6 ;must set if writing
!if might_exist=1 {
entries = $f7 ;total number of entries entries = $f7 ;total number of entries
}
reqcmd = $f8 ;used if enable_write=1, 1=read, 2=write reqcmd = $f8 ;used if enable_write=1, 1=read, 2=write
ldrlo = $f9 ;used if override_adr=1 ldrlo = $f9 ;used if override_adr=1
ldrhi = $fa ;used if override_adr=1 ldrhi = $fa ;used if override_adr=1
@ -272,12 +274,12 @@ minus03 lda (A1L), y
plp plp
bne plus07 bne plus07
ldx #3 ldx #3
minus04 stx $3c minus04 stx A1L
txa txa
asl asl
bit $3c bit A1L
beq plus06 beq plus06
ora $3c ora A1L
eor #$ff eor #$ff
and #$7e and #$7e
minus05 bcs plus06 minus05 bcs plus06
@ -335,10 +337,12 @@ unrblockhi=unrelocdsk+(*-reloc)
;include volume directory header in count ;include volume directory header in count
readdir ldx dirbuf+37 readdir
!if might_exist=1 {
ldx dirbuf+37
inx inx
stx entries stx entries
}
!if allow_subdir=1 { !if allow_subdir=1 {
ldy #0 ldy #0
} ;allow_subdir } ;allow_subdir
@ -543,14 +547,14 @@ plus15
;restore load offset ;restore load offset
plus16 plus16
!if override_adr=0 { !if override_adr=1 {
ldx ldrhi
lda ldrlo
} else { ;override_adr
pla pla
tax tax
pla pla
} else { ;override_adr } ;override_adr
ldx ldrhi
lda ldrlo
}
!if enable_write=1 { !if enable_write=1 {
ldy reqcmd ldy reqcmd
} ;enable_write } ;enable_write
@ -656,12 +660,16 @@ plus19 sty secsize
;if track does not match, then seek ;if track does not match, then seek
lda curtrk ldx curtrk
cmp phase cpx phase
beq checksec beq checksec
jsr seek jsr seek
;[re-]read sector ;force sector mismatch
lda #$ff
;match or read sector
checksec jsr cmpsec checksec jsr cmpsec
@ -680,13 +688,14 @@ checksec jsr cmpsec
inc reqsec inc reqsec
inc reqsec inc reqsec
cmpsecrd jsr readadr
cmpsec cmpsec
!if enable_write=1 { !if enable_write=1 {
ldy command ldy command
dey dey
bne encsec bne encsec
} ;enable_write } ;enable_write
cmpsecrd jsr readadr
cmp reqsec cmp reqsec
bne cmpsecrd bne cmpsecrd
@ -727,20 +736,19 @@ readret rts
!if enable_write=1 { !if enable_write=1 {
encsec iny encsec iny
minus11 ldx #0 minus11 ldx #$aa
minus12 dey minus12 dey
lda (adrlo), y lda (adrlo), y
lsr lsr
rol bit2tbl, x rol bit2tbl-$aa, x
lsr lsr
rol bit2tbl, x rol bit2tbl-$aa, x
sta encbuf, y sta encbuf, y
lda bit2tbl, x lda bit2tbl-$aa, x
and #$3f and #$3f
sta bit2tbl, x sta bit2tbl-$aa, x
inx inx
cpx #$56 bne minus12
bcc minus12
tya tya
bne minus11 bne minus11
@ -784,11 +792,11 @@ unrlatch2=unrelocdsk+(*-reloc)
sta $c0ed sta $c0ed
unrread5=unrelocdsk+(*-reloc) unrread5=unrelocdsk+(*-reloc)
lda $c0ec lda $c0ec
asl phase ;7 cycles lsr phase ;7 cycles
lda bit2tbl-1, y lda bit2tbl-1, y
dey dey
bne minus16 bne minus16
minus17 asl phase ;7 cycles minus17 lsr phase ;7 cycles
eor encbuf, y eor encbuf, y
tax tax
lda xlattbl, x lda xlattbl, x
@ -865,6 +873,7 @@ seekret rts
seek sty step seek sty step
asl phase asl phase
txa
asl asl
copy_cur tax copy_cur tax
sta tmptrk sta tmptrk
@ -949,10 +958,12 @@ unrhddblockhi=unrelochdd+(*-reloc)
;include volume directory header in count ;include volume directory header in count
hddreaddir ldy dirbuf+37 hddreaddir
iny !if might_exist=1 {
sty entries ldx dirbuf+37
inx
stx entries
}
!if allow_subdir=1 { !if allow_subdir=1 {
lda #0 lda #0
} ;allow_subdir } ;allow_subdir
@ -1167,13 +1178,13 @@ plus34
;restore load offset ;restore load offset
plus35 plus35
!if override_adr=0 { !if override_adr=1 {
ldx ldrhi
lda ldrlo
} else { ;override_adr
pla pla
tax tax
pla pla
} else { ;override_adr
ldx ldrhi
lda ldrlo
} ;override_adr } ;override_adr
!if allow_subdir=1 { !if allow_subdir=1 {