Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape2/stack.t2 |
|
2 | 0 | | ;-------------------------------------------------------------------- |
|
3 | 0 | | ; enter block |
|
4 | 0 | | ; |
|
5 | 0 | | =6776+ | |
|
6 | 6776+ | | EnterBlock: | ; | |
|
7 | 6776+ | 0600027 | | lod | stkpt | | | | ;stack pointer |
|
8 | 6777 | 1000142400000 | | exa | frmpt | / | sto | 0 | ;save at frame address | @6777
|
9 | 6778 | 0040000 | | o02 | 0 | | | | ;=1 | @6778
|
10 | 6778+ | 0760027 | | o37 | stkpt | | | | ;decrement stack ptr |
|
11 | 6779 | | | call | | | | | ;set up entry points, if needed | @6779
|
11+1 | 6779 | 7300041000011 | | lnk | CheckStack.lnk | : | jmp | CheckStack.ent | |
|
12 | 6780 | 1015212 | | jmp | CkoRet | | | | ;check for oflo, then return | @6780
|
13 | 6780+ | | ; |
|
14 | 6780+ | 0000017 | | o00 | +15 | | | | ;in-line constant??? not referenced |
|
15 | 6781 | | ; |
|
16 | 6781 | 1000000 | L6781: | jmp | Return | | | | ;no refs, apart from ssymtab??? | @6781
|
17 | 6781+ | | ;-------------------------------------------------------------------- |
|
18 | 6781+ | | ; leave block |
|
19 | 6781+ | | ; |
|
20 | 6781+ | | LeaveBlock: | ; | |
|
21 | 6781+ | 0600030 | | lod | frmpt | | | | ; |
|
22 | 6782 | 2000136600000 | | sto | stkpt | / | lod | 0 | ; | @6782
|
23 | 6783 | 0400030 | | sto | frmpt | | | | ; | @6783
|
24 | 6783+ | 1015212 | | jmp | CkoRet | | | | ; |
|
25 | 6784 | | ;-------------------------------------------------------------------- |
|
26 | 6784 | | ; copy array parameter called by value |
|
27 | 6784 | | ; |
|
28 | 6784 | | CopyVArray: | ; | |
|
29 | 6784 | 2000066577777 | | sto | Link1 | / | lod | -1 | ; | @6784
|
30 | 6785 | 2000072600000 | | sto | arg1 | / | lod | 0 | ; | @6785
|
31 | 6786 | 1220024 | | srl | 20 | | | | ;number of words involved | @6786
|
32 | 6786+ | 0435121 | | stn | W6737 | | | | ;store (negated) |
|
33 | 6787 | 0455121 | | inc | W6737 | | | | ;add one for loop | @6787
|
34 | 6787+ | 0160027 | | bus | stkpt | | | | ;make space on stack |
|
35 | 6788 | 0400027 | | sto | stkpt | | | | ;store updated stack pointer | @6788
|
36 | 6788+ | 0415122 | | sto | W6738 | | | | ;and work pointer for copy |
|
37 | 6789 | | | call | | | | | ;make sure there's room | @6789
|
37+1 | 6789 | 7300041000011 | | lnk | CheckStack.lnk | : | jmp | CheckStack.ent | |
|
38 | 6790 | | cva1: | ; | |
|
39 | 6790 | 2200066577776 | | inc | Link1 | / | lod | -2 | ;fetch word | @6790
|
40 | 6791 | 2264512400000 | | inc | W6738 | / | sto | 0 | ;and store it | @6791
|
41 | 6792 | 0655121 | | lis | W6737 | | | | ;bump counter | @6792
|
42 | 6792+ | 1035206 | | jn | cva1 | | | | ;loop back until done |
|
43 | 6793 | 0600027 | | lod | stkpt | | | | ;base address | @6793
|
44 | 6793+ | 0115141 | | add | W6753 | | | | ;=2 for array pointer |
|
45 | 6794 | | CkoRet: | ; | |
|
46 | 6794 | 1060013 | | jo | IntOflo | | | | ;check for overflows | @6794
|
47 | 6794+ | 1000024 | | jmp | return | | | | ;and return |
|
48 | 6795 | | ;-------------------------------------------------------------------- |
|
49 | 6795 | | ; allocate array, parameters in-line |
|
50 | 6795 | | ; |
|
51 | 6795 | | AllocArray:: | ; | |
|
52 | 6795 | | AllocArray: | ; | |
|
53 | 6795 | 2200006600000 | | inc | T2Link | / | lod | 0 | ; | @6795
|
54 | 6796 | 0400015 | | sto | Link1 | | | | ; | @6796
|
55 | 6796+ | 0075137 | | and | W6751 | | | | ;=8191 |
|
56 | 6797 | 0200015 | | exa | Link1 | | | | ;array address | @6797
|
57 | 6797+ | 1220015 | | srl | 13 | | | | ;shift right to get number of subs |
|
58 | 6798 | 0400016 | | sto | arg1 | | | | ;save, temp | @6798
|
59 | 6798+ | 0075140 | | and | W6752 | | | | ;=077, mask off number |
|
60 | 6799 | 0435120 | | stn | W6736 | | | | ;save it, (negated) | @6799
|
61 | 6799+ | 0560027 | | o27 | stkpt | | | | ;make space on stack for BL |
|
62 | 6800 | 2700136400000 | | o27 | stkpt | / | sto | 0 | ;and store number | @6800
|
63 | 6801 | 0455120 | | inc | W6736 | | | | ;bump count | @6801
|
64 | 6801+ | 0600016 | | lod | arg1 | | | | ;get saved bit |
|
65 | 6802 | 1220007 | | srl | 7 | | | | ;get N1 part of word | @6802
|
66 | 6802+ | 0420016 | | stn | arg1 | | | | ;save, (negated) |
|
67 | 6803 | 0600027 | | lod | stkpt | | | | ;get stack pointer | @6803
|
68 | 6803+ | 0415121 | | sto | W6737 | | | | ;save it |
|
69 | 6804 | 0040000 | | o02 | 0 | | | | ;=1 | @6804
|
70 | 6804+ | 0415122 | | sto | W6738 | | | | ; |
|
71 | 6805 | | ;L6805: |
|
72 | 6805 | | .aa1: | ; | |
|
73 | 6805 | 2200006600000 | | inc | T2Link | / | lod | 0 | ;get bound item | @6805
|
74 | 6806 | 0415123 | | sto | W6739 | | | | ; | @6806
|
75 | 6806+ | 0415126 | | sto | W6742 | | | | ; |
|
76 | 6807 | 1200024 | | sra | 20 | | | | ;get lower bound | @6807
|
77 | 6807+ | 0415124 | | sto | W6740 | | | | ;save it |
|
78 | 6808 | 1115265 | | jmp | .aa2 | | | | ;jump out to patch | @6808
|
79 | 6808+ | | ; displaced code: |
|
80 | 6808+ | | =6837+ | |
|
81 | 6837+ | | .aa2: | ; | |
|
82 | 6837+ | 1360000 | | ara | 0 | | | | ;get upper bound back |
|
83 | 6838 | 1320002 | | sll | 2 | | | | ; adjust scale? |
|
84 | 6838+ | 1115230 | | jmp | .aa3 | | | | |
|
85 | 6839 | | ;L6808P: |
|
86 | 6839 | | =6808+ | |
|
87 | 6808+ | | .aa3: | ; | |
|
88 | 6808+ | 0415125 | | sto | W6741 | | | | ; |
|
89 | 6809 | 0615137 | | lod | W6751 | | | | ;=+8191 | @6809
|
90 | 6809+ | 0475123 | | ans | W6739 | | | | ;clean up upper bound |
|
91 | 6810 | 0475124 | | ans | W6740 | | | | ;clean up lower bound | @6810
|
92 | 6810+ | 0615126 | | lod | W6742 | | | | ;original bound item |
|
93 | 6811 | 1035260 | | jn | .aa10 | | | | ; | @6811
|
94 | 6811+ | 1320001 | | sll | 1 | | | | ; |
|
95 | 6812 | 1035262 | | jn | .aa11 | | | | ; | @6812
|
96 | 6812+ | | .aa4: | ; | |
|
97 | 6812+ | | ;L6812P: |
|
98 | 6812+ | 0615124 | | lod | W6740 | | | | ;lower bound |
|
99 | 6813 | | .aa5: | ; | |
|
100 | 6813 | | ;L6813: |
|
101 | 6813 | 2264506400000 | | inc | W6737 | / | sto | 0 | ;store in bound list | @6813
|
102 | 6814 | 0615125 | | lod | W6741 | | | | ; | @6814
|
103 | 6814+ | 1035263 | | jn | .aa12 | | | | ; |
|
104 | 6815 | 1320001 | | sll | 1 | | | | ; | @6815
|
105 | 6815+ | 1135264 | | jn | .aa13 | | | | ; |
|
106 | 6816 | | .aa6: | ; | |
|
107 | 6816 | | ;L6816: |
|
108 | 6816 | 0055123 | | o02 | W6739 | | | | ;upper bound + 1 | @6816
|
109 | 6816+ | | .aa7: | ; | |
|
110 | 6816+ | | ;L6816P: |
|
111 | 6816+ | 0135124 | | sub | W6740 | | | | ;less lower bound == stride |
|
112 | 6817 | 2264506400000 | | inc | W6737 | / | sto | 0 | ;store in bound list | @6817
|
113 | 6818 | 1120011 | | jn | SubOflo | | | | ;mustn't be < 0 | @6818
|
114 | 6818+ | 1255122 | | mul | W6738 | | | | ;calculate space requirement |
|
115 | 6819 | 1360000 | | ara | 0 | | | | ; | @6819
|
116 | 6819+ | 0415122 | | sto | W6738 | | | | ;and store |
|
117 | 6820 | 0655120 | | lis | W6736 | | | | ;more subscripts? | @6820
|
118 | 6820+ | 1035225 | | jn | .aa1 | | | | ;yes, loop back |
|
119 | 6821 | | ; |
|
120 | 6821 | 0055122 | | o02 | W6738 | | | | ;total size requirement+1 | @6821
|
121 | 6821+ | 1320024 | | sll | 20 | | | | ;move to N1 position |
|
122 | 6822 | 0000136500000 | | o00 | stkpt | / | ads | 0 | ;store in stack | @6822
|
123 | 6823 | 0640027 | | lis | stkpt | | | | ;bump stack | @6823
|
124 | 6823+ | 0415121 | | sto | W6737 | | | | ;save pointer |
|
125 | 6824 | | .aa8: | ; | |
|
126 | 6824 | | ;L6824: |
|
127 | 6824 | 0055122 | | o02 | W6738 | | | | ;size required+1 | @6824
|
128 | 6824+ | 0160027 | | bus | stkpt | | | | ;subtract from stack ptr |
|
129 | 6825 | 2200066377777 | | inc | Link1 | / | sto | -1 | ;store info variable | @6825
|
130 | 6826 | 0400027 | | sto | stkpt | | | | ;store updated stack pointer | @6826
|
131 | 6826+ | 0120031 | | sub | lomem | | | | ;lower limit of used memory |
|
132 | 6827 | 1034671 | | jn | L6585 | | | | ;out of space, try deleting compiler | @6827
|
133 | 6827+ | | .aa9: | ; | |
|
134 | 6827+ | | ;L6827P: |
|
135 | 6827+ | 0615121 | | lod | W6737 | | | | ; |
|
136 | 6828 | 0000136377777 | | o00 | stkpt | / | sto | -1 | ; | @6828
|
137 | 6829 | 0040016 | | o02 | arg1 | | | | ; | @6829
|
138 | 6829+ | 0400016 | | sto | arg1 | | | | ; |
|
139 | 6830 | 1035250 | | jn | .aa8 | | | | ; | @6830
|
140 | 6830+ | 0615141 | | lod | W6753 | | | | ; |
|
141 | 6831 | 0560027 | | o27 | stkpt | | | | ; | @6831
|
142 | 6831+ | 1000000 | | jmp | Return | | | | ; |
|
143 | 6832 | | ; |
|
144 | 6832 | | .aa10: | ; | |
|
145 | 6832 | | ;L6832: |
|
146 | 6832 | 0064522600000 | | o00 | W6740 | / | lod | 0 | ; | @6832
|
147 | 6833 | 0415124 | | sto | W6740 | | | | ; | @6833
|
148 | 6833+ | 1015235 | | jmp | .aa5 | | | | ; |
|
149 | 6834 | | ; |
|
150 | 6834 | | .aa11: | ; | |
|
151 | 6834 | | ;L6834: |
|
152 | 6834 | 0635124 | | lcs | W6740 | | | | ; | @6834
|
153 | 6834+ | 1115234 | | jmp | .aa4 | | | | ; |
|
154 | 6835 | | ; |
|
155 | 6835 | | .aa12: | ; | |
|
156 | 6835 | | ;L6835: |
|
157 | 6835 | 0064516040000 | | o00 | W6739 | / | o02 | 0 | ; | @6835
|
158 | 6836 | 1115240 | | jmp | .aa7 | | | | ; | @6836
|
159 | 6836+ | | ; |
|
160 | 6836+ | | .aa13: | ; | |
|
161 | 6836+ | | ;L6836P: |
|
162 | 6836+ | 0635123 | | lcs | W6739 | | | | ; |
|
163 | 6837 | 1015240 | | jmp | .aa6 | | | | ; | @6837
|
164 | 6837+ | | ; |
|
165 | 6837+ | | =6839 | |
|
166 | 6839 | | .aa14: | ; | |
|
167 | 6839 | | ;L6839: |
|
168 | 6839 | | | call | | | | | ; | @6839
|
168+1 | 6839 | 7300041000013 | | lnk | CheckStacka.lnk | : | jmp | CheckStacka.ent | |
|
169 | 6840 | 1115253 | | jmp | .aa9 | | | | ; | @6840
|
170 | 6840+ | | ; |
|
171 | 6840+ | 0000000 | | o00 | 0 | | | | ; |
|
172 | 6841 | | ;-------------------------------------------------------------------- |
|
173 | 6841 | | AllocArray.aa15: | ; | |
|
174 | 6841 | | ;L6841: |
|
175 | 6841 | 1015240 | | jmp | .aa6 | | | | ; | @6841
|
176 | 6841+ | | ;-------------------------------------------------------------------- |
|
177 | 6841+ | | ; unwind stack after call-by-name proc has finished |
|
178 | 6841+ | | ; |
|
179 | 6841+ | | Unwind:: | ; | |
|
180 | 6841+ | | Unwind: | ; | |
|
181 | 6841+ | 0400015 | | sto | Link1 | | | | ;save return value (if any) |
|
182 | 6842 | 0064536600000 | | o00 | DLink | / | lod | 0 | ; | @6842
|
183 | 6843 | 2000072600000 | | sto | arg1 | / | lod | 0 | ;get return address from stk | @6843
|
184 | 6844 | 0400001 | | sto | T2Link | | | | ;store for return | @6844
|
185 | 6844+ | 0615127 | | lod | DLink | | | | ;is sign bit set? |
|
186 | 6845 | 1135301 | | jn | .2 | | | | ;yes, -> | @6845
|
187 | 6845+ | 0615143 | | lod | MaskN1N2 | | | | ;=<00 8191:00 8191> |
|
188 | 6846 | 0064536460000 | | o00 | DLink | / | ans | 0 | ;clean up | @6846
|
189 | 6847 | | .1: | ; | |
|
190 | 6847 | 2200136600000 | | inc | stkpt | / | lod | 0 | ;unstack old link | @6847
|
191 | 6848 | 0415127 | | sto | DLink | | | | ;store dynamic link | @6848
|
192 | 6848+ | 0600015 | | lod | Link1 | | | | ;reload possible result |
|
193 | 6849 | 1015212 | | jmp | CkoRet | | | | ;and return | @6849
|
194 | 6849+ | | ; |
|
195 | 6849+ | | .2: | ; | |
|
196 | 6849+ | 0600016 | | lod | arg1 | | | | ; |
|
197 | 6850 | | | calln | , | | | | ;UnstkData.2 | @6850
|
197+1 | 6850 | 7364531115337 | | lnk | W6742 | : | jmp | StackData.2 | |
|
198 | 6851 | 1015277 | | jmp | .1 | | | | ; | @6851
|
199 | 6851+ | | ; |
|
200 | 6851+ | 0000000 | | o00 | 0 | | | | ; |
|
201 | 6852 | | ; |
|
202 | 6852 | | .3: | ; | |
|
203 | 6852 | 1015277 | | jmp | .1 | | | | ; | @6852
|
204 | 6852+ | | ;-------------------------------------------------------------------- |
|
205 | 6852+ | | ; prepare for call to proc with call-by-name args |
|
206 | 6852+ | | ; on entry: acc contains calling procs return address |
|
207 | 6852+ | | ; |
|
208 | 6852+ | | Setup:: | ; | |
|
209 | 6852+ | | Setup: | ; | |
|
210 | 6852+ | 0215127 | | exa | DLink | | | | ; | @6852+
|
211 | 6853 | 0000136400000 | | o00 | stkpt | / | sto | 0 | ; | @6853
|
212 | 6854 | 0040000 | | o02 | 0 | | | | ; | @6854
|
213 | 6854+ | 0760027 | | o37 | stkpt | | | | ; |
|
214 | 6855 | | | call | | | | | ; | @6855
|
214+1 | 6855 | 7300041000011 | | lnk | CheckStack.lnk | : | jmp | CheckStack.ent | |
|
215 | 6856 | 0064536600000 | | o00 | DLink | / | lod | 0 | ; | @6856
|
216 | 6857 | 1035314 | | jn | .1 | | | | ;is bit already set? yes-> | @6857
|
217 | 6857+ | 0115142 | | add | TopBit | | | | ;sign bit |
|
218 | 6858 | 0064536400000 | | o00 | DLink | / | sto | 0 | ;turn bit on in stack | @6858
|
219 | 6859 | 1015212 | | jmp | CkoRet | | | | ; | @6859
|
220 | 6859+ | | ; |
|
221 | 6859+ | 0000000 | | o00 | 0 | | | | ; |
|
222 | 6860 | | ; |
|
223 | 6860 | | .1: | ; | |
|
224 | 6860 | | | calln | , | | | | ; | @6860
|
224+1 | 6860 | 7364531015325 | | lnk | W6742 | : | jmp | StackData.0 | |
|
225 | 6861 | 0615142 | | lod | TopBit | | | | ;sign bit | @6861
|
226 | 6861+ | 0515127 | | ads | DLink | | | | ; |
|
227 | 6862 | 1015212 | | jmp | CkoRet | | | | ; | @6862
|
228 | 6862+ | | ; |
|
229 | 6862+ | 0000000 | | o00 | 0 | | | | ; |
|
230 | 6863 | | ;-------------------------------------------------------------------- |
|
231 | 6863 | | ; return number of words of free store left |
|
232 | 6863 | | ; if less than minimum return 1, we'll catch attempts to |
|
233 | 6863 | | ; allocate space anyway! |
|
234 | 6863 | | ; |
|
235 | 6863 | | StoreMax:: | ; | |
|
236 | 6863 | | StoreMax: | ; | |
|
237 | 6863 | 0600027 | | lod | stkpt | | | | ; | @6863
|
238 | 6863+ | 0116217 | | add | N76 | | | | ;=-76 reserved space at bottom |
|
239 | 6864 | 1135321 | | jn | .1 | | | | ; | @6864
|
240 | 6864+ | 1155321 | | jz | .1 | | | | ; |
|
241 | 6865 | 1000052 | | jmp | retlnk1 | | | | ; return amount left | @6865
|
242 | 6865+ | | ; |
|
243 | 6865+ | | .1: | ; | |
|
244 | 6865+ | 0040000 | | o02 | 0 | | | | ;=1 not true, but it'll do |
|
245 | 6866 | 1000052 | | jmp | retlnk1 | | | | ;return 1 | @6866
|
246 | 6866+ | | ; |
|
247 | 6866+ | 0000000 | | o00 | 0 | | | | ; |
|
248 | 6867 | | ;-------------------------------------------------------------------- |
|
249 | 6867 | | L6867: | ; | |
|
250 | 6867 | 1000000 | | jmp | Return | | | | ;only referred to by symtab | @6867
|
251 | 6867+ | | ;-------------------------------------------------------------------- |
|
252 | 6867+ | | ; stack routine - copy data to stack |
|
253 | 6867+ | | ; used by print/read/recursive proc call |
|
254 | 6867+ | | ; acc contains 00 n : 00 p |
|
255 | 6867+ | | ; where n = number of words tp save, p = address of words |
|
256 | 6867+ | | ; |
|
257 | 6867+ | | StackData:: | ; | |
|
258 | 6867+ | | .lnk= ëÿ¿P/@hëÿ¿hX@Ø ôÿ¿ÿW6742 | ; | |
|
259 | 6867+ | | ; |
|
260 | 6867+ | | StackData: | ; | |
|
261 | 6867+ | 0200001 | | exa | T2Link | | | | ;hide argument |
|
262 | 6868 | 0415126 | | sto | .lnk | | | | ;save return address | @6868
|
263 | 6868+ | 0200001 | | exa | T2Link | | | | ;reload argument |
|
264 | 6869 | | .0: | ; | |
|
265 | 6869 | | ;L6869: |
|
266 | 6869 | 0075143 | | and | MaskN1N2 | | | | ;=<008191:008191> | @6869
|
267 | 6869+ | 0415125 | | sto | W6741 | | | | ;address (p) |
|
268 | 6870 | 1220024 | | srl | 20 | | | | ;get n | @6870
|
269 | 6870+ | 0435124 | | stn | W6740 | | | | ;-length |
|
270 | 6871 | 0455124 | | inc | W6740 | | | | ;+1 | @6871
|
271 | 6871+ | 0160027 | | bus | stkpt | | | | ;stkpt-n |
|
272 | 6872 | 0400027 | | sto | stkpt | | | | ;stkpt := stkpt - n | @6872
|
273 | 6872+ | 0415123 | | sto | W6739 | | | | ;workptr |
|
274 | 6873 | | | call | | | | | ;make sure there's room | @6873
|
274+1 | 6873 | 7300041000011 | | lnk | CheckStack.lnk | : | jmp | CheckStack.ent | |
|
275 | 6874 | | .1: | ; | |
|
276 | 6874 | 2264526577777 | | inc | W6741 | / | lod | -1 | ;get source word | @6874
|
277 | 6875 | 2264516400000 | | inc | W6739 | / | sto | 0 | ;store on stack | @6875
|
278 | 6876 | 0655124 | | lis | W6740 | | | | ;count | @6876
|
279 | 6876+ | 1035332 | | jn | .1 | | | | ;repeat if more |
|
280 | 6877 | | .ret: | ; | |
|
281 | 6877 | | | ret | | | | | ; | @6877
|
281+1 | 6877 | 0064533000001 | | o00 | StackData.lnk | / | jmp | 1 | |
|
282 | 6878 | | ;-------------------------------------------------------------------- |
|
283 | 6878 | | ; unstack data, used at end of print/read, and after proc calls |
|
284 | 6878 | | ; restore items saved by above, param in acc in same format as above |
|
285 | 6878 | | ; |
|
286 | 6878 | | UnstkData: | ; | |
|
287 | 6878 | 0200001 | | exa | T2Link | | | | ;hide arg | @6878
|
288 | 6878+ | 0415126 | | sto | .lnk | | | | ;save return address |
|
289 | 6879 | 0200001 | | exa | T2Link | | | | ; | @6879
|
290 | 6879+ | | .2: | ; | |
|
291 | 6879+ | | ;L6879P: |
|
292 | 6879+ | 0075143 | | and | MaskN1N2 | | | | ;=<00 8191:00 8191> |
|
293 | 6880 | 0415125 | | sto | W6741 | | | | ;address (p) | @6880
|
294 | 6880+ | 1220024 | | srl | 20 | | | | ;get n |
|
295 | 6881 | 0435124 | | stn | W6740 | | | | ;store as count | @6881
|
296 | 6881+ | 0455124 | | inc | W6740 | | | | ;increment |
|
297 | 6882 | | .3: | ; | |
|
298 | 6882 | 2200136600000 | | inc | stkpt | / | lod | 0 | ;unstack word | @6882
|
299 | 6883 | 2264526377777 | | inc | W6741 | / | sto | -1 | ;store back in place | @6883
|
300 | 6884 | 0655124 | | lis | W6740 | | | | ;count | @6884
|
301 | 6884+ | 1035342 | | jn | .3 | | | | ;repeat if more |
|
302 | 6885 | 0600015 | | lod | Link1 | | | | ;return value (proc exits) | @6885
|
303 | 6885+ | 1015335 | | jmp | StackData.ret | | | | ;and return |
|
304 | 6886 | | ;-------------------------------------------------------------------- |
|