From 7f9e73a1ce42ca5489f7b533d942a4d8b3193148 Mon Sep 17 00:00:00 2001 From: jede Date: Sat, 6 Jul 2019 10:16:57 +0200 Subject: [PATCH 017/170] Add textcolor and bgcolor.s --- asminc/telestrat.inc | 1 + doc/telestrat.sgml | 10 ++++++++-- libsrc/telestrat/bgcolor.s | 28 +++++++++++++++++++++++++++ libsrc/telestrat/clrscr.s | 15 ++++++++++++--- libsrc/telestrat/cputc.s | 37 +++++++++++++++++++++++++++++++++--- libsrc/telestrat/gotoxy.s | 21 +++++++++++++++----- libsrc/telestrat/gotoy.s | 3 ++- libsrc/telestrat/textcolor.s | 28 +++++++++++++++++++++++++++ 8 files changed, 129 insertions(+), 14 deletions(-) create mode 100644 libsrc/telestrat/bgcolor.s create mode 100644 libsrc/telestrat/textcolor.s diff --git a/asminc/telestrat.inc b/asminc/telestrat.inc index 3526c6f9..2036574a 100644 --- a/asminc/telestrat.inc +++ b/asminc/telestrat.inc @@ -286,6 +286,7 @@ XZAP = $46 ; Send Zap sound to PSG XSHOOT = $47 XMKDIR = $4B ; Create a folder. Only available in TELEMON 3.x (bank 7 of Orix) XRM = $4D ; Remove a folder or a file. Only available in TELEMON 3.x (bank 7 of Orix) +XFWR = $4E ; Put a char on the first screen. Only available in TELEMON 3.x (bank 7 of Orix) XGOKBD = $52 ; Buffer management diff --git a/doc/telestrat.sgml b/doc/telestrat.sgml index e52b183d..0cb40c50 100644 --- a/doc/telestrat.sgml +++ b/doc/telestrat.sgml @@ -212,7 +212,8 @@ RS232 port with Telemon calls (see XSOUT primitive for example) Telemon 3.0 handles fopen, fread, fclose primitives. It means that this function will crash the Telestrat because Telemon 2.4 does not have these primitives. By the way, Telemon 3.0 uses an extension "ch376 card" which -handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). +handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, +Sedoric, Stratsed will be handled in these 3 primitives (fopen, fread, fclose). fclose @@ -220,7 +221,12 @@ handles sdcard and FAT 32 usb key. In the next version of Telemon, FT DOS, Sedor fread - +conio

+Functions textcolor and bgcolor are available only with Telemon 3.0 (Orix). +Telemon 2.4 primitives can't handle any change of colors in text mode except with XINK or +XPAPER primitives which put on the first and second columns ink and paper attributes. +The only way to change color on the same line for text is to handle it in pure assembly +without systems calls. Other hints

diff --git a/libsrc/telestrat/bgcolor.s b/libsrc/telestrat/bgcolor.s new file mode 100644 index 00000000..4af0ef76 --- /dev/null +++ b/libsrc/telestrat/bgcolor.s @@ -0,0 +1,28 @@ +; 2019-07-02, Jede (jede@oric.org) +; + + .export _bgcolor + .import BGCOLOR + .import BGCOLOR_CHANGE + .include "telestrat.inc" + +.proc _bgcolor + cmp BGCOLOR ; Do we set the same color? if we don't detect it, we loose one char on the screen for each textcolor call with the same color + bne out ; Yes + lda #$00 + sta BGCOLOR_CHANGE + + lda BGCOLOR ; Return last color + + rts +out: + ldx BGCOLOR ; Get last color in order to return it + sta BGCOLOR + + lda #$01 ; Notify the change color + sta BGCOLOR_CHANGE + txa ; Return previous color + rts +.endproc + + diff --git a/libsrc/telestrat/clrscr.s b/libsrc/telestrat/clrscr.s index 1f90a7ca..a24647f8 100644 --- a/libsrc/telestrat/clrscr.s +++ b/libsrc/telestrat/clrscr.s @@ -4,15 +4,15 @@ .export _clrscr - .importzp sp + .import CHARCOLOR_CHANGE, CHARCOLOR, BGCOLOR, BGCOLOR_CHANGE .include "telestrat.inc" .proc _clrscr ; Switch to text mode BRK_TELEMON(XTEXT) - lda #SCREEN sta RES sty RES+1 @@ -20,7 +20,7 @@ ldy #<(SCREEN+SCREEN_XSIZE*SCREEN_YSIZE) ldx #>(SCREEN+SCREEN_XSIZE*SCREEN_YSIZE) lda #' ' - BRK_TELEMON XFILLM + BRK_TELEMON XFILLM ; Calls XFILLM : it fills A value from RES address and size of X and Y value ; reset prompt position @@ -34,5 +34,14 @@ sta SCRY lda #$00 sta SCRX + + lda #$00 + sta CHARCOLOR_CHANGE + sta BGCOLOR_CHANGE + + lda #$07 + sta CHARCOLOR + sta BGCOLOR + rts .endproc diff --git a/libsrc/telestrat/cputc.s b/libsrc/telestrat/cputc.s index b4f2966a..f38db8a1 100644 --- a/libsrc/telestrat/cputc.s +++ b/libsrc/telestrat/cputc.s @@ -4,12 +4,43 @@ ; void cputc (char c); ; - .export _cputc + .export _cputc, CHARCOLOR, CHARCOLOR_CHANGE, BGCOLOR, BGCOLOR_CHANGE .include "telestrat.inc" .proc _cputc - BRK_TELEMON XWR0 ; macro send char to screen (channel 0 in telemon terms) + ldx CHARCOLOR_CHANGE + beq do_not_change_color_foreground + + pha + lda CHARCOLOR + BRK_TELEMON $4E ; Change color on the screen (foreground) + lda #$00 + sta CHARCOLOR_CHANGE + pla + +do_not_change_color_foreground: + ldx BGCOLOR_CHANGE + beq do_not_change_color + + pha + lda 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) + lda #$00 + sta BGCOLOR_CHANGE + + pla + +do_not_change_color: + BRK_TELEMON XFWR ; Macro send char to screen (channel 0) rts .endproc - +CHARCOLOR: + .res 1 +CHARCOLOR_CHANGE: + .res 1 +BGCOLOR: + .res 1 +BGCOLOR_CHANGE: + .res 1 diff --git a/libsrc/telestrat/gotoxy.s b/libsrc/telestrat/gotoxy.s index 03d0a215..0a3db00b 100644 --- a/libsrc/telestrat/gotoxy.s +++ b/libsrc/telestrat/gotoxy.s @@ -5,10 +5,10 @@ ; void gotoxy (unsigned char x, unsigned char y); ; - .export gotoxy, _gotoxy + .export gotoxy, _gotoxy, _update_adscr + + .import popa,CHARCOLOR_CHANGE,BGCOLOR_CHANGE - .import popa - .importzp sp .include "telestrat.inc" @@ -22,6 +22,16 @@ gotoxy: jsr popa ; Get Y jsr popa sta SCRX + jsr _update_adscr ; Update adress video ram position when SCRY et SCRX are modified + ; Force to put again attribute when it moves on the screen + lda #$01 + sta CHARCOLOR_CHANGE + sta BGCOLOR_CHANGE + rts +.endproc + + +.proc _update_adscr lda #