1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 17:29:50 +00:00

Added a simplistic read() that gives a stdin console on the Atmos.

This commit is contained in:
Greg King 2013-12-24 05:18:04 -05:00
parent 0adad044e7
commit d56f5d65ab
2 changed files with 71 additions and 0 deletions

View File

@ -90,6 +90,7 @@ SCREEN := $BB80
; ---------------------------------------------------------------------------
; ROM entries
GETLINE := $C592
TEXT := $EC21
HIRES := $EC33
CURSET := $F0C8

70
libsrc/atmos/read.s Normal file
View File

@ -0,0 +1,70 @@
;
; 2013-12-24, Greg King
;
; int read (int fd, void* buf, unsigned count);
;
; This function is a hack! It lets us get text from the stdin console.
;
.export _read
.import popax
.importzp ptr1, ptr2, ptr3
.macpack generic
.include "atmos.inc"
.proc _read
sta ptr3
stx ptr3+1 ; save count as result
eor #$FF
sta ptr2
txa
eor #$FF
sta ptr2+1 ; Remember -count-1
jsr popax ; get buf
sta ptr1
stx ptr1+1
jsr popax ; get fd and discard
L1: inc ptr2
bnz L2
inc ptr2+1
bze L9 ; no more room in buf
; If there are no more characters in BASIC's input buffer, then get a line from
; the console into that buffer.
L2: ldx text_count
bpl L3
jsr GETLINE
ldx #<(0 - 1)
L3: inx
lda BASIC_BUF,x
bnz L4 ; (zero-terminated buffer)
ldx #<-1
lda #$0A ; return newline char. at end of line
L4: stx text_count
ldy #0
sta (ptr1),y
inc ptr1
bnz L1
inc ptr1+1
bnz L1 ; branch always
; No error, return count.
L9: lda ptr3
ldx ptr3+1
rts
.endproc
.data
text_count:
.byte <-1