1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-13 00:29:14 +00:00

Add consts widely.

This commit is contained in:
Thomas Harte 2024-12-06 15:08:21 -05:00
parent 8e71180cd2
commit c14a4515ce

View File

@ -46,7 +46,7 @@ enum ROMSlot {
Kernel = 0, Kernel = 0,
BASIC, BASIC,
Characters, Characters,
Drive Drive,
}; };
enum JoystickInput { enum JoystickInput {
@ -54,7 +54,7 @@ enum JoystickInput {
Down = 0x08, Down = 0x08,
Left = 0x10, Left = 0x10,
Right = 0x80, Right = 0x80,
Fire = 0x20 Fire = 0x20,
}; };
/*! /*!
@ -67,7 +67,7 @@ public:
UserPortVIA() : port_a_(0xbf) {} UserPortVIA() : port_a_(0xbf) {}
/// Reports the current input to the 6522 port @c port. /// Reports the current input to the 6522 port @c port.
uint8_t get_port_input(MOS::MOS6522::Port port) { uint8_t get_port_input(const MOS::MOS6522::Port port) {
// Port A provides information about the presence or absence of a tape, and parts of // Port A provides information about the presence or absence of a tape, and parts of
// the joystick and serial port state, both of which have been statefully collected // the joystick and serial port state, both of which have been statefully collected
// into port_a_. // into port_a_.
@ -78,7 +78,7 @@ public:
} }
/// Receives announcements of control line output change from the 6522. /// Receives announcements of control line output change from the 6522.
void set_control_line_output(MOS::MOS6522::Port port, MOS::MOS6522::Line line, bool value) { void set_control_line_output(const MOS::MOS6522::Port port, const MOS::MOS6522::Line line, const bool value) {
// The CA2 output is used to control the tape motor. // The CA2 output is used to control the tape motor.
if(port == MOS::MOS6522::Port::A && line == MOS::MOS6522::Line::Two) { if(port == MOS::MOS6522::Port::A && line == MOS::MOS6522::Line::Two) {
tape_->set_motor_control(!value); tape_->set_motor_control(!value);
@ -86,7 +86,7 @@ public:
} }
/// Receives announcements of changes in the serial bus connected to the serial port and propagates them into Port A. /// Receives announcements of changes in the serial bus connected to the serial port and propagates them into Port A.
void set_serial_line_state(::Commodore::Serial::Line line, bool value) { void set_serial_line_state(const ::Commodore::Serial::Line line, const bool value) {
switch(line) { switch(line) {
default: break; default: break;
case ::Commodore::Serial::Line::Data: port_a_ = (port_a_ & ~0x02) | (value ? 0x02 : 0x00); break; case ::Commodore::Serial::Line::Data: port_a_ = (port_a_ & ~0x02) | (value ? 0x02 : 0x00); break;
@ -95,14 +95,14 @@ public:
} }
/// Allows the current joystick input to be set. /// Allows the current joystick input to be set.
void set_joystick_state(JoystickInput input, bool value) { void set_joystick_state(const JoystickInput input, const bool value) {
if(input != JoystickInput::Right) { if(input != JoystickInput::Right) {
port_a_ = (port_a_ & ~input) | (value ? 0 : input); port_a_ = (port_a_ & ~input) | (value ? 0 : input);
} }
} }
/// Receives announcements from the 6522 of user-port output, which might affect what's currently being presented onto the serial bus. /// Receives announcements from the 6522 of user-port output, which might affect what's currently being presented onto the serial bus.
void set_port_output(MOS::MOS6522::Port port, uint8_t value, uint8_t) { void set_port_output(const MOS::MOS6522::Port port, const uint8_t value, uint8_t) {
// Line 7 of port A is inverted and output as serial ATN. // Line 7 of port A is inverted and output as serial ATN.
if(!port) { if(!port) {
std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock(); std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock();
@ -137,7 +137,7 @@ public:
} }
/// Sets whether @c key @c is_pressed. /// Sets whether @c key @c is_pressed.
void set_key_state(uint16_t key, bool is_pressed) { void set_key_state(const uint16_t key, const bool is_pressed) {
if(is_pressed) if(is_pressed)
columns_[key & 7] &= ~(key >> 3); columns_[key & 7] &= ~(key >> 3);
else else
@ -150,7 +150,7 @@ public:
} }
/// Called by the 6522 to get input. Reads the keyboard on Port A, returns a small amount of joystick state on Port B. /// Called by the 6522 to get input. Reads the keyboard on Port A, returns a small amount of joystick state on Port B.
uint8_t get_port_input(MOS::MOS6522::Port port) { uint8_t get_port_input(const MOS::MOS6522::Port port) {
if(!port) { if(!port) {
uint8_t result = 0xff; uint8_t result = 0xff;
for(int c = 0; c < 8; c++) { for(int c = 0; c < 8; c++) {
@ -164,12 +164,12 @@ public:
} }
/// Called by the 6522 to set output. The value of Port B selects which part of the keyboard to read. /// Called by the 6522 to set output. The value of Port B selects which part of the keyboard to read.
void set_port_output(MOS::MOS6522::Port port, uint8_t value, uint8_t mask) { void set_port_output(const MOS::MOS6522::Port port, const uint8_t value, const uint8_t mask) {
if(port) activation_mask_ = (value & mask) | (~mask); if(port) activation_mask_ = (value & mask) | (~mask);
} }
/// Called by the 6522 to set control line output. Which affects the serial port. /// Called by the 6522 to set control line output. Which affects the serial port.
void set_control_line_output(MOS::MOS6522::Port port, MOS::MOS6522::Line line, bool value) { void set_control_line_output(const MOS::MOS6522::Port port, const MOS::MOS6522::Line line, const bool value) {
if(line == MOS::MOS6522::Line::Two) { if(line == MOS::MOS6522::Line::Two) {
std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock(); std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock();
if(serialPort) { if(serialPort) {
@ -183,7 +183,7 @@ public:
} }
/// Sets whether the joystick input @c input is pressed. /// Sets whether the joystick input @c input is pressed.
void set_joystick_state(JoystickInput input, bool value) { void set_joystick_state(const JoystickInput input, const bool value) {
if(input == JoystickInput::Right) { if(input == JoystickInput::Right) {
port_b_ = (port_b_ & ~input) | (value ? 0 : input); port_b_ = (port_b_ & ~input) | (value ? 0 : input);
} }
@ -207,13 +207,13 @@ private:
class SerialPort : public ::Commodore::Serial::Port { class SerialPort : public ::Commodore::Serial::Port {
public: public:
/// Receives an input change from the base serial port class, and communicates it to the user-port VIA. /// Receives an input change from the base serial port class, and communicates it to the user-port VIA.
void set_input(::Commodore::Serial::Line line, ::Commodore::Serial::LineLevel level) { void set_input(const ::Commodore::Serial::Line line, const ::Commodore::Serial::LineLevel level) {
std::shared_ptr<UserPortVIA> userPortVIA = user_port_via_.lock(); std::shared_ptr<UserPortVIA> userPortVIA = user_port_via_.lock();
if(userPortVIA) userPortVIA->set_serial_line_state(line, bool(level)); if(userPortVIA) userPortVIA->set_serial_line_state(line, bool(level));
} }
/// Sets the user-port VIA with which this serial port communicates. /// Sets the user-port VIA with which this serial port communicates.
void set_user_port_via(std::shared_ptr<UserPortVIA> userPortVIA) { void set_user_port_via(const std::shared_ptr<UserPortVIA> userPortVIA) {
user_port_via_ = userPortVIA; user_port_via_ = userPortVIA;
} }
@ -226,7 +226,7 @@ private:
*/ */
struct Vic6560BusHandler { struct Vic6560BusHandler {
/// Performs a read on behalf of the 6560; in practice uses @c video_memory_map and @c colour_memory to find data. /// Performs a read on behalf of the 6560; in practice uses @c video_memory_map and @c colour_memory to find data.
forceinline void perform_read(uint16_t address, uint8_t *pixel_data, uint8_t *colour_data) { forceinline void perform_read(const uint16_t address, uint8_t *const pixel_data, uint8_t *const colour_data) {
*pixel_data = video_memory_map[address >> 10] ? video_memory_map[address >> 10][address & 0x3ff] : 0xff; // TODO *pixel_data = video_memory_map[address >> 10] ? video_memory_map[address >> 10][address & 0x3ff] : 0xff; // TODO
*colour_data = colour_memory[address & 0x03ff]; *colour_data = colour_memory[address & 0x03ff];
} }
@ -234,6 +234,8 @@ struct Vic6560BusHandler {
// It is assumed that these pointers have been filled in by the machine. // It is assumed that these pointers have been filled in by the machine.
uint8_t *video_memory_map[16]{}; // Segments video memory into 1kb portions. uint8_t *video_memory_map[16]{}; // Segments video memory into 1kb portions.
uint8_t *colour_memory{}; // Colour memory must be contiguous. uint8_t *colour_memory{}; // Colour memory must be contiguous.
// TODO: make the above const.
}; };
/*! /*!
@ -252,7 +254,7 @@ public:
user_port_via_port_handler_(user_port_via_port_handler), user_port_via_port_handler_(user_port_via_port_handler),
keyboard_via_port_handler_(keyboard_via_port_handler) {} keyboard_via_port_handler_(keyboard_via_port_handler) {}
void did_set_input(const Input &digital_input, bool is_active) final { void did_set_input(const Input &digital_input, const bool is_active) final {
JoystickInput mapped_input; JoystickInput mapped_input;
switch(digital_input.type) { switch(digital_input.type) {
default: return; default: return;
@ -468,7 +470,7 @@ public:
return !media.tapes.empty() || (!media.disks.empty() && c1540_ != nullptr) || !media.cartridges.empty(); return !media.tapes.empty() || (!media.disks.empty() && c1540_ != nullptr) || !media.cartridges.empty();
} }
void set_key_state(uint16_t key, bool is_pressed) final { void set_key_state(const uint16_t key, const bool is_pressed) final {
if(key < 0xfff0) { if(key < 0xfff0) {
keyboard_via_port_handler_->set_key_state(key, is_pressed); keyboard_via_port_handler_->set_key_state(key, is_pressed);
} else { } else {
@ -502,7 +504,11 @@ public:
} }
// to satisfy CPU::MOS6502::Processor // to satisfy CPU::MOS6502::Processor
forceinline Cycles perform_bus_operation(CPU::MOS6502::BusOperation operation, uint16_t address, uint8_t *value) { forceinline Cycles perform_bus_operation(
const CPU::MOS6502::BusOperation operation,
const uint16_t address,
uint8_t *const value
) {
// run the phase-1 part of this cycle, in which the VIC accesses memory // run the phase-1 part of this cycle, in which the VIC accesses memory
cycles_since_mos6560_update_++; cycles_since_mos6560_update_++;
@ -622,7 +628,7 @@ public:
return Cycles(1); return Cycles(1);
} }
void flush_output(int outputs) final { void flush_output(const int outputs) final {
if(outputs & Output::Video) { if(outputs & Output::Video) {
update_video(); update_video();
} }
@ -635,7 +641,7 @@ public:
m6502_.run_for(cycles); m6502_.run_for(cycles);
} }
void set_scan_target(Outputs::Display::ScanTarget *scan_target) final { void set_scan_target(Outputs::Display::ScanTarget *const scan_target) final {
mos6560_.set_scan_target(scan_target); mos6560_.set_scan_target(scan_target);
} }
@ -643,7 +649,7 @@ public:
return mos6560_.get_scaled_scan_status(); return mos6560_.get_scaled_scan_status();
} }
void set_display_type(Outputs::Display::DisplayType display_type) final { void set_display_type(const Outputs::Display::DisplayType display_type) final {
mos6560_.set_display_type(display_type); mos6560_.set_display_type(display_type);
} }
@ -664,11 +670,11 @@ public:
Utility::TypeRecipient<CharacterMapper>::add_typer(string); Utility::TypeRecipient<CharacterMapper>::add_typer(string);
} }
bool can_type(char c) const final { bool can_type(const char c) const final {
return Utility::TypeRecipient<CharacterMapper>::can_type(c); return Utility::TypeRecipient<CharacterMapper>::can_type(c);
} }
void tape_did_change_input(Storage::Tape::BinaryTapePlayer *tape) final { void tape_did_change_input(Storage::Tape::BinaryTapePlayer *const tape) final {
keyboard_via_.set_control_line_input(MOS::MOS6522::Port::A, MOS::MOS6522::Line::One, !tape->input()); keyboard_via_.set_control_line_input(MOS::MOS6522::Port::A, MOS::MOS6522::Line::One, !tape->input());
} }
@ -692,13 +698,13 @@ public:
set_use_fast_tape(); set_use_fast_tape();
} }
void set_component_prefers_clocking(ClockingHint::Source *, ClockingHint::Preference clocking) final { void set_component_prefers_clocking(ClockingHint::Source *, const ClockingHint::Preference clocking) final {
tape_is_sleeping_ = clocking == ClockingHint::Preference::None; tape_is_sleeping_ = clocking == ClockingHint::Preference::None;
set_use_fast_tape(); set_use_fast_tape();
} }
// MARK: - Activity Source // MARK: - Activity Source
void set_activity_observer(Activity::Observer *observer) final { void set_activity_observer(Activity::Observer *const observer) final {
if(c1540_) c1540_->set_activity_observer(observer); if(c1540_) c1540_->set_activity_observer(observer);
} }
@ -762,7 +768,7 @@ private:
using namespace Commodore::Vic20; using namespace Commodore::Vic20;
std::unique_ptr<Machine> Machine::Vic20( std::unique_ptr<Machine> Machine::Vic20(
const Analyser::Static::Target *target, const Analyser::Static::Target *const target,
const ROMMachine::ROMFetcher &rom_fetcher const ROMMachine::ROMFetcher &rom_fetcher
) { ) {
using Target = Analyser::Static::Commodore::Target; using Target = Analyser::Static::Commodore::Target;