chiark / gitweb /
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