Add 80 column mode

git-svn-id: svn://svn.cc65.org/cc65/trunk@1788 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2002-12-19 21:22:22 +00:00
parent 36fe6284a8
commit 8775a9da8a
4 changed files with 38 additions and 76 deletions

View File

@ -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

View File

@ -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

View File

@ -19,6 +19,9 @@ keyvec: .res 2
initconio:
lda #$80
sta SCROLL
; Save the old vector
lda KeyStoreVec

View File

@ -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