Implemented the rest of the unsigned integer operations
This commit is contained in:
parent
f9a715e3b1
commit
1ade055e09
5 changed files with 46 additions and 4 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,2 +1,2 @@
|
||||||
build
|
build
|
||||||
|
flagvm
|
||||||
|
|
|
||||||
13
src/interp.c
13
src/interp.c
|
|
@ -29,7 +29,6 @@ uint64_t registers[256];
|
||||||
bool isMMIO(uint64_t addr) {
|
bool isMMIO(uint64_t addr) {
|
||||||
if (addr == UART_TX) return true;
|
if (addr == UART_TX) return true;
|
||||||
if (addr == UART_RX) return true;
|
if (addr == UART_RX) return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -168,12 +167,24 @@ int main(int argc, char **argv) {
|
||||||
registers[dst] += registers[src];
|
registers[dst] += registers[src];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0x70: { // MulR64
|
||||||
|
unsigned char dst = inputs[0];
|
||||||
|
unsigned char src = inputs[1];
|
||||||
|
registers[dst] *= registers[src];
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0x72: { // DivR64
|
case 0x72: { // DivR64
|
||||||
unsigned char dst = inputs[0];
|
unsigned char dst = inputs[0];
|
||||||
unsigned char src = inputs[1];
|
unsigned char src = inputs[1];
|
||||||
registers[dst] /= registers[src];
|
registers[dst] /= registers[src];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case 0x74: { // ModR64
|
||||||
|
unsigned char dst = inputs[0];
|
||||||
|
unsigned char src = inputs[1];
|
||||||
|
registers[dst] %= registers[src];
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0xC0: { // Jmp
|
case 0xC0: { // Jmp
|
||||||
unsigned char addr = inputs[0];
|
unsigned char addr = inputs[0];
|
||||||
xPc = registers[addr];
|
xPc = registers[addr];
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,7 @@ define r9 9
|
||||||
define r10 10
|
define r10 10
|
||||||
define r11 11
|
define r11 11
|
||||||
define r12 12
|
define r12 12
|
||||||
define r13 13
|
define r13 13 define r14 14
|
||||||
define r14 14
|
|
||||||
define r15 15
|
define r15 15
|
||||||
define r16 16
|
define r16 16
|
||||||
define r17 17
|
define r17 17
|
||||||
|
|
@ -236,12 +235,24 @@ macro AddR64 dst, src
|
||||||
db src
|
db src
|
||||||
end macro
|
end macro
|
||||||
|
|
||||||
|
macro MulR64 dst, src
|
||||||
|
db 0x70
|
||||||
|
db dst
|
||||||
|
db src
|
||||||
|
end macro
|
||||||
|
|
||||||
macro DivR64 dst, src
|
macro DivR64 dst, src
|
||||||
db 0x72
|
db 0x72
|
||||||
db dst
|
db dst
|
||||||
db src
|
db src
|
||||||
end macro
|
end macro
|
||||||
|
|
||||||
|
macro ModR64 dst, src
|
||||||
|
db 0x74
|
||||||
|
db dst
|
||||||
|
db src
|
||||||
|
end macro
|
||||||
|
|
||||||
macro RSetF reg
|
macro RSetF reg
|
||||||
db 0x42
|
db 0x42
|
||||||
db reg
|
db reg
|
||||||
|
|
|
||||||
10
tests/mod.asm
Normal file
10
tests/mod.asm
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
include "fvm.inc"
|
||||||
|
|
||||||
|
org 0x4000000000000000
|
||||||
|
MovI64 r95, UART_TX
|
||||||
|
MovI64 r2, 16
|
||||||
|
MovI64 r3, 3
|
||||||
|
ModR64 r2, r3
|
||||||
|
MovI64 r4, 48 ; ascii for 0
|
||||||
|
AddR64 r2, r4
|
||||||
|
St8 r2, r95
|
||||||
10
tests/mul.asm
Normal file
10
tests/mul.asm
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
include "fvm.inc"
|
||||||
|
|
||||||
|
org 0x4000000000000000
|
||||||
|
MovI64 r95, UART_TX
|
||||||
|
MovI64 r2, 2
|
||||||
|
MovI64 r3, 4
|
||||||
|
MulR64 r2, r3
|
||||||
|
MovI64 r4, 48 ; ascii for 0
|
||||||
|
AddR64 r2, r4
|
||||||
|
St8 r2, r95
|
||||||
Loading…
Add table
Add a link
Reference in a new issue