changed behaviour of some core methods
This commit is contained in:
parent
7ecf1d5036
commit
a3583fa3ba
|
@ -20,7 +20,7 @@ char bci_cm_ldi(uint8_t small_arg, machine_state_t state)
|
|||
return machine_state_t_default_afterexec(state, 1);
|
||||
}
|
||||
|
||||
// @1 -> $0
|
||||
// @($1) -> $0
|
||||
char bci_cm_ld(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
BCI_CORE_REGISTER_CHECK(small_arg);
|
||||
|
@ -33,6 +33,9 @@ char bci_cm_ld(uint8_t small_arg, machine_state_t state)
|
|||
return res;
|
||||
}
|
||||
|
||||
BCI_CORE_REGISTER_CHECK(arg);
|
||||
arg = state->data_reg[arg];
|
||||
|
||||
res = machine_state_t_get_mem(state, arg, &arg);
|
||||
if(res)
|
||||
{
|
||||
|
@ -43,7 +46,7 @@ char bci_cm_ld(uint8_t small_arg, machine_state_t state)
|
|||
return machine_state_t_default_afterexec(state, 1);
|
||||
}
|
||||
|
||||
// $0 -> @1
|
||||
// $0 -> @($1)
|
||||
char bci_cm_st(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
BCI_CORE_REGISTER_CHECK(small_arg);
|
||||
|
@ -56,6 +59,9 @@ char bci_cm_st(uint8_t small_arg, machine_state_t state)
|
|||
return res;
|
||||
}
|
||||
|
||||
BCI_CORE_REGISTER_CHECK(arg);
|
||||
arg = state->data_reg[arg];
|
||||
|
||||
res = machine_state_t_set_mem(state, arg, state->data_reg[small_arg]);
|
||||
if(res)
|
||||
{
|
||||
|
@ -250,54 +256,43 @@ char bci_cm_eq(uint8_t small_arg, machine_state_t state)
|
|||
return machine_state_t_default_afterexec(state, 0);
|
||||
}
|
||||
|
||||
// #1 -> $pc; 0 -> $st_reg
|
||||
// $0 -> $pc; 0 -> $st_reg
|
||||
char bci_cm_jmp(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
uint16_t arg;
|
||||
char res = machine_state_t_get_word(state, state->program_counter + 1, &arg);
|
||||
|
||||
if(res)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
BCI_CORE_REGISTER_CHECK(small_arg)
|
||||
uint16_t arg = state->data_reg[arg];
|
||||
|
||||
state->status_reg = 0;
|
||||
state->program_counter = arg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// if($st_reg): #1 -> $pc; 0 -> $st_reg
|
||||
// if($st_reg): $0 -> $pc; 0 -> $st_reg
|
||||
// else: do nothing
|
||||
char bci_cm_cjmp(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
uint16_t arg;
|
||||
char res = machine_state_t_get_word(state, state->program_counter + 1, &arg);
|
||||
|
||||
if(res)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
BCI_CORE_REGISTER_CHECK(small_arg)
|
||||
arg = state->data_reg[arg];
|
||||
|
||||
if(state->status_reg)
|
||||
{
|
||||
state->program_counter = arg;
|
||||
return 0;
|
||||
}
|
||||
state->status_reg = 0;
|
||||
|
||||
return machine_state_t_default_afterexec(state, 1);
|
||||
return machine_state_t_default_afterexec(state, 0);
|
||||
}
|
||||
// $pc -> @stack
|
||||
// #1 -> $pc
|
||||
// $0 -> $pc
|
||||
char bci_cm_call(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
uint16_t arg;
|
||||
char res = machine_state_t_get_word(state, state->program_counter + 1, &arg);
|
||||
BCI_CORE_REGISTER_CHECK(small_arg)
|
||||
arg = state->data_reg[arg];
|
||||
|
||||
if(res)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
|
||||
res = bci_stack_t_push(&(state->stack), state->program_counter);
|
||||
char res = bci_stack_t_push(&(state->stack), state->program_counter);
|
||||
if(res)
|
||||
{
|
||||
return res;
|
||||
|
@ -305,17 +300,13 @@ char bci_cm_call(uint8_t small_arg, machine_state_t state)
|
|||
state->program_counter = arg;
|
||||
return 0;
|
||||
}
|
||||
// if($st_reg): $pc -> @stack; #1 -> $pc; 0 -> $st_reg
|
||||
// if($st_reg): $pc -> @stack; $0 -> $pc; 0 -> $st_reg
|
||||
// else: do nothing
|
||||
char bci_cm_ccall(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
uint16_t arg;
|
||||
char res = machine_state_t_get_word(state, state->program_counter + 1, &arg);
|
||||
|
||||
if(res)
|
||||
{
|
||||
return res;
|
||||
}
|
||||
BCI_CORE_REGISTER_CHECK(small_arg);
|
||||
arg = state->data_reg[small_arg];
|
||||
|
||||
if(state->status_reg)
|
||||
{
|
||||
|
@ -328,7 +319,8 @@ char bci_cm_ccall(uint8_t small_arg, machine_state_t state)
|
|||
return 0;
|
||||
}
|
||||
|
||||
return machine_state_t_default_afterexec(state, 1);
|
||||
state->status_reg = 0;
|
||||
return machine_state_t_default_afterexec(state, 0);
|
||||
}
|
||||
// @stack -> $pc
|
||||
char bci_cm_ret(uint8_t small_arg, machine_state_t state)
|
||||
|
@ -354,7 +346,21 @@ char bci_cm_cl(uint8_t small_arg, machine_state_t state)
|
|||
// 1 -> $su_reg
|
||||
char bci_cm_stop(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
state->shutdown_reg = 0;
|
||||
state->shutdown_reg = 1;
|
||||
return machine_state_t_default_afterexec(state, 0);
|
||||
}
|
||||
|
||||
// if($st_reg): 0 -> $st_reg
|
||||
// else: 1 -> $st_reg
|
||||
char bci_cm_not(uint8_t small_arg, machine_state_t state)
|
||||
{
|
||||
if(state->status_reg)
|
||||
{
|
||||
state->status_reg = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
status->status_reg = 1;
|
||||
}
|
||||
return machine_state_t_default_afterexec(state, 0);
|
||||
}
|
||||
|
|
|
@ -32,10 +32,10 @@
|
|||
// #1 -> $0
|
||||
char bci_cm_ldi(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// @1 -> $0
|
||||
// @($1) -> $0
|
||||
char bci_cm_ld(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// $0 -> @1
|
||||
// $0 -> @($1)
|
||||
char bci_cm_st(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
|
||||
|
@ -82,18 +82,22 @@ char bci_cm_le(uint8_t small_arg, machine_state_t state);
|
|||
// else: 0 -> $st_reg
|
||||
char bci_cm_eq(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// #1 -> $pc
|
||||
// if($st_reg): 0 -> $st_reg
|
||||
// else: 1 -> $st_reg
|
||||
char bci_cm_not(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// $1 -> $pc
|
||||
char bci_cm_jmp(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// if($st_reg): #1 -> $pc
|
||||
// if($st_reg): $1 -> $pc
|
||||
// else: do nothing
|
||||
char bci_cm_cjmp(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// $pc -> @stack
|
||||
// #1 -> $pc
|
||||
// $0 -> $pc
|
||||
char bci_cm_call(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
// if($st_reg): $pc -> @stack; #1 -> $pc
|
||||
// if($st_reg): $pc -> @stack; $0 -> $pc
|
||||
// else: do nothing
|
||||
char bci_cm_ccall(uint8_t small_arg, machine_state_t state);
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user