]> git.sur5r.net Git - cc65/commitdiff
move some stuff to init segment, saves roughly 1480 bytes :)
authormrdudz <mrdudz@users.noreply.github.com>
Mon, 12 Oct 2015 21:39:47 +0000 (23:39 +0200)
committermrdudz <mrdudz@users.noreply.github.com>
Mon, 12 Oct 2015 21:39:47 +0000 (23:39 +0200)
libsrc/c64/soft80.inc
libsrc/c64/soft80_charset.s
libsrc/c64/soft80_conio.s
libsrc/c64/soft80_kplot.s

index 678000967adb04e507a1a7ea2b31eff69aeba58c..ca5c713cef5e4c43fe801de7ee248f28d7e6d8b9 100644 (file)
@@ -7,7 +7,17 @@ soft80_lo_charset       = $d000
 soft80_hi_charset       = $d400
 soft80_vram             = $d800 ; ram under i/o
 soft80_colram           = $d800 ; color ram (used for temp. storage)
-soft80_spriteblock      = $dc00
+soft80_spriteblock      = $dc00 ; 64 bytes reserved for pointer sprite data
+
+; tables for kplot
+soft80_bitmapxlo        = $dc40       ; (80 bytes)
+soft80_bitmapxhi        = $dc40 + 80  ; (80 bytes)
+soft80_vramlo           = $dc40 + 160 ; (25 bytes)
+; align to next page for speed
+soft80_vramhi           = $dd00       ; (25 bytes)
+soft80_bitmapylo        = $dd00 + 25  ; (25 bytes)
+soft80_bitmapyhi        = $dd00 + 50  ; (25 bytes)
+
 soft80_bitmap           = $e000
 
 charsperline            = 80
index 7a4e10968781d62831dd1a29b1aa16d6598aa685..678439a30508790a666d43e7652c023470a99e4d 100644 (file)
@@ -43,7 +43,7 @@
 
         .export         soft80_charset
 
-        .rodata
+        .segment "INIT"
 soft80_charset:
         .byte $0f,$03,$0f,$00,$0f,$07,$05,$0e
         .byte $0f,$05,$0e,$0b,$0f,$0b,$0f,$0f
index f6efe3382e91b49e48b33419abffffc862d67b62..06bebc907a2c032016f7a09b17c0299646cfe88d 100644 (file)
         .include        "soft80.inc"
 
 soft80_init:
+        lda     soft80_first_init
+        bne     @skp
+        jsr     firstinit
+@skp:
+        ; the "color voodoo" in other parts of the code relies on the vram and
+        ; colorram being set up as expected, which is why we cant use the
+        ; _bgcolor and _textcolor functions here.
+
+        lda     646                             ; use current textcolor
+        and     #$0f
+        sta     soft80_internal_textcolor
+
+        lda     VIC_BG_COLOR0                   ; use current bgcolor
+        and     #$0f
+        sta     soft80_internal_bgcolor
+        asl     a
+        asl     a
+        asl     a
+        asl     a
+        ora     soft80_internal_textcolor
+        sta     CHARCOLOR
+
         lda     #$3b
         sta     VIC_CTRL1
         lda     #$00
@@ -26,14 +48,28 @@ soft80_init:
         lda     #$c8
         sta     VIC_CTRL2
 
+        jmp     soft80_kclrscr
+
+soft80_shutdown:
+        lda     #$1b
+        sta     VIC_CTRL1
+        lda     #$03
+        sta     CIA2_PRA
+        lda     #$15
+        sta     VIC_VIDEO_ADR
+        rts
+
+        .segment "INIT"
+firstinit:
         ; copy charset to RAM under I/O
-        ; FIXME: move charset and this constructor into init segment
         sei
         lda     $01
         pha
         lda     #$34
         sta     $01
 
+        inc     soft80_first_init
+
         lda     #>soft80_charset
         sta     ptr1+1
         lda     #<soft80_charset
@@ -66,45 +102,58 @@ soft80_init:
         dex
         bne     @l2
 
+        ; copy the kplot tables to ram under I/O
+        ;ldx     #0              ; is 0
+@l3:
+        lda     soft80_tables_data_start,x
+        sta     soft80_bitmapxlo,x
+        lda     soft80_tables_data_start + (soft80_tables_data_end - soft80_tables_data_start - $100) ,x
+        sta     soft80_bitmapxlo + (soft80_tables_data_end - soft80_tables_data_start - $100),x
+        inx
+        bne     @l3
+
         pla
         sta     $01
         cli
