lib/expr: add bitwise operators

This commit is contained in:
Virgil Dupras 2019-11-22 17:16:51 -05:00
parent 972e8221f1
commit a03c5ac700
3 changed files with 62 additions and 2 deletions

View File

@ -90,7 +90,11 @@ this way, it's going to mess with the parser.
### Expressions
An expression is a bunch of literals or symbols assembled by operators.
Supported operators are `+`, `-`, `*`, `/` and `%` (modulo). No parenthesis yet.
Supported operators are `+`, `-`, `*`, `/`, `%` (modulo), `&` (bitwise and),
`|` (bitwise or) and `^` (bitwise xor). Bitwise operator always operate on
the whole 16-bits.
There is no parenthesis support yet.
Symbols have a different meaning depending on the application. In zasm, it's
labels and constants. In basic, it's variables.

View File

@ -117,6 +117,12 @@ exprTbl:
.dw .div
.db '%'
.dw .mod
.db '&'
.dw .and
.db 0x7c ; '|'
.dw .or
.db '^'
.dw .xor
.db 0 ; end of table
.plus:
@ -155,5 +161,40 @@ exprTbl:
.mod:
call .div
push hl \ pop ix
push hl \ pop ix
ret
.and:
push ix \ pop hl
ld a, h
and d
ld h, a
ld a, l
and e
ld l, a
push hl \ pop ix
cp a ; ensure Z
ret
.or:
push ix \ pop hl
ld a, h
or d
ld h, a
ld a, l
or e
ld l, a
push hl \ pop ix
cp a ; ensure Z
ret
.xor:
push ix \ pop hl
ld a, h
xor d
ld h, a
ld a, l
xor e
ld l, a
push hl \ pop ix
cp a ; ensure Z
ret

View File

@ -139,6 +139,12 @@ testParseExpr:
call .testEQ
ld iy, .t2
call .testEQ
ld iy, .t3
call .testEQ
ld iy, .t4
call .testEQ
ld iy, .t5
call .testEQ
ret
.testEQ:
@ -161,6 +167,15 @@ testParseExpr:
.t2:
.dw 1
.db "7%3", 0
.t3:
.dw 0x0907
.db "0x99f7&0x0f0f", 0
.t4:
.dw 0x9fff
.db "0x99f7|0x0f0f", 0
.t5:
.dw 0x96f8
.db "0x99f7^0x0f0f", 0
nexttest:
ld a, (testNum)