mirror of
https://github.com/cc65/cc65.git
synced 2024-10-31 20:06:11 +00:00
d2ee1c447d
git-svn-id: svn://svn.cc65.org/cc65/trunk@3551 b7a2c559-68d2-44c3-8de9-860c34a00d81
103 lines
1.9 KiB
ArmAsm
103 lines
1.9 KiB
ArmAsm
|
|
;
|
|
; Maciej 'YTM/Elysium' Witkowiak
|
|
;
|
|
; 27.10.2001
|
|
; 06.03.2002
|
|
; 25.07.2005
|
|
|
|
; void cputcxy (unsigned char x, unsigned char y, char c);
|
|
; void cputc (char c);
|
|
|
|
; TODO:
|
|
; TAB (should be implemented)
|
|
; other special characters directly from keyboard are unsafe, though some might be
|
|
; implemented:
|
|
; HOME, UPLINE, ULINEON, ULINEOFF, REV_ON, REV_OFF, BOLDON, ITALICON, OUTLINEON, PLAINTEXT
|
|
; and cursor movement, maybe stuff like INSERT too
|
|
;
|
|
; these must be ignored:
|
|
; ESC_GRAPHICS, ESC_RULER, GOTOX, GOTOY, GOTOXY, NEWCARDSET, all 1..8
|
|
;
|
|
; note that there are conflicts between control characters and keyboard:
|
|
; HOME = KEY_ENTER, KEY_HOME = REV_ON,
|
|
; UPLINE = ?, KEY_UPARROW = GOTOY, ...
|
|
|
|
.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 0-31 are not safe for PutChar
|
|
cmp #$20
|
|
bcs L1
|
|
cmp #CR
|
|
beq do_cr
|
|
cmp #LF
|
|
beq do_lf
|
|
cmp #KEY_DELETE
|
|
bne L0
|
|
ldx #BACKSPACE
|
|
sec
|
|
bcs L2
|
|
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
|