From 413dfa8f25946087778c5e45fcb66edf8f41bc14 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Mon, 1 Mar 2021 19:45:39 +0100 Subject: [PATCH] some code for floppy sector reading --- src/aliases/,aliases_hardware_m65.s | 21 ++++++++ src/dos_m65/,aliases_dos.s | 6 +-- .../dev_floppy/dev_fd_util_readsector.s | 52 +++++++++++++++++++ 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 src/dos_m65/dev_floppy/dev_fd_util_readsector.s diff --git a/src/aliases/,aliases_hardware_m65.s b/src/aliases/,aliases_hardware_m65.s index 4c5126e4..4fde6888 100644 --- a/src/aliases/,aliases_hardware_m65.s +++ b/src/aliases/,aliases_hardware_m65.s @@ -29,6 +29,27 @@ !addr VIC_PALSEL = $D070 ; - palette selection register + ; Floppy controller registers + + !addr FDC_CONTROL = $D080 + !addr FDC_COMMAND = $D081 + !addr FDC_STATUS_A = $D082 + !addr FDC_STATUS_B = $D083 + !addr FDC_TRACK = $D084 + !addr FDC_SECTOR = $D085 + !addr FDC_SIDE = $D086 + !addr FDC_DATA = $D087 + !addr FDC_CLOCK = $D088 + !addr FDC_STEP = $D089 + !addr FDC_PCODE = $D08A + + !addr FDC_DBG0 = $D6A0 + !addr FDC_DBG1 = $D6A1 + !addr FDC_DATARATE = $D6A2 + !addr FDC_LAST_TRACK = $D6A3 + !addr FDC_LAST_SECTOR = $D6A4 + !addr FDC_LAST_SIODE = $D6A5 + ; Palette memory areas !addr PALETTE_R = $D100 diff --git a/src/dos_m65/,aliases_dos.s b/src/dos_m65/,aliases_dos.s index 8a11c5f6..6416122c 100644 --- a/src/dos_m65/,aliases_dos.s +++ b/src/dos_m65/,aliases_dos.s @@ -48,10 +48,10 @@ !addr par_LDA_nnnn_Y = $8015 ; - 2 bytes; address in buffer, ram disk !addr code_RTS_04 = $8017 ; - RTS instruction - ; Parameters for utilities/helkpers + ; Parameters for utilities/helpers - !addr PAR_TRACK = $8018 ; track number for status/error - !addr PAR_SECTOR = $8019 ; sector number for status/error + !addr PAR_TRACK = $8018 ; track number, also for status/error + !addr PAR_SECTOR = $8019 ; sector number, also for status/error !addr PAR_FSIZE_BYTES = $801A ; 4 bytes - file size in bytes !addr PAR_FSIZE_BLOCKS = $801E ; 2 bytes - file size in blocks diff --git a/src/dos_m65/dev_floppy/dev_fd_util_readsector.s b/src/dos_m65/dev_floppy/dev_fd_util_readsector.s new file mode 100644 index 00000000..6d3747e7 --- /dev/null +++ b/src/dos_m65/dev_floppy/dev_fd_util_readsector.s @@ -0,0 +1,52 @@ + +; Read a single sector from a floppy drive + + +; XXX utilize this + +dev_fd_util_readsector: + + ; Select FDD sector as buffer + + lda #%10000000 ; select floppy buffer + trb SD_BUFCTL + + lda #%00000100 + trb FDC_CONTROL ; set side 0 + + ; Select physical track and sector based on logical ones from PAR_TRACK and PAR_SECTOR + + lda PAR_TRACK + dec + sta FDC_TRACK + + lda FDC_SECTOR + cmp #20 + bcc @side0 + +@side1: + + ldx #$01 + sec + sbc #20 + +skip_2_bytes_trash_nvz + +@side0: + + ldx #$00 + stx FDC_SIDE + clc + ror + sta FDC_SECTOR + + ; Ask the controller to read the sector + + lda #$40 + sta FDC_COMMAND +@lp: + lda FDC_STATUS_B ; XXX detect errors here + bpl @lp + + ; Copy sector to buffer in RAM + + ; XXX