Mercurial > hg > Members > kono > os9 > sbc09
view os9/level2/cmds/cat.asm @ 97:5aeff8abca9c
add echo control on sbc09
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 27 Dec 2018 01:17:31 +0900 |
parents | os9/level2/cmds/sbc09.asm@f20bf9874697 |
children | c9dc1be48de4 |
line wrap: on
line source
*******************************************************************2 * sbc09 emulator * * $Id$ * * Edt/Rev YYYY/MM/DD Modified by * Comment * ------------------------------------------------------------------ * 1 2018/08/20 S. Kono * on os9 lv2 nam Cat ttl echo test ifp1 use defsfile endc * Module header definitions tylg set Prgrm+Objct atrv set ReEnt+rev rev set $00 edition set 1 mod eom,name,tylg,atrv,start,size org 0 ioentry rmb $80 filepath rmb 2 parmptr rmb 2 stdin rmb 1 chksum rmb 1 bcount rmb 1 adr rmb 2 work rmb 2 readbuff rmb $100 org $400 size equ . name fcs /Cat/ fcb edition start clr <stdin stx <parmptr save parameter pointer stu <work save parameter pointer bsr catloop lbsr noecho bsr catloop lbsr setecho bsr catloop ldb #10 ldx <work leax readbuff bsr getline clrb os9 F$Exit catloop bsr getchar bsr putchar cmpb #C$CR bne catloop bra putcr putchar * Output one character in B register. PSHS X,Y BRA OUTCH1 getchar * Input one character into B register. PSHS A,B,X,Y GETCH0 LDA #0 LEAX 1,S LDY #1 OS9 I$Read BCS GETCH0 PULS A,B,X,Y,PC putcr * Output a newline. LDB #C$CR bsr putchar LDB #C$LF PSHS X,Y OUTCH1 PSHS A,B LEAX 1,S LDA #1 LDY #1 OS9 I$Write PULS A,B,X,Y,PC getpoll PSHS X,Y,D LDA #0 LDB #SS.Ready OS9 I$GetStt CMPB #$F6 Not Ready BNE RSENSE CLRB PULS X,Y,D,PC RSENSE ORCC #1 set carry to indicate ready RNSENSE PULS X,Y,D,PC getline * Input line at address in X, length in B. PSHS A,B,X,Y GETLN0 CLRA TFR D,Y LDA <stdin OS9 I$ReadLn BCS GETLN0 LEAY -1,Y TFR Y,D * LDA D,X * CMPA #C$CR * BNE GETLN1 * LEAY -1,Y GETLN1 STY ,S PULS A,B,X,Y,PC putline * Output string at address in X, length in B. PSHS A,B,X,Y CLRA TFR D,Y LDA <stdin OS9 I$WritLn PULS A,B,X,Y,PC setecho lda #1 bra sss noecho clra sss pshs a sta ,s LDA <stdin ldb #SS.Opt LDX <work leax readbuff,X OS9 I$GetStt bcs err2 LDA ,s STA PD.EKO-PD.OPT,X setopts ldb #SS.Opt lda <stdin OS9 I$SetStt err2 puls a,pc delay PSHS D,X * address **$21** * On input the D register contains the number of timer * ticks to wait. Each timer tick is 20ms TFR D,X OS9 F$Sleep PULS D,X,PC emod eom equ * end