MicroDrive support

This commit is contained in:
Peter Ferrie 2019-10-10 22:50:32 -07:00
parent 2dcb7df162
commit 93eed754f6
3 changed files with 275 additions and 86 deletions

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -277,21 +276,77 @@ ifoundname dex
++ lda sizelo
bne readblock
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -330,8 +385,6 @@ yyy
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1554,22 +1607,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
casemap
ora #$80
@ -1734,7 +1797,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $900, y
@ -1792,11 +1855,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1825,7 +1888,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -277,21 +276,77 @@ ifoundname dex
++ lda sizelo
bne readblock
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -319,8 +374,6 @@ set_slot sta slot + 2
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1560,22 +1613,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
hddcodeend
!if swap_zp = 1 {
@ -1746,7 +1809,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $a00, y
@ -1804,11 +1867,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1837,7 +1900,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree

View File

@ -1,6 +1,6 @@
;license:BSD-3-Clause
;extended open/read/write binary file in ProDOS filesystem, with random access
;copyright (c) Peter Ferrie 2013-18
;copyright (c) Peter Ferrie 2013-19
ver_02 = 1
@ -180,7 +180,6 @@ tmp = $8
init lda DEVNUM
sta x80_parms + 1
sta unrunit
and #$70
pha
ldx #1
@ -277,21 +276,77 @@ ifoundname dex
++ lda sizelo
bne readblock
;unit to slot for SmartPort interface
;unit to slot for ProDOS interface
+++ pla
lsr
lsr
lsr
tax
lsr
ora #$c0
ldy DEVADR01HI, x
cpy #$c8
bcs set_slot
tya
set_slot sta slot + 2
sta unrentry + 1
tay
ldx DEVADR01HI, y
cpx #$c8
bcc set_slot
;find SmartPort device for basic MicroDrive support
ldx #$c8
- dex
stx blokhi
ldy #0
sty bloklo
iny
lda (bloklo), y
cmp #$20
bne -
iny
iny
lda (bloklo), y
bne -
iny
iny
lda (bloklo), y
cmp #3
bne -
ldy #$ff
lda (bloklo), y
beq -
set_slot stx slot + 2
stx unrentry1 + 2
stx unrentry3 + 2
slot ldx $cfff
;use SmartPort entrypoint instead
inx
inx
inx
stx unrentry1 + 1
stx unrentry3 + 1
ldx #2
stx x80_parms + 4
lda #0
sta x80_parms + 5
jsr MLI
!byte $80
!word x80_parms
iterunit inc unrunit2
unrentry1 jsr $d1d1
!byte cmdread
!word unrpacket
bcs iterunit
ldy #$0f
- lda readbuff + 4, y
cmp readbuff + $204, y
bne iterunit
dey
bpl -
!if load_aux = 1 {
sta SETAUXWR + (load_banked * 4) ;SETAUXWR or SETAUXZP
} ;load_aux
@ -319,8 +374,6 @@ set_slot sta slot + 2
;copy new RWTS and interpreter support routines
slot lda $cfff
sta unrentry
ldy #0
- lda unrelochdd, y
sta reloc, y
@ -1560,22 +1613,32 @@ hddreaddirsect
sty adrhi
hddseekrd ldy #cmdread
!if (aligned_read + enable_write) > 1 {
hddseekrdwr sty command
hddseekrdwr sty pcommand
} else { ;not (aligned_read or enable_write)
sty command
sty pcommand
hddseekrdwr
} ;aligned_read and enable_write
stx bloklo
sta blokhi
stx pblock
sta pblock + 1
hddcallsp
unrunit = unrelochdd + (* + 1 - reloc)
lda #$d1
sta unit
lda adrhi
sta paddr + 1
lda adrlo
sta paddr
unrentry3 = unrelochdd + (* - reloc)
jsr $d1d1
pcommand !byte 0
!word packet
rts
unrentry = unrelochdd + (* + 1 - reloc)
jmp $d1d1
unrpacket = unrelochdd + (* - reloc)
packet !byte 3
unrunit2 = unrelochdd + (* - reloc)
!byte 0
paddr !word readbuff + $200
pblock !byte 2, 0, 0
hddcodeend
!if swap_zp = 1 {
@ -1746,7 +1809,7 @@ hddsavetreehi = * + 1
lda hdddirbuf, y
ora hdddirbuf + 256, y
beq sparseblk
inc command
inc pcommand
copyblock ldy #0
- lda $a00, y
@ -1804,11 +1867,11 @@ sparseblk ldx #2
lda adrhi
cmp #(>hddencbuf) + 2
bne --
ldx bloklo
ldx pblock
inx
bne +
inc blokhi
+ lda blokhi
inc pblock + 1
+ lda pblock + 1
dec ldrhi
bne ---
@ -1837,7 +1900,7 @@ foundbit lda (adrlo), y
jmp copyblock
writeimm sta adrhi
inc command
inc pcommand
jmp hddcallsp
readpart lda istree
@ -1859,11 +1922,11 @@ readpart lda istree
sta istree
ldy lastblk
rts
}
-}
save_end
hookkbd
!pseudopc $2b5 {;;-(callback_e-callback1) {
!pseudopc $2a7 {;;-(callback_e-callback1) {
callback1
ldx #<callback2
lda #$8d