added entry for sector read emulation for RAM disk

This commit is contained in:
FeralChild64 committed 2021-08-16 20:05:09 +02:00
1 parent 1190a3faed
commit 9b57b0c656
8 files changed
+48 -29

No files matched your search

@@ -115,7 +115,7 @@ fs_cbm_nextdirentry:
@get_sector_common:
jsr lowlevel_readsector ; XXX handle read errors
jsr lowlevel_xx_readsector ; XXX handle read errors
; Set new FD_DIRENT
@@ -52,7 +52,7 @@ fs_cbm_nextfileblock_got_ts:
; Load next track/sector
jsr lowlevel_readsector ; XXX handle read errors
jsr lowlevel_xx_readsector ; XXX handle read errors
; Store pointer and amount of data ready to fetch
+2 -2
View File
@@ -13,7 +13,7 @@ fs_cbm_read_dir_open:
lda #$00
sta PAR_SECTOR
jsr lowlevel_readsector ; XXX handle read errors
jsr lowlevel_xx_readsector ; XXX handle read errors
; Create the first directory listing entry (title, id)
@@ -78,7 +78,7 @@ fs_cbm_read_dir_open:
lda #$02
sta PAR_SECTOR
jsr lowlevel_readsector ; XXX handle read errors
jsr lowlevel_xx_readsector ; XXX handle read errors
; Copy 2nd BAM sector to the cache
@@ -13,7 +13,7 @@ fs_cbm_read_file_open:
lda #$03
sta PAR_SECTOR
jsr lowlevel_readsector ; XXX handle read errors
jsr lowlevel_xx_readsector ; XXX handle read errors
; Set variables to point to the 1st directory entry in the 2nd sector of the buffer
@@ -2,23 +2,23 @@
; Helper routines for low-level disk operations
lowlevel_fdc_ensure_presence_refresh:
lowlevel_fd_ensure_presence_refresh:
jsr lowlevel_fdc_wait_clr_BUSY ; to be extra sure
jsr lowlevel_fd_wait_clr_BUSY ; to be extra sure
; XXX stepping head is definitely needed, but probably still not enough
; lda #%00011000 ; step head 1 track in (XXX: check if it is really in)
; sta FDC_COMMAND ; $D081
; jsr lowlevel_fdc_wait_clr_BUSY
; jsr lowlevel_fd_wait_clr_BUSY
; lda #%00010000 ; step head 1 track out (XXX: check if it is really out)
; sta FDC_COMMAND ; $D081
; jsr lowlevel_fdc_wait_clr_BUSY
; jsr lowlevel_fd_wait_clr_BUSY
; FALLTROUGH
lowlevel_fdc_ensure_presence:
lowlevel_fd_ensure_presence:
lda FDC_STATUS_B ; $D083 ; check if disk is inserted
and #$08
@@ -30,18 +30,18 @@ lowlevel_fdc_ensure_presence:
pla
pla
jsr lowlevel_fdc_motor_off ; if disk not present, disable drive motor
jsr lowlevel_fd_motor_off ; if disk not present, disable drive motor
; XXX set error code, invalidate buffers, etc.
sec
rts
lowlevel_fdc_motor_on:
lowlevel_fd_motor_on:
lda FDC_CONTROL
and #%00100000
bne lowlevel_fdc_rts ; if motor already enabled, do nothing
bne lowlevel_fd_rts ; if motor already enabled, do nothing
; XXX find out why it is not disabled at all
; lda #%00100000 ; enable drive motor and LED
@@ -56,29 +56,29 @@ lowlevel_fdc_motor_on:
; jsr wait_x_bars
; plx
bra lowlevel_fdc_wait_clr_BUSY
bra lowlevel_fd_wait_clr_BUSY
lowlevel_fdc_motor_off:
lowlevel_fd_motor_off:
lda #%00100000 ; disable drive motor and LED
trb FDC_CONTROL ; $D080
; FALLTROUGH
lowlevel_fdc_wait_clr_BUSY:
lowlevel_fd_wait_clr_BUSY:
bit FDC_STATUS_A ; $D082
bmi lowlevel_fdc_wait_clr_BUSY
bmi lowlevel_fd_wait_clr_BUSY
rts
lowlevel_fdc_wait_set_RDREQ:
lowlevel_fd_wait_set_RDREQ:
bit FDC_STATUS_B ; $D083
bpl lowlevel_fdc_wait_set_RDREQ
bpl lowlevel_fd_wait_set_RDREQ
; FALLTROUGH
lowlevel_fdc_rts:
lowlevel_fd_rts:
rts
@@ -2,17 +2,29 @@
; Read a sector pair from a block device
; XXX utilize PAR_FSINSTANCE
lowlevel_xx_readsector:
ldx PAR_FSINSTANCE
+beq lowlevel_rd_readsector
lowlevel_readsector:
; FALLTROUGH
; Set drive, ensure disk is present
lowlevel_fd_readsector:
; Set drive
lda #%00001111 ; set drive 0 (internal) and side 0
trb FDC_CONTROL ; $D080
jsr lowlevel_fdc_ensure_presence_refresh
cpx #$01
beq @1
lda #%00000001 ; if needed, switch to drive 1 (external)
tsb FDC_CONTROL
@1:
; Ensure disk is present
jsr lowlevel_fd_ensure_presence_refresh
; Check if buffer contains data from given track
; XXX compare device and unit too
@@ -35,8 +47,8 @@ lowlevel_readsector:
lowlevel_readsector_force:
jsr lowlevel_fdc_motor_on ; enable drive motor and LED
jsr lowlevel_fdc_ensure_presence
jsr lowlevel_fd_motor_on ; enable drive motor and LED
jsr lowlevel_fd_ensure_presence
lda #%10000000 ; select floppy buffer
trb SD_BUFCTL ; $D689
@@ -77,8 +89,8 @@ lowlevel_readsector_force:
lda #$40
sta FDC_COMMAND ; $D081
jsr lowlevel_fdc_wait_set_RDREQ ; wait till sector is found
jsr lowlevel_fdc_wait_clr_BUSY ; wait for BUSY flag to clear
jsr lowlevel_fd_wait_set_RDREQ ; wait till sector is found
jsr lowlevel_fd_wait_clr_BUSY ; wait for BUSY flag to clear
; Wait for DRQ and EQ flags to go high
@@ -0,0 +1,7 @@
; Read a sector pair from a RAM disk
lowlevel_rd_readsector:
; XXX provide implementation
+1 -1
View File
@@ -8,6 +8,6 @@ disk_fd_cmd_CLOSE:
; XXX provide implementation
jsr lowlevel_fdc_motor_off ; disable drive motor XXX only do this if no channel is opened
jsr lowlevel_fd_motor_off ; disable drive motor XXX only do this if no channel is opened
jmp dos_EXIT_SEC