mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 08:49:37 +00:00
Realised that registers appear also to be readable.
This commit is contained in:
parent
e8cb674073
commit
c7c55528e2
@ -50,6 +50,7 @@ MOS6560::MOS6560() :
|
||||
|
||||
void MOS6560::set_register(int address, uint8_t value)
|
||||
{
|
||||
_registers[address] = value;
|
||||
switch(address)
|
||||
{
|
||||
case 0x0:
|
||||
@ -99,6 +100,12 @@ void MOS6560::set_register(int address, uint8_t value)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t MOS6560::get_register(int address)
|
||||
{
|
||||
return _registers[address];
|
||||
}
|
||||
|
||||
|
||||
void MOS6560::output_border(unsigned int number_of_cycles)
|
||||
{
|
||||
uint8_t *colour_pointer = _crt->allocate_write_area(1);
|
||||
|
@ -22,6 +22,7 @@ class MOS6560 {
|
||||
void set_graphics_value(uint8_t value, uint8_t colour_value);
|
||||
|
||||
void set_register(int address, uint8_t value);
|
||||
uint8_t get_register(int address);
|
||||
|
||||
private:
|
||||
std::unique_ptr<Outputs::CRT::CRT> _crt;
|
||||
@ -47,6 +48,8 @@ class MOS6560 {
|
||||
|
||||
uint8_t *pixel_pointer;
|
||||
|
||||
uint8_t _registers[16];
|
||||
|
||||
void output_border(unsigned int number_of_cycles);
|
||||
};
|
||||
|
||||
|
@ -29,6 +29,10 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
|
||||
if(isReadOperation(operation))
|
||||
{
|
||||
*value = read_memory(address);
|
||||
if((address&0xfff0) == 0x9000)
|
||||
{
|
||||
*value = _mos6560->get_register(address - 0x9000);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -46,12 +46,12 @@ class Machine: public CPU6502::Processor<Machine>, public CRTMachine::Machine {
|
||||
|
||||
uint8_t _userBASICMemory[0x0400];
|
||||
uint8_t _screenMemory[0x1000];
|
||||
uint8_t _colorMemory[0x0200];
|
||||
uint8_t _colorMemory[0x0400];
|
||||
|
||||
inline uint8_t *ram_pointer(uint16_t address) {
|
||||
if(address < sizeof(_userBASICMemory)) return &_userBASICMemory[address];
|
||||
if(address >= 0x1000 && address < 0x2000) return &_screenMemory[address&0x0fff];
|
||||
if(address >= 0x9400 && address < 0x9600) return &_colorMemory[0x01ff];
|
||||
if(address >= 0x9400 && address < 0x9800) return &_colorMemory[0x03ff]; // TODO: make this 4-bit
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user