and use display list copy in aligned memory
This commit is contained in:
parent
6fc07b9e65
commit
335c4d2c96
1 changed files with 25 additions and 12 deletions
33
mandel.s
33
mandel.s
|
@ -25,8 +25,9 @@ FR2 = $e6
|
||||||
|
|
||||||
; High data
|
; High data
|
||||||
framebuffer_top = $8000
|
framebuffer_top = $8000
|
||||||
|
textbuffer = $8f00
|
||||||
framebuffer_bottom = $9000
|
framebuffer_bottom = $9000
|
||||||
textbuffer = $9f00
|
display_list = $9f00
|
||||||
framebuffer_end = $a000
|
framebuffer_end = $a000
|
||||||
|
|
||||||
height = 184
|
height = 184
|
||||||
|
@ -104,7 +105,7 @@ bit_masks:
|
||||||
.byte 3 << 4
|
.byte 3 << 4
|
||||||
.byte 3 << 6
|
.byte 3 << 6
|
||||||
|
|
||||||
display_list:
|
display_list_start:
|
||||||
; 48 lines overscan
|
; 48 lines overscan
|
||||||
.repeat 5
|
.repeat 5
|
||||||
.byte $70 ; 8 blank lines
|
.byte $70 ; 8 blank lines
|
||||||
|
@ -129,6 +130,8 @@ display_list:
|
||||||
|
|
||||||
.byte $41 ; jump and blank
|
.byte $41 ; jump and blank
|
||||||
.addr display_list
|
.addr display_list
|
||||||
|
display_list_end:
|
||||||
|
display_list_len = display_list_end - display_list_start
|
||||||
|
|
||||||
.code
|
.code
|
||||||
|
|
||||||
|
@ -528,14 +531,6 @@ done:
|
||||||
; Disable display DMA
|
; Disable display DMA
|
||||||
sta DMACTL
|
sta DMACTL
|
||||||
|
|
||||||
; Set up the display list
|
|
||||||
lda #.lobyte(display_list)
|
|
||||||
sta DLISTL ; actual register
|
|
||||||
sta SDLSTL ; shadow register the OS will copy in
|
|
||||||
lda #.hibyte(display_list)
|
|
||||||
sta DLISTH ; actual register
|
|
||||||
sta SDLSTH ; shadow register the OS will copy in
|
|
||||||
|
|
||||||
; zero the range from framebuffer_top to framebuffer_end
|
; zero the range from framebuffer_top to framebuffer_end
|
||||||
lda #.lobyte(framebuffer_top)
|
lda #.lobyte(framebuffer_top)
|
||||||
sta temp
|
sta temp
|
||||||
|
@ -555,6 +550,24 @@ zero_byte_loop:
|
||||||
cmp #.hibyte(framebuffer_end)
|
cmp #.hibyte(framebuffer_end)
|
||||||
bne zero_page_loop
|
bne zero_page_loop
|
||||||
|
|
||||||
|
; Copy the display list into properly aligned memory
|
||||||
|
; Can't cross 1024-byte boundaries :D
|
||||||
|
ldx #0
|
||||||
|
copy_byte_loop:
|
||||||
|
lda display_list_start,x
|
||||||
|
sta display_list,x
|
||||||
|
inx
|
||||||
|
cpx #display_list_len
|
||||||
|
bne copy_byte_loop
|
||||||
|
|
||||||
|
; Set up the display list
|
||||||
|
lda #.lobyte(display_list)
|
||||||
|
sta DLISTL ; actual register
|
||||||
|
sta SDLSTL ; shadow register the OS will copy in
|
||||||
|
lda #.hibyte(display_list)
|
||||||
|
sta DLISTH ; actual register
|
||||||
|
sta SDLSTH ; shadow register the OS will copy in
|
||||||
|
|
||||||
; Status bar
|
; Status bar
|
||||||
draw_text 0, str_self_len, str_self
|
draw_text 0, str_self_len, str_self
|
||||||
draw_text 40 - str_run_len, str_run_len, str_run
|
draw_text 40 - str_run_len, str_run_len, str_run
|
||||||
|
|
Loading…
Reference in a new issue