1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 19:29:37 +00:00

add support for SHADOW_RAM2 segment

This commit is contained in:
Christian Groessler 2013-09-18 00:25:18 +02:00
parent 3df94fba92
commit 678ffbdd4d

View File

@ -14,9 +14,9 @@ DEBUG = 1
.if .defined(__ATARIXL__) .if .defined(__ATARIXL__)
.export sramprep .export sramprep
.import __SRPREP_LOAD__, __SRPREP_SIZE__ .import __SRPREP_LOAD__, __SRPREPCHNK_LAST__
.import __SHADOW_RAM_LOAD__, __SHADOW_RAM_SIZE__ .import __SHADOW_RAM_LOAD__, __SHADOW_RAM_SIZE__, __SHADOW_RAM_RUN__
.import __SHADOW_RAM_RUN__ .import __SHADOW_RAM2_LOAD__, __SHADOW_RAM2_SIZE__, __SHADOW_RAM2_RUN__
.import __CHARGEN_START__, __CHARGEN_SIZE__ .import __CHARGEN_START__, __CHARGEN_SIZE__
.import __STARTADDRESS__ ; needed by xlmemchk.inc .import __STARTADDRESS__ ; needed by xlmemchk.inc
@ -48,7 +48,7 @@ cont: ldx #0 ; channel 0
.segment "SRPREPHDR" .segment "SRPREPHDR"
.word __SRPREP_LOAD__ .word __SRPREP_LOAD__
.word __SRPREP_LOAD__ + __SRPREP_SIZE__ + __SHADOW_RAM_SIZE__ - 1 .word __SRPREPCHNK_LAST__ - 1
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Actual code ; Actual code
@ -148,15 +148,15 @@ scrok: ; now close it again -- we don't need it anymore
jsr CIOV_org jsr CIOV_org
; copy chargen to low memory ; copy chargen to low memory, just after the next possible address beyond our loaded chunk data
.ifdef DEBUG .ifdef DEBUG
print_string "copy chargen to low memory" print_string "copy chargen to low memory"
.endif .endif
lda #>(__SRPREP_LOAD__ + __SRPREP_SIZE__ + __SHADOW_RAM_SIZE__) lda #>__SRPREPCHNK_LAST__
sta ptr3+1 sta ptr3+1
lda #<(__SRPREP_LOAD__ + __SRPREP_SIZE__ + __SHADOW_RAM_SIZE__) lda #<__SRPREPCHNK_LAST__
sta ptr3 sta ptr3
beq cg_addr_ok beq cg_addr_ok
@ -215,7 +215,7 @@ cg_addr_ok2:
sta CHBASE sta CHBASE
sta CHBAS sta CHBAS
; copy shadow RAM contents to their destination ; copy shadow RAM contents to their destination (segment SHADOW_RAM)
lda #<__SHADOW_RAM_SIZE__ lda #<__SHADOW_RAM_SIZE__
bne do_copy bne do_copy
@ -240,6 +240,32 @@ do_copy:lda #<__SHADOW_RAM_LOAD__
no_copy: no_copy:
; copy shadow RAM #2 contents to their destination (segment SHADOW_RAM2)
lda #<__SHADOW_RAM2_SIZE__
bne do_copy2
lda #>__SHADOW_RAM2_SIZE__
beq no_copy2 ; we have no shadow RAM contents
; ptr1 - src; ptr2 - dest; tmp1, tmp2 - len
do_copy2:
lda #<__SHADOW_RAM2_LOAD__
sta ptr1
lda #>__SHADOW_RAM2_LOAD__
sta ptr1+1
lda #<__SHADOW_RAM2_RUN__
sta ptr2
lda #>__SHADOW_RAM2_RUN__
sta ptr2+1
lda #<__SHADOW_RAM2_SIZE__
sta tmp1
lda #>__SHADOW_RAM2_SIZE__
sta tmp2
jsr memcopy
no_copy2:
; copy chargen to its new (final) location ; copy chargen to its new (final) location
lda ptr3 lda ptr3
@ -361,10 +387,11 @@ screen_device_length = * - screen_device
.endif .endif
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------
; Provide an empty SHADOW_RAM segment in order that the linker is happy ; Provide empty SHADOW_RAM and SHADOW_RAM2 segments in order that the
; if the user program doesn't have a SHADOW_RAM segment. ; linker is happy if the user program doesn't have these segments.
.segment "SHADOW_RAM" .segment "SHADOW_RAM"
.segment "SHADOW_RAM2"
; ------------------------------------------------------------------------ ; ------------------------------------------------------------------------