1 %macro d2 1.nolist 2 db (%1) >> 8 3 db (%1) & 0xFF 4 %endmacro 5 %macro d2a 1.nolist 6 db ((%1)-_f0) >> 8 7 db ((%1)-_f0) & 0xFF 8 %endmacro 9 SECTION .data 10 global _f0 11 _f0: 12 %define H_COL 0xFF 13 %define H_RSR 0xFE 14 %define H_CON 0xFD 15 %define H_TO 0xFC 16 %define H_AT 0xFB 17 %define H_C1 0xFA 18 %define H_C2 0xF9 19 %define H_C3 0xF8 20 %define SF_EXIT 0xFF 21 %define F_EXIT 0xE5FF 22 %define SF_PLUS 0xFE 23 %define F_PLUS 0xE5FE 24 %define SF_DUP 0xFD 25 %define F_DUP 0xE5FD 26 %define SF_2DUP 0xFC 27 %define F_2DUP 0xE5FC 28 %define SF_1 0xFB 29 %define F_1 0xE5FB 30 %define SF_SWAP 0xFA 31 %define F_SWAP 0xE5FA 32 %define SF_DROP 0xF9 33 %define F_DROP 0xE5F9 34 %define SF_STORE 0xF8 35 %define F_STORE 0xE5F8 36 %define SF_FETCH 0xF7 37 %define F_FETCH 0xE5F7 38 %define F_COUNT 0xE5F6 39 %define F_TYPE 0xE5F5 40 %define F_CR 0xE5F4 41 %define F_STO 0xE5F3 42 %define F_TOS 0xE5F2 43 %define F_SGOBBLE1 0xE5F1 44 %define F_SGOBBLE2 0xE5F0 45 %define F_SGOBBLE4 0xE5EF 46 %define F_WSTORE 0xE5EE 47 %define F_WFETCH 0xE5ED 48 %define F_SBRANCH 0xE5EC 49 %define F_S0BRANCH 0xE5EB 50 %define F_FRAME1N 0xE5EA 51 %define F_FRAMENTOADR 0xE5E9 52 %define F_FRAME2ADR 0xE5E8 53 %define F_2BECOMES1 0xE5E7 54 %define F_PRINTFRAMES 0xE5E6 55 %define SF_C 0xF6 56 %define F_C 0xE5E5 57 %define SF_SRANGE 0xF5 58 %define F_SRANGE 0xE5E4 59 %define FIP_RETURN 0xFFFF 60 %define FIP_RSREXIT 0xFFFE 61 ADR_strlen: 62 00000000 FA db H_C1 63 extern strlen 64 00000001 [00000000] dd strlen 65 ; 0<."> = 0angdotquo 66 ADR_0angdotquo: 67 00000005 FE db H_RSR 68 ; S0<."> = S0angdotquo 69 ADR_S0angdotquo: 70 00000006 FF db H_COL 71 00000007 E5F3 d2 F_STO 72 00000009 FD db SF_DUP 73 0000000A 0000 d2a ADR_strlen 74 0000000C FC db SF_2DUP 75 0000000D E5F5 d2 F_TYPE 76 0000000F FE db SF_PLUS 77 00000010 FB db SF_1 78 00000011 FE db SF_PLUS 79 00000012 E5F2 d2 F_TOS 80 00000014 FF db SF_EXIT 81 global ADR_BRANCH 82 ADR_BRANCH: 83 %define SF_BRANCH 0xF4 84 00000015 FE db H_RSR 85 00000016 FF db H_COL 86 00000017 E5EC d2 F_SBRANCH 87 00000019 FF db SF_EXIT 88 global ADR_0BRANCH 89 ADR_0BRANCH: 90 %define SF_0BRANCH 0xF3 91 0000001A FE db H_RSR 92 0000001B FF db H_COL 93 0000001C E5EB d2 F_S0BRANCH 94 0000001E FF db SF_EXIT 95 ; YES/NO = YESx2fNO 96 ADR_YESx2fNO: 97 0000001F FF db H_COL 98 00000020 F3 db SF_0BRANCH 99 00000021 2D00 dw LBL_no-_f0 100 00000023 0005 d2a ADR_0angdotquo 101 00000025 7965730A00 db 'yes', 10,0 102 0000002A F4 db SF_BRANCH 103 0000002B 3300 dw LBL_end-_f0 104 LBL_no: 105 0000002D 0005 d2a ADR_0angdotquo 106 0000002F 6E6F0A00 db 'no', 10,0 107 LBL_end: 108 00000033 FF db SF_EXIT 109 global ADR_LITW 110 ADR_LITW: 111 %define SF_LITW 0xF2 112 00000034 FE db H_RSR 113 00000035 FF db H_COL 114 00000036 E5F0 d2 F_SGOBBLE2 115 00000038 FF db SF_EXIT 116 global ADR_LITD 117 ADR_LITD: 118 %define SF_LITD 0xF1 119 00000039 FE db H_RSR 120 0000003A FF db H_COL 121 0000003B E5EF d2 F_SGOBBLE4 122 0000003D FF db SF_EXIT 123 extern DBG_BITS 124 ; DBG! = DBGx21 125 ADR_DBGx21: 126 0000003E FF db H_COL 127 0000003F 0039 d2a ADR_LITD 128 00000041 [00000000] dd DBG_BITS 129 00000045 F8 db SF_STORE 130 00000046 FF db SF_EXIT 131 ; DBG-ON = DBGx2dON 132 global ADR_DBGx2dON 133 ADR_DBGx2dON: 134 %define SF_DBGx2dON 0xF0 135 00000047 FF db H_COL 136 00000048 0034 d2a ADR_LITW 137 0000004A FFFF dw -1 138 0000004C 003E d2a ADR_DBGx21 139 0000004E FF db SF_EXIT 140 ; DBG-OFF = DBGx2dOFF 141 global ADR_DBGx2dOFF 142 ADR_DBGx2dOFF: 143 %define SF_DBGx2dOFF 0xEF 144 0000004F FF db H_COL 145 00000050 0034 d2a ADR_LITW 146 00000052 0000 dw 0 147 00000054 003E d2a ADR_DBGx21 148 00000056 FF db SF_EXIT 149 ; .IP = x2eIP 150 ADR_x2eIP: 151 00000057 FF db H_COL 152 00000058 F7 db SF_FETCH 153 00000059 FF db SF_EXIT 154 ; .IP! = x2eIPx21 155 ADR_x2eIPx21: 156 0000005A FF db H_COL 157 0000005B F8 db SF_STORE 158 0000005C FF db SF_EXIT 159 ; .POS = x2ePOS 160 ADR_x2ePOS: 161 0000005D FF db H_COL 162 0000005E 0034 d2a ADR_LITW 163 00000060 0400 dw 4 164 00000062 FE db SF_PLUS 165 00000063 F7 db SF_FETCH 166 00000064 FF db SF_EXIT 167 ; .POS! = x2ePOSx21 168 ADR_x2ePOSx21: 169 00000065 FF db H_COL 170 00000066 0034 d2a ADR_LITW 171 00000068 0400 dw 4 172 0000006A FE db SF_PLUS 173 0000006B F8 db SF_STORE 174 0000006C FF db SF_EXIT 175 ; .RET = x2eRET 176 ADR_x2eRET: 177 0000006D FF db H_COL 178 0000006E 0034 d2a ADR_LITW 179 00000070 0800 dw 8 180 00000072 FE db SF_PLUS 181 00000073 E5ED d2 F_WFETCH 182 00000075 FF db SF_EXIT 183 ; .RET! = x2eRETx21 184 ADR_x2eRETx21: 185 00000076 FF db H_COL 186 00000077 0034 d2a ADR_LITW 187 00000079 0800 dw 8 188 0000007B FE db SF_PLUS 189 0000007C E5EE d2 F_WSTORE 190 0000007E FF db SF_EXIT 191 ; .FAIL = x2eFAIL 192 ADR_x2eFAIL: 193 0000007F FF db H_COL 194 00000080 0034 d2a ADR_LITW 195 00000082 0A00 dw 10 196 00000084 FE db SF_PLUS 197 00000085 E5ED d2 F_WFETCH 198 00000087 FF db SF_EXIT 199 ; .FAIL! = x2eFAILx21 200 ADR_x2eFAILx21: 201 00000088 FF db H_COL 202 00000089 0034 d2a ADR_LITW 203 0000008B 0A00 dw 10 204 0000008D FE db SF_PLUS 205 0000008E E5EE d2 F_WSTORE 206 00000090 FF db SF_EXIT 207 ; 2.IP! = 2x2eIPx21 208 ADR_2x2eIPx21: 209 00000091 FF db H_COL 210 00000092 E5E8 d2 F_FRAME2ADR 211 00000094 005A d2a ADR_x2eIPx21 212 00000096 FF db SF_EXIT 213 ; 2.POS! = 2x2ePOSx21 214 ADR_2x2ePOSx21: 215 00000097 FF db H_COL 216 00000098 E5E8 d2 F_FRAME2ADR 217 0000009A 0065 d2a ADR_x2ePOSx21 218 0000009C FF db SF_EXIT 219 ; 2.RET! = 2x2eRETx21 220 ADR_2x2eRETx21: 221 0000009D FF db H_COL 222 0000009E E5E8 d2 F_FRAME2ADR 223 000000A0 0076 d2a ADR_x2eRETx21 224 000000A2 FF db SF_EXIT 225 ; 2.FAIL! = 2x2eFAILx21 226 ADR_2x2eFAILx21: 227 000000A3 FF db H_COL 228 000000A4 E5E8 d2 F_FRAME2ADR 229 000000A6 0088 d2a ADR_x2eFAILx21 230 000000A8 FF db SF_EXIT 231 ADR_CREATEFRAME: 232 000000A9 FF db H_COL 233 000000AA 00A3 d2a ADR_2x2eFAILx21 234 000000AC 009D d2a ADR_2x2eRETx21 235 000000AE 0097 d2a ADR_2x2ePOSx21 236 000000B0 0091 d2a ADR_2x2eIPx21 237 000000B2 E5E7 d2 F_2BECOMES1 238 000000B4 FF db SF_EXIT 239 ; 1.ADR = 1x2eADR 240 ADR_1x2eADR: 241 000000B5 FF db H_COL 242 000000B6 E5EA d2 F_FRAME1N 243 000000B8 E5E9 d2 F_FRAMENTOADR 244 000000BA FF db SF_EXIT 245 ; 1.IP = 1x2eIP 246 ADR_1x2eIP: 247 000000BB FF db H_COL 248 000000BC 00B5 d2a ADR_1x2eADR 249 000000BE 0057 d2a ADR_x2eIP 250 000000C0 FF db SF_EXIT 251 ; 1.POS = 1x2ePOS 252 ADR_1x2ePOS: 253 000000C1 FF db H_COL 254 000000C2 00B5 d2a ADR_1x2eADR 255 000000C4 005D d2a ADR_x2ePOS 256 000000C6 FF db SF_EXIT 257 ; 1.RET = 1x2eRET 258 ADR_1x2eRET: 259 000000C7 FF db H_COL 260 000000C8 00B5 d2a ADR_1x2eADR 261 000000CA 006D d2a ADR_x2eRET 262 000000CC FF db SF_EXIT 263 ; 1.FAIL = 1x2eFAIL 264 ADR_1x2eFAIL: 265 000000CD FF db H_COL 266 000000CE 00B5 d2a ADR_1x2eADR 267 000000D0 007F d2a ADR_x2eFAIL 268 000000D2 FF db SF_EXIT 269 ; RET.ADR = RETx2eADR 270 ADR_RETx2eADR: 271 000000D3 FF db H_COL 272 000000D4 00C7 d2a ADR_1x2eRET 273 000000D6 E5E9 d2 F_FRAMENTOADR 274 000000D8 FF db SF_EXIT 275 ; RET.IP = RETx2eIP 276 ADR_RETx2eIP: 277 000000D9 FF db H_COL 278 000000DA 00D3 d2a ADR_RETx2eADR 279 000000DC 0057 d2a ADR_x2eIP 280 000000DE FF db SF_EXIT 281 ; RET.POS = RETx2ePOS 282 ADR_RETx2ePOS: 283 000000DF FF db H_COL 284 000000E0 00D3 d2a ADR_RETx2eADR 285 000000E2 005D d2a ADR_x2ePOS 286 000000E4 FF db SF_EXIT 287 ; RET.RET = RETx2eRET 288 ADR_RETx2eRET: 289 000000E5 FF db H_COL 290 000000E6 00D3 d2a ADR_RETx2eADR 291 000000E8 006D d2a ADR_x2eRET 292 000000EA FF db SF_EXIT 293 ; RET.FAIL = RETx2eFAIL 294 ADR_RETx2eFAIL: 295 000000EB FF db H_COL 296 000000EC 00D3 d2a ADR_RETx2eADR 297 000000EE 007F d2a ADR_x2eFAIL 298 000000F0 FF db SF_EXIT 299 ; FAIL.ADR = FAILx2eADR 300 ADR_FAILx2eADR: 301 000000F1 FF db H_COL 302 000000F2 00CD d2a ADR_1x2eFAIL 303 000000F4 E5E9 d2 F_FRAMENTOADR 304 000000F6 FF db SF_EXIT 305 ; FAIL.IP = FAILx2eIP 306 ADR_FAILx2eIP: 307 000000F7 FF db H_COL 308 000000F8 00F1 d2a ADR_FAILx2eADR 309 000000FA 0057 d2a ADR_x2eIP 310 000000FC FF db SF_EXIT 311 ; FAIL.POS = FAILx2ePOS 312 ADR_FAILx2ePOS: 313 000000FD FF db H_COL 314 000000FE 00F1 d2a ADR_FAILx2eADR 315 00000100 005D d2a ADR_x2ePOS 316 00000102 FF db SF_EXIT 317 ; FAIL.RET = FAILx2eRET 318 ADR_FAILx2eRET: 319 00000103 FF db H_COL 320 00000104 00F1 d2a ADR_FAILx2eADR 321 00000106 006D d2a ADR_x2eRET 322 00000108 FF db SF_EXIT 323 ; FAIL.FAIL = FAILx2eFAIL 324 ADR_FAILx2eFAIL: 325 00000109 FF db H_COL 326 0000010A 00F1 d2a ADR_FAILx2eADR 327 0000010C 007F d2a ADR_x2eFAIL 328 0000010E FF db SF_EXIT 329 ; SDUP>D = SDUPx3eD 330 ADR_SDUPx3eD: 331 0000010F FF db H_COL 332 00000110 E5F3 d2 F_STO 333 00000112 FD db SF_DUP 334 00000113 E5F2 d2 F_TOS 335 00000115 FF db SF_EXIT 336 ADR_FRAME: 337 00000116 FE db H_RSR 338 ADR_SFRAME: 339 00000117 FF db H_COL 340 00000118 010F d2a ADR_SDUPx3eD 341 0000011A 00C1 d2a ADR_1x2ePOS 342 0000011C 00C7 d2a ADR_1x2eRET 343 0000011E 00CD d2a ADR_1x2eFAIL 344 00000120 00A9 d2a ADR_CREATEFRAME 345 00000122 FF db SF_EXIT 346 global ADR_SALTPUSH 347 ADR_SALTPUSH: 348 %define SF_SALTPUSH 0xEE 349 00000123 FE db H_RSR 350 00000124 FF db H_COL 351 00000125 0117 d2a ADR_SFRAME 352 00000127 010F d2a ADR_SDUPx3eD 353 00000129 00C1 d2a ADR_1x2ePOS 354 0000012B 00C7 d2a ADR_1x2eRET 355 0000012D E5EA d2 F_FRAME1N 356 0000012F 00A9 d2a ADR_CREATEFRAME 357 00000131 E5F3 d2 F_STO 358 00000133 0034 d2a ADR_LITW 359 00000135 0300 dw 3 360 00000137 FE db SF_PLUS 361 00000138 E5F2 d2 F_TOS 362 0000013A 0117 d2a ADR_SFRAME 363 0000013C FF db SF_EXIT 364 global ADR_SALTPOP 365 ADR_SALTPOP: 366 %define SF_SALTPOP 0xED 367 0000013D FE db H_RSR 368 0000013E FF db H_COL 369 0000013F E5EC d2 F_SBRANCH 370 00000141 010F d2a ADR_SDUPx3eD 371 00000143 00FD d2a ADR_FAILx2ePOS 372 00000145 0103 d2a ADR_FAILx2eRET 373 00000147 0109 d2a ADR_FAILx2eFAIL 374 00000149 00A9 d2a ADR_CREATEFRAME 375 0000014B FF db SF_EXIT 376 ; WASRET! = WASRETx21 377 ADR_WASRETx21: 378 0000014C FC db H_TO 379 ADR_WASRET: 380 0000014D FD db H_CON 381 0000014E 00000000 dd 0 382 ADR_RET: 383 00000152 FE db H_RSR 384 ADR_SRET: 385 00000153 FF db H_COL 386 00000154 E5F3 d2 F_STO 387 00000156 F9 db SF_DROP 388 00000157 0034 d2a ADR_LITW 389 00000159 0100 dw 1 390 0000015B 014C d2a ADR_WASRETx21 391 0000015D 00D9 d2a ADR_RETx2eIP 392 0000015F E5F2 d2 F_TOS 393 00000161 FF db SF_EXIT 394 ADR_FAIL: 395 00000162 FE db H_RSR 396 ADR_SFAIL: 397 00000163 FF db H_COL 398 00000164 E5F3 d2 F_STO 399 00000166 F9 db SF_DROP 400 00000167 0034 d2a ADR_LITW 401 00000169 0000 dw 0 402 0000016B 014C d2a ADR_WASRETx21 403 0000016D 00F7 d2a ADR_FAILx2eIP 404 0000016F E5F2 d2 F_TOS 405 00000171 FF db SF_EXIT 406 global ADR_RANGE 407 ADR_RANGE: 408 %define SF_RANGE 0xEC 409 00000172 FE db H_RSR 410 00000173 FF db H_COL 411 00000174 F5 db SF_SRANGE 412 00000175 FF db SF_EXIT 413 global ADR_CIN 414 ADR_CIN: 415 %define SF_CIN 0xEB 416 00000176 FE db H_RSR 417 ADR_SCIN: 418 00000177 FF db H_COL 419 00000178 F9 db SF_DROP 420 00000179 F3 db SF_0BRANCH 421 0000017A 8C01 dw LBL_cinfail-_f0 422 0000017C E5F3 d2 F_STO 423 0000017E FD db SF_DUP 424 0000017F E5F2 d2 F_TOS 425 00000181 00C1 d2a ADR_1x2ePOS 426 00000183 FB db SF_1 427 00000184 FE db SF_PLUS 428 00000185 00C7 d2a ADR_1x2eRET 429 00000187 00CD d2a ADR_1x2eFAIL 430 00000189 00A9 d2a ADR_CREATEFRAME 431 0000018B FF db SF_EXIT 432 LBL_cinfail: 433 0000018C 0163 d2a ADR_SFAIL 434 0000018E FF db SF_EXIT 435 ADR_PF: 436 0000018F FE db H_RSR 437 00000190 FF db H_COL 438 00000191 0117 d2a ADR_SFRAME 439 00000193 E5E6 d2 F_PRINTFRAMES 440 00000195 FF db SF_EXIT 441 global ADR_BIGFAIL 442 ADR_BIGFAIL: 443 00000196 0005 d2a ADR_0angdotquo 444 00000198 6661696C6564210A00 db 'failed!',10,0 445 000001A1 FF db SF_EXIT 446 global ADR_DEMO 447 ADR_DEMO: 448 000001A2 FF db H_COL 449 LBL_1: 450 000001A3 0005 d2a ADR_0angdotquo 451 000001A5 610A00 db 'a',10,0 452 000001A8 018F d2a ADR_PF; === a 453 000001AA F6EC3039EB db SF_C, SF_RANGE,'09', SF_CIN 454 000001AF 0005 d2a ADR_0angdotquo 455 000001B1 620A00 db 'b',10,0 456 000001B4 018F d2a ADR_PF; === b 457 000001B6 EE db SF_SALTPUSH 458 000001B7 ED db SF_SALTPOP 459 000001B8 A301 dw LBL_1-_f0 460 000001BA 0005 d2a ADR_0angdotquo 461 000001BC 630A00 db 'c',10,0 462 000001BF 018F d2a ADR_PF; === c 463 000001C1 F6EC3039EB db SF_C, SF_RANGE,'09', SF_CIN 464 000001C6 0005 d2a ADR_0angdotquo 465 000001C8 640A00 db 'd',10,0 466 000001CB 018F d2a ADR_PF; === d 467 000001CD F6EC2E2EEB db SF_C, SF_RANGE,'..', SF_CIN 468 000001D2 0005 d2a ADR_0angdotquo 469 000001D4 650A00 db 'e',10,0 470 000001D7 018F d2a ADR_PF; === e 471 000001D9 FF db SF_EXIT