NEW
  AUTO 3,1
				.LIST OFF
				.OP	65C02
				.OR	$2000
				.TF bin/term
*--------------------------------------
				.INB inc/macros.i
				.INB inc/a2osx.i
*--------------------------------------
TIMEOUT.MAX		.EQ 200					20 sec.
BUFSIZE			.EQ 256
*--------------------------------------
				.DUMMY
				.OR ZPBIN
ZS.START
ZPBufPtr		.BS 2
ZPDataLen		.BS 2
hBuf			.BS 1
hDev			.BS 1
TimeOut			.BS 1
ZS.END			.ED
*--------------------------------------
*			File Header (16 Bytes)
*--------------------------------------
CS.START		cld
				jmp (.1,x)
				.DA #$61				6502,Level 1 (65c02)
				.DA #1					BIN Layout Version 1
				.DA #S.PS.F.EVENT		S.PS.F
				.DA #0
				.DA CS.END-CS.START		Code Size (without Constants)
				.DA DS.END-DS.START		Data Segment Size
				.DA #32					Stack Size
				.DA #ZS.END-ZS.START	Zero Page Size
				.DA 0
*--------------------------------------
.1				.DA CS.INIT
				.DA CS.RUN
				.DA CS.DOEVENT
				.DA	CS.QUIT
L.MSG.USAGE		.DA MSG.USAGE
L.MSG.DEVOK		.DA MSG.DEVOK
				.DA 0
*--------------------------------------
CS.INIT			clc
				rts
*--------------------------------------
CS.RUN			lda #1
				>SYSCALL ArgV
				bcs .9

				>PUSHYA
				>PUSHBI O.RDWR
				>PUSHBI 0				type
				>PUSHWZ					auxtype
				>SYSCALL FOpen
				bcs .99

				sta hDev
				>LDYA L.MSG.DEVOK
				>SYSCALL PutS

				>LDYAI BUFSIZE
				>SYSCALL GetMem
				bcs .99

				>STYA ZPBufPtr
				stx hBuf

				bra CS.RUN.LOOP

.9				>LDYA L.MSG.USAGE
				>SYSCALL PutS

				lda #E.SYN
				sec
.99
CS.RUN.RTS		rts
*--------------------------------------
CS.RUN.LOOP		>SLEEP

				lda hDev
				>SYSCALL FEOF
				bcs .9

				tay
				bne .1					EOF, no char

				lda hDev
				jsr CS.Read
				bcs CS.RUN.RTS

				>STYA ZPDataLen
				
				ldy #S.PS.hStdOut
				lda (pPS),y
				jsr CS.Write
				bcs .9

.1				ldy #S.PS.hStdIn
				lda (pPS),y

				>SYSCALL FEOF
				bcs .9

				tay
				bne CS.RUN.LOOP			EOF = true, no char from STDIN

				ldy #S.PS.hStdIn
				lda (pPS),y
				jsr CS.Read
				bcs .9

				>STYA ZPDataLen
				
				lda (ZPBufPtr)
				eor #$14				Ctrl-T
				sec
				beq .9					exit with A=0,CS

				lda hDev
				jsr CS.Write
				bcc CS.RUN.LOOP
				
.9				rts
*--------------------------------------
CS.Read			>PUSHA
				>PUSHW ZPBufPtr
				>PUSHWI BUFSIZE
				>SYSCALL FRead
				rts
*--------------------------------------
CS.Write		>PUSHA
				>PUSHW ZPBufPtr
				>PUSHW ZPDataLen
				>SYSCALL FWrite
				rts
*--------------------------------------
CS.DOEVENT		lda (pEvent)
				bpl .9					is it a TIMER event?

				lda TimeOut
				beq .9

				dec TimeOut
.9				sec						do not discard TIMER event
				rts
*--------------------------------------
CS.QUIT			lda hDev
				beq .1

				>SYSCALL FClose

.1				lda hBuf
				beq .2

				>SYSCALL FreeMem

.2				clc
				rts
*--------------------------------------
CS.END
MSG.USAGE		.AZ "Usage : TERM device"
MSG.DEVOK		.AZ "Connected (Exit key is Ctrl-T)"
*--------------------------------------
				.DUMMY
				.OR 0
DS.START
DS.END			.ED
*--------------------------------------
MAN
SAVE usr/src/bin/term.s
ASM
