Some changes

This commit is contained in:
2025-02-16 17:28:10 +01:00
parent 0fc4040ad7
commit 4d3755e2ce
18 changed files with 562 additions and 80 deletions

View File

@@ -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++);