some code for floppy sector reading
This commit is contained in:
1 parent
23c5e3e766
commit
413dfa8f25
3 files changed
+76
-3
No files matched your search
@@ -29,6 +29,27 @@
|
|||||||
|
|
||||||
!addr VIC_PALSEL = $D070 ; - palette selection register
|
!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
|
; Palette memory areas
|
||||||
|
|
||||||
!addr PALETTE_R = $D100
|
!addr PALETTE_R = $D100
|
||||||
|
|||||||
@@ -48,10 +48,10 @@
|
|||||||
!addr par_LDA_nnnn_Y = $8015 ; - 2 bytes; address in buffer, ram disk
|
!addr par_LDA_nnnn_Y = $8015 ; - 2 bytes; address in buffer, ram disk
|
||||||
!addr code_RTS_04 = $8017 ; - RTS instruction
|
!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_TRACK = $8018 ; track number, also for status/error
|
||||||
!addr PAR_SECTOR = $8019 ; sector number 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_BYTES = $801A ; 4 bytes - file size in bytes
|
||||||
!addr PAR_FSIZE_BLOCKS = $801E ; 2 bytes - file size in blocks
|
!addr PAR_FSIZE_BLOCKS = $801E ; 2 bytes - file size in blocks
|
||||||
|
|||||||
@@ -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
|
||||||
Reference in new issue
Block a user