Add 80 column mode
git-svn-id: svn://svn.cc65.org/cc65/trunk@1788 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
@@ -25,6 +25,7 @@ CRAM_PTR = $E2 ; Pointer to current char in color RAM
|
|||||||
|
|
||||||
CHARCOLOR = $F1
|
CHARCOLOR = $F1
|
||||||
RVS = $F3 ; Reverse output flag
|
RVS = $F3 ; Reverse output flag
|
||||||
|
SCROLL = $F8 ; Disable scrolling flag
|
||||||
FETCH = $2A2 ; Fetch subroutine in RAM
|
FETCH = $2A2 ; Fetch subroutine in RAM
|
||||||
FETVEC = $2AA ; Vector patch location for FETCH
|
FETVEC = $2AA ; Vector patch location for FETCH
|
||||||
STASH = $2AF ; Stash routine in RAM
|
STASH = $2AF ; Stash routine in RAM
|
||||||
|
|||||||
@@ -11,27 +11,48 @@
|
|||||||
.include "c128.inc"
|
.include "c128.inc"
|
||||||
|
|
||||||
|
|
||||||
_textcolor:
|
.proc _textcolor
|
||||||
|
|
||||||
bit MODE ; Check 80/40 column mode
|
bit MODE ; Check 80/40 column mode
|
||||||
bpl @L1 ; Jump if 40 columns
|
bmi @L1 ; Jump if 40 columns
|
||||||
tax
|
ldx CHARCOLOR ; get old value
|
||||||
lda $CE5C,x ; Translate VIC color -> VDC color
|
|
||||||
@L1: ldx CHARCOLOR ; get old value
|
|
||||||
sta CHARCOLOR ; set new value
|
sta CHARCOLOR ; set new value
|
||||||
txa
|
txa
|
||||||
|
ldx #$00
|
||||||
rts
|
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
|
ldx VIC_BG_COLOR0 ; get old value
|
||||||
sta VIC_BG_COLOR0 ; set new value
|
sta VIC_BG_COLOR0 ; set new value
|
||||||
txa
|
txa
|
||||||
|
ldx #$00
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|
||||||
|
.proc _bordercolor
|
||||||
|
|
||||||
_bordercolor:
|
|
||||||
ldx VIC_BORDERCOLOR ; get old value
|
ldx VIC_BORDERCOLOR ; get old value
|
||||||
sta VIC_BORDERCOLOR ; set new value
|
sta VIC_BORDERCOLOR ; set new value
|
||||||
txa
|
txa
|
||||||
|
ldx #$00
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ keyvec: .res 2
|
|||||||
|
|
||||||
initconio:
|
initconio:
|
||||||
|
|
||||||
|
lda #$80
|
||||||
|
sta SCROLL
|
||||||
|
|
||||||
; Save the old vector
|
; Save the old vector
|
||||||
|
|
||||||
lda KeyStoreVec
|
lda KeyStoreVec
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
.export _cputcxy, _cputc, cputdirect, putchar
|
.export _cputcxy, _cputc, cputdirect, putchar
|
||||||
.export newline, plot
|
.export newline, plot
|
||||||
.import popa, _gotoxy
|
.import popa, _gotoxy
|
||||||
.import xsize
|
|
||||||
.import PLOT
|
.import PLOT
|
||||||
|
|
||||||
.include "c128.inc"
|
.include "c128.inc"
|
||||||
@@ -19,71 +18,17 @@ _cputcxy:
|
|||||||
jsr popa ; Get Y
|
jsr popa ; Get Y
|
||||||
jsr _gotoxy ; Set cursor, drop x
|
jsr _gotoxy ; Set cursor, drop x
|
||||||
pla ; Restore C
|
pla ; Restore C
|
||||||
|
jmp PRINT
|
||||||
|
|
||||||
; Plot a character - also used as internal function
|
; Plot a character - also used as internal function
|
||||||
|
|
||||||
_cputc: cmp #$0A ; CR?
|
_cputc = PRINT ; let the kernal handle it
|
||||||
bne L1
|
|
||||||
lda #0
|
|
||||||
sta CURS_X
|
|
||||||
beq plot ; Recalculate pointers
|
|
||||||
|
|
||||||
L1: cmp #$0D ; LF?
|
cputdirect = $c33b
|
||||||
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
|
|
||||||
|
|
||||||
newline:
|
newline:
|
||||||
clc
|
lda #17
|
||||||
lda xsize
|
jmp PRINT
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Set cursor position, calculate RAM pointers
|
; Set cursor position, calculate RAM pointers
|
||||||
|
|
||||||
@@ -92,15 +37,7 @@ plot: ldy CURS_X
|
|||||||
clc
|
clc
|
||||||
jmp PLOT ; Set the new cursor
|
jmp PLOT ; Set the new cursor
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; Write one character to the screen without doing anything else, return X
|
; Write one character to the screen without doing anything else, return X
|
||||||
; position in Y
|
; position in Y
|
||||||
|
|
||||||
putchar:
|
putchar = $CC2F
|
||||||
ora RVS ; Set revers bit
|
|
||||||
ldy CURS_X
|
|
||||||
sta (SCREEN_PTR),y ; Set char
|
|
||||||
lda CHARCOLOR
|
|
||||||
sta (CRAM_PTR),y ; Set color
|
|
||||||
rts
|
|
||||||
|
|||||||
Reference in New Issue
Block a user