lib/expr: add bitwise operators
This commit is contained in:
parent
972e8221f1
commit
a03c5ac700
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user