Research V2 release
[unix-history] / lib / bsw.s
CommitLineData
c188e24c
DR
1/ crt -- c runtime routines
2
3.globl retrn
4.globl bswitch
5.globl _getchar
6.globl _putchar
7.globl _flush
8.globl _fin
9.globl _fout
10
11.globl _main
12.globl getc
13.globl putc
14.globl flush
15
16start:
17 mov $mq,r4
18 mov sp,r0
19 mov (r0),-(sp)
20 tst (r0)+
21 mov r0,2(sp)
22 jsr pc,*_main
23 clr r0
24 sys exit
25
26retrn:
27 mov r5,sp
28 mov (sp)+,r5
29 rts pc
30
31_getchar:.+2
321:
33 jsr r5,getc; _fin
34 bcs 1f
35 tst r0
36 beq 1b
37 rts pc
381:
39 clr r0
40 rts pc
41
42_putchar:.+2
43 mov 2(sp),r0
44 tst _fout
45 bne 1f
46 mov $1,_fout
471:
48 jsr r5,putc; _fout
49 movb 3(sp),r0
50 beq 1f
51 jsr r5,putc; _fout
521:
53 cmp _fout,$1
54 bne 1f
55 jsr r5,flush; _fout
561:
57 mov 2(sp),r0
58 rts pc
59
60_flush:
61 .+2
62 jsr r5,flush; _fout
63 rts pc
64
65bswitch:
66 mov *(sp),r1
67 mov r1,base
68 mov (r1),r2 / low
69 mov (r1)+,r3 / hi
70 mov $1,-(sp) / n
71 tst (r1)+
72 bne 1f
73 4 / n = 0
741:
75 tst 2(r1)
76 beq 1f
77 cmp (r1),r2
78 bhis 2f
79 mov (r1),r2
802:
81 cmp (r1)+,r3
82 blo 2f
83 mov -2(r1),r3
842:
85 tst (r1)+
86 inc (sp)
87 br 1b
881:
89 sub r2,r3 / spread
90 asl (sp)
91 inc r3
92 cmp r3,(sp)
93 blo initd / if spread < 2*ncase direct
94
95initb:
96 clr (sp) / flag
97 mov base,r2
98 mov r2,r3
99 add $4,r3
1001:
101 cmp r3,r1
102 bhis 1f
103 cmp (r2)+,(r3)+
104 blos 2f
105 mov -(r2),-(sp)
106 mov -(r3),(r2)+
107 mov (sp)+,(r3)+
108 mov (r2),-(sp)
109 mov (r3),(r2)
110 mov (sp)+,(r3)
111 inc (sp)
1122:
113 cmp (r2)+,(r3)+
114 br 1b
1151:
116 tst (sp)
117 bne initb
118 cmp (sp)+,(r1)+
119 mov r1,-(sp)
1201:
121 mov -(r1),2(r1)
122 cmp r1,base
123 bhi 1b
124 mov (sp)+,(r1)
125 mov $binary+4,r3
126 br init
127
128initd:
129 mov (sp)+,r3
130 mov r3,twon
131 mov r3,twona
132 mov r2,-(sp) / low
133 mov r3,-(sp) / 2*n
1341:
135 mov base,r3
1362:
137 cmp (r3)+,r2
138 beq 2f
139 tst (r3)+
140 cmp r3,r1
141 blo 2b
142 mov (r1),-(sp) / no match, default
143 br 3f
1442:
145 mov (r3),-(sp) / match
1463:
147 inc r2
148 dec twon
149 bne 1b
150 add $4,r1
151 add $2,twona
1521:
153 mov (sp)+,-(r1)
154 dec twona
155 bne 1b
156 mov $direct+4,r3
157
158init:
159 mov (sp)+,r2
160 mov -(r3),-(r2)
161 mov -(r3),-(r2)
162 jmp (r2)
163
164direct:
165 jsr pc,*$1f
166
167
168/ lowval; nval
169/ l1; l2; ...; ln
170/ ld
171
1721:
173 mov *(sp)+,r1
174 sub (r1)+,r0 / low limit
175 cmp r0,(r1)+ / n cases
176 blo 1f
177 mov -(r1),r0 / default
1781:
179 asl r0
180 add r0,r1
181 jmp *(r1)+
182
183binary:
184 jsr pc,*$1f
185
186/ end
187/ v1;l1; v2;l2; ...; vn;ln
188/end: ld
189
1901:
191 mov *(sp)+,r1 / low
192 mov (r1)+,r2 / high
193 mov (r2),-(sp) / default
194 br 1f
195
196llo:
197 mov r3,r2
198 br 1f
199lhi:
200 mov r3,r1
201 add $4,r1
2021:
203 mov r2,r3
204 sub r1,r3
205 beq 1f
206 asr r3
207 bic $3,r3
208 add r1,r3
209 cmp r0,(r3)
210 bhi lhi
211 blo llo
212 tst (sp)+
213 jmp *2(r3)
2141:
215 rts pc
216
217.bss
218base: .=.+2
219twon: .=.+2
220twona: .=.+2
221_fin: .=.+518.
222_fout: .=.+518.
223