Merge pull request #1412 from jedeoric/master
[Telestrat] Fix many bugs in conio Telestrat target
This commit is contained in:
commit
23fba6cc37
11 changed files with 204 additions and 56 deletions
|
@ -85,6 +85,8 @@
|
||||||
#define CH_LTEE '+'
|
#define CH_LTEE '+'
|
||||||
#define CH_RTEE '+'
|
#define CH_RTEE '+'
|
||||||
#define CH_CROSS '+'
|
#define CH_CROSS '+'
|
||||||
|
#define CH_HLINE '-'
|
||||||
|
#define CH_VLINE '|'
|
||||||
#define CH_CURS_UP 11
|
#define CH_CURS_UP 11
|
||||||
#define CH_CURS_DOWN 10
|
#define CH_CURS_DOWN 10
|
||||||
#define CH_CURS_LEFT 8
|
#define CH_CURS_LEFT 8
|
||||||
|
@ -119,3 +121,9 @@ void shoot();
|
||||||
void explode();
|
void explode();
|
||||||
|
|
||||||
void kbdclick1();
|
void kbdclick1();
|
||||||
|
|
||||||
|
/* The following #defines will cause the matching functions calls in conio.h
|
||||||
|
** to be overlaid by macros with the same names, saving the function call
|
||||||
|
** overhead.
|
||||||
|
*/
|
||||||
|
#define _bordercolor(color) COLOR_BLACK
|
||||||
|
|
14
libsrc/telestrat/bordercolor.s
Normal file
14
libsrc/telestrat/bordercolor.s
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 06.08.1998
|
||||||
|
;
|
||||||
|
; unsigned char __fastcall__ bordercolor (unsigned char color);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _bordercolor
|
||||||
|
|
||||||
|
.import return0
|
||||||
|
|
||||||
|
.include "telestrat.inc"
|
||||||
|
|
||||||
|
_bordercolor := return0
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _cclearxy, _cclear
|
.export _cclearxy, _cclear
|
||||||
.import update_adscr
|
.import update_adscr, display_conio
|
||||||
|
|
||||||
.importzp tmp1
|
.importzp tmp1
|
||||||
.import popax
|
.import popax
|
||||||
|
@ -27,7 +27,7 @@ _cclear:
|
||||||
@L1:
|
@L1:
|
||||||
stx tmp1 ; Save X
|
stx tmp1 ; Save X
|
||||||
lda #' ' ; Erase current char
|
lda #' ' ; Erase current char
|
||||||
BRK_TELEMON XFWR
|
jsr display_conio
|
||||||
ldx tmp1
|
ldx tmp1
|
||||||
dex
|
dex
|
||||||
bne @L1
|
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);
|
; void chline (unsigned char length);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _chline
|
.export _chlinexy, _chline
|
||||||
|
|
||||||
|
.import rvs, display_conio, update_adscr
|
||||||
|
.import popax
|
||||||
|
|
||||||
.include "telestrat.inc"
|
.include "telestrat.inc"
|
||||||
.include "zeropage.inc"
|
|
||||||
|
|
||||||
|
|
||||||
.proc _chline
|
_chlinexy:
|
||||||
sta tmp1
|
pha ; Save the length
|
||||||
@loop:
|
jsr popax ; Get X and Y
|
||||||
lda #'-' ; horizontal line screen code
|
sta SCRY ; Store Y
|
||||||
BRK_TELEMON XWR0 ; macro send char to screen (channel 0 in telemon terms)
|
stx SCRX ; Store X
|
||||||
dec tmp1
|
jsr update_adscr
|
||||||
bne @loop
|
pla ; Restore the length and run into _chline
|
||||||
rts
|
|
||||||
.endproc
|
_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
|
.export _clrscr
|
||||||
.import OLD_CHARCOLOR, OLD_BGCOLOR
|
.import OLD_CHARCOLOR, OLD_BGCOLOR, BGCOLOR, CHARCOLOR
|
||||||
|
|
||||||
.include "telestrat.inc"
|
.include "telestrat.inc"
|
||||||
|
|
||||||
|
@ -23,22 +23,25 @@
|
||||||
|
|
||||||
|
|
||||||
; reset prompt position
|
; reset prompt position
|
||||||
lda #<(SCREEN+40)
|
lda #<SCREEN
|
||||||
sta ADSCRL
|
sta ADSCR
|
||||||
lda #>(SCREEN+40)
|
lda #>SCREEN
|
||||||
sta ADSCRH
|
sta ADSCR+1
|
||||||
|
|
||||||
|
lda #$00
|
||||||
|
sta SCRDY
|
||||||
|
|
||||||
; reset display position
|
; reset display position
|
||||||
ldx #$01
|
ldx #$00
|
||||||
stx SCRY
|
stx SCRY
|
||||||
dex
|
|
||||||
stx SCRX
|
stx SCRX
|
||||||
|
|
||||||
; At this step X is equal to $00
|
stx OLD_BGCOLOR ; Black
|
||||||
dex
|
stx BGCOLOR
|
||||||
; At this step X is equal to $FF
|
|
||||||
stx OLD_BGCOLOR
|
ldx #$07 ; White
|
||||||
stx OLD_CHARCOLOR
|
stx OLD_CHARCOLOR
|
||||||
|
stx CHARCOLOR
|
||||||
|
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
|
@ -4,26 +4,50 @@
|
||||||
; void cputc (char c);
|
; void cputc (char c);
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _cputc, cputdirect
|
.export _cputc, _cputcxy, cputdirect, display_conio
|
||||||
.export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR
|
.export CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR
|
||||||
|
|
||||||
|
.import update_adscr
|
||||||
|
.import popax
|
||||||
|
|
||||||
.include "telestrat.inc"
|
.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
|
||||||
|
|
||||||
|
_cputc:
|
||||||
|
cmp #$0D
|
||||||
|
bne @not_CR
|
||||||
|
ldy #$00
|
||||||
|
sty SCRX
|
||||||
|
rts
|
||||||
|
@not_CR:
|
||||||
|
cmp #$0A
|
||||||
|
bne not_LF
|
||||||
|
|
||||||
|
inc SCRY
|
||||||
|
jmp update_adscr
|
||||||
|
|
||||||
cputdirect:
|
cputdirect:
|
||||||
.proc _cputc
|
not_LF:
|
||||||
ldx CHARCOLOR
|
ldx CHARCOLOR
|
||||||
cpx OLD_CHARCOLOR
|
cpx OLD_CHARCOLOR
|
||||||
beq do_not_change_color_foreground
|
beq do_not_change_color_foreground
|
||||||
|
|
||||||
stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR
|
stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR
|
||||||
|
|
||||||
dec SCRX
|
|
||||||
dec SCRX
|
|
||||||
|
|
||||||
pha
|
pha
|
||||||
txa ; Swap X to A because, X contains CHARCOLOR
|
txa ; Swap X to A because, X contains CHARCOLOR
|
||||||
BRK_TELEMON XFWR ; Change color on the screen (foreground)
|
|
||||||
inc SCRX
|
jsr display_conio
|
||||||
|
|
||||||
pla
|
pla
|
||||||
|
|
||||||
do_not_change_color_foreground:
|
do_not_change_color_foreground:
|
||||||
|
@ -33,18 +57,37 @@ do_not_change_color_foreground:
|
||||||
|
|
||||||
stx OLD_BGCOLOR
|
stx OLD_BGCOLOR
|
||||||
|
|
||||||
dec SCRX ; Dec SCRX in order to place attribute before the right position
|
|
||||||
|
|
||||||
pha
|
pha
|
||||||
txa ; Swap X to A because, X contains BGCOLOR
|
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
|
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)
|
|
||||||
|
jsr display_conio
|
||||||
pla
|
pla
|
||||||
|
|
||||||
do_not_change_color:
|
do_not_change_color:
|
||||||
BRK_TELEMON XFWR ; Macro send char to screen (channel 0)
|
; it continues to display_conio
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.proc display_conio
|
||||||
|
; This routine is used to displays char on screen
|
||||||
|
ldy SCRX
|
||||||
|
sta (ADSCR),y
|
||||||
|
iny
|
||||||
|
cpy #SCREEN_XSIZE
|
||||||
|
bne @no_inc
|
||||||
|
ldy #$00
|
||||||
|
sty SCRX
|
||||||
|
|
||||||
|
inc SCRY
|
||||||
|
|
||||||
|
jmp update_adscr
|
||||||
|
|
||||||
|
@no_inc:
|
||||||
|
sty SCRX
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.bss
|
.bss
|
||||||
CHARCOLOR:
|
CHARCOLOR:
|
||||||
.res 1
|
.res 1
|
||||||
|
@ -54,3 +97,4 @@ BGCOLOR:
|
||||||
.res 1
|
.res 1
|
||||||
OLD_BGCOLOR:
|
OLD_BGCOLOR:
|
||||||
.res 1
|
.res 1
|
||||||
|
|
||||||
|
|
40
libsrc/telestrat/cvline.s
Normal file
40
libsrc/telestrat/cvline.s
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 2003-04-13
|
||||||
|
;
|
||||||
|
; void cvlinexy (unsigned char x, unsigned char y, unsigned char length);
|
||||||
|
; void cvline (unsigned char length);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _cvlinexy, _cvline
|
||||||
|
|
||||||
|
.import rvs, display_conio, update_adscr
|
||||||
|
|
||||||
|
.import popax
|
||||||
|
|
||||||
|
.include "telestrat.inc"
|
||||||
|
|
||||||
|
|
||||||
|
_cvlinexy:
|
||||||
|
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 _cvline
|
||||||
|
|
||||||
|
_cvline:
|
||||||
|
tax ; Is the length zero?
|
||||||
|
beq @L9 ; Jump if done
|
||||||
|
@L1:
|
||||||
|
lda #'|'
|
||||||
|
ora rvs
|
||||||
|
ldy SCRX
|
||||||
|
sta (ADSCR),y
|
||||||
|
; compute next line
|
||||||
|
inc SCRY
|
||||||
|
jsr update_adscr
|
||||||
|
@L2: dex
|
||||||
|
bne @L1
|
||||||
|
@L9: rts
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,5 @@
|
||||||
|
|
||||||
.proc _gotox
|
.proc _gotox
|
||||||
sta SCRX
|
sta SCRX
|
||||||
|
|
||||||
lda #$FF
|
|
||||||
sta OLD_CHARCOLOR
|
|
||||||
sta OLD_BGCOLOR
|
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
|
@ -29,30 +29,23 @@ gotoxy: jsr popa ; Get Y
|
||||||
.endproc
|
.endproc
|
||||||
|
|
||||||
.proc update_adscr
|
.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
|
lda #<SCREEN
|
||||||
sta ADSCRL
|
sta ADSCR
|
||||||
|
|
||||||
lda #>SCREEN
|
lda #>SCREEN
|
||||||
sta ADSCRH
|
sta ADSCR+1
|
||||||
|
|
||||||
ldy SCRY
|
ldy SCRY
|
||||||
beq out
|
beq out
|
||||||
loop:
|
loop:
|
||||||
lda ADSCRL
|
lda ADSCR
|
||||||
clc
|
clc
|
||||||
adc #SCREEN_XSIZE
|
adc #SCREEN_XSIZE
|
||||||
bcc skip
|
bcc skip
|
||||||
inc ADSCRH
|
inc ADSCR+1
|
||||||
skip:
|
skip:
|
||||||
sta ADSCRL
|
sta ADSCR
|
||||||
dey
|
dey
|
||||||
bne loop
|
bne loop
|
||||||
out:
|
out:
|
||||||
|
|
37
libsrc/telestrat/revers.s
Normal file
37
libsrc/telestrat/revers.s
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
;
|
||||||
|
; Ullrich von Bassewitz, 07.08.1998
|
||||||
|
;
|
||||||
|
; unsigned char revers (unsigned char onoff);
|
||||||
|
;
|
||||||
|
|
||||||
|
.export _revers
|
||||||
|
.export rvs
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
|
||||||
|
.code
|
||||||
|
.proc _revers
|
||||||
|
|
||||||
|
ldx #$00 ; Assume revers off
|
||||||
|
tay ; Test onoff
|
||||||
|
beq L1 ; Jump if off
|
||||||
|
ldx #$80 ; Load on value
|
||||||
|
ldy #$00 ; Assume old value is zero
|
||||||
|
L1: lda rvs ; Load old value
|
||||||
|
stx rvs ; Set new value
|
||||||
|
beq L2 ; Jump if old value zero
|
||||||
|
iny ; Make old value = 1
|
||||||
|
L2: ldx #$00 ; Load high byte of result
|
||||||
|
tya ; Load low byte, set CC
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endproc
|
||||||
|
|
||||||
|
; ------------------------------------------------------------------------
|
||||||
|
;
|
||||||
|
|
||||||
|
.bss
|
||||||
|
rvs: .res 1
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
;
|
;
|
||||||
|
|
||||||
.export _textcolor
|
.export _textcolor
|
||||||
.import CHARCOLOR
|
.import CHARCOLOR, OLD_CHARCOLOR
|
||||||
.include "telestrat.inc"
|
.include "telestrat.inc"
|
||||||
|
|
||||||
.proc _textcolor
|
.proc _textcolor
|
||||||
ldx CHARCOLOR ; Get previous color
|
ldx CHARCOLOR ; Get previous color
|
||||||
sta CHARCOLOR
|
sta CHARCOLOR
|
||||||
|
stx OLD_CHARCOLOR
|
||||||
txa ; Return previous color
|
txa ; Return previous color
|
||||||
rts
|
rts
|
||||||
.endproc
|
.endproc
|
||||||
|
|
Loading…
Add table
Reference in a new issue