comparison src/os9/level2/cmds/sbc09.asm @ 86:4967d1acd34a

add sbc09.asm
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 20 Aug 2018 00:48:11 +0900
parents
children 60e629904ad6
comparison
equal deleted inserted replaced
85:4652761a60f9 86:4967d1acd34a
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
35 readbuff rmb $100
36 org $400
37 emstart rmb $e000-.
38 size equ .
39
40 name fcs /Sbc09/
41 fcb edition
42
43 start
44 clr <stdin
45 stx <parmptr save parameter pointer
46 lda #READ. read access mode
47 os9 I$Open open file
48 bcs L0049 branch if error
49 sta <filepath else save path to file
50 stx <parmptr and updated parm pointer
51 L001F lda <filepath get path
52 leax readbuff,u point X to read buffer
53 ldy #200 read up to 200 bytes
54 os9 I$ReadLn read it!
55 bcs L0035 branch if error
56 bsr srecords
57 bra L001F else exit
58 L0035 cmpb #E$EOF did we get an EOF error?
59 * bne L0049 exit if not
60 lda <filepath else get path
61 os9 I$Close and close it
62 bcs L0049 branch if error
63 * ldx <parmptr get param pointer
64 * lda ,x get char
65 * cmpa #C$CR end of command line?
66 * bne start branch if not
67
68 copytbl
69 leax iotbl,pcr
70 leay iotblend,pcr
71 pshs x,y
72 ldy #(iotblend-iotbl)
73 l1 ldb #$7e * JMP
74 stb ,u+
75 ldd ,x++
76 addb 1,s
77 adca ,s
78 std ,u++
79 cmpx 2,s
80 bne l1
81 puls x,y
82 jmp $400
83
84 Exit clrb
85 os9 F$Exit
86
87 iotbl
88 fdb getchar-iotbl
89 fdb putchar-iotbl
90 fdb getline-iotbl
91 fdb putline-iotbl
92 fdb putcr-iotbl
93 fdb getpoll-iotbl
94 fdb xopenin-iotbl
95 fdb xopenout-iotbl
96 fdb xabortin-iotbl
97 fdb xclosein-iotbl
98 fdb xcloseout-iotbl
99 fdb delay-iotbl
100 iotblend
101
102 L0049
103 err ldb #1
104 bra Exit
105
106 srecords
107 leax readbuff,u
108 clr <chksum
109 sline lda ,x+
110 cmpa #'S'
111 bne slast
112 lda ,x+
113 cmpa #'1'
114 bne slast
115 bsr gthex2
116 subb #3
117 stb <bcount
118 bsr gthex2
119 stb <adr
120 bsr gthex2
121 stb <adr+1
122 lda <bcount
123 ldy <adr
124 sbyte bsr gthex2
125 stb ,y+
126 deca
127 bgt sbyte
128 slast
129 bsr gthex2
130 lda <chksum
131 cmpa #$ff
132 bne err1
133 err1
134 rts
135
136 gthex4 pshs d
137 bsr gthex2
138 stb ,s
139 bsr gthex2
140 stb 1,s
141 puls d,pc
142
143 gthex2 pshs b
144 bsr gthex1
145 aslb
146 aslb
147 aslb
148 aslb
149 stb ,s
150 bsr gthex1
151 addb ,s
152 stb ,s
153 addb <chksum
154 stb <chksum
155 puls b,pc
156
157 gthex1 ldb ,x+
158 subb #'0'
159 blo rgethex1
160 cmpb #9
161 bls rgethex1
162 subb #7
163 rgethex1
164 rts
165
166 putchar * Output one character in B register.
167 PSHS X,Y
168 BRA OUTCH1
169 getchar * Input one character into B register.
170 PSHS A,B,X,Y
171 GETCH0
172 LDA #0
173 LEAX 1,S
174 LDY #1
175 OS9 I$Read
176 BCS GETCH0
177 PULS A,B,X,Y,PC
178 putcr * Output a newline.
179 LDB #C$CR
180 bsr putchar
181 LDB #C$LF
182 PSHS X,Y
183 OUTCH1 PSHS A,B
184 LEAX 1,S
185 LDA #1
186 LDY #1
187 OS9 I$Write
188 PULS A,B,X,Y,PC
189 getpoll
190 PSHS X,Y,D
191 LDA #0
192 LDB #SS.Ready
193 OS9 I$GetStt
194 CMPB #$F6 Not Ready
195 BNE RSENSE
196 CLRB
197 PULS X,Y,D,PC
198 RSENSE
199 ORCC #1 set carry to indicate ready
200 RNSENSE
201 PULS X,Y,D,PC
202
203 getline * Input line at address in X, length in B.
204 PSHS A,B,X,Y
205 GETLN0
206 CLRA
207 TFR D,Y
208 LDA <stdin
209 OS9 I$ReadLn
210 BCS GETLN0
211 * TFR Y,D
212 * LDA D,X
213 * CMPA #C$CR
214 * BNE GETLN1
215 * LEAY -1,Y
216 GETLN1 STY ,S
217 PULS A,B,X,Y,PC
218 putline * Output string at address in X, length in B.
219 PSHS A,B,X,Y
220 CLRA
221 TFR D,Y
222 LDA <stdin
223 OS9 I$WritLn
224 PULS A,B,X,Y,PC
225 xopenin
226 xopenout
227 xabortin
228 xclosein
229 xcloseout
230 RTS
231
232 delay PSHS D,X * address **$21**
233 * On input the D register contains the number of timer
234 * ticks to wait. Each timer tick is 20ms
235 TFR D,X
236 OS9 F$Sleep
237 PULS D,X,PC
238 org $400
239 lbra Exit
240
241
242
243
244 emod
245 eom equ *
246 end