Initial revision
[ssr] / StraySrc / Libraries / Sapphire / sail / s / driver
1 ;
2 ; driver.s
3 ;
4 ; Test driver for Termite script language
5 ;
6 ; © 1995 Straylight
7 ;
8
9 ;----- Standard Header ------------------------------------------------------
10
11 GET libs:header
12 GET libs:swis
13
14 GET libs:stream
15
16 ;----- External dependencies ------------------------------------------------
17
18 IMPORT |Image$$RW$$Limit|
19 IMPORT |!!!TermScript$$Header$$Base|
20
21 ;----- Main code ------------------------------------------------------------
22
23 AREA |Driver$$Code|,CODE,READONLY
24 ENTRY
25
26 main ROUT
27
28 SWI OS_GetEnv
29 MOV R13,R1
30
31 SUB R3,R1,#2048
32 LDR R12,=|Image$$RW$$Limit|
33 ADD R1,R12,#512
34 SUB R3,R3,R1
35 MOV R0,#0
36 SWI OS_Heap
37 STR R1,[R12,#0]
38
39 ; --- load the file ---
40
41 SWI OS_GetEnv
42 thingy LDRB R14,[R0],#1
43 CMP R14,#32
44 BNE thingy
45 BL loadFile
46 STR R0,[R12,#4]
47
48 ADR R11,upcalls
49 LDR R10,=|!!!TermScript$$Header$$Base|
50
51 ; --- Initialise ---
52
53 ADD R2,R12,#4
54 MOV R3,R1
55 MOV R14,PC
56 ADD PC,R10,#8
57 MOV R9,R0
58
59 ; --- The main loop ---
60
61 testloop MOV R0,R9
62 CMN R0,#0
63 MOV R14,PC
64 ADD PC,R10,#12
65 BVS error
66 CMP R0,#0
67 BEQ testloop
68
69 CMP R0,#2
70 ADRLT R0,end
71 ADREQ R0,chain
72 ADRGT R0,finish
73 SWI OS_Write0
74
75 done MOV R0,R9
76 MOV R14,PC
77 ADD PC,R10,#24
78
79 SWI OS_WriteS
80 DCB "+++ Finished!!!",10,13,0
81 SWI OS_Exit
82
83 error SWI OS_WriteS
84 DCB "+++ Error: `",0
85 ADD R0,R0,#4
86 SWI OS_Write0
87 SWI OS_WriteI+'''
88 SWI OS_NewLine
89 B done
90
91 end DCB "+++ End",13,10,0
92 chain DCB "+++ Chain",13,10,0
93 finish DCB "+++ Finnish",13,10,0
94
95 LTORG
96
97 loadFile ROUT
98
99 STMFD R13!,{R0-R5,R14}
100 MOV R1,R0
101 MOV R0,#17
102 SWI OS_File
103 MOV R3,R4
104 STR R4,[R13,#4]
105 LDR R1,[R12,#0]
106 MOV R0,#2
107 SWI OS_Heap
108 MOV R3,#0
109 LDR R1,[R13,#0]
110 STR R2,[R13,#0]
111 MOV R0,#16
112 SWI OS_File
113 LDMFD R13!,{R0-R5,PC}^
114
115 upcalls B makeBeep
116 B sendRemote
117 B reportMessage
118 B printMessage
119 B sendLocal
120 B logFileAdd
121 B clearScreen
122 B download
123 B upload
124 B checkCarrier
125 MOVS PC,R14
126 B readRemote
127 B readLocal
128 MOVS PC,R14
129 MOVS PC,R14
130 MOVS PC,R14
131 MOVS PC,R14
132 MOVS PC,R14
133 MOVS PC,R14
134 MOVS PC,R14
135 MOVS PC,R14
136
137 makeBeep SWI OS_WriteS
138 DCB "+++ Beep!!!",7,10,13,0
139 MOVS PC,R14
140
141 sendRemote STMFD R13!,{R0-R3}
142 SWI OS_WriteS
143 DCB "+++ Sending out `",0
144 dosod CMP R3,#0
145 BEQ sodret
146 sodloop LDRB R0,[R2],#1
147 CMP R0,#127
148 CMPNE R0,#31
149 SWIGT OS_WriteC
150 BGT sodendl
151 SWI OS_WriteI+'['
152 AND R1,R0,#15
153 MOV R0,R0,LSR #4
154 CMP R0,#10
155 ADDCC R0,R0,#'0'
156 ADDCS R0,R0,#'A'-10
157 SWI OS_WriteC
158 CMP R1,#10
159 ADDCC R0,R1,#'0'
160 ADDCS R0,R1,#'A'-10
161 SWI OS_WriteC
162 SWI OS_WriteI+']'
163 sodendl SUBS R3,R3,#1
164 BGT sodloop
165 sodret SWI OS_WriteI+'''
166 SWI OS_NewLine
167 LDMFD R13!,{R0-R3}
168 MOVS PC,R14
169
170 reportMessage STMFD R13!,{R0,R14}
171 SWI OS_WriteS
172 DCB "+++ Reporting: `",0
173 SWI OS_Write0
174 SWI OS_WriteI+'''
175 SWI OS_NewLine
176 LDMFD R13!,{R0,PC}^
177
178 printMessage STMFD R13!,{R0,R14}
179 SWI OS_WriteS
180 DCB "+++ Printing: `",0
181 SWI OS_Write0
182 SWI OS_WriteI+'''
183 SWI OS_NewLine
184 LDMFD R13!,{R0,PC}^
185
186 sendLocal STMFD R13!,{R0-R3}
187 SWI OS_WriteS
188 DCB "+++ Sending in: `",0
189 B dosod
190
191 logFileAdd STMFD R13!,{R0,R14}
192 SWI OS_WriteS
193 DCB "+++ Adding to log: `",0
194 SWI OS_Write0
195 SWI OS_WriteI+'''
196 SWI OS_NewLine
197 LDMFD R13!,{R0,PC}^
198
199 clearScreen SWI OS_WriteS
200 DCB "+++ Clear screen",13,10,0
201 MOVS PC,R14
202
203 download STMFD R13!,{R0}
204 SWI OS_WriteS
205 DCB "+++ Download, protocol == `",0
206 MOV R0,R2
207 SWI OS_Write0
208 SWI OS_WriteS
209 DCB "', filename == `",0
210 CMP R3,#0
211 ADREQ R0,defname
212 MOVNE R0,R3
213 SWI OS_Write0
214 SWI OS_WriteI+'''
215 SWI OS_NewLine
216 LDMFD R13!,{R0}
217 MOVS PC,R14
218
219 defname DCB "<default>",0
220
221 upload STMFD R13!,{R0,R3,R14}
222 SWI OS_WriteS
223 DCB "+++ Upload, protocol == `",0
224 MOV R0,R2
225 SWI OS_Write0
226 SWI OS_WriteS
227 DCB "', files:",13,10,0
228 uploop LDRB R0,[R3],#1
229 CMP R0,#0
230 LDMEQFD R13!,{R0,R3,PC}^
231 SWI OS_WriteS
232 DCB "+++ ",0
233 upotherloop SWI OS_WriteC
234 LDRB R0,[R3],#1
235 CMP R0,#0
236 BNE upotherloop
237 SWI OS_NewLine
238 B uploop
239
240 checkCarrier SWI OS_WriteS
241 DCB "+++ Carrier detect? [yn] ",0
242 SWI OS_ReadC
243 ORR R0,R0,#&20
244 CMP R0,#'n'
245 MOVNE R0,#'y'
246 SWI OS_WriteC
247 SWI OS_NewLine
248 SUBS R0,R0,#'n'
249 MOVNE R0,#1
250 MOVS PC,R14
251
252 readLocal SWI OS_ReadC
253 MOVS PC,R14
254
255 readRemote SWI OS_ReadC
256 MOVS PC,R14
257
258 ;----- Workspace ------------------------------------------------------------
259
260 ;----- That's all, folks ----------------------------------------------------
261
262 END