fixes for DMA jobs routines

This commit is contained in:
FeralChild64 committed 2020-08-30 20:51:16 +02:00
1 parent a31953818e
commit 9f98c476c8
2 files changed
+48 -71

No files matched your search

+6 -6
View File
@@ -64,12 +64,12 @@
.label M65_DMAJOB_SIZE_0 = M65_DMAGIC_LIST + 7
.label M65_DMAJOB_SIZE_1 = M65_DMAGIC_LIST + 8
.label M65_DMAJOB_SRC_0 = M65_DMAGIC_LIST + 10
.label M65_DMAJOB_SRC_1 = M65_DMAGIC_LIST + 11
.label M65_DMAJOB_SRC_2 = M65_DMAGIC_LIST + 9
.label M65_DMAJOB_SRC_0 = M65_DMAGIC_LIST + 9
.label M65_DMAJOB_SRC_1 = M65_DMAGIC_LIST + 10
.label M65_DMAJOB_SRC_2 = M65_DMAGIC_LIST + 11
.label M65_DMAJOB_SRC_3 = M65_DMAGIC_LIST + 2
.label M65_DMAJOB_DST_0 = M65_DMAGIC_LIST + 13
.label M65_DMAJOB_DST_1 = M65_DMAGIC_LIST + 14
.label M65_DMAJOB_DST_2 = M65_DMAGIC_LIST + 12
.label M65_DMAJOB_DST_0 = M65_DMAGIC_LIST + 12
.label M65_DMAJOB_DST_1 = M65_DMAGIC_LIST + 13
.label M65_DMAJOB_DST_2 = M65_DMAGIC_LIST + 14
.label M65_DMAJOB_DST_3 = M65_DMAGIC_LIST + 4
+42 -65
View File
@@ -11,70 +11,6 @@
// XXX: finish the implementation, use in screen editor
/*
// XXX implementation is wrong - this example seems to work, copies 32 bytes from $19000 to $19001
// Prepare list
lda #$0A // format F018A
sta M65_DMAGIC_LIST + 0
lda #$80 // src MB code
sta M65_DMAGIC_LIST + 1
lda #$00 // src address - bits 20-27
sta M65_DMAGIC_LIST + 2
lda #$81 // dst MB code
sta M65_DMAGIC_LIST + 3
lda #$00 // dst address - bits 20-27
sta M65_DMAGIC_LIST + 4
lda #$00 // end of options
sta M65_DMAGIC_LIST + 5
lda #$00 // COPY, not a chained request
sta M65_DMAGIC_LIST + 6
lda #$20 // copy $0020 bytes
sta M65_DMAGIC_LIST + 7
lda #$00
sta M65_DMAGIC_LIST + 8
lda #$00 // src address is $xxx9000 (setting bits 0-15)
sta M65_DMAGIC_LIST + 9
lda #$90
sta M65_DMAGIC_LIST + 10
lda #$01 // src address - bits 16-19
sta M65_DMAGIC_LIST + 11
lda #$01 // dst address is $xxx9001 (setting bits 0-15)
sta M65_DMAGIC_LIST + 12
lda #$90
sta M65_DMAGIC_LIST + 13
lda #$01 // dst address - bits 16-19
sta M65_DMAGIC_LIST + 14
lda #$00 // 'modulo' value is $0000
sta M65_DMAGIC_LIST + 15
sta M65_DMAGIC_LIST + 16
// Launch the DMAgic list
lda #$00 // DMA list location - bits 16-19
sta $D702
lda #$00 // DMA list location - bits 20-27
sta $D704
lda #>M65_DMAGIC_LIST
sta $D701
lda #<M65_DMAGIC_LIST
sta $D705 // should launch the DMA list
*/
m65_dmagic_oper_copy:
// To configure parameters, use:
@@ -85,6 +21,48 @@ m65_dmagic_oper_copy:
lda #$00
sta M65_DMAGIC_LIST+6 // operation: copy
// We need to correct the addresses:
// - M65_DMAJOB_SRC_2, M65_DMAJOB_DST_2 - contain bits 16-23, should contain 16-19
// - M65_DMAJOB_SRC_3, M65_DMAJOB_DST_3 - contain bits 24-27, should contain 20-27
// Correct SRC address
lda M65_DMAJOB_SRC_2
pha
asl
ror M65_DMAJOB_SRC_3
asl
ror M65_DMAJOB_SRC_3
asl
ror M65_DMAJOB_SRC_3
asl
ror M65_DMAJOB_SRC_3
pla
and %00001111
sta M65_DMAJOB_SRC_2
// Correct DST address
lda M65_DMAJOB_DST_2
pha
asl
ror M65_DMAJOB_DST_3
asl
ror M65_DMAJOB_DST_3
asl
ror M65_DMAJOB_DST_3
asl
ror M65_DMAJOB_DST_3
pla
and %00001111
sta M65_DMAJOB_DST_2
// Jump to common part
jmp_8 m65_dmagic_common
m65_dmagic_oper_fill:
@@ -120,7 +98,6 @@ m65_dmagic_launch:
lda #>M65_DMAGIC_LIST
sta DMA_ADDRMSB // $D701
lda #<M65_DMAGIC_LIST
sta DMA_ETRIG // $D705