Line | Address | Object Code
| Label | F1 | N1 | B | F2 | N2 | Comments | Check
|
---|
1 | 0 | | ; tape1.d/string.t2 |
|
2 | 0 | | ;------------------ |
|
3 | 0 | | ; |
|
4 | 0 | | ; PackStrChar, add 6-bit character to packed string |
|
5 | 0 | | ; character supplied in Acc, current word in W3231, |
|
6 | 0 | | ; character in word count in W3234 |
|
7 | 0 | | ; |
|
8 | 0 | | =3564 | |
|
9 | 3564 | | PkStrChar:: | ; | |
|
10 | 3564 | | ; |
|
11 | 3564 | | .ent: | ; | |
|
12 | 3564 | 0206237 | | exa | W3231 | | | | ;swap with current word | @3564
|
13 | 3564+ | 1320006 | | sll | 6 | | | | ;shift word left |
|
14 | 3565 | 0506237 | | ads | W3231 | | | | ;and add to character |
|
15 | 3565+ | 0646242 | | lis | W3234 | | | | ;check count |
|
16 | 3566 | 1026763 | | jn | .3571 | | | | ; | @3566
|
17 | 3566+ | 0446241 | | inc | W3233 | | | | ;increment word count |
|
18 | 3567 | 0601443 | | lod | K5a | | | | ;=5 |
|
19 | 3567+ | 0426242 | | stn | W3234 | | | | ;set char count back to -5 |
|
20 | 3568 | 0746237 | | lzs | W3231 | | | | ;load and clear current word | @3568
|
21 | 3568+ | 0206240 | | exa | Pinfo | | | | ;swap with previous word |
|
22 | 3569 | 1046763 | | jz | .3571 | | | | ;prev word zero, only 1 word |
|
23 | 3569+ | | | nop | | | | | ; |
|
23+1 | 3569+ | 1006762 | | jmp | .1 | | | | |
|
23+2 | 3570 | | .1: | ; | |
|
24 | 3570 | | | call | | | | | ;write full word to O-code | @3570
|
24+1 | 3570 | 7306371101532 | | lnk | putFwd.lnk | : | jmp | putFwd.ent | |
|
25 | 3571 | | .3571: | ; | |
|
26 | 3571 | | | ret | | | | | ; |
|
26+1 | 3571 | 0031223000001 | | o00 | PkStrChar.lnk | / | jmp | 1 | |
|
27 | 3572 | | ;-------------------------------------------------------------------- |
|
28 | 3572 | | ; compile code to load a string address |
|
29 | 3572 | | ; |
|
30 | 3572 | | CompStrPtr:: | ; | |
|
31 | 3572 | | ; |
|
32 | 3572 | | .ent: | ; | |
|
33 | 3572 | 0000000 | | o00 | 0 | | | | ; | @3572
|
34 | 3572+ | 0042220 | | o02 | W1168 | | | | ; |
|
35 | 3573 | | | call | | | | | ; |
|
35+1 | 3573 | 7307175001640 | | lnk | GenInst.lnk | : | jmp | GenInst.ent | |
|
36 | 3574 | 0546243 | | cls | W3235 | | | | ; | @3574
|
37 | 3574+ | 0546241 | | cls | W3233 | | | | ;clear word count |
|
38 | 3575 | 0546240 | | cls | Pinfo | | | | ;clear previous word |
|
39 | 3575+ | 0546237 | | cls | W3231 | | | | ;clear current packed word |
|
40 | 3576 | 0601443 | | lod | K5a | | | | ;=5 | @3576
|
41 | 3576+ | 0426242 | | stn | W3234 | | | | ;set char in word count = -5 |
|
42 | 3577 | | W3577: | ; | |
|
43 | 3577 | | .3577: | call | | | | | ; $ special (within string) |
|
43+1 | 3577 | 7303015000604 | | lnk | getchar.lnk | : | jmp | getchar.ent | |
|
44 | 3578 | 1006775 | | jmp | .3581 | | | | ; | @3578
|
45 | 3578+ | 1106777 | | jmp | .3583P | | | | ;check for end of string |
|
46 | 3579 | 1006775 | | jmp | .3581 | | | | ; |
|
47 | 3579+ | 1006775 | | jmp | .3581 | | | | ; |
|
48 | 3580 | 1107004 | | jmp | .3588P | | | | ;check for nested string | @3580
|
49 | 3580+ | 1006775 | | jmp | .3581 | | | | ; |
|
50 | 3581 | | ; |
|
51 | 3581 | 0600575 | .3581: | lod | ipshift | | | | ;normal char, convert to 6-bit |
|
52 | 3581+ | 0100574 | | add | currchar | | | | ; |
|
53 | 3582 | | .3582: | ; | |
|
54 | 3582 | | | call | | | | | ;add to string constant |
|
54+1 | 3582 | 7331221006754 | | lnk | PkStrChar.lnk | : | jmp | PkStrChar.ent | |
|
55 | 3583 | 1006771 | | jmp | W3577 | | | | ;and loop back for more |
|
56 | 3583+ | | ; |
|
57 | 3583+ | 0600574 | .3583P: | lod | currchar | | | | ;punctuation, check for pound/query |
|
58 | 3584 | 0100575 | | add | ipshift | | | | ; | @3584
|
59 | 3584+ | 0124312 | | sub | K20 | | | | ;=20 '?' |
|
60 | 3585 | 1047002 | | jz | .3586 | | | | ;yes, maybe end of string |
|
61 | 3585+ | 1006775 | | jmp | .3581 | | | | ;no, treat as ordinary chars |
|
62 | 3586 | | ; |
|
63 | 3586 | | ; close quote (?) found, check if nested |
|
64 | 3586 | | ; |
|
65 | 3586 | 0040000 | .3586: | o02 | 0 | | | | ;=1, test for nesting | @3586
|
66 | 3586+ | 0766243 | | o37 | W3235 | | | | ;decrement count |
|
67 | 3587 | 1147010 | | jz | .3592P | | | | ;zero, end of string |
|
68 | 3587+ | 0042227 | | o02 | K26 | | | | ;=26, +1=>27 |
|
69 | 3588 | 1006776 | | jmp | .3582 | | | | ;add to string | @3588
|
70 | 3588+ | | ; |
|
71 | 3588+ | | ; punct2 character, includes pound sign |
|
72 | 3588+ | | ; |
|
73 | 3588+ | 0600574 | .3588P: | lod | currchar | | | | ;other punct, check for pound |
|
74 | 3589 | 0100575 | | add | ipshift | | | | ;convert to 6-bit |
|
75 | 3589+ | 0122227 | | sub | K26 | | | | ;=26 'pound-sign' |
|
76 | 3590 | 1047007 | | jz | .3591 | | | | ;yes, nested chars | @3590
|
77 | 3590+ | 1006775 | | jmp | .3581 | | | | ;no, treat as ordinary |
|
78 | 3591 | | ; |
|
79 | 3591 | | ; nested open quote (pound) found |
|
80 | 3591 | 0646243 | .3591: | lis | W3235 | | | | ;increment nest count |
|
81 | 3591+ | 1050565 | | jz | .4469 | | | | ;yes, goto patch |
|
82 | 3592 | 1104621 | | jmp | _err54 | | | | ;pound not allowed in nested string | @3592
|
83 | 3592+ | | ; |
|
84 | 3592+ | | =4469 | |
|
85 | 4469 | | .4469: | ; patch moved in-line | |
|
86 | 4469 | 0601460 | | lod | K63 | | | | ;=63, special marker for nesting |
|
87 | 4469+ | 1006776 | | jmp | .3582 | | | | ;store shift marker |
|
88 | 4470 | | ; |
|
89 | 4470 | | ; end of string, |
|
90 | 4470 | | =3592+ | |
|
91 | 3592+ | 0540574 | .3592P: | cls | currchar | | | | ;discard closing quote |
|
92 | 3593 | 0606242 | | lod | W3234 | | | | ;char count |
|
93 | 3593+ | 0101443 | | add | K5a | | | | ;=5 |
|
94 | 3594 | 1147020 | | jz | .3600P | | | | ;-> no chars in current word | @3594
|
95 | 3594+ | 0606240 | | lod | Pinfo | | | | ;previous word |
|
96 | 3595 | 1047015 | | jz | .3597 | | | | ;only one word |
|
97 | 3595+ | | | nop | | | | | ; |
|
97+1 | 3595+ | 1007014 | | jmp | .1 | | | | |
|
97+2 | 3596 | | .1: | ; | |
|
98 | 3596 | | | call | | | | | ;output final word | @3596
|
98+1 | 3596 | 7306371101532 | | lnk | putFwd.lnk | : | jmp | putFwd.ent | |
|
99 | 3597 | 0040000 | .3597: | o02 | 0 | | | | ;=1 |
|
100 | 3597+ | 0126242 | | sub | W3234 | | | | ;get number of chars to pad |
|
101 | 3598 | 1242226 | | mul | K6 | | | | ;=6 get number of bits | @3598
|
102 | 3598+ | 1360000 | | ara | 0 | | | | ; |
|
103 | 3599 | 1031177320000 | | exa | W3231 | / | sll | 0 | ;shift current word to pad |
|
104 | 3600 | 1007022 | | jmp | .3602 | | | | ; | @3600
|
105 | 3600+ | | ; |
|
106 | 3600+ | 0606240 | .3600P: | lod | Pinfo | | | | ;any previous word? |
|
107 | 3601 | 1047022 | | jz | .3602 | | | | ;no, null string |
|
108 | 3601+ | 1107022 | | jmp | .3602P | | | | ;yes, write that instead |
|
109 | 3602 | | ; |
|
110 | 3602 | | .3602: | ; | |
|
111 | 3602 | 0446241 | | inc | W3233 | | | | ;bump word count | @3602
|
112 | 3602+ | | .3602P: | ; | |
|
113 | 3602+ | 0102175 | | add | bit39 | | | | ;add terminating flag |
|
114 | 3603 | | | call | | | | | ;output final word |
|
114+1 | 3603 | 7306371101532 | | lnk | putFwd.lnk | : | jmp | putFwd.ent | |
|
115 | 3604 | 0606241 | | lod | W3233 | | | | ;get word count | @3604
|
116 | 3604+ | 0401414 | | sto | PCdata | | | | ;save word count |
|
117 | 3605 | 0602200 | | lod | K8a | | | | ;=8, number of bits |
|
118 | 3605+ | | | nop | | | | | ; |
|
118+1 | 3605+ | 1007026 | | jmp | .1 | | | | |
|
118+2 | 3606 | | .1: | ; | |
|
119 | 3606 | | | call | | | | | ;put word count | @3606
|
119+1 | 3606 | 7306371001477 | | lnk | putcode.lnk | : | jmp | putcode.ent | |
|
120 | 3607 | 0602231 | | lod | K11 | | | | ;=11, block data o-code key |
|
121 | 3607+ | | | nop | | | | | ; |
|
121+1 | 3607+ | 1007030 | | jmp | .1 | | | | |
|
121+2 | 3608 | | .1: | ; | |
|
122 | 3608 | | | call | | | | | ;write o-code key | @3608
|
122+1 | 3608 | 7306371001526 | | lnk | putOpcd.lnk | : | jmp | putOpcd.ent | |
|
123 | 3609 | | | ret | | | | | ; |
|
123+1 | 3609 | 0031157000001 | | o00 | CompStrPtr.lnk | / | jmp | 1 | |
|
124 | 3610 | | ;-------------------------------------------------------------------- |
|