mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-19 23:29:05 +00:00
Elucidate a magic constant, add an extra constexpr.
This commit is contained in:
parent
4875148617
commit
de45536b5c
@ -756,13 +756,12 @@ bool TMS9918<personality>::get_interrupt_line() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// TODO: [potentially] remove Master System timing assumptions in latch and get_latched below.
|
// TODO: [potentially] remove Master System timing assumptions in latch and get_latched below.
|
||||||
template <Personality personality>
|
template <Personality personality>uint8_t TMS9918<personality>::get_latched_horizontal_counter() const {
|
||||||
uint8_t TMS9918<personality>::get_latched_horizontal_counter() const {
|
|
||||||
// Translate from internal numbering, which puts pixel output
|
// Translate from internal numbering, which puts pixel output
|
||||||
// in the final 256 pixels of 342, to the public numbering,
|
// in the final 256 pixels of 342, to the public numbering,
|
||||||
// which makes the 256 pixels the first 256 spots, but starts
|
// which counts the 256 pixels as items 0–255, starts
|
||||||
// counting at -48, and returns only the top 8 bits of the number.
|
// counting at -48, and returns only the top 8 bits of the number.
|
||||||
int public_counter = this->latched_column_ - 86;
|
int public_counter = this->latched_column_ - (342 - 256);
|
||||||
if(public_counter < -46) public_counter += 342;
|
if(public_counter < -46) public_counter += 342;
|
||||||
return uint8_t(public_counter >> 1);
|
return uint8_t(public_counter >> 1);
|
||||||
}
|
}
|
||||||
|
@ -349,37 +349,39 @@ template <Personality personality> struct Base {
|
|||||||
default: return;
|
default: return;
|
||||||
|
|
||||||
case MemoryAccess::Write:
|
case MemoryAccess::Write:
|
||||||
if(master_system_.cram_is_selected) {
|
if constexpr (is_sega_vdp(personality)) {
|
||||||
// Adjust the palette. In a Master System blue has a slightly different
|
if(master_system_.cram_is_selected) {
|
||||||
// scale; cf. https://www.retrorgb.com/sega-master-system-non-linear-blue-channel-findings.html
|
// Adjust the palette. In a Master System blue has a slightly different
|
||||||
constexpr uint8_t rg_scale[] = {0, 85, 170, 255};
|
// scale; cf. https://www.retrorgb.com/sega-master-system-non-linear-blue-channel-findings.html
|
||||||
constexpr uint8_t b_scale[] = {0, 104, 170, 255};
|
constexpr uint8_t rg_scale[] = {0, 85, 170, 255};
|
||||||
master_system_.colour_ram[ram_pointer_ & 0x1f] = palette_pack(
|
constexpr uint8_t b_scale[] = {0, 104, 170, 255};
|
||||||
rg_scale[(read_ahead_buffer_ >> 0) & 3],
|
master_system_.colour_ram[ram_pointer_ & 0x1f] = palette_pack(
|
||||||
rg_scale[(read_ahead_buffer_ >> 2) & 3],
|
rg_scale[(read_ahead_buffer_ >> 0) & 3],
|
||||||
b_scale[(read_ahead_buffer_ >> 4) & 3]
|
rg_scale[(read_ahead_buffer_ >> 2) & 3],
|
||||||
);
|
b_scale[(read_ahead_buffer_ >> 4) & 3]
|
||||||
|
);
|
||||||
|
|
||||||
// Schedule a CRAM dot; this is scheduled for wherever it should appear
|
// Schedule a CRAM dot; this is scheduled for wherever it should appear
|
||||||
// on screen. So it's wherever the output stream would be now. Which
|
// on screen. So it's wherever the output stream would be now. Which
|
||||||
// is output_lag cycles ago from the point of view of the input stream.
|
// is output_lag cycles ago from the point of view of the input stream.
|
||||||
CRAMDot &dot = upcoming_cram_dots_.emplace_back();
|
CRAMDot &dot = upcoming_cram_dots_.emplace_back();
|
||||||
dot.location.column = write_pointer_.column - output_lag;
|
dot.location.column = write_pointer_.column - output_lag;
|
||||||
dot.location.row = write_pointer_.row;
|
dot.location.row = write_pointer_.row;
|
||||||
|
|
||||||
// Handle before this row conditionally; then handle after (or, more realistically,
|
// Handle before this row conditionally; then handle after (or, more realistically,
|
||||||
// exactly at the end of) naturally.
|
// exactly at the end of) naturally.
|
||||||
if(dot.location.column < 0) {
|
if(dot.location.column < 0) {
|
||||||
--dot.location.row;
|
--dot.location.row;
|
||||||
dot.location.column += 342;
|
dot.location.column += 342;
|
||||||
|
}
|
||||||
|
dot.location.row += dot.location.column / 342;
|
||||||
|
dot.location.column %= 342;
|
||||||
|
|
||||||
|
dot.value = master_system_.colour_ram[ram_pointer_ & 0x1f];
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
dot.location.row += dot.location.column / 342;
|
|
||||||
dot.location.column %= 342;
|
|
||||||
|
|
||||||
dot.value = master_system_.colour_ram[ram_pointer_ & 0x1f];
|
|
||||||
} else {
|
|
||||||
ram_[ram_pointer_ & 16383] = read_ahead_buffer_;
|
|
||||||
}
|
}
|
||||||
|
ram_[ram_pointer_ & 16383] = read_ahead_buffer_;
|
||||||
break;
|
break;
|
||||||
case MemoryAccess::Read:
|
case MemoryAccess::Read:
|
||||||
read_ahead_buffer_ = ram_[ram_pointer_ & 16383];
|
read_ahead_buffer_ = ram_[ram_pointer_ & 16383];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user