diff --git a/src/dos_m65/filesystem_cbm/fs_cbm_nextdirentry.s b/src/dos_m65/filesystem_cbm/fs_cbm_nextdirentry.s index 47d02008..86bf9a26 100644 --- a/src/dos_m65/filesystem_cbm/fs_cbm_nextdirentry.s +++ b/src/dos_m65/filesystem_cbm/fs_cbm_nextdirentry.s @@ -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 diff --git a/src/dos_m65/filesystem_cbm/fs_cbm_nextfileblock.s b/src/dos_m65/filesystem_cbm/fs_cbm_nextfileblock.s index d45afb47..b0e3d79f 100644 --- a/src/dos_m65/filesystem_cbm/fs_cbm_nextfileblock.s +++ b/src/dos_m65/filesystem_cbm/fs_cbm_nextfileblock.s @@ -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 diff --git a/src/dos_m65/filesystem_cbm/fs_cbm_read_dir.s b/src/dos_m65/filesystem_cbm/fs_cbm_read_dir.s index 8a726854..d2316812 100644 --- a/src/dos_m65/filesystem_cbm/fs_cbm_read_dir.s +++ b/src/dos_m65/filesystem_cbm/fs_cbm_read_dir.s @@ -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 diff --git a/src/dos_m65/filesystem_cbm/fs_cbm_read_file.s b/src/dos_m65/filesystem_cbm/fs_cbm_read_file.s index 36951d18..43d4b6ec 100644 --- a/src/dos_m65/filesystem_cbm/fs_cbm_read_file.s +++ b/src/dos_m65/filesystem_cbm/fs_cbm_read_file.s @@ -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 diff --git a/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s b/src/dos_m65/lowlevel/lowlevel_fd_helpers.s similarity index 67% rename from src/dos_m65/lowlevel/lowlevel_helpers_fdc.s rename to src/dos_m65/lowlevel/lowlevel_fd_helpers.s index 1a5fff65..69af3fb5 100644 --- a/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s +++ b/src/dos_m65/lowlevel/lowlevel_fd_helpers.s @@ -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 diff --git a/src/dos_m65/lowlevel/lowlevel_readsector.s b/src/dos_m65/lowlevel/lowlevel_fd_readsector.s similarity index 76% rename from src/dos_m65/lowlevel/lowlevel_readsector.s rename to src/dos_m65/lowlevel/lowlevel_fd_readsector.s index 9af6dd94..d92b4e69 100644 --- a/src/dos_m65/lowlevel/lowlevel_readsector.s +++ b/src/dos_m65/lowlevel/lowlevel_fd_readsector.s @@ -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 diff --git a/src/dos_m65/lowlevel/lowlevel_rd_readsector.s b/src/dos_m65/lowlevel/lowlevel_rd_readsector.s new file mode 100644 index 00000000..42271474 --- /dev/null +++ b/src/dos_m65/lowlevel/lowlevel_rd_readsector.s @@ -0,0 +1,7 @@ + +; Read a sector pair from a RAM disk + + +lowlevel_rd_readsector: + + ; XXX provide implementation diff --git a/src/dos_m65/unit_disk/disk_fd_cmd_close.s b/src/dos_m65/unit_disk/disk_fd_cmd_close.s index 9f0b1d4a..42505fc8 100644 --- a/src/dos_m65/unit_disk/disk_fd_cmd_close.s +++ b/src/dos_m65/unit_disk/disk_fd_cmd_close.s @@ -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