cmp #0 ; Is the length zero?
beq L9 ; Jump if done
sta tmp1
-.ifdef DIRECT_SCREEN
L1: lda #$12+64 ; Horizontal line, screen code
-.else
-L1: lda #$12 ; Horizontal line
-.endif
jsr cputdirect ; Direct output
dec tmp1
bne L1
.export _cputcxy, _cputc
.export plot, cputdirect, putchar
.import popa, _gotoxy, mul40
+ .importzp tmp4,ptr4
+ .import _revflag
.include "atari.inc"
jsr _gotoxy ; Set cursor, drop x
pla ; Restore C
-.ifdef DIRECT_SCREEN
-
- .importzp tmp4,ptr4
- .import _revflag
-
_cputc:
cmp #$0D ; CR
bne L4
.rodata
ataint: .byte 64,0,32,96
-;****************************************************************
-.else ;***** above DIRECT_SCREEN, below thru OS ***************
-;****************************************************************
-
- .import __do_oserror,cursor,__oserror
-
-
-; Plot a character - also used as internal function
-
-_cputc: cmp #$0D ; CR?
- bne L1
- lda #0
- sta COLCRS
- beq plot ; Recalculate pointers
-
-; don't know whether this is needed. the compiler generates
-; already ATEOL chars for \n
-
-L1: cmp #$0A ; LF?
- bne L2
- lda #ATEOL
-
-; Printable char of some sort
-
-L2:
-cputdirect:
- pha
- and #$7f
- cmp #32 ; control char?
- bcs goon
- lda #$1b
- jsr putchar
-goon: pla
- jsr putchar ; Write the character to the screen
-
-plot: ldy COLCRS
- ldx ROWCRS
- rts
-
-; Write one character to the screen without doing anything else, return X
-; position in Y
-
-putchar:
-.if 0
- tax
- lda #>(retr-1)
- pha
- lda #<(retr-1)
- pha
- lda ICPTH
- pha
- lda ICPTL
- pha
- lda #0
- sta LOGCOL
- txa
- rts
-retr:
-.endif
-.if 1
- pha
- ldx #0 ; iocb #0 (screen editor)
- txa
- sta ICBLL,x
- sta ICBLH,x
- sta ICBAL,x
- sta ICBAH,x
- lda #PUTCHR
- sta ICCOM,x
- lda cursor
- beq putc7
- lda #0
- beq putc8
-putc7: lda #1
-putc8: sta CRSINH
- pla
- jsr CIOV
- bpl putc9
- jmp __do_oserror ; update system specific error code
-
-putc9: tya
- ldx #0
- stx __oserror
- ldy COLCRS
-.endif
- rts
-
-.endif ; not defined DIRECT_SCREEN