diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index bbdd8785..7268677e 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -135,7 +135,7 @@ ; 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_1 = $9400 + !addr SHARED_BUF_1 = $9400 ; XXX temporarily hardcoded for usage by floppy !addr SHARED_BUF_2 = $9600 !addr SHARED_BUF_3 = $9800 !addr SHARED_BUF_4 = $9A00 diff --git a/src/dos_m65/dev_floppy/dev_fd_cmd_open.s b/src/dos_m65/dev_floppy/dev_fd_cmd_open.s index 38a14f9d..72794ff7 100644 --- a/src/dos_m65/dev_floppy/dev_fd_cmd_open.s +++ b/src/dos_m65/dev_floppy/dev_fd_cmd_open.s @@ -57,6 +57,10 @@ dev_fd_cmd_OPEN_dir: @lp1_end: + jmp fs_1581_read_dir_open + + + ; XXX experimental code below ; Try to read track 40, sector 0 (disk header) diff --git a/src/dos_m65/dev_floppy/dev_fd_util_readsector.s b/src/dos_m65/dev_floppy/dev_fd_util_readsector.s index a06f494c..72509372 100644 --- a/src/dos_m65/dev_floppy/dev_fd_util_readsector.s +++ b/src/dos_m65/dev_floppy/dev_fd_util_readsector.s @@ -2,26 +2,21 @@ ; Read a single sector from a floppy drive -; XXX utilize this - dev_fd_util_readsector: ; Select FDD sector as buffer lda #%10000000 ; select floppy buffer - trb SD_BUFCTL + trb SD_BUFCTL ; $D689 - lda #%00000111 - trb FDC_CONTROL ; set drive 0 (internal) XXX support multiple drives - - lda #%00001000 - trb FDC_CONTROL ; set side 0 by default + lda #%00001111 ; set drive 0 (internal) and side 0 + trb FDC_CONTROL ; $D080 ; Select physical track and sector based on logical ones from PAR_TRACK and PAR_SECTOR lda PAR_TRACK dec - sta FDC_TRACK + sta FDC_TRACK ; $D084 lda PAR_SECTOR cmp #20 @@ -29,8 +24,8 @@ dev_fd_util_readsector: @side1: - lda #%00001000 - tsb FDC_CONTROL ; set side 1 + lda #%00001000 ; set side 1 + tsb FDC_CONTROL ; $D080 lda PAR_SECTOR sec @@ -42,21 +37,48 @@ dev_fd_util_readsector: @side0: ldx #$00 - stx FDC_SIDE + stx FDC_SIDE ; $D086 clc 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 - sta FDC_COMMAND -@lp: - lda FDC_STATUS_B ; XXX detect errors here XXX waiting is probably not corrent - bpl @lp + sta FDC_COMMAND ; $D081 + + ; Wait for RDREQ (indicates sector found) + +@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 - ; 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 diff --git a/src/dos_m65/dev_floppy/fs_1581_read_dir.s b/src/dos_m65/dev_floppy/fs_1581_read_dir.s new file mode 100644 index 00000000..21ee8306 --- /dev/null +++ b/src/dos_m65/dev_floppy/fs_1581_read_dir.s @@ -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 diff --git a/src/dos_m65/dev_floppy/fs_1581_read_file.s b/src/dos_m65/dev_floppy/fs_1581_read_file.s new file mode 100644 index 00000000..0a3cdaf5 --- /dev/null +++ b/src/dos_m65/dev_floppy/fs_1581_read_file.s @@ -0,0 +1,8 @@ + +; +; Hypervisor virtual filesystem - reading the file +; + + +fs_1581_read_file_open: + diff --git a/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s b/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s index b7bc2daf..cddb95fb 100644 --- a/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s +++ b/src/dos_m65/dev_sdcard/fs_hvsr_read_file.s @@ -1,6 +1,6 @@ ; -; Hypervisor virtual filesystem - opening the file +; Hypervisor virtual filesystem - reading the file ;