.INCLUDE "plstub.s" ; 1: ; ; 2: ; Global constants ; 3: ; ; 4: const FALSE = 0 ; FALSE = 0 ; 5: const TRUE = !FALSE ; TRUE = -1 ; 6: ; ; 7: ; Data and text buffer constants ; 8: ; ; 9: const iobuffer = $0800 ; iobuffer = 2048 ; 10: const codebuff = $6000 ; codebuff = 24576 ; 11: const codebuffsz = $5000 ; codebuffsz = 20480 ; 12: const argbuff = $2006 ; argbuff = 8198 ; 13: const inbuff = $0200 ; inbuff = 512 ; 14: const instr = $01FF ; instr = 511 ; 15: byte inref D0000: DS 1 ; inref ; 16: ;byte emptystk ; 17: ; ; 18: ; Symbol table variables ; 19: ; ; 20: const idglobal_tblsz = $0800 ; idglobal_tblsz = 2048 ; 21: const idlocal_tblsz = $0200 ; idlocal_tblsz = 512 ; 22: const idglobal_tbl = $1000 ; idglobal_tbl = 4096 ; 23: const idlocal_tbl = $1800 ; idlocal_tbl = 6144 ; 24: const ctag_max = 768 ; ctag_max = 768 ; 25: const ctag_value = $1A00 ; ctag_value = 6656 ; 26: const ctag_flags = $0D00 ; ctag_flags = 3328 ; 27: const idval = 0 ; idval = 0 ; 28: const idtype = 2 ; idtype = 2 ; 29: const idname = 3 ; idname = 3 ; 30: const idrecsz = 4 ; idrecsz = 4 ; 31: word globals = 0 D0001: ; globals DW $0000 ; 32: word datasize = 0 D0003: ; datasize DW $0000 ; 33: word lastglobal D0005: DS 2 ; lastglobal ; 34: byte locals = 0 D0007: ; locals DB $00 ; 35: word framesize = 0 D0008: ; framesize DW $0000 ; 36: word lastlocal D0010: DS 2 ; lastlocal ; 37: const resolved = 1 ; resolved = 1 ; 38: const is_ctag = $8000 ; is_ctag = 32768 ; 39: const mask_ctag = $7FFF ; mask_ctag = 32767 ; 40: word codetag = -1 D0012: ; codetag DW $FFFF ; 41: word codeptr D0014: DS 2 ; codeptr ; 42: word entrypoint = 0 D0016: ; entrypoint DW $0000 ; 43: byte lastop = $FF D0018: ; lastop DB $FF ; 44: byte perr D0019: DS 1 ; perr ; 45: ; ; 46: ; String variables ; 47: ; ; 48: byte version[] = "PLASMA ][ EXECUTIVE VERSION 0.8 " D0020: ; version DB $20 DB $50,$4C,$41,$53,$4D,$41,$20,$5D DB $5B,$20,$45,$58,$45,$43,$55,$54 DB $49,$56,$45,$20,$56,$45,$52,$53 DB $49,$4F,$4E,$20,$30,$2E,$38,$20 ; 49: byte donemsg[] = "EXECUTION COMPLETE. PRESS A KEY..." D0053: ; donemsg DB $23 DB $45,$58,$45,$43,$55,$54,$49,$4F DB $4E,$20,$43,$4F,$4D,$50,$4C,$45 DB $54,$45,$2E,$20,$20,$50,$52,$45 DB $53,$53,$20,$41,$20,$4B,$45,$59 DB $2E,$2E,$2E ; 50: byte badfile[] = "FILE NOT FOUND" D0089: ; badfile DB $0E DB $46,$49,$4C,$45,$20,$4E,$4F,$54 DB $20,$46,$4F,$55,$4E,$44 ; 51: byte brkmsg[] = "CTRL-C BREAK" D0104: ; brkmsg DB $0C DB $43,$54,$52,$4C,$2D,$43,$20,$42 DB $52,$45,$41,$4B ; 52: byte stkovflwmsg[] = "STACK OVERFLOW/UNDERFLOW ERROR" D0117: ; stkovflwmsg DB $1E DB $53,$54,$41,$43,$4B,$20,$4F,$56 DB $45,$52,$46,$4C,$4F,$57,$2F,$55 DB $4E,$44,$45,$52,$46,$4C,$4F,$57 DB $20,$45,$52,$52,$4F,$52 ; 53: ; ; 54: ; Tokens ; 55: ; ; 56: const ID_TKN = $D6 ; V ; ID_TKN = 214 ; 57: const CHR_TKN = $C3 ; C ; CHR_TKN = 195 ; 58: const INT_TKN = $C9 ; I ; INT_TKN = 201 ; 59: const STR_TKN = $D3 ; S ; STR_TKN = 211 ; 60: const EOL_TKN = $02 ; EOL_TKN = 2 ; 61: const EOF_TKN = $01 ; EOF_TKN = 1 ; 62: const ERR_TKN = $00 ; ERR_TKN = 0 ; 63: ; ; 64: ; Binary operand operators ; 65: ; ; 66: const SET_TKN = $BD ; = ; SET_TKN = 189 ; 67: const SETLIST_TKN = $B9 ; =, ; SETLIST_TKN = 185 ; 68: const ADD_TKN = $AB ; + ; ADD_TKN = 171 ; 69: const SUB_TKN = $AD ; - ; SUB_TKN = 173 ; 70: const MUL_TKN = $AA ; * ; MUL_TKN = 170 ; 71: const DIV_TKN = $AF ; / ; DIV_TKN = 175 ; 72: const MOD_TKN = $A5 ; % ; MOD_TKN = 165 ; 73: const OR_TKN = $BF ; ? ; OR_TKN = 191 ; 74: const EOR_TKN = $DE ; ^ ; EOR_TKN = 222 ; 75: const AND_TKN = $A6 ; & ; AND_TKN = 166 ; 76: const SHR_TKN = $D2 ; R ; SHR_TKN = 210 ; 77: const SHL_TKN = $CC ; L ; SHL_TKN = 204 ; 78: const GT_TKN = $BE ; > ; GT_TKN = 190 ; 79: const GE_TKN = $C8 ; H ; GE_TKN = 200 ; 80: const LT_TKN = $BC ; < ; LT_TKN = 188 ; 81: const LE_TKN = $C2 ; B ; LE_TKN = 194 ; 82: const NE_TKN = $D5 ; U ; NE_TKN = 213 ; 83: const EQ_TKN = $C5 ; E ; EQ_TKN = 197 ; 84: const LOGIC_AND_TKN = $CE ; N ; LOGIC_AND_TKN = 206 ; 85: const LOGIC_OR_TKN = $CF ; O ; LOGIC_OR_TKN = 207 ; 86: ; ; 87: ; Unary operand operators ; 88: ; ; 89: const AT_TKN = $C0 ; @ ; AT_TKN = 192 ; 90: const DOT_TKN = $AE ; . ; DOT_TKN = 174 ; 91: const COLON_TKN = $BA ; : ; COLON_TKN = 186 ; 92: const NEG_TKN = $AD ; - ; NEG_TKN = 173 ; 93: const COMP_TKN = $A3 ; # ; COMP_TKN = 163 ; 94: const LOGIC_NOT_TKN = $A1 ; ! ; LOGIC_NOT_TKN = 161 ; 95: const BPTR_TKN = $DE ; ^ ; BPTR_TKN = 222 ; 96: const WPTR_TKN = $AA ; * ; WPTR_TKN = 170 ; 97: const INC_TKN = $C1 ; A ; INC_TKN = 193 ; 98: const DEC_TKN = $C4 ; D ; DEC_TKN = 196 ; 99: ; ; 100: ; Enclosure tokens ; 101: ; ; 102: const OPEN_PAREN_TKN = $A8 ; ( ; OPEN_PAREN_TKN = 168 ; 103: const CLOSE_PAREN_TKN = $A9 ; ) ; CLOSE_PAREN_TKN = 169 ; 104: const OPEN_BRACKET_TKN = $DB ; [ ; OPEN_BRACKET_TKN = 219 ; 105: const CLOSE_BRACKET_TKN = $DD ; ] ; CLOSE_BRACKET_TKN = 221 ; 106: ; ; 107: ; Misc. tokens ; 108: ; ; 109: const COMMA_TKN = $AC ; , ; COMMA_TKN = 172 ; 110: const COMMENT_TKN = $BB ; ; ; COMMENT_TKN = 187 ; 111: ; ; 112: ; Keyword tokens ; 113: ; ; 114: const CONST_TKN = $80 ; CONST_TKN = 128 ; 115: const BYTE_TKN = $81 ; BYTE_TKN = 129 ; 116: const WORD_TKN = $82 ; WORD_TKN = 130 ; 117: const IF_TKN = $83 ; IF_TKN = 131 ; 118: const ELSEIF_TKN = $84 ; ELSEIF_TKN = 132 ; 119: const ELSE_TKN = $85 ; ELSE_TKN = 133 ; 120: const FIN_TKN = $86 ; FIN_TKN = 134 ; 121: const END_TKN = $87 ; END_TKN = 135 ; 122: const WHILE_TKN = $88 ; WHILE_TKN = 136 ; 123: const LOOP_TKN = $89 ; LOOP_TKN = 137 ; 124: const CASE_TKN = $8A ; CASE_TKN = 138 ; 125: const OF_TKN = $8B ; OF_TKN = 139 ; 126: const DEFAULT_TKN = $8C ; DEFAULT_TKN = 140 ; 127: const ENDCASE_TKN = $8D ; ENDCASE_TKN = 141 ; 128: const FOR_TKN = $8E ; FOR_TKN = 142 ; 129: const TO_TKN = $8F ; TO_TKN = 143 ; 130: const DOWNTO_TKN = $90 ; DOWNTO_TKN = 144 ; 131: const STEP_TKN = $91 ; STEP_TKN = 145 ; 132: const NEXT_TKN = $92 ; NEXT_TKN = 146 ; 133: const REPEAT_TKN = $93 ; REPEAT_TKN = 147 ; 134: const UNTIL_TKN = $94 ; UNTIL_TKN = 148 ; 135: const IFUNC_TKN = $95 ; IFUNC_TKN = 149 ; 136: const NFUNC_TKN = $96 ; NFUNC_TKN = 150 ; 137: const DROP_TKN = $97 ; DROP_TKN = 151 ; 138: const DONE_TKN = $98 ; DONE_TKN = 152 ; 139: const RETURN_TKN = $99 ; RETURN_TKN = 153 ; 140: const BREAK_TKN = $9A ; BREAK_TKN = 154 ; 141: const START_TKN = $9B ; START_TKN = 155 ; 142: const EXIT_TKN = $9C ; EXIT_TKN = 156 ; 143: const EVAL_TKN = $9D ; EVAL_TKN = 157 ; 144: const FUNC_TKN = $9E ; FUNC_TKN = 158 ; 145: ; ; 146: ; Types ; 147: ; ; 148: const CONST_TYPE = $01 ; CONST_TYPE = 1 ; 149: const BYTE_TYPE = $02 ; BYTE_TYPE = 2 ; 150: const WORD_TYPE = $04 ; WORD_TYPE = 4 ; 151: const VAR_TYPE = $06 ; (WORD_TYPE | BYTE_TYPE) ; VAR_TYPE = 6 ; 152: const FUNC_TYPE = $08 ; FUNC_TYPE = 8 ; 153: const FUNC_CONST_TYPE = $09 ; FUNC_CONST_TYPE = 9 ; 154: const ADDR_TYPE = $0E ; (VAR_TYPE | FUNC_TYPE) ; ADDR_TYPE = 14 ; 155: const LOCAL_TYPE = $10 ; LOCAL_TYPE = 16 ; 156: const BPTR_TYPE = $20 ; BPTR_TYPE = 32 ; 157: const WPTR_TYPE = $40 ; WPTR_TYPE = 64 ; 158: const PTR_TYPE = $60 ; (BPTR_TYPE | WPTR_TYPE) ; PTR_TYPE = 96 ; 159: const XBYTE_TYPE = $22 ; (BPTR_TYPE | BYTE_TYPE) ; XBYTE_TYPE = 34 ; 160: const XWORD_TYPE = $44 ; (WPTR_TYPE | WORD_TYPE) ; XWORD_TYPE = 68 ; 161: const STR_TYPE = $80 ; STR_TYPE = 128 ; 162: ; ; 163: ; Keywords ; 164: ; ; 165: byte keywrds[] D0148: ; keywrds ; 166: byte = "IF", IF_TKN DB $02 DB $49,$46 DB $83 ; 167: byte = "TO", TO_TKN DB $02 DB $54,$4F DB $8F ; 168: byte = "IS", OF_TKN DB $02 DB $49,$53 DB $8B ; 169: byte = "OR", LOGIC_OR_TKN DB $02 DB $4F,$52 DB $CF ; 170: byte = "FOR", FOR_TKN DB $03 DB $46,$4F,$52 DB $8E ; 171: byte = "FIN", FIN_TKN DB $03 DB $46,$49,$4E DB $86 ; 172: byte = "DEF", IFUNC_TKN DB $03 DB $44,$45,$46 DB $95 ; 173: byte = "END", END_TKN DB $03 DB $45,$4E,$44 DB $87 ; 174: byte = "AND", LOGIC_AND_TKN DB $03 DB $41,$4E,$44 DB $CE ; 175: byte = "NOT", LOGIC_NOT_TKN DB $03 DB $4E,$4F,$54 DB $A1 ; 176: byte = "BYTE", BYTE_TKN DB $04 DB $42,$59,$54,$45 DB $81 ; 177: byte = "WORD", WORD_TKN DB $04 DB $57,$4F,$52,$44 DB $82 ; 178: byte = "DROP", DROP_TKN DB $04 DB $44,$52,$4F,$50 DB $97 ; 179: byte = "ELSE", ELSE_TKN DB $04 DB $45,$4C,$53,$45 DB $85 ; 180: byte = "NEXT", NEXT_TKN DB $04 DB $4E,$45,$58,$54 DB $92 ; 181: byte = "WHEN", CASE_TKN DB $04 DB $57,$48,$45,$4E DB $8A ; 182: byte = "LOOP", LOOP_TKN DB $04 DB $4C,$4F,$4F,$50 DB $89 ; 183: byte = "FUNC", FUNC_TKN DB $04 DB $46,$55,$4E,$43 DB $9E ; 184: byte = "STEP", STEP_TKN DB $04 DB $53,$54,$45,$50 DB $91 ; 185: byte = "EXIT", EXIT_TKN DB $04 DB $45,$58,$49,$54 DB $9C ; 186: byte = "DONE", DONE_TKN DB $04 DB $44,$4F,$4E,$45 DB $98 ; 187: byte = "WEND", ENDCASE_TKN DB $04 DB $57,$45,$4E,$44 DB $8D ; 188: byte = "CONST", CONST_TKN DB $05 DB $43,$4F,$4E,$53,$54 DB $80 ; 189: byte = "ELSIF", ELSEIF_TKN DB $05 DB $45,$4C,$53,$49,$46 DB $84 ; 190: byte = "WHILE", WHILE_TKN DB $05 DB $57,$48,$49,$4C,$45 DB $88 ; 191: byte = "UNTIL", UNTIL_TKN DB $05 DB $55,$4E,$54,$49,$4C DB $94 ; 192: byte = "BREAK", BREAK_TKN DB $05 DB $42,$52,$45,$41,$4B DB $9A ; 193: byte = "OTHER", DEFAULT_TKN DB $05 DB $4F,$54,$48,$45,$52 DB $8C ; 194: byte = "DOWNTO", DOWNTO_TKN DB $06 DB $44,$4F,$57,$4E,$54,$4F DB $90 ; 195: byte = "REPEAT", REPEAT_TKN DB $06 DB $52,$45,$50,$45,$41,$54 DB $93 ; 196: byte = "DEFOPT", NFUNC_TKN DB $06 DB $44,$45,$46,$4F,$50,$54 DB $96 ; 197: byte = "RETURN", RETURN_TKN DB $06 DB $52,$45,$54,$55,$52,$4E DB $99 ; 198: byte = $FF DB $FF ; 199: ; ; 200: ; Mathematical ops ; 201: ; ; 202: const bops_tblsz = 18 ; minus 1 ; bops_tblsz = 18 ; 203: byte bops_tbl[] ; Highest precedence D0341: ; bops_tbl ; 204: byte = MUL_TKN, DIV_TKN, MOD_TKN DB $AA DB $AF DB $A5 ; 205: byte = ADD_TKN, SUB_TKN DB $AB DB $AD ; 206: byte = SHR_TKN, SHL_TKN DB $D2 DB $CC ; 207: byte = AND_TKN DB $A6 ; 208: byte = EOR_TKN DB $DE ; 209: byte = OR_TKN DB $BF ; 210: byte = GT_TKN, GE_TKN, LT_TKN, LE_TKN DB $BE DB $C8 DB $BC DB $C2 ; 211: byte = EQ_TKN, NE_TKN DB $C5 DB $D5 ; 212: byte = LOGIC_AND_TKN DB $CE ; 213: byte = LOGIC_OR_TKN DB $CF ; 214: byte = COMMA_TKN DB $AC ; 215: ; Lowest precedence ; 216: byte bops_prec[] ; Highest precedence D0360: ; bops_prec ; 217: byte = 1, 1, 1 DB $01 DB $01 DB $01 ; 218: byte = 2, 2 DB $02 DB $02 ; 219: byte = 3, 3 DB $03 DB $03 ; 220: byte = 4 DB $04 ; 221: byte = 5 DB $05 ; 222: byte = 6 DB $06 ; 223: byte = 7, 7, 7, 7 DB $07 DB $07 DB $07 DB $07 ; 224: byte = 8, 8 DB $08 DB $08 ; 225: byte = 9 DB $09 ; 226: byte = 10 DB $0A ; 227: byte = 11 DB $0B ; 228: ; Lowest precedence ; 229: byte opstack[16] D0379: DS 16 ; opstack ; 230: byte precstack[16] D0395: DS 16 ; precstack ; 231: word opsp = -1 D0411: ; opsp DW $FFFF ; 232: ; ; 233: ; Scanner variables ; 234: ; ; 235: byte token, tknlen D0413: DS 1 ; token D0414: DS 1 ; tknlen ; 236: word scanptr, tknptr D0415: DS 2 ; scanptr D0417: DS 2 ; tknptr ; 237: word constval D0419: DS 2 ; constval ; 238: word lineno = 0 D0421: ; lineno DW $0000 ; 239: ; ; 240: ; Compiler output messages ; 241: ; ; 242: byte entrypt_str[] = "START: " D0423: ; entrypt_str DB $07 DB $53,$54,$41,$52,$54,$3A,$20 ; 243: byte dup_id[] = "DUPLICATE IDENTIFIER" D0431: ; dup_id DB $14 DB $44,$55,$50,$4C,$49,$43,$41,$54 DB $45,$20,$49,$44,$45,$4E,$54,$49 DB $46,$49,$45,$52 ; 244: byte undecl_id[] = "UNDECLARED IDENTIFIER" D0452: ; undecl_id DB $15 DB $55,$4E,$44,$45,$43,$4C,$41,$52 DB $45,$44,$20,$49,$44,$45,$4E,$54 DB $49,$46,$49,$45,$52 ; 245: byte bad_cnst[] = "BAD CONSTANT" D0474: ; bad_cnst DB $0C DB $42,$41,$44,$20,$43,$4F,$4E,$53 DB $54,$41,$4E,$54 ; 246: byte bad_offset[] = "BAD STRUCT OFFSET" D0487: ; bad_offset DB $11 DB $42,$41,$44,$20,$53,$54,$52,$55 DB $43,$54,$20,$4F,$46,$46,$53,$45 DB $54 ; 247: byte bad_decl[] = "BAD DECLARATION" D0505: ; bad_decl DB $0F DB $42,$41,$44,$20,$44,$45,$43,$4C DB $41,$52,$41,$54,$49,$4F,$4E ; 248: byte bad_op[] = "BAD OPERATION" D0521: ; bad_op DB $0D DB $42,$41,$44,$20,$4F,$50,$45,$52 DB $41,$54,$49,$4F,$4E ; 249: byte bad_stmnt[] = "BAD STATMENT" D0535: ; bad_stmnt DB $0C DB $42,$41,$44,$20,$53,$54,$41,$54 DB $4D,$45,$4E,$54 ; 250: byte bad_expr[] = "BAD EXPRESSION" D0548: ; bad_expr DB $0E DB $42,$41,$44,$20,$45,$58,$50,$52 DB $45,$53,$53,$49,$4F,$4E ; 251: byte bad_syntax[] = "BAD SYNTAX" D0563: ; bad_syntax DB $0A DB $42,$41,$44,$20,$53,$59,$4E,$54 DB $41,$58 ; 252: byte estk_overflw[] = "EVAL STACK OVERFLOW" D0574: ; estk_overflw DB $13 DB $45,$56,$41,$4C,$20,$53,$54,$41 DB $43,$4B,$20,$4F,$56,$45,$52,$46 DB $4C,$4F,$57 ; 253: byte estk_underflw[] = "EVAL STACK UNDERFLOW" D0594: ; estk_underflw DB $14 DB $45,$56,$41,$4C,$20,$53,$54,$41 DB $43,$4B,$20,$55,$4E,$44,$45,$52 DB $46,$4C,$4F,$57 ; 254: byte local_overflw[] = "LOCAL FRAME OVERFLOW" D0615: ; local_overflw DB $14 DB $4C,$4F,$43,$41,$4C,$20,$46,$52 DB $41,$4D,$45,$20,$4F,$56,$45,$52 DB $46,$4C,$4F,$57 ; 255: byte global_sym_overflw[] = "GLOBAL SYMBOL TABLE OVERFLOW" D0636: ; global_sym_overflw DB $1C DB $47,$4C,$4F,$42,$41,$4C,$20,$53 DB $59,$4D,$42,$4F,$4C,$20,$54,$41 DB $42,$4C,$45,$20,$4F,$56,$45,$52 DB $46,$4C,$4F,$57 ; 256: byte local_sym_overflw[] = "LOCAL SYMBOL TABLE OVERFLOW" D0665: ; local_sym_overflw DB $1B DB $4C,$4F,$43,$41,$4C,$20,$53,$59 DB $4D,$42,$4F,$4C,$20,$54,$41,$42 DB $4C,$45,$20,$4F,$56,$45,$52,$46 DB $4C,$4F,$57 ; 257: byte ctag_full[] = "CODE LABEL OVERFLOW" D0693: ; ctag_full DB $13 DB $43,$4F,$44,$45,$20,$4C,$41,$42 DB $45,$4C,$20,$4F,$56,$45,$52,$46 DB $4C,$4F,$57 ; 258: byte no_close_paren[] = "MISSING CLOSING PAREN" D0713: ; no_close_paren DB $15 DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $43,$4C,$4F,$53,$49,$4E,$47,$20 DB $50,$41,$52,$45,$4E ; 259: byte no_close_bracket[] = "MISSING CLOSING BRACKET" D0735: ; no_close_bracket DB $17 DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $43,$4C,$4F,$53,$49,$4E,$47,$20 DB $42,$52,$41,$43,$4B,$45,$54 ; 260: byte missing_op[] = "MISSING OPERAND" D0759: ; missing_op DB $0F DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $4F,$50,$45,$52,$41,$4E,$44 ; 261: byte no_fin[] = "MISSING FIN" D0775: ; no_fin DB $0B DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $46,$49,$4E ; 262: byte no_loop[] = "MISSING LOOP" D0787: ; no_loop DB $0C DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $4C,$4F,$4F,$50 ; 263: byte no_until[] = "MISSING UNTIL" D0800: ; no_until DB $0D DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $55,$4E,$54,$49,$4C ; 264: byte no_done[] = "MISSING DONE" D0814: ; no_done DB $0C DB $4D,$49,$53,$53,$49,$4E,$47,$20 DB $44,$4F,$4E,$45 ; 265: byte no_local_init[] = "NO INITIALIZED LOCALS" D0827: ; no_local_init DB $15 DB $4E,$4F,$20,$49,$4E,$49,$54,$49 DB $41,$4C,$49,$5A,$45,$44,$20,$4C DB $4F,$43,$41,$4C,$53 ; 266: ; ; 267: ; Runtime functions ; 268: ; ; 269: byte runtime0[] = "romcall" D0849: ; runtime0 DB $07 DB $72,$6F,$6D,$63,$61,$6C,$6C ; 270: byte RUNTIME0[] = "ROMCALL" D0857: ; RUNTIME0 DB $07 DB $52,$4F,$4D,$43,$41,$4C,$4C ; 271: byte runtime1[] = "syscall" D0865: ; runtime1 DB $07 DB $73,$79,$73,$63,$61,$6C,$6C ; 272: byte RUNTIME1[] = "SYSCALL" D0873: ; RUNTIME1 DB $07 DB $53,$59,$53,$43,$41,$4C,$4C ; 273: byte runtime2[] = "memset" D0881: ; runtime2 DB $06 DB $6D,$65,$6D,$73,$65,$74 ; 274: byte RUNTIME2[] = "MEMSET" D0888: ; RUNTIME2 DB $06 DB $4D,$45,$4D,$53,$45,$54 ; 275: byte runtime3[] = "memcpy" D0895: ; runtime3 DB $06 DB $6D,$65,$6D,$63,$70,$79 ; 276: byte RUNTIME3[] = "MEMCPY" D0902: ; RUNTIME3 DB $06 DB $4D,$45,$4D,$43,$50,$59 ; 277: byte runtime4[] = "cout" D0909: ; runtime4 DB $04 DB $63,$6F,$75,$74 ; 278: byte RUNTIME4[] = "COUT" D0914: ; RUNTIME4 DB $04 DB $43,$4F,$55,$54 ; 279: byte runtime5[] = "cin" D0919: ; runtime5 DB $03 DB $63,$69,$6E ; 280: byte RUNTIME5[] = "CIN" D0923: ; RUNTIME5 DB $03 DB $43,$49,$4E ; 281: byte runtime6[] = "prstr" D0927: ; runtime6 DB $05 DB $70,$72,$73,$74,$72 ; 282: byte RUNTIME6[] = "PRSTR" D0933: ; RUNTIME6 DB $05 DB $50,$52,$53,$54,$52 ; 283: byte runtime7[] = "rdstr" D0939: ; runtime7 DB $05 DB $72,$64,$73,$74,$72 ; 284: byte RUNTIME7[] = "RDSTR" D0945: ; RUNTIME7 DB $05 DB $52,$44,$53,$54,$52 ; 285: ; ; 286: ; Parser variables ; 287: ; ; 288: byte infunc = 0 D0951: ; infunc DB $00 ; 289: byte stack_loop = 0 D0952: ; stack_loop DB $00 ; 290: byte prevstmnt = 0 D0953: ; prevstmnt DB $00 ; 291: word retfunc_tag = 0 D0954: ; retfunc_tag DW $0000 ; 292: word break_tag = 0 D0956: ; break_tag DW $0000 ; 293: func parse_expr_01, parse_module_01 ; 294: ; ; 295: ; Defines for ASM routines ; 296: ; ; 297: asm equates C0002: ; equates() ; 298: TMP EQU $F0 TMP EQU $F0 ; 299: TMPL EQU TMP TMPL EQU TMP ; 300: TMPH EQU TMP+1 TMPH EQU TMP+1 ; 301: SRC EQU TMP SRC EQU TMP ; 302: SRCL EQU SRC SRCL EQU SRC ; 303: SRCH EQU SRC+1 SRCH EQU SRC+1 ; 304: DST EQU SRC+2 DST EQU SRC+2 ; 305: DSTL EQU DST DSTL EQU DST ; 306: DSTH EQU DST+1 DSTH EQU DST+1 ; 307: ESP EQU DST+2 ESP EQU DST+2 ; 308: SAVEESP EQU ESP+1 SAVEESP EQU ESP+1 ; 309: SAVESP EQU SAVEESP+1 SAVESP EQU SAVEESP+1 ; 310: SAVEFP EQU SAVESP+1 SAVEFP EQU SAVESP+1 ; 311: SAVETMR EQU SAVEFP+2 SAVETMR EQU SAVEFP+2 ; 312: SAVEINT EQU SAVETMR+2 SAVEINT EQU SAVETMR+2 ; 313: TMRVEC EQU $03E8 TMRVEC EQU $03E8 ; 314: INTVEC EQU $03EA INTVEC EQU $03EA ; 315: JMPTMP: JMP (TMP) JMPTMP: JMP (TMP) ; 316: STKOVFLW: STKOVFLW: ; 317: LDY #$02 LDY #$02 ; 318: JMP EXECRET JMP EXECRET ; 319: BRKCHK: BRKCHK: ; 320: LDA $C000 LDA $C000 ; 321: CMP #$83 ; CTRL-C CMP #$83 ; CTRL-C ; 322: BNE :+ BNE :+ ; 323: BIT $C010 BIT $C010 ; 324: LDY #$01 LDY #$01 ; 325: JMP EXECRET JMP EXECRET ; 326: : : ; 327: end RTS ; 328: ; ; 329: ; ENTER MODULE UNDER TEST ; 330: ; ; 331: asm execentry C0004: ; execentry() ; 332: LDA ESTKL,X LDA ESTKL,X ; 333: STA TMPL STA TMPL ; 334: LDA ESTKH,X LDA ESTKH,X ; 335: STA TMPH STA TMPH ; 336: STX SAVEESP STX SAVEESP ; 337: TSX TSX ; 338: STX SAVESP STX SAVESP ; 339: LDA FRMPL LDA FRMPL ; 340: STA SAVEFP STA SAVEFP ; 341: LDA FRMPH LDA FRMPH ; 342: STA SAVEFP+1 STA SAVEFP+1 ; 343: LDA TMRVEC LDA TMRVEC ; 344: STA SAVETMR STA SAVETMR ; 345: LDA TMRVEC+1 LDA TMRVEC+1 ; 346: STA SAVETMR+1 STA SAVETMR+1 ; 347: LDA INTVEC LDA INTVEC ; 348: STA SAVEINT STA SAVEINT ; 349: LDA INTVEC+1 LDA INTVEC+1 ; 350: STA SAVEINT+1 STA SAVEINT+1 ; 351: LDA #BRKCHK LDA #>BRKCHK ; 354: STA TMRVEC+1 STA TMRVEC+1 ; 355: LDA #STKOVFLW LDA #>STKOVFLW ; 358: STA INTVEC+1 STA INTVEC+1 ; 359: LDX #ESTKSZ/2 LDX #ESTKSZ/2 ; 360: JSR JMPTMP JSR JMPTMP ; 361: LDY #$00 LDY #$00 ; 362: EXECRET: EXECRET: ; 363: STY TMP STY TMP ; 364: BIT ROMIN BIT ROMIN ; 365: BIT $C054 BIT $C054 ; 366: BIT $C051 BIT $C051 ; 367: BIT $C058 BIT $C058 ; 368: JSR $FB39 ; SET TEXT MODE JSR $FB39 ; SET TEXT MODE ; 369: BIT LCBNK2 BIT LCBNK2 ; 370: LDA SAVEFP LDA SAVEFP ; 371: STA FRMPL STA FRMPL ; 372: LDA SAVEFP+1 LDA SAVEFP+1 ; 373: STA FRMPH STA FRMPH ; 374: LDA SAVETMR LDA SAVETMR ; 375: STA TMRVEC STA TMRVEC ; 376: LDA SAVETMR+1 LDA SAVETMR+1 ; 377: STA TMRVEC+1 STA TMRVEC+1 ; 378: LDA SAVEINT LDA SAVEINT ; 379: STA INTVEC STA INTVEC ; 380: LDA SAVEINT+1 LDA SAVEINT+1 ; 381: STA INTVEC+1 STA INTVEC+1 ; 382: LDX SAVESP LDX SAVESP ; 383: TXS TXS ; 384: LDX SAVEESP LDX SAVEESP ; 385: LDY TMP LDY TMP ; 386: STY ESTKL,X STY ESTKL,X ; 387: LDY #$00 LDY #$00 ; 388: STY ESTKH,X STY ESTKH,X ; 389: end RTS ; 390: ; ; 391: ; CALL 6502 ROUTINE ; 392: ; ROMCALL(AREG, XREG, YREG, STATUS, ADDR) ; 393: ; ; 394: asm romcall C0006: ; romcall() ; 395: PHP PHP ; 396: LDA ESTKL,X LDA ESTKL,X ; 397: STA TMPL STA TMPL ; 398: LDA ESTKH,X LDA ESTKH,X ; 399: STA TMPH STA TMPH ; 400: INX INX ; 401: LDA ESTKL,X LDA ESTKL,X ; 402: PHA PHA ; 403: INX INX ; 404: LDA ESTKL,X LDA ESTKL,X ; 405: TAY TAY ; 406: INX INX ; 407: LDA ESTKL+1,X LDA ESTKL+1,X ; 408: PHA PHA ; 409: LDA ESTKL,X LDA ESTKL,X ; 410: INX INX ; 411: STX ESP STX ESP ; 412: TAX TAX ; 413: PLA PLA ; 414: BIT ROMIN BIT ROMIN ; 415: PLP PLP ; 416: JSR JMPTMP JSR JMPTMP ; 417: PHP PHP ; 418: BIT LCBNK2 BIT LCBNK2 ; 419: STA REGVALS+0 STA REGVALS+0 ; 420: STX REGVALS+1 STX REGVALS+1 ; 421: STY REGVALS+2 STY REGVALS+2 ; 422: PLA PLA ; 423: STA REGVALS+3 STA REGVALS+3 ; 424: LDX ESP LDX ESP ; 425: LDA #REGVALS LDY #>REGVALS ; 427: STA ESTKL,X STA ESTKL,X ; 428: STY ESTKH,X STY ESTKH,X ; 429: PLP PLP ; 430: RTS RTS ; 431: REGVALS: DS 4 REGVALS: DS 4 ; 432: end RTS ; 433: ; ; 434: ; BREAK INTO MONITOR ; 435: ; ; 436: asm monitor C0008: ; monitor() ; 437: STX ESP STX ESP ; 438: LDA #$4C LDA #$4C ; 439: STA $03F8 STA $03F8 ; 440: LDA #REENTER LDA #>REENTER ; 443: STA $03FA STA $03FA ; 444: TSX TSX ; 445: TXA TXA ; 446: PHA PHA ; 447: BIT ROMIN BIT ROMIN ; 448: JMP $FF69 JMP $FF69 ; 449: REENTER: PLA REENTER: PLA ; 450: TAX TAX ; 451: TXS TXS ; 452: LDX ESP LDX ESP ; 453: BIT LCBNK2 BIT LCBNK2 ; 454: end RTS ; 455: ; ; 456: ; RETURN EVAL STACK POINTER ; 457: ; ; 458: ;asm estk ; 459: ; TXA ; 460: ; DEX ; 461: ; STA ESTKL,X ; 462: ; LDA #$00 ; 463: ; STA ESTKH,X ; 464: ;end ; 465: ; ; 466: ; ASSERT EVAL STACK POINTER VALUE ; 467: ; ; 468: ;asm assert_estk ; 469: ; INX ; 470: ; TXA ; 471: ; CMP ESTKL-1,X ; 472: ; BEQ :+ ; 473: ; BRK ; 474: ;: ; 475: ;end ; 476: ; ; 477: ; CALL PRODOS ; 478: ; SYSCALL(CMD, PARAMS) ; 479: ; ; 480: asm syscall C0010: ; syscall() ; 481: LDA ESTKL,X LDA ESTKL,X ; 482: LDY ESTKH,X LDY ESTKH,X ; 483: STA PARAMS STA PARAMS ; 484: STY PARAMS+1 STY PARAMS+1 ; 485: INX INX ; 486: LDA ESTKL,X LDA ESTKL,X ; 487: STA CMD STA CMD ; 488: STX ESP STX ESP ; 489: BIT ROMIN BIT ROMIN ; 490: JSR $BF00 JSR $BF00 ; 491: CMD: DB 00 CMD: DB 00 ; 492: PARAMS: DW 0000 PARAMS: DW 0000 ; 493: BIT LCBNK2 BIT LCBNK2 ; 494: LDX ESP LDX ESP ; 495: STA ESTKL,X STA ESTKL,X ; 496: LDY #$00 LDY #$00 ; 497: STY ESTKH,X STY ESTKH,X ; 498: end RTS ; 499: ; ; 500: ; SET MEMORY TO VALUE ; 501: ; MEMSET(VALUE, ADDR, SIZE) ; 502: ; ; 503: asm memset C0012: ; memset() ; 504: LDY #$00 LDY #$00 ; 505: LDA ESTKL+1,X LDA ESTKL+1,X ; 506: STA DSTL STA DSTL ; 507: LDA ESTKH+1,X LDA ESTKH+1,X ; 508: STA DSTH STA DSTH ; 509: INC ESTKL,X INC ESTKL,X ; 510: INC ESTKH,X INC ESTKH,X ; 511: SETMEM: DEC ESTKL,X SETMEM: DEC ESTKL,X ; 512: BNE :+ BNE :+ ; 513: DEC ESTKH,X DEC ESTKH,X ; 514: BEQ MEMEXIT BEQ MEMEXIT ; 515: : LDA ESTKL+2,X : LDA ESTKL+2,X ; 516: STA (DST),Y STA (DST),Y ; 517: INY INY ; 518: BNE :+ BNE :+ ; 519: INC DSTH INC DSTH ; 520: : DEC ESTKL,X : DEC ESTKL,X ; 521: BNE :+ BNE :+ ; 522: DEC ESTKH,X DEC ESTKH,X ; 523: BEQ MEMEXIT BEQ MEMEXIT ; 524: : LDA ESTKH+2,X : LDA ESTKH+2,X ; 525: STA (DST),Y STA (DST),Y ; 526: INY INY ; 527: BNE SETMEM BNE SETMEM ; 528: INC DSTH INC DSTH ; 529: BNE SETMEM BNE SETMEM ; 530: MEMEXIT: INX MEMEXIT: INX ; 531: INX INX ; 532: INX INX ; 533: end RTS ; 534: ; ; 535: ; COPY MEMORY ; 536: ; MEMCPY(SRCADDR, DSTADDR, SIZE) ; 537: ; ; 538: asm memcpy C0014: ; memcpy() ; 539: LDY #$00 LDY #$00 ; 540: LDA ESTKL,X LDA ESTKL,X ; 541: BNE :+ BNE :+ ; 542: LDA ESTKH,X LDA ESTKH,X ; 543: BEQ MEMEXIT BEQ MEMEXIT ; 544: : LDA ESTKL+1,X : LDA ESTKL+1,X ; 545: STA DSTL STA DSTL ; 546: LDA ESTKH+1,X LDA ESTKH+1,X ; 547: STA DSTH STA DSTH ; 548: LDA ESTKL+2,X LDA ESTKL+2,X ; 549: STA SRCL STA SRCL ; 550: LDA ESTKH+2,X LDA ESTKH+2,X ; 551: STA SRCH STA SRCH ; 552: CMP DSTH CMP DSTH ; 553: BCC REVCPY BCC REVCPY ; 554: BNE FORCPY BNE FORCPY ; 555: LDA SRCL LDA SRCL ; 556: CMP DSTL CMP DSTL ; 557: BCS FORCPY BCS FORCPY ; 558: REVCPY: ; REVERSE DIRECTION COPY REVCPY: ; REVERSE DIRECTION COPY ; 559: ; CLC ; 560: LDA ESTKL,X LDA ESTKL,X ; 561: ADC DSTL ADC DSTL ; 562: STA DSTL STA DSTL ; 563: LDA ESTKH,X LDA ESTKH,X ; 564: ADC DSTH ADC DSTH ; 565: STA DSTH STA DSTH ; 566: CLC CLC ; 567: LDA ESTKL,X LDA ESTKL,X ; 568: ADC SRCL ADC SRCL ; 569: STA SRCL STA SRCL ; 570: LDA ESTKH,X LDA ESTKH,X ; 571: ADC SRCH ADC SRCH ; 572: STA SRCH STA SRCH ; 573: INC ESTKH,X INC ESTKH,X ; 574: REVCPYLP: REVCPYLP: ; 575: LDA DSTL LDA DSTL ; 576: BNE :+ BNE :+ ; 577: DEC DSTH DEC DSTH ; 578: : DEC DSTL : DEC DSTL ; 579: LDA SRCL LDA SRCL ; 580: BNE :+ BNE :+ ; 581: DEC SRCH DEC SRCH ; 582: : DEC SRCL : DEC SRCL ; 583: LDA (SRC),Y LDA (SRC),Y ; 584: STA (DST),Y STA (DST),Y ; 585: DEC ESTKL,X DEC ESTKL,X ; 586: BNE REVCPYLP BNE REVCPYLP ; 587: DEC ESTKH,X DEC ESTKH,X ; 588: BNE REVCPYLP BNE REVCPYLP ; 589: BEQ MEMEXIT BEQ MEMEXIT ; 590: FORCPY: INC ESTKH,X FORCPY: INC ESTKH,X ; 591: FORCPYLP: FORCPYLP: ; 592: LDA (SRC),Y LDA (SRC),Y ; 593: STA (DST),Y STA (DST),Y ; 594: INC DSTL INC DSTL ; 595: BNE :+ BNE :+ ; 596: INC DSTH INC DSTH ; 597: : INC SRCL : INC SRCL ; 598: BNE :+ BNE :+ ; 599: INC SRCH INC SRCH ; 600: : DEC ESTKL,X : DEC ESTKL,X ; 601: BNE FORCPYLP BNE FORCPYLP ; 602: DEC ESTKH,X DEC ESTKH,X ; 603: BNE FORCPYLP BNE FORCPYLP ; 604: BEQ MEMEXIT BEQ MEMEXIT ; 605: end RTS ; 606: ; ; 607: ; CHAR OUT ; 608: ; COUT(CHAR) ; 609: ; ; 610: asm cout C0016: ; cout() ; 611: LDA ESTKL,X LDA ESTKL,X ; 612: INX INX ; 613: ORA #$80 ORA #$80 ; 614: BIT ROMIN BIT ROMIN ; 615: JSR $FDED JSR $FDED ; 616: BIT LCBNK2 BIT LCBNK2 ; 617: end RTS ; 618: ; ; 619: ; CHAR IN ; 620: ; RDKEY() ; 621: ; ; 622: asm cin C0018: ; cin() ; 623: BIT ROMIN BIT ROMIN ; 624: STX ESP STX ESP ; 625: JSR $FD0C JSR $FD0C ; 626: LDX ESP LDX ESP ; 627: BIT LCBNK2 BIT LCBNK2 ; 628: DEX DEX ; 629: AND #$7F AND #$7F ; 630: STA ESTKL,X STA ESTKL,X ; 631: LDY #$00 LDY #$00 ; 632: STY ESTKH,X STY ESTKH,X ; 633: end RTS ; 634: ; ; 635: ; PRINT STRING ; 636: ; PRSTR(STR) ; 637: ; ; 638: asm prstr C0020: ; prstr() ; 639: LDY #$00 LDY #$00 ; 640: LDA ESTKL,X LDA ESTKL,X ; 641: STA SRCL STA SRCL ; 642: LDA ESTKH,X LDA ESTKH,X ; 643: STA SRCH STA SRCH ; 644: BIT ROMIN BIT ROMIN ; 645: LDA (SRC),Y LDA (SRC),Y ; 646: STA ESTKL,X STA ESTKL,X ; 647: BEQ :+ BEQ :+ ; 648: _PRS1: INY _PRS1: INY ; 649: LDA (SRC),Y LDA (SRC),Y ; 650: ORA #$80 ORA #$80 ; 651: JSR $FDED JSR $FDED ; 652: TYA TYA ; 653: CMP ESTKL,X CMP ESTKL,X ; 654: BNE _PRS1 BNE _PRS1 ; 655: : INX : INX ; 656: BIT LCBNK2 BIT LCBNK2 ; 657: end RTS ; 658: ; ; 659: ; READ STRING ; 660: ; STR = RDSTR(PROMPTCHAR) ; 661: ; ; 662: asm rdstr C0022: ; rdstr() ; 663: LDA ESTKL,X LDA ESTKL,X ; 664: STA $33 STA $33 ; 665: STX ESP STX ESP ; 666: BIT ROMIN BIT ROMIN ; 667: JSR $FD6A JSR $FD6A ; 668: BIT LCBNK2 BIT LCBNK2 ; 669: STX $01FF STX $01FF ; 670: : LDA $01FF,X : LDA $01FF,X ; 671: AND #$7F AND #$7F ; 672: STA $01FF,X STA $01FF,X ; 673: DEX DEX ; 674: BPL :- BPL :- ; 675: LDX ESP LDX ESP ; 676: LDA #$FF LDA #$FF ; 677: STA ESTKL,X STA ESTKL,X ; 678: LDA #$01 LDA #$01 ; 679: STA ESTKH,X STA ESTKH,X ; 680: end RTS ; 681: ;def toupper_11(c) ; 682: ; if c >= 'a' ; 683: ; if c <= 'z' ; 684: ; return c - $20 ; 685: ; fin ; 686: ; fin ; 687: ; return c ; 688: ;end ; 689: asm toupper_11 C0024: ; toupper_11() ; 690: LDA ESTKL,X LDA ESTKL,X ; 691: CMP #'a' CMP #'a' ; 692: BCC :+ BCC :+ ; 693: CMP #'z'+1 CMP #'z'+1 ; 694: BCS :+ BCS :+ ; 695: SEC SEC ; 696: SBC #$20 SBC #$20 ; 697: STA ESTKL,X STA ESTKL,X ; 698: : : ; 699: end RTS ; 700: ; ; 701: ; EXIT ; 702: ; ; 703: asm exit C0026: ; exit() ; 704: JSR $BF00 JSR $BF00 ; 705: DB $65 DB $65 ; 706: DW EXITTBL DW EXITTBL ; 707: EXITTBL: EXITTBL: ; 708: DB 4 DB 4 ; 709: DB 0 DB 0 ; 710: end RTS ; 711: ; ; 712: ; ProDOS routines ; 713: ; ; 714: def getpfx_11(path) C0028: ; getpfx_11() ; path = 2 ; 715: byte params[3] ; params = 4 ; 716: ; 717: ^path = 0 JSR INTERP DB $58,$07,$01 ; ENTER 7,1 DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $70 ; SB ; 718: params.0 = 1 DB $28,$04 ; LLA 4 DB $2A,$01 ; CB 1 DB $70 ; SB ; 719: params:1 = path DB $28,$05 ; LLA 5 DB $66,$02 ; LLW 2 DB $72 ; SW ; 720: perr = syscall($C7, @params) DB $2A,$C7 ; CB 199 DB $28,$04 ; LLA 4 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 721: return path DB $66,$02 ; LLW 2 DB $5A ; LEAVE ; 722: end ; 723: def setpfx_11(path) C0030: ; setpfx_11() ; path = 2 ; 724: byte params[3] ; params = 4 ; 725: ; 726: params.0 = 1 JSR INTERP DB $58,$07,$01 ; ENTER 7,1 DB $28,$04 ; LLA 4 DB $2A,$01 ; CB 1 DB $70 ; SB ; 727: params:1 = path DB $28,$05 ; LLA 5 DB $66,$02 ; LLW 2 DB $72 ; SW ; 728: perr = syscall($C6, @params) DB $2A,$C6 ; CB 198 DB $28,$04 ; LLA 4 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 729: return path DB $66,$02 ; LLW 2 DB $5A ; LEAVE ; 730: end ; 731: def open_21(path, buff) C0032: ; open_21() ; path = 2 ; buff = 4 ; 732: byte params[6] ; params = 6 ; 733: ; 734: params.0 = 3 JSR INTERP DB $58,$0C,$02 ; ENTER 12,2 DB $28,$06 ; LLA 6 DB $2A,$03 ; CB 3 DB $70 ; SB ; 735: params:1 = path DB $28,$07 ; LLA 7 DB $66,$02 ; LLW 2 DB $72 ; SW ; 736: params:3 = buff DB $28,$09 ; LLA 9 DB $66,$04 ; LLW 4 DB $72 ; SW ; 737: params.5 = 0 DB $28,$0B ; LLA 11 DB $00 ; ZERO DB $70 ; SB ; 738: perr = syscall($C8, @params) DB $2A,$C8 ; CB 200 DB $28,$06 ; LLA 6 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 739: return params.5 DB $28,$0B ; LLA 11 DB $60 ; LB DB $5A ; LEAVE ; 740: end ; 741: def close_11(refnum) C0034: ; close_11() ; refnum = 2 ; 742: byte params[2] ; params = 4 ; 743: ; 744: params.0 = 1 JSR INTERP DB $58,$06,$01 ; ENTER 6,1 DB $28,$04 ; LLA 4 DB $2A,$01 ; CB 1 DB $70 ; SB ; 745: params.1 = refnum DB $28,$05 ; LLA 5 DB $66,$02 ; LLW 2 DB $70 ; SB ; 746: perr = syscall($CC, @params) DB $2A,$CC ; CB 204 DB $28,$04 ; LLA 4 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 747: return perr DB $68,D0019 ; LAB D0019 DB $5A ; LEAVE ; 748: end ; 749: def read_31(refnum, buff, len) C0036: ; read_31() ; refnum = 2 ; buff = 4 ; len = 6 ; 750: byte params[8] ; params = 8 ; 751: ; 752: params.0 = 4 JSR INTERP DB $58,$10,$03 ; ENTER 16,3 DB $28,$08 ; LLA 8 DB $2A,$04 ; CB 4 DB $70 ; SB ; 753: params.1 = refnum DB $28,$09 ; LLA 9 DB $66,$02 ; LLW 2 DB $70 ; SB ; 754: params:2 = buff DB $28,$0A ; LLA 10 DB $66,$04 ; LLW 4 DB $72 ; SW ; 755: params:4 = len DB $28,$0C ; LLA 12 DB $66,$06 ; LLW 6 DB $72 ; SW ; 756: params:6 = 0 DB $28,$0E ; LLA 14 DB $00 ; ZERO DB $72 ; SW ; 757: perr = syscall($CA, @params) DB $2A,$CA ; CB 202 DB $28,$08 ; LLA 8 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 758: return params:6 DB $28,$0E ; LLA 14 DB $62 ; LW DB $5A ; LEAVE ; 759: end ; 760: def write_31(refnum, buff, len) C0038: ; write_31() ; refnum = 2 ; buff = 4 ; len = 6 ; 761: byte params[8] ; params = 8 ; 762: ; 763: params.0 = 4 JSR INTERP DB $58,$10,$03 ; ENTER 16,3 DB $28,$08 ; LLA 8 DB $2A,$04 ; CB 4 DB $70 ; SB ; 764: params.1 = refnum DB $28,$09 ; LLA 9 DB $66,$02 ; LLW 2 DB $70 ; SB ; 765: params:2 = buff DB $28,$0A ; LLA 10 DB $66,$04 ; LLW 4 DB $72 ; SW ; 766: params:4 = len DB $28,$0C ; LLA 12 DB $66,$06 ; LLW 6 DB $72 ; SW ; 767: params:6 = 0 DB $28,$0E ; LLA 14 DB $00 ; ZERO DB $72 ; SW ; 768: perr = syscall($CB, @params) DB $2A,$CB ; CB 203 DB $28,$08 ; LLA 8 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 769: return params:6 DB $28,$0E ; LLA 14 DB $62 ; LW DB $5A ; LEAVE ; 770: end ; 771: def create_41(path, access, type, aux) C0040: ; create_41() ; path = 2 ; access = 4 ; type = 6 ; aux = 8 ; 772: byte params[12] ; params = 10 ; 773: ; 774: params.0 = 7 JSR INTERP DB $58,$16,$04 ; ENTER 22,4 DB $28,$0A ; LLA 10 DB $2A,$07 ; CB 7 DB $70 ; SB ; 775: params:1 = path DB $28,$0B ; LLA 11 DB $66,$02 ; LLW 2 DB $72 ; SW ; 776: params.3 = access DB $28,$0D ; LLA 13 DB $66,$04 ; LLW 4 DB $70 ; SB ; 777: params.4 = type DB $28,$0E ; LLA 14 DB $66,$06 ; LLW 6 DB $70 ; SB ; 778: params:5 = aux DB $28,$0F ; LLA 15 DB $66,$08 ; LLW 8 DB $72 ; SW ; 779: params.7 = $1 DB $28,$11 ; LLA 17 DB $2A,$01 ; CB 1 DB $70 ; SB ; 780: params:8 = 0 DB $28,$12 ; LLA 18 DB $00 ; ZERO DB $72 ; SW ; 781: params:10 = 0 DB $28,$14 ; LLA 20 DB $00 ; ZERO DB $72 ; SW ; 782: perr = syscall($C0, @params) DB $2A,$C0 ; CB 192 DB $28,$0A ; LLA 10 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 783: return perr DB $68,D0019 ; LAB D0019 DB $5A ; LEAVE ; 784: end ; 785: def destroy_11(path) C0042: ; destroy_11() ; path = 2 ; 786: byte params[12] ; params = 4 ; 787: ; 788: params.0 = 1 JSR INTERP DB $58,$10,$01 ; ENTER 16,1 DB $28,$04 ; LLA 4 DB $2A,$01 ; CB 1 DB $70 ; SB ; 789: params:1 = path DB $28,$05 ; LLA 5 DB $66,$02 ; LLW 2 DB $72 ; SW ; 790: perr = syscall($C1, @params) DB $2A,$C1 ; CB 193 DB $28,$04 ; LLA 4 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 791: return perr DB $68,D0019 ; LAB D0019 DB $5A ; LEAVE ; 792: end ; 793: def newline_31(refnum, emask, nlchar) C0044: ; newline_31() ; refnum = 2 ; emask = 4 ; nlchar = 6 ; 794: byte params[4] ; params = 8 ; 795: ; 796: params.0 = 3 JSR INTERP DB $58,$0C,$03 ; ENTER 12,3 DB $28,$08 ; LLA 8 DB $2A,$03 ; CB 3 DB $70 ; SB ; 797: params.1 = refnum DB $28,$09 ; LLA 9 DB $66,$02 ; LLW 2 DB $70 ; SB ; 798: params.2 = emask DB $28,$0A ; LLA 10 DB $66,$04 ; LLW 4 DB $70 ; SB ; 799: params.3 = nlchar DB $28,$0B ; LLA 11 DB $66,$06 ; LLW 6 DB $70 ; SB ; 800: perr = syscall($C9, @params) DB $2A,$C9 ; CB 201 DB $28,$08 ; LLA 8 DB $54,C0010 ; CALL C0010 DB $78,D0019 ; SAB D0019 ; 801: return perr DB $68,D0019 ; LAB D0019 DB $5A ; LEAVE ; 802: end ; 803: def crout C0046: ; crout() ; 804: cout($0D) JSR INTERP DB $2A,$0D ; CB 13 DB $54,C0016 ; CALL C0016 ; 805: end DB $5C ; RET ; 806: def prbyte_10(h) C0048: ; prbyte_10() ; h = 2 ; 807: cout('$') JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$24 ; CB 36 DB $54,C0016 ; CALL C0016 ; 808: drop romcall(h, 0, 0, 0, $FDDA) DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $00 ; ZERO DB $00 ; ZERO DB $2C,$DA,$FD ; CW 64986 DB $54,C0006 ; CALL C0006 DB $30 ; DROP ; 809: end DB $5A ; LEAVE ; 810: def prword_10(h) C0050: ; prword_10() ; h = 2 ; 811: cout('$') JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$24 ; CB 36 DB $54,C0016 ; CALL C0016 ; 812: drop romcall(h >> 8, h, 0, 0, $F941) DB $66,$02 ; LLW 2 DB $2A,$08 ; CB 8 DB $1C ; SHR DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $00 ; ZERO DB $2C,$41,$F9 ; CW 63809 DB $54,C0006 ; CALL C0006 DB $30 ; DROP ; 813: end DB $5A ; LEAVE ; 814: def print_10(i) C0052: ; print_10() ; i = 2 ; 815: byte numstr[7] ; numstr = 4 ; 816: byte place, sign ; place = 11 ; sign = 12 ; 817: ; 818: place = 6 JSR INTERP DB $58,$0D,$01 ; ENTER 13,1 DB $2A,$06 ; CB 6 DB $74,$0B ; SLB 11 ; 819: if i < 0 DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $46 ; ISLT DB $4C,C0054 ; SKPFLS C0054 ; 820: sign = 1 DB $2A,$01 ; CB 1 DB $74,$0C ; SLB 12 ; 821: i = -i DB $66,$02 ; LLW 2 DB $10 ; NEG DB $76,$02 ; SLW 2 ; 822: else DB $50,C0055 ; SKIP C0055 C0054: ; 823: sign = 0 DB $00 ; ZERO DB $74,$0C ; SLB 12 ; 824: fin C0055: ; 825: while i >= 10 C0056: DB $66,$02 ; LLW 2 DB $2A,$0A ; CB 10 DB $48 ; ISGE DB $4C,C0057 ; SKPFLS C0057 ; 826: i =, numstr[place] = i % 10 + '0' DB $28,$04 ; LLA 4 DB $64,$0B ; LLB 11 DB $02 ; IDXB DB $34 ; PUSH DB $66,$02 ; LLW 2 DB $2A,$0A ; CB 10 DB $0A ; DIV,MOD DB $2A,$30 ; CB 48 DB $02 ; ADD DB $36 ; PULL DB $2E ; SWAP DB $70 ; SB DB $76,$02 ; SLW 2 ; 827: place = place - 1 DB $64,$0B ; LLB 11 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $74,$0B ; SLB 11 ; 828: loop DB $50,C0056 ; SKIP C0056 C0057: ; 829: numstr[place] = i + '0' DB $28,$04 ; LLA 4 DB $64,$0B ; LLB 11 DB $02 ; IDXB DB $66,$02 ; LLW 2 DB $2A,$30 ; CB 48 DB $02 ; ADD DB $70 ; SB ; 830: place = place - 1 DB $64,$0B ; LLB 11 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $74,$0B ; SLB 11 ; 831: if sign DB $64,$0C ; LLB 12 DB $4C,C0058 ; SKPFLS C0058 ; 832: numstr[place] = '-' DB $28,$04 ; LLA 4 DB $64,$0B ; LLB 11 DB $02 ; IDXB DB $2A,$2D ; CB 45 DB $70 ; SB ; 833: place = place - 1 DB $64,$0B ; LLB 11 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $74,$0B ; SLB 11 ; 834: fin C0058: C0059: ; 835: numstr[place] = 6 - place DB $28,$04 ; LLA 4 DB $64,$0B ; LLB 11 DB $02 ; IDXB DB $2A,$06 ; CB 6 DB $64,$0B ; LLB 11 DB $04 ; SUB DB $70 ; SB ; 836: prstr(@numstr[place]) DB $28,$04 ; LLA 4 DB $64,$0B ; LLB 11 DB $02 ; IDXB DB $54,C0020 ; CALL C0020 ; 837: end DB $5A ; LEAVE ; 838: def nametostr_30(namestr, len, strptr) C0060: ; nametostr_30() ; namestr = 2 ; len = 4 ; strptr = 6 ; 839: ^strptr = len JSR INTERP DB $58,$08,$03 ; ENTER 8,3 DB $66,$06 ; LLW 6 DB $66,$04 ; LLW 4 DB $70 ; SB ; 840: memcpy(namestr, strptr + 1, len) DB $66,$02 ; LLW 2 DB $66,$06 ; LLW 6 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $66,$04 ; LLW 4 DB $54,C0014 ; CALL C0014 ; 841: end DB $5A ; LEAVE ; 842: ; 843: ;===================================== ; 844: ; ; 845: ; PLASMA Compiler ; 846: ; ; 847: ;===================================== ; 848: ; 849: ; ; 850: ; Error handler ; 851: ; ; 852: def parse_err_11(err) C0062: ; parse_err_11() ; err = 2 ; 853: word i ; i = 4 ; 854: ; 855: drop close_11(0) JSR INTERP DB $58,$06,$01 ; ENTER 6,1 DB $00 ; ZERO DB $54,C0034 ; CALL C0034 DB $30 ; DROP ; 856: crout() DB $54,C0046 ; CALL C0046 ; 857: print_10(lineno) DB $6A,D0421 ; LAW D0421 DB $54,C0052 ; CALL C0052 ; 858: cout(':') DB $2A,$3A ; CB 58 DB $54,C0016 ; CALL C0016 ; 859: prstr(err) DB $66,$02 ; LLW 2 DB $54,C0020 ; CALL C0020 ; 860: crout() DB $54,C0046 ; CALL C0046 ; 861: prstr(instr) DB $2C,$FF,$01 ; CW 511 DB $54,C0020 ; CALL C0020 ; 862: crout() DB $54,C0046 ; CALL C0046 ; 863: for i = inbuff to tknptr - 1 DB $2C,$00,$02 ; CW 512 C0065: DB $6E,$04 ; DLW 4 DB $6A,D0417 ; LAW D0417 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $3A,C0064 ; SKPGT C0064 DB $0C ; INCR ; 864: cout(' ') DB $2A,$20 ; CB 32 DB $54,C0016 ; CALL C0016 ; 865: next DB $50,C0065 ; SKIP C0065 C0064: DB $30 ; DROP ; 866: cout('^') DB $2A,$5E ; CB 94 DB $54,C0016 ; CALL C0016 ; 867: cin() DB $54,C0018 ; CALL C0018 ; 868: exit() DB $54,C0026 ; CALL C0026 ; 869: return ERR_TKN DB $00 ; ZERO DB $5A ; LEAVE ; 870: end ; 871: ; ; 872: ; Emit bytecode ; 873: ; ; 874: def ctag_new_01 C0066: ; ctag_new_01() ; 875: if codetag >= ctag_max JSR INTERP DB $6A,D0012 ; LAW D0012 DB $2C,$00,$03 ; CW 768 DB $48 ; ISGE DB $4C,C0068 ; SKPFLS C0068 ; 876: return parse_err_11(@ctag_full) DB $26,D0693 ; LA D0693 DB $54,C0062 ; CALL C0062 DB $5C ; RET ; 877: fin C0068: C0069: ; 878: codetag = codetag + 1 DB $6A,D0012 ; LAW D0012 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D0012 ; SAW D0012 ; 879: ctag_value:[codetag] = 0 DB $2C,$00,$1A ; CW 6656 DB $6A,D0012 ; LAW D0012 DB $1E ; IDXW DB $00 ; ZERO DB $72 ; SW ; 880: ctag_flags.[codetag] = 0 DB $2C,$00,$0D ; CW 3328 DB $6A,D0012 ; LAW D0012 DB $02 ; IDXB DB $00 ; ZERO DB $70 ; SB ; 881: return codetag ? is_ctag DB $6A,D0012 ; LAW D0012 DB $2C,$00,$80 ; CW 32768 DB $16 ; IOR DB $5C ; RET ; 882: end ; 883: defopt ctag_resolve_21(tag, addr) C0070: ; ctag_resolve_21() ; tag = 2 ; addr = 4 ; 884: word updtptr, nextptr ; updtptr = 6 ; nextptr = 8 ; 885: ; 886: tag = tag & mask_ctag LDY #10 LDA #2 JSR ENTER DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDA #$FF STA ESTKL,X LDA #$7F STA ESTKH,X JSR BAND LDY #$02 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 887: if ctag_flags.[tag] & resolved LDY #$00 STY ESTKL,X LDA #$0D STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JSR ADD LDY #$00 JSR LB DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR BAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0072 : ; 888: return parse_err_11(@dup_id) DEX LDA #D0431 STA ESTKH,X JSR C0062 JMP LEAVE ; 889: fin C0072: C0073: ; 890: updtptr = ctag_value:[tag] DEX LDY #$00 STY ESTKL,X LDA #$1A STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JSR IDXW LDY #$00 JSR LW LDY #$06 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 891: while updtptr INX C0074: DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0075 : ; 892: ; ; 893: ; Update list of addresses needing resolution ; 894: ; ; 895: nextptr = *updtptr DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR LW LDY #$08 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 896: *updtptr = addr LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR SW ; 897: updtptr = nextptr DEX LDY #$08 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$06 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 898: loop INX JMP C0074 C0075: ; 899: ctag_value:[tag] = addr DEX LDY #$00 STY ESTKL,X LDA #$1A STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JSR IDXW DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR SW ; 900: ctag_flags.[tag] = ctag_flags.[tag] ? resolved DEX LDY #$00 STY ESTKL,X LDA #$0D STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JSR ADD DEX LDY #$00 STY ESTKL,X LDA #$0D STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JSR ADD LDY #$00 JSR LB DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR IOR JSR SB ; 901: return 0 DEX STY ESTKL,X STY ESTKH,X JMP LEAVE ; 902: end ; 903: defopt emit_byte_10(bval) C0076: ; emit_byte_10() ; bval = 2 ; 904: ^codeptr = bval LDY #4 LDA #1 JSR ENTER DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR SB ; 905: codeptr = codeptr + 1 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 906: end INX JMP LEAVE ; 907: defopt emit_word_10(wval) C0078: ; emit_word_10() ; wval = 2 ; 908: *codeptr = wval LDY #4 LDA #1 JSR ENTER DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR SW ; 909: codeptr = codeptr + 2 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 910: end INX JMP LEAVE ; 911: def emit_fill_10(size) C0080: ; emit_fill_10() ; size = 2 ; 912: memset(0, codeptr, size) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $00 ; ZERO DB $6A,D0014 ; LAW D0014 DB $66,$02 ; LLW 2 DB $54,C0012 ; CALL C0012 ; 913: codeptr = codeptr + size DB $6A,D0014 ; LAW D0014 DB $66,$02 ; LLW 2 DB $02 ; ADD DB $7A,D0014 ; SAW D0014 ; 914: end DB $5A ; LEAVE ; 915: def emit_codetag_10(tag) C0082: ; emit_codetag_10() ; tag = 2 ; 916: drop ctag_resolve_21(tag, codeptr) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $66,$02 ; LLW 2 DB $6A,D0014 ; LAW D0014 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 917: end DB $5A ; LEAVE ; 918: defopt emit_op_10(op) C0084: ; emit_op_10() ; op = 2 ; 919: lastop = op LDY #4 LDA #1 JSR ENTER DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDA ESTKL,X STA D0018 ; 920: ^codeptr = op LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR SB ; 921: codeptr = codeptr + 1 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 922: end INX JMP LEAVE ; 923: def emit_tag_10(tag) C0086: ; emit_tag_10() ; tag = 2 ; 924: word updtptr ; updtptr = 4 ; 925: ; 926: if tag & is_ctag JSR INTERP DB $58,$06,$01 ; ENTER 6,1 DB $66,$02 ; LLW 2 DB $2C,$00,$80 ; CW 32768 DB $14 ; BAND DB $4C,C0088 ; SKPFLS C0088 ; 927: tag = tag & mask_ctag DB $66,$02 ; LLW 2 DB $2C,$FF,$7F ; CW 32767 DB $14 ; BAND DB $76,$02 ; SLW 2 ; 928: updtptr = ctag_value:[tag] DB $2C,$00,$1A ; CW 6656 DB $66,$02 ; LLW 2 DB $1E ; IDXW DB $62 ; LW DB $76,$04 ; SLW 4 ; 929: if !(ctag_flags.[tag] & resolved) DB $2C,$00,$0D ; CW 3328 DB $66,$02 ; LLW 2 DB $02 ; IDXB DB $60 ; LB DB $2A,$01 ; CB 1 DB $14 ; BAND DB $20 ; NOT DB $4C,C0090 ; SKPFLS C0090 ; 930: ; ; 931: ; Add to list of tags needing resolution ; 932: ; ; 933: ctag_value:[tag] = codeptr DB $2C,$00,$1A ; CW 6656 DB $66,$02 ; LLW 2 DB $1E ; IDXW DB $6A,D0014 ; LAW D0014 DB $72 ; SW ; 934: fin C0090: C0091: ; 935: emit_word_10(updtptr) DB $66,$04 ; LLW 4 DB $54,C0078 ; CALL C0078 ; 936: else DB $50,C0089 ; SKIP C0089 C0088: ; 937: emit_word_10(tag + codebuff) DB $66,$02 ; LLW 2 DB $2C,$00,$60 ; CW 24576 DB $02 ; ADD DB $54,C0078 ; CALL C0078 ; 938: fin C0089: ; 939: end DB $5A ; LEAVE ; 940: def emit_iddata_30(value, size, namestr) C0092: ; emit_iddata_30() ; value = 2 ; size = 4 ; namestr = 6 ; 941: emit_fill_10(size) JSR INTERP DB $58,$08,$03 ; ENTER 8,3 DB $66,$04 ; LLW 4 DB $54,C0080 ; CALL C0080 ; 942: end DB $5A ; LEAVE ; 943: def emit_data_41(vartype, consttype, constval, constsize) C0094: ; emit_data_41() ; vartype = 2 ; consttype = 4 ; constval = 6 ; constsize = 8 ; 944: byte i ; i = 10 ; 945: word size, chrptr ; size = 11 ; chrptr = 13 ; 946: ; 947: if consttype == 0 JSR INTERP DB $58,$0F,$04 ; ENTER 15,4 DB $66,$04 ; LLW 4 DB $00 ; ZERO DB $40 ; ISEQ DB $4C,C0096 ; SKPFLS C0096 ; 948: size = constsize DB $66,$08 ; LLW 8 DB $76,$0B ; SLW 11 ; 949: emit_fill_10(constsize) DB $66,$08 ; LLW 8 DB $54,C0080 ; CALL C0080 ; 950: elsif consttype == STR_TYPE DB $50,C0097 ; SKIP C0097 C0096: DB $66,$04 ; LLW 4 DB $2A,$80 ; CB 128 DB $40 ; ISEQ DB $4C,C0098 ; SKPFLS C0098 ; 951: size = constsize DB $66,$08 ; LLW 8 DB $76,$0B ; SLW 11 ; 952: chrptr = constval DB $66,$06 ; LLW 6 DB $76,$0D ; SLW 13 ; 953: constsize = constsize - 1 DB $66,$08 ; LLW 8 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $76,$08 ; SLW 8 ; 954: emit_byte_10(constsize) DB $66,$08 ; LLW 8 DB $54,C0076 ; CALL C0076 ; 955: while constsize > 0 C0099: DB $66,$08 ; LLW 8 DB $00 ; ZERO DB $44 ; ISGT DB $4C,C0100 ; SKPFLS C0100 ; 956: emit_byte_10(^chrptr) DB $66,$0D ; LLW 13 DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 957: chrptr = chrptr + 1 DB $66,$0D ; LLW 13 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $76,$0D ; SLW 13 ; 958: constsize = constsize - 1 DB $66,$08 ; LLW 8 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $76,$08 ; SLW 8 ; 959: loop DB $50,C0099 ; SKIP C0099 C0100: ; 960: else DB $50,C0097 ; SKIP C0097 C0098: ; 961: if vartype == WORD_TYPE DB $66,$02 ; LLW 2 DB $2A,$04 ; CB 4 DB $40 ; ISEQ DB $4C,C0101 ; SKPFLS C0101 ; 962: size = 2 DB $2A,$02 ; CB 2 DB $76,$0B ; SLW 11 ; 963: emit_word_10(constval) DB $66,$06 ; LLW 6 DB $54,C0078 ; CALL C0078 ; 964: else DB $50,C0102 ; SKIP C0102 C0101: ; 965: size = 1 DB $2A,$01 ; CB 1 DB $76,$0B ; SLW 11 ; 966: emit_byte_10(constval) DB $66,$06 ; LLW 6 DB $54,C0076 ; CALL C0076 ; 967: fin C0102: ; 968: fin C0097: ; 969: return size DB $66,$0B ; LLW 11 DB $5A ; LEAVE ; 970: end ; 971: def emit_const_10(cval) C0103: ; emit_const_10() ; cval = 2 ; 972: if cval == 0 JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $40 ; ISEQ DB $4C,C0105 ; SKPFLS C0105 ; 973: emit_op_10($00) DB $00 ; ZERO DB $54,C0084 ; CALL C0084 ; 974: elsif cval > 0 and cval < 256 DB $50,C0106 ; SKIP C0106 C0105: DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $44 ; ISGT DB $66,$02 ; LLW 2 DB $2C,$00,$01 ; CW 256 DB $46 ; ISLT DB $24 ; LAND DB $4C,C0107 ; SKPFLS C0107 ; 975: emit_op_10($2A) DB $2A,$2A ; CB 42 DB $54,C0084 ; CALL C0084 ; 976: emit_byte_10(cval) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 977: else DB $50,C0106 ; SKIP C0106 C0107: ; 978: emit_op_10($2C) DB $2A,$2C ; CB 44 DB $54,C0084 ; CALL C0084 ; 979: emit_word_10(cval) DB $66,$02 ; LLW 2 DB $54,C0078 ; CALL C0078 ; 980: fin C0106: ; 981: end DB $5A ; LEAVE ; 982: def emit_lb C0108: ; emit_lb() ; 983: emit_op_10($60) JSR INTERP DB $2A,$60 ; CB 96 DB $54,C0084 ; CALL C0084 ; 984: end DB $5C ; RET ; 985: def emit_lw C0110: ; emit_lw() ; 986: emit_op_10($62) JSR INTERP DB $2A,$62 ; CB 98 DB $54,C0084 ; CALL C0084 ; 987: end DB $5C ; RET ; 988: def emit_llb_10(index) C0112: ; emit_llb_10() ; index = 2 ; 989: emit_op_10($64) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$64 ; CB 100 DB $54,C0084 ; CALL C0084 ; 990: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 991: end DB $5A ; LEAVE ; 992: def emit_llw_10(index) C0114: ; emit_llw_10() ; index = 2 ; 993: emit_op_10($66) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$66 ; CB 102 DB $54,C0084 ; CALL C0084 ; 994: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 995: end DB $5A ; LEAVE ; 996: def emit_lab_10(tag) C0116: ; emit_lab_10() ; tag = 2 ; 997: emit_op_10($68) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$68 ; CB 104 DB $54,C0084 ; CALL C0084 ; 998: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 999: end DB $5A ; LEAVE ; 1000: def emit_law_10(tag) C0118: ; emit_law_10() ; tag = 2 ; 1001: emit_op_10($6A) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$6A ; CB 106 DB $54,C0084 ; CALL C0084 ; 1002: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1003: end DB $5A ; LEAVE ; 1004: def emit_sb C0120: ; emit_sb() ; 1005: emit_op_10($70) JSR INTERP DB $2A,$70 ; CB 112 DB $54,C0084 ; CALL C0084 ; 1006: end DB $5C ; RET ; 1007: def emit_sw C0122: ; emit_sw() ; 1008: emit_op_10($72) JSR INTERP DB $2A,$72 ; CB 114 DB $54,C0084 ; CALL C0084 ; 1009: end DB $5C ; RET ; 1010: def emit_slb_10(index) C0124: ; emit_slb_10() ; index = 2 ; 1011: emit_op_10($74) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$74 ; CB 116 DB $54,C0084 ; CALL C0084 ; 1012: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1013: end DB $5A ; LEAVE ; 1014: def emit_slw_10(index) C0126: ; emit_slw_10() ; index = 2 ; 1015: emit_op_10($76) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$76 ; CB 118 DB $54,C0084 ; CALL C0084 ; 1016: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1017: end DB $5A ; LEAVE ; 1018: def emit_dlb_10(index) C0128: ; emit_dlb_10() ; index = 2 ; 1019: emit_op_10($6C) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$6C ; CB 108 DB $54,C0084 ; CALL C0084 ; 1020: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1021: end DB $5A ; LEAVE ; 1022: def emit_dlw_10(index) C0130: ; emit_dlw_10() ; index = 2 ; 1023: emit_op_10($6E) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$6E ; CB 110 DB $54,C0084 ; CALL C0084 ; 1024: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1025: end DB $5A ; LEAVE ; 1026: def emit_sab_10(tag) C0132: ; emit_sab_10() ; tag = 2 ; 1027: emit_op_10($78) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$78 ; CB 120 DB $54,C0084 ; CALL C0084 ; 1028: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1029: end DB $5A ; LEAVE ; 1030: def emit_saw_10(tag) C0134: ; emit_saw_10() ; tag = 2 ; 1031: emit_op_10($7A) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$7A ; CB 122 DB $54,C0084 ; CALL C0084 ; 1032: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1033: end DB $5A ; LEAVE ; 1034: def emit_dab_10(tag) C0136: ; emit_dab_10() ; tag = 2 ; 1035: emit_op_10($7C) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$7C ; CB 124 DB $54,C0084 ; CALL C0084 ; 1036: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1037: end DB $5A ; LEAVE ; 1038: def emit_daw_10(tag) C0138: ; emit_daw_10() ; tag = 2 ; 1039: emit_op_10($7E) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$7E ; CB 126 DB $54,C0084 ; CALL C0084 ; 1040: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1041: end DB $5A ; LEAVE ; 1042: def emit_call_10(tag) C0140: ; emit_call_10() ; tag = 2 ; 1043: emit_op_10($54) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$54 ; CB 84 DB $54,C0084 ; CALL C0084 ; 1044: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1045: end DB $5A ; LEAVE ; 1046: def emit_ical C0142: ; emit_ical() ; 1047: emit_op_10($56) JSR INTERP DB $2A,$56 ; CB 86 DB $54,C0084 ; CALL C0084 ; 1048: end DB $5C ; RET ; 1049: def emit_push C0144: ; emit_push() ; 1050: emit_op_10($34) JSR INTERP DB $2A,$34 ; CB 52 DB $54,C0084 ; CALL C0084 ; 1051: end DB $5C ; RET ; 1052: def emit_pull C0146: ; emit_pull() ; 1053: ; ; 1054: ; Skip if last op was push ; 1055: ; ; 1056: if lastop == $34 JSR INTERP DB $68,D0018 ; LAB D0018 DB $2A,$34 ; CB 52 DB $40 ; ISEQ DB $4C,C0148 ; SKPFLS C0148 ; 1057: codeptr = codeptr - 1 DB $6A,D0014 ; LAW D0014 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $7A,D0014 ; SAW D0014 ; 1058: lastop = $FF DB $2A,$FF ; CB 255 DB $78,D0018 ; SAB D0018 ; 1059: else DB $50,C0149 ; SKIP C0149 C0148: ; 1060: emit_op_10($36) DB $2A,$36 ; CB 54 DB $54,C0084 ; CALL C0084 ; 1061: fin C0149: ; 1062: end DB $5C ; RET ; 1063: def emit_localaddr_10(index) C0150: ; emit_localaddr_10() ; index = 2 ; 1064: emit_op_10($28) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$28 ; CB 40 DB $54,C0084 ; CALL C0084 ; 1065: emit_byte_10(index) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1066: end DB $5A ; LEAVE ; 1067: def emit_globaladdr_10(tag) C0152: ; emit_globaladdr_10() ; tag = 2 ; 1068: emit_op_10($26) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$26 ; CB 38 DB $54,C0084 ; CALL C0084 ; 1069: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1070: end DB $5A ; LEAVE ; 1071: def emit_indexbyte C0154: ; emit_indexbyte() ; 1072: emit_op_10($02) JSR INTERP DB $2A,$02 ; CB 2 DB $54,C0084 ; CALL C0084 ; 1073: end DB $5C ; RET ; 1074: def emit_indexword C0156: ; emit_indexword() ; 1075: emit_op_10($1E) JSR INTERP DB $2A,$1E ; CB 30 DB $54,C0084 ; CALL C0084 ; 1076: end DB $5C ; RET ; 1077: defopt emit_unaryop_11(op) C0158: ; emit_unaryop_11() ; op = 2 ; 1078: when op LDY #4 LDA #1 JSR ENTER DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X ; 1079: is NEG_TKN DEX LDA #$AD STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0161 : ; 1080: emit_op_10($10) DEX LDA #$10 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1081: is COMP_TKN JMP C0160 C0161: DEX LDA #$A3 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0162 : ; 1082: emit_op_10($12) DEX LDA #$12 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1083: is LOGIC_NOT_TKN JMP C0160 C0162: DEX LDA #$A1 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0163 : ; 1084: emit_op_10($20) DEX LDA #$20 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1085: is INC_TKN JMP C0160 C0163: DEX LDA #$C1 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0164 : ; 1086: emit_op_10($0C) DEX LDA #$0C STA ESTKL,X STY ESTKH,X JSR C0084 ; 1087: is DEC_TKN JMP C0160 C0164: DEX LDA #$C4 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0165 : ; 1088: emit_op_10($0E) DEX LDA #$0E STA ESTKL,X STY ESTKH,X JSR C0084 ; 1089: is BPTR_TKN JMP C0160 C0165: DEX LDA #$DE STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0166 : ; 1090: emit_op_10($60) DEX LDA #$60 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1091: is WPTR_TKN JMP C0160 C0166: DEX LDA #$AA STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0167 : ; 1092: emit_op_10($62) DEX LDA #$62 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1093: otherwise JMP C0160 C0167: ; 1094: return FALSE LDY #$00 STY ESTKL,X STY ESTKH,X JMP LEAVE ; 1095: wend C0160: ; 1096: return TRUE LDA #$FF STA ESTKL,X STA ESTKH,X JMP LEAVE ; 1097: end ; 1098: defopt emit_binaryop_11(op) C0169: ; emit_binaryop_11() ; op = 2 ; 1099: when op LDY #4 LDA #1 JSR ENTER DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X ; 1100: is MUL_TKN DEX LDA #$AA STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0172 : ; 1101: ; ; 1102: ; Replace MUL 2 with SHL 1 ; 1103: ; ; 1104: if lastop == $2A and ^(codeptr - 1) == 2 ; CB 2 DEX LDA D0018 STA ESTKL,X STY ESTKH,X DEX LDA #$2A STA ESTKL,X STY ESTKH,X JSR ISEQ DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB JSR LB DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ISEQ JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0173 : ; 1105: codeptr = codeptr - 1 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 1106: emit_byte_10(1) ; CB 1 LDA #$01 STA ESTKL,X STY ESTKH,X JSR C0076 ; 1107: emit_op_10($1A) ; SHL DEX LDA #$1A STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1108: else JMP C0174 C0173: ; 1109: emit_op_10($06) DEX LDA #$06 STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1110: fin C0174: ; 1111: is DIV_TKN JMP C0171 C0172: DEX LDA #$AF STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0175 : ; 1112: ; ; 1113: ; Replace DIV 2 with SHR 1 ; 1114: ; ; 1115: if lastop == $2A and ^(codeptr - 1) == 2 ; CB 2 DEX LDA D0018 STA ESTKL,X STY ESTKH,X DEX LDA #$2A STA ESTKL,X STY ESTKH,X JSR ISEQ DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB JSR LB DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ISEQ JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0176 : ; 1116: codeptr = codeptr - 1 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 1117: emit_byte_10(1) ; CB 1 LDA #$01 STA ESTKL,X STY ESTKH,X JSR C0076 ; 1118: emit_op_10($1C) ; SHR DEX LDA #$1C STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1119: else JMP C0177 C0176: ; 1120: emit_op_10($08) DEX LDA #$08 STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1121: fin C0177: ; 1122: is MOD_TKN JMP C0171 C0175: DEX LDA #$A5 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0178 : ; 1123: emit_op_10($0A) DEX LDA #$0A STA ESTKL,X STY ESTKH,X JSR C0084 ; 1124: is ADD_TKN JMP C0171 C0178: DEX LDA #$AB STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0179 : ; 1125: ; ; 1126: ; Replace ADD 1 with INCR ; 1127: ; ; 1128: if lastop == $2A and ^(codeptr - 1) == 1 ; CB 1 DEX LDA D0018 STA ESTKL,X STY ESTKH,X DEX LDA #$2A STA ESTKL,X STY ESTKH,X JSR ISEQ DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB JSR LB DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ISEQ JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0180 : ; 1129: codeptr = codeptr - 2 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 1130: emit_op_10($0C) ; INC_OP LDA #$0C STA ESTKL,X STY ESTKH,X JSR C0084 ; 1131: else JMP C0181 C0180: ; 1132: emit_op_10($02) DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1133: fin C0181: ; 1134: is SUB_TKN JMP C0171 C0179: DEX LDA #$AD STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0182 : ; 1135: ; ; 1136: ; Replace SUB 1 with DECR ; 1137: ; ; 1138: if lastop == $2A and ^(codeptr - 1) == 1 ; CB 1 DEX LDA D0018 STA ESTKL,X STY ESTKH,X DEX LDA #$2A STA ESTKL,X STY ESTKH,X JSR ISEQ DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB JSR LB DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ISEQ JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0183 : ; 1139: codeptr = codeptr - 2 DEX LDA D0014 STA ESTKL,X LDA D0014+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB LDA ESTKL,X STA D0014 LDA ESTKH,X STA D0014+1 ; 1140: emit_op_10($0E) ; DEC_OP LDA #$0E STA ESTKL,X STY ESTKH,X JSR C0084 ; 1141: else JMP C0184 C0183: ; 1142: emit_op_10($04) DEX LDA #$04 STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0084 ; 1143: fin C0184: ; 1144: is SHL_TKN JMP C0171 C0182: DEX LDA #$CC STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0185 : ; 1145: emit_op_10($1A) DEX LDA #$1A STA ESTKL,X STY ESTKH,X JSR C0084 ; 1146: is SHR_TKN JMP C0171 C0185: DEX LDA #$D2 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0186 : ; 1147: emit_op_10($1C) DEX LDA #$1C STA ESTKL,X STY ESTKH,X JSR C0084 ; 1148: is AND_TKN JMP C0171 C0186: DEX LDA #$A6 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0187 : ; 1149: emit_op_10($14) DEX LDA #$14 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1150: is OR_TKN JMP C0171 C0187: DEX LDA #$BF STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0188 : ; 1151: emit_op_10($16) DEX LDA #$16 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1152: is EOR_TKN JMP C0171 C0188: DEX LDA #$DE STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0189 : ; 1153: emit_op_10($18) DEX LDA #$18 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1154: is EQ_TKN JMP C0171 C0189: DEX LDA #$C5 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0190 : ; 1155: emit_op_10($40) DEX LDA #$40 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1156: is NE_TKN JMP C0171 C0190: DEX LDA #$D5 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0191 : ; 1157: emit_op_10($42) DEX LDA #$42 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1158: is GE_TKN JMP C0171 C0191: DEX LDA #$C8 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0192 : ; 1159: emit_op_10($48) DEX LDA #$48 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1160: is LT_TKN JMP C0171 C0192: DEX LDA #$BC STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0193 : ; 1161: emit_op_10($46) DEX LDA #$46 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1162: is GT_TKN JMP C0171 C0193: DEX LDA #$BE STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0194 : ; 1163: emit_op_10($44) DEX LDA #$44 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1164: is LE_TKN JMP C0171 C0194: DEX LDA #$C2 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0195 : ; 1165: emit_op_10($4A) DEX LDA #$4A STA ESTKL,X STY ESTKH,X JSR C0084 ; 1166: is LOGIC_OR_TKN JMP C0171 C0195: DEX LDA #$CF STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0196 : ; 1167: emit_op_10($22) DEX LDA #$22 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1168: is LOGIC_AND_TKN JMP C0171 C0196: DEX LDA #$CE STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0197 : ; 1169: emit_op_10($24) DEX LDA #$24 STA ESTKL,X STY ESTKH,X JSR C0084 ; 1170: is COMMA_TKN JMP C0171 C0197: DEX LDA #$AC STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0198 : ; 1171: ; Do nothing except move to next stanza in expression ; 1172: otherwise JMP C0171 C0198: ; 1173: return FALSE LDY #$00 STY ESTKL,X STY ESTKH,X JMP LEAVE ; 1174: wend C0171: ; 1175: return TRUE LDA #$FF STA ESTKL,X STA ESTKH,X JMP LEAVE ; 1176: end ; 1177: def emit_brtru_10(tag) C0200: ; emit_brtru_10() ; tag = 2 ; 1178: emit_op_10($4E) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$4E ; CB 78 DB $54,C0084 ; CALL C0084 ; 1179: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1180: end DB $5A ; LEAVE ; 1181: def emit_brfls_10(tag) C0202: ; emit_brfls_10() ; tag = 2 ; 1182: emit_op_10($4C) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$4C ; CB 76 DB $54,C0084 ; CALL C0084 ; 1183: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1184: end DB $5A ; LEAVE ; 1185: def emit_brgt_10(tag) C0204: ; emit_brgt_10() ; tag = 2 ; 1186: emit_op_10($3A) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$3A ; CB 58 DB $54,C0084 ; CALL C0084 ; 1187: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1188: end DB $5A ; LEAVE ; 1189: def emit_brlt_10(tag) C0206: ; emit_brlt_10() ; tag = 2 ; 1190: emit_op_10($38) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$38 ; CB 56 DB $54,C0084 ; CALL C0084 ; 1191: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1192: end DB $5A ; LEAVE ; 1193: def emit_brne_10(tag) C0208: ; emit_brne_10() ; tag = 2 ; 1194: emit_op_10($3E) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$3E ; CB 62 DB $54,C0084 ; CALL C0084 ; 1195: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1196: end DB $5A ; LEAVE ; 1197: def emit_jump_10(tag) C0210: ; emit_jump_10() ; tag = 2 ; 1198: emit_op_10($50) JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $2A,$50 ; CB 80 DB $54,C0084 ; CALL C0084 ; 1199: emit_tag_10(tag) DB $66,$02 ; LLW 2 DB $54,C0086 ; CALL C0086 ; 1200: end DB $5A ; LEAVE ; 1201: def emit_drop C0212: ; emit_drop() ; 1202: emit_op_10($30) JSR INTERP DB $2A,$30 ; CB 48 DB $54,C0084 ; CALL C0084 ; 1203: end DB $5C ; RET ; 1204: def emit_swap C0214: ; emit_swap() ; 1205: emit_op_10($2E) JSR INTERP DB $2A,$2E ; CB 46 DB $54,C0084 ; CALL C0084 ; 1206: end DB $5C ; RET ; 1207: def emit_leave_10(framesize) C0216: ; emit_leave_10() ; framesize = 2 ; 1208: if framesize > 2 JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $66,$02 ; LLW 2 DB $2A,$02 ; CB 2 DB $44 ; ISGT DB $4C,C0218 ; SKPFLS C0218 ; 1209: emit_op_10($5A) DB $2A,$5A ; CB 90 DB $54,C0084 ; CALL C0084 ; 1210: else DB $50,C0219 ; SKIP C0219 C0218: ; 1211: emit_op_10($5C) DB $2A,$5C ; CB 92 DB $54,C0084 ; CALL C0084 ; 1212: fin C0219: ; 1213: end DB $5A ; LEAVE ; 1214: def emit_enter_20(framesize, cparams) C0220: ; emit_enter_20() ; framesize = 2 ; cparams = 4 ; 1215: emit_byte_10(emit_enter_20.[0]) JSR INTERP DB $58,$06,$02 ; ENTER 6,2 DB $26,C0220 ; LA C0220 DB $00 ; ZERO DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1216: emit_byte_10(emit_enter_20.[1]) DB $26,C0220 ; LA C0220 DB $2A,$01 ; CB 1 DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1217: emit_byte_10(emit_enter_20.[2]) DB $26,C0220 ; LA C0220 DB $2A,$02 ; CB 2 DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1218: if framesize > 2 DB $66,$02 ; LLW 2 DB $2A,$02 ; CB 2 DB $44 ; ISGT DB $4C,C0222 ; SKPFLS C0222 ; 1219: emit_op_10($58) DB $2A,$58 ; CB 88 DB $54,C0084 ; CALL C0084 ; 1220: emit_byte_10(framesize) DB $66,$02 ; LLW 2 DB $54,C0076 ; CALL C0076 ; 1221: emit_byte_10(cparams) DB $66,$04 ; LLW 4 DB $54,C0076 ; CALL C0076 ; 1222: fin C0222: C0223: ; 1223: end DB $5A ; LEAVE ; 1224: def emit_start C0224: ; emit_start() ; 1225: ; ; 1226: ; Save address ; 1227: ; ; 1228: entrypoint = codeptr JSR INTERP DB $6A,D0014 ; LAW D0014 DB $7A,D0016 ; SAW D0016 ; 1229: emit_byte_10(emit_start.[0]) DB $26,C0224 ; LA C0224 DB $00 ; ZERO DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1230: emit_byte_10(emit_start.[1]) DB $26,C0224 ; LA C0224 DB $2A,$01 ; CB 1 DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1231: emit_byte_10(emit_start.[2]) DB $26,C0224 ; LA C0224 DB $2A,$02 ; CB 2 DB $02 ; IDXB DB $60 ; LB DB $54,C0076 ; CALL C0076 ; 1232: end DB $5C ; RET ; 1233: def emit_exit C0226: ; emit_exit() ; 1234: emit_op_10($00) JSR INTERP DB $00 ; ZERO DB $54,C0084 ; CALL C0084 ; 1235: emit_op_10($5C) DB $2A,$5C ; CB 92 DB $54,C0084 ; CALL C0084 ; 1236: end DB $5C ; RET ; 1237: ; ; 1238: ; Lexical anaylzer ; 1239: ; ; 1240: ;def isalpha_11(c) ; 1241: ; if c >= 'A' and c <= 'Z' ; 1242: ; return TRUE ; 1243: ; elsif c >= 'a' and c <= 'z' ; 1244: ; return TRUE ; 1245: ; elsif c == '_' ; 1246: ; return TRUE ; 1247: ; fin ; 1248: ; return FALSE ; 1249: ;end ; 1250: asm isalpha_11 C0228: ; isalpha_11() ; 1251: LDY #$00 LDY #$00 ; 1252: LDA ESTKL,X LDA ESTKL,X ; 1253: CMP #'A' CMP #'A' ; 1254: BCC ISALRET BCC ISALRET ; 1255: CMP #'Z'+1 CMP #'Z'+1 ; 1256: BCS :+ BCS :+ ; 1257: DEY DEY ; 1258: BNE ISALRET BNE ISALRET ; 1259: : CMP #'a' : CMP #'a' ; 1260: BCC ISALRET BCC ISALRET ; 1261: CMP #'z'+1 CMP #'z'+1 ; 1262: BCS :+ BCS :+ ; 1263: DEY DEY ; 1264: BNE ISALRET BNE ISALRET ; 1265: : CMP #'_' : CMP #'_' ; 1266: BNE ISALRET BNE ISALRET ; 1267: DEY DEY ; 1268: ISALRET: ISALRET: ; 1269: STY ESTKL,X STY ESTKL,X ; 1270: STY ESTKH,X STY ESTKH,X ; 1271: RTS RTS ; 1272: end RTS ; 1273: ;def isnum_11(c) ; 1274: ; if c >= '0' and c <= '9' ; 1275: ; return TRUE ; 1276: ; fin ; 1277: ; return FALSE ; 1278: ;end ; 1279: asm isnum_11 C0230: ; isnum_11() ; 1280: LDY #$00 LDY #$00 ; 1281: LDA ESTKL,X LDA ESTKL,X ; 1282: CMP #'0' CMP #'0' ; 1283: BCC :+ BCC :+ ; 1284: CMP #'9'+1 CMP #'9'+1 ; 1285: BCS :+ BCS :+ ; 1286: DEY DEY ; 1287: : STY ESTKL,X : STY ESTKL,X ; 1288: STY ESTKH,X STY ESTKH,X ; 1289: RTS RTS ; 1290: end RTS ; 1291: ;def isalphanum_11(c) ; 1292: ; if c >= 'A' and c <= 'Z' ; 1293: ; return TRUE ; 1294: ; elsif c >= '0' and c <= '9' ; 1295: ; return TRUE ; 1296: ; elsif c >= 'a' and c <= 'z' ; 1297: ; return TRUE ; 1298: ; elsif c == '_' ; 1299: ; return TRUE ; 1300: ; fin ; 1301: ; return FALSE ; 1302: ;end ; 1303: asm isalphanum_11 C0232: ; isalphanum_11() ; 1304: LDY #$00 LDY #$00 ; 1305: LDA ESTKL,X LDA ESTKL,X ; 1306: CMP #'0' CMP #'0' ; 1307: BCC ISANRET BCC ISANRET ; 1308: CMP #'9'+1 CMP #'9'+1 ; 1309: BCS :+ BCS :+ ; 1310: DEY DEY ; 1311: BNE ISANRET BNE ISANRET ; 1312: : CMP #'A' : CMP #'A' ; 1313: BCC ISANRET BCC ISANRET ; 1314: CMP #'Z'+1 CMP #'Z'+1 ; 1315: BCS :+ BCS :+ ; 1316: DEY DEY ; 1317: BNE ISANRET BNE ISANRET ; 1318: : CMP #'a' : CMP #'a' ; 1319: BCC :+ BCC :+ ; 1320: CMP #'z'+1 CMP #'z'+1 ; 1321: BCS ISANRET BCS ISANRET ; 1322: DEY DEY ; 1323: BNE ISANRET BNE ISANRET ; 1324: : CMP #'_' : CMP #'_' ; 1325: BNE ISANRET BNE ISANRET ; 1326: DEY DEY ; 1327: ISANRET: ISANRET: ; 1328: STY ESTKL,X STY ESTKL,X ; 1329: STY ESTKH,X STY ESTKH,X ; 1330: RTS RTS ; 1331: end RTS ; 1332: defopt keymatch_21(chrptr, len) C0234: ; keymatch_21() ; chrptr = 2 ; len = 4 ; 1333: byte i, keypos ; i = 6 ; keypos = 7 ; 1334: ; 1335: keypos = 0 LDY #8 LDA #2 JSR ENTER DEX STY ESTKL,X STY ESTKH,X LDY #$07 LDA ESTKL,X STA (FRMP),Y ; 1336: while keywrds[keypos] < len INX C0236: DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR ISLT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0237 : ; 1337: keypos = keypos + keywrds[keypos] + 2 DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ADD DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDY #$07 LDA ESTKL,X STA (FRMP),Y ; 1338: loop INX JMP C0236 C0237: ; 1339: while keywrds[keypos] == len C0238: DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0239 : ; 1340: for i = 1 to len DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X C0241: LDY #$06 LDA ESTKL,X STA (FRMP),Y DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X LDA ESTKH-1,X SBC ESTKH,X BPL :+ JMP C0240 : INC ESTKL,X BNE :+ INC ESTKH,X : ; 1341: if toupper_11((chrptr).[i - 1]) <> keywrds[keypos + i] DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR SUB JSR ADD JSR LB JSR C0024 DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR ADD JSR LB JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0242 : ; 1342: break JMP C0240 ; 1343: fin C0242: C0243: ; 1344: next JMP C0241 C0240: ; 1345: if i > len LDY #$06 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR ISGT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0244 : ; 1346: return keywrds[keypos + keywrds[keypos] + 1] DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ADD DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD JSR ADD JSR LB JMP LEAVE ; 1347: fin C0244: C0245: ; 1348: keypos = keypos + keywrds[keypos] + 2 DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #D0148 STA ESTKH,X DEX LDY #$07 LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ADD DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDY #$07 LDA ESTKL,X STA (FRMP),Y ; 1349: loop INX JMP C0238 C0239: ; 1350: return ID_TKN DEX LDA #$D6 STA ESTKL,X LDY #$00 STY ESTKH,X JMP LEAVE ; 1351: end ; 1352: defopt scan_01 C0246: ; scan_01() ; 1353: ; ; 1354: ; Scan for token based on first character ; 1355: ; ; 1356: while ^scanptr and ^scanptr <= ' ' C0248: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB DEX LDA #$20 STA ESTKL,X STY ESTKH,X JSR ISLE JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0249 : ; 1357: scanptr = scanptr + 1 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1358: loop INX JMP C0248 C0249: ; 1359: tknptr = scanptr DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDA ESTKL,X STA D0417 LDA ESTKH,X STA D0417+1 ; 1360: if !^scanptr or ^scanptr == ';' LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB JSR NOT DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB DEX LDA #$3B STA ESTKL,X STY ESTKH,X JSR ISEQ JSR LOR INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0250 : ; 1361: if token <> EOF_TKN DEX LDA D0413 STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0252 : ; 1362: token = EOL_TKN DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1363: fin INX C0252: C0253: ; 1364: elsif isalpha_11(^scanptr) JMP C0251 C0250: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB JSR C0228 INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0254 : ; 1365: ; ; 1366: ; ID, either variable name or reserved word ; 1367: ; ; 1368: repeat C0256: ; 1369: scanptr = scanptr + 1 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1370: until !isalphanum_11(^scanptr) LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR C0232 LDY #$00 JSR NOT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0256 : C0255: ; 1371: tknlen = scanptr - tknptr; DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA D0417 STA ESTKL,X LDA D0417+1 STA ESTKH,X JSR SUB LDA ESTKL,X STA D0414 ; 1372: token = keymatch_21(tknptr, tknlen) LDA D0417 STA ESTKL,X LDA D0417+1 STA ESTKH,X DEX LDA D0414 STA ESTKL,X LDY #$00 STY ESTKH,X JSR C0234 LDA ESTKL,X STA D0413 ; 1373: elsif isnum_11(^scanptr) INX JMP C0251 C0254: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB JSR C0230 INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0257 : ; 1374: ; ; 1375: ; Number constant ; 1376: ; ; 1377: token = INT_TKN DEX LDA #$C9 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1378: constval = 0 STY ESTKL,X STY ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1379: repeat INX C0259: ; 1380: constval = constval * 10 + ^scanptr - '0' DEX LDA D0419 STA ESTKL,X LDA D0419+1 STA ESTKH,X DEX LDA #$0A STA ESTKL,X LDY #$00 STY ESTKH,X JSR MUL DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR ADD DEX LDA #$30 STA ESTKL,X STY ESTKH,X JSR SUB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1381: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1382: until !isnum_11(^scanptr) LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR C0230 LDY #$00 JSR NOT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0259 : C0258: ; 1383: elsif ^scanptr == '$' JMP C0251 C0257: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$24 STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0260 : ; 1384: ; ; 1385: ; Hexadecimal constant ; 1386: ; ; 1387: token = INT_TKN; DEX LDA #$C9 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1388: constval = 0 STY ESTKL,X STY ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1389: repeat INX C0262: ; 1390: scanptr = scanptr + 1 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1391: if ^scanptr >= '0' and ^scanptr <= '9' LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB DEX LDA #$30 STA ESTKL,X STY ESTKH,X JSR ISGE DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$39 STA ESTKL,X STY ESTKH,X JSR ISLE JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0263 : ; 1392: constval = (constval << 4) + ^scanptr - '0' DEX LDA D0419 STA ESTKL,X LDA D0419+1 STA ESTKH,X DEX LDA #$04 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SHL DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR ADD DEX LDA #$30 STA ESTKL,X STY ESTKH,X JSR SUB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1393: elsif ^scanptr >= 'A' and ^scanptr <= 'F' INX JMP C0264 C0263: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$41 STA ESTKL,X STY ESTKH,X JSR ISGE DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$46 STA ESTKL,X STY ESTKH,X JSR ISLE JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0265 : ; 1394: constval = (constval << 4) + ^scanptr - '7'; 'A'-10 DEX LDA D0419 STA ESTKL,X LDA D0419+1 STA ESTKH,X DEX LDA #$04 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SHL DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR ADD DEX LDA #$37 STA ESTKL,X STY ESTKH,X JSR SUB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1395: elsif ^scanptr >= 'a' and ^scanptr <= 'f' INX JMP C0264 C0265: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$61 STA ESTKL,X STY ESTKH,X JSR ISGE DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$66 STA ESTKL,X STY ESTKH,X JSR ISLE JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0266 : ; 1396: constval = (constval << 4) + ^scanptr - 'W'; 'a'-10 DEX LDA D0419 STA ESTKL,X LDA D0419+1 STA ESTKH,X DEX LDA #$04 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SHL DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB JSR ADD DEX LDA #$57 STA ESTKL,X STY ESTKH,X JSR SUB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1397: else INX JMP C0264 C0266: ; 1398: break; JMP C0261 ; 1399: fin C0264: ; 1400: until !^scanptr DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB JSR NOT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0262 : C0261: ; 1401: elsif ^scanptr == $27 ; ' JMP C0251 C0260: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$27 STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0267 : ; 1402: ; ; 1403: ; Character constant ; 1404: ; ; 1405: token = CHR_TKN DEX LDA #$C3 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1406: if ^(scanptr + 1) <> $5C ; \ LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD JSR LB DEX LDA #$5C STA ESTKL,X STY ESTKH,X JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0268 : ; 1407: constval = ^(scanptr + 1) DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1408: if ^(scanptr + 2) <> $27 ; ' LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD JSR LB DEX LDA #$27 STA ESTKL,X STY ESTKH,X JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0270 : ; 1409: return parse_err_11(@bad_cnst) DEX LDA #D0474 STA ESTKH,X JSR C0062 RTS ; 1410: fin C0270: C0271: ; 1411: scanptr = scanptr + 3 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$03 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1412: else INX JMP C0269 C0268: ; 1413: when ^(scanptr + 2) DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB ; 1414: is 'n' DEX LDA #$6E STA ESTKL,X STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0273 : ; 1415: constval = $0D DEX LDA #$0D STA ESTKL,X STY ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1416: is 'r' INX JMP C0272 C0273: DEX LDA #$72 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0274 : ; 1417: constval = $0A DEX LDA #$0A STA ESTKL,X STY ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1418: is 't' INX JMP C0272 C0274: DEX LDA #$74 STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0275 : ; 1419: constval = $09 DEX LDA #$09 STA ESTKL,X STY ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1420: otherwise INX JMP C0272 C0275: ; 1421: constval = ^(scanptr + 2) DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1422: wend INX C0272: ; 1423: if ^(scanptr + 3) <> $27 ; ' LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$03 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDA #$27 STA ESTKL,X STY ESTKH,X JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0277 : ; 1424: return parse_err_11(@bad_cnst) DEX LDA #D0474 STA ESTKH,X JSR C0062 RTS ; 1425: fin C0277: C0278: ; 1426: scanptr = scanptr + 4 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$04 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1427: fin INX C0269: ; 1428: elsif ^scanptr == '"' JMP C0251 C0267: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$22 STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0279 : ; 1429: ; ; 1430: ; String constant ; 1431: ; ; 1432: token = STR_TKN DEX LDA #$D3 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1433: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1434: constval = scanptr LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDA ESTKL,X STA D0419 LDA ESTKH,X STA D0419+1 ; 1435: while ^scanptr and ^scanptr <> '"' INX C0280: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X JSR LB DEX LDA #$22 STA ESTKL,X STY ESTKH,X JSR ISNE JSR LAND INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0281 : ; 1436: scanptr = scanptr + 1 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1437: loop INX JMP C0280 C0281: ; 1438: if !^scanptr DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB JSR NOT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0282 : ; 1439: return parse_err_11(@bad_cnst) DEX LDA #D0474 STA ESTKH,X JSR C0062 RTS ; 1440: fin C0282: C0283: ; 1441: scanptr = scanptr + 1 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1442: else INX JMP C0251 C0279: ; 1443: ; ; 1444: ; Potential two and three character tokens ; 1445: ; ; 1446: when ^scanptr DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB ; 1447: is '>' DEX LDA #$3E STA ESTKL,X STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0285 : ; 1448: if ^(scanptr + 1) == '>' DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD JSR LB DEX LDA #$3E STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0286 : ; 1449: token = SHR_TKN DEX LDA #$D2 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1450: scanptr = scanptr + 2 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1451: elsif ^(scanptr + 1) == '=' INX JMP C0287 C0286: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDA #$3D STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0288 : ; 1452: token = GE_TKN DEX LDA #$C8 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1453: scanptr = scanptr + 2 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1454: else INX JMP C0287 C0288: ; 1455: token = GT_TKN DEX LDA #$BE STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1456: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1457: fin INX C0287: ; 1458: is '<' JMP C0284 C0285: DEX LDA #$3C STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0289 : ; 1459: if ^(scanptr + 1) == '<' DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD JSR LB DEX LDA #$3C STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0290 : ; 1460: token = SHL_TKN DEX LDA #$CC STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1461: scanptr = scanptr + 2 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1462: elsif ^(scanptr + 1) == '=' INX JMP C0291 C0290: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDA #$3D STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0292 : ; 1463: token = LE_TKN DEX LDA #$C2 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1464: scanptr = scanptr + 2 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1465: elsif ^(scanptr + 1) == '>' INX JMP C0291 C0292: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDA #$3E STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0293 : ; 1466: token = NE_TKN DEX LDA #$D5 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1467: scanptr = scanptr + 2 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1468: else INX JMP C0291 C0293: ; 1469: token = LT_TKN DEX LDA #$BC STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1470: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1471: fin INX C0291: ; 1472: is '=' JMP C0284 C0289: DEX LDA #$3D STA ESTKL,X LDY #$00 STY ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X BNE :+ LDA ESTKH-1,X CMP ESTKH,X BEQ :++ : JMP C0294 : ; 1473: if ^(scanptr + 1) == '=' DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD JSR LB DEX LDA #$3D STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0295 : ; 1474: token = EQ_TKN DEX LDA #$C5 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1475: scanptr = scanptr + 2; LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1476: elsif ^(scanptr + 1) == ',' INX JMP C0296 C0295: DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB DEX LDA #$2C STA ESTKL,X STY ESTKH,X JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0297 : ; 1477: token = SETLIST_TKN DEX LDA #$B9 STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1478: scanptr = scanptr + 2; LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$02 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1479: else INX JMP C0296 C0297: ; 1480: token = SET_TKN; DEX LDA #$BD STA ESTKL,X LDY #$00 STY ESTKH,X LDA ESTKL,X STA D0413 ; 1481: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1482: fin INX C0296: ; 1483: otherwise JMP C0284 C0294: ; 1484: ; ; 1485: ; Simple single character tokens ; 1486: ; ; 1487: token = ^scanptr ? $80 DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X LDY #$00 JSR LB DEX LDA #$80 STA ESTKL,X STY ESTKH,X JSR IOR LDA ESTKL,X STA D0413 ; 1488: scanptr = scanptr + 1 LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR ADD LDA ESTKL,X STA D0415 LDA ESTKH,X STA D0415+1 ; 1489: wend INX C0284: ; 1490: fin INX C0251: ; 1491: tknlen = scanptr - tknptr DEX LDA D0415 STA ESTKL,X LDA D0415+1 STA ESTKH,X DEX LDA D0417 STA ESTKL,X LDA D0417+1 STA ESTKH,X JSR SUB LDA ESTKL,X STA D0414 ; 1492: return token LDA D0413 STA ESTKL,X LDY #$00 STY ESTKH,X RTS ; 1493: end ; 1494: def rewind_10(ptr) C0299: ; rewind_10() ; ptr = 2 ; 1495: scanptr = ptr JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $66,$02 ; LLW 2 DB $7A,D0415 ; SAW D0415 ; 1496: end DB $5A ; LEAVE ; 1497: ; ; 1498: ; Get next line of input ; 1499: ; ; 1500: def nextln_01 C0301: ; nextln_01() ; 1501: byte i, chr ; i = 2 ; chr = 3 ; 1502: ; 1503: scanptr = inbuff JSR INTERP DB $58,$04,$00 ; ENTER 4,0 DB $2C,$00,$02 ; CW 512 DB $7A,D0415 ; SAW D0415 ; 1504: ^instr = read_31(inref, inbuff, $7F) DB $2C,$FF,$01 ; CW 511 DB $68,D0000 ; LAB D0000 DB $2C,$00,$02 ; CW 512 DB $2A,$7F ; CB 127 DB $54,C0036 ; CALL C0036 DB $70 ; SB ; 1505: inbuff[^instr] = $00 DB $2C,$00,$02 ; CW 512 DB $2C,$FF,$01 ; CW 511 DB $60 ; LB DB $02 ; IDXB DB $00 ; ZERO DB $70 ; SB ; 1506: if ^instr DB $2C,$FF,$01 ; CW 511 DB $60 ; LB DB $4C,C0303 ; SKPFLS C0303 ; 1507: lineno = lineno + 1 DB $6A,D0421 ; LAW D0421 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D0421 ; SAW D0421 ; 1508: if !(lineno & $0F) DB $6A,D0421 ; LAW D0421 DB $2A,$0F ; CB 15 DB $14 ; BAND DB $20 ; NOT DB $4C,C0305 ; SKPFLS C0305 ; 1509: cout('.') DB $2A,$2E ; CB 46 DB $54,C0016 ; CALL C0016 ; 1510: fin C0305: C0306: ; 1511: ; cout('>') ; 1512: ; prstr(instr) ; 1513: ; crout ; 1514: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 1515: else DB $50,C0304 ; SKIP C0304 C0303: ; 1516: ^instr = 0 DB $2C,$FF,$01 ; CW 511 DB $00 ; ZERO DB $70 ; SB ; 1517: ^inbuff = $00 DB $2C,$00,$02 ; CW 512 DB $00 ; ZERO DB $70 ; SB ; 1518: token = DONE_TKN DB $2A,$98 ; CB 152 DB $78,D0413 ; SAB D0413 ; 1519: fin C0304: ; 1520: return ^instr DB $2C,$FF,$01 ; CW 511 DB $60 ; LB DB $5A ; LEAVE ; 1521: end ; 1522: ; ; 1523: ; Alebraic op to stack op ; 1524: ; ; 1525: def push_op_21(op, prec) C0307: ; push_op_21() ; op = 2 ; prec = 4 ; 1526: opsp = opsp + 1 JSR INTERP DB $58,$06,$02 ; ENTER 6,2 DB $6A,D0411 ; LAW D0411 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D0411 ; SAW D0411 ; 1527: if opsp == 16 DB $6A,D0411 ; LAW D0411 DB $2A,$10 ; CB 16 DB $40 ; ISEQ DB $4C,C0309 ; SKPFLS C0309 ; 1528: return parse_err_11(@estk_overflw) DB $26,D0574 ; LA D0574 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1529: fin C0309: C0310: ; 1530: opstack[opsp] = op DB $26,D0379 ; LA D0379 DB $6A,D0411 ; LAW D0411 DB $02 ; IDXB DB $66,$02 ; LLW 2 DB $70 ; SB ; 1531: precstack[opsp] = prec DB $26,D0395 ; LA D0395 DB $6A,D0411 ; LAW D0411 DB $02 ; IDXB DB $66,$04 ; LLW 4 DB $70 ; SB ; 1532: return 0 DB $00 ; ZERO DB $5A ; LEAVE ; 1533: end ; 1534: def pop_op_01 C0311: ; pop_op_01() ; 1535: if opsp < 0 JSR INTERP DB $6A,D0411 ; LAW D0411 DB $00 ; ZERO DB $46 ; ISLT DB $4C,C0313 ; SKPFLS C0313 ; 1536: return parse_err_11(@estk_underflw) DB $26,D0594 ; LA D0594 DB $54,C0062 ; CALL C0062 DB $5C ; RET ; 1537: fin C0313: C0314: ; 1538: opsp = opsp - 1 DB $6A,D0411 ; LAW D0411 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $7A,D0411 ; SAW D0411 ; 1539: return opstack[opsp + 1] DB $26,D0379 ; LA D0379 DB $6A,D0411 ; LAW D0411 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $02 ; IDXB DB $60 ; LB DB $5C ; RET ; 1540: end ; 1541: def tos_op_01 C0315: ; tos_op_01() ; 1542: if opsp < 0 JSR INTERP DB $6A,D0411 ; LAW D0411 DB $00 ; ZERO DB $46 ; ISLT DB $4C,C0317 ; SKPFLS C0317 ; 1543: return 0 DB $00 ; ZERO DB $5C ; RET ; 1544: fin C0317: C0318: ; 1545: return opstack[opsp] DB $26,D0379 ; LA D0379 DB $6A,D0411 ; LAW D0411 DB $02 ; IDXB DB $60 ; LB DB $5C ; RET ; 1546: end ; 1547: def tos_op_prec_11(tos) C0319: ; tos_op_prec_11() ; tos = 2 ; 1548: if opsp <= tos JSR INTERP DB $58,$04,$01 ; ENTER 4,1 DB $6A,D0411 ; LAW D0411 DB $66,$02 ; LLW 2 DB $4A ; ISLE DB $4C,C0321 ; SKPFLS C0321 ; 1549: return 100 DB $2A,$64 ; CB 100 DB $5A ; LEAVE ; 1550: fin C0321: C0322: ; 1551: return precstack[opsp] DB $26,D0395 ; LA D0395 DB $6A,D0411 ; LAW D0411 DB $02 ; IDXB DB $60 ; LB DB $5A ; LEAVE ; 1552: end ; 1553: ; ; 1554: ; Symbol table ; 1555: ; ; 1556: defopt idmatch_41(nameptr, len, idptr, idcnt) C0323: ; idmatch_41() ; nameptr = 2 ; len = 4 ; idptr = 6 ; idcnt = 8 ; 1557: byte i ; i = 10 ; 1558: ; 1559: while idcnt LDY #11 LDA #4 JSR ENTER C0325: DEX LDY #$08 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0326 : ; 1560: if len == (idptr).idname DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDA #$03 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ISEQ INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0327 : ; 1561: for i = 1 to len DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X C0330: LDY #$0A LDA ESTKL,X STA (FRMP),Y DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X INX LDA ESTKL-1,X CMP ESTKL,X LDA ESTKH-1,X SBC ESTKH,X BPL :+ JMP C0329 : INC ESTKL,X BNE :+ INC ESTKH,X : ; 1562: if (nameptr).[i - 1] <> (idptr).idname.[i] DEX LDY #$02 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDY #$0A LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDA #$01 STA ESTKL,X STY ESTKH,X JSR SUB JSR ADD JSR LB DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDA #$03 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD DEX LDY #$0A LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ISNE INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0331 : ; 1563: break JMP C0329 ; 1564: fin C0331: C0332: ; 1565: next JMP C0330 C0329: ; 1566: if i > len LDY #$0A LDA (FRMP),Y STA ESTKL,X LDY #$00 STY ESTKH,X DEX LDY #$04 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X LDY #$00 JSR ISGT INX LDA ESTKL-1,X ORA ESTKH-1,X BNE :+ JMP C0333 : ; 1567: return idptr DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X JMP LEAVE ; 1568: fin C0333: C0334: ; 1569: fin C0327: C0328: ; 1570: idptr = idptr + (idptr).idname + idrecsz DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDY #$06 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDA #$03 STA ESTKL,X LDY #$00 STY ESTKH,X JSR ADD JSR LB JSR ADD DEX LDA #$04 STA ESTKL,X STY ESTKH,X JSR ADD LDY #$06 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 1571: idcnt = idcnt - 1 LDY #$08 LDA (FRMP),Y STA ESTKL,X INY LDA (FRMP),Y STA ESTKH,X DEX LDA #$01 STA ESTKL,X LDY #$00 STY ESTKH,X JSR SUB LDY #$08 LDA ESTKL,X STA (FRMP),Y INY LDA ESTKH,X STA (FRMP),Y ; 1572: loop INX JMP C0325 C0326: ; 1573: return 0 DEX LDY #$00 STY ESTKL,X STY ESTKH,X JMP LEAVE ; 1574: end ; 1575: ;def dumpsym_20(idptr, idcnt) ; 1576: ; while idcnt ; 1577: ; prword_10((idptr):idval) ; 1578: ; cout(' ') ; 1579: ; prbyte_10((idptr).idtype) ; 1580: ; cout(' ') ; 1581: ; prstr(@(idptr).idname) ; 1582: ; cout('=') ; 1583: ; if (idptr).idtype & ADDR_TYPE ; 1584: ; if (idptr):idval & is_ctag ; 1585: ; prword_10(ctag_value:[(idptr):idval & mask_ctag]) ; 1586: ; else ; 1587: ; prword_10((idptr):idval + codebuff) ; 1588: ; fin ; 1589: ; else ; 1590: ; prword_10((idptr):idval) ; 1591: ; fin ; 1592: ; crout() ; 1593: ; idptr = idptr + (idptr).idname + idrecsz ; 1594: ; idcnt = idcnt - 1 ; 1595: ; loop ; 1596: ;end ; 1597: def id_lookup_21(nameptr, len) C0335: ; id_lookup_21() ; nameptr = 2 ; len = 4 ; 1598: word idptr ; idptr = 6 ; 1599: ; 1600: idptr = idmatch_41(nameptr, len, idlocal_tbl, locals) JSR INTERP DB $58,$08,$02 ; ENTER 8,2 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$18 ; CW 6144 DB $68,D0007 ; LAB D0007 DB $54,C0323 ; CALL C0323 DB $76,$06 ; SLW 6 ; 1601: if idptr DB $66,$06 ; LLW 6 DB $4C,C0337 ; SKPFLS C0337 ; 1602: return idptr DB $66,$06 ; LLW 6 DB $5A ; LEAVE ; 1603: fin C0337: C0338: ; 1604: idptr = idmatch_41(nameptr, len, idglobal_tbl, globals) DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$10 ; CW 4096 DB $6A,D0001 ; LAW D0001 DB $54,C0323 ; CALL C0323 DB $76,$06 ; SLW 6 ; 1605: if idptr DB $66,$06 ; LLW 6 DB $4C,C0339 ; SKPFLS C0339 ; 1606: return idptr DB $66,$06 ; LLW 6 DB $5A ; LEAVE ; 1607: fin C0339: C0340: ; 1608: return parse_err_11(@undecl_id) DB $26,D0452 ; LA D0452 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1609: end ; 1610: def idglobal_lookup_21(nameptr, len) C0341: ; idglobal_lookup_21() ; nameptr = 2 ; len = 4 ; 1611: return idmatch_41(nameptr, len, idglobal_tbl, globals) JSR INTERP DB $58,$06,$02 ; ENTER 6,2 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$10 ; CW 4096 DB $6A,D0001 ; LAW D0001 DB $54,C0323 ; CALL C0323 DB $5A ; LEAVE ; 1612: end ; 1613: def idlocal_add_41(namestr, len, type, size) C0343: ; idlocal_add_41() ; namestr = 2 ; len = 4 ; type = 6 ; size = 8 ; 1614: if idmatch_41(namestr, len, @idlocal_tbl, locals) JSR INTERP DB $58,$0A,$04 ; ENTER 10,4 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$18 ; CW 6144 DB $68,D0007 ; LAB D0007 DB $54,C0323 ; CALL C0323 DB $4C,C0345 ; SKPFLS C0345 ; 1615: return parse_err_11(@dup_id) DB $26,D0431 ; LA D0431 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1616: fin C0345: C0346: ; 1617: (lastlocal):idval = framesize DB $6A,D0010 ; LAW D0010 DB $6A,D0008 ; LAW D0008 DB $72 ; SW ; 1618: (lastlocal).idtype = type ? LOCAL_TYPE DB $6A,D0010 ; LAW D0010 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $66,$06 ; LLW 6 DB $2A,$10 ; CB 16 DB $16 ; IOR DB $70 ; SB ; 1619: nametostr_30(namestr, len, lastlocal + idname) DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $6A,D0010 ; LAW D0010 DB $2A,$03 ; CB 3 DB $02 ; ADD DB $54,C0060 ; CALL C0060 ; 1620: locals = locals + 1 DB $68,D0007 ; LAB D0007 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $78,D0007 ; SAB D0007 ; 1621: lastlocal = lastlocal + idrecsz + len DB $6A,D0010 ; LAW D0010 DB $2A,$04 ; CB 4 DB $02 ; ADD DB $66,$04 ; LLW 4 DB $02 ; ADD DB $7A,D0010 ; SAW D0010 ; 1622: if lastlocal > idlocal_tbl + idlocal_tblsz DB $6A,D0010 ; LAW D0010 DB $2C,$00,$18 ; CW 6144 DB $2C,$00,$02 ; CW 512 DB $02 ; ADD DB $44 ; ISGT DB $4C,C0347 ; SKPFLS C0347 ; 1623: prstr(@local_sym_overflw) DB $26,D0665 ; LA D0665 DB $54,C0020 ; CALL C0020 ; 1624: exit DB $54,C0026 ; CALL C0026 ; 1625: fin C0347: C0348: ; 1626: framesize = framesize + size DB $6A,D0008 ; LAW D0008 DB $66,$08 ; LLW 8 DB $02 ; ADD DB $7A,D0008 ; SAW D0008 ; 1627: if framesize > 255 DB $6A,D0008 ; LAW D0008 DB $2A,$FF ; CB 255 DB $44 ; ISGT DB $4C,C0349 ; SKPFLS C0349 ; 1628: prstr(@local_overflw) DB $26,D0615 ; LA D0615 DB $54,C0020 ; CALL C0020 ; 1629: return FALSE DB $00 ; ZERO DB $5A ; LEAVE ; 1630: fin C0349: C0350: ; 1631: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 1632: end ; 1633: def iddata_add_41(namestr, len, type, size) C0351: ; iddata_add_41() ; namestr = 2 ; len = 4 ; type = 6 ; size = 8 ; 1634: if idmatch_41(namestr, len, idglobal_tbl, globals) JSR INTERP DB $58,$0A,$04 ; ENTER 10,4 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$10 ; CW 4096 DB $6A,D0001 ; LAW D0001 DB $54,C0323 ; CALL C0323 DB $4C,C0353 ; SKPFLS C0353 ; 1635: return parse_err_11(@dup_id) DB $26,D0431 ; LA D0431 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1636: fin C0353: C0354: ; 1637: (lastglobal):idval = datasize DB $6A,D0005 ; LAW D0005 DB $6A,D0003 ; LAW D0003 DB $72 ; SW ; 1638: (lastglobal).idtype = type DB $6A,D0005 ; LAW D0005 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $66,$06 ; LLW 6 DB $70 ; SB ; 1639: nametostr_30(namestr, len, lastglobal + idname) DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $6A,D0005 ; LAW D0005 DB $2A,$03 ; CB 3 DB $02 ; ADD DB $54,C0060 ; CALL C0060 ; 1640: emit_iddata_30(datasize, size, lastglobal + idname) DB $6A,D0003 ; LAW D0003 DB $66,$08 ; LLW 8 DB $6A,D0005 ; LAW D0005 DB $2A,$03 ; CB 3 DB $02 ; ADD DB $54,C0092 ; CALL C0092 ; 1641: globals = globals + 1 DB $6A,D0001 ; LAW D0001 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D0001 ; SAW D0001 ; 1642: lastglobal = lastglobal + idrecsz + len DB $6A,D0005 ; LAW D0005 DB $2A,$04 ; CB 4 DB $02 ; ADD DB $66,$04 ; LLW 4 DB $02 ; ADD DB $7A,D0005 ; SAW D0005 ; 1643: if lastglobal > idglobal_tbl + idglobal_tblsz DB $6A,D0005 ; LAW D0005 DB $2C,$00,$10 ; CW 4096 DB $2C,$00,$08 ; CW 2048 DB $02 ; ADD DB $44 ; ISGT DB $4C,C0355 ; SKPFLS C0355 ; 1644: prstr(@global_sym_overflw) DB $26,D0636 ; LA D0636 DB $54,C0020 ; CALL C0020 ; 1645: exit DB $54,C0026 ; CALL C0026 ; 1646: fin C0355: C0356: ; 1647: datasize = datasize + size DB $6A,D0003 ; LAW D0003 DB $66,$08 ; LLW 8 DB $02 ; ADD DB $7A,D0003 ; SAW D0003 ; 1648: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 1649: end ; 1650: def iddata_size_30(type, varsize, initsize) C0357: ; iddata_size_30() ; type = 2 ; varsize = 4 ; initsize = 6 ; 1651: if varsize > initsize JSR INTERP DB $58,$08,$03 ; ENTER 8,3 DB $66,$04 ; LLW 4 DB $66,$06 ; LLW 6 DB $44 ; ISGT DB $4C,C0359 ; SKPFLS C0359 ; 1652: datasize = datasize + emit_data_41(0, 0, 0, varsize - initsize) DB $6A,D0003 ; LAW D0003 DB $00 ; ZERO DB $00 ; ZERO DB $00 ; ZERO DB $66,$04 ; LLW 4 DB $66,$06 ; LLW 6 DB $04 ; SUB DB $54,C0094 ; CALL C0094 DB $02 ; ADD DB $7A,D0003 ; SAW D0003 ; 1653: else DB $50,C0360 ; SKIP C0360 C0359: ; 1654: datasize = datasize + initsize DB $6A,D0003 ; LAW D0003 DB $66,$06 ; LLW 6 DB $02 ; ADD DB $7A,D0003 ; SAW D0003 ; 1655: fin C0360: ; 1656: ; if datasize <> codeptr - codebuff ; 1657: ; prstr(@emiterr) ; 1658: ; keyin_01() ; 1659: ; fin ; 1660: end DB $5A ; LEAVE ; 1661: def idglobal_add_41(namestr, len, type, value) C0361: ; idglobal_add_41() ; namestr = 2 ; len = 4 ; type = 6 ; value = 8 ; 1662: if idmatch_41(namestr, len, idglobal_tbl, globals) JSR INTERP DB $58,$0A,$04 ; ENTER 10,4 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2C,$00,$10 ; CW 4096 DB $6A,D0001 ; LAW D0001 DB $54,C0323 ; CALL C0323 DB $4C,C0363 ; SKPFLS C0363 ; 1663: return parse_err_11(@dup_id) DB $26,D0431 ; LA D0431 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1664: fin C0363: C0364: ; 1665: (lastglobal):idval = value DB $6A,D0005 ; LAW D0005 DB $66,$08 ; LLW 8 DB $72 ; SW ; 1666: (lastglobal).idtype = type DB $6A,D0005 ; LAW D0005 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $66,$06 ; LLW 6 DB $70 ; SB ; 1667: nametostr_30(namestr, len, lastglobal + idname) DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $6A,D0005 ; LAW D0005 DB $2A,$03 ; CB 3 DB $02 ; ADD DB $54,C0060 ; CALL C0060 ; 1668: globals = globals + 1 DB $6A,D0001 ; LAW D0001 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $7A,D0001 ; SAW D0001 ; 1669: lastglobal = lastglobal + idrecsz + len DB $6A,D0005 ; LAW D0005 DB $2A,$04 ; CB 4 DB $02 ; ADD DB $66,$04 ; LLW 4 DB $02 ; ADD DB $7A,D0005 ; SAW D0005 ; 1670: if lastglobal > idglobal_tbl + idglobal_tblsz DB $6A,D0005 ; LAW D0005 DB $2C,$00,$10 ; CW 4096 DB $2C,$00,$08 ; CW 2048 DB $02 ; ADD DB $44 ; ISGT DB $4C,C0365 ; SKPFLS C0365 ; 1671: prstr(@global_sym_overflw) DB $26,D0636 ; LA D0636 DB $54,C0020 ; CALL C0020 ; 1672: exit DB $54,C0026 ; CALL C0026 ; 1673: fin C0365: C0366: ; 1674: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 1675: end ; 1676: def idfunc_add_31(namestr, len, tag) C0367: ; idfunc_add_31() ; namestr = 2 ; len = 4 ; tag = 6 ; 1677: return idglobal_add_41(namestr, len, FUNC_TYPE, tag) JSR INTERP DB $58,$08,$03 ; ENTER 8,3 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2A,$08 ; CB 8 DB $66,$06 ; LLW 6 DB $54,C0361 ; CALL C0361 DB $5A ; LEAVE ; 1678: end ; 1679: def idconst_add_31(namestr, len, value) C0369: ; idconst_add_31() ; namestr = 2 ; len = 4 ; value = 6 ; 1680: return idglobal_add_41(namestr, len, CONST_TYPE, value) JSR INTERP DB $58,$08,$03 ; ENTER 8,3 DB $66,$02 ; LLW 2 DB $66,$04 ; LLW 4 DB $2A,$01 ; CB 1 DB $66,$06 ; LLW 6 DB $54,C0361 ; CALL C0361 DB $5A ; LEAVE ; 1681: end ; 1682: def idglobal_init C0371: ; idglobal_init() ; 1683: word ctag ; ctag = 2 ; 1684: ; 1685: lineno = 0 JSR INTERP DB $58,$04,$00 ; ENTER 4,0 DB $00 ; ZERO DB $7A,D0421 ; SAW D0421 ; 1686: codeptr = codebuff DB $2C,$00,$60 ; CW 24576 DB $7A,D0014 ; SAW D0014 ; 1687: lastop = $FF DB $2A,$FF ; CB 255 DB $78,D0018 ; SAB D0018 ; 1688: entrypoint = 0 DB $00 ; ZERO DB $7A,D0016 ; SAW D0016 ; 1689: datasize = 0 DB $00 ; ZERO DB $7A,D0003 ; SAW D0003 ; 1690: globals = 0 DB $00 ; ZERO DB $7A,D0001 ; SAW D0001 ; 1691: lastglobal = idglobal_tbl DB $2C,$00,$10 ; CW 4096 DB $7A,D0005 ; SAW D0005 ; 1692: codetag = -1 DB $2C,$FF,$FF ; CW -1 DB $7A,D0012 ; SAW D0012 ; 1693: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1694: drop idfunc_add_31(@runtime0 + 1, runtime0, ctag) DB $26,D0849 ; LA D0849 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0849 ; LAB D0849 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1695: drop idfunc_add_31(@RUNTIME0 + 1, RUNTIME0, ctag) DB $26,D0857 ; LA D0857 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0857 ; LAB D0857 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1696: drop ctag_resolve_21(ctag, @romcall) DB $66,$02 ; LLW 2 DB $26,C0006 ; LA C0006 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1697: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1698: drop idfunc_add_31(@runtime1 + 1, runtime1, ctag) DB $26,D0865 ; LA D0865 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0865 ; LAB D0865 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1699: drop idfunc_add_31(@RUNTIME1 + 1, RUNTIME1, ctag) DB $26,D0873 ; LA D0873 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0873 ; LAB D0873 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1700: drop ctag_resolve_21(ctag, @syscall) DB $66,$02 ; LLW 2 DB $26,C0010 ; LA C0010 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1701: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1702: drop idfunc_add_31(@runtime2 + 1, runtime2, ctag) DB $26,D0881 ; LA D0881 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0881 ; LAB D0881 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1703: drop idfunc_add_31(@RUNTIME2 + 1, RUNTIME2, ctag) DB $26,D0888 ; LA D0888 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0888 ; LAB D0888 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1704: drop ctag_resolve_21(ctag, @memset) DB $66,$02 ; LLW 2 DB $26,C0012 ; LA C0012 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1705: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1706: drop idfunc_add_31(@runtime3 + 1, runtime3, ctag) DB $26,D0895 ; LA D0895 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0895 ; LAB D0895 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1707: drop idfunc_add_31(@RUNTIME3 + 1, RUNTIME3, ctag) DB $26,D0902 ; LA D0902 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0902 ; LAB D0902 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1708: drop ctag_resolve_21(ctag, @memcpy) DB $66,$02 ; LLW 2 DB $26,C0014 ; LA C0014 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1709: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1710: drop idfunc_add_31(@runtime4 + 1, runtime4, ctag) DB $26,D0909 ; LA D0909 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0909 ; LAB D0909 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1711: drop idfunc_add_31(@RUNTIME4 + 1, RUNTIME4, ctag) DB $26,D0914 ; LA D0914 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0914 ; LAB D0914 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1712: drop ctag_resolve_21(ctag, @cout) DB $66,$02 ; LLW 2 DB $26,C0016 ; LA C0016 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1713: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1714: drop idfunc_add_31(@runtime5 + 1, runtime5, ctag) DB $26,D0919 ; LA D0919 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0919 ; LAB D0919 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1715: drop idfunc_add_31(@RUNTIME5 + 1, RUNTIME5, ctag) DB $26,D0923 ; LA D0923 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0923 ; LAB D0923 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1716: drop ctag_resolve_21(ctag, @cin) DB $66,$02 ; LLW 2 DB $26,C0018 ; LA C0018 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1717: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1718: drop idfunc_add_31(@runtime6 + 1, runtime6, ctag) DB $26,D0927 ; LA D0927 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0927 ; LAB D0927 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1719: drop idfunc_add_31(@RUNTIME6 + 1, RUNTIME6, ctag) DB $26,D0933 ; LA D0933 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0933 ; LAB D0933 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1720: drop ctag_resolve_21(ctag, @prstr) DB $66,$02 ; LLW 2 DB $26,C0020 ; LA C0020 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1721: ctag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$02 ; SLW 2 ; 1722: drop idfunc_add_31(@runtime7 + 1, runtime7, ctag) DB $26,D0939 ; LA D0939 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0939 ; LAB D0939 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1723: drop idfunc_add_31(@RUNTIME7 + 1, RUNTIME7, ctag) DB $26,D0945 ; LA D0945 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $68,D0945 ; LAB D0945 DB $66,$02 ; LLW 2 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 1724: drop ctag_resolve_21(ctag, @rdstr) DB $66,$02 ; LLW 2 DB $26,C0022 ; LA C0022 DB $54,C0070 ; CALL C0070 DB $30 ; DROP ; 1725: end DB $5A ; LEAVE ; 1726: def idlocal_init C0373: ; idlocal_init() ; 1727: locals = 0 JSR INTERP DB $00 ; ZERO DB $78,D0007 ; SAB D0007 ; 1728: framesize = 2 DB $2A,$02 ; CB 2 DB $7A,D0008 ; SAW D0008 ; 1729: lastlocal = idlocal_tbl DB $2C,$00,$18 ; CW 6144 DB $7A,D0010 ; SAW D0010 ; 1730: end DB $5C ; RET ; 1731: ; ; 1732: ; Parser ; 1733: ; ; 1734: def parse_term_01 C0375: ; parse_term_01() ; 1735: when scan_01() JSR INTERP DB $54,C0246 ; CALL C0246 ; 1736: is ID_TKN DB $2A,$D6 ; CB 214 DB $3E,C0378 ; SKPNE C0378 ; 1737: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1738: is INT_TKN DB $50,C0377 ; SKIP C0377 C0378: DB $2A,$C9 ; CB 201 DB $3E,C0379 ; SKPNE C0379 ; 1739: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1740: is CHR_TKN DB $50,C0377 ; SKIP C0377 C0379: DB $2A,$C3 ; CB 195 DB $3E,C0380 ; SKPNE C0380 ; 1741: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1742: is STR_TKN DB $50,C0377 ; SKIP C0377 C0380: DB $2A,$D3 ; CB 211 DB $3E,C0381 ; SKPNE C0381 ; 1743: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1744: is OPEN_PAREN_TKN DB $50,C0377 ; SKIP C0377 C0381: DB $2A,$A8 ; CB 168 DB $3E,C0382 ; SKPNE C0382 ; 1745: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0383 ; SKPFLS C0383 ; 1746: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5C ; RET ; 1747: fin C0383: C0384: ; 1748: if token <> CLOSE_PAREN_TKN DB $68,D0413 ; LAB D0413 DB $2A,$A9 ; CB 169 DB $42 ; ISNE DB $4C,C0385 ; SKPFLS C0385 ; 1749: return parse_err_11(@no_close_paren) DB $30 ; DROP DB $26,D0713 ; LA D0713 DB $54,C0062 ; CALL C0062 DB $5C ; RET ; 1750: fin C0385: C0386: ; 1751: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1752: wend DB $50,C0377 ; SKIP C0377 C0382: C0377: DB $30 ; DROP ; 1753: return FALSE DB $00 ; ZERO DB $5C ; RET ; 1754: end ; 1755: def parse_constval_21(valptr, sizeptr) C0388: ; parse_constval_21() ; valptr = 2 ; sizeptr = 4 ; 1756: byte mod, type ; mod = 6 ; type = 7 ; 1757: word idptr ; idptr = 8 ; 1758: ; 1759: mod = 0 JSR INTERP DB $58,$0A,$02 ; ENTER 10,2 DB $00 ; ZERO DB $74,$06 ; SLB 6 ; 1760: type = 0 DB $00 ; ZERO DB $74,$07 ; SLB 7 ; 1761: *valptr = 0 DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $72 ; SW ; 1762: while !parse_term_01() C0390: DB $54,C0375 ; CALL C0375 DB $20 ; NOT DB $4C,C0391 ; SKPFLS C0391 ; 1763: when token DB $68,D0413 ; LAB D0413 ; 1764: is SUB_TKN DB $2A,$AD ; CB 173 DB $3E,C0393 ; SKPNE C0393 ; 1765: mod = mod ? 1 DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1766: is COMP_TKN DB $50,C0392 ; SKIP C0392 C0393: DB $2A,$A3 ; CB 163 DB $3E,C0394 ; SKPNE C0394 ; 1767: mod = mod ? 2 DB $64,$06 ; LLB 6 DB $2A,$02 ; CB 2 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1768: is LOGIC_NOT_TKN DB $50,C0392 ; SKIP C0392 C0394: DB $2A,$A1 ; CB 161 DB $3E,C0395 ; SKPNE C0395 ; 1769: mod = mod ? 4 DB $64,$06 ; LLB 6 DB $2A,$04 ; CB 4 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1770: is AT_TKN DB $50,C0392 ; SKIP C0392 C0395: DB $2A,$C0 ; CB 192 DB $3E,C0396 ; SKPNE C0396 ; 1771: mod = mod ? 8 DB $64,$06 ; LLB 6 DB $2A,$08 ; CB 8 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1772: otherwise DB $50,C0392 ; SKIP C0392 C0396: ; 1773: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 1774: wend C0392: DB $30 ; DROP ; 1775: loop DB $50,C0390 ; SKIP C0390 C0391: ; 1776: when token DB $68,D0413 ; LAB D0413 ; 1777: is STR_TKN DB $2A,$D3 ; CB 211 DB $3E,C0399 ; SKPNE C0399 ; 1778: *valptr = constval DB $66,$02 ; LLW 2 DB $6A,D0419 ; LAW D0419 DB $72 ; SW ; 1779: ^sizeptr = tknlen - 1 DB $66,$04 ; LLW 4 DB $68,D0414 ; LAB D0414 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $70 ; SB ; 1780: type = STR_TYPE DB $2A,$80 ; CB 128 DB $74,$07 ; SLB 7 ; 1781: if mod DB $64,$06 ; LLB 6 DB $4C,C0400 ; SKPFLS C0400 ; 1782: return parse_err_11(@bad_op) DB $30 ; DROP DB $26,D0521 ; LA D0521 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1783: fin C0400: C0401: ; 1784: is CHR_TKN DB $50,C0398 ; SKIP C0398 C0399: DB $2A,$C3 ; CB 195 DB $3E,C0402 ; SKPNE C0402 ; 1785: *valptr = constval DB $66,$02 ; LLW 2 DB $6A,D0419 ; LAW D0419 DB $72 ; SW ; 1786: ^sizeptr = 1 DB $66,$04 ; LLW 4 DB $2A,$01 ; CB 1 DB $70 ; SB ; 1787: type = BYTE_TYPE DB $2A,$02 ; CB 2 DB $74,$07 ; SLB 7 ; 1788: is INT_TKN DB $50,C0398 ; SKIP C0398 C0402: DB $2A,$C9 ; CB 201 DB $3E,C0403 ; SKPNE C0403 ; 1789: *valptr = constval DB $66,$02 ; LLW 2 DB $6A,D0419 ; LAW D0419 DB $72 ; SW ; 1790: ^sizeptr = 2 DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $70 ; SB ; 1791: type = WORD_TYPE DB $2A,$04 ; CB 4 DB $74,$07 ; SLB 7 ; 1792: is ID_TKN DB $50,C0398 ; SKIP C0398 C0403: DB $2A,$D6 ; CB 214 DB $3E,C0404 ; SKPNE C0404 ; 1793: ^sizeptr = 2 DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $70 ; SB ; 1794: idptr = id_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0335 ; CALL C0335 DB $76,$08 ; SLW 8 ; 1795: if !idptr DB $66,$08 ; LLW 8 DB $20 ; NOT DB $4C,C0405 ; SKPFLS C0405 ; 1796: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1797: fin C0405: C0406: ; 1798: type = (idptr).idtype DB $66,$08 ; LLW 8 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $74,$07 ; SLB 7 ; 1799: *valptr = (idptr):idval DB $66,$02 ; LLW 2 DB $66,$08 ; LLW 8 DB $62 ; LW DB $72 ; SW ; 1800: if type & VAR_TYPE and !(mod & 8) DB $64,$07 ; LLB 7 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $64,$06 ; LLB 6 DB $2A,$08 ; CB 8 DB $14 ; BAND DB $20 ; NOT DB $24 ; LAND DB $4C,C0407 ; SKPFLS C0407 ; 1801: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1802: fin C0407: C0408: ; 1803: otherwise DB $50,C0398 ; SKIP C0398 C0404: ; 1804: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1805: wend C0398: DB $30 ; DROP ; 1806: if mod & 1 DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0410 ; SKPFLS C0410 ; 1807: *valptr = -*valptr DB $66,$02 ; LLW 2 DB $66,$02 ; LLW 2 DB $62 ; LW DB $10 ; NEG DB $72 ; SW ; 1808: fin C0410: C0411: ; 1809: if mod & 2 DB $64,$06 ; LLB 6 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0412 ; SKPFLS C0412 ; 1810: *valptr = #*valptr DB $66,$02 ; LLW 2 DB $66,$02 ; LLW 2 DB $62 ; LW DB $12 ; COMP DB $72 ; SW ; 1811: fin C0412: C0413: ; 1812: if mod & 4 DB $64,$06 ; LLB 6 DB $2A,$04 ; CB 4 DB $14 ; BAND DB $4C,C0414 ; SKPFLS C0414 ; 1813: *valptr = !*valptr DB $66,$02 ; LLW 2 DB $66,$02 ; LLW 2 DB $62 ; LW DB $20 ; NOT DB $72 ; SW ; 1814: fin C0414: C0415: ; 1815: return type DB $64,$07 ; LLB 7 DB $5A ; LEAVE ; 1816: end ; 1817: def ispostop_01 C0416: ; ispostop_01() ; 1818: when token JSR INTERP DB $68,D0413 ; LAB D0413 ; 1819: is OPEN_PAREN_TKN DB $2A,$A8 ; CB 168 DB $3E,C0419 ; SKPNE C0419 ; 1820: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1821: is OPEN_BRACKET_TKN DB $50,C0418 ; SKIP C0418 C0419: DB $2A,$DB ; CB 219 DB $3E,C0420 ; SKPNE C0420 ; 1822: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1823: is DOT_TKN DB $50,C0418 ; SKIP C0418 C0420: DB $2A,$AE ; CB 174 DB $3E,C0421 ; SKPNE C0421 ; 1824: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1825: is COLON_TKN DB $50,C0418 ; SKIP C0418 C0421: DB $2A,$BA ; CB 186 DB $3E,C0422 ; SKPNE C0422 ; 1826: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 1827: wend DB $50,C0418 ; SKIP C0418 C0422: C0418: DB $30 ; DROP ; 1828: return FALSE DB $00 ; ZERO DB $5C ; RET ; 1829: end ; 1830: def parse_value_11(rvalue) C0424: ; parse_value_11() ; rvalue = 2 ; 1831: byte cparams, deref, type, emit_val ; cparams = 4 ; deref = 5 ; type = 6 ; emit_val = 7 ; 1832: word optos, idptr, value ; optos = 8 ; idptr = 10 ; value = 12 ; 1833: byte elem_type, elem_size ; elem_type = 14 ; elem_size = 15 ; 1834: word elem_offset ; elem_offset = 16 ; 1835: ; 1836: deref = rvalue JSR INTERP DB $58,$12,$01 ; ENTER 18,1 DB $66,$02 ; LLW 2 DB $74,$05 ; SLB 5 ; 1837: optos = opsp DB $6A,D0411 ; LAW D0411 DB $76,$08 ; SLW 8 ; 1838: type = 0 DB $00 ; ZERO DB $74,$06 ; SLB 6 ; 1839: emit_val = 0 DB $00 ; ZERO DB $74,$07 ; SLB 7 ; 1840: value = 0 DB $00 ; ZERO DB $76,$0C ; SLW 12 ; 1841: ; 1842: ; ; 1843: ; Parse pre-ops ; 1844: ; ; 1845: while !parse_term_01() C0426: DB $54,C0375 ; CALL C0375 DB $20 ; NOT DB $4C,C0427 ; SKPFLS C0427 ; 1846: when token DB $68,D0413 ; LAB D0413 ; 1847: is ADD_TKN DB $2A,$AB ; CB 171 DB $3E,C0429 ; SKPNE C0429 ; 1848: is BPTR_TKN DB $50,C0428 ; SKIP C0428 C0429: DB $2A,$DE ; CB 222 DB $3E,C0430 ; SKPNE C0430 ; 1849: if deref DB $64,$05 ; LLB 5 DB $4C,C0431 ; SKPFLS C0431 ; 1850: drop push_op_21(token, 0) DB $68,D0413 ; LAB D0413 DB $00 ; ZERO DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 1851: else DB $50,C0432 ; SKIP C0432 C0431: ; 1852: type = type ? BPTR_TYPE DB $64,$06 ; LLB 6 DB $2A,$20 ; CB 32 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1853: deref = deref + 1 DB $64,$05 ; LLB 5 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $74,$05 ; SLB 5 ; 1854: fin C0432: ; 1855: is WPTR_TKN DB $50,C0428 ; SKIP C0428 C0430: DB $2A,$AA ; CB 170 DB $3E,C0433 ; SKPNE C0433 ; 1856: if deref DB $64,$05 ; LLB 5 DB $4C,C0434 ; SKPFLS C0434 ; 1857: drop push_op_21(token, 0) DB $68,D0413 ; LAB D0413 DB $00 ; ZERO DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 1858: else DB $50,C0435 ; SKIP C0435 C0434: ; 1859: type = type ? WPTR_TYPE DB $64,$06 ; LLB 6 DB $2A,$40 ; CB 64 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1860: deref = deref + 1 DB $64,$05 ; LLB 5 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $74,$05 ; SLB 5 ; 1861: fin C0435: ; 1862: is AT_TKN DB $50,C0428 ; SKIP C0428 C0433: DB $2A,$C0 ; CB 192 DB $3E,C0436 ; SKPNE C0436 ; 1863: deref = deref - 1 DB $64,$05 ; LLB 5 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $74,$05 ; SLB 5 ; 1864: is SUB_TKN DB $50,C0428 ; SKIP C0428 C0436: DB $2A,$AD ; CB 173 DB $3E,C0437 ; SKPNE C0437 ; 1865: drop push_op_21(token, 0) DB $68,D0413 ; LAB D0413 DB $00 ; ZERO DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 1866: is COMP_TKN DB $50,C0428 ; SKIP C0428 C0437: DB $2A,$A3 ; CB 163 DB $3E,C0438 ; SKPNE C0438 ; 1867: drop push_op_21(token, 0) DB $68,D0413 ; LAB D0413 DB $00 ; ZERO DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 1868: is LOGIC_NOT_TKN DB $50,C0428 ; SKIP C0428 C0438: DB $2A,$A1 ; CB 161 DB $3E,C0439 ; SKPNE C0439 ; 1869: drop push_op_21(token, 0) DB $68,D0413 ; LAB D0413 DB $00 ; ZERO DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 1870: otherwise DB $50,C0428 ; SKIP C0428 C0439: ; 1871: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 1872: wend C0428: DB $30 ; DROP ; 1873: loop DB $50,C0426 ; SKIP C0426 C0427: ; 1874: ; ; 1875: ; Determine terminal type ; 1876: ; ; 1877: when token DB $68,D0413 ; LAB D0413 ; 1878: is INT_TKN DB $2A,$C9 ; CB 201 DB $3E,C0442 ; SKPNE C0442 ; 1879: type = type ? CONST_TYPE DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1880: value = constval DB $6A,D0419 ; LAW D0419 DB $76,$0C ; SLW 12 ; 1881: is CHR_TKN DB $50,C0441 ; SKIP C0441 C0442: DB $2A,$C3 ; CB 195 DB $3E,C0443 ; SKPNE C0443 ; 1882: type = type ? CONST_TYPE DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1883: value = constval DB $6A,D0419 ; LAW D0419 DB $76,$0C ; SLW 12 ; 1884: is ID_TKN DB $50,C0441 ; SKIP C0441 C0443: DB $2A,$D6 ; CB 214 DB $3E,C0444 ; SKPNE C0444 ; 1885: idptr = id_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0335 ; CALL C0335 DB $76,$0A ; SLW 10 ; 1886: if !idptr DB $66,$0A ; LLW 10 DB $20 ; NOT DB $4C,C0445 ; SKPFLS C0445 ; 1887: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 1888: fin C0445: C0446: ; 1889: if !(idptr).idtype DB $66,$0A ; LLW 10 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $20 ; NOT DB $4C,C0447 ; SKPFLS C0447 ; 1890: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 1891: fin C0447: C0448: ; 1892: type = type ? (idptr).idtype DB $64,$06 ; LLB 6 DB $66,$0A ; LLW 10 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1893: value = (idptr):idval DB $66,$0A ; LLW 10 DB $62 ; LW DB $76,$0C ; SLW 12 ; 1894: is CLOSE_PAREN_TKN DB $50,C0441 ; SKIP C0441 C0444: DB $2A,$A9 ; CB 169 DB $3E,C0449 ; SKPNE C0449 ; 1895: type = type ? WORD_TYPE DB $64,$06 ; LLB 6 DB $2A,$04 ; CB 4 DB $16 ; IOR DB $74,$06 ; SLB 6 ; 1896: emit_val = 1 DB $2A,$01 ; CB 1 DB $74,$07 ; SLB 7 ; 1897: otherwise DB $50,C0441 ; SKIP C0441 C0449: ; 1898: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 1899: wend C0441: DB $30 ; DROP ; 1900: ; ; 1901: ; Constant optimizations ; 1902: ; ; 1903: if type & CONST_TYPE DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0451 ; SKPFLS C0451 ; 1904: cparams = TRUE DB $2C,$FF,$FF ; CW -1 DB $74,$04 ; SLB 4 ; 1905: while optos < opsp and cparams C0453: DB $66,$08 ; LLW 8 DB $6A,D0411 ; LAW D0411 DB $46 ; ISLT DB $64,$04 ; LLB 4 DB $24 ; LAND DB $4C,C0454 ; SKPFLS C0454 ; 1906: when tos_op_01() DB $54,C0315 ; CALL C0315 ; 1907: is NEG_TKN DB $2A,$AD ; CB 173 DB $3E,C0456 ; SKPNE C0456 ; 1908: drop pop_op_01() DB $54,C0311 ; CALL C0311 DB $30 ; DROP ; 1909: value = -value DB $66,$0C ; LLW 12 DB $10 ; NEG DB $76,$0C ; SLW 12 ; 1910: is COMP_TKN DB $50,C0455 ; SKIP C0455 C0456: DB $2A,$A3 ; CB 163 DB $3E,C0457 ; SKPNE C0457 ; 1911: drop pop_op_01() DB $54,C0311 ; CALL C0311 DB $30 ; DROP ; 1912: value = #value DB $66,$0C ; LLW 12 DB $12 ; COMP DB $76,$0C ; SLW 12 ; 1913: is LOGIC_NOT_TKN DB $50,C0455 ; SKIP C0455 C0457: DB $2A,$A1 ; CB 161 DB $3E,C0458 ; SKPNE C0458 ; 1914: drop pop_op_01() DB $54,C0311 ; CALL C0311 DB $30 ; DROP ; 1915: value = !value DB $66,$0C ; LLW 12 DB $20 ; NOT DB $76,$0C ; SLW 12 ; 1916: otherwise DB $50,C0455 ; SKIP C0455 C0458: ; 1917: cparams = FALSE DB $00 ; ZERO DB $74,$04 ; SLB 4 ; 1918: wend C0455: DB $30 ; DROP ; 1919: loop DB $50,C0453 ; SKIP C0453 C0454: ; 1920: fin C0451: C0452: ; 1921: ; ; 1922: ; Parse post-ops ; 1923: ; ; 1924: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 1925: while ispostop_01() C0460: DB $54,C0416 ; CALL C0416 DB $4C,C0461 ; SKPFLS C0461 ; 1926: if token == OPEN_BRACKET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$DB ; CB 219 DB $40 ; ISEQ DB $4C,C0462 ; SKPFLS C0462 ; 1927: ; ; 1928: ; Array ; 1929: ; ; 1930: if !emit_val DB $64,$07 ; LLB 7 DB $20 ; NOT DB $4C,C0464 ; SKPFLS C0464 ; 1931: if type & ADDR_TYPE DB $64,$06 ; LLB 6 DB $2A,$0E ; CB 14 DB $14 ; BAND DB $4C,C0466 ; SKPFLS C0466 ; 1932: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0468 ; SKPFLS C0468 ; 1933: emit_localaddr_10(value) DB $66,$0C ; LLW 12 DB $54,C0150 ; CALL C0150 ; 1934: else DB $50,C0469 ; SKIP C0469 C0468: ; 1935: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 1936: fin C0469: ; 1937: elsif type & CONST_TYPE DB $50,C0467 ; SKIP C0467 C0466: DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0470 ; SKPFLS C0470 ; 1938: emit_const_10(value) DB $66,$0C ; LLW 12 DB $54,C0103 ; CALL C0103 ; 1939: fin C0470: C0467: ; 1940: emit_val = 1 DB $2A,$01 ; CB 1 DB $74,$07 ; SLB 7 ; 1941: fin ; !emit_val C0464: C0465: ; 1942: if type & PTR_TYPE DB $64,$06 ; LLB 6 DB $2A,$60 ; CB 96 DB $14 ; BAND DB $4C,C0471 ; SKPFLS C0471 ; 1943: emit_lw() DB $54,C0110 ; CALL C0110 ; 1944: fin C0471: C0472: ; 1945: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0473 ; SKPFLS C0473 ; 1946: return 0 DB $00 ; ZERO DB $5A ; LEAVE ; 1947: fin C0473: C0474: ; 1948: if token <> CLOSE_BRACKET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$DD ; CB 221 DB $42 ; ISNE DB $4C,C0475 ; SKPFLS C0475 ; 1949: return parse_err_11(@no_close_bracket) DB $26,D0735 ; LA D0735 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 1950: fin C0475: C0476: ; 1951: if type & WORD_TYPE DB $64,$06 ; LLB 6 DB $2A,$04 ; CB 4 DB $14 ; BAND DB $4C,C0477 ; SKPFLS C0477 ; 1952: type = WPTR_TYPE DB $2A,$40 ; CB 64 DB $74,$06 ; SLB 6 ; 1953: emit_indexword() DB $54,C0156 ; CALL C0156 ; 1954: else DB $50,C0478 ; SKIP C0478 C0477: ; 1955: type = BPTR_TYPE DB $2A,$20 ; CB 32 DB $74,$06 ; SLB 6 ; 1956: emit_indexbyte() DB $54,C0154 ; CALL C0154 ; 1957: fin C0478: ; 1958: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 1959: elsif token == DOT_TKN or token == COLON_TKN DB $50,C0463 ; SKIP C0463 C0462: DB $68,D0413 ; LAB D0413 DB $2A,$AE ; CB 174 DB $40 ; ISEQ DB $68,D0413 ; LAB D0413 DB $2A,$BA ; CB 186 DB $40 ; ISEQ DB $22 ; LOR DB $4C,C0479 ; SKPFLS C0479 ; 1960: ; ; 1961: ; Dot and Colon ; 1962: ; ; 1963: if token == DOT_TKN DB $68,D0413 ; LAB D0413 DB $2A,$AE ; CB 174 DB $40 ; ISEQ DB $4C,C0480 ; SKPFLS C0480 ; 1964: elem_type = BPTR_TYPE DB $2A,$20 ; CB 32 DB $74,$0E ; SLB 14 ; 1965: else DB $50,C0481 ; SKIP C0481 C0480: ; 1966: elem_type = WPTR_TYPE DB $2A,$40 ; CB 64 DB $74,$0E ; SLB 14 ; 1967: fin C0481: ; 1968: if parse_constval_21(@elem_offset, @elem_size) DB $28,$10 ; LLA 16 DB $28,$0F ; LLA 15 DB $54,C0388 ; CALL C0388 DB $4C,C0482 ; SKPFLS C0482 ; 1969: ; ; 1970: ; Constant structure offset ; 1971: ; ; 1972: if !emit_val DB $64,$07 ; LLB 7 DB $20 ; NOT DB $4C,C0484 ; SKPFLS C0484 ; 1973: if type & VAR_TYPE DB $64,$06 ; LLB 6 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $4C,C0486 ; SKPFLS C0486 ; 1974: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0488 ; SKPFLS C0488 ; 1975: emit_localaddr_10(value + elem_offset) DB $66,$0C ; LLW 12 DB $66,$10 ; LLW 16 DB $02 ; ADD DB $54,C0150 ; CALL C0150 ; 1976: else DB $50,C0489 ; SKIP C0489 C0488: ; 1977: ; emit_globaladdr_10(value + elem_offset) ; 1978: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 1979: emit_const_10(elem_offset) DB $66,$10 ; LLW 16 DB $54,C0103 ; CALL C0103 ; 1980: drop emit_binaryop_11(ADD_TKN) DB $2A,$AB ; CB 171 DB $54,C0169 ; CALL C0169 DB $30 ; DROP ; 1981: fin C0489: ; 1982: elsif type & CONST_TYPE DB $50,C0487 ; SKIP C0487 C0486: DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0490 ; SKPFLS C0490 ; 1983: value = value + elem_offset DB $66,$0C ; LLW 12 DB $66,$10 ; LLW 16 DB $02 ; ADD DB $76,$0C ; SLW 12 ; 1984: emit_const_10(value) DB $66,$0C ; LLW 12 DB $54,C0103 ; CALL C0103 ; 1985: else ; FUNC_TYPE DB $50,C0487 ; SKIP C0487 C0490: ; 1986: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 1987: emit_const_10(elem_offset) DB $66,$10 ; LLW 16 DB $54,C0103 ; CALL C0103 ; 1988: drop emit_binaryop_11(ADD_TKN) DB $2A,$AB ; CB 171 DB $54,C0169 ; CALL C0169 DB $30 ; DROP ; 1989: fin C0487: ; 1990: emit_val = 1 DB $2A,$01 ; CB 1 DB $74,$07 ; SLB 7 ; 1991: else DB $50,C0485 ; SKIP C0485 C0484: ; 1992: if elem_offset <> 0 DB $66,$10 ; LLW 16 DB $00 ; ZERO DB $42 ; ISNE DB $4C,C0491 ; SKPFLS C0491 ; 1993: emit_const_10(elem_offset) DB $66,$10 ; LLW 16 DB $54,C0103 ; CALL C0103 ; 1994: drop emit_binaryop_11(ADD_TKN) DB $2A,$AB ; CB 171 DB $54,C0169 ; CALL C0169 DB $30 ; DROP ; 1995: fin C0491: C0492: ; 1996: fin ; !emit_val C0485: ; 1997: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 1998: elsif token == OPEN_BRACKET_TKN DB $50,C0483 ; SKIP C0483 C0482: DB $68,D0413 ; LAB D0413 DB $2A,$DB ; CB 219 DB $40 ; ISEQ DB $4C,C0493 ; SKPFLS C0493 ; 1999: ; ; 2000: ; Array of arrays ; 2001: ; ; 2002: if !emit_val DB $64,$07 ; LLB 7 DB $20 ; NOT DB $4C,C0494 ; SKPFLS C0494 ; 2003: if type & ADDR_TYPE DB $64,$06 ; LLB 6 DB $2A,$0E ; CB 14 DB $14 ; BAND DB $4C,C0496 ; SKPFLS C0496 ; 2004: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0498 ; SKPFLS C0498 ; 2005: emit_localaddr_10(value) DB $66,$0C ; LLW 12 DB $54,C0150 ; CALL C0150 ; 2006: else DB $50,C0499 ; SKIP C0499 C0498: ; 2007: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 2008: fin C0499: ; 2009: elsif type & CONST_TYPE DB $50,C0497 ; SKIP C0497 C0496: DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0500 ; SKPFLS C0500 ; 2010: emit_const_10(value) DB $66,$0C ; LLW 12 DB $54,C0103 ; CALL C0103 ; 2011: fin C0500: C0497: ; 2012: emit_val = 1 DB $2A,$01 ; CB 1 DB $74,$07 ; SLB 7 ; 2013: fin ; !emit_val C0494: C0495: ; 2014: repeat C0502: ; 2015: if emit_val > 1 DB $64,$07 ; LLB 7 DB $2A,$01 ; CB 1 DB $44 ; ISGT DB $4C,C0503 ; SKPFLS C0503 ; 2016: emit_indexword() DB $54,C0156 ; CALL C0156 ; 2017: emit_lw() DB $54,C0110 ; CALL C0110 ; 2018: fin C0503: C0504: ; 2019: emit_val = emit_val + 1 DB $64,$07 ; LLB 7 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $74,$07 ; SLB 7 ; 2020: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0505 ; SKPFLS C0505 ; 2021: return parse_err_11(@bad_expr) DB $26,D0548 ; LA D0548 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2022: fin C0505: C0506: ; 2023: if token <> CLOSE_BRACKET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$DD ; CB 221 DB $42 ; ISNE DB $4C,C0507 ; SKPFLS C0507 ; 2024: return parse_err_11(@no_close_bracket) DB $26,D0735 ; LA D0735 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2025: fin C0507: C0508: ; 2026: until scan_01() <> OPEN_BRACKET_TKN DB $54,C0246 ; CALL C0246 DB $2A,$DB ; CB 219 DB $42 ; ISNE DB $4C,C0502 ; SKPFLS C0502 C0501: ; 2027: if elem_type & WPTR_TYPE DB $64,$0E ; LLB 14 DB $2A,$40 ; CB 64 DB $14 ; BAND DB $4C,C0509 ; SKPFLS C0509 ; 2028: emit_indexword() DB $54,C0156 ; CALL C0156 ; 2029: else DB $50,C0510 ; SKIP C0510 C0509: ; 2030: emit_indexbyte() DB $54,C0154 ; CALL C0154 ; 2031: fin C0510: ; 2032: else DB $50,C0483 ; SKIP C0483 C0493: ; 2033: return parse_err_11(@bad_offset) DB $26,D0487 ; LA D0487 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2034: fin C0483: ; 2035: type = elem_type DB $64,$0E ; LLB 14 DB $74,$06 ; SLB 6 ; 2036: elsif token == OPEN_PAREN_TKN DB $50,C0463 ; SKIP C0463 C0479: DB $68,D0413 ; LAB D0413 DB $2A,$A8 ; CB 168 DB $40 ; ISEQ DB $4C,C0511 ; SKPFLS C0511 ; 2037: ; ; 2038: ; Function call ; 2039: ; ; 2040: if !emit_val and type & VAR_TYPE DB $64,$07 ; LLB 7 DB $20 ; NOT DB $64,$06 ; LLB 6 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $24 ; LAND DB $4C,C0512 ; SKPFLS C0512 ; 2041: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0514 ; SKPFLS C0514 ; 2042: emit_localaddr_10(value) DB $66,$0C ; LLW 12 DB $54,C0150 ; CALL C0150 ; 2043: else DB $50,C0515 ; SKIP C0515 C0514: ; 2044: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 2045: fin C0515: ; 2046: fin C0512: C0513: ; 2047: if !(type & FUNC_CONST_TYPE) DB $64,$06 ; LLB 6 DB $2A,$09 ; CB 9 DB $14 ; BAND DB $20 ; NOT DB $4C,C0516 ; SKPFLS C0516 ; 2048: emit_push() DB $54,C0144 ; CALL C0144 ; 2049: fin C0516: C0517: ; 2050: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2051: if token <> CLOSE_PAREN_TKN DB $68,D0413 ; LAB D0413 DB $2A,$A9 ; CB 169 DB $42 ; ISNE DB $4C,C0518 ; SKPFLS C0518 ; 2052: return parse_err_11(@no_close_paren) DB $26,D0713 ; LA D0713 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2053: fin C0518: C0519: ; 2054: if type & FUNC_CONST_TYPE DB $64,$06 ; LLB 6 DB $2A,$09 ; CB 9 DB $14 ; BAND DB $4C,C0520 ; SKPFLS C0520 ; 2055: emit_call_10(value) DB $66,$0C ; LLW 12 DB $54,C0140 ; CALL C0140 ; 2056: else DB $50,C0521 ; SKIP C0521 C0520: ; 2057: emit_pull() DB $54,C0146 ; CALL C0146 ; 2058: emit_ical() DB $54,C0142 ; CALL C0142 ; 2059: fin C0521: ; 2060: emit_val = 1 DB $2A,$01 ; CB 1 DB $74,$07 ; SLB 7 ; 2061: type = WORD_TYPE DB $2A,$04 ; CB 4 DB $74,$06 ; SLB 6 ; 2062: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2063: fin C0511: C0463: ; 2064: loop DB $50,C0460 ; SKIP C0460 C0461: ; 2065: if emit_val DB $64,$07 ; LLB 7 DB $4C,C0522 ; SKPFLS C0522 ; 2066: if rvalue DB $66,$02 ; LLW 2 DB $4C,C0524 ; SKPFLS C0524 ; 2067: if deref and type & PTR_TYPE DB $64,$05 ; LLB 5 DB $64,$06 ; LLB 6 DB $2A,$60 ; CB 96 DB $14 ; BAND DB $24 ; LAND DB $4C,C0526 ; SKPFLS C0526 ; 2068: if type & BPTR_TYPE DB $64,$06 ; LLB 6 DB $2A,$20 ; CB 32 DB $14 ; BAND DB $4C,C0528 ; SKPFLS C0528 ; 2069: emit_lb() DB $54,C0108 ; CALL C0108 ; 2070: else DB $50,C0529 ; SKIP C0529 C0528: ; 2071: emit_lw() DB $54,C0110 ; CALL C0110 ; 2072: fin C0529: ; 2073: fin C0526: C0527: ; 2074: fin C0524: C0525: ; 2075: else ; emit_val DB $50,C0523 ; SKIP C0523 C0522: ; 2076: if type & CONST_TYPE DB $64,$06 ; LLB 6 DB $2A,$01 ; CB 1 DB $14 ; BAND DB $4C,C0530 ; SKPFLS C0530 ; 2077: emit_const_10(value) DB $66,$0C ; LLW 12 DB $54,C0103 ; CALL C0103 ; 2078: elsif deref DB $50,C0531 ; SKIP C0531 C0530: DB $64,$05 ; LLB 5 DB $4C,C0532 ; SKPFLS C0532 ; 2079: if type & FUNC_TYPE DB $64,$06 ; LLB 6 DB $2A,$08 ; CB 8 DB $14 ; BAND DB $4C,C0533 ; SKPFLS C0533 ; 2080: emit_call_10(value) DB $66,$0C ; LLW 12 DB $54,C0140 ; CALL C0140 ; 2081: elsif type & VAR_TYPE DB $50,C0534 ; SKIP C0534 C0533: DB $64,$06 ; LLB 6 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $4C,C0535 ; SKPFLS C0535 ; 2082: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0536 ; SKPFLS C0536 ; 2083: if type & BYTE_TYPE DB $64,$06 ; LLB 6 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0538 ; SKPFLS C0538 ; 2084: emit_llb_10(value) DB $66,$0C ; LLW 12 DB $54,C0112 ; CALL C0112 ; 2085: else DB $50,C0539 ; SKIP C0539 C0538: ; 2086: emit_llw_10(value) DB $66,$0C ; LLW 12 DB $54,C0114 ; CALL C0114 ; 2087: fin C0539: ; 2088: else DB $50,C0537 ; SKIP C0537 C0536: ; 2089: if type & BYTE_TYPE DB $64,$06 ; LLB 6 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0540 ; SKPFLS C0540 ; 2090: emit_lab_10(value) DB $66,$0C ; LLW 12 DB $54,C0116 ; CALL C0116 ; 2091: else DB $50,C0541 ; SKIP C0541 C0540: ; 2092: emit_law_10(value) DB $66,$0C ; LLW 12 DB $54,C0118 ; CALL C0118 ; 2093: fin C0541: ; 2094: fin C0537: ; 2095: elsif type & PTR_TYPE DB $50,C0534 ; SKIP C0534 C0535: DB $64,$06 ; LLB 6 DB $2A,$60 ; CB 96 DB $14 ; BAND DB $4C,C0542 ; SKPFLS C0542 ; 2096: if type & BPTR_TYPE DB $64,$06 ; LLB 6 DB $2A,$20 ; CB 32 DB $14 ; BAND DB $4C,C0543 ; SKPFLS C0543 ; 2097: emit_lb() DB $54,C0108 ; CALL C0108 ; 2098: else DB $50,C0544 ; SKIP C0544 C0543: ; 2099: emit_lw() DB $54,C0110 ; CALL C0110 ; 2100: fin C0544: ; 2101: fin C0542: C0534: ; 2102: else DB $50,C0531 ; SKIP C0531 C0532: ; 2103: if type & LOCAL_TYPE DB $64,$06 ; LLB 6 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0545 ; SKPFLS C0545 ; 2104: emit_localaddr_10(value) DB $66,$0C ; LLW 12 DB $54,C0150 ; CALL C0150 ; 2105: else DB $50,C0546 ; SKIP C0546 C0545: ; 2106: emit_globaladdr_10(value) DB $66,$0C ; LLW 12 DB $54,C0152 ; CALL C0152 ; 2107: fin C0546: ; 2108: fin C0531: ; 2109: fin ; emit_val C0523: ; 2110: while optos < opsp C0547: DB $66,$08 ; LLW 8 DB $6A,D0411 ; LAW D0411 DB $46 ; ISLT DB $4C,C0548 ; SKPFLS C0548 ; 2111: if !emit_unaryop_11(pop_op_01()) DB $54,C0311 ; CALL C0311 DB $54,C0158 ; CALL C0158 DB $20 ; NOT DB $4C,C0549 ; SKPFLS C0549 ; 2112: return parse_err_11(@bad_op) DB $26,D0521 ; LA D0521 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2113: fin C0549: C0550: ; 2114: loop DB $50,C0547 ; SKIP C0547 C0548: ; 2115: return type DB $64,$06 ; LLB 6 DB $5A ; LEAVE ; 2116: end ; 2117: def parse_constexpr_21(valptr, sizeptr) C0551: ; parse_constexpr_21() ; valptr = 2 ; sizeptr = 4 ; 2118: byte type, size1, size2 ; type = 6 ; size1 = 7 ; size2 = 8 ; 2119: word val1, val2 ; val1 = 9 ; val2 = 11 ; 2120: ; 2121: type = parse_constval_21(@val1, @size1) JSR INTERP DB $58,$0D,$02 ; ENTER 13,2 DB $28,$09 ; LLA 9 DB $28,$07 ; LLA 7 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2122: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0553 ; SKPFLS C0553 ; 2123: return 0 DB $00 ; ZERO DB $5A ; LEAVE ; 2124: fin C0553: C0554: ; 2125: size2 = 0 DB $00 ; ZERO DB $74,$08 ; SLB 8 ; 2126: when scan_01() DB $54,C0246 ; CALL C0246 ; 2127: is ADD_TKN DB $2A,$AB ; CB 171 DB $3E,C0556 ; SKPNE C0556 ; 2128: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2129: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0557 ; SKPFLS C0557 ; 2130: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2131: fin C0557: C0558: ; 2132: *valptr = val1 + val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $02 ; ADD DB $72 ; SW ; 2133: is SUB_TKN DB $50,C0555 ; SKIP C0555 C0556: DB $2A,$AD ; CB 173 DB $3E,C0559 ; SKPNE C0559 ; 2134: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2135: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0560 ; SKPFLS C0560 ; 2136: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2137: fin C0560: C0561: ; 2138: *valptr = val1 - val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $04 ; SUB DB $72 ; SW ; 2139: is MUL_TKN DB $50,C0555 ; SKIP C0555 C0559: DB $2A,$AA ; CB 170 DB $3E,C0562 ; SKPNE C0562 ; 2140: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2141: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0563 ; SKPFLS C0563 ; 2142: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2143: fin C0563: C0564: ; 2144: *valptr = val1 * val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $06 ; MUL DB $72 ; SW ; 2145: is DIV_TKN DB $50,C0555 ; SKIP C0555 C0562: DB $2A,$AF ; CB 175 DB $3E,C0565 ; SKPNE C0565 ; 2146: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2147: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0566 ; SKPFLS C0566 ; 2148: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2149: fin C0566: C0567: ; 2150: *valptr = val1 + val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $02 ; ADD DB $72 ; SW ; 2151: is MOD_TKN DB $50,C0555 ; SKIP C0555 C0565: DB $2A,$A5 ; CB 165 DB $3E,C0568 ; SKPNE C0568 ; 2152: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2153: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0569 ; SKPFLS C0569 ; 2154: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2155: fin C0569: C0570: ; 2156: *valptr = val1 % val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $0A ; DIV,MOD DB $72 ; SW ; 2157: drop DB $30 ; DROP ; 2158: is AND_TKN DB $50,C0555 ; SKIP C0555 C0568: DB $2A,$A6 ; CB 166 DB $3E,C0571 ; SKPNE C0571 ; 2159: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2160: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0572 ; SKPFLS C0572 ; 2161: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2162: fin C0572: C0573: ; 2163: *valptr = val1 & val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $14 ; BAND DB $72 ; SW ; 2164: is OR_TKN DB $50,C0555 ; SKIP C0555 C0571: DB $2A,$BF ; CB 191 DB $3E,C0574 ; SKPNE C0574 ; 2165: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2166: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0575 ; SKPFLS C0575 ; 2167: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2168: fin C0575: C0576: ; 2169: *valptr = val1 ? val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $16 ; IOR DB $72 ; SW ; 2170: is EOR_TKN DB $50,C0555 ; SKIP C0555 C0574: DB $2A,$DE ; CB 222 DB $3E,C0577 ; SKPNE C0577 ; 2171: type = parse_constval_21(@val2, @size2) DB $28,$0B ; LLA 11 DB $28,$08 ; LLA 8 DB $54,C0388 ; CALL C0388 DB $74,$06 ; SLB 6 ; 2172: if !type DB $64,$06 ; LLB 6 DB $20 ; NOT DB $4C,C0578 ; SKPFLS C0578 ; 2173: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2174: fin C0578: C0579: ; 2175: *valptr = val1 ^ val2 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $66,$0B ; LLW 11 DB $18 ; XOR DB $72 ; SW ; 2176: otherwise DB $50,C0555 ; SKIP C0555 C0577: ; 2177: *valptr = val1 DB $66,$02 ; LLW 2 DB $66,$09 ; LLW 9 DB $72 ; SW ; 2178: wend C0555: DB $30 ; DROP ; 2179: if size1 > size2 DB $64,$07 ; LLB 7 DB $64,$08 ; LLB 8 DB $44 ; ISGT DB $4C,C0581 ; SKPFLS C0581 ; 2180: ^sizeptr = size1 DB $66,$04 ; LLW 4 DB $64,$07 ; LLB 7 DB $70 ; SB ; 2181: else DB $50,C0582 ; SKIP C0582 C0581: ; 2182: ^sizeptr = size2 DB $66,$04 ; LLW 4 DB $64,$08 ; LLB 8 DB $70 ; SB ; 2183: fin C0582: ; 2184: return type DB $64,$06 ; LLB 6 DB $5A ; LEAVE ; 2185: end ; 2186: def parse_expr_01 C0000: ; parse_expr_01() ; 2187: byte prevmatch, matchop, i ; prevmatch = 2 ; matchop = 3 ; i = 4 ; 2188: word optos ; optos = 5 ; 2189: ; 2190: matchop = 0 JSR INTERP DB $58,$07,$00 ; ENTER 7,0 DB $00 ; ZERO DB $74,$03 ; SLB 3 ; 2191: optos = opsp DB $6A,D0411 ; LAW D0411 DB $76,$05 ; SLW 5 ; 2192: repeat C0585: ; 2193: prevmatch = matchop DB $64,$03 ; LLB 3 DB $74,$02 ; SLB 2 ; 2194: matchop = 0 DB $00 ; ZERO DB $74,$03 ; SLB 3 ; 2195: if parse_value_11(1) DB $2A,$01 ; CB 1 DB $54,C0424 ; CALL C0424 DB $4C,C0586 ; SKPFLS C0586 ; 2196: matchop = 1 DB $2A,$01 ; CB 1 DB $74,$03 ; SLB 3 ; 2197: for i = 0 to bops_tblsz DB $00 ; ZERO C0589: DB $6C,$04 ; DLB 4 DB $2A,$12 ; CB 18 DB $3A,C0588 ; SKPGT C0588 DB $0C ; INCR ; 2198: if token == bops_tbl[i] DB $68,D0413 ; LAB D0413 DB $26,D0341 ; LA D0341 DB $64,$04 ; LLB 4 DB $02 ; IDXB DB $60 ; LB DB $40 ; ISEQ DB $4C,C0590 ; SKPFLS C0590 ; 2199: matchop = 2 DB $2A,$02 ; CB 2 DB $74,$03 ; SLB 3 ; 2200: if bops_prec[i] >= tos_op_prec_11(optos) DB $26,D0360 ; LA D0360 DB $64,$04 ; LLB 4 DB $02 ; IDXB DB $60 ; LB DB $66,$05 ; LLW 5 DB $54,C0319 ; CALL C0319 DB $48 ; ISGE DB $4C,C0592 ; SKPFLS C0592 ; 2201: if !emit_binaryop_11(pop_op_01()) DB $54,C0311 ; CALL C0311 DB $54,C0169 ; CALL C0169 DB $20 ; NOT DB $4C,C0594 ; SKPFLS C0594 ; 2202: return parse_err_11(@bad_op) DB $30 ; DROP DB $26,D0521 ; LA D0521 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2203: fin C0594: C0595: ; 2204: fin C0592: C0593: ; 2205: drop push_op_21(token, bops_prec[i]) DB $68,D0413 ; LAB D0413 DB $26,D0360 ; LA D0360 DB $64,$04 ; LLB 4 DB $02 ; IDXB DB $60 ; LB DB $54,C0307 ; CALL C0307 DB $30 ; DROP ; 2206: break DB $50,C0588 ; SKIP C0588 ; 2207: fin C0590: C0591: ; 2208: next DB $50,C0589 ; SKIP C0589 C0588: DB $30 ; DROP ; 2209: fin C0586: C0587: ; 2210: until matchop <> 2 DB $64,$03 ; LLB 3 DB $2A,$02 ; CB 2 DB $42 ; ISNE DB $4C,C0585 ; SKPFLS C0585 C0584: ; 2211: if matchop == 0 and prevmatch == 2 DB $64,$03 ; LLB 3 DB $00 ; ZERO DB $40 ; ISEQ DB $64,$02 ; LLB 2 DB $2A,$02 ; CB 2 DB $40 ; ISEQ DB $24 ; LAND DB $4C,C0596 ; SKPFLS C0596 ; 2212: return parse_err_11(@missing_op) DB $26,D0759 ; LA D0759 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2213: fin C0596: C0597: ; 2214: while optos < opsp C0598: DB $66,$05 ; LLW 5 DB $6A,D0411 ; LAW D0411 DB $46 ; ISLT DB $4C,C0599 ; SKPFLS C0599 ; 2215: if !emit_binaryop_11(pop_op_01()) DB $54,C0311 ; CALL C0311 DB $54,C0169 ; CALL C0169 DB $20 ; NOT DB $4C,C0600 ; SKPFLS C0600 ; 2216: return parse_err_11(@bad_op) DB $26,D0521 ; LA D0521 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2217: fin C0600: C0601: ; 2218: loop DB $50,C0598 ; SKIP C0598 C0599: ; 2219: return matchop or prevmatch DB $64,$03 ; LLB 3 DB $64,$02 ; LLB 2 DB $22 ; LOR DB $5A ; LEAVE ; 2220: end ; 2221: def parse_setlist_21(addr, type) C0602: ; parse_setlist_21() ; addr = 2 ; type = 4 ; 2222: word nexttype, nextaddr, idptr, saveptr ; nexttype = 6 ; nextaddr = 8 ; idptr = 10 ; saveptr = 12 ; 2223: ; 2224: if !(type & VAR_TYPE) JSR INTERP DB $58,$0E,$02 ; ENTER 14,2 DB $66,$04 ; LLW 4 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $20 ; NOT DB $4C,C0604 ; SKPFLS C0604 ; 2225: emit_push() DB $54,C0144 ; CALL C0144 ; 2226: fin C0604: C0605: ; 2227: nexttype = 0 DB $00 ; ZERO DB $76,$06 ; SLW 6 ; 2228: nextaddr = 0 DB $00 ; ZERO DB $76,$08 ; SLW 8 ; 2229: if scan_01() == ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $40 ; ISEQ DB $4C,C0606 ; SKPFLS C0606 ; 2230: idptr = id_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0335 ; CALL C0335 DB $76,$0A ; SLW 10 ; 2231: if !idptr DB $66,$0A ; LLW 10 DB $20 ; NOT DB $4C,C0608 ; SKPFLS C0608 ; 2232: return FALSE DB $00 ; ZERO DB $5A ; LEAVE ; 2233: fin C0608: C0609: ; 2234: nexttype = (idptr).idtype DB $66,$0A ; LLW 10 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $76,$06 ; SLW 6 ; 2235: if type & VAR_TYPE DB $66,$04 ; LLW 4 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $4C,C0610 ; SKPFLS C0610 ; 2236: nextaddr = (idptr):idval DB $66,$0A ; LLW 10 DB $62 ; LW DB $76,$08 ; SLW 8 ; 2237: fin C0610: C0611: ; 2238: fin C0606: C0607: ; 2239: saveptr = tknptr DB $6A,D0417 ; LAW D0417 DB $76,$0C ; SLW 12 ; 2240: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2241: if nexttype & VAR_TYPE and token == SET_TKN DB $66,$06 ; LLW 6 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $68,D0413 ; LAB D0413 DB $2A,$BD ; CB 189 DB $40 ; ISEQ DB $24 ; LAND DB $4C,C0612 ; SKPFLS C0612 ; 2242: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2243: if type & LOCAL_TYPE DB $66,$04 ; LLW 4 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0614 ; SKPFLS C0614 ; 2244: if type & BYTE_TYPE DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0616 ; SKPFLS C0616 ; 2245: emit_slb_10(nextaddr) DB $66,$08 ; LLW 8 DB $54,C0124 ; CALL C0124 ; 2246: else DB $50,C0617 ; SKIP C0617 C0616: ; 2247: emit_slw_10(nextaddr) DB $66,$08 ; LLW 8 DB $54,C0126 ; CALL C0126 ; 2248: fin C0617: ; 2249: else DB $50,C0615 ; SKIP C0615 C0614: ; 2250: if type & BYTE_TYPE DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0618 ; SKPFLS C0618 ; 2251: emit_sab_10(nextaddr) DB $66,$08 ; LLW 8 DB $54,C0132 ; CALL C0132 ; 2252: else DB $50,C0619 ; SKIP C0619 C0618: ; 2253: emit_saw_10(nextaddr) DB $66,$08 ; LLW 8 DB $54,C0134 ; CALL C0134 ; 2254: fin C0619: ; 2255: fin C0615: ; 2256: elsif nexttype & VAR_TYPE and token == SETLIST_TKN DB $50,C0613 ; SKIP C0613 C0612: DB $66,$06 ; LLW 6 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $68,D0413 ; LAB D0413 DB $2A,$B9 ; CB 185 DB $40 ; ISEQ DB $24 ; LAND DB $4C,C0620 ; SKPFLS C0620 ; 2257: if !parse_setlist_21(nextaddr, nexttype) DB $66,$08 ; LLW 8 DB $66,$06 ; LLW 6 DB $54,C0602 ; CALL C0602 DB $20 ; NOT DB $4C,C0621 ; SKPFLS C0621 ; 2258: return FALSE DB $00 ; ZERO DB $5A ; LEAVE ; 2259: fin C0621: C0622: ; 2260: else DB $50,C0613 ; SKIP C0613 C0620: ; 2261: tknptr = saveptr DB $66,$0C ; LLW 12 DB $7A,D0417 ; SAW D0417 ; 2262: rewind_10(tknptr) DB $6A,D0417 ; LAW D0417 DB $54,C0299 ; CALL C0299 ; 2263: nexttype = parse_value_11(0) DB $00 ; ZERO DB $54,C0424 ; CALL C0424 DB $76,$06 ; SLW 6 ; 2264: if nexttype <> 0 DB $66,$06 ; LLW 6 DB $00 ; ZERO DB $42 ; ISNE DB $4C,C0623 ; SKPFLS C0623 ; 2265: if token == SET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$BD ; CB 189 DB $40 ; ISEQ DB $4C,C0625 ; SKPFLS C0625 ; 2266: emit_push() DB $54,C0144 ; CALL C0144 ; 2267: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2268: emit_pull() DB $54,C0146 ; CALL C0146 ; 2269: emit_swap() DB $54,C0214 ; CALL C0214 ; 2270: if nexttype & (BYTE_TYPE ? BPTR_TYPE) DB $66,$06 ; LLW 6 DB $2A,$02 ; CB 2 DB $2A,$20 ; CB 32 DB $16 ; IOR DB $14 ; BAND DB $4C,C0627 ; SKPFLS C0627 ; 2271: emit_sb() DB $54,C0120 ; CALL C0120 ; 2272: else DB $50,C0628 ; SKIP C0628 C0627: ; 2273: emit_sw() DB $54,C0122 ; CALL C0122 ; 2274: fin C0628: ; 2275: fin C0625: C0626: ; 2276: elsif token == SETLIST_TKN DB $50,C0624 ; SKIP C0624 C0623: DB $68,D0413 ; LAB D0413 DB $2A,$B9 ; CB 185 DB $40 ; ISEQ DB $4C,C0629 ; SKPFLS C0629 ; 2277: if !parse_setlist_21(0, nexttype) DB $00 ; ZERO DB $66,$06 ; LLW 6 DB $54,C0602 ; CALL C0602 DB $20 ; NOT DB $4C,C0630 ; SKPFLS C0630 ; 2278: return FALSE DB $00 ; ZERO DB $5A ; LEAVE ; 2279: fin C0630: C0631: ; 2280: else DB $50,C0624 ; SKIP C0624 C0629: ; 2281: return parse_err_11(@bad_syntax) DB $26,D0563 ; LA D0563 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2282: fin C0624: ; 2283: fin C0613: ; 2284: if type & VAR_TYPE DB $66,$04 ; LLW 4 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $4C,C0632 ; SKPFLS C0632 ; 2285: if type & LOCAL_TYPE DB $66,$04 ; LLW 4 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0634 ; SKPFLS C0634 ; 2286: if type & BYTE_TYPE DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0636 ; SKPFLS C0636 ; 2287: emit_slb_10(addr) DB $66,$02 ; LLW 2 DB $54,C0124 ; CALL C0124 ; 2288: else DB $50,C0637 ; SKIP C0637 C0636: ; 2289: emit_slw_10(addr) DB $66,$02 ; LLW 2 DB $54,C0126 ; CALL C0126 ; 2290: fin C0637: ; 2291: else DB $50,C0635 ; SKIP C0635 C0634: ; 2292: if type & BYTE_TYPE DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0638 ; SKPFLS C0638 ; 2293: emit_sab_10(addr) DB $66,$02 ; LLW 2 DB $54,C0132 ; CALL C0132 ; 2294: else DB $50,C0639 ; SKIP C0639 C0638: ; 2295: emit_saw_10(addr) DB $66,$02 ; LLW 2 DB $54,C0134 ; CALL C0134 ; 2296: fin C0639: ; 2297: fin C0635: ; 2298: else DB $50,C0633 ; SKIP C0633 C0632: ; 2299: emit_pull() DB $54,C0146 ; CALL C0146 ; 2300: emit_swap() DB $54,C0214 ; CALL C0214 ; 2301: if type & (BYTE_TYPE ? BPTR_TYPE) DB $66,$04 ; LLW 4 DB $2A,$02 ; CB 2 DB $2A,$20 ; CB 32 DB $16 ; IOR DB $14 ; BAND DB $4C,C0640 ; SKPFLS C0640 ; 2302: emit_sb() DB $54,C0120 ; CALL C0120 ; 2303: else DB $50,C0641 ; SKIP C0641 C0640: ; 2304: emit_sw() DB $54,C0122 ; CALL C0122 ; 2305: fin C0641: ; 2306: fin C0633: ; 2307: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2308: end ; 2309: def parse_stmnt_01 C0642: ; parse_stmnt_01() ; 2310: byte type, i ; type = 2 ; i = 3 ; 2311: word tag_prevbrk, tag_else, tag_endif, tag_while, tag_wend ; tag_prevbrk = 4 ; tag_else = 6 ; tag_endif = 8 ; tag_while = 10 ; tag_wend = 12 ; 2312: word tag_repeat, tag_for, tag_choice, idptr, saveptr, addr, stepdir ; tag_repeat = 14 ; tag_for = 16 ; tag_choice = 18 ; idptr = 20 ; saveptr = 22 ; addr = 24 ; stepdir = 26 ; 2313: ; 2314: if token <> END_TKN and token <> DONE_TKN JSR INTERP DB $58,$1C,$00 ; ENTER 28,0 DB $68,D0413 ; LAB D0413 DB $2A,$87 ; CB 135 DB $42 ; ISNE DB $68,D0413 ; LAB D0413 DB $2A,$98 ; CB 152 DB $42 ; ISNE DB $24 ; LAND DB $4C,C0644 ; SKPFLS C0644 ; 2315: prevstmnt = token DB $68,D0413 ; LAB D0413 DB $78,D0953 ; SAB D0953 ; 2316: fin C0644: C0645: ; 2317: when token DB $68,D0413 ; LAB D0413 ; 2318: is IF_TKN DB $2A,$83 ; CB 131 DB $3E,C0647 ; SKPNE C0647 ; 2319: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2320: tag_else = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$06 ; SLW 6 ; 2321: tag_endif = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$08 ; SLW 8 ; 2322: emit_brfls_10(tag_else) DB $66,$06 ; LLW 6 DB $54,C0202 ; CALL C0202 ; 2323: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2324: repeat C0649: ; 2325: while parse_stmnt_01() C0650: DB $54,C0642 ; CALL C0642 DB $4C,C0651 ; SKPFLS C0651 ; 2326: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2327: loop DB $50,C0650 ; SKIP C0650 C0651: ; 2328: if token <> ELSEIF_TKN DB $68,D0413 ; LAB D0413 DB $2A,$84 ; CB 132 DB $42 ; ISNE DB $4C,C0652 ; SKPFLS C0652 ; 2329: break DB $50,C0648 ; SKIP C0648 ; 2330: fin C0652: C0653: ; 2331: emit_jump_10(tag_endif) DB $66,$08 ; LLW 8 DB $54,C0210 ; CALL C0210 ; 2332: emit_codetag_10(tag_else) DB $66,$06 ; LLW 6 DB $54,C0082 ; CALL C0082 ; 2333: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0654 ; SKPFLS C0654 ; 2334: return 0 DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2335: fin C0654: C0655: ; 2336: tag_else = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$06 ; SLW 6 ; 2337: emit_brfls_10(tag_else) DB $66,$06 ; LLW 6 DB $54,C0202 ; CALL C0202 ; 2338: until FALSE DB $00 ; ZERO DB $4C,C0649 ; SKPFLS C0649 C0648: ; 2339: if token == ELSE_TKN DB $68,D0413 ; LAB D0413 DB $2A,$85 ; CB 133 DB $40 ; ISEQ DB $4C,C0656 ; SKPFLS C0656 ; 2340: emit_jump_10(tag_endif) DB $66,$08 ; LLW 8 DB $54,C0210 ; CALL C0210 ; 2341: emit_codetag_10(tag_else) DB $66,$06 ; LLW 6 DB $54,C0082 ; CALL C0082 ; 2342: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2343: while parse_stmnt_01() C0658: DB $54,C0642 ; CALL C0642 DB $4C,C0659 ; SKPFLS C0659 ; 2344: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2345: loop DB $50,C0658 ; SKIP C0658 C0659: ; 2346: emit_codetag_10(tag_endif) DB $66,$08 ; LLW 8 DB $54,C0082 ; CALL C0082 ; 2347: else DB $50,C0657 ; SKIP C0657 C0656: ; 2348: emit_codetag_10(tag_else) DB $66,$06 ; LLW 6 DB $54,C0082 ; CALL C0082 ; 2349: emit_codetag_10(tag_endif) DB $66,$08 ; LLW 8 DB $54,C0082 ; CALL C0082 ; 2350: fin C0657: ; 2351: if token <> FIN_TKN DB $68,D0413 ; LAB D0413 DB $2A,$86 ; CB 134 DB $42 ; ISNE DB $4C,C0660 ; SKPFLS C0660 ; 2352: return parse_err_11(@no_fin) DB $30 ; DROP DB $26,D0775 ; LA D0775 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2353: fin C0660: C0661: ; 2354: is FOR_TKN DB $50,C0646 ; SKIP C0646 C0647: DB $2A,$8E ; CB 142 DB $3E,C0662 ; SKPNE C0662 ; 2355: stack_loop = stack_loop + 1 DB $68,D0952 ; LAB D0952 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $78,D0952 ; SAB D0952 ; 2356: tag_for = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$10 ; SLW 16 ; 2357: tag_prevbrk = break_tag DB $6A,D0956 ; LAW D0956 DB $76,$04 ; SLW 4 ; 2358: break_tag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $7A,D0956 ; SAW D0956 ; 2359: if scan_01() <> ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $42 ; ISNE DB $4C,C0663 ; SKPFLS C0663 ; 2360: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2361: fin C0663: C0664: ; 2362: idptr = id_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0335 ; CALL C0335 DB $76,$14 ; SLW 20 ; 2363: if idptr DB $66,$14 ; LLW 20 DB $4C,C0665 ; SKPFLS C0665 ; 2364: type = (idptr).idtype DB $66,$14 ; LLW 20 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $74,$02 ; SLB 2 ; 2365: addr = (idptr):idval DB $66,$14 ; LLW 20 DB $62 ; LW DB $76,$18 ; SLW 24 ; 2366: else DB $50,C0666 ; SKIP C0666 C0665: ; 2367: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2368: fin C0666: ; 2369: if scan_01() <> SET_TKN DB $54,C0246 ; CALL C0246 DB $2A,$BD ; CB 189 DB $42 ; ISNE DB $4C,C0667 ; SKPFLS C0667 ; 2370: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2371: fin C0667: C0668: ; 2372: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0669 ; SKPFLS C0669 ; 2373: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2374: fin C0669: C0670: ; 2375: emit_codetag_10(tag_for) DB $66,$10 ; LLW 16 DB $54,C0082 ; CALL C0082 ; 2376: if type & LOCAL_TYPE DB $64,$02 ; LLB 2 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0671 ; SKPFLS C0671 ; 2377: if type & BYTE_TYPE DB $64,$02 ; LLB 2 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0673 ; SKPFLS C0673 ; 2378: emit_dlb_10(addr) DB $66,$18 ; LLW 24 DB $54,C0128 ; CALL C0128 ; 2379: else DB $50,C0674 ; SKIP C0674 C0673: ; 2380: emit_dlw_10(addr) DB $66,$18 ; LLW 24 DB $54,C0130 ; CALL C0130 ; 2381: fin C0674: ; 2382: else DB $50,C0672 ; SKIP C0672 C0671: ; 2383: if type & BYTE_TYPE DB $64,$02 ; LLB 2 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0675 ; SKPFLS C0675 ; 2384: emit_dab_10(addr) DB $66,$18 ; LLW 24 DB $54,C0136 ; CALL C0136 ; 2385: else DB $50,C0676 ; SKIP C0676 C0675: ; 2386: emit_daw_10(addr) DB $66,$18 ; LLW 24 DB $54,C0138 ; CALL C0138 ; 2387: fin C0676: ; 2388: fin C0672: ; 2389: stepdir = 1 DB $2A,$01 ; CB 1 DB $76,$1A ; SLW 26 ; 2390: if token == TO_TKN DB $68,D0413 ; LAB D0413 DB $2A,$8F ; CB 143 DB $40 ; ISEQ DB $4C,C0677 ; SKPFLS C0677 ; 2391: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2392: elsif token == DOWNTO_TKN DB $50,C0678 ; SKIP C0678 C0677: DB $68,D0413 ; LAB D0413 DB $2A,$90 ; CB 144 DB $40 ; ISEQ DB $4C,C0679 ; SKPFLS C0679 ; 2393: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2394: stepdir = -1 DB $2C,$FF,$FF ; CW -1 DB $76,$1A ; SLW 26 ; 2395: fin C0679: C0678: ; 2396: if stepdir > 0 DB $66,$1A ; LLW 26 DB $00 ; ZERO DB $44 ; ISGT DB $4C,C0680 ; SKPFLS C0680 ; 2397: emit_brgt_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0204 ; CALL C0204 ; 2398: else DB $50,C0681 ; SKIP C0681 C0680: ; 2399: emit_brlt_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0206 ; CALL C0206 ; 2400: fin C0681: ; 2401: if token == STEP_TKN DB $68,D0413 ; LAB D0413 DB $2A,$91 ; CB 145 DB $40 ; ISEQ DB $4C,C0682 ; SKPFLS C0682 ; 2402: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2403: if stepdir > 0 DB $66,$1A ; LLW 26 DB $00 ; ZERO DB $44 ; ISGT DB $4C,C0684 ; SKPFLS C0684 ; 2404: drop emit_binaryop_11(ADD_TKN) DB $2A,$AB ; CB 171 DB $54,C0169 ; CALL C0169 DB $30 ; DROP ; 2405: else DB $50,C0685 ; SKIP C0685 C0684: ; 2406: drop emit_binaryop_11(SUB_TKN) DB $2A,$AD ; CB 173 DB $54,C0169 ; CALL C0169 DB $30 ; DROP ; 2407: fin C0685: ; 2408: else DB $50,C0683 ; SKIP C0683 C0682: ; 2409: if stepdir > 0 DB $66,$1A ; LLW 26 DB $00 ; ZERO DB $44 ; ISGT DB $4C,C0686 ; SKPFLS C0686 ; 2410: drop emit_unaryop_11(INC_TKN) DB $2A,$C1 ; CB 193 DB $54,C0158 ; CALL C0158 DB $30 ; DROP ; 2411: else DB $50,C0687 ; SKIP C0687 C0686: ; 2412: drop emit_unaryop_11(DEC_TKN) DB $2A,$C4 ; CB 196 DB $54,C0158 ; CALL C0158 DB $30 ; DROP ; 2413: fin C0687: ; 2414: fin C0683: ; 2415: while parse_stmnt_01() C0688: DB $54,C0642 ; CALL C0642 DB $4C,C0689 ; SKPFLS C0689 ; 2416: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2417: loop DB $50,C0688 ; SKIP C0688 C0689: ; 2418: if token <> NEXT_TKN DB $68,D0413 ; LAB D0413 DB $2A,$92 ; CB 146 DB $42 ; ISNE DB $4C,C0690 ; SKPFLS C0690 ; 2419: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2420: fin C0690: C0691: ; 2421: emit_jump_10(tag_for) DB $66,$10 ; LLW 16 DB $54,C0210 ; CALL C0210 ; 2422: emit_codetag_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0082 ; CALL C0082 ; 2423: emit_drop() DB $54,C0212 ; CALL C0212 ; 2424: break_tag = tag_prevbrk DB $66,$04 ; LLW 4 DB $7A,D0956 ; SAW D0956 ; 2425: stack_loop = stack_loop - 1 DB $68,D0952 ; LAB D0952 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $78,D0952 ; SAB D0952 ; 2426: is WHILE_TKN DB $50,C0646 ; SKIP C0646 C0662: DB $2A,$88 ; CB 136 DB $3E,C0692 ; SKPNE C0692 ; 2427: tag_while = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$0A ; SLW 10 ; 2428: tag_wend = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$0C ; SLW 12 ; 2429: tag_prevbrk = break_tag DB $6A,D0956 ; LAW D0956 DB $76,$04 ; SLW 4 ; 2430: break_tag = tag_wend DB $66,$0C ; LLW 12 DB $7A,D0956 ; SAW D0956 ; 2431: emit_codetag_10(tag_while) DB $66,$0A ; LLW 10 DB $54,C0082 ; CALL C0082 ; 2432: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2433: emit_brfls_10(tag_wend) DB $66,$0C ; LLW 12 DB $54,C0202 ; CALL C0202 ; 2434: while parse_stmnt_01() C0693: DB $54,C0642 ; CALL C0642 DB $4C,C0694 ; SKPFLS C0694 ; 2435: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2436: loop DB $50,C0693 ; SKIP C0693 C0694: ; 2437: if token <> LOOP_TKN DB $68,D0413 ; LAB D0413 DB $2A,$89 ; CB 137 DB $42 ; ISNE DB $4C,C0695 ; SKPFLS C0695 ; 2438: return parse_err_11(@no_loop) DB $30 ; DROP DB $26,D0787 ; LA D0787 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2439: fin C0695: C0696: ; 2440: emit_jump_10(tag_while) DB $66,$0A ; LLW 10 DB $54,C0210 ; CALL C0210 ; 2441: emit_codetag_10(tag_wend) DB $66,$0C ; LLW 12 DB $54,C0082 ; CALL C0082 ; 2442: break_tag = tag_prevbrk DB $66,$04 ; LLW 4 DB $7A,D0956 ; SAW D0956 ; 2443: is REPEAT_TKN DB $50,C0646 ; SKIP C0646 C0692: DB $2A,$93 ; CB 147 DB $3E,C0697 ; SKPNE C0697 ; 2444: tag_repeat = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$0E ; SLW 14 ; 2445: tag_prevbrk = break_tag DB $6A,D0956 ; LAW D0956 DB $76,$04 ; SLW 4 ; 2446: break_tag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $7A,D0956 ; SAW D0956 ; 2447: emit_codetag_10(tag_repeat) DB $66,$0E ; LLW 14 DB $54,C0082 ; CALL C0082 ; 2448: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2449: while parse_stmnt_01() C0698: DB $54,C0642 ; CALL C0642 DB $4C,C0699 ; SKPFLS C0699 ; 2450: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2451: loop DB $50,C0698 ; SKIP C0698 C0699: ; 2452: if token <> UNTIL_TKN DB $68,D0413 ; LAB D0413 DB $2A,$94 ; CB 148 DB $42 ; ISNE DB $4C,C0700 ; SKPFLS C0700 ; 2453: return parse_err_11(@no_until) DB $30 ; DROP DB $26,D0800 ; LA D0800 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2454: fin C0700: C0701: ; 2455: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2456: emit_brfls_10(tag_repeat) DB $66,$0E ; LLW 14 DB $54,C0202 ; CALL C0202 ; 2457: emit_codetag_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0082 ; CALL C0082 ; 2458: break_tag = tag_prevbrk DB $66,$04 ; LLW 4 DB $7A,D0956 ; SAW D0956 ; 2459: is CASE_TKN DB $50,C0646 ; SKIP C0646 C0697: DB $2A,$8A ; CB 138 DB $3E,C0702 ; SKPNE C0702 ; 2460: stack_loop = stack_loop + 1 DB $68,D0952 ; LAB D0952 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $78,D0952 ; SAB D0952 ; 2461: tag_choice = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$12 ; SLW 18 ; 2462: tag_prevbrk = break_tag DB $6A,D0956 ; LAW D0956 DB $76,$04 ; SLW 4 ; 2463: break_tag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $7A,D0956 ; SAW D0956 ; 2464: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2465: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2466: while token <> ENDCASE_TKN C0703: DB $68,D0413 ; LAB D0413 DB $2A,$8D ; CB 141 DB $42 ; ISNE DB $4C,C0704 ; SKPFLS C0704 ; 2467: when token DB $68,D0413 ; LAB D0413 ; 2468: is OF_TKN DB $2A,$8B ; CB 139 DB $3E,C0706 ; SKPNE C0706 ; 2469: if !parse_expr_01() DB $54,C0000 ; CALL C0000 DB $20 ; NOT DB $4C,C0707 ; SKPFLS C0707 ; 2470: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2471: fin C0707: C0708: ; 2472: emit_brne_10(tag_choice) DB $66,$12 ; LLW 18 DB $54,C0208 ; CALL C0208 ; 2473: while parse_stmnt_01() C0709: DB $54,C0642 ; CALL C0642 DB $4C,C0710 ; SKPFLS C0710 ; 2474: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2475: loop DB $50,C0709 ; SKIP C0709 C0710: ; 2476: emit_jump_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0210 ; CALL C0210 ; 2477: emit_codetag_10(tag_choice) DB $66,$12 ; LLW 18 DB $54,C0082 ; CALL C0082 ; 2478: tag_choice = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$12 ; SLW 18 ; 2479: is DEFAULT_TKN DB $50,C0705 ; SKIP C0705 C0706: DB $2A,$8C ; CB 140 DB $3E,C0711 ; SKPNE C0711 ; 2480: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2481: while parse_stmnt_01() C0712: DB $54,C0642 ; CALL C0642 DB $4C,C0713 ; SKPFLS C0713 ; 2482: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2483: loop DB $50,C0712 ; SKIP C0712 C0713: ; 2484: if token <> ENDCASE_TKN DB $68,D0413 ; LAB D0413 DB $2A,$8D ; CB 141 DB $42 ; ISNE DB $4C,C0714 ; SKPFLS C0714 ; 2485: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2486: fin C0714: C0715: ; 2487: otherwise DB $50,C0705 ; SKIP C0705 C0711: ; 2488: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2489: wend C0705: DB $30 ; DROP ; 2490: loop DB $50,C0703 ; SKIP C0703 C0704: ; 2491: emit_codetag_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0082 ; CALL C0082 ; 2492: emit_drop() DB $54,C0212 ; CALL C0212 ; 2493: break_tag = tag_prevbrk DB $66,$04 ; LLW 4 DB $7A,D0956 ; SAW D0956 ; 2494: stack_loop = stack_loop - 1 DB $68,D0952 ; LAB D0952 DB $2A,$01 ; CB 1 DB $04 ; SUB DB $78,D0952 ; SAB D0952 ; 2495: is BREAK_TKN DB $50,C0646 ; SKIP C0646 C0702: DB $2A,$9A ; CB 154 DB $3E,C0717 ; SKPNE C0717 ; 2496: if break_tag DB $6A,D0956 ; LAW D0956 DB $4C,C0718 ; SKPFLS C0718 ; 2497: emit_jump_10(break_tag) DB $6A,D0956 ; LAW D0956 DB $54,C0210 ; CALL C0210 ; 2498: else DB $50,C0719 ; SKIP C0719 C0718: ; 2499: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2500: fin C0719: ; 2501: is RETURN_TKN DB $50,C0646 ; SKIP C0646 C0717: DB $2A,$99 ; CB 153 DB $3E,C0720 ; SKPNE C0720 ; 2502: if infunc DB $68,D0951 ; LAB D0951 DB $4C,C0721 ; SKPFLS C0721 ; 2503: for i = 1 to stack_loop DB $2A,$01 ; CB 1 C0724: DB $6C,$03 ; DLB 3 DB $68,D0952 ; LAB D0952 DB $3A,C0723 ; SKPGT C0723 DB $0C ; INCR ; 2504: emit_drop() DB $54,C0212 ; CALL C0212 ; 2505: next DB $50,C0724 ; SKIP C0724 C0723: DB $30 ; DROP ; 2506: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2507: emit_leave_10(framesize) DB $6A,D0008 ; LAW D0008 DB $54,C0216 ; CALL C0216 ; 2508: else DB $50,C0722 ; SKIP C0722 C0721: ; 2509: return parse_err_11(@bad_stmnt) DB $30 ; DROP DB $26,D0535 ; LA D0535 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2510: fin C0722: ; 2511: is EXIT_TKN DB $50,C0646 ; SKIP C0646 C0720: DB $2A,$9C ; CB 156 DB $3E,C0725 ; SKPNE C0725 ; 2512: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2513: emit_exit() DB $54,C0226 ; CALL C0226 ; 2514: is DROP_TKN DB $50,C0646 ; SKIP C0646 C0725: DB $2A,$97 ; CB 151 DB $3E,C0726 ; SKPNE C0726 ; 2515: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2516: emit_drop() DB $54,C0212 ; CALL C0212 ; 2517: is ELSE_TKN DB $50,C0646 ; SKIP C0646 C0726: DB $2A,$85 ; CB 133 DB $3E,C0727 ; SKPNE C0727 ; 2518: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2519: is ELSEIF_TKN DB $50,C0646 ; SKIP C0646 C0727: DB $2A,$84 ; CB 132 DB $3E,C0728 ; SKPNE C0728 ; 2520: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2521: is FIN_TKN DB $50,C0646 ; SKIP C0646 C0728: DB $2A,$86 ; CB 134 DB $3E,C0729 ; SKPNE C0729 ; 2522: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2523: is LOOP_TKN DB $50,C0646 ; SKIP C0646 C0729: DB $2A,$89 ; CB 137 DB $3E,C0730 ; SKPNE C0730 ; 2524: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2525: is UNTIL_TKN DB $50,C0646 ; SKIP C0646 C0730: DB $2A,$94 ; CB 148 DB $3E,C0731 ; SKPNE C0731 ; 2526: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2527: is NEXT_TKN DB $50,C0646 ; SKIP C0646 C0731: DB $2A,$92 ; CB 146 DB $3E,C0732 ; SKPNE C0732 ; 2528: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2529: is OF_TKN DB $50,C0646 ; SKIP C0646 C0732: DB $2A,$8B ; CB 139 DB $3E,C0733 ; SKPNE C0733 ; 2530: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2531: is DEFAULT_TKN DB $50,C0646 ; SKIP C0646 C0733: DB $2A,$8C ; CB 140 DB $3E,C0734 ; SKPNE C0734 ; 2532: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2533: is ENDCASE_TKN DB $50,C0646 ; SKIP C0646 C0734: DB $2A,$8D ; CB 141 DB $3E,C0735 ; SKPNE C0735 ; 2534: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2535: is END_TKN DB $50,C0646 ; SKIP C0646 C0735: DB $2A,$87 ; CB 135 DB $3E,C0736 ; SKPNE C0736 ; 2536: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2537: is DONE_TKN DB $50,C0646 ; SKIP C0646 C0736: DB $2A,$98 ; CB 152 DB $3E,C0737 ; SKPNE C0737 ; 2538: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2539: is IFUNC_TKN DB $50,C0646 ; SKIP C0646 C0737: DB $2A,$95 ; CB 149 DB $3E,C0738 ; SKPNE C0738 ; 2540: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2541: is NFUNC_TKN DB $50,C0646 ; SKIP C0646 C0738: DB $2A,$96 ; CB 150 DB $3E,C0739 ; SKPNE C0739 ; 2542: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2543: is EOF_TKN DB $50,C0646 ; SKIP C0646 C0739: DB $2A,$01 ; CB 1 DB $3E,C0740 ; SKPNE C0740 ; 2544: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2545: is EOL_TKN DB $50,C0646 ; SKIP C0646 C0740: DB $2A,$02 ; CB 2 DB $3E,C0741 ; SKPNE C0741 ; 2546: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2547: otherwise DB $50,C0646 ; SKIP C0646 C0741: ; 2548: if token == ID_TKN DB $68,D0413 ; LAB D0413 DB $2A,$D6 ; CB 214 DB $40 ; ISEQ DB $4C,C0743 ; SKPFLS C0743 ; 2549: saveptr = tknptr DB $6A,D0417 ; LAW D0417 DB $76,$16 ; SLW 22 ; 2550: idptr = id_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0335 ; CALL C0335 DB $76,$14 ; SLW 20 ; 2551: if !idptr DB $66,$14 ; LLW 20 DB $20 ; NOT DB $4C,C0745 ; SKPFLS C0745 ; 2552: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2553: fin C0745: C0746: ; 2554: type = (idptr).idtype DB $66,$14 ; LLW 20 DB $2A,$02 ; CB 2 DB $02 ; ADD DB $60 ; LB DB $74,$02 ; SLB 2 ; 2555: if type & ADDR_TYPE DB $64,$02 ; LLB 2 DB $2A,$0E ; CB 14 DB $14 ; BAND DB $4C,C0747 ; SKPFLS C0747 ; 2556: addr = (idptr):idval DB $66,$14 ; LLW 20 DB $62 ; LW DB $76,$18 ; SLW 24 ; 2557: if scan_01() == SET_TKN DB $54,C0246 ; CALL C0246 DB $2A,$BD ; CB 189 DB $40 ; ISEQ DB $4C,C0749 ; SKPFLS C0749 ; 2558: if type & VAR_TYPE DB $64,$02 ; LLB 2 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $4C,C0751 ; SKPFLS C0751 ; 2559: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2560: if type & LOCAL_TYPE DB $64,$02 ; LLB 2 DB $2A,$10 ; CB 16 DB $14 ; BAND DB $4C,C0753 ; SKPFLS C0753 ; 2561: if type & BYTE_TYPE DB $64,$02 ; LLB 2 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0755 ; SKPFLS C0755 ; 2562: emit_slb_10(addr) DB $66,$18 ; LLW 24 DB $54,C0124 ; CALL C0124 ; 2563: else DB $50,C0756 ; SKIP C0756 C0755: ; 2564: emit_slw_10(addr) DB $66,$18 ; LLW 24 DB $54,C0126 ; CALL C0126 ; 2565: fin C0756: ; 2566: else DB $50,C0754 ; SKIP C0754 C0753: ; 2567: if type & BYTE_TYPE DB $64,$02 ; LLB 2 DB $2A,$02 ; CB 2 DB $14 ; BAND DB $4C,C0757 ; SKPFLS C0757 ; 2568: emit_sab_10(addr) DB $66,$18 ; LLW 24 DB $54,C0132 ; CALL C0132 ; 2569: else DB $50,C0758 ; SKIP C0758 C0757: ; 2570: emit_saw_10(addr) DB $66,$18 ; LLW 24 DB $54,C0134 ; CALL C0134 ; 2571: fin C0758: ; 2572: fin C0754: ; 2573: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2574: fin C0751: C0752: ; 2575: elsif token == SETLIST_TKN and type & VAR_TYPE DB $50,C0750 ; SKIP C0750 C0749: DB $68,D0413 ; LAB D0413 DB $2A,$B9 ; CB 185 DB $40 ; ISEQ DB $64,$02 ; LLB 2 DB $2A,$06 ; CB 6 DB $14 ; BAND DB $24 ; LAND DB $4C,C0759 ; SKPFLS C0759 ; 2576: return parse_setlist_21(addr, type); DB $30 ; DROP DB $66,$18 ; LLW 24 DB $64,$02 ; LLB 2 DB $54,C0602 ; CALL C0602 DB $5A ; LEAVE ; 2577: elsif token == EOL_TKN and type & FUNC_TYPE DB $50,C0750 ; SKIP C0750 C0759: DB $68,D0413 ; LAB D0413 DB $2A,$02 ; CB 2 DB $40 ; ISEQ DB $64,$02 ; LLB 2 DB $2A,$08 ; CB 8 DB $14 ; BAND DB $24 ; LAND DB $4C,C0760 ; SKPFLS C0760 ; 2578: emit_call_10(addr) DB $66,$18 ; LLW 24 DB $54,C0140 ; CALL C0140 ; 2579: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2580: fin C0760: C0750: ; 2581: fin C0747: C0748: ; 2582: tknptr = saveptr DB $66,$16 ; LLW 22 DB $7A,D0417 ; SAW D0417 ; 2583: fin C0743: C0744: ; 2584: rewind_10(tknptr) DB $6A,D0417 ; LAW D0417 DB $54,C0299 ; CALL C0299 ; 2585: type = parse_value_11(0) DB $00 ; ZERO DB $54,C0424 ; CALL C0424 DB $74,$02 ; SLB 2 ; 2586: if type DB $64,$02 ; LLB 2 DB $4C,C0761 ; SKPFLS C0761 ; 2587: if token == SET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$BD ; CB 189 DB $40 ; ISEQ DB $4C,C0763 ; SKPFLS C0763 ; 2588: drop parse_expr_01() DB $54,C0000 ; CALL C0000 DB $30 ; DROP ; 2589: if type & XBYTE_TYPE DB $64,$02 ; LLB 2 DB $2A,$22 ; CB 34 DB $14 ; BAND DB $4C,C0765 ; SKPFLS C0765 ; 2590: emit_sb() DB $54,C0120 ; CALL C0120 ; 2591: else DB $50,C0766 ; SKIP C0766 C0765: ; 2592: emit_sw() DB $54,C0122 ; CALL C0122 ; 2593: fin C0766: ; 2594: elsif token == SETLIST_TKN DB $50,C0764 ; SKIP C0764 C0763: DB $68,D0413 ; LAB D0413 DB $2A,$B9 ; CB 185 DB $40 ; ISEQ DB $4C,C0767 ; SKPFLS C0767 ; 2595: return parse_setlist_21(0, type); DB $30 ; DROP DB $00 ; ZERO DB $64,$02 ; LLB 2 DB $54,C0602 ; CALL C0602 DB $5A ; LEAVE ; 2596: else DB $50,C0764 ; SKIP C0764 C0767: ; 2597: if type & BPTR_TYPE DB $64,$02 ; LLB 2 DB $2A,$20 ; CB 32 DB $14 ; BAND DB $4C,C0768 ; SKPFLS C0768 ; 2598: emit_lb() DB $54,C0108 ; CALL C0108 ; 2599: elsif type & WPTR_TYPE DB $50,C0769 ; SKIP C0769 C0768: DB $64,$02 ; LLB 2 DB $2A,$40 ; CB 64 DB $14 ; BAND DB $4C,C0770 ; SKPFLS C0770 ; 2600: emit_lw() DB $54,C0110 ; CALL C0110 ; 2601: fin C0770: C0769: ; 2602: fin C0764: ; 2603: else DB $50,C0762 ; SKIP C0762 C0761: ; 2604: return parse_err_11(@bad_syntax) DB $30 ; DROP DB $26,D0563 ; LA D0563 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2605: fin C0762: ; 2606: wend C0646: DB $30 ; DROP ; 2607: if scan_01() <> EOL_TKN DB $54,C0246 ; CALL C0246 DB $2A,$02 ; CB 2 DB $42 ; ISNE DB $4C,C0771 ; SKPFLS C0771 ; 2608: return parse_err_11(@bad_syntax) DB $26,D0563 ; LA D0563 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2609: fin C0771: C0772: ; 2610: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2611: end ; 2612: def parse_var_11(type) C0773: ; parse_var_11() ; type = 2 ; 2613: byte consttype, constsize, idlen ; consttype = 4 ; constsize = 5 ; idlen = 6 ; 2614: word idptr, constval, arraysize, size ; idptr = 7 ; constval = 9 ; arraysize = 11 ; size = 13 ; 2615: ; 2616: idlen = 0 JSR INTERP DB $58,$0F,$01 ; ENTER 15,1 DB $00 ; ZERO DB $74,$06 ; SLB 6 ; 2617: size = 1 DB $2A,$01 ; CB 1 DB $76,$0D ; SLW 13 ; 2618: if scan_01() == ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $40 ; ISEQ DB $4C,C0775 ; SKPFLS C0775 ; 2619: idptr = tknptr DB $6A,D0417 ; LAW D0417 DB $76,$07 ; SLW 7 ; 2620: idlen = tknlen DB $68,D0414 ; LAB D0414 DB $74,$06 ; SLB 6 ; 2621: if scan_01() == OPEN_BRACKET_TKN DB $54,C0246 ; CALL C0246 DB $2A,$DB ; CB 219 DB $40 ; ISEQ DB $4C,C0777 ; SKPFLS C0777 ; 2622: size = 0 DB $00 ; ZERO DB $76,$0D ; SLW 13 ; 2623: drop parse_constexpr_21(@size, @constsize) DB $28,$0D ; LLA 13 DB $28,$05 ; LLA 5 DB $54,C0551 ; CALL C0551 DB $30 ; DROP ; 2624: if token <> CLOSE_BRACKET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$DD ; CB 221 DB $42 ; ISNE DB $4C,C0779 ; SKPFLS C0779 ; 2625: return parse_err_11(@no_close_bracket) DB $26,D0735 ; LA D0735 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2626: fin C0779: C0780: ; 2627: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2628: fin C0777: C0778: ; 2629: fin C0775: C0776: ; 2630: if type == WORD_TYPE DB $66,$02 ; LLW 2 DB $2A,$04 ; CB 4 DB $40 ; ISEQ DB $4C,C0781 ; SKPFLS C0781 ; 2631: size = size * 2 DB $66,$0D ; LLW 13 DB $2A,$02 ; CB 2 DB $06 ; MUL DB $76,$0D ; SLW 13 ; 2632: fin C0781: C0782: ; 2633: if token == SET_TKN DB $68,D0413 ; LAB D0413 DB $2A,$BD ; CB 189 DB $40 ; ISEQ DB $4C,C0783 ; SKPFLS C0783 ; 2634: if infunc DB $68,D0951 ; LAB D0951 DB $4C,C0785 ; SKPFLS C0785 ; 2635: return parse_err_11(@no_local_init) DB $26,D0827 ; LA D0827 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2636: fin C0785: C0786: ; 2637: if idlen DB $64,$06 ; LLB 6 DB $4C,C0787 ; SKPFLS C0787 ; 2638: drop iddata_add_41(idptr, idlen, type, 0) DB $66,$07 ; LLW 7 DB $64,$06 ; LLB 6 DB $66,$02 ; LLW 2 DB $00 ; ZERO DB $54,C0351 ; CALL C0351 DB $30 ; DROP ; 2639: fin C0787: C0788: ; 2640: consttype = parse_constexpr_21(@constval, @constsize) DB $28,$09 ; LLA 9 DB $28,$05 ; LLA 5 DB $54,C0551 ; CALL C0551 DB $74,$04 ; SLB 4 ; 2641: if consttype DB $64,$04 ; LLB 4 DB $4C,C0789 ; SKPFLS C0789 ; 2642: arraysize = emit_data_41(type, consttype, constval, constsize) DB $66,$02 ; LLW 2 DB $64,$04 ; LLB 4 DB $66,$09 ; LLW 9 DB $64,$05 ; LLB 5 DB $54,C0094 ; CALL C0094 DB $76,$0B ; SLW 11 ; 2643: while token == COMMA_TKN C0791: DB $68,D0413 ; LAB D0413 DB $2A,$AC ; CB 172 DB $40 ; ISEQ DB $4C,C0792 ; SKPFLS C0792 ; 2644: consttype = parse_constexpr_21(@constval, @constsize) DB $28,$09 ; LLA 9 DB $28,$05 ; LLA 5 DB $54,C0551 ; CALL C0551 DB $74,$04 ; SLB 4 ; 2645: if consttype DB $64,$04 ; LLB 4 DB $4C,C0793 ; SKPFLS C0793 ; 2646: arraysize = arraysize + emit_data_41(type, consttype, constval, constsize) DB $66,$0B ; LLW 11 DB $66,$02 ; LLW 2 DB $64,$04 ; LLB 4 DB $66,$09 ; LLW 9 DB $64,$05 ; LLB 5 DB $54,C0094 ; CALL C0094 DB $02 ; ADD DB $76,$0B ; SLW 11 ; 2647: else DB $50,C0794 ; SKIP C0794 C0793: ; 2648: return parse_err_11(@bad_decl) DB $26,D0505 ; LA D0505 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2649: fin C0794: ; 2650: loop DB $50,C0791 ; SKIP C0791 C0792: ; 2651: if token <> EOL_TKN DB $68,D0413 ; LAB D0413 DB $2A,$02 ; CB 2 DB $42 ; ISNE DB $4C,C0795 ; SKPFLS C0795 ; 2652: return parse_err_11(@no_close_bracket) DB $26,D0735 ; LA D0735 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2653: fin C0795: C0796: ; 2654: iddata_size_30(PTR_TYPE, size, arraysize); DB $2A,$60 ; CB 96 DB $66,$0D ; LLW 13 DB $66,$0B ; LLW 11 DB $54,C0357 ; CALL C0357 ; 2655: else DB $50,C0790 ; SKIP C0790 C0789: ; 2656: return parse_err_11(@bad_decl) DB $26,D0505 ; LA D0505 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2657: fin C0790: ; 2658: elsif idlen DB $50,C0784 ; SKIP C0784 C0783: DB $64,$06 ; LLB 6 DB $4C,C0797 ; SKPFLS C0797 ; 2659: if infunc DB $68,D0951 ; LAB D0951 DB $4C,C0798 ; SKPFLS C0798 ; 2660: drop idlocal_add_41(idptr, idlen, type, size) DB $66,$07 ; LLW 7 DB $64,$06 ; LLB 6 DB $66,$02 ; LLW 2 DB $66,$0D ; LLW 13 DB $54,C0343 ; CALL C0343 DB $30 ; DROP ; 2661: else DB $50,C0799 ; SKIP C0799 C0798: ; 2662: drop iddata_add_41(idptr, idlen, type, size) DB $66,$07 ; LLW 7 DB $64,$06 ; LLB 6 DB $66,$02 ; LLW 2 DB $66,$0D ; LLW 13 DB $54,C0351 ; CALL C0351 DB $30 ; DROP ; 2663: fin C0799: ; 2664: fin C0797: C0784: ; 2665: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2666: end ; 2667: def parse_vars_01 C0800: ; parse_vars_01() ; 2668: byte idlen, type, size ; idlen = 2 ; type = 3 ; size = 4 ; 2669: word value, idptr ; value = 5 ; idptr = 7 ; 2670: ; 2671: when token JSR INTERP DB $58,$09,$00 ; ENTER 9,0 DB $68,D0413 ; LAB D0413 ; 2672: is CONST_TKN DB $2A,$80 ; CB 128 DB $3E,C0803 ; SKPNE C0803 ; 2673: if scan_01() <> ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $42 ; ISNE DB $4C,C0804 ; SKPFLS C0804 ; 2674: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2675: fin C0804: C0805: ; 2676: idptr = tknptr; DB $6A,D0417 ; LAW D0417 DB $76,$07 ; SLW 7 ; 2677: idlen = tknlen DB $68,D0414 ; LAB D0414 DB $74,$02 ; SLB 2 ; 2678: if scan_01() <> SET_TKN DB $54,C0246 ; CALL C0246 DB $2A,$BD ; CB 189 DB $42 ; ISNE DB $4C,C0806 ; SKPFLS C0806 ; 2679: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2680: fin C0806: C0807: ; 2681: if !parse_constexpr_21(@value, @size) DB $28,$05 ; LLA 5 DB $28,$04 ; LLA 4 DB $54,C0551 ; CALL C0551 DB $20 ; NOT DB $4C,C0808 ; SKPFLS C0808 ; 2682: return parse_err_11(@bad_cnst) DB $30 ; DROP DB $26,D0474 ; LA D0474 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2683: fin C0808: C0809: ; 2684: drop idconst_add_31(idptr, idlen, value) DB $66,$07 ; LLW 7 DB $64,$02 ; LLB 2 DB $66,$05 ; LLW 5 DB $54,C0369 ; CALL C0369 DB $30 ; DROP ; 2685: is BYTE_TKN DB $50,C0802 ; SKIP C0802 C0803: DB $2A,$81 ; CB 129 DB $3E,C0810 ; SKPNE C0810 ; 2686: type = BYTE_TYPE DB $2A,$02 ; CB 2 DB $74,$03 ; SLB 3 ; 2687: repeat C0812: ; 2688: if !parse_var_11(type) DB $64,$03 ; LLB 3 DB $54,C0773 ; CALL C0773 DB $20 ; NOT DB $4C,C0813 ; SKPFLS C0813 ; 2689: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2690: fin C0813: C0814: ; 2691: until token <> COMMA_TKN DB $68,D0413 ; LAB D0413 DB $2A,$AC ; CB 172 DB $42 ; ISNE DB $4C,C0812 ; SKPFLS C0812 C0811: ; 2692: is WORD_TKN DB $50,C0802 ; SKIP C0802 C0810: DB $2A,$82 ; CB 130 DB $3E,C0815 ; SKPNE C0815 ; 2693: type = WORD_TYPE DB $2A,$04 ; CB 4 DB $74,$03 ; SLB 3 ; 2694: repeat C0817: ; 2695: if !parse_var_11(type) DB $64,$03 ; LLB 3 DB $54,C0773 ; CALL C0773 DB $20 ; NOT DB $4C,C0818 ; SKPFLS C0818 ; 2696: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2697: fin C0818: C0819: ; 2698: until token <> COMMA_TKN DB $68,D0413 ; LAB D0413 DB $2A,$AC ; CB 172 DB $42 ; ISNE DB $4C,C0817 ; SKPFLS C0817 C0816: ; 2699: is FUNC_TKN DB $50,C0802 ; SKIP C0802 C0815: DB $2A,$9E ; CB 158 DB $3E,C0820 ; SKPNE C0820 ; 2700: repeat C0822: ; 2701: if scan_01() == ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $40 ; ISEQ DB $4C,C0823 ; SKPFLS C0823 ; 2702: drop idfunc_add_31(tknptr, tknlen, ctag_new_01()) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0066 ; CALL C0066 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 2703: else DB $50,C0824 ; SKIP C0824 C0823: ; 2704: return parse_err_11(@bad_decl) DB $30 ; DROP DB $26,D0505 ; LA D0505 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2705: fin C0824: ; 2706: until scan_01() <> COMMA_TKN DB $54,C0246 ; CALL C0246 DB $2A,$AC ; CB 172 DB $42 ; ISNE DB $4C,C0822 ; SKPFLS C0822 C0821: ; 2707: is EOL_TKN DB $50,C0802 ; SKIP C0802 C0820: DB $2A,$02 ; CB 2 DB $3E,C0825 ; SKPNE C0825 ; 2708: return TRUE DB $30 ; DROP DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2709: otherwise DB $50,C0802 ; SKIP C0802 C0825: ; 2710: return FALSE DB $30 ; DROP DB $00 ; ZERO DB $5A ; LEAVE ; 2711: wend C0802: DB $30 ; DROP ; 2712: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2713: end ; 2714: def parse_func_01 C0827: ; parse_func_01() ; 2715: byte opt, cfnparms ; opt = 2 ; cfnparms = 3 ; 2716: word func_tag, idptr ; func_tag = 4 ; idptr = 6 ; 2717: ; 2718: if token == IFUNC_TKN or token == NFUNC_TKN JSR INTERP DB $58,$08,$00 ; ENTER 8,0 DB $68,D0413 ; LAB D0413 DB $2A,$95 ; CB 149 DB $40 ; ISEQ DB $68,D0413 ; LAB D0413 DB $2A,$96 ; CB 150 DB $40 ; ISEQ DB $22 ; LOR DB $4C,C0829 ; SKPFLS C0829 ; 2719: opt = token - IFUNC_TKN DB $68,D0413 ; LAB D0413 DB $2A,$95 ; CB 149 DB $04 ; SUB DB $74,$02 ; SLB 2 ; 2720: if scan_01() <> ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $42 ; ISNE DB $4C,C0831 ; SKPFLS C0831 ; 2721: return parse_err_11(@bad_decl) DB $26,D0505 ; LA D0505 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2722: fin C0831: C0832: ; 2723: cfnparms = 0 DB $00 ; ZERO DB $74,$03 ; SLB 3 ; 2724: infunc = TRUE DB $2C,$FF,$FF ; CW -1 DB $78,D0951 ; SAB D0951 ; 2725: idptr = idglobal_lookup_21(tknptr, tknlen) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $54,C0341 ; CALL C0341 DB $76,$06 ; SLW 6 ; 2726: if idptr DB $66,$06 ; LLW 6 DB $4C,C0833 ; SKPFLS C0833 ; 2727: func_tag = (idptr):idval DB $66,$06 ; LLW 6 DB $62 ; LW DB $76,$04 ; SLW 4 ; 2728: else DB $50,C0834 ; SKIP C0834 C0833: ; 2729: func_tag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $76,$04 ; SLW 4 ; 2730: drop idfunc_add_31(tknptr, tknlen, func_tag) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $66,$04 ; LLW 4 DB $54,C0367 ; CALL C0367 DB $30 ; DROP ; 2731: fin C0834: ; 2732: emit_codetag_10(func_tag) DB $66,$04 ; LLW 4 DB $54,C0082 ; CALL C0082 ; 2733: retfunc_tag = ctag_new_01() DB $54,C0066 ; CALL C0066 DB $7A,D0954 ; SAW D0954 ; 2734: idlocal_init() DB $54,C0373 ; CALL C0373 ; 2735: if scan_01() == OPEN_PAREN_TKN DB $54,C0246 ; CALL C0246 DB $2A,$A8 ; CB 168 DB $40 ; ISEQ DB $4C,C0835 ; SKPFLS C0835 ; 2736: repeat C0838: ; 2737: if scan_01() == ID_TKN DB $54,C0246 ; CALL C0246 DB $2A,$D6 ; CB 214 DB $40 ; ISEQ DB $4C,C0839 ; SKPFLS C0839 ; 2738: cfnparms = cfnparms + 1 DB $64,$03 ; LLB 3 DB $2A,$01 ; CB 1 DB $02 ; ADD DB $74,$03 ; SLB 3 ; 2739: drop idlocal_add_41(tknptr, tknlen, WORD_TYPE, 2) DB $6A,D0417 ; LAW D0417 DB $68,D0414 ; LAB D0414 DB $2A,$04 ; CB 4 DB $2A,$02 ; CB 2 DB $54,C0343 ; CALL C0343 DB $30 ; DROP ; 2740: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2741: fin C0839: C0840: ; 2742: until token <> COMMA_TKN DB $68,D0413 ; LAB D0413 DB $2A,$AC ; CB 172 DB $42 ; ISNE DB $4C,C0838 ; SKPFLS C0838 C0837: ; 2743: if token <> CLOSE_PAREN_TKN DB $68,D0413 ; LAB D0413 DB $2A,$A9 ; CB 169 DB $42 ; ISNE DB $4C,C0841 ; SKPFLS C0841 ; 2744: return parse_err_11(@bad_decl) DB $26,D0505 ; LA D0505 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2745: fin C0841: C0842: ; 2746: drop scan_01() DB $54,C0246 ; CALL C0246 DB $30 ; DROP ; 2747: fin C0835: C0836: ; 2748: while parse_vars_01() C0843: DB $54,C0800 ; CALL C0800 DB $4C,C0844 ; SKPFLS C0844 ; 2749: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2750: loop DB $50,C0843 ; SKIP C0843 C0844: ; 2751: emit_enter_20(framesize, cfnparms) DB $6A,D0008 ; LAW D0008 DB $64,$03 ; LLB 3 DB $54,C0220 ; CALL C0220 ; 2752: prevstmnt = 0 DB $00 ; ZERO DB $78,D0953 ; SAB D0953 ; 2753: while parse_stmnt_01() C0845: DB $54,C0642 ; CALL C0642 DB $4C,C0846 ; SKPFLS C0846 ; 2754: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2755: loop DB $50,C0845 ; SKIP C0845 C0846: ; 2756: infunc = FALSE DB $00 ; ZERO DB $78,D0951 ; SAB D0951 ; 2757: if token <> END_TKN DB $68,D0413 ; LAB D0413 DB $2A,$87 ; CB 135 DB $42 ; ISNE DB $4C,C0847 ; SKPFLS C0847 ; 2758: return parse_err_11(@bad_syntax) DB $26,D0563 ; LA D0563 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2759: fin C0847: C0848: ; 2760: if scan_01() <> EOL_TKN DB $54,C0246 ; CALL C0246 DB $2A,$02 ; CB 2 DB $42 ; ISNE DB $4C,C0849 ; SKPFLS C0849 ; 2761: return parse_err_11(@bad_syntax) DB $26,D0563 ; LA D0563 DB $54,C0062 ; CALL C0062 DB $5A ; LEAVE ; 2762: fin C0849: C0850: ; 2763: if prevstmnt <> RETURN_TKN DB $68,D0953 ; LAB D0953 DB $2A,$99 ; CB 153 DB $42 ; ISNE DB $4C,C0851 ; SKPFLS C0851 ; 2764: emit_leave_10(framesize) DB $6A,D0008 ; LAW D0008 DB $54,C0216 ; CALL C0216 ; 2765: fin C0851: C0852: ; 2766: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2767: elsif token == EOL_TKN DB $50,C0830 ; SKIP C0830 C0829: DB $68,D0413 ; LAB D0413 DB $2A,$02 ; CB 2 DB $40 ; ISEQ DB $4C,C0853 ; SKPFLS C0853 ; 2768: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5A ; LEAVE ; 2769: fin C0853: C0830: ; 2770: return FALSE DB $00 ; ZERO DB $5A ; LEAVE ; 2771: end ; 2772: def parse_module_01 C0001: ; parse_module_01() ; 2773: entrypoint = 0 JSR INTERP DB $00 ; ZERO DB $7A,D0016 ; SAW D0016 ; 2774: idglobal_init() DB $54,C0371 ; CALL C0371 ; 2775: idlocal_init() DB $54,C0373 ; CALL C0373 ; 2776: if nextln_01() DB $54,C0301 ; CALL C0301 DB $4C,C0855 ; SKPFLS C0855 ; 2777: while parse_vars_01() C0857: DB $54,C0800 ; CALL C0800 DB $4C,C0858 ; SKPFLS C0858 ; 2778: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2779: loop DB $50,C0857 ; SKIP C0857 C0858: ; 2780: while parse_func_01() C0859: DB $54,C0827 ; CALL C0827 DB $4C,C0860 ; SKPFLS C0860 ; 2781: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2782: loop DB $50,C0859 ; SKIP C0859 C0860: ; 2783: if token <> DONE_TKN DB $68,D0413 ; LAB D0413 DB $2A,$98 ; CB 152 DB $42 ; ISNE DB $4C,C0861 ; SKPFLS C0861 ; 2784: emit_start() DB $54,C0224 ; CALL C0224 ; 2785: prevstmnt = 0 DB $00 ; ZERO DB $78,D0953 ; SAB D0953 ; 2786: while parse_stmnt_01() C0863: DB $54,C0642 ; CALL C0642 DB $4C,C0864 ; SKPFLS C0864 ; 2787: drop nextln_01() DB $54,C0301 ; CALL C0301 DB $30 ; DROP ; 2788: loop DB $50,C0863 ; SKIP C0863 C0864: ; 2789: if token <> DONE_TKN DB $68,D0413 ; LAB D0413 DB $2A,$98 ; CB 152 DB $42 ; ISNE DB $4C,C0865 ; SKPFLS C0865 ; 2790: drop parse_err_11(@no_done) DB $26,D0814 ; LA D0814 DB $54,C0062 ; CALL C0062 DB $30 ; DROP ; 2791: fin C0865: C0866: ; 2792: if prevstmnt <> EXIT_TKN DB $68,D0953 ; LAB D0953 DB $2A,$9C ; CB 156 DB $42 ; ISNE DB $4C,C0867 ; SKPFLS C0867 ; 2793: emit_const_10(0) DB $00 ; ZERO DB $54,C0103 ; CALL C0103 ; 2794: emit_exit() DB $54,C0226 ; CALL C0226 ; 2795: fin C0867: C0868: ; 2796: fin C0861: C0862: ; 2797: ; dumpsym(idglobal_tbl, globals) ; 2798: ; prstr(@entrypt_str) ; 2799: ; prword(entrypoint) ; 2800: ; crout() ; 2801: ; keyin_01() ; 2802: return TRUE DB $2C,$FF,$FF ; CW -1 DB $5C ; RET ; 2803: fin C0855: C0856: ; 2804: return FALSE DB $00 ; ZERO DB $5C ; RET ; 2805: end ; 2806: def exec C0869: ; exec() ; 2807: when execentry() JSR INTERP DB $54,C0004 ; CALL C0004 ; 2808: is 0 DB $00 ; ZERO DB $3E,C0872 ; SKPNE C0872 ; 2809: crout() DB $54,C0046 ; CALL C0046 ; 2810: prstr(@donemsg) DB $26,D0053 ; LA D0053 DB $54,C0020 ; CALL C0020 ; 2811: is 1 DB $50,C0871 ; SKIP C0871 C0872: DB $2A,$01 ; CB 1 DB $3E,C0873 ; SKPNE C0873 ; 2812: crout() DB $54,C0046 ; CALL C0046 ; 2813: prstr(@brkmsg) DB $26,D0104 ; LA D0104 DB $54,C0020 ; CALL C0020 ; 2814: is 2 DB $50,C0871 ; SKIP C0871 C0873: DB $2A,$02 ; CB 2 DB $3E,C0874 ; SKPNE C0874 ; 2815: crout() DB $54,C0046 ; CALL C0046 ; 2816: prstr(@stkovflwmsg) DB $26,D0117 ; LA D0117 DB $54,C0020 ; CALL C0020 ; 2817: wend DB $50,C0871 ; SKIP C0871 C0874: C0871: DB $30 ; DROP ; 2818: end DB $5C ; RET ; 2819: ; ; 2820: ; Compile PLASMA file and execute it ; 2821: ; ; 2822: ;emptystk = estk() ; 2823: prstr(@version) START: ; JSR INTERP DB $26,D0020 ; LA D0020 DB $54,C0020 ; CALL C0020 ; 2824: crout() DB $54,C0046 ; CALL C0046 ; 2825: if ^argbuff DB $2C,$06,$20 ; CW 8198 DB $60 ; LB DB $4C,C0876 ; SKPFLS C0876 ; 2826: inref = open_21(argbuff, iobuffer) DB $2C,$06,$20 ; CW 8198 DB $2C,$00,$08 ; CW 2048 DB $54,C0032 ; CALL C0032 DB $78,D0000 ; SAB D0000 ; 2827: else DB $50,C0877 ; SKIP C0877 C0876: ; 2828: inref = open_21(rdstr($BA), iobuffer) DB $2A,$BA ; CB 186 DB $54,C0022 ; CALL C0022 DB $2C,$00,$08 ; CW 2048 DB $54,C0032 ; CALL C0032 DB $78,D0000 ; SAB D0000 ; 2829: fin C0877: ; 2830: if inref DB $68,D0000 ; LAB D0000 DB $4C,C0878 ; SKPFLS C0878 ; 2831: drop newline_31(inref, $7F, $0D) DB $68,D0000 ; LAB D0000 DB $2A,$7F ; CB 127 DB $2A,$0D ; CB 13 DB $54,C0044 ; CALL C0044 DB $30 ; DROP ; 2832: if parse_module_01() DB $54,C0001 ; CALL C0001 DB $4C,C0880 ; SKPFLS C0880 ; 2833: drop close_11(inref) DB $68,D0000 ; LAB D0000 DB $54,C0034 ; CALL C0034 DB $30 ; DROP ; 2834: exec(entrypoint) DB $6A,D0016 ; LAW D0016 DB $54,C0869 ; CALL C0869 ; 2835: ; ; 2836: ; Close all files ; 2837: ; ; 2838: ^$BFD8 = 0 DB $2C,$D8,$BF ; CW 49112 DB $00 ; ZERO DB $70 ; SB ; 2839: drop close_11(0) DB $00 ; ZERO DB $54,C0034 ; CALL C0034 DB $30 ; DROP ; 2840: else DB $50,C0881 ; SKIP C0881 C0880: ; 2841: drop close_11(inref) DB $68,D0000 ; LAB D0000 DB $54,C0034 ; CALL C0034 DB $30 ; DROP ; 2842: crout() DB $54,C0046 ; CALL C0046 ; 2843: prstr(@badfile) DB $26,D0089 ; LA D0089 DB $54,C0020 ; CALL C0020 ; 2844: fin C0881: ; 2845: cin() DB $54,C0018 ; CALL C0018 ; 2846: ; crout ; 2847: ; dumpsym(@idglobal_tbl, globals) ; 2848: ; crout ; 2849: fin C0878: C0879: ; 2850: done DB $5C ; RET