]> git.sur5r.net Git - cc65/commitdiff
Fixed soft80 shutdown.
authorOliver Schmidt <ol.sc@web.de>
Wed, 2 Dec 2015 20:34:08 +0000 (21:34 +0100)
committerOliver Schmidt <ol.sc@web.de>
Wed, 2 Dec 2015 20:34:08 +0000 (21:34 +0100)
A call to $FDA3 cannot be used because it re-enables the BASIC ROM. If a large program (such as Contiki's webbrowser80) has destructor code or data "behind" that ROM, then the program might crash when it tries to quit gracefully. Changing that code to set CIA2_PRA works well enough.

libsrc/c64/soft80_conio.s

index 23e29230183080a3619627cf6a28717bbeacbc5b..874d41a533e53935a0e1a3be2fb565f0cd166955 100644 (file)
@@ -25,12 +25,12 @@ soft80_init:
         ; colorram being set up as expected, which is why we cant use the
         ; _bgcolor and _textcolor functions here.
 
-        lda     CHARCOLOR                       ; use current textcolor
-        and     #$0f                            ; make sure the upper nibble is 0s
+        lda     CHARCOLOR       ; use current textcolor
+        and     #$0F            ; make sure the upper nibble is 0s
         sta     CHARCOLOR
 
-        lda     VIC_BG_COLOR0                   ; use current bgcolor
-        and     #$0f
+        lda     VIC_BG_COLOR0   ; use current bgcolor
+        and     #$0F
         sta     soft80_internal_bgcolor
         asl     a
         asl     a
@@ -39,21 +39,22 @@ soft80_init:
         ora     CHARCOLOR
         sta     soft80_internal_cellcolor
 
-        lda     #$3b
+        lda     #$3B
         sta     VIC_CTRL1
         lda     #$00
         sta     CIA2_PRA
         lda     #$68
         sta     VIC_VIDEO_ADR
-        lda     #$c8
+        lda     #$C8
         sta     VIC_CTRL2
 
         jmp     soft80_kclrscr
 
 soft80_shutdown:
 
-        jsr     $fda3   ; Initialise I/O
-        jmp     $ff5b   ; Initialize screen editor
+        lda     #$07
+        sta     CIA2_PRA
+        jmp     $FF5B           ; Initialize video I/O
 
         .segment "INIT"
 firstinit:
@@ -66,18 +67,18 @@ firstinit:
 
         inc     soft80_first_init
 
-        lda     #>soft80_charset
-        sta     ptr1+1
         lda     #<soft80_charset
+        ldx     #>soft80_charset
         sta     ptr1
-        lda     #>soft80_lo_charset
-        sta     ptr2+1
+        stx     ptr1+1
         lda     #<soft80_lo_charset
+        ldx     #>soft80_lo_charset
         sta     ptr2
-        lda     #>soft80_hi_charset
-        sta     ptr3+1
+        stx     ptr2+1
         lda     #<soft80_hi_charset
+        ldx     #>soft80_hi_charset
         sta     ptr3
+        stx     ptr3+1
 
         ldx     #4
 @l2:
@@ -99,12 +100,12 @@ firstinit:
         bne     @l2
 
         ; copy the kplot tables to ram under I/O
-        ;ldx     #0              ; is 0
+        ;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
+        lda     soft80_tables_data_start + (soft80_tables_data_end - soft80_tables_data_start - $0100),x
+        sta     soft80_bitmapxlo + (soft80_tables_data_end - soft80_tables_data_start - $0100),x
         inx
         bne     @l3
 
@@ -155,4 +156,4 @@ soft80_internal_cursorxlsb:
 
         .data
 soft80_first_init:
-        .byte 0         ; flag to check first init, this really must be in .data
+        .byte 0                 ; flag to check first init, this really must be in .data