more work towards floppy directory reading
This commit is contained in:
1 parent
3aa33f76ff
commit
27c36bb554
6 files changed
+79
-21
No files matched your search
@@ -135,7 +135,7 @@
|
|||||||
; General purpose buffers, 512 bytes each, each starts at page start - XXX dynamic alllocation to be written
|
; General purpose buffers, 512 bytes each, each starts at page start - XXX dynamic alllocation to be written
|
||||||
|
|
||||||
!addr SHARED_BUF_0 = $9200 ; XXX temporarily hardcoded for usage by SD card
|
!addr SHARED_BUF_0 = $9200 ; XXX temporarily hardcoded for usage by SD card
|
||||||
!addr SHARED_BUF_1 = $9400
|
!addr SHARED_BUF_1 = $9400 ; XXX temporarily hardcoded for usage by floppy
|
||||||
!addr SHARED_BUF_2 = $9600
|
!addr SHARED_BUF_2 = $9600
|
||||||
!addr SHARED_BUF_3 = $9800
|
!addr SHARED_BUF_3 = $9800
|
||||||
!addr SHARED_BUF_4 = $9A00
|
!addr SHARED_BUF_4 = $9A00
|
||||||
|
|||||||
@@ -57,6 +57,10 @@ dev_fd_cmd_OPEN_dir:
|
|||||||
|
|
||||||
@lp1_end:
|
@lp1_end:
|
||||||
|
|
||||||
|
jmp fs_1581_read_dir_open
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; XXX experimental code below
|
; XXX experimental code below
|
||||||
|
|
||||||
; Try to read track 40, sector 0 (disk header)
|
; Try to read track 40, sector 0 (disk header)
|
||||||
|
|||||||
@@ -2,26 +2,21 @@
|
|||||||
; Read a single sector from a floppy drive
|
; Read a single sector from a floppy drive
|
||||||
|
|
||||||
|
|
||||||
; XXX utilize this
|
|
||||||
|
|
||||||
dev_fd_util_readsector:
|
dev_fd_util_readsector:
|
||||||
|
|
||||||
; Select FDD sector as buffer
|
; Select FDD sector as buffer
|
||||||
|
|
||||||
lda #%10000000 ; select floppy buffer
|
lda #%10000000 ; select floppy buffer
|
||||||
trb SD_BUFCTL
|
trb SD_BUFCTL ; $D689
|
||||||
|
|
||||||
lda #%00000111
|
lda #%00001111 ; set drive 0 (internal) and side 0
|
||||||
trb FDC_CONTROL ; set drive 0 (internal) XXX support multiple drives
|
trb FDC_CONTROL ; $D080
|
||||||
|
|
||||||
lda #%00001000
|
|
||||||
trb FDC_CONTROL ; set side 0 by default
|
|
||||||
|
|
||||||
; Select physical track and sector based on logical ones from PAR_TRACK and PAR_SECTOR
|
; Select physical track and sector based on logical ones from PAR_TRACK and PAR_SECTOR
|
||||||
|
|
||||||
lda PAR_TRACK
|
lda PAR_TRACK
|
||||||
dec
|
dec
|
||||||
sta FDC_TRACK
|
sta FDC_TRACK ; $D084
|
||||||
|
|
||||||
lda PAR_SECTOR
|
lda PAR_SECTOR
|
||||||
cmp #20
|
cmp #20
|
||||||
@@ -29,8 +24,8 @@ dev_fd_util_readsector:
|
|||||||
|
|
||||||
@side1:
|
@side1:
|
||||||
|
|
||||||
lda #%00001000
|
lda #%00001000 ; set side 1
|
||||||
tsb FDC_CONTROL ; set side 1
|
tsb FDC_CONTROL ; $D080
|
||||||
|
|
||||||
lda PAR_SECTOR
|
lda PAR_SECTOR
|
||||||
sec
|
sec
|
||||||
@@ -42,21 +37,48 @@ dev_fd_util_readsector:
|
|||||||
@side0:
|
@side0:
|
||||||
|
|
||||||
ldx #$00
|
ldx #$00
|
||||||
stx FDC_SIDE
|
stx FDC_SIDE ; $D086
|
||||||
clc
|
clc
|
||||||
ror
|
ror
|
||||||
sta FDC_SECTOR
|
sta FDC_SECTOR ; $D085
|
||||||
|
|
||||||
; Ask the controller to read the sector
|
; Ask the controller to read the sector XXX how to detect errors, missing disk, etc.?
|
||||||
|
|
||||||
lda #$40
|
lda #$40
|
||||||
sta FDC_COMMAND
|
sta FDC_COMMAND ; $D081
|
||||||
@lp:
|
|
||||||
lda FDC_STATUS_B ; XXX detect errors here XXX waiting is probably not corrent
|
; Wait for RDREQ (indicates sector found)
|
||||||
bpl @lp
|
|
||||||
|
@lp1:
|
||||||
|
lda FDC_STATUS_B ; $D083
|
||||||
|
bpl @lp1
|
||||||
|
|
||||||
|
; Wait for BUSY flag to clear
|
||||||
|
|
||||||
|
@lp2:
|
||||||
|
lda FDC_STATUS_A ; $D082
|
||||||
|
bmi @lp2
|
||||||
|
|
||||||
|
; Wait for DRQ and EQ flags to go high
|
||||||
|
|
||||||
|
@lp3:
|
||||||
|
lda FDC_STATUS_A ; $D082
|
||||||
|
and #%01100000
|
||||||
|
cmp #%01100000 ; XXX is this correct? .A seems to stay at $40 at this point
|
||||||
|
bne @lp3
|
||||||
|
|
||||||
; Copy sector to buffer in RAM
|
; Copy sector to buffer in RAM
|
||||||
|
|
||||||
; XXX
|
lda #$00
|
||||||
|
sta DMAJOB_DST_MB
|
||||||
|
lda #<(SHARED_BUF_1 - $8000)
|
||||||
|
sta DMAJOB_DST_ADDR+0
|
||||||
|
lda #>(SHARED_BUF_1 - $8000)
|
||||||
|
sta DMAJOB_DST_ADDR+1
|
||||||
|
lda #$01
|
||||||
|
sta DMAJOB_DST_ADDR+2
|
||||||
|
|
||||||
|
jsr util_dma_launch_from_hwbuf ; execute DMA job
|
||||||
|
|
||||||
|
clc
|
||||||
rts
|
rts
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
;
|
||||||
|
; Hypervisor virtual filesystem - reading directory
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
fs_1581_read_dir_open:
|
||||||
|
|
||||||
|
; Try to read track 40, sector 0 (disk header)
|
||||||
|
|
||||||
|
lda #40
|
||||||
|
sta PAR_TRACK
|
||||||
|
lda #$00
|
||||||
|
sta PAR_SECTOR
|
||||||
|
|
||||||
|
jsr dev_fd_util_readsector ; XXX handle read errors
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; XXX continue implementation
|
||||||
|
|
||||||
|
jmp dos_EXIT_CLC
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
;
|
||||||
|
; Hypervisor virtual filesystem - reading the file
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
|
fs_1581_read_file_open:
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
;
|
;
|
||||||
; Hypervisor virtual filesystem - opening the file
|
; Hypervisor virtual filesystem - reading the file
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user