1
0
mirror of https://github.com/TomHarte/CLK.git synced 2025-11-13 00:20:08 +00:00

Merge pull request #1630 from TomHarte/DNFS

Add DFS 0.9 to ROM catalogue; restrict CRTC pointer size.
This commit is contained in:
Thomas Harte
2025-11-07 11:19:21 -05:00
committed by GitHub
4 changed files with 26 additions and 16 deletions

View File

@@ -76,7 +76,7 @@ public:
CRTC6845(BusHandlerT &bus_handler) noexcept :
bus_handler_(bus_handler), status_(0) {}
void select_register(uint8_t r) {
void select_register(const uint8_t r) {
selected_register_ = r;
}
@@ -101,11 +101,11 @@ public:
// Per the BBC Wiki, attempting to read such a register results in 0.
if(selected_register_ < 12 || selected_register_ > 17) return 0x00;
return registers_[selected_register_];
return registers_[selected_register_.get()];
}
void set_register(const uint8_t value) {
switch(selected_register_) {
switch(selected_register_.get()) {
case 0: layout_.horizontal.total = value; break;
case 1: layout_.horizontal.displayed = value; break;
case 2: layout_.horizontal.start_sync = value; break;
@@ -168,9 +168,9 @@ public:
};
if(selected_register_ < 16) {
registers_[selected_register_] = value & masks[selected_register_];
registers_[selected_register_.get()] = value & masks[selected_register_.get()];
}
if(selected_register_ == 31 && personality == Personality::UM6845R) {
if(selected_register_.get() == 31 && personality == Personality::UM6845R) {
dummy_register_ = value;
}
}
@@ -492,9 +492,6 @@ private:
/// Provide interlaced sync and scan even/odd lines depending on field.
SyncAndVideo,
};
enum class BlinkMode {
// TODO.
};
// Comments on the right provide the corresponding signal name in hoglet's VHDL implementation.
struct {
@@ -527,7 +524,7 @@ private:
uint8_t registers_[18]{};
uint8_t dummy_register_ = 0;
int selected_register_ = 0;
Numeric::SizedInt<5> selected_register_ = 0;
CharacterAddress character_counter_; // h_counter
Numeric::SizedInt<3> character_reset_history_; // sol

View File

@@ -766,7 +766,7 @@ public:
auto request = Request(Name::AcornBASICII) && Request(Name::BBCMicroMOS12);
if(target.has_1770dfs || tube_processor != TubeProcessor::None) {
request = request && Request(Name::BBCMicroDFS226);
request = request && Request(Name::BBCMicro1770DFS226);
}
if(target.has_adfs) {
request = request && Request(Name::BBCMicroADFS130);
@@ -794,13 +794,13 @@ public:
install_sideways(fs_slot--, roms.find(name)->second, false);
};
if(target.has_1770dfs) {
add_sideways(Name::BBCMicroDFS226);
add_sideways(Name::BBCMicro1770DFS226);
}
if(target.has_adfs) {
add_sideways(Name::BBCMicroADFS130);
}
if(!target.has_1770dfs && tube_processor != TubeProcessor::None) {
add_sideways(Name::BBCMicroDFS226);
add_sideways(Name::BBCMicro1770DFS226);
}
// Throw the tube ROM to its target.
@@ -1195,8 +1195,12 @@ private:
rom_write_masks_[slot] = is_writeable;
rom_inserted_[slot] = true;
assert(source.size() == roms_[slot].size());
std::copy(source.begin(), source.end(), roms_[slot].begin());
assert(roms_[slot].size() % source.size() == 0);
auto begin = roms_[slot].begin();
while(begin != roms_[slot].end()) {
std::copy(source.begin(), source.end(), begin);
std::advance(begin, source.size());
}
}
// MARK: - Components.

View File

@@ -430,7 +430,15 @@ const std::vector<Description> &Description::all_roms() {
0x3c14fc70u
},
{
BBCMicroDFS226,
BBCMicro8271DFS09,
"BBCMicro",
"the Acorn 8271 DFS 0.9 ROM",
"dfs09.rom",
8_kb,
0x3ce609cfu
},
{
BBCMicro1770DFS226,
"BBCMicro",
"the Acorn 1770 DFS 2.26 ROM",
"dfs-2.26.rom",

View File

@@ -82,7 +82,8 @@ enum Name {
// BBC Micro.
BBCMicroMOS12,
BBCMicroDFS226,
BBCMicro8271DFS09,
BBCMicro1770DFS226,
BBCMicroADFS130,
BBCMicroAdvancedDiscToolkit140,
BBCMicro6502Tube110,