diff --git a/libsrc/c128/c128.inc b/libsrc/c128/c128.inc index 9e101d4f9..7524b3f73 100644 --- a/libsrc/c128/c128.inc +++ b/libsrc/c128/c128.inc @@ -25,6 +25,7 @@ CRAM_PTR = $E2 ; Pointer to current char in color RAM CHARCOLOR = $F1 RVS = $F3 ; Reverse output flag +SCROLL = $F8 ; Disable scrolling flag FETCH = $2A2 ; Fetch subroutine in RAM FETVEC = $2AA ; Vector patch location for FETCH STASH = $2AF ; Stash routine in RAM diff --git a/libsrc/c128/color.s b/libsrc/c128/color.s index f60529b24..1e7d577b2 100644 --- a/libsrc/c128/color.s +++ b/libsrc/c128/color.s @@ -11,27 +11,48 @@ .include "c128.inc" -_textcolor: +.proc _textcolor + bit MODE ; Check 80/40 column mode - bpl @L1 ; Jump if 40 columns - tax - lda $CE5C,x ; Translate VIC color -> VDC color -@L1: ldx CHARCOLOR ; get old value + bmi @L1 ; Jump if 40 columns + ldx CHARCOLOR ; get old value sta CHARCOLOR ; set new value txa + ldx #$00 rts +@L1: tax ; Move new color to X + lda CHARCOLOR ; Get old color + attributes + and #$F0 ; Keep old attributes + ora $CE5C,x ; Translate VIC color -> VDC color + ldx CHARCOLOR ; Get the old color + sta CHARCOLOR ; Set the new color + old attributes + txa ; Old color -> A + and #$0F ; Mask out attributes + ldx #$00 ; Load high byte + rts + +.endproc + + +.proc _bgcolor -_bgcolor: ldx VIC_BG_COLOR0 ; get old value sta VIC_BG_COLOR0 ; set new value txa + ldx #$00 rts +.endproc + + +.proc _bordercolor -_bordercolor: ldx VIC_BORDERCOLOR ; get old value sta VIC_BORDERCOLOR ; set new value txa + ldx #$00 rts +.endproc + diff --git a/libsrc/c128/conio.s b/libsrc/c128/conio.s index fddbd8632..11da92941 100644 --- a/libsrc/c128/conio.s +++ b/libsrc/c128/conio.s @@ -19,6 +19,9 @@ keyvec: .res 2 initconio: + lda #$80 + sta SCROLL + ; Save the old vector lda KeyStoreVec diff --git a/libsrc/c128/cputc.s b/libsrc/c128/cputc.s index 9ba194290..c3b835e13 100644 --- a/libsrc/c128/cputc.s +++ b/libsrc/c128/cputc.s @@ -8,7 +8,6 @@ .export _cputcxy, _cputc, cputdirect, putchar .export newline, plot .import popa, _gotoxy - .import xsize .import PLOT .include "c128.inc" @@ -19,71 +18,17 @@ _cputcxy: jsr popa ; Get Y jsr _gotoxy ; Set cursor, drop x pla ; Restore C + jmp PRINT ; Plot a character - also used as internal function -_cputc: cmp #$0A ; CR? - bne L1 - lda #0 - sta CURS_X - beq plot ; Recalculate pointers +_cputc = PRINT ; let the kernal handle it -L1: cmp #$0D ; LF? - beq newline ; Recalculate pointers - -; Printable char of some sort - - cmp #' ' - bcc cputdirect ; Other control char - tay - bmi L10 - cmp #$60 - bcc L2 - and #$DF - bne cputdirect ; Branch always -L2: and #$3F - -cputdirect: - jsr putchar ; Write the character to the screen - -; Advance cursor position - -advance: - iny - cpy xsize - bne L3 - jsr newline ; new line - ldy #0 ; + cr -L3: sty CURS_X - rts +cputdirect = $c33b newline: - clc - lda xsize - adc SCREEN_PTR - sta SCREEN_PTR - bcc L4 - inc SCREEN_PTR+1 - clc -L4: lda xsize - adc CRAM_PTR - sta CRAM_PTR - bcc L5 - inc CRAM_PTR+1 -L5: inc CURS_Y - rts - -; Handle character if high bit set - -L10: and #$7F - cmp #$7E ; PI? - bne L11 - lda #$5E ; Load screen code for PI - bne cputdirect -L11: ora #$40 - bne cputdirect - - + lda #17 + jmp PRINT ; Set cursor position, calculate RAM pointers @@ -92,15 +37,7 @@ plot: ldy CURS_X clc jmp PLOT ; Set the new cursor - - ; Write one character to the screen without doing anything else, return X ; position in Y -putchar: - ora RVS ; Set revers bit - ldy CURS_X - sta (SCREEN_PTR),y ; Set char - lda CHARCOLOR - sta (CRAM_PTR),y ; Set color - rts +putchar = $CC2F