Pristine Ack-5.5
[Ack-5.5.git] / mach / arm / libmon / libmon_s.a
1 eÿsvc.s\0\0\0\0\0\0\0\0\0\0\0\0\0\ 2\ 2¤\ 1\0\0\9c+.define _EmMon, _EmTrp
2  
3 .sect .text
4  
5 _EmMon:
6  LDR R11,[R12]
7  CMP R11,#1
8  BNE _2
9 !
10 ! EXIT
11 !
12  LDR R2,[R12,#4]
13  MOV R1,#0x41
14  ADD R1,R1,#0x4200
15  ADD R1,R1,#0x450000
16  ADD R1,R1,#0x58000000
17  SWI 17  ! os_exit
18 _2:
19  CMP R11,#3
20  BNE _3
21 !
22 ! READ
23 !
24  MOV R0,#4
25  LDR R1,[R12,#4]  !fildes
26  CMP R1,#5
27  BGE _22
28 !
29 ! READ FROM THE KEYBOARD
30 !
31  LDR R0,[R12,#8]  !buffer
32  MOV R10,R0
33  LDR R1,[R12,#12]  ! char count
34  CMP R1,#256
35  MOV.CS R1,#255   !OS_Readline max
36  MOV R2,#0
37  MOV R3,#126
38  SWI 14  !OS_READLINE
39 ! CR TO LF
40  LDR.B R0,[R10,R1]
41  CMP R0,#13
42  BNE _23
43  MOV R0,#10
44  STR.B R0,[R10,R1]
45 _23:
46  ADD R1,R1,#1 ! INC BUFFER COUNT
47  STMFD R12<,{R1}
48  MOV R0,#0
49  STMFD R12<,{R0}
50  MOV R15,R14
51 _22:
52 ! READ FROM A FILE
53  LDR R2,[R12,#8]
54  LDR R3,[R12,#12]
55  STR R5,_savreg
56  STR R4,_savreg2
57  MOV R5,R3
58  SWI 12  !os_gbpb
59  SUB R5,R5,R3
60  STMFD R12<,{R5}
61  MOV R5,#0
62  STMFD R12<,{R5}
63  LDR R5,_savreg
64  LDR R4,_savreg2
65  MOV R15,R14
66 _3:
67  CMP R11,#4
68  BNE _4
69 !
70 ! WRITE
71 !
72  LDR R1,[R12,#4]
73  CMP R1,#5
74  BGE _33
75 ! WRITE TO THE SCREEN
76  LDR R0,[R12,#8]
77  LDR R1,[R12,#12]
78  SWI 70  !os_writeN
79 ! APPEND CR TO LINE ENDING WITH LF
80  LDR R0,[R12,#12]
81  SUB R0,R0,#1
82  LDR R1,[R12,#8]
83  LDR.B R2,[R1,R0]
84  CMP R2,#10
85  SWI.EQ 269  !OUTPUT CR
86  LDR R1,[R12,#12]
87  STMFD R12<,{R1}
88  MOV R1,#0
89  STMFD R12<,{R1}
90  MOV R15,R14
91 _33:
92 ! WRITE TO A FILE
93  MOV R0,#2
94  LDR R2,[R12,#8]
95  LDR R3,[R12,#12]
96  STR R5,_savreg
97  STR R4,_savreg2
98  SWI 12  !os_gbpb
99  LDR R1,[R12,#12]   !always success
100  STMFD R12<,{R1}
101  LDR R5,_savreg
102  LDR R4,_savreg2
103  MOV R0,#0
104  STMFD R12<,{R0}
105  MOV R15,R14
106 _4:
107  CMP R11,#5
108  BNE _5
109 !
110 ! OPEN
111 !
112  LDR R2,[R12,#8]
113  CMP R2,#0
114  BNE _46
115  MOV R0,#67  !READ ONLY
116  BAL _45
117 _46:
118  CMP R2,#2
119  BNE _44
120  MOV R0,#195  !UPDATE, FILE MUST EXIST
121  BAL _45
122 _44:
123  MOV R0,#131  !CREATE AND OPEN FOR UPDATE
124 _45:
125  LDR R1,[R12,#4]  !FILE NAME
126  MOV R2,#0  !NO PATH
127  SWI 0x2000D  !Xos_find
128  MOV.VS R0,#0
129  CMP R0,#0 !MAP ERROR CODES
130  MOV.EQ R0,#-1
131  STMFD R12<,{R0}
132  MOV R2,#0
133  STMFD R12<,{R2}
134  MOV R15,R14
135 _5:
136  CMP R11,#6
137  BNE _6
138 !
139 ! CLOSE
140 !
141  MOV R0,#0
142  LDR R1,[R12,#4]
143  CMP R1,#5
144  BLT _51  !IGNORE IF NOT FILE
145  SWI 0x2000D  !Xos_find (IGNORE ERRORS)
146 _51:
147  MOV R0,#0
148 ! STMFD R12<,{R0}  !not sure...
149  STMFD R12<,{R0}
150  MOV R15,R14
151 _6:
152  CMP R11,#8
153  BNE _7
154 !
155 ! CREAT
156 !
157  BAL _44
158 _7:
159  CMP R11,#10
160  BNE _8
161 !
162 ! UNLINK
163 !
164 ! note that on UNIX, unlink may be
165 ! done on an open file. This would
166 ! cause an error on RiscOs, which is ignored
167  MOV R0,#6
168  LDR R1,[R12,#4]
169  STR R5,_savreg
170  STR R4,_savreg2
171  CMP R1,#5
172  SWI.GE 0x20008  !os_file
173  LDR R5,_savreg
174  LDR R4,_savreg2
175  MOV R8,#0
176 ! STMFD R12<,{R8}  ! not sure...
177  STMFD R12<,{R8}
178  MOV R15,R14
179 _8:
180  CMP R11,#12
181  BNE _9
182 !
183 ! CHDIR
184 !
185  MOV R0,#0
186  LDR R1,[R12,#4]
187  SWI 41  !os_fscontrol
188  MOV R0,#0
189  STMFD R12<,{R0}  !not sure...
190  STMFD R12<,{R0}
191  MOV R15,R14
192 _9:
193  CMP R11,#19
194  BNE _10
195 !
196 ! LSEEK
197 !
198  MOV R0,#0  !FIRST GET CURRENT PTR
199  LDR R1,[R12,#4]
200  SWI 9  !OS_ARGS
201  MOV R11,R2
202  LDR R3,[R12,#12]  !NOW DO THE LSEEK
203  CMP R3,#2
204  BEQ _92
205  CMP R3,#1
206  BEQ _91
207  LDR R1,[R12,#4]
208  LDR R2,[R12,#8]
209 _90:
210  MOV R0,#1
211  SWI 9  !os_args
212  BAL _99
213 _92:
214  MOV R0,#2
215  LDR R1,[R12,#4]
216  SWI 9  !os_args
217  LDR R8,[R12,#8]
218  ADD R2,R2,R8
219  LDR R1,[R12,#4]
220  BAL _90
221 _91:
222  MOV R0,#0
223  LDR R1,[R12,#4]
224  SWI 9  !os_args
225  LDR R3,[R12,#8]
226  ADD R2,R1,R3
227  BAL _90
228 _99:
229  STMFD R12<,{R11}
230  MOV R0,#0
231  STMFD R12<,{R0}
232  MOV R15,R14
233 _10:
234  CMP R11, #54
235  BNE _1001
236 !
237 ! IOCTL
238 ! always returns 0
239 !
240  MOV R0, #0
241  STMFD R12<, {R0}
242  MOV R15, R14
243 !
244 ! TIMES
245 !
246 _1001:
247  CMP R11, #43
248  BNE _1003
249  ADR R1,_17
250  MOV R0,#3
251  STR R0,[R1]
252  MOV R0,#14
253  SWI 7  !OS_WORD
254  ADR R0,_17
255  LDR R0,[R0]
256  MOV R1,#0
257  LDR R2,[R12,#4]
258  STR R0,[R2]
259  STR R0,[R2,#4] ! utime = stime
260  STR R1,[R2,#8]
261  STR R1,[R2,#12]
262  STMFD R12<,{R1}
263  MOV R15,R14
264 !
265 ! GETPID
266 ! returns random number (clock ticks)
267 !
268 _1003:
269  CMP R11, #20
270  BNE _1002
271  ADR R1,_17
272  MOV R0,#3
273  STR R0,[R1]
274  MOV R0,#14
275  SWI 7  !OS_WORD
276  ADR R0,_17
277  LDR R0,[R0]
278  AND R0,R0,#0xFF
279  STMFD R12<,{R0}
280  MOV R15,R14
281 !
282 ! EXECE
283 ! ONLY FIRST PARAMETER IS USED
284 !
285 _1002:
286  CMP R11, #59
287  BNE _1000
288  LDR R0,[R12,#4]
289  SWI 5  !OS_CLI
290  MOV R0,#0
291  STMFD R12<,{R0}
292  MOV R15,R14
293
294 ! NOT IMPLEMENTED CALLS
295 ! ---------------------
296 ! THESE CALLS MAY REQUIRE DIFFERENT
297 ! STACK HANDLING (THERE MAY BE BUGS HERE!!)
298 ! (the number of return values does not always
299 ! correspond to the Ack manual)
300 !
301 _1000:
302  CMP R11,#7
303  BNE _9726
304  ADR R0,_9607
305  BAL _9352
306 _9726:
307  CMP R11,#26
308  BNE _9727
309  ADR R0,_9626
310  BAL _9352
311 _9727:
312  CMP R11,#27
313  BNE _9741
314  ADR R0,_9627
315  BAL _9352
316 _9741:
317  CMP R11,#41
318  BNE _9742
319  ADR R0,_9641
320  BAL _9352
321 _9742:
322  CMP R11,#42
323  BNE _9748
324  ADR R0,_9642
325  BAL _9352
326 _9748:
327  CMP R11,#48
328  BNE _9760
329  ADR R0,_9648
330  BAL _9352
331 _9760:
332  CMP R11,#60
333  BNE _9709
334  ADR R0,_9660
335  BAL _9352
336 _9709:
337  CMP R11,#9
338  BNE _9714
339  ADR R0,_9609
340  BAL _9351
341 _9714:
342  CMP R11,#14
343  BNE _9715
344  ADR R0,_9614
345  BAL _9351
346 _9715:
347  CMP R11,#15
348  BNE _9716
349  ADR R0,_9615
350  BAL _9351
351 _9716:
352  CMP R11,#16
353  BNE _9718
354  ADR R0,_9616
355  BAL _9351
356 _9718:
357  CMP R11,#18
358  BNE _9720
359  ADR R0,_9618
360  BAL _9351
361 _9720:
362  CMP R11,#20
363  BNE _9721
364  ADR R0,_9620
365  BAL _9351
366 _9721:
367  CMP R11,#21
368  BNE _9722
369  ADR R0,_9621
370  BAL _9351
371 _9722:
372  CMP R11,#22
373  BNE _9723
374  ADR R0,_9622
375  BAL _9351
376 _9723:
377  CMP R11,#23
378  BNE _9724
379  ADR R0,_9623
380  BAL _9351
381 _9724:
382  CMP R11,#24
383  BNE _9725
384  ADR R0,_9624
385  BAL _9351
386 _9725:
387  CMP R11,#25
388  BNE _9728
389  ADR R0,_9625
390  BAL _9351
391 _9728:
392  CMP R11,#28
393  BNE _9729
394  ADR R0,_9628
395  BAL _9351
396 _9729:
397  CMP R11,#29
398  BNE _9730
399  ADR R0,_9629
400  BAL _9351
401 _9730:
402  CMP R11,#30
403  BNE _9733
404  ADR R0,_9630
405  BAL _9351
406 _9733:
407  CMP R11,#33
408  BNE _9734
409  ADR R0,_9633
410  BAL _9351
411 _9734:
412  CMP R11,#34
413  BNE _9735
414  ADR R0,_9634
415  BAL _9351
416 _9735:
417  CMP R11,#35
418  BNE _9736
419  ADR R0,_9635
420  BAL _9351
421 _9736:
422  CMP R11,#36
423  BNE _9737
424  ADR R0,_9636
425  BAL _9351
426 _9737:
427  CMP R11,#37
428  BNE _9744
429  ADR R0,_9637
430  BAL _9351
431 _9744:
432  CMP R11,#44
433  BNE 9746
434  ADR R0,_9644
435  BAL _9351
436 _9746:
437  CMP R11,#46
438  BNE 9747
439  ADR R0,_9646
440  BAL _9351
441 _9747:
442  CMP R11,#47
443  BNE 9751
444  ADR R0,_9647
445  BAL _9351
446 _9751:
447  CMP R11,#51
448  BNE 9753
449  ADR R0,_9651
450  BAL _9351
451 _9753:
452  CMP R11,#53
453  BNE 9756
454  ADR R0,_9653
455  BAL _9351
456 _9756:
457  CMP R11,#56
458  BNE 9761
459  ADR R0,_9656
460  BAL _9351
461 _9761:
462  ADR R0,_9661
463  BAL _9351
464
465  
466 .sect .data
467 _14:
468 .data4 0
469 .data4 0
470 _15:
471 .asciz "Monitor call "
472 .data4 0
473 .align 4
474 _16:
475 .asciz ": not implemented"
476 .data4 0
477 .align 4
478 _17:
479 .data4 3
480 .data4 0
481 .align 4
482
483 .sect .text
484
485 _EmTrp:
486  SWI 3  !OS_NEWLINE
487  LDR R11,[R12]
488 !
489 ! deal with ignore mask here
490 ! (not yet implemented)
491 !
492  CMP R11,#0
493  BNE _9101
494  ADR R0,_9000
495  BAL _9200
496 _9101:
497  CMP R11,#1
498  BNE _9102
499  ADR R0,_9001
500  BAL _9200
501 _9102:
502  CMP R11,#2
503  BNE _9103
504  ADR R0,_9002
505  BAL _9200
506 _9103:
507  CMP R11,#3
508  BNE _9104
509  ADR R0,_9003
510  BAL _9200
511 _9104:
512  CMP R11,#4
513  BNE _9105
514  ADR R0,_9004
515  BAL _9200
516 _9105:
517  CMP R11,#5
518  BNE _9106
519  ADR R0,_9005
520  BAL _9200
521 _9106:
522  CMP R11,#6
523  BNE _9107
524  ADR R0,_9006
525  BAL _9200
526 _9107:
527  CMP R11,#7
528  BNE _9108
529  ADR R0,_9007
530  BAL _9200
531 _9108:
532  CMP R11,#8
533  BNE _9109
534  ADR R0,_9008
535  BAL _9200
536 _9109:
537  CMP R11,#9
538  BNE _9110
539  ADR R0,_9009
540  BAL _9200
541 _9110:
542  CMP R11,#10
543  BNE _9111
544  ADR R0,_9010
545  BAL _9200
546 _9111:
547  CMP R11,#11
548  BNE _9112
549  ADR R0,_9011
550  BAL _9200
551 _9112:
552  CMP R11,#12
553  BNE _9113
554  ADR R0,_9012
555  BAL _9200
556 _9113:
557  CMP R11,#13
558  BNE _9114
559  ADR R0,_9013
560  BAL _9200
561 _9114:
562  CMP R11,#14
563  BNE _9115
564  ADR R0,_9014
565  BAL _9200
566 _9115:
567  CMP R11,#15
568  BNE _9116
569  ADR R0,_9015
570  BAL _9200
571 _9116:
572  CMP R11,#16
573  BNE _9117
574  ADR R0,_9016
575  BAL _9200
576 _9117:
577  CMP R11,#17
578  BNE _9118
579  ADR R0,_9017
580  BAL _9200
581 _9118:
582  CMP R11,#18
583  BNE _9119
584  ADR R0,_9018
585  BAL _9200
586 _9119:
587  CMP R11,#19
588  BNE _9120
589  ADR R0,_9019
590  BAL _9200
591 _9120:
592  CMP R11,#20
593  BNE _9121
594  ADR R0,_9020
595  BAL _9200
596 _9121:
597  CMP R11,#21
598  BNE _9122
599  ADR R0,_9021
600  BAL _9200
601 _9122:
602  CMP R11,#22
603  BNE _9123
604  ADR R0,_9022
605  BAL _9200
606 _9123:
607  CMP R11,#23
608  BNE _9124
609  ADR R0,_9023
610  BAL _9200
611 _9124:
612  CMP R11,#24
613  BNE _9125
614  ADR R0,_9024
615  BAL _9200
616 _9125:
617  CMP R11,#25
618  BNE _9126
619  ADR R0,_9025
620  BAL _9200
621 _9126:
622  CMP R11,#26
623  BNE _9127
624  ADR R0,_9026
625  BAL _9200
626 _9127:
627  CMP R11,#27
628  BNE _9128
629  ADR R0,_9027
630  BAL _9200
631 _9128:
632  CMP R11,#127
633  BGT _9129
634  ADR R0,_9028
635  SWI 2  !OS_WRITE0
636  MOV R0,R11
637  ADR R1,_12
638  MOV R2,#5
639  SWI 217  !CONVERT
640  SUB R1,R1,R0
641  SWI 70  !WRITEN
642  BAL _9300
643 _9129:
644  ADR R0,_11
645  SWI 2  !OS_WRITE0
646  MOV R0,R11
647  ADR R1,_12
648  MOV R2,#5
649  SWI 217  !CONVERT
650  SUB R1,R1,R0
651  SWI 70  !WRITEN
652  BAL _9300
653 _9200: SWI 2
654 _9300:
655  ADR R0, _Lineno
656  LDR R0,[R0]
657  CMP R0,#0
658  BEQ _9301
659  MOV R10,R0
660  ADR R0,_9050
661  SWI 2
662  MOV R0,R10
663  ADR R1,_12
664  MOV R2,#5
665  SWI 217
666  SUB R1,R1,R0
667  SWI 70
668  SWI 3
669  BAL _9302
670 _9301:
671  ADR R0,_9501
672  SWI 2
673  SWI 3
674 _9302:
675  MOV R0,#1
676  STMFD R12<,{R0}
677  STMFD R12<,{R0}
678  BAL.L _EmMon
679 _9351:
680  SWI 2  !WRITE0
681  ADR R0,_16
682  SWI 2 !OS_WRITE0
683  SWI 3 !NEWLINE
684  MOV R0, #0
685  STMFD R12<,{R0}
686  MOV R15,R14
687 _9352:
688  SWI 2  !WRITE0
689  ADR R0,_16
690  SWI 2 !OS_WRITE0
691  SWI 3 !NEWLINE
692  MOV R0, #0
693  STMFD R12<,{R0}
694  STMFD R12<,{R0}
695  MOV R15,R14
696
697
698 .sect.data
699 _11:
700 .asciz "Trap "
701 .align 4
702 _12:
703 .data4 0
704 .data4 0
705 _9000:
706 .asciz "Array bound error "
707 .align 4
708 _9001:
709 .asciz "Range bound error "
710 .align 4
711 _9002:
712 .asciz "Set bound error "
713 .align 4
714 _9003:
715 .asciz "Integer overflow "
716 .align 4
717 _9004:
718 .asciz "Floating overflow "
719 .align 4
720 _9005:
721 .asciz "Floating underflow "
722 .align 4
723 _9006:
724 .asciz "Divide by 0 "
725 .align 4
726 _9007:
727 .asciz "Divide by 0.0 "
728 .align 4
729 _9008:
730 .asciz "Undefined integer "
731 .align 4
732 _9009:
733 .asciz "Undefined float "
734 .align 4
735 _9010:
736 .asciz "Conversion error "
737 .align 4
738 _9011:
739 .asciz "unknown trap "
740 .align 4
741 _9012:
742 .asciz "unknown trap "
743 .align 4
744 _9013:
745 .asciz "unknown trap "
746 .align 4
747 _9014:
748 .asciz "unknown trap "
749 .align 4
750 _9015:
751 .asciz "unknown trap "
752 .align 4
753 _9016:
754 .asciz "Stack overflow "
755 .align 4
756 _9017:
757 .asciz "Heap overflow "
758 .align 4
759 _9018:
760 .asciz "Illegal instruction "
761 .align 4
762 _9019:
763 .asciz "Illegal size argument "
764 .align 4
765 _9020:
766 .asciz "Case error "
767 .align 4
768 _9021:
769 .asciz "Addressing non-existent memory "
770 .align 4
771 _9022:
772 .asciz "Bad pointer used "
773 .align 4
774 _9023:
775 .asciz "Program counter out of range "
776 .align 4
777 _9024:
778 .asciz "Bad argument of LAE "
779 .align 4
780 _9025:
781 .asciz "Bad monitor call "
782 .align 4
783 _9026:
784 .asciz "Argument of LIN too high "
785 .align 4
786 _9027:
787 .asciz "GOTO decriptor error "
788 .align 4
789 _9028:
790 .asciz "Language run-time trap "
791 .align 4
792 _9501:
793 .asciz " (line number unknown)"
794 .align 4
795 _9050:
796 .asciz " at line "
797 .align 4
798
799 _9607:
800 .asciz "Wait"
801 .align 4
802 _9609:
803 .asciz "Link"
804 .align 4
805 _9614:
806 .asciz "Mknod"
807 .align 4
808 _9615:
809 .asciz "Chmod"
810 .align 4
811 _9616:
812 .asciz "Chown"
813 .align 4
814 _9618:
815 .asciz "Stat"
816 .align 4
817 _9620:
818 .asciz "Getpid"
819 .align 4
820 _9621:
821 .asciz "Mount"
822 .align 4
823 _9622:
824 .asciz "Umount"
825 .align 4
826 _9623:
827 .asciz "Setuid"
828 .align 4
829 _9624:
830 .asciz "Getuid"
831 .align 4
832 _9625:
833 .asciz "Stime"
834 .align 4
835 _9626:
836 .asciz "Ptrace"
837 .align 4
838 _9627:
839 .asciz "Alarm"
840 .align 4
841 _9628:
842 .asciz "Fstat"
843 .align 4
844 _9629:
845 .asciz "Pause"
846 .align 4
847 _9630:
848 .asciz "Utime"
849 .align 4
850 _9633:
851 .asciz "Access"
852 .align 4
853 _9634:
854 .asciz "Nice"
855 .align 4
856 _9635:
857 .asciz "Ftime"
858 .align 4
859 _9636:
860 .asciz "Sync"
861 .align 4
862 _9637:
863 .asciz "Kill"
864 .align 4
865 _9641:
866 .asciz "Dup"
867 .align 4
868 _9642:
869 .asciz "Pipe"
870 .align 4
871 _9644:
872 .asciz "Profil"
873 .align 4
874 _9646:
875 .asciz "Setgid"
876 .align 4
877 _9647:
878 .asciz "Getgid"
879 .align 4
880 _9648:
881 .asciz "Sigtrp"
882 .align 4
883 _9651:
884 .asciz "Acct"
885 .align 4
886 _9653:
887 .asciz "Lock"
888 .align 4
889 _9656:
890 .asciz "Mpxcall"
891 .align 4
892 _9660:
893 .asciz "Umask"
894 .align 4
895 _9661:
896 .asciz "Chroot"
897 .align 4
898
899 .sect .data
900 _savreg:
901 .data4 0
902 _savreg2:
903 .data4 0
904
905
906 swi.s\0\0\0\0\0\0\0\0\0\0\0\0\0\ 2\ 2¤\ 1\0\0ä\ 5.define _Swi, _Swix, _bbc_get, _bbc_vduw, _bbc_vdu
907 .sect .text
908
909 ! Swi(code, regpt)
910
911 _Swi:
912  ADR R11,_100
913  LDR R10,[R11]
914  LDR R9,[R12]
915  AND R10,R10,#0xFF000000
916  AND R9,R9,#0xFFFFFF
917  ORR R10,R10,R9
918  STR R10,[R11]
919  LDR R11,[R12,#4]  ! PT TO REGS
920  STMFD R12<,{R4,R5,R6,R7}
921  LDR R0,[R11,#0]
922  LDR R1,[R11,#4]
923  LDR R2,[R11,#8]
924  LDR R3,[R11,#12]
925  LDR R4,[R11,#16]
926  LDR R5,[R11,#20]
927  LDR R6,[R11,#24]
928  LDR R7,[R11,#28]
929  LDR R8,[R11,#32]
930  LDR R9,[R11,#36]
931 _100:
932  SWI 0
933  STR R0,[R11,#0]
934  STR R1,[R11,#4]
935  STR R2,[R11,#8]
936  STR R3,[R11,#12]
937  STR R4,[R11,#16]
938  STR R5,[R11,#20]
939  STR R6,[R11,#24]
940  STR R7,[R11,#28]
941  STR R8,[R11,#32]
942  STR R9,[R11,#36]
943  LDMFD R12<,{R4,R5,R6,R7}
944  MOV.S R15,R14
945  
946 _Swix:
947  ADR R11,_101
948  LDR R10,[R11]
949  LDR R9,[R12]
950  AND R10,R10,#0xFF000000
951  AND R9,R9,#0xFFFFFF
952  ORR R10,R10,R9
953  ORR R10,R10,#0x20000
954  STR R10,[R11]
955  LDR R11,[R12,#4]
956  STMFD R12<,{R4,R5,R6,R7}
957  LDR R0,[R11,#0]
958  LDR R1,[R11,#4]
959  LDR R2,[R11,#8]
960  LDR R3,[R11,#12]
961  LDR R4,[R11,#16]
962  LDR R5,[R11,#20]
963  LDR R6,[R11,#24]
964  LDR R7,[R11,#28]
965  LDR R8,[R11,#32]
966  LDR R9,[R11,#36]
967 _101:
968  SWI 0
969  STR R0,[R11,#0]
970  STR R1,[R11,#4]
971  STR R2,[R11,#8]
972  STR R3,[R11,#12]
973  STR R4,[R11,#16]
974  STR R5,[R11,#20]
975  STR R6,[R11,#24]
976  STR R7,[R11,#28]
977  STR R8,[R11,#32]
978  STR R9,[R11,#36]
979  MOV.VC R0, #0
980  LDMFD R12<,{R4,R5,R6,R7}
981  MOV.S R15,R14
982
983 ! the rest is for Acorn compatibility
984
985 _bbc_get:
986  SWI 4    ! READC
987  MOV.S R15,R14
988
989 _bbc_vduw:
990  LDR R0,[R12]
991  SWI 0    !WRITEC
992  MOV R0,R0,LSR #8
993  SWI 0
994  MOV.S R15,R14
995
996 _bbc_vdu:
997  LDR R0,[R12]
998  SWI 0
999  MOV.S R15,R14