diff --git a/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s b/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s index 1d4d0696..1a5fff65 100644 --- a/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s +++ b/src/dos_m65/lowlevel/lowlevel_helpers_fdc.s @@ -8,13 +8,13 @@ lowlevel_fdc_ensure_presence_refresh: ; 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 + ; lda #%00011000 ; step head 1 track in (XXX: check if it is really in) + ; sta FDC_COMMAND ; $D081 + ; jsr lowlevel_fdc_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 + ; lda #%00010000 ; step head 1 track out (XXX: check if it is really out) + ; sta FDC_COMMAND ; $D081 + ; jsr lowlevel_fdc_wait_clr_BUSY ; FALLTROUGH @@ -39,16 +39,22 @@ lowlevel_fdc_ensure_presence: lowlevel_fdc_motor_on: - lda #%00100000 ; enable drive motor and LED - tsb FDC_CONTROL ; $D080 + lda FDC_CONTROL + and #%00100000 + bne lowlevel_fdc_rts ; if motor already enabled, do nothing + + ; XXX find out why it is not disabled at all + ; lda #%00100000 ; enable drive motor and LED + ; tsb FDC_CONTROL ; $D080 ; Allow some time for spin-up; according to https://wiki.osdev.org/Floppy_Disk_Controller ; 300 ms should be more than enough - phx - ldx #$0F - jsr wait_x_bars - plx + ; XXX reenable this + ; phx + ; ldx #$0F + ; jsr wait_x_bars + ; plx bra lowlevel_fdc_wait_clr_BUSY @@ -71,4 +77,8 @@ lowlevel_fdc_wait_set_RDREQ: bit FDC_STATUS_B ; $D083 bpl lowlevel_fdc_wait_set_RDREQ + ; FALLTROUGH + +lowlevel_fdc_rts: + rts diff --git a/src/dos_m65/lowlevel/lowlevel_readsector.s b/src/dos_m65/lowlevel/lowlevel_readsector.s index 4cb3d26f..7b7f1dbc 100644 --- a/src/dos_m65/lowlevel/lowlevel_readsector.s +++ b/src/dos_m65/lowlevel/lowlevel_readsector.s @@ -85,8 +85,6 @@ lowlevel_readsector_force: cmp #%01000000 ; XXX is this correct? .A seems to stay at $40 at this point bne @lp1 - jsr lowlevel_fdc_motor_off ; disable drive motor - ; Copy sector to buffer in RAM lda #$00 diff --git a/src/dos_m65/unit_floppy/unit_fd_cmd_close.s b/src/dos_m65/unit_floppy/unit_fd_cmd_close.s index fc980641..c15bfc1b 100644 --- a/src/dos_m65/unit_floppy/unit_fd_cmd_close.s +++ b/src/dos_m65/unit_floppy/unit_fd_cmd_close.s @@ -8,4 +8,6 @@ unit_fd_cmd_CLOSE: ; XXX provide implementation + jsr lowlevel_fdc_motor_off ; disable drive motor XXX only do this if no channel is opened + jmp dos_EXIT_SEC