mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 23:52:26 +00:00
Provide a more convincing version of port output.
This commit is contained in:
parent
77b1efd176
commit
82312d3b59
@ -101,6 +101,11 @@ uint8_t Executor::read(uint16_t address) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Executor::set_port_output(int port) {
|
||||||
|
// Force 'output' to a 1 anywhere that a bit is set as input.
|
||||||
|
port_handler_.set_port_output(port, port_outputs_[port] | ~port_directions_[port]);
|
||||||
|
}
|
||||||
|
|
||||||
void Executor::write(uint16_t address, uint8_t value) {
|
void Executor::write(uint16_t address, uint8_t value) {
|
||||||
// printf("%04x <- %02x\n", address, value);
|
// printf("%04x <- %02x\n", address, value);
|
||||||
|
|
||||||
@ -127,13 +132,16 @@ void Executor::write(uint16_t address, uint8_t value) {
|
|||||||
case 0xe4: case 0xe8: {
|
case 0xe4: case 0xe8: {
|
||||||
const int port = port_remap[(address - 0xe0) >> 1];
|
const int port = port_remap[(address - 0xe0) >> 1];
|
||||||
port_outputs_[port] = value;
|
port_outputs_[port] = value;
|
||||||
return port_handler_.set_port_output(port, value);
|
set_port_output(port);
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case 0xe1: case 0xe3:
|
case 0xe1: case 0xe3:
|
||||||
case 0xe5: case 0xe9:
|
case 0xe5: case 0xe9: {
|
||||||
port_directions_[port_remap[(address - 0xe0) >> 1]] = value;
|
const int port = port_remap[(address - 0xe0) >> 1];
|
||||||
break;
|
port_directions_[port] = value;
|
||||||
|
set_port_output(port);
|
||||||
|
} break;
|
||||||
|
|
||||||
// Timers.
|
// Timers.
|
||||||
case 0xf9: prescalers_[0].reload_value = value; break;
|
case 0xf9: prescalers_[0].reload_value = value; break;
|
||||||
|
@ -159,6 +159,7 @@ class Executor: public CachingExecutor {
|
|||||||
inline void set_flags(uint8_t);
|
inline void set_flags(uint8_t);
|
||||||
inline uint8_t flags();
|
inline uint8_t flags();
|
||||||
template<bool is_brk> inline void perform_interrupt();
|
template<bool is_brk> inline void perform_interrupt();
|
||||||
|
inline void set_port_output(int port);
|
||||||
|
|
||||||
// MARK: - Execution time
|
// MARK: - Execution time
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user