mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-22 12:33:29 +00:00
Don't allow a disabled screen to interfere with Yamaha addressing.
This commit is contained in:
parent
0d4dc214fb
commit
debdad350d
@ -308,7 +308,8 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
|
||||
|
||||
// Establish the current screen output mode, which will be captured as a
|
||||
// line mode momentarily.
|
||||
this->screen_mode_ = this->current_screen_mode();
|
||||
this->screen_mode_ = this->template current_screen_mode<true>();
|
||||
this->underlying_mode_ = this->template current_screen_mode<false>();
|
||||
|
||||
// Based on the output mode, pick a line mode.
|
||||
next_line_buffer.first_pixel_output_column = Timing<personality>::FirstPixelCycle;
|
||||
@ -723,7 +724,7 @@ void Base<personality>::commit_register(int reg, uint8_t value) {
|
||||
// b5: enable light pen interrupts
|
||||
// b6: set colour bus to input or output mode
|
||||
|
||||
LOG("Screen mode: " << int(current_screen_mode()));
|
||||
LOG("Screen mode: " << int(current_screen_mode<true>()));
|
||||
break;
|
||||
|
||||
case 1:
|
||||
@ -733,7 +734,7 @@ void Base<personality>::commit_register(int reg, uint8_t value) {
|
||||
((value & 0x08) >> 2)
|
||||
);
|
||||
|
||||
LOG("Screen mode: " << int(current_screen_mode()));
|
||||
LOG("Screen mode: " << int(current_screen_mode<true>()));
|
||||
break;
|
||||
|
||||
case 8:
|
||||
@ -845,7 +846,7 @@ void Base<personality>::commit_register(int reg, uint8_t value) {
|
||||
Storage<personality>::command_ &&
|
||||
Storage<personality>::command_->access == Command::AccessType::WaitForColourReceipt
|
||||
) {
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->screen_mode_));
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->underlying_mode_));
|
||||
Storage<personality>::update_command_step(fetch_pointer_.column);
|
||||
}
|
||||
break;
|
||||
|
@ -543,7 +543,7 @@ template <Personality personality> struct Base: public Storage<personality> {
|
||||
bool enable_line_interrupts_ = false;
|
||||
bool line_interrupt_pending_ = false;
|
||||
|
||||
ScreenMode screen_mode_;
|
||||
ScreenMode screen_mode_, underlying_mode_;
|
||||
LineBuffer line_buffers_[313];
|
||||
void posit_sprite(LineBuffer &buffer, int sprite_number, int sprite_y, int screen_row);
|
||||
|
||||
@ -570,8 +570,8 @@ template <Personality personality> struct Base: public Storage<personality> {
|
||||
|
||||
void commit_register(int reg, uint8_t value);
|
||||
|
||||
ScreenMode current_screen_mode() const {
|
||||
if(blank_display_) {
|
||||
template <bool check_blank> ScreenMode current_screen_mode() const {
|
||||
if(check_blank && blank_display_) {
|
||||
return ScreenMode::Blank;
|
||||
}
|
||||
|
||||
@ -737,13 +737,13 @@ template <Personality personality> struct Base: public Storage<personality> {
|
||||
|
||||
ram_[address] = Storage<personality>::command_latch_;
|
||||
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->screen_mode_));
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->underlying_mode_));
|
||||
Storage<personality>::update_command_step(access_column);
|
||||
} break;
|
||||
|
||||
case CommandStep::WriteByte:
|
||||
ram_[command_address()] = Storage<personality>::command_context_.colour;
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->screen_mode_));
|
||||
Storage<personality>::command_->advance(pixels_per_byte(this->underlying_mode_));
|
||||
Storage<personality>::update_command_step(access_column);
|
||||
break;
|
||||
}
|
||||
@ -756,8 +756,7 @@ template <Personality personality> struct Base: public Storage<personality> {
|
||||
++ram_pointer_;
|
||||
|
||||
if constexpr (is_yamaha_vdp(personality)) {
|
||||
const ScreenMode mode = current_screen_mode();
|
||||
if(mode == ScreenMode::YamahaGraphics6 || mode == ScreenMode::YamahaGraphics7) {
|
||||
if(this->underlying_mode_ == ScreenMode::YamahaGraphics6 || this->underlying_mode_ == ScreenMode::YamahaGraphics7) {
|
||||
// Rotate address one to the right as the hardware accesses
|
||||
// the underlying banks of memory alternately but presents
|
||||
// them as if linear.
|
||||
|
Loading…
Reference in New Issue
Block a user