mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-29 16:55:59 +00:00
Fixed 6560 addressing error, added an autotyper for Vic disks (more work potentially needed), fixed semantics for testing whether a 6502 is about to reset.
This commit is contained in:
parent
d74c3760fb
commit
5d40d70c92
@ -255,7 +255,7 @@ uint16_t MOS6560::get_address()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return fetch_address;
|
return fetch_address & 0x3fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MOS6560::set_graphics_value(uint8_t value, uint8_t colour_value)
|
void MOS6560::set_graphics_value(uint8_t value, uint8_t colour_value)
|
||||||
|
@ -165,12 +165,10 @@ void Machine::set_rom(ROMSlot slot, size_t length, const uint8_t *data)
|
|||||||
case BASIC: target = _basicROM; break;
|
case BASIC: target = _basicROM; break;
|
||||||
case Drive:
|
case Drive:
|
||||||
if(_c1540)
|
if(_c1540)
|
||||||
{
|
|
||||||
_c1540->set_rom(data);
|
_c1540->set_rom(data);
|
||||||
_c1540->run_for_cycles(2000000); // pretend it booted a couple of seconds ago
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// if there's no 1540 now, hold onto the ROM in case one is added later
|
||||||
_driveROM.reset(new uint8_t[length]);
|
_driveROM.reset(new uint8_t[length]);
|
||||||
memcpy(_driveROM.get(), data, length);
|
memcpy(_driveROM.get(), data, length);
|
||||||
}
|
}
|
||||||
@ -233,13 +231,15 @@ void Machine::set_disk(std::shared_ptr<Storage::Disk> disk)
|
|||||||
_c1540->set_rom(_driveROM.get());
|
_c1540->set_rom(_driveROM.get());
|
||||||
_driveROM.reset();
|
_driveROM.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
set_typer_for_string("LOAD\"*\",8,1\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Typer
|
#pragma mark - Typer
|
||||||
|
|
||||||
int Machine::get_typer_delay()
|
int Machine::get_typer_delay()
|
||||||
{
|
{
|
||||||
return get_reset_line() ? 1*263*60*65 : 0; // wait two seconds if resetting
|
return get_is_resetting() ? 1*263*60*65 : 0; // wait a second if resetting
|
||||||
}
|
}
|
||||||
|
|
||||||
int Machine::get_typer_frequency()
|
int Machine::get_typer_frequency()
|
||||||
|
@ -1027,7 +1027,7 @@ inline void Tape::run_for_cycles(unsigned int number_of_cycles)
|
|||||||
|
|
||||||
int Machine::get_typer_delay()
|
int Machine::get_typer_delay()
|
||||||
{
|
{
|
||||||
return get_reset_line() ? 625*25*128 : 0; // wait one second if resetting
|
return get_is_resetting() ? 625*25*128 : 0; // wait one second if resetting
|
||||||
}
|
}
|
||||||
|
|
||||||
int Machine::get_typer_frequency()
|
int Machine::get_typer_frequency()
|
||||||
|
@ -1213,13 +1213,13 @@ template <class T> class Processor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Gets the current level of the RST line.
|
Gets whether the 6502 would reset at the next opportunity.
|
||||||
|
|
||||||
@returns @c true if the line is logically active; @c false otherwise.
|
@returns @c true if the line is logically active; @c false otherwise.
|
||||||
*/
|
*/
|
||||||
inline bool get_reset_line()
|
inline bool get_is_resetting()
|
||||||
{
|
{
|
||||||
return !!(_interrupt_requests & InterruptRequestFlags::Reset);
|
return !!(_interrupt_requests & (InterruptRequestFlags::Reset | InterruptRequestFlags::PowerOn));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
Loading…
Reference in New Issue
Block a user