NEW AUTO 3,1 .LIST OFF *-------------------------------------- RT.NOT lda (pStack) inc ora (pStack) beq .1 lda #1 .1 dec sta (pStack) >PUSHA rts *-------------------------------------- RT.StrAdd >DEBUG inc pStack inc pStack clc rts *-------------------------------------- RT.StrSet >PUSHB hStrings txa >PUSHA tya >PUSHA ldy #4 lda (pStack),y >PUSHA lda (pStack),y >PUSHA >SYSCALL StrVSet inc pStack inc pStack rts *-------------------------------------- RT.StrGet lda #0 sta (ZPStrBuf) >PUSHB hStrings txa >PUSHA tya >PUSHA >PUSHW ZPStrBuf >SYSCALL StrVGet >PUSHW ZPStrBuf rts *-------------------------------------- RT.StrOut ldy #S.PS.hStdOut lda (pPS),y >PUSHA ldy #2 lda (pStack),y >PUSHA lda (pStack),y >PUSHA >PUSHBI 0 >SYSCALL fprintf inc pStack inc pStack rts *-------------------------------------- RT.IntSet sty ZPADDR stx ZPADDR+1 >PULLA sta (ZPADDR) >PULLA ldy #1 sta (ZPADDR),y rts *-------------------------------------- RT.IntGet sty ZPADDR stx ZPADDR+1 ldy #1 lda (ZPADDR),y >PUSHA lda (ZPADDR) >PUSHA rts *-------------------------------------- RT.IntOut >PUSHW L.MSG.INT16 ldy #3 lda (pStack),y >PUSHA lda (pStack),y >PUSHA >PUSHBI 2 >SYSCALL PrintF inc pStack inc pStack rts *-------------------------------------- RT.DATEd ldx #0 bra RT.TIMEd.1 RT.TIMEd ldx #2 RT.TIMEd.1 >PUSHW ZPStrBuf >PUSHW L.FMT.DATE,x >PUSHEA.G TimeBuf >PUSHEA.G TimeBuf >SYSCALL Time >SYSCALL StrFTime >PUSHW ZPStrBuf rts *-------------------------------------- RT.GET jsr RT.GetChar sta (ZPStrBuf) ldy #1 lda #0 sta (ZPStrBuf),y bra RT.INPUT.8 *-------------------------------------- RT.INPUT lda #0 sta (ZPStrBuf) stz ZPPtr1 ldx #0 OUT.ELW jsr RT.OUTX .1 jsr RT.GetChar bcs RT.INPUT.9 ldy ZPPtr1 cmp #C.SPACE bcs .7 cmp #C.CR bne .2 lda #0 sta (ZPStrBuf),y ldx #4 OUT.CRLF jsr RT.OUTX bra RT.INPUT.8 .2 cmp #C.BS bne .1 cpy #0 beq .1 ldx 6 OUT.BSSPBS jsr RT.OUTX dec ZPPtr1 bra .1 .7 cpy #255 bcs .1 sta (ZPStrBuf),y >SYSCALL PutChar inc ZPPtr1 bra .1 RT.INPUT.8 ldx #2 OUT.DLW jsr RT.OUTX >PUSHW ZPStrBuf clc RT.INPUT.9 rts *-------------------------------------- RT.LEFTd >PULLB ZPPtr2 cnt inc pStack >PULLW ZPPtr1 src str ldy #0 .1 lda (ZPPtr1),y sta (ZPStrBuf),y beq .8 iny cpy ZPPtr2 bne .1 lda #0 sta (ZPStrBuf),y .8 >PUSHW ZPStrBuf clc rts *-------------------------------------- RT.LEN >PULLYA str >SYSCALL strlen >PUSHYA rts *-------------------------------------- RT.MIDd >PULLA len tax inc pStack >PULLB ZPPtr2 start inc pStack >PULLW ZPPtr1 src str ldy #0 .1 lda (ZPPtr1),y beq .8 iny cpy ZPPtr2 bne .1 tya clc adc ZPPtr1 sta ZPPtr1 bcc .2 inc ZPPtr1+1 .2 ldy #0 .3 txa beq .8 lda (ZPPtr1),y sta (ZPStrBuf),y beq .80 iny dex bne .3 txa .8 sta (ZPStrBuf),y .80 >PUSHW ZPStrBuf clc rts *-------------------------------------- RT.RIGHTd >PULLB ZPPtr2 cnt inc pStack >PULLW ZPPtr1 src str ldy #$ff .1 iny lda (ZPPtr1),y bne .1 tya sec sbc ZPPtr2 bcc .8 beq .8 clc adc ZPPtr1 sta ZPPtr1 bcc .2 inc ZPPtr1+1 .2 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPStrBuf),y bne .3 .8 >PUSHW ZPStrBuf clc rts *-------------------------------------- RT.STRd >PULLYA int pha >PUSHW ZPStrBuf >PUSHW L.MSG.INT16 pla >PUSHYA >PUSHBI 2 >SYSCALL sprintf >PUSHW ZPStrBuf rts *-------------------------------------- RT.VAL >PULLYA str >SYSCALL atoi >PUSHYA rts *-------------------------------------- RT.OUTCRLF ldx #4 CRLF RT.OUTX ldy #S.PS.hStdOut lda (pPS),y >PUSHA >PUSHW L.OUT,x >SYSCALL FPutS rts *-------------------------------------- * TODO: handle lost conn CS and remap VT100 ESC codes *-------------------------------------- RT.GetChar >SYSCALL GetChar cmp #C.CR bne .8 >SYSCALL GetChar LF lda #C.CR .8 clc rts *-------------------------------------- MAN SAVE usr/src/bin/acos.s.rt LOAD usr/src/bin/acos.s ASM