NEW AUTO 3,1 .LIST OFF *-------------------------------------- RT.NOT >PULLA ora (pStack) beq .1 lda #1 .1 dec sta (pStack) >PUSHA rts *-------------------------------------- RT.StrAdd ldx #2 jsr RT.StrPullX jsr RT.StrPull >PUSHW ZPStrBuf1 >PUSHW ZPStrBuf2 >SYSCALL strcat >PUSHWZ RVALUE in buffer clc rts *-------------------------------------- RT.StrCmp ldx #2 jsr RT.StrPullX jsr RT.StrPull >PUSHW ZPStrBuf1 >PUSHW ZPStrBuf2 >SYSCALL strcmp >PUSHYA clc rts *-------------------------------------- * on stack : Src StrID * Y,X : Dst StrID *-------------------------------------- RT.StrSet sty STRID stx STRID+1 ldy #1 lda (pStack),y ora (pStack) beq .1 >PUSHB hStrings ldy #2 lda (pStack),y >PUSHA lda (pStack),y >PUSHA >PUSHW ZPStrBuf1 >SYSCALL StrVGet .1 >PUSHB hStrings >PUSHW STRID >PUSHW ZPStrBuf1 >SYSCALL StrVSet inc pStack inc pStack rts *-------------------------------------- RT.StrOut jsr RT.StrPull ldy #S.PS.hStdOut lda (pPS),y >PUSHA >PUSHW ZPStrBuf1 >PUSHBI 0 >SYSCALL fprintf rts *-------------------------------------- RT.StrPull ldx #0 RT.StrPullX >PULLW STRID ora STRID beq .8 lda #0 sta (ZPStrBuf1,x) >PUSHB hStrings >PUSHW STRID >PUSHW ZPStrBuf1,x >SYSCALL StrVGet .8 rts *-------------------------------------- RT.IntSet sty VAR.ADDR stx VAR.ADDR+1 RT.IntUpd >PULLA sta (VAR.ADDR) >PULLA ldy #1 sta (VAR.ADDR),y rts *-------------------------------------- RT.IntGet sty VAR.ADDR stx VAR.ADDR+1 ldy #1 lda (VAR.ADDR),y >PUSHA lda (VAR.ADDR) >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 ZPStrBuf1 >PUSHW L.FMT.DATE,x >PUSHEA.G TimeBuf >PUSHEA.G TimeBuf >SYSCALL Time >SYSCALL StrFTime >PUSHWZ RVALUE in buffer rts *-------------------------------------- RT.GET jsr RT.GetChar sta (ZPStrBuf1) ldy #1 lda #0 sta (ZPStrBuf1),y >PUSHWZ RVALUE in buffer clc rts *-------------------------------------- RT.INPUT lda #0 sta (ZPStrBuf1) stz ZPPtr1 ldx #0 OUT.ELW jsr RT.OUTX .1 jsr RT.GetChar bcs .9 ldy ZPPtr1 cmp #C.SPACE bcs .7 cmp #C.CR bne .2 lda #0 sta (ZPStrBuf1),y ldx #4 OUT.CRLF jsr RT.OUTX bra .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 (ZPStrBuf1),y >SYSCALL PutChar inc ZPPtr1 bra .1 .8 ldx #2 OUT.DLW jsr RT.OUTX >PUSHWZ RVALUE in buffer clc .9 rts *-------------------------------------- RT.LEFTd >PULLB ZPPtr2 cnt inc pStack jsr RT.StrPull ldy ZPPtr2 lda #0 sta (ZPStrBuf1),y .8 >PUSHWZ RVALUE in buffer clc rts *-------------------------------------- RT.LEN jsr RT.StrPull ldy #$ff .1 iny lda (ZPStrBuf1),y bne .1 >PUSHYA rts *-------------------------------------- RT.MIDd >PULLB ZPPtr2+1 len inc pStack >PULLB ZPPtr2 start inc pStack jsr RT.StrPull ldy #0 .1 lda (ZPStrBuf1),y beq .8 iny cpy ZPPtr2 start bne .1 tya clc adc ZPStrBuf1 sta ZPPtr1 lda ZPStrBuf1+1 adc #0 sta ZPPtr1+1 ldy #$ff .3 iny cpy ZPPtr2+1 len beq .8 lda (ZPPtr1),y sta (ZPStrBuf1),y bne .3 .8 lda #0 sta (ZPStrBuf1),y .80 >PUSHWZ RVALUE in buffer clc rts *-------------------------------------- RT.RIGHTd >PULLB ZPPtr2 cnt inc pStack jsr RT.StrPull ldy #$ff .1 iny lda (ZPStrBuf1),y bne .1 tya sec sbc ZPPtr2 bcc .8 beq .8 clc adc ZPStrBuf1 sta ZPPtr1 lda ZPStrBuf1+1 adc #0 sta ZPPtr1+1 ldy #$ff .3 iny lda (ZPPtr1),y sta (ZPStrBuf1),y bne .3 .8 >PUSHWZ RVALUE in buffer clc rts *-------------------------------------- RT.STRd >PULLYA int pha >PUSHW ZPStrBuf1 >PUSHW L.MSG.INT16 pla >PUSHYA >PUSHBI 2 >SYSCALL sprintf >PUSHWZ RVALUE in buffer 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