Sync to tower
This commit is contained in:
123
cpu/core.c
123
cpu/core.c
@@ -47,55 +47,64 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case INC_RN:
|
case INC_RN:
|
||||||
//Increment register
|
//Increment register
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
|
temp = read_reg(cpu, reg1);
|
||||||
|
write_reg(cpu, reg1, temp + 1);
|
||||||
cpu->regs[reg1]++;
|
cpu->regs[reg1]++;
|
||||||
|
|
||||||
case INC_ADDR:
|
case INC_ADDR:
|
||||||
//Increment address
|
//Increment address
|
||||||
addrTemp = read_addr(cpu);
|
addrTemp = read_address(cpu);
|
||||||
write_mem(cpu, read_addr(cpu), read_mem(cpu, addrTemp) + 1);
|
temp = read_mem(cpu, addrTemp);
|
||||||
|
write_mem(cpu, addrTemp, temp + 1);
|
||||||
|
|
||||||
case DEC_RN:
|
case DEC_RN:
|
||||||
//Decrement register
|
//Decrement register
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1]--;
|
temp = read_reg(cpu, reg1);
|
||||||
|
write_reg(cpu, reg1, temp - 1);
|
||||||
|
cpu->regs[reg1]++;
|
||||||
|
|
||||||
case DEC_ADDR:
|
case DEC_ADDR:
|
||||||
//Decrement address
|
//Decrement address
|
||||||
addrTemp = read_addr(cpu);
|
addrTemp = read_address(cpu);
|
||||||
write_mem(cpu, addrTemp, read_mem(cpu, addrTemp) - 1);
|
temp = read_mem(cpu, addrTemp);
|
||||||
|
write_mem(cpu, addrTemp, temp - 1);
|
||||||
|
|
||||||
case MOV_RN_IMM:
|
case MOV_RN_IMM:
|
||||||
//Load from immediate to register
|
//Load from immediate to register
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] = imm;
|
cpu->regs[reg1] = imm;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOV_RN_RM:
|
case MOV_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] = cpu->regs[reg2];
|
temp = read_reg(cpu, reg1);
|
||||||
|
write_reg(cpu, reg2, temp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOV_RN_ADDR:
|
case MOV_RN_ADDR:
|
||||||
// Load from memory into register.
|
// Store register to memory
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
addrTemp = read_address(cpu);
|
||||||
cpu->regs[reg1] = read_mem(cpu, imm);
|
temp = read_reg(cpu, reg1);
|
||||||
|
write_mem(cpu, addrTemp, temp);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MOV_ADDR_RN:
|
case MOV_ADDR_RN:
|
||||||
// Store from register into memory.
|
// Load memory to register
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
addrTemp = read_address(cpu);
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
write_mem(cpu, imm, cpu->regs[reg1]);
|
temp = read
|
||||||
|
write_mem(cpu, addrTemp, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SWAP: {
|
case SWAP: {
|
||||||
// Swap contents of two registers.
|
// Swap contents of two registers.
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
temp = cpu->regs[reg1];
|
temp = cpu->regs[reg1];
|
||||||
cpu->regs[reg1] = cpu->regs[reg2];
|
cpu->regs[reg1] = cpu->regs[reg2];
|
||||||
cpu->regs[reg2] = temp;
|
cpu->regs[reg2] = temp;
|
||||||
@@ -104,57 +113,57 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case SWAPN: {
|
case SWAPN: {
|
||||||
// Swap the nibbles of a register.
|
// Swap the nibbles of a register.
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
uint8_t val = (uint8_t) cpu->regs[reg1];
|
uint8_t val = (uint8_t) cpu->regs[reg1];
|
||||||
cpu->regs[reg1] = ((val & 0x0F) << 4) | ((val & 0xF0) >> 4);
|
cpu->regs[reg1] = ((val & 0x0F) << 4) | ((val & 0xF0) >> 4);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case ADD_RN_RM:
|
case ADD_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] += cpu->regs[reg2];
|
cpu->regs[reg1] += cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ADD_RN_IMM:
|
case ADD_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] += imm;
|
cpu->regs[reg1] += imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SUB_RN_RM:
|
case SUB_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] -= cpu->regs[reg2];
|
cpu->regs[reg1] -= cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SUB_RN_IMM:
|
case SUB_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] -= imm;
|
cpu->regs[reg1] -= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUL_RN_RM:
|
case MUL_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] *= cpu->regs[reg2];
|
cpu->regs[reg1] *= cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MUL_RN_IMM:
|
case MUL_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] *= imm;
|
cpu->regs[reg1] *= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DIV_RN_RM:
|
case DIV_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
if (cpu->regs[reg2] == 0) {
|
if (cpu->regs[reg2] == 0) {
|
||||||
printf("Error: Division by zero!\n");
|
printf("Error: Division by zero!\n");
|
||||||
cpu->mode = Error;
|
cpu->mode = Error;
|
||||||
@@ -165,7 +174,7 @@ void step(CPU *cpu) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DIV_RN_IMM:
|
case DIV_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
if (imm == 0) {
|
if (imm == 0) {
|
||||||
printf("Error: Division by zero!\n");
|
printf("Error: Division by zero!\n");
|
||||||
@@ -177,8 +186,8 @@ void step(CPU *cpu) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MOD_RN_RM:
|
case MOD_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
if (cpu->regs[reg2] == 0) {
|
if (cpu->regs[reg2] == 0) {
|
||||||
printf("Error: Modulo by zero!\n");
|
printf("Error: Modulo by zero!\n");
|
||||||
cpu->mode = Error;
|
cpu->mode = Error;
|
||||||
@@ -189,7 +198,7 @@ void step(CPU *cpu) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case MOD_RN_IMM:
|
case MOD_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
if (imm == 0) {
|
if (imm == 0) {
|
||||||
printf("Error: Modulo by zero!\n");
|
printf("Error: Modulo by zero!\n");
|
||||||
@@ -201,75 +210,75 @@ void step(CPU *cpu) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case NEG_RN:
|
case NEG_RN:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] = -((int32_t) cpu->regs[reg1]);
|
cpu->regs[reg1] = -((int32_t) cpu->regs[reg1]);
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AND_RN_RM:
|
case AND_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] &= cpu->regs[reg2];
|
cpu->regs[reg1] &= cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AND_RN_IMM:
|
case AND_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] &= imm;
|
cpu->regs[reg1] &= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OR_RN_RM:
|
case OR_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] |= cpu->regs[reg2];
|
cpu->regs[reg1] |= cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OR_RN_IMM:
|
case OR_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] |= imm;
|
cpu->regs[reg1] |= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XOR_RN_RM:
|
case XOR_RN_RM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] ^= cpu->regs[reg2];
|
cpu->regs[reg1] ^= cpu->regs[reg2];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case XOR_RN_IMM:
|
case XOR_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] ^= imm;
|
cpu->regs[reg1] ^= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NOT_RN:
|
case NOT_RN:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] = ~cpu->regs[reg1];
|
cpu->regs[reg1] = ~cpu->regs[reg1];
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHL_RN_IMM:
|
case SHL_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] <<= imm;
|
cpu->regs[reg1] <<= imm;
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SHR_RN_IMM:
|
case SHR_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
cpu->regs[reg1] >>= imm; // Logical right shift (assuming unsigned value)
|
cpu->regs[reg1] >>= imm; // Logical right shift (assuming unsigned value)
|
||||||
set_flags(cpu, cpu->regs[reg1]);
|
set_flags(cpu, cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SAR_RN_IMM:
|
case SAR_RN_IMM:
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
imm = read_mem(cpu, cpu->pc++);
|
imm = read_mem(cpu, cpu->pc++);
|
||||||
// Arithmetic right shift; cast to signed before shifting.
|
// Arithmetic right shift; cast to signed before shifting.
|
||||||
cpu->regs[reg1] = ((int32_t) cpu->regs[reg1]) >> imm;
|
cpu->regs[reg1] = ((int32_t) cpu->regs[reg1]) >> imm;
|
||||||
@@ -289,8 +298,8 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case CMP: {
|
case CMP: {
|
||||||
// Compare two registers: set flags (Zero, Negative)
|
// Compare two registers: set flags (Zero, Negative)
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
reg2 = read_reg(cpu);
|
reg2 = read_reg_number(cpu);
|
||||||
cmpResult = (int32_t) cpu->regs[reg1] - (int32_t) cpu->regs[reg2];
|
cmpResult = (int32_t) cpu->regs[reg1] - (int32_t) cpu->regs[reg2];
|
||||||
set_flags(cpu, cmpResult);
|
set_flags(cpu, cmpResult);
|
||||||
break;
|
break;
|
||||||
@@ -298,7 +307,7 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case JE_BIT_RN: {
|
case JE_BIT_RN: {
|
||||||
// Jump if bit in register set
|
// Jump if bit in register set
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
if (reg1 >= REG_COUNT) {
|
if (reg1 >= REG_COUNT) {
|
||||||
reg1 = REG_COUNT - 1;
|
reg1 = REG_COUNT - 1;
|
||||||
}
|
}
|
||||||
@@ -342,7 +351,7 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case JNE_BIT_RN: {
|
case JNE_BIT_RN: {
|
||||||
// Jump if bit in register set
|
// Jump if bit in register set
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
if (reg1 >= REG_COUNT) {
|
if (reg1 >= REG_COUNT) {
|
||||||
reg1 = REG_COUNT - 1;
|
reg1 = REG_COUNT - 1;
|
||||||
}
|
}
|
||||||
@@ -437,14 +446,14 @@ void step(CPU *cpu) {
|
|||||||
|
|
||||||
case PUSH: {
|
case PUSH: {
|
||||||
// Push register value onto the stack.
|
// Push register value onto the stack.
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
write_mem(cpu, cpu->sp--, (uint8_t) cpu->regs[reg1]);
|
write_mem(cpu, cpu->sp--, (uint8_t) cpu->regs[reg1]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case POP: {
|
case POP: {
|
||||||
// Pop a value from the stack into a register.
|
// Pop a value from the stack into a register.
|
||||||
reg1 = read_reg(cpu);
|
reg1 = read_reg_number(cpu);
|
||||||
cpu->regs[reg1] = read_mem(cpu, ++cpu->sp);
|
cpu->regs[reg1] = read_mem(cpu, ++cpu->sp);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,7 @@ enum Mode {
|
|||||||
MaxSpeed
|
MaxSpeed
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MEM_SIZE 8192
|
#define MEM_SIZE 65535
|
||||||
// Register count (register names R0 to R7)
|
// Register count (register names R0 to R7)
|
||||||
#define REG_COUNT 32
|
#define REG_COUNT 32
|
||||||
|
|
||||||
|
21
cpu/memory.c
21
cpu/memory.c
@@ -37,7 +37,7 @@ uint32_t read_mem32(CPU *cpu, uint32_t addr) {
|
|||||||
return read_mem16(cpu, addr) | (read_mem16(cpu, addr + 2) << 16);
|
return read_mem16(cpu, addr) | (read_mem16(cpu, addr + 2) << 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t read_addr(CPU *cpu) {
|
uint32_t read_address(CPU *cpu) {
|
||||||
uint32_t out = read_mem16(cpu, cpu->pc) | (read_mem16(cpu, cpu->pc + 2) << 16);
|
uint32_t out = read_mem16(cpu, cpu->pc) | (read_mem16(cpu, cpu->pc + 2) << 16);
|
||||||
cpu->pc += 4;
|
cpu->pc += 4;
|
||||||
if (out >= MEM_SIZE) {
|
if (out >= MEM_SIZE) {
|
||||||
@@ -46,14 +46,29 @@ uint32_t read_addr(CPU *cpu) {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t read_reg(CPU *cpu) {
|
uint8_t read_reg_number(CPU *cpu) {
|
||||||
uint8_t out = read_mem(cpu, cpu->pc++);
|
uint8_t out = read_mem(cpu, cpu->pc++);
|
||||||
if (out >= REG_COUNT) {
|
if (out >= REG_COUNT) {
|
||||||
out = REG_COUNT - 1;
|
return 0;
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t read_reg(CPU *cpu, uint8_t number) {
|
||||||
|
if (number >= REG_COUNT) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return cpu->regs[number];
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t write_reg(CPU *cpu, uint8_t number, uint8_t value) {
|
||||||
|
if (number >= REG_COUNT) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
cpu->regs[number] = value;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t write_mem16(CPU *cpu, uint32_t addr, uint16_t value) {
|
uint8_t write_mem16(CPU *cpu, uint32_t addr, uint16_t value) {
|
||||||
uint8_t status = write_mem(cpu, addr, value & 0xFF);
|
uint8_t status = write_mem(cpu, addr, value & 0xFF);
|
||||||
if (status) {
|
if (status) {
|
||||||
|
@@ -14,9 +14,13 @@ uint8_t write_mem16(CPU *cpu, uint32_t addr, uint16_t value);
|
|||||||
|
|
||||||
uint32_t read_mem32(CPU *cpu, uint32_t addr);
|
uint32_t read_mem32(CPU *cpu, uint32_t addr);
|
||||||
|
|
||||||
uint32_t read_addr(CPU *cpu);
|
uint32_t read_address(CPU *cpu);
|
||||||
|
|
||||||
uint8_t read_reg(CPU *cpu);
|
uint8_t read_reg_number(CPU *cpu);
|
||||||
|
|
||||||
|
uint8_t read_reg(CPU *cpu, uint8_t number);
|
||||||
|
|
||||||
|
uint8_t write_reg(CPU *cpu, uint8_t number, uint8_t value);
|
||||||
|
|
||||||
uint16_t read_mem16(CPU *cpu, uint32_t addr);
|
uint16_t read_mem16(CPU *cpu, uint32_t addr);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user