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