Cleaned up code
This commit is contained in:
@@ -7,10 +7,7 @@ LIBS != pkg-config --libs-only-l --libs-only-L sdl3 sdl3-image
|
||||
|
||||
HARE_SOURCES != find . -name '*.ha'
|
||||
|
||||
build: build/meadow
|
||||
|
||||
run: build
|
||||
build/meadow monospace.rom
|
||||
build: build/meadow build/meadowcli
|
||||
|
||||
build/meadow: $(HARE_SOURCES)
|
||||
hare build $(LIBS) -o build/meadow cmd/meadow
|
||||
@@ -18,5 +15,7 @@ build/meadow: $(HARE_SOURCES)
|
||||
build/meadowcli: $(HARE_SOURCES)
|
||||
hare build -o build/meadowcli cmd/meadowcli
|
||||
|
||||
cli: build/meadowcli
|
||||
build/meadowcli factor.rom
|
||||
install: build/meadow
|
||||
cp ./build/meadow ~/.local/bin/
|
||||
uninstall:
|
||||
rm ~/.local/bin/meadow
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ export fn main() void = {
|
||||
let run = true;
|
||||
let ev = sdl3::Event { ... };
|
||||
if(len(os::args) < 2){
|
||||
fmt::printf("usage: %s file.rom [args..]\n")!;
|
||||
fmt::printf("usage: meadow file.rom [args..]\n")!;
|
||||
return;
|
||||
};
|
||||
let path = os::args[1];
|
||||
|
||||
+3
-107
@@ -8,12 +8,6 @@ use time;
|
||||
use time::date;
|
||||
use strings;
|
||||
|
||||
// let console_vector: u16 = 0;
|
||||
// let ram: [0x10000] u8 = [0...];
|
||||
// let dev: [0x100] u8 = [0...];
|
||||
// let ptr: [2] u8 = [0...];
|
||||
// let stk: [2][0x100] u8 = [[0...],[0...]];
|
||||
|
||||
export type uxn = struct {
|
||||
pc: u16,
|
||||
console_vector: u16,
|
||||
@@ -163,13 +157,11 @@ fn emu_dei(port: u8, state: *uxn) u8 = {
|
||||
return if(zone.dst) {yield 1;} else {yield 0;}; //TODO this isn't tested
|
||||
case =>
|
||||
return state.dev[port];
|
||||
// fmt::printfln("Read {:x} from port {:x}", val, port)!;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
export fn emu_deo(port: u8, value: u8, state: *uxn) void = {
|
||||
// fmt::printfln("Writing {:x} to port {:x}", value, port)!;
|
||||
state.dev[port] = value;
|
||||
switch(port) {
|
||||
case 0x03 =>
|
||||
@@ -187,7 +179,6 @@ export fn emu_deo(port: u8, value: u8, state: *uxn) void = {
|
||||
const high = state.dev[0x10];
|
||||
const low = value;
|
||||
state.console_vector = short_from_bytes(high,low);
|
||||
// fmt::printfln("Setting console_vector to: {:x}", console_vector)!;
|
||||
case 0x18 =>
|
||||
fmt::print(value: rune)!;
|
||||
case 0x19 =>
|
||||
@@ -254,7 +245,7 @@ fn deo_expansion(addr: u16, state: *uxn) void = {
|
||||
const bank = short_from_bytes(state.ram[addr+3],state.ram[addr+4]): u32;
|
||||
const dstaddr = short_from_bytes(state.ram[addr+5],state.ram[addr+6]): u32;
|
||||
const value = state.ram[addr+7];
|
||||
fmt::printfln("expansion fill: bank: {:x} addr: {:x} value: {:x} | length: {:x}",bank,dstaddr,value,length)!;
|
||||
// fmt::printfln("expansion fill: bank: {:x} addr: {:x} value: {:x} | length: {:x}",bank,dstaddr,value,length)!;
|
||||
if(bank < numbanks) for(let i: u16 =0; i < length; i+=1){
|
||||
state.ram[bank * banksize + dstaddr + i] = value;
|
||||
};
|
||||
@@ -263,7 +254,7 @@ fn deo_expansion(addr: u16, state: *uxn) void = {
|
||||
const srcaddr = short_from_bytes(state.ram[addr+5],state.ram[addr+6]): u32;
|
||||
const dstbank = short_from_bytes(state.ram[addr+7],state.ram[addr+8]): u32;
|
||||
const dstaddr = short_from_bytes(state.ram[addr+9],state.ram[addr+10]): u32;
|
||||
fmt::printfln("Cpyl: src: {:x} <-> {:x} dst: {:x} <-> {:x} | length: {:x}",srcbank,srcaddr,dstbank,dstaddr,length)!;
|
||||
// fmt::printfln("Cpyl: src: {:x} <-> {:x} dst: {:x} <-> {:x} | length: {:x}",srcbank,srcaddr,dstbank,dstaddr,length)!;
|
||||
if(srcbank < numbanks && dstbank < numbanks) for(let i: u16 =0; i < length; i+=1){
|
||||
const readval = state.ram[srcbank * banksize + srcaddr + i];
|
||||
state.ram[dstbank * banksize + dstaddr + i] = readval;
|
||||
@@ -273,7 +264,7 @@ fn deo_expansion(addr: u16, state: *uxn) void = {
|
||||
const srcaddr = short_from_bytes(state.ram[addr+5],state.ram[addr+6]): u32;
|
||||
const dstbank = short_from_bytes(state.ram[addr+7],state.ram[addr+8]): u32;
|
||||
const dstaddr = short_from_bytes(state.ram[addr+9],state.ram[addr+10]): u32;
|
||||
fmt::printfln("Cpyr: src: {:x} <-> {:x} dst: {:x} <-> {:x} | length: {:x}",srcbank,srcaddr,dstbank,dstaddr,length)!;
|
||||
// fmt::printfln("Cpyr: src: {:x} <-> {:x} dst: {:x} <-> {:x} | length: {:x}",srcbank,srcaddr,dstbank,dstaddr,length)!;
|
||||
if(srcbank < numbanks && dstbank < numbanks) for(let i: u16 =1; i <= length; i+=1){
|
||||
const readval = state.ram[srcbank * banksize + srcaddr + length - i];
|
||||
state.ram[dstbank * banksize + dstaddr + length - i] = readval;
|
||||
@@ -393,7 +384,6 @@ fn get_instruction(byte: u8) (instruction | error) = {
|
||||
return JSR {short = s, keep = k, ret = r};
|
||||
case 0x0f =>
|
||||
return STH {short = s, keep = k, ret = r};
|
||||
|
||||
case 0x10 =>
|
||||
return LDZ {short = s, keep = k, ret = r};
|
||||
case 0x11 =>
|
||||
@@ -488,7 +478,6 @@ fn read_from_zaddr(short: bool, zaddr: u8, state: *uxn) (u8 | u16) = {
|
||||
const high = state.ram[zaddr: u16];
|
||||
const low = state.ram[(zaddr+1): u16];
|
||||
return short_from_bytes(high,low);
|
||||
|
||||
case false =>
|
||||
return state.ram[zaddr: u16];
|
||||
};
|
||||
@@ -500,7 +489,6 @@ fn write_to_zaddr(value: (u8 | u16), zaddr: u8, state: *uxn) void = {
|
||||
let low = s: u8;
|
||||
state.ram[zaddr: u16] = high;
|
||||
state.ram[(zaddr+1): u16] = low;
|
||||
|
||||
case let b: u8 =>
|
||||
state.ram[zaddr: u16] = b;
|
||||
};
|
||||
@@ -635,12 +623,10 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
state.pc += 1; //TODO verify all pc changes
|
||||
|
||||
match(inst) {
|
||||
// /* BRK */ case 0x00: return 1;
|
||||
case BRK =>
|
||||
// fmt::println("Break!")!;
|
||||
state.running = false;
|
||||
return done;
|
||||
// /* JCI */ case 0x20: if(DEC(0)) { IMM state.pc += a; } else pc += 2; break;
|
||||
case JCI =>
|
||||
const val: u8 = pop_from_stack(false, false, false, state): u8;
|
||||
if(val != 0) {
|
||||
@@ -648,15 +634,11 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
}else{
|
||||
state.pc += 2;
|
||||
};
|
||||
// /* JMI */ case 0x40: IMM pc += a; break;
|
||||
case JMI =>
|
||||
state.pc = state.pc + 2 + short_from_bytes(state.ram[state.pc],state.ram[state.pc+1]); //TODO is this signed?
|
||||
// /* JSI */ case 0x60: IMM PUx(pc, 1, 1) pc += a; break;
|
||||
case JSI =>
|
||||
push_to_stack(true, state.pc + 2, state);
|
||||
state.pc = state.pc + 2 + short_from_bytes(state.ram[state.pc],state.ram[state.pc+1]); //TODO is this signed?
|
||||
|
||||
// /* LIT */ case 0x80: INC(0) = ram[pc++]; break;
|
||||
case let lit_inst: LIT =>
|
||||
push_to_stack(lit_inst.ret, state.ram[state.pc], state);
|
||||
state.pc = state.pc + 1;
|
||||
@@ -664,7 +646,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
push_to_stack(lit_inst.ret, state.ram[state.pc],state);
|
||||
state.pc = state.pc + 1;
|
||||
};
|
||||
// /* INC */ OPC(0x01,POx(a,d),PUx(a + 1,d,r))
|
||||
case let inc_inst: INC =>
|
||||
const val = match(pop_from_stack(inc_inst.keep,inc_inst.ret,inc_inst.short,state)) {
|
||||
//TODO this whole match statement seems unnecessary
|
||||
@@ -675,24 +656,20 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
};
|
||||
|
||||
push_to_stack(inc_inst.ret,val,state);
|
||||
// /* POP */ OPC(0x02,ptr[r] -= 1 + d;,{})
|
||||
case let pop_inst: POP =>
|
||||
if(!pop_inst.keep){
|
||||
pop_from_stack(false,pop_inst.ret,pop_inst.short,state);
|
||||
};
|
||||
// /* NIP */ OPC(0x03,GOT(x) ptr[r] -= 1 + d;,PUT(x,r))
|
||||
case let nip_inst: NIP =>
|
||||
const top = pop_or_get(nip_inst,0,state);
|
||||
const bot = pop_or_get(nip_inst,1,state);
|
||||
push_to_stack(nip_inst.ret, top, state);
|
||||
// /* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x,r) PUT(y,r))
|
||||
case let swp_inst: SWP =>
|
||||
const top = pop_or_get(swp_inst,0,state);
|
||||
const bot = pop_or_get(swp_inst,1,state);
|
||||
|
||||
push_to_stack(swp_inst.ret, top, state);
|
||||
push_to_stack(swp_inst.ret, bot, state);
|
||||
// /* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y,r) PUT(x,r) PUT(z,r))
|
||||
case let rot_inst: ROT =>
|
||||
const top = pop_or_get(rot_inst,0,state);
|
||||
const mid = pop_or_get(rot_inst,1,state);
|
||||
@@ -701,12 +678,10 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
push_to_stack(rot_inst.ret, mid, state);
|
||||
push_to_stack(rot_inst.ret, top, state);
|
||||
push_to_stack(rot_inst.ret, bot, state);
|
||||
// /* DUP */ OPC(0x06,GOT(x),PUT(x,r) PUT(x,r))
|
||||
case let dup_inst: DUP =>
|
||||
const val = pop_from_stack(dup_inst.keep, dup_inst.ret, dup_inst.short, state);
|
||||
push_to_stack(dup_inst.ret, val, state);
|
||||
push_to_stack(dup_inst.ret, val, state);
|
||||
// /* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y,r) PUT(x,r) PUT(y,r))
|
||||
case let ovr_inst: OVR =>
|
||||
const top = pop_or_get(ovr_inst,0,state);
|
||||
const bot = pop_or_get(ovr_inst,1,state);
|
||||
@@ -714,7 +689,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
push_to_stack(ovr_inst.ret, bot, state);
|
||||
push_to_stack(ovr_inst.ret, top, state);
|
||||
push_to_stack(ovr_inst.ret, bot, state);
|
||||
// /* EQU */ OPC(0x08,POx(a,d) POx(b,d),PUx(b == a,0,r))
|
||||
case let equ_inst: EQU =>
|
||||
const top = pop_or_get(equ_inst,0,state);
|
||||
const bot = pop_or_get(equ_inst,1,state);
|
||||
@@ -725,21 +699,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
} else {
|
||||
yield 0;
|
||||
};
|
||||
// let val: u8 = if(!equ_inst.short){
|
||||
// yield if(bot: u8 == top: u8){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// } else {
|
||||
// yield if(bot: u16 == top: u16){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// };
|
||||
push_to_stack(equ_inst.ret, val, state);
|
||||
// /* NEQ */ OPC(0x09,POx(a,d) POx(b,d),PUx(b != a,0,r))
|
||||
case let neq_inst: NEQ =>
|
||||
const top = pop_or_get(neq_inst,0,state);
|
||||
const bot = pop_or_get(neq_inst,1,state);
|
||||
@@ -750,21 +710,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
} else {
|
||||
yield 0;
|
||||
};
|
||||
// let val: u8 = if(!neq_inst.short){
|
||||
// yield if(bot: u8 != top: u8){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// } else {
|
||||
// yield if(bot: u16 != top: u16){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// };
|
||||
push_to_stack(neq_inst.ret, val, state);
|
||||
// /* GTH */ OPC(0x0a,POx(a,d) POx(b,d),PUx(b > a,0,r))
|
||||
case let gth_inst: GTH =>
|
||||
const top = pop_or_get(gth_inst,0,state);
|
||||
const bot = pop_or_get(gth_inst,1,state);
|
||||
@@ -775,21 +721,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
} else {
|
||||
yield 0;
|
||||
};
|
||||
// let val: u8 = if(!gth_inst.short){
|
||||
// yield if(bot: u8 > top: u8){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// } else {
|
||||
// yield if(bot: u16 > top: u16){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// };
|
||||
push_to_stack(gth_inst.ret, val, state);
|
||||
// /* LTH */ OPC(0x0b,POx(a,d) POx(b,d),PUx(b < a,0,r))
|
||||
case let lth_inst: LTH =>
|
||||
const top = pop_or_get(lth_inst,0,state);
|
||||
const bot = pop_or_get(lth_inst,1,state);
|
||||
@@ -800,21 +732,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
} else {
|
||||
yield 0;
|
||||
};
|
||||
// let val: u8 = if(!lth_inst.short){
|
||||
// yield if(bot: u8 < top: u8){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// } else {
|
||||
// yield if(bot: u16 < top: u16){
|
||||
// yield 1;
|
||||
// } else {
|
||||
// yield 0;
|
||||
// };
|
||||
// };
|
||||
push_to_stack(lth_inst.ret, val, state);
|
||||
// /* JMP */ OPC(0x0c,POx(a,d),MOV)
|
||||
case let jmp_inst: JMP =>
|
||||
const addr = pop_or_get(jmp_inst,0,state);
|
||||
match(addr) {
|
||||
@@ -825,8 +743,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
case let s: u16 =>
|
||||
state.pc = s;
|
||||
};
|
||||
|
||||
// /* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV)
|
||||
case let jcn_inst: JCN =>
|
||||
const addr = pop_or_get(jcn_inst,0,state);
|
||||
const cond: u8 = pop_or_peek(normal_op {keep = jcn_inst.keep,
|
||||
@@ -842,7 +758,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
state.pc = s;
|
||||
};
|
||||
};
|
||||
// /* JSR */ OPC(0x0e,POx(a,d),PUx(pc,1,!r) MOV)
|
||||
case let jsr_inst: JSR =>
|
||||
let addr = pop_or_get(jsr_inst,0,state);
|
||||
push_to_stack(true, state.pc, state);
|
||||
@@ -854,45 +769,36 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
state.pc = s;
|
||||
};
|
||||
|
||||
// /* STH */ OPC(0x0f,GOT(x),PUT(x,!r))
|
||||
case let sth_inst: STH =>
|
||||
const val = pop_from_stack(sth_inst.keep,sth_inst.ret,sth_inst.short,state);
|
||||
push_to_stack(!sth_inst.ret, val, state);
|
||||
// /* LDZ */ OPC(0x10,POx(a,0),PEK(a, x, 0xff))
|
||||
case let ldz_inst: LDZ =>
|
||||
let addr: u8 = pop_from_stack(ldz_inst.keep, ldz_inst.ret, false, state): u8;
|
||||
let val = read_from_zaddr(ldz_inst.short,addr,state);
|
||||
push_to_stack(ldz_inst.ret, val, state);
|
||||
// /* STZ */ OPC(0x11,POx(a,0) GOT(y),POK(a, y, 0xff))
|
||||
case let stz_inst: STZ =>
|
||||
let addr: u8 = pop_or_peek(normal_op{short = false, keep = stz_inst.keep, ret = stz_inst.ret}, 0, state): u8;
|
||||
let val = pop_or_peek(stz_inst,1,state);
|
||||
write_to_zaddr(val,addr,state);
|
||||
// /* LDR */ OPC(0x12,POx(a,0),PEK(pc + (Sint8)a, x, 0xffff))
|
||||
case let ldr_inst: LDR =>
|
||||
let reladdr = (pop_from_stack(ldr_inst.keep, ldr_inst.ret, false, state): u16): i8;
|
||||
let addr: u16 = (state.pc: u32: i32 + reladdr): u16;
|
||||
let val = read_from_addr(ldr_inst.short,addr,state);
|
||||
push_to_stack(ldr_inst.ret, val, state);
|
||||
// /* STR */ OPC(0x13,POx(a,0) GOT(y),POK(pc + (Sint8)a, y, 0xffff))
|
||||
case let str_inst: STR =>
|
||||
let reladdr = (pop_or_peek(normal_op{short = false, keep = str_inst.keep, ret = str_inst.ret}, 0, state): u16 & 0x00FF): u8: i8;
|
||||
let addr: u16 = (state.pc: u32: i32 + reladdr): u16;
|
||||
let val = pop_or_peek(str_inst,1,state);
|
||||
write_to_addr(val,addr,state);
|
||||
// /* LDA */ OPC(0x14,POx(a,1),PEK(a, x, 0xffff))
|
||||
case let lda_inst: LDA =>
|
||||
let addr: u16 = pop_from_stack(lda_inst.keep, lda_inst.ret, true, state): u16;
|
||||
let val = read_from_addr(lda_inst.short,addr,state);
|
||||
push_to_stack(lda_inst.ret, val, state);
|
||||
// /* STA */ OPC(0x15,POx(a,1) GOT(y),POK(a, y, 0xffff))
|
||||
case let sta_inst: STA =>
|
||||
let addr: u16 = pop_or_peek(normal_op{short = true, keep = sta_inst.keep, ret = sta_inst.ret}, 0, state): u16 ;
|
||||
let val = pop_or_peek(sta_inst,2,state);
|
||||
write_to_addr(val,addr,state);
|
||||
// /* DEI */ OPC(0x16,POx(a,0),DEI(a, x))
|
||||
case let dei_inst: DEI =>
|
||||
// fmt::println("DEI Instruction")!;
|
||||
let port: u8 = pop_from_stack(dei_inst.keep, dei_inst.ret, false, state): u8;
|
||||
let val = if(dei_inst.short){
|
||||
yield short_from_bytes(emu_dei(port,state),emu_dei(port+1,state));
|
||||
@@ -900,7 +806,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield emu_dei(port,state);
|
||||
};
|
||||
push_to_stack(dei_inst.ret,val,state);
|
||||
// /* DEO */ OPC(0x17,POx(a,0) GOT(y),DEO(a, y))
|
||||
case let deo_inst: DEO =>
|
||||
const port: u8 = pop_or_get(normal_op{short = false, keep = deo_inst.keep, ret = deo_inst.ret}, 0, state): u8;
|
||||
const val = pop_or_peek(deo_inst,1,state);
|
||||
@@ -913,18 +818,15 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
case let b: u8 =>
|
||||
emu_deo(port,b,state);
|
||||
};
|
||||
// /* ADD */ OPC(0x18,POx(a,d) POx(b,d),PUx(b + a, d,r))
|
||||
case let add_inst: ADD =>
|
||||
let top = pop_or_get(add_inst,0,state);
|
||||
let bot = pop_or_get(add_inst,1,state);
|
||||
let res = if(!add_inst.short){
|
||||
yield (top: u8 + bot: u8);
|
||||
} else {
|
||||
// fmt::printfln("ADD2 0x{:x} + 0x{:x} = 0x{:x}",bot,top,top: u16 + bot: u16)!;
|
||||
yield (top: u16 + bot: u16);
|
||||
};
|
||||
push_to_stack(add_inst.ret, res, state);
|
||||
// /* SUB */ OPC(0x19,POx(a,d) POx(b,d),PUx(b - a, d,r))
|
||||
case let sub_inst: SUB =>
|
||||
let top = pop_or_get(sub_inst,0,state);
|
||||
let bot = pop_or_get(sub_inst,1,state);
|
||||
@@ -934,7 +836,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 - top: u16);
|
||||
};
|
||||
push_to_stack(sub_inst.ret, res, state);
|
||||
// /* MUL */ OPC(0x1a,POx(a,d) POx(b,d),PUx(b * a, d,r))
|
||||
case let mul_inst: MUL =>
|
||||
let top = pop_or_get(mul_inst,0,state);
|
||||
let bot = pop_or_get(mul_inst,1,state);
|
||||
@@ -944,7 +845,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 * top: u16);
|
||||
};
|
||||
push_to_stack(mul_inst.ret, res, state);
|
||||
// /* DIV */ OPC(0x1b,POx(a,d) POx(b,d),PUx(a ? b / a : 0, d,r))
|
||||
case let div_inst: DIV =>
|
||||
let top = pop_or_get(div_inst,0,state);
|
||||
let bot = pop_or_get(div_inst,1,state);
|
||||
@@ -961,7 +861,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 / top: u16): u16;
|
||||
};//TODO handle rounding and edge cases with division
|
||||
push_to_stack(div_inst.ret, res, state);
|
||||
// /* AND */ OPC(0x1c,POx(a,d) POx(b,d),PUx(b & a, d,r))
|
||||
case let and_inst: AND =>
|
||||
let top = pop_or_get(and_inst,0,state);
|
||||
let bot = pop_or_get(and_inst,1,state);
|
||||
@@ -971,7 +870,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 & top: u16);
|
||||
};
|
||||
push_to_stack(and_inst.ret, res, state);
|
||||
// /* ORA */ OPC(0x1d,POx(a,d) POx(b,d),PUx(b | a, d,r))
|
||||
case let ora_inst: ORA =>
|
||||
let top = pop_or_get(ora_inst,0,state);
|
||||
let bot = pop_or_get(ora_inst,1,state);
|
||||
@@ -981,7 +879,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 | top: u16);
|
||||
};
|
||||
push_to_stack(ora_inst.ret, res, state);
|
||||
// /* EOR */ OPC(0x1e,POx(a,d) POx(b,d),PUx(b ^ a, d,r))
|
||||
case let eor_inst: EOR =>
|
||||
let top = pop_or_get(eor_inst,0,state);
|
||||
let bot = pop_or_get(eor_inst,1,state);
|
||||
@@ -991,7 +888,6 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
yield (bot: u16 ^ top: u16);
|
||||
};
|
||||
push_to_stack(eor_inst.ret, res, state);
|
||||
// /* SFT */ OPC(0x1f,POx(a,0) POx(b,d),PUx(b >> (a & 0xf) << (a >> 4), d,r))
|
||||
case let sft_inst: SFT =>
|
||||
let shifts: u8 = pop_or_peek(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 0, state): u8;
|
||||
let rightshifts = shifts & 0b00001111;
|
||||
|
||||
Reference in New Issue
Block a user