Some changes
This commit is contained in:
79
cpu/core.c
79
cpu/core.c
@@ -93,10 +93,10 @@ void step(CPU *cpu) {
|
||||
write_mem(cpu, addrTemp, temp - 1);
|
||||
break;
|
||||
|
||||
case MOV_RN_IMM:
|
||||
case MOV_IMM_RN:
|
||||
//Load from immediate to register
|
||||
reg1 = read_reg_number(cpu);
|
||||
imm = read_mem(cpu, cpu->pc++);
|
||||
reg1 = read_reg_number(cpu);
|
||||
cpu->regs[reg1] = imm;
|
||||
break;
|
||||
|
||||
@@ -372,7 +372,43 @@ void step(CPU *cpu) {
|
||||
break;
|
||||
}
|
||||
|
||||
case JMP_BIT_SET_RN:
|
||||
case BITS_RN: {
|
||||
// Jump if bit in register set
|
||||
reg1 = read_reg_number(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
|
||||
temp = read_reg(cpu, reg1);
|
||||
if (reg1 >= REG_COUNT) {
|
||||
reg1 = REG_COUNT - 1;
|
||||
}
|
||||
if (bit > 7) {
|
||||
bit = 7;
|
||||
}
|
||||
temp |= (1 << bit);
|
||||
write_reg(cpu, reg1, temp);
|
||||
cpu->pc += CPU_INSTRUCTION_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
case BITC_RN: {
|
||||
// Jump if bit in register set
|
||||
reg1 = read_reg_number(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
|
||||
temp = read_reg(cpu, reg1);
|
||||
if (reg1 >= REG_COUNT) {
|
||||
reg1 = REG_COUNT - 1;
|
||||
}
|
||||
if (bit > 7) {
|
||||
bit = 7;
|
||||
}
|
||||
temp &= ~(1 << bit);
|
||||
write_reg(cpu, reg1, temp);
|
||||
cpu->pc += CPU_INSTRUCTION_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
case BIT_TS_RN: {
|
||||
// Jump if bit in register set
|
||||
reg1 = read_reg_number(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
@@ -391,13 +427,40 @@ void step(CPU *cpu) {
|
||||
}
|
||||
cpu->pc += CPU_INSTRUCTION_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
case JMP_BIT_SET_ADDR: {
|
||||
case BITS_ADDR: {
|
||||
// Jump if bit in register set
|
||||
addrTemp = read_address_argument(cpu);
|
||||
if (addrTemp >= MEM_SIZE) {
|
||||
addrTemp = MEM_SIZE - 1;
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
temp = read_mem(cpu, addrTemp);
|
||||
if (bit > 7) {
|
||||
bit = 7;
|
||||
}
|
||||
temp |= (1 << bit);
|
||||
write_mem(cpu, addrTemp, temp);
|
||||
cpu->pc += CPU_INSTRUCTION_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
case BITC_ADDR: {
|
||||
// Jump if bit in register set
|
||||
addrTemp = read_address_argument(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
|
||||
temp = read_mem(cpu, addrTemp);
|
||||
if (bit > 7) {
|
||||
bit = 7;
|
||||
}
|
||||
temp &= ~(1 << bit);
|
||||
write_mem(cpu, addrTemp, temp);
|
||||
cpu->pc += CPU_INSTRUCTION_SIZE;
|
||||
break;
|
||||
}
|
||||
|
||||
case BIT_TS_ADDR: {
|
||||
// Jump if bit in register set
|
||||
addrTemp = read_address_argument(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
if (bit > 7) {
|
||||
bit = 7;
|
||||
@@ -423,7 +486,7 @@ void step(CPU *cpu) {
|
||||
break;
|
||||
}
|
||||
|
||||
case JMP_BIT_CLEAR_RN: {
|
||||
case BIT_TC_RN: {
|
||||
// Jump if bit in register set
|
||||
reg1 = read_reg_number(cpu);
|
||||
temp = read_reg(cpu, reg1);
|
||||
@@ -440,7 +503,7 @@ void step(CPU *cpu) {
|
||||
break;
|
||||
}
|
||||
|
||||
case JMP_BIT_CLEAR_ADDR: {
|
||||
case BIT_TC_ADDR: {
|
||||
// Jump if bit in register set
|
||||
addrTemp = read_address_argument(cpu);
|
||||
uint8_t bit = read_mem(cpu, cpu->pc++);
|
||||
|
Reference in New Issue
Block a user