1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-18 07:29:36 +00:00
cc65/libsrc/geos/conio/cputc.s

103 lines
1.5 KiB
ArmAsm
Raw Normal View History

;
; Maciej 'YTM/Elysium' Witkowiak
;
; 27.10.2001
; 06.03.2002
; void cputcxy (unsigned char x, unsigned char y, char c);
; void cputc (char c);
.export _cputcxy, _cputc, update_cursor
.import _gotoxy, fixcursor
.import popa
.import xsize,ysize
.importzp cursor_x, cursor_y, cursor_c, cursor_r
.include "../inc/const.inc"
.include "../inc/geossym.inc"
.include "../inc/jumptab.inc"
_cputcxy:
pha ; Save C
jsr popa ; Get Y
jsr _gotoxy ; Set cursor, drop x
pla ; Restore C
; Plot a character - also used as internal function
_cputc:
tax ; save character
; some characters are not safe for PutChar
cmp #$20
bcs L1
cmp #CR
beq do_cr
cmp #LF
beq do_lf
cmp #$1d
bne L00
ldx #BACKSPACE
sec
bcs L2
L00: cmp #ESC_GRAPHICS
beq L0
cmp #ESC_RULER
beq L0
cmp #GOTOX
beq L0
cmp #GOTOY
beq L0
cmp #GOTOXY
beq L0
cmp #NEWCARDSET
beq L0
cmp #$1e
bne L1
L0: rts
L1: clc
L2: php
lda cursor_x
sta r11L
lda cursor_x+1
sta r11H
lda cursor_y
sta r1H
txa
jsr PutChar
plp
bcs update_cursor
inc cursor_c
lda cursor_c
cmp xsize ; hit right margin?
bne update_cursor
lda #0 ; yes - do cr+lf
sta cursor_c
do_lf: inc cursor_r
lda cursor_r
cmp ysize ; hit bottom margin?
bne update_cursor
dec cursor_r ; yes - stay in the last line
update_cursor:
jsr fixcursor
lda cursor_x
sta r4L
lda cursor_x+1
sta r4H
lda cursor_y
sec
sbc curHeight
sta r5L
lda #1 ; update cursor prompt position
sta r3L
jmp PosSprite
do_cr: lda #0
sta cursor_c
beq update_cursor