-
-        ; the "color voodoo" in other parts of the code relies on the vram and
-        ; colorram being set up as expected, which is why we cant use the
-        ; _bgcolor and _textcolor functions here.
-
-        lda     646                             ; use current textcolor
-        and     #$0f
-        sta     soft80_internal_textcolor
-
-        lda     VIC_BG_COLOR0                   ; use current bgcolor
-        and     #$0f
-        sta     soft80_internal_bgcolor
-        asl     a
-        asl     a
-        asl     a
-        asl     a
-        ora     soft80_internal_textcolor
-        sta     CHARCOLOR
-
-        jmp     soft80_kclrscr
-
-soft80_shutdown:
-        lda     #$1b
-        sta     VIC_CTRL1
-        lda     #$03
-        sta     CIA2_PRA
-        lda     #$15
-        sta     VIC_VIDEO_ADR
         rts
 
+; the following tables take up 267 bytes, used by kplot
+soft80_tables_data_start:
+
+soft80_bitmapxlo_data:
+        .repeat 80,col
+        .byte <((col/2)*8)
+        .endrepeat
+soft80_bitmapxhi_data:
+        .repeat 80,col
+        .byte >((col/2)*8)
+        .endrepeat
+soft80_vramlo_data:
+        .repeat 25,row
+        .byte <(soft80_vram+(row*40))
+        .endrepeat
+        .byte 0,0,0,0,0,0,0     ; padding to next page
+soft80_vramhi_data:
+        .repeat 25,row
+        .byte >(soft80_vram+(row*40))
+        .endrepeat
+soft80_bitmapylo_data:
+        .repeat 25,row
+        .byte <(soft80_bitmap+(row*40*8))
+        .endrepeat
+soft80_bitmapyhi_data:
+        .repeat 25,row
+        .byte >(soft80_bitmap+(row*40*8))
+        .endrepeat
+
+soft80_tables_data_end:
+
 ;-------------------------------------------------------------------------------
 ; FIXME: when the code is fixed to use the "init" segment, these variables must
 ;        be moved into a section other than .bss so they survive after the init
 ;        code has been run.
 
-        .bss
+        .data           ; FIXME
 soft80_internal_textcolor:
         .res 1
 soft80_internal_bgcolor:
@@ -112,3 +161,6 @@ soft80_internal_bgcolor:
 soft80_internal_cursorxlsb:
         .res 1
 
+        .data
+soft80_first_init:
+        .byte 0         ; flag to check first init, this really must be in .data
index 79a14cbcb28ce46ff497a1538e1aa49708715727..bd52ee6d33b741f871c4ab940bd3f636a2586e6a 100644 (file)
@@ -17,6 +17,12 @@ soft80_kplot:
         stx     CURS_Y
         sty     CURS_X
 
+        sei
+        lda     $01
+        pha
+        lda     #$34                            ; enable RAM under I/O
+        sta     $01
+
         ; calc pointer to bitmap
         lda     soft80_bitmapylo,x
         clc
@@ -41,40 +47,15 @@ soft80_kplot:
         adc     soft80_vramhi,x
         sta     CRAM_PTR+1
 
+        pla
+        sta     $01
+        cli
+
 @getpos:
         ldx     CURS_Y
         ldy     CURS_X
         rts
 
-        ; FIXME: the following tables take up 260 bytes, perhaps move them
-        ;        to 0xdc00... area in ram under i/o
-
-        .rodata
-soft80_bitmapxlo:
-        .repeat 80,col
-        .byte <((col/2)*8)
-        .endrepeat
-soft80_bitmapxhi:
-        .repeat 80,col
-        .byte >((col/2)*8)
-        .endrepeat
-soft80_vramlo:
-        .repeat 25,row
-        .byte <(soft80_vram+(row*40))
-        .endrepeat
-soft80_vramhi:
-        .repeat 25,row
-        .byte >(soft80_vram+(row*40))
-        .endrepeat
-soft80_bitmapylo:
-        .repeat 25,row
-        .byte <(soft80_bitmap+(row*40*8))
-        .endrepeat
-soft80_bitmapyhi:
-        .repeat 25,row
-        .byte >(soft80_bitmap+(row*40*8))
-        .endrepeat
-
 ;-------------------------------------------------------------------------------
 ; force the init constructor to be imported