fix warnings and move cpu registers+flags to header
This commit is contained in:
parent
3e0563ce05
commit
ca5a09cd94
25
cpu.c
25
cpu.c
@ -35,29 +35,7 @@
|
|||||||
#define PULL() \
|
#define PULL() \
|
||||||
(peek(0x0100 + ++regs.sp))
|
(peek(0x0100 + ++regs.sp))
|
||||||
|
|
||||||
struct cpu_flags {
|
|
||||||
uint8_t carry : 1;
|
|
||||||
uint8_t zero : 1;
|
|
||||||
uint8_t interrupt_disable : 1;
|
|
||||||
uint8_t decimal_mode : 1;
|
|
||||||
uint8_t brk : 1;
|
|
||||||
uint8_t unused : 1;
|
|
||||||
uint8_t overflow : 1;
|
|
||||||
uint8_t negative : 1;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct registers {
|
|
||||||
uint8_t a, x, y, sp;
|
|
||||||
struct cpu_flags status;
|
|
||||||
uint16_t pc;
|
|
||||||
};
|
|
||||||
struct registers regs = {0};
|
|
||||||
|
|
||||||
struct Rom rom = {0};
|
struct Rom rom = {0};
|
||||||
|
|
||||||
/* 64K address space, 16bit words */
|
|
||||||
uint8_t memory[0x16000];
|
|
||||||
|
|
||||||
uint32_t cycles = 0;
|
uint32_t cycles = 0;
|
||||||
|
|
||||||
bool page_crossed = false;
|
bool page_crossed = false;
|
||||||
@ -72,6 +50,8 @@ peek(uint16_t addr)
|
|||||||
return rom.prg_rom[(addr - 0x8000) % 0x4000];
|
return rom.prg_rom[(addr - 0x8000) % 0x4000];
|
||||||
else if (rom.prg_rom_size == 0x8000)
|
else if (rom.prg_rom_size == 0x8000)
|
||||||
return rom.prg_rom[addr - 0x8000];
|
return rom.prg_rom[addr - 0x8000];
|
||||||
|
else
|
||||||
|
fprintf(stderr, "PRG ROG size is not 0x4000 nor 0x8000\n"), exit(1);
|
||||||
} else {
|
} else {
|
||||||
return memory[addr];
|
return memory[addr];
|
||||||
}
|
}
|
||||||
@ -953,7 +933,6 @@ interpret(void)
|
|||||||
page_crossed = false;
|
page_crossed = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
loop_exit:
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* https://www.nesdev.org/wiki/CPU_power_up_state */
|
/* https://www.nesdev.org/wiki/CPU_power_up_state */
|
||||||
|
26
cpu.h
26
cpu.h
@ -1,5 +1,29 @@
|
|||||||
|
#ifndef CPU_H
|
||||||
|
#define CPU_H
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
struct cpu_flags {
|
||||||
|
uint8_t carry : 1;
|
||||||
|
uint8_t zero : 1;
|
||||||
|
uint8_t interrupt_disable : 1;
|
||||||
|
uint8_t decimal_mode : 1;
|
||||||
|
uint8_t brk : 1;
|
||||||
|
uint8_t unused : 1;
|
||||||
|
uint8_t overflow : 1;
|
||||||
|
uint8_t negative : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct registers {
|
||||||
|
uint8_t a, x, y, sp;
|
||||||
|
struct cpu_flags status;
|
||||||
|
uint16_t pc;
|
||||||
|
};
|
||||||
|
struct registers regs = {0};
|
||||||
|
|
||||||
|
/* 64K address space, 16bit words */
|
||||||
|
uint8_t memory[0x16000];
|
||||||
|
|
||||||
/* OFFICIAL OPCODES */
|
/* OFFICIAL OPCODES */
|
||||||
void ADC(uint16_t arg);
|
void ADC(uint16_t arg);
|
||||||
void AND(uint16_t arg);
|
void AND(uint16_t arg);
|
||||||
@ -87,3 +111,5 @@ void SYA(uint16_t arg);
|
|||||||
void TOP(uint16_t arg);
|
void TOP(uint16_t arg);
|
||||||
void XAA(uint16_t arg);
|
void XAA(uint16_t arg);
|
||||||
void XAS(uint16_t arg);
|
void XAS(uint16_t arg);
|
||||||
|
|
||||||
|
#endif /* CPU_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user