From 2b03202a30e9da09bfc5c0d382b1f5d2287287a4 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Sun, 9 Aug 2020 17:52:46 -0400 Subject: Added the bitwise OR, left shift, and right shift expressions to the emulator's assembler. --- asmmon.c | 13 +- asmmon.h | 4 + assemble.c | 6 + lexer.c | 13 +- lexer.h | 2 + programs/sub-suite/declare.s | 456 ++++++++++++++++++++++++++++++++----------- 6 files changed, 369 insertions(+), 125 deletions(-) diff --git a/asmmon.c b/asmmon.c index ce78f5b..79a9862 100644 --- a/asmmon.c +++ b/asmmon.c @@ -204,10 +204,10 @@ void list(uint16_t start, uint16_t end, uint8_t all, uint8_t ln, uint8_t addr, u case TOK_BIN: if (rs != 0xFF) { bitnum = (rs << 3); } else { - opsize += (t->qword <= 0x000000FF) + 0; - opsize += (t->qword > 0x000000FF) + 1; - opsize += (t->qword > 0x0000FFFF) + 2; - opsize += (t->qword > 0xFFFFFFFF) + 3; + opsize = 1; + opsize = (t->qword > 0x000000FF) ? 2 : opsize; + opsize = (t->qword > 0x0000FFFF) ? 3 : opsize; + opsize = (t->qword > 0xFFFFFFFF) ? 4 : opsize; if (opsize) { bitnum = bitsize[opsize-1]; } @@ -251,6 +251,11 @@ void list(uint16_t start, uint16_t end, uint8_t all, uint8_t ln, uint8_t addr, u switch (t->type) { case EXPR_PLUS : putchar('+'); break; case EXPR_MINUS: putchar('-'); break; + case EXPR_LSHFT: putchar('<'); /* Falls through. */ + case EXPR_HIGH : putchar('<'); break; + case EXPR_RSHFT: putchar('>'); /* Falls through. */ + case EXPR_LOW : putchar('>'); break; + case EXPR_OR : putchar('|'); break; } break; } diff --git a/asmmon.h b/asmmon.h index c77cfcf..6c71a4a 100644 --- a/asmmon.h +++ b/asmmon.h @@ -122,6 +122,7 @@ enum pre_token { PTOK_MINUS, PTOK_GT, PTOK_LT, + PTOK_PIPE, PTOK_LBRACK, PTOK_RBRACK, PTOK_COMMA, @@ -146,6 +147,9 @@ enum expr { EXPR_MINUS, EXPR_LOW, EXPR_HIGH, + EXPR_OR, + EXPR_LSHFT, + EXPR_RSHFT, EXPR_NONE }; diff --git a/assemble.c b/assemble.c index ed56cc8..d127ce5 100644 --- a/assemble.c +++ b/assemble.c @@ -8,6 +8,9 @@ uint8_t isexpr(uint8_t type, uint8_t dbg) { case EXPR_MINUS: case EXPR_LOW: case EXPR_HIGH: + case EXPR_OR: + case EXPR_LSHFT: + case EXPR_RSHFT: return 1; default: return 0; @@ -76,6 +79,9 @@ uint64_t get_val(token *t, uint64_t addr, uint8_t size, uint8_t dbg) { switch (type) { case EXPR_PLUS : (isstart) ? (value = tmp_val) : (value += tmp_val); break; case EXPR_MINUS: (isstart) ? (value = -tmp_val) : (value -= tmp_val); break; + case EXPR_OR : value |= tmp_val; break; + case EXPR_LSHFT: value <<= tmp_val; break; + case EXPR_RSHFT: value >>= tmp_val; break; case EXPR_LOW : value = tmp_val; switch (size) { diff --git a/lexer.c b/lexer.c index 0540498..699589c 100644 --- a/lexer.c +++ b/lexer.c @@ -241,6 +241,10 @@ uint64_t lex(char *str, uint64_t address, uint8_t dbg) { l->tok = NULL; l->next = NULL; l->count = 0; + l->espace = 0; + l->etab = 0; + l->sspace = 0; + l->stab = 0; last_line = l; } @@ -422,17 +426,22 @@ uint64_t lex(char *str, uint64_t address, uint8_t dbg) { case PTOK_MINUS: case PTOK_GT: case PTOK_LT: + case PTOK_PIPE: lex_type = TOK_EXPR; switch (ptok) { case PTOK_PLUS : value = EXPR_PLUS ; break; case PTOK_MINUS: value = EXPR_MINUS; break; - case PTOK_GT : value = EXPR_LOW ; break; - case PTOK_LT : value = EXPR_HIGH ; break; + case PTOK_PIPE : value = EXPR_OR ; break; + case PTOK_GT : value = (get_ptok(str[i+1], dbg) == PTOK_GT) ? (EXPR_RSHFT) : (EXPR_LOW) ; break; + case PTOK_LT : value = (get_ptok(str[i+1], dbg) == PTOK_LT) ? (EXPR_LSHFT) : (EXPR_HIGH); break; } l->count++; t = make_token(lex_type, value, 0, "", NULL); memset(lexeme, 0, strlen(lexeme)+1); lexeme[j++] = str[i]; + if (value == EXPR_LSHFT || value == EXPR_RSHFT) { + lexeme[j++] = str[++i]; + } break; case PTOK_EQU: i++; diff --git a/lexer.h b/lexer.h index 225a5e5..3a9951e 100644 --- a/lexer.h +++ b/lexer.h @@ -19,6 +19,7 @@ static inline uint8_t isdelm2(char c, uint8_t dbg) { case '.' : case '+' : case '<' : + case '|' : case '>' : case '-' : case ':' : @@ -41,6 +42,7 @@ static inline uint8_t get_ptok(char c, uint8_t dbg) { case '-' : return PTOK_MINUS ; case '>' : return PTOK_GT ; case '<' : return PTOK_LT ; + case '|' : return PTOK_PIPE ; case '(' : return PTOK_LBRACK ; case ')' : return PTOK_RBRACK ; case ',' : return PTOK_COMMA ; diff --git a/programs/sub-suite/declare.s b/programs/sub-suite/declare.s index 2991e66..8054956 100644 --- a/programs/sub-suite/declare.s +++ b/programs/sub-suite/declare.s @@ -51,22 +51,23 @@ PTOK_PLUS = 4 ; + PTOK_MINUS = 5 ; - PTOK_GT = 6 ; > PTOK_LT = 7 ; < -PTOK_LBRAK = 8 ; ( -PTOK_RBRAK = 9 ; ) -PTOK_COMMA = 10 ; , -PTOK_X = 11 ; x -PTOK_Y = 12 ; y -PTOK_S = 13 ; s -PTOK_P = 14 ; p -PTOK_DQUOT = 15 ; " -PTOK_SQUOT = 16 ; ' -PTOK_HASH = 17 ; # -PTOK_SCOLN = 18 ; ; -PTOK_DOLR = 19 ; $ -PTOK_PRCNT = 20 ; % -PTOK_NUM = 21 ; 0-9 -PTOK_ALPH = 22 ; a-z A-Z -PTOK_OTHR = 23 ; Everything else. +PTOK_PIPE = 8 ; | +PTOK_LBRAK = 9 ; ( +PTOK_RBRAK = 10 ; ) +PTOK_COMMA = 11 ; , +PTOK_X = 12 ; x +PTOK_Y = 13 ; y +PTOK_S = 14 ; s +PTOK_P = 15 ; p +PTOK_DQUOT = 16 ; " +PTOK_SQUOT = 17 ; ' +PTOK_HASH = 18 ; # +PTOK_SCOLN = 19 ; ; +PTOK_DOLR = 20 ; $ +PTOK_PRCNT = 21 ; % +PTOK_NUM = 22 ; 0-9 +PTOK_ALPH = 23 ; a-z A-Z +PTOK_OTHR = 24 ; Everything else. ; Expressions. EXPR_PLUS = 0 ; Plus. @@ -75,6 +76,22 @@ EXPR_LOW = 2 ; Lower half of address. EXPR_HIGH = 3 ; Upper half of address. EXPR_NONE = 4 ; No expression. +; Addressing modes. +IMM = 1 << 0 ; Immediate Data. +ZM = 1 << 1 ; Zero Matrix. +ZMX = 1 << 2 ; Zero Matrix, indexed with X. +ZMY = 1 << 3 ; Zero Matrix, indexed with Y. +IND = 1 << 4 ; Indirect. +INDX = 1 << 5 ; Indexed Indirect. +INDY = 1 << 6 ; Indirect Indexed. +ABS = 1 << 7 ; Absolute. +REL = 1 << 8 ; Relative. +BREG = 1 << 9 ; B Register. +IMPL = 1 << 10 ; Implied. +INDX2 = 1 << 11 ; Special case of INDX that uses the indirect table. +ZM2 = 1 << 12 ; Special case of Zero Matrix used by JMP, and JSR. + + ; RAM declarations. ; Linewrap table. @@ -272,109 +289,309 @@ bits: ; Instruction mnemonics, and opcodes. -; Legend. -; mne = Mnemonic. -; imm = Immediate data. -; zm = Zero Matrix. -; zmx = Zero Matrix, indexed with X. -; zmy = Zero Matrix, indexed with Y. -; ind = Indirect. -; idx = Indexed Indirect. -; idy = Indirect Indexed. -; abs = Absolute. -; rel = Relative. -; imp = Implied. +; Format. +; +; String : Mnemonic. +; 2 bytes: Addressing mode bits. +; 1 byte : Base value, used to generate the actual opcode. mne: -; mne imm, zm, zmx, zmy, ind, idx, idy, abs, rel, imp - .byte "ADC", $01, $06, $FF, $FF, $FF, $FF, $FF, $04, $FF, $FF - .byte "AAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $02 - .byte "ABA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $22 - .byte "ADC", $01, $06, $FF, $FF, $FF, $FF, $FF, $04, $FF, $FF - .byte "AND", $21, $26, $FF, $FF, $FF, $FF, $FF, $24, $FF, $FF - .byte "ARB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F2 - .byte "ASR", $F1, $F6, $FF, $FF, $FF, $FF, $FF, $F4, $FF, $FF - .byte "BCC", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $80, $FF - .byte "BCS", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $70, $FF - .byte "BEQ", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $90, $FF - .byte "BNE", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $A0, $FF - .byte "BNG", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $60, $FF - .byte "BPO", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $50, $FF - .byte "BRA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $D0, $FF - .byte "BRK", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $68 - .byte "BVC", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $C0, $FF - .byte "BVS", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $B0, $FF - .byte "CAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $B2 - .byte "CLC", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $08 - .byte "CLI", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $28 - .byte "CLV", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $48 - .byte "CMP", $B1, $B6, $FF, $FF, $25, $7D, $7C, $B4, $FF, $FF - .byte "CPB", $2A, $2D, $FF, $FF, $55, $AD, $AC, $2C, $FF, $FF - .byte "CPS", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $00 - .byte "CPX", $3A, $4D, $FF, $FF, $FF, $FF, $FF, $3C, $FF, $FF - .byte "CPY", $4A, $3D, $FF, $FF, $FF, $FF, $FF, $4C, $FF, $FF - .byte "DAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $A2 - .byte "DEB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $C2 - .byte "DEC", $FF, $0D, $FF, $FF, $FF, $FF, $FF, $0C, $FF, $0A - .byte "DEX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $09 - .byte "DEY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $29 - .byte "DIV", $A1, $A6, $FF, $FF, $FF, $FF, $FF, $A4, $FF, $FF - .byte "INB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $D2 - .byte "INC", $FF, $1D, $FF, $FF, $FF, $FF, $FF, $1C, $FF, $1A - .byte "INX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $19 - .byte "INY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $39 - .byte "JMP", $FF, $30, $FF, $FF, $B5, $FF, $FF, $10, $FF, $FF - .byte "JSR", $FF, $40, $FF, $FF, $A5, $FF, $FF, $20, $FF, $FF - .byte "LDA", $C1, $C6, $B8, $78, $05, $5D, $5C, $C4, $FF, $FF - .byte "LDB", $D1, $D6, $D8, $98, $35, $8D, $8C, $D4, $FF, $FF - .byte "LDX", $B9, $BD, $FF, $FF, $85, $FF, $FF, $BC, $FF, $FF - .byte "LDY", $E1, $E6, $FF, $FF, $65, $FF, $FF, $E4, $FF, $FF - .byte "LLB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $52 - .byte "LRB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $62 - .byte "LSL", $51, $56, $FF, $FF, $FF, $FF, $FF, $54, $FF, $FF - .byte "LSR", $61, $66, $FF, $FF, $FF, $FF, $FF, $64, $FF, $FF - .byte "MAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $92 - .byte "MUL", $91, $96, $FF, $FF, $FF, $FF, $FF, $94, $FF, $FF - .byte "NOP", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $EA - .byte "OAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $32 - .byte "ORA", $31, $36, $FF, $FF, $FF, $FF, $FF, $34, $FF, $FF - .byte "PHA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $79 - .byte "PHB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $99 - .byte "PHP", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $59 - .byte "PHX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $E9 - .byte "PHY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $C9 - .byte "PLA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $89 - .byte "PLB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $A9 - .byte "PLP", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $69 - .byte "PLX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F9 - .byte "PLY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $D9 - .byte "RLB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $72 - .byte "ROL", $71, $76, $FF, $FF, $FF, $FF, $FF, $74, $FF, $FF - .byte "ROR", $81, $86, $FF, $FF, $FF, $FF, $FF, $84, $FF, $FF - .byte "RRB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $82 - .byte "RTI", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $F0 - .byte "RTS", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $E0 - .byte "SAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $12 - .byte "SBC", $11, $16, $FF, $FF, $FF, $FF, $FF, $14, $FF, $FF - .byte "SEC", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $18 - .byte "SEI", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $38 - .byte "STA", $FF, $CD, $C8, $88, $15, $6D, $6C, $CC, $FF, $FF - .byte "STB", $FF, $DD, $E8, $A8, $45, $9D, $9C, $DC, $FF, $FF - .byte "STX", $FF, $FD, $FF, $FF, $95, $FF, $FF, $FC, $FF, $FF - .byte "STY", $FF, $ED, $FF, $FF, $75, $FF, $FF, $EC, $FF, $FF - .byte "TAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $5A - .byte "TAX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $9A - .byte "TAY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $7A - .byte "TBA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $6A - .byte "TSX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $DA - .byte "TXA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $AA - .byte "TXS", $FA, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF - .byte "TXY", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $CA - .byte "TYA", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $8A - .byte "TYX", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $BA - .byte "WAI", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $58 - .byte "XAB", $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF, $42 - .byte "XOR", $41, $46, $FF, $FF, $FF, $FF, $FF, $44, $FF, $FF + .byte "ADC" + .word IMM|ZM|ABS|BREG + .byte $01 + + .byte "AND" + .word IMM|ZM|ABS|BREG + .byte $41 + + .byte "ASR" + .word IMM|ZM|ABS|BREG + .byte $62 + + .byte "BCC" + .word REL + .byte $A0 + + .byte "BCS" + .word REL + .byte $90 + + .byte "BEQ" + .word REL + .byte $B0 + + .byte "BNE" + .word REL + .byte $C0 + + .byte "BNG" + .word REL + .byte $80 + + .byte "BPO" + .word REL + .byte $70 + + .byte "BRA" + .word REL + .byte $F0 + + .byte "BRK" + .word IMPL + .byte $69 + + .byte "BVC" + .word REL + .byte $E0 + + .byte "BVS" + .word REL + .byte $D0 + + .byte "CLC" + .word IMPL + .byte $09 + + .byte "CLI" + .word IMPL + .byte $29 + + .byte "CLV" + .word IMPL + .byte $49 + + .byte "CMP" + .word IMM|ZM|IND|INDY|ABS|BREG|INDX2 + .byte $82 + + .byte "CPB" + .word IMM|ZM|IND|INDY|ABS|INDX2 + .byte $04 + + .byte "CPS" + .word IMPL + .byte $00 + + .byte "CPX" + .word IMM|ZM|IND|ABS + .byte $24 + + .byte "CPY" + .word IMM|ZM|IND|ABS + .byte $44 + + .byte "DEB" + .word IMPL + .byte $99 + + .byte "DEC" + .word IMPL|ZM|ABS + .byte $84 + + .byte "DEX" + .word IMPL + .byte $B9 + + .byte "DEY" + .word IMPL + .byte $79 + + .byte "DIV" + .word IMM|ZM|ABS|BREG + .byte $42 + + .byte "INB" + .word IMPL + .byte $A9 + + .byte "INC" + .word IMPL|ZM|ABS + .byte $A4 + + .byte "INX" + .word IMPL + .byte $C9 + + .byte "INY" + .word IMPL + .byte $89 + + .byte "JMP" + .word ABS|IND|ZM2 + .byte $00 + + .byte "JSR" + .word ABS|IND|ZM2 + .byte $20 + + .byte "LDA" + .word IMM|ZM|ZMX|ZMY|IND|INDX|INDY|ABS + .byte $C2 + + .byte "LDB" + .word IMM|ZM|ZMX|ZMY|IND|INDX|INDY|ABS + .byte $E2 + + .byte "LDX" + .word IMM|ZM|IND|ABS + .byte $64 + + .byte "LDY" + .word IMM|ZM|IND|ABS + .byte $A2 + + .byte "LSL" + .word IMM|ZM|ABS|BREG + .byte $A1 + + .byte "LSR" + .word IMM|ZM|ABS|BREG + .byte $C1 + + .byte "MUL" + .word IMM|ZM|ABS|BREG + .byte $22 + + .byte "NOP" + .word IMPL + .byte $EA + + .byte "ORA" + .word IMM|ZM|ABS|BREG + .byte $61 + + .byte "PHA" + .word IMPL + .byte $8E + + .byte "PHB" + .word IMPL + .byte $AE + + .byte "PHP" + .word IMPL + .byte $6E + + .byte "PHX" + .word IMPL + .byte $EE + + .byte "PHY" + .word IMPL + .byte $CE + + .byte "PLA" + .word IMPL + .byte $9E + + .byte "PLB" + .word IMPL + .byte $BE + + .byte "PLP" + .word IMPL + .byte $7E + + .byte "PLX" + .word IMPL + .byte $FE + + .byte "PLY" + .word IMPL + .byte $DE + + .byte "ROL" + .word IMM|ZM|ABS|BREG + .byte $E1 + + .byte "ROR" + .word IMM|ZM|ABS|BREG + .byte $02 + + .byte "RTI" + .word IMPL + .byte $60 + + .byte "RTS" + .word IMPL + .byte $50 + + .byte "SBC" + .word IMM|ZM|ABS|BREG + .byte $21 + + .byte "SEC" + .word IMPL + .byte $19 + + .byte "SEI" + .word IMPL + .byte $39 + + .byte "STA" + .word ZM|ZMX|ZMY|IND|INDX|INDY|ABS + .byte $28 + + .byte "STB" + .word ZM|ZMX|ZMY|IND|INDX|INDY|ABS + .byte $48 + + .byte "STX" + .word ZM|IND|ABS + .byte $68 + + .byte "STY" + .word ZM|IND|ABS + .byte $08 + + .byte "TAB" + .word IMPL + .byte $0A + + .byte "TAX" + .word IMPL + .byte $4A + + .byte "TAY" + .word IMPL + .byte $2A + + .byte "TBA" + .word IMPL + .byte $1A + + .byte "TSX" + .word IMPL + .byte $8A + + .byte "TXA" + .word IMPL + .byte $5A + + .byte "TXS" + .word IMPL|IMM + .byte $9A + + .byte "TXY" + .word IMPL + .byte $7A + + .byte "TYA" + .word IMPL + .byte $3A + + .byte "TYX" + .word IMPL + .byte $6A + + .byte "WAI" + .word IMPL + .byte $59 + + .byte "XOR" + .word IMM|ZM|ABS|BREG + .byte $81 + ; Command subroutine table. cmd_srt: @@ -397,6 +614,7 @@ swtab: .word ptok_min ; PTOK_MINUS .word ptok_gt ; PTOK_GT .word ptok_lt ; PTOK_LT + .word ptok_pipe ; PTOK_PIPE .word ptok_lbrk ; PTOK_LBRAK .word ptok_rbrk ; PTOK_RBRAK .word ptok_com ; PTOK_COMMA @@ -421,10 +639,10 @@ hex_char: ; Compare, and return table for pre-tokens. ptok_tab: - .byte ".@:=+-><(),xysp\"\'#;$%" + .byte ".@:=+-><|(),xysp\"\'#;$%" ; Compare, and return table for isdelm. dtab: .byte "\n,\"\' \\" ; Compare, and return table for isdelm2. dtab2: - .byte "),.+<>-=;\n" + .byte "),.+<|>-=;\n" -- cgit v1.2.3-13-gbd6f