mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-02 02:49:28 +00:00
Reintroduces a warm-up run for the C1540.
That simulates the normal real-life scenario of switching the drive on slightly before the computer, and causes it to function correctly from immediate fast typing on an American Vic. Also switches a couple of casts within the C1540 to functional style.
This commit is contained in:
parent
a776bec46a
commit
6d464557a0
@ -165,14 +165,15 @@ void SerialPortVIA::set_port_output(MOS::MOS6522::Port port, uint8_t value, uint
|
|||||||
attention_acknowledge_level_ = !(value&0x10);
|
attention_acknowledge_level_ = !(value&0x10);
|
||||||
data_level_output_ = (value&0x02);
|
data_level_output_ = (value&0x02);
|
||||||
|
|
||||||
serialPort->set_output(::Commodore::Serial::Line::Clock, (::Commodore::Serial::LineLevel)!(value&0x08));
|
// printf("[C1540] %s output is %s\n", StringForLine(::Commodore::Serial::Line::Clock), value ? "high" : "low");
|
||||||
|
serialPort->set_output(::Commodore::Serial::Line::Clock, static_cast<::Commodore::Serial::LineLevel>(!(value&0x08)));
|
||||||
update_data_line();
|
update_data_line();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SerialPortVIA::set_serial_line_state(::Commodore::Serial::Line line, bool value) {
|
void SerialPortVIA::set_serial_line_state(::Commodore::Serial::Line line, bool value) {
|
||||||
// printf("[C1540] %s is %s\n", StringForLine(line), value ? "high" : "low");
|
// printf("[C1540] %s input is %s\n", StringForLine(line), value ? "high" : "low");
|
||||||
|
|
||||||
switch(line) {
|
switch(line) {
|
||||||
default: break;
|
default: break;
|
||||||
@ -194,9 +195,10 @@ void SerialPortVIA::set_serial_port(const std::shared_ptr<::Commodore::Serial::P
|
|||||||
void SerialPortVIA::update_data_line() {
|
void SerialPortVIA::update_data_line() {
|
||||||
std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock();
|
std::shared_ptr<::Commodore::Serial::Port> serialPort = serial_port_.lock();
|
||||||
if(serialPort) {
|
if(serialPort) {
|
||||||
|
// printf("[C1540] %s output is %s\n", StringForLine(::Commodore::Serial::Line::Data), (!data_level_output_ && (attention_level_input_ != attention_acknowledge_level_)) ? "high" : "low");
|
||||||
// "ATN (Attention) is an input on pin 3 of P2 and P3 that is sensed at PB7 and CA1 of UC3 after being inverted by UA1"
|
// "ATN (Attention) is an input on pin 3 of P2 and P3 that is sensed at PB7 and CA1 of UC3 after being inverted by UA1"
|
||||||
serialPort->set_output(::Commodore::Serial::Line::Data,
|
serialPort->set_output(::Commodore::Serial::Line::Data,
|
||||||
(::Commodore::Serial::LineLevel)(!data_level_output_ && (attention_level_input_ != attention_acknowledge_level_)));
|
static_cast<::Commodore::Serial::LineLevel>(!data_level_output_ && (attention_level_input_ != attention_acknowledge_level_)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,6 +383,9 @@ class ConcreteMachine:
|
|||||||
|
|
||||||
// give it a means to obtain its ROM
|
// give it a means to obtain its ROM
|
||||||
c1540_->set_rom_fetcher(rom_fetcher_);
|
c1540_->set_rom_fetcher(rom_fetcher_);
|
||||||
|
|
||||||
|
// give it a little warm up
|
||||||
|
c1540_->run_for(Cycles(2000000));
|
||||||
}
|
}
|
||||||
|
|
||||||
insert_media(target->media);
|
insert_media(target->media);
|
||||||
@ -460,7 +463,6 @@ class ConcreteMachine:
|
|||||||
switch(memory_model) {
|
switch(memory_model) {
|
||||||
default: break;
|
default: break;
|
||||||
case Analyser::Static::Commodore::Target::MemoryModel::EightKB:
|
case Analyser::Static::Commodore::Target::MemoryModel::EightKB:
|
||||||
// TODO: is this 3kb or 8kb?
|
|
||||||
write_to_map(processor_read_memory_map_, expansion_ram_, 0x0000, 0x1000);
|
write_to_map(processor_read_memory_map_, expansion_ram_, 0x0000, 0x1000);
|
||||||
write_to_map(processor_write_memory_map_, expansion_ram_, 0x0000, 0x1000);
|
write_to_map(processor_write_memory_map_, expansion_ram_, 0x0000, 0x1000);
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user