Fix many bugs
This commit is contained in:
parent
b8889bf37e
commit
02e52fe24d
8 changed files with 109 additions and 55 deletions
|
@ -85,6 +85,8 @@
|
|||
#define CH_LTEE '+'
|
||||
#define CH_RTEE '+'
|
||||
#define CH_CROSS '+'
|
||||
#define CH_HLINE '-'
|
||||
#define CH_VLINE '|'
|
||||
#define CH_CURS_UP 11
|
||||
#define CH_CURS_DOWN 10
|
||||
#define CH_CURS_LEFT 8
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
;
|
||||
|
||||
.export _cclearxy, _cclear
|
||||
.import update_adscr
|
||||
.import update_adscr, display_conio
|
||||
|
||||
.importzp tmp1
|
||||
.import popax
|
||||
|
@ -27,7 +27,7 @@ _cclear:
|
|||
@L1:
|
||||
stx tmp1 ; Save X
|
||||
lda #' ' ; Erase current char
|
||||
BRK_TELEMON XFWR
|
||||
jsr display_conio
|
||||
ldx tmp1
|
||||
dex
|
||||
bne @L1
|
||||
|
|
|
@ -1,22 +1,34 @@
|
|||
;
|
||||
; jede jede@oric.org 2018-04-17
|
||||
;
|
||||
|
||||
; void chlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||
; void chline (unsigned char length);
|
||||
;
|
||||
|
||||
.export _chline
|
||||
.export _chlinexy, _chline
|
||||
|
||||
.import rvs, display_conio, update_adscr
|
||||
.import popax
|
||||
|
||||
.include "telestrat.inc"
|
||||
.include "zeropage.inc"
|
||||
|
||||
|
||||
.proc _chline
|
||||
sta tmp1
|
||||
@loop:
|
||||
lda #'-' ; horizontal line screen code
|
||||
BRK_TELEMON XWR0 ; macro send char to screen (channel 0 in telemon terms)
|
||||
dec tmp1
|
||||
bne @loop
|
||||
rts
|
||||
.endproc
|
||||
_chlinexy:
|
||||
pha ; Save the length
|
||||
jsr popax ; Get X and Y
|
||||
sta SCRY ; Store Y
|
||||
stx SCRX ; Store X
|
||||
jsr update_adscr
|
||||
pla ; Restore the length and run into _chline
|
||||
|
||||
_chline:
|
||||
tax ; Is the length zero?
|
||||
beq @L9 ; Jump if done
|
||||
@L1:
|
||||
lda #'-' ; Horizontal line screen code
|
||||
ora rvs
|
||||
|
||||
jsr display_conio
|
||||
|
||||
@L2: dex
|
||||
bne @L1
|
||||
@L9: rts
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
;
|
||||
|
||||
.export _clrscr
|
||||
.import OLD_CHARCOLOR, OLD_BGCOLOR
|
||||
.import OLD_CHARCOLOR, OLD_BGCOLOR, BGCOLOR, CHARCOLOR
|
||||
|
||||
.include "telestrat.inc"
|
||||
|
||||
|
@ -23,22 +23,25 @@
|
|||
|
||||
|
||||
; reset prompt position
|
||||
lda #<(SCREEN+40)
|
||||
sta ADSCRL
|
||||
lda #>(SCREEN+40)
|
||||
sta ADSCRH
|
||||
lda #<(SCREEN)
|
||||
sta ADSCR
|
||||
lda #>(SCREEN)
|
||||
sta ADSCR+1
|
||||
|
||||
lda #$00
|
||||
sta SCRDY
|
||||
|
||||
; reset display position
|
||||
ldx #$01
|
||||
ldx #$00
|
||||
stx SCRY
|
||||
dex
|
||||
stx SCRX
|
||||
|
||||
; At this step X is equal to $00
|
||||
dex
|
||||
; At this step X is equal to $FF
|
||||
stx OLD_BGCOLOR
|
||||
stx OLD_BGCOLOR ; black
|
||||
stx BGCOLOR
|
||||
|
||||
ldx #$07 ; white
|
||||
stx OLD_CHARCOLOR
|
||||
stx CHARCOLOR
|
||||
|
||||
rts
|
||||
.endproc
|
||||
|
|
|
@ -4,24 +4,50 @@
|
|||
; void cputc (char c);
|
||||
;
|
||||
|
||||
.export _cputc, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR
|
||||
.export _cputc, _cputcxy, display_conio, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR
|
||||
|
||||
|
||||
.import update_adscr
|
||||
.import popax
|
||||
|
||||
.include "telestrat.inc"
|
||||
|
||||
_cputcxy:
|
||||
pha ; Save C
|
||||
jsr popax ; Get X and Y
|
||||
sta SCRY ; Store Y
|
||||
stx SCRX ; Store X
|
||||
jsr update_adscr
|
||||
pla
|
||||
|
||||
.proc _cputc
|
||||
cmp #$0D
|
||||
bne @not_CR
|
||||
ldy #$00
|
||||
sty SCRX
|
||||
rts
|
||||
@not_CR:
|
||||
cmp #$0A
|
||||
bne @not_LF
|
||||
|
||||
inc SCRY
|
||||
jmp update_adscr
|
||||
|
||||
|
||||
@not_LF:
|
||||
|
||||
ldx CHARCOLOR
|
||||
cpx OLD_CHARCOLOR
|
||||
beq do_not_change_color_foreground
|
||||
|
||||
stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR
|
||||
|
||||
dec SCRX
|
||||
dec SCRX
|
||||
|
||||
pha
|
||||
txa ; Swap X to A because, X contains CHARCOLOR
|
||||
BRK_TELEMON XFWR ; Change color on the screen (foreground)
|
||||
inc SCRX
|
||||
|
||||
jsr display_conio
|
||||
|
||||
pla
|
||||
|
||||
do_not_change_color_foreground:
|
||||
|
@ -31,18 +57,38 @@ do_not_change_color_foreground:
|
|||
|
||||
stx OLD_BGCOLOR
|
||||
|
||||
dec SCRX ; Dec SCRX in order to place attribute before the right position
|
||||
|
||||
pha
|
||||
txa ; Swap X to A because, X contains BGCOLOR
|
||||
ORA #%00010000 ; Add 16 because background color is an attribute between 16 and 23. 17 is red background for example
|
||||
BRK_TELEMON XFWR ; Change color on the screen (background)
|
||||
ora #%00010000 ; Add 16 because background color is an attribute between 16 and 23. 17 is red background for example
|
||||
|
||||
jsr display_conio
|
||||
pla
|
||||
|
||||
do_not_change_color:
|
||||
BRK_TELEMON XFWR ; Macro send char to screen (channel 0)
|
||||
; it continues to display_conio
|
||||
|
||||
.endproc
|
||||
|
||||
|
||||
|
||||
.proc display_conio
|
||||
ldy SCRX
|
||||
sta (ADSCR),y
|
||||
iny
|
||||
cpy #SCREEN_XSIZE
|
||||
bne @no_inc
|
||||
ldy #$00
|
||||
sty SCRX
|
||||
|
||||
jmp update_adscr
|
||||
|
||||
@no_inc:
|
||||
sty SCRX
|
||||
rts
|
||||
.endproc
|
||||
|
||||
|
||||
|
||||
.bss
|
||||
CHARCOLOR:
|
||||
.res 1
|
||||
|
@ -52,3 +98,4 @@ BGCOLOR:
|
|||
.res 1
|
||||
OLD_BGCOLOR:
|
||||
.res 1
|
||||
|
||||
|
|
|
@ -8,9 +8,5 @@
|
|||
|
||||
.proc _gotox
|
||||
sta SCRX
|
||||
|
||||
lda #$FF
|
||||
sta OLD_CHARCOLOR
|
||||
sta OLD_BGCOLOR
|
||||
rts
|
||||
.endproc
|
||||
|
|
|
@ -29,30 +29,23 @@ gotoxy: jsr popa ; Get Y
|
|||
.endproc
|
||||
|
||||
.proc update_adscr
|
||||
; Force to set again color if cursor moves
|
||||
; $FF is used because we know that it's impossible to have this value with a color
|
||||
; It prevents a bug : If bgcolor or textcolor is set to black for example with no char displays,
|
||||
; next cputsxy will not set the attribute if y coordinate changes
|
||||
lda #$FF
|
||||
sta OLD_CHARCOLOR
|
||||
sta OLD_BGCOLOR
|
||||
|
||||
lda #<SCREEN
|
||||
sta ADSCRL
|
||||
sta ADSCR
|
||||
|
||||
lda #>SCREEN
|
||||
sta ADSCRH
|
||||
sta ADSCR+1
|
||||
|
||||
ldy SCRY
|
||||
beq out
|
||||
loop:
|
||||
lda ADSCRL
|
||||
lda ADSCR
|
||||
clc
|
||||
adc #SCREEN_XSIZE
|
||||
bcc skip
|
||||
inc ADSCRH
|
||||
inc ADSCR+1
|
||||
skip:
|
||||
sta ADSCRL
|
||||
sta ADSCR
|
||||
dey
|
||||
bne loop
|
||||
out:
|
||||
|
|
|
@ -2,12 +2,13 @@
|
|||
;
|
||||
|
||||
.export _textcolor
|
||||
.import CHARCOLOR
|
||||
.import CHARCOLOR, OLD_CHARCOLOR
|
||||
.include "telestrat.inc"
|
||||
|
||||
.proc _textcolor
|
||||
ldx CHARCOLOR ; Get previous color
|
||||
sta CHARCOLOR
|
||||
stx OLD_CHARCOLOR
|
||||
txa ; Return previous color
|
||||
rts
|
||||
.endproc
|
||||
|
|
Loading…
Add table
Reference in a new issue