cc65/libsrc/atari5200/cputc.s

95 lines
2.2 KiB
ArmAsm

;
; adapted from Atari version
; Christian Groessler, 2014
;
; void cputcxy (unsigned char x, unsigned char y, char c);
; void cputc (char c);
;
.include "atari5200.inc"
.export _cputcxy, _cputc
.export plot, cputdirect, putchar
.import gotoxy, _mul20
.import conio_color
.importzp screen_width, screen_height
.importzp ptr4
.constructor screen_setup, 26
.import screen_setup_20x24
screen_setup = screen_setup_20x24
_cputcxy:
pha ; Save C
jsr gotoxy ; Set cursor, drop x and y
pla ; Restore C
_cputc:
cmp #$0D ; CR
bne L4
lda #0
sta COLCRS_5200
beq plot ; return
L4: cmp #$0A ; LF
beq newline
cmp #ATEOL ; Atari-EOL?
beq newline
tay
rol a
rol a
rol a
rol a
and #3
tax
tya
and #$9F
ora ataint,x
cputdirect: ; accepts screen code
jsr putchar
; advance cursor
inc COLCRS_5200
lda COLCRS_5200
cmp #screen_width
bcc plot
lda #0
sta COLCRS_5200
.export newline
newline:
inc ROWCRS_5200
lda ROWCRS_5200
cmp #screen_height
bne plot
lda #0
sta ROWCRS_5200
plot: ldy COLCRS_5200
ldx ROWCRS_5200
rts
putchar:
pha ; save char
lda ROWCRS_5200
jsr _mul20 ; destroys tmp4, carry is cleared
adc SAVMSC ; add start of screen memory
sta ptr4
txa
adc SAVMSC+1
sta ptr4+1
pla ; get char again
; and #$C0 ; without this we are compatible with the old version. user must not try to output a char >= $3F
ora conio_color
ldy COLCRS_5200
sta (ptr4),y
rts
.rodata
ataint: .byte 64,0,32,96