; memory map M[.] ; code 0..500 ; global 1000..1100 ; symtab 2000..2999 ; global ; 1000 CH ; 1001 CS ; 1002 CP 1 call boot2 2 call testlex 3 end ; isNum c 20 fun 1 21 get 1 22 lit 48 23 ge 24 get 1 25 lit 57 26 le 27 and 28 ret 2 ;; isSpace c 29 fun 1 30 get 1 31 lit 32 32 eq 33 get 1 34 lit 10 35 eq 36 or 37 get 1 38 lit 0 39 lt 40 or 41 ret 2 ;; readc {c} 60 fun 2 61 sys 3 62 put 1 63 get 1 64 st 1000 65 get 1 66 sys 2 67 get 1 68 ret 2 ;65 get 1 ;66 ret 2 ;; readi c { n pos} 70 fun 3 71 get 3 72 lit 48 73 sub 74 put 2 75 get 2 76 put 1 77 jmp x loop: 78 get 2 79 lit 10 80 mul 81 ld 1000 82 add 83 lit 48 84 sub 85 put 2 x: 86 call readc 87 call isspace 88 not 89 jt loop 90 get 1 91 jf y 92 get 2 93 ret 4 y: 94 lit 0 95 get 2 96 sub 97 ret 4 ;; boot {op arg i} 100 fun 4 101 call readc 102 call readi 103 put 3 104 jmp x loop: 105 call readc 106 call readi 107 put 2 108 get 3 109 sys 1 110 lit 32 111 sys 2 112 get 2 113 sys 1 114 lit 10 115 sys 2 116 call readc 117 call readi 118 put 3 x: 119 get 3 120 lit 0 121 ne 122 jt loop 123 ret 4 ; test boot ; with some s-object ; 32 17 ; 23 0 ; 38 1 ; 0 ; 130 boot2 {op arg i} 130 fun 4 131 lit 301000 132 st CS 133 lit 159 134 put 1 135 call readc 136 call readi 137 put 3 138 jmp x loop: 139 call readc 140 call readi 141 put 2 142 ld CS 143 get 1 144 get 2 145 lit 8 146 shl 147 get 3 148 or 149 stx 150 inc 1 151 call readc 152 call readi 153 put 3 x: 154 get 3 155 lit 0 156 ne 157 jt loop 158 ret 4 ; test boot2 with simple ; program ; testboot2 ; 159 fun 1 ; 160 lit 1 ; 161 lit 2 ; 162 add ; 163 sys 1 ; 164 ret 1 ; global ; 1003 freecell ; 1004 base ads of symtab ; 1005 tkval ; newcell c { k } 170 fun 2 171 ld 1003 172 put 1 173 ld 1003 174 lit 4 175 add 176 st 1003 177 ld 1004 178 get 1 179 get 2 180 stx 181 get 1 182 ret 3 ; 183 search i c 183 fun 1 184 ld 1004 185 get 2 186 ldx 187 lit 0 188 eq 189 jf x 190 ld 1004 191 get 2 192 get 1 193 call 170 194 stx x: 195 ld 1004 196 get 2 197 ldx 198 ret 3 ; 200 lex { i } 200 fun 2 201 jmp x loop: 202 ld 1000 203 lit 0 204 lt 205 jt y x: 206 call readc 207 call isspace 208 jt loop y: 209 ld 1000 210 call isnum 211 jf z 212 ld 1000 213 call readi 214 st 1005 215 lit 1 216 ret 2 z: 217 lit 0 218 put 1 219 jmp w loop2: 220 get 1 221 lit 2 222 add 223 ld 1000 224 call search 225 put 1 226 jmp v loop3: 227 get 1 228 lit 1 229 add 230 ld 1000 231 call search 232 put 1 v: 233 ld 1004 234 get 1 235 ldx 236 ld 1000 237 ne 238 jt loop3 239 call readc 240 st 1000 w: 241 ld 1000 242 call isspace 243 not 244 jt loop2 245 get 1 246 ret 2 ; 250 testlex { i } 250 fun 2 251 lit 100 252 array 253 st sym 254 call lex 255 put 1 256 jmp x loop: 257 get 1 258 sys 1 259 lit 32 260 sys 2 261 call lex 262 put 1 x: 263 ld tkval 264 lit 0 265 ne 266 jt loop 267 ret 2 ; testlex with simple input 1 2 3 aa bb x 9 0