more work towards floppy directory reading

This commit is contained in:
FeralChild64 committed 2021-03-03 21:45:07 +01:00
1 parent 3aa33f76ff
commit 27c36bb554
6 files changed
+79 -21

No files matched your search

+1 -1
View File
@@ -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
+4
View File
@@ -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)
+41 -19
View File
@@ -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
+24
View File
@@ -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 -1
View File
@@ -1,6 +1,6 @@
; ;
; Hypervisor virtual filesystem - opening the file ; Hypervisor virtual filesystem - reading the file
; ;