63 lines
1.2 KiB
ArmAsm
63 lines
1.2 KiB
ArmAsm
;
|
|
; Oleg A. Odintsov, Moscow, 2024
|
|
; Konstantin Fedorov, 12.06.2025
|
|
;
|
|
; void __fastcall__ cputcxy (unsigned char x, unsigned char y, char c);
|
|
; void __fastcall__ cputc (char c);
|
|
;
|
|
; Important note: The implementation of cputs() relies on the cputc() function
|
|
; not clobbering ptr1. Beware when rewriting or changing this function!
|
|
|
|
.import COUT
|
|
.export _cputcxy, _cputc, newline, putchar,putchardirect
|
|
.import gotoxy, VTABZ
|
|
.include "agat.inc"
|
|
|
|
_cputcxy:
|
|
pha
|
|
jsr gotoxy
|
|
pla
|
|
_cputc:
|
|
cmp #$0D ; Test for \r = carriage return
|
|
bne notleft
|
|
ldy #$00
|
|
sty CH
|
|
rts
|
|
notleft:
|
|
cmp #$0A ; Test for \n = line feed
|
|
beq newline
|
|
|
|
putchar:
|
|
ldy CH
|
|
sta (BASL),Y
|
|
iny
|
|
lda TATTR
|
|
bmi wch ; Skip if t64
|
|
sta (BASL),Y
|
|
iny
|
|
wch:
|
|
sty CH
|
|
cpy WNDWDTH
|
|
bcc noend
|
|
ldy #$00
|
|
sty CH
|
|
newline:
|
|
inc CV
|
|
lda CV
|
|
cmp WNDBTM
|
|
bcc :+
|
|
lda WNDTOP
|
|
sta CV
|
|
: jmp VTABZ
|
|
noend:
|
|
rts
|
|
|
|
putchardirect:
|
|
ldy CH
|
|
sta (BASL),Y
|
|
lda TATTR
|
|
bmi :+
|
|
iny
|
|
sta (BASL),Y
|
|
: rts
|