From 62f9b2d3d600d950c1266643569dd1f3711ab433 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Tue, 2 Mar 2021 21:43:37 +0100 Subject: [PATCH] sector reading fixes --- src/,,config_mega65.s | 2 +- src/dos_m65/dev_floppy/dev_fd_cmd_open.s | 60 ++++++++++++++++++- .../dev_floppy/dev_fd_util_readsector.s | 20 +++++-- 3 files changed, 74 insertions(+), 8 deletions(-) diff --git a/src/,,config_mega65.s b/src/,,config_mega65.s index aa4a87d8..45797b11 100644 --- a/src/,,config_mega65.s +++ b/src/,,config_mega65.s @@ -67,7 +67,7 @@ ;; #CONFIG# KEYCMD_F9 "@20$" ;; #CONFIG# KEYCMD_F10 "\5FL" -;; #CONFIG# KEYCMD_F11 "COLORSET 128" +;; #CONFIG# KEYCMD_F11 "@21$" ;; #CONFIG# KEYCMD_F12 "\5FHF" ;; #CONFIG# KEYCMD_F13 "JOYCRSR 2" ;; #CONFIG# KEYCMD_F14 "BOOTCPM" 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 8029650e..38a14f9d 100644 --- a/src/dos_m65/dev_floppy/dev_fd_cmd_open.s +++ b/src/dos_m65/dev_floppy/dev_fd_cmd_open.s @@ -6,12 +6,68 @@ dev_fd_cmd_OPEN: - ; XXX provide implementation + lda #$01 ; mode: receive command or file name + sta FD_MODE - jmp dos_EXIT_SEC + jmp dos_EXIT_CLC dev_fd_cmd_OPEN_EOI: + ; XXX this dispatcher is temporary + + ; Erase filter pattern XXX this should be moved to common part + + ldy #$0F + lda #$A0 +@lp1: + sta PAR_FPATTERN, y + dey + bpl @lp1 + + ; XXX add support for second floppy + + lda FD_CMDFN_BUF + cmp #'$' + beq dev_fd_cmd_OPEN_dir + + ; FALLTROUGH + +dev_fd_cmd_OPEN_file: + ; XXX provide implementation jmp dos_EXIT_CLC + +dev_fd_cmd_OPEN_dir: + + lda #$02 ; mode: read directory + sta FD_MODE + + ; Copy the filter from command XXX this should be moved to common part and deduplicated with file opening + + ldy #$00 +@lp1: + lda FD_CMDFN_BUF+1, y + cmp #$A0 + beq @lp1_end + sta PAR_FPATTERN, y + iny + cpy #$10 + bne @lp1 + +@lp1_end: + + ; XXX experimental code below + + ; 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 continue implementation + + jmp dos_EXIT_CLC 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 6d3747e7..a06f494c 100644 --- a/src/dos_m65/dev_floppy/dev_fd_util_readsector.s +++ b/src/dos_m65/dev_floppy/dev_fd_util_readsector.s @@ -11,8 +11,11 @@ dev_fd_util_readsector: lda #%10000000 ; select floppy buffer trb SD_BUFCTL - lda #%00000100 - trb FDC_CONTROL ; set side 0 + lda #%00000111 + trb FDC_CONTROL ; set drive 0 (internal) XXX support multiple drives + + lda #%00001000 + trb FDC_CONTROL ; set side 0 by default ; Select physical track and sector based on logical ones from PAR_TRACK and PAR_SECTOR @@ -20,15 +23,20 @@ dev_fd_util_readsector: dec sta FDC_TRACK - lda FDC_SECTOR + lda PAR_SECTOR cmp #20 bcc @side0 @side1: + + lda #%00001000 + tsb FDC_CONTROL ; set side 1 - ldx #$01 + lda PAR_SECTOR sec sbc #20 + + ldx #$01 +skip_2_bytes_trash_nvz @side0: @@ -44,9 +52,11 @@ dev_fd_util_readsector: lda #$40 sta FDC_COMMAND @lp: - lda FDC_STATUS_B ; XXX detect errors here + lda FDC_STATUS_B ; XXX detect errors here XXX waiting is probably not corrent bpl @lp ; Copy sector to buffer in RAM ; XXX + + rts