added entry for sector read emulation for RAM disk
This commit is contained in:
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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+15
-15
@@ -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
|
||||
+20
-8
@@ -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
|
||||
@@ -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
|
||||
Reference in new issue
Block a user