Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape2/indexing.t2 |
|
2 | 0 | | ;-------------------------------------------------------------------- |
|
3 | 0 | | ; index1 - first stage of indexing |
|
4 | 0 | | ; acc points at array info |
|
5 | 0 | | Indexing:: | ; | |
|
6 | 0 | | Index1: | ; | |
|
7 | 0 | 2070636577777 | | sto | ARptr | / | lod | -1 | ;store address, get bound list | @6937
|
8 | 1 | 0416150 | | sto | BLptr | | | | ;save bound list | @6938
|
9 | 1+ | 0555121 | | cls | W6737 | | | | ;clear partial index |
|
10 | 2 | | .ret: | ; | |
|
11 | 2 | 2200007000000 | | inc | T2Link | / | jmp | 0 | ;return after bumping return | @6939
|
12 | 3 | | ;-------------------------------------------------------------------- |
|
13 | 3 | | ; index2 - intermediate stage, |
|
14 | 3 | | ; acc contains subscript value, assume Index1 done |
|
15 | 3 | | Index2: | ; | |
|
16 | 3 | 2270642120000 | | inc | BLptr | / | sub | 0 | ;remove lower bound | @6940
|
17 | 4 | 1120011 | | jn | SubOflo | | | | ;out-of range | @6941
|
18 | 4+ | 0515121 | | ads | W6737 | | | | ;add to index |
|
19 | 5 | 2270642120000 | | inc | BLptr | / | sub | 0 | ;check upper bound | @6942
|
20 | 6 | 1120014 | | jn | .2A | | | | ;OK, | @6943
|
21 | 6+ | 1100011 | | jmp | SubOflo | | | | ;over the top, abort |
|
22 | 7 | | ;-------------------------------------------------------------------- |
|
23 | 7 | | ; index3 - final subscript to indexing operation |
|
24 | 7 | | ; acc contains final subscript, return with address of element |
|
25 | 7 | | ; |
|
26 | 7 | | Index3: | ; | |
|
27 | 7 | 0070642120001 | | o00 | BLptr | / | sub | 1 | ;remove lower bnd | @6944
|
28 | 8 | 1120011 | | jn | SubOflo | | | | ;out of range | @6945
|
29 | 8+ | 0515121 | | ads | W6737 | | | | ;add to index |
|
30 | 9 | 0070642120002 | | o00 | BLptr | / | sub | 2 | ;check upper limit | @6946
|
31 | 10 | 1020013 | | jn | .3A | | | | ;OK, skip | @6947
|
32 | 10+ | 1100011 | | jmp | SubOflo | | | | ;report out of range |
|
33 | 11 | | ; |
|
34 | 11 | | .3A: | ; | |
|
35 | 11 | 0615121 | | lod | W6737 | | | | ;get index value | @6948
|
36 | 11+ | 0116147 | | add | ARptr | | | | ;add base address |
|
37 | 12 | 1000002 | | jmp | .ret | | | | ;return address of element | @6949
|
38 | 12+ | | ;-------- |
|
39 | 12+ | | ; from Index2, subscript OK |
|
40 | 12+ | | .2A: | ; | |
|
41 | 12+ | 0615121 | | lod | W6737 | | | | ;present index |
|
42 | 13 | 0070643240002 | | o00 | BLptr | / | mul | 2 | ;multiply by stride | @6950
|
43 | 14 | 1360000 | | ara | 0 | | | | ; | @6951
|
44 | 14+ | 0415121 | | sto | W6737 | | | | ;updated index |
|
45 | 15 | 1000002 | | jmp | .ret | | | | ; | @6952
|
46 | 15+ | | ; |
|
47 | 15+ | 0000000 | | o00 | 0 | | | | ; |
|
48 | 16 | | =7109 | |
|
49 | 7109 | | ;-------------------------------------------------------------------- |
|
50 | 7109 | | ; Size: get size of array (address in arg1) |
|
51 | 7109 | | Size: | ; | |
|
52 | 7109 | 0000072577777 | | o00 | arg1 | / | lod | -1 | ;get address of store used | @7109
|
53 | 7110 | 2000072600000 | | sto | arg1 | / | lod | 0 | ;size is top half of word | @7110
|
54 | 7111 | 1220024 | | srl | 20 | | | | ;shift down to normal | @7111
|
55 | 7111+ | 0116210 | | add | N1 | | | | ;=-1 less overhead |
|
56 | 7112 | 1000052 | | jmp | retlnk1 | | | | ;and return it | @7112
|
57 | 7112+ | | ;-------------------------------------------------------------------- |
|
58 | 7112+ | | ; |
|
59 | 7112+ | | Range: | ; | |
|
60 | 7112+ | 0455120 | | inc | W6736 | | | | ;set flag for lowbound |
|
61 | 7113 | | Lowbound: | ; | |
|
62 | 7113 | 0000072577777 | | o00 | arg1 | / | lod | -1 | ;address of array descriptor | @7113
|
63 | 7114 | 2000022600000 | | sto | 4 | / | lod | 0 | ; | @7114
|
64 | 7115 | 0076222 | | and | K127 | | | | ;=127 | @7115
|
65 | 7115+ | 0120017 | | sub | arg2 | | | | ; |
|
66 | 7116 | 1120011 | | jn | SubOflo | | | | ;arg2 > no dims | @7116
|
67 | 7116+ | 0600017 | | lod | arg2 | | | | ;reload arg2 |
|
68 | 7117 | 1120011 | | jn | SubOflo | | | | ;arg2 <= 0 | @7117
|
69 | 7117+ | 1140011 | | jz | SubOflo | | | | ; |
|
70 | 7118 | 0100004 | | add | 4 | | | | ;add base address | @7118
|
71 | 7118+ | 0115120 | | add | W6736 | | | | ;add flag (0/1) |
|
72 | 7119 | 2400076577777 | | ads | arg2 | / | lod | -1 | ;get range/lowbound | @7119
|
73 | 7120 | 1000052 | | jmp | retlnk1 | | | | ;return it | @7120
|
74 | 7120+ | | ; |
|
75 | 7120+ | 0000000 | | o00 | 0 | | | | ; |
|
76 | 7121 | | ; no refs |
|
77 | 7121 | | ;L7121: |
|
78 | 7121 | 1000052 | | jmp | retlnk1 | | | | ; | @7121
|
79 | 7121+ | | ; |
|
80 | 7121+ | 0000000 | | o00 | 0 | | | | ; |
|
81 | 7122 | | ;-------------------------------------------------------------------- |
|