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:
parent
0adad044e7
commit
d56f5d65ab
@ -90,6 +90,7 @@ SCREEN := $BB80
|
||||
; ---------------------------------------------------------------------------
|
||||
; ROM entries
|
||||
|
||||
GETLINE := $C592
|
||||
TEXT := $EC21
|
||||
HIRES := $EC33
|
||||
CURSET := $F0C8
|
||||
|
70
libsrc/atmos/read.s
Normal file
70
libsrc/atmos/read.s
Normal 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
|
||||
|
Loading…
Reference in New Issue
Block a user