Mercurial > hg > Members > kono > os9 > sbc09
annotate os9/level2/cmds/sbc09.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 | f20bf9874697 |
children | ba0af2b8836b |
rev | line source |
---|---|
86 | 1 ******************************************************************** |
2 * sbc09 emulator | |
3 * | |
4 * $Id$ | |
5 * | |
6 * Edt/Rev YYYY/MM/DD Modified by | |
7 * Comment | |
8 * ------------------------------------------------------------------ | |
9 * 1 2018/08/20 S. Kono | |
10 * Emulatoe sbc09 on os9 lv2 | |
11 | |
12 nam Sbc09 | |
13 ttl Sbc09 emulator | |
14 | |
15 ifp1 | |
16 use defsfile | |
17 endc | |
18 | |
19 * Module header definitions | |
20 tylg set Prgrm+Objct | |
21 atrv set ReEnt+rev | |
22 rev set $00 | |
23 edition set 1 | |
24 | |
25 mod eom,name,tylg,atrv,start,size | |
26 | |
27 org 0 | |
28 ioentry rmb $80 | |
29 filepath rmb 2 | |
30 parmptr rmb 2 | |
31 stdin rmb 1 | |
32 chksum rmb 1 | |
33 bcount rmb 1 | |
34 adr rmb 2 | |
91 | 35 work rmb 2 |
86 | 36 readbuff rmb $100 |
37 org $400 | |
38 emstart rmb $e000-. | |
39 size equ . | |
40 | |
41 name fcs /Sbc09/ | |
42 fcb edition | |
43 | |
44 start | |
45 clr <stdin | |
46 stx <parmptr save parameter pointer | |
91 | 47 stu <work save parameter pointer |
86 | 48 lda #READ. read access mode |
49 os9 I$Open open file | |
50 bcs L0049 branch if error | |
51 sta <filepath else save path to file | |
52 stx <parmptr and updated parm pointer | |
53 L001F lda <filepath get path | |
54 leax readbuff,u point X to read buffer | |
55 ldy #200 read up to 200 bytes | |
56 os9 I$ReadLn read it! | |
57 bcs L0035 branch if error | |
58 bsr srecords | |
59 bra L001F else exit | |
60 L0035 cmpb #E$EOF did we get an EOF error? | |
61 * bne L0049 exit if not | |
62 lda <filepath else get path | |
63 os9 I$Close and close it | |
64 bcs L0049 branch if error | |
65 * ldx <parmptr get param pointer | |
66 * lda ,x get char | |
67 * cmpa #C$CR end of command line? | |
68 * bne start branch if not | |
69 | |
70 copytbl | |
87 | 71 lda #$17 lbra |
72 sta $e400 | |
73 leax Exit,pcr | |
74 leax -$e403,x | |
75 stx $e401 | |
86 | 76 leax iotbl,pcr |
77 leay iotblend,pcr | |
78 pshs x,y | |
79 ldy #(iotblend-iotbl) | |
80 l1 ldb #$7e * JMP | |
81 stb ,u+ | |
82 ldd ,x++ | |
83 addb 1,s | |
84 adca ,s | |
85 std ,u++ | |
86 cmpx 2,s | |
91 | 87 ble l1 |
86 | 88 puls x,y |
89 jmp $400 | |
90 | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
91 Exit lbsr setecho |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
92 clrb |
86 | 93 os9 F$Exit |
94 | |
95 iotbl | |
91 | 96 fdb getchar-iotbl ; 0 |
97 fdb putchar-iotbl ; 3 | |
98 fdb getline-iotbl ; 6 | |
99 fdb putline-iotbl ; 9 | |
100 fdb putcr-iotbl ; $C | |
101 fdb getpoll-iotbl ; $F | |
102 fdb xopenin-iotbl ; $12 | |
103 fdb xopenout-iotbl ; $15 | |
104 fdb xabortin-iotbl ; $18 | |
105 fdb xclosein-iotbl ; $1B | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
106 fdb xcloseout-iotbl ; $1E |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
107 fdb delay-iotbl ; $21 |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
108 fdb noecho-iotbl ; $24 |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
109 fdb setecho-iotbl ; $27 |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
110 fdb exit-iotbl ; $2a |
86 | 111 iotblend |
112 | |
113 L0049 | |
114 err ldb #1 | |
115 bra Exit | |
116 | |
117 srecords | |
118 leax readbuff,u | |
119 clr <chksum | |
120 sline lda ,x+ | |
121 cmpa #'S' | |
122 bne slast | |
123 lda ,x+ | |
124 cmpa #'1' | |
125 bne slast | |
126 bsr gthex2 | |
127 subb #3 | |
128 stb <bcount | |
129 bsr gthex2 | |
130 stb <adr | |
131 bsr gthex2 | |
132 stb <adr+1 | |
133 lda <bcount | |
134 ldy <adr | |
135 sbyte bsr gthex2 | |
136 stb ,y+ | |
137 deca | |
138 bgt sbyte | |
139 slast | |
140 bsr gthex2 | |
141 lda <chksum | |
142 cmpa #$ff | |
143 bne err1 | |
144 err1 | |
145 rts | |
146 | |
147 gthex4 pshs d | |
148 bsr gthex2 | |
149 stb ,s | |
150 bsr gthex2 | |
151 stb 1,s | |
152 puls d,pc | |
153 | |
154 gthex2 pshs b | |
155 bsr gthex1 | |
156 aslb | |
157 aslb | |
158 aslb | |
159 aslb | |
160 stb ,s | |
161 bsr gthex1 | |
162 addb ,s | |
163 stb ,s | |
164 addb <chksum | |
165 stb <chksum | |
166 puls b,pc | |
167 | |
168 gthex1 ldb ,x+ | |
169 subb #'0' | |
170 blo rgethex1 | |
171 cmpb #9 | |
172 bls rgethex1 | |
173 subb #7 | |
174 rgethex1 | |
175 rts | |
176 | |
177 putchar * Output one character in B register. | |
178 PSHS X,Y | |
179 BRA OUTCH1 | |
180 getchar * Input one character into B register. | |
181 PSHS A,B,X,Y | |
182 GETCH0 | |
183 LDA #0 | |
184 LEAX 1,S | |
185 LDY #1 | |
186 OS9 I$Read | |
187 BCS GETCH0 | |
188 PULS A,B,X,Y,PC | |
189 putcr * Output a newline. | |
190 LDB #C$CR | |
191 bsr putchar | |
192 LDB #C$LF | |
193 PSHS X,Y | |
194 OUTCH1 PSHS A,B | |
195 LEAX 1,S | |
196 LDA #1 | |
197 LDY #1 | |
198 OS9 I$Write | |
199 PULS A,B,X,Y,PC | |
200 getpoll | |
201 PSHS X,Y,D | |
202 LDA #0 | |
203 LDB #SS.Ready | |
204 OS9 I$GetStt | |
205 CMPB #$F6 Not Ready | |
206 BNE RSENSE | |
207 CLRB | |
208 PULS X,Y,D,PC | |
209 RSENSE | |
210 ORCC #1 set carry to indicate ready | |
211 RNSENSE | |
212 PULS X,Y,D,PC | |
213 | |
214 getline * Input line at address in X, length in B. | |
215 PSHS A,B,X,Y | |
216 GETLN0 | |
217 CLRA | |
218 TFR D,Y | |
219 LDA <stdin | |
220 OS9 I$ReadLn | |
221 BCS GETLN0 | |
87 | 222 LEAY -1,Y |
223 TFR Y,D | |
86 | 224 * LDA D,X |
225 * CMPA #C$CR | |
226 * BNE GETLN1 | |
227 * LEAY -1,Y | |
228 GETLN1 STY ,S | |
229 PULS A,B,X,Y,PC | |
230 putline * Output string at address in X, length in B. | |
231 PSHS A,B,X,Y | |
232 CLRA | |
233 TFR D,Y | |
234 LDA <stdin | |
235 OS9 I$WritLn | |
236 PULS A,B,X,Y,PC | |
237 xopenin | |
238 xopenout | |
239 xabortin | |
240 xclosein | |
241 xcloseout | |
242 RTS | |
243 | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
244 setecho lda #1 |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
245 bra sss |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
246 noecho clra |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
247 sss pshs a |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
248 sta ,s |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
249 LDA <stdin |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
250 ldb #SS.Opt |
91 | 251 LDX <work |
252 leax readbuff,X | |
253 OS9 I$GetStt | |
254 bcs err2 | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
255 LDA ,s |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
256 STA PD.EKO-PD.OPT,X |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
257 setopts |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
258 ldb #SS.Opt |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
259 lda <stdin |
91 | 260 OS9 I$SetStt |
261 err2 | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
262 puls a,pc |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
263 |
91 | 264 |
86 | 265 delay PSHS D,X * address **$21** |
266 * On input the D register contains the number of timer | |
267 * ticks to wait. Each timer tick is 20ms | |
268 TFR D,X | |
269 OS9 F$Sleep | |
270 PULS D,X,PC | |
271 | |
97
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
272 exit bsr setecho |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
273 clrb |
5aeff8abca9c
add echo control on sbc09
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
94
diff
changeset
|
274 os9 F$Exit |
86 | 275 |
276 | |
277 emod | |
278 eom equ * | |
279 end |