1; 2018-04-13, Jede (jede@oric.org) 2; 3 4; void cputc (char c); 5; 6 7 .export _cputc, CHARCOLOR, OLD_CHARCOLOR, BGCOLOR, OLD_BGCOLOR 8 9 .include "telestrat.inc" 10 11.proc _cputc 12 ldx CHARCOLOR 13 cpx OLD_CHARCOLOR 14 beq do_not_change_color_foreground 15 16 stx OLD_CHARCOLOR ; Store CHARCOLOR into OLD_CHARCOLOR 17 18 dec SCRX 19 dec SCRX 20 21 pha 22 txa ; Swap X to A because, X contains CHARCOLOR 23 BRK_TELEMON XFWR ; Change color on the screen (foreground) 24 inc SCRX 25 pla 26 27do_not_change_color_foreground: 28 ldx BGCOLOR 29 cpx OLD_BGCOLOR 30 beq do_not_change_color 31 32 stx OLD_BGCOLOR 33 34 dec SCRX ; Dec SCRX in order to place attribute before the right position 35 36 pha 37 txa ; Swap X to A because, X contains BGCOLOR 38 ORA #%00010000 ; Add 16 because background color is an attribute between 16 and 23. 17 is red background for example 39 BRK_TELEMON XFWR ; Change color on the screen (background) 40 pla 41 42do_not_change_color: 43 BRK_TELEMON XFWR ; Macro send char to screen (channel 0) 44 rts 45.endproc 46.bss 47CHARCOLOR: 48 .res 1 49OLD_CHARCOLOR: 50 .res 1 51BGCOLOR: 52 .res 1 53OLD_BGCOLOR: 54 .res 1 55