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
.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
+
initconio:
+ lda #$80
+ sta SCROLL
+
; Save the old vector
lda KeyStoreVec
.export _cputcxy, _cputc, cputdirect, putchar
.export newline, plot
.import popa, _gotoxy
- .import xsize
.import PLOT
.include "c128.inc"
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
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