From 335c4d2c9682ae9a4fbc25951c273ab1703d074a Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Sun, 22 Jan 2023 07:36:08 -0800 Subject: [PATCH] and use display list copy in aligned memory --- mandel.s | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/mandel.s b/mandel.s index a2db742..6880e8b 100644 --- a/mandel.s +++ b/mandel.s @@ -24,10 +24,11 @@ FR1 = $e0 FR2 = $e6 ; High data -framebuffer_top = $8000 +framebuffer_top = $8000 +textbuffer = $8f00 framebuffer_bottom = $9000 -textbuffer = $9f00 -framebuffer_end = $a000 +display_list = $9f00 +framebuffer_end = $a000 height = 184 half_height = height >> 1 @@ -104,7 +105,7 @@ bit_masks: .byte 3 << 4 .byte 3 << 6 -display_list: +display_list_start: ; 48 lines overscan .repeat 5 .byte $70 ; 8 blank lines @@ -129,6 +130,8 @@ display_list: .byte $41 ; jump and blank .addr display_list +display_list_end: +display_list_len = display_list_end - display_list_start .code @@ -528,14 +531,6 @@ done: ; Disable display DMA 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 lda #.lobyte(framebuffer_top) sta temp @@ -555,6 +550,24 @@ zero_byte_loop: cmp #.hibyte(framebuffer_end) 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 draw_text 0, str_self_len, str_self draw_text 40 - str_run_len, str_run_len, str_run