mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-18 16:30:29 +00:00
Route into the Yamaha fetcher.
Albeit that it doesn't yet fetch.
This commit is contained in:
parent
696ec12516
commit
a5765abbad
@ -200,25 +200,51 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
|
|||||||
// ------------------------
|
// ------------------------
|
||||||
// Perform memory accesses.
|
// Perform memory accesses.
|
||||||
// ------------------------
|
// ------------------------
|
||||||
#define fetch(function, clock) \
|
#define fetch(function_true, function_false, clock) { \
|
||||||
const int first_window = from_internal<personality, clock>(this->fetch_pointer_.column);\
|
const int first_window = from_internal<personality, clock>(this->fetch_pointer_.column);\
|
||||||
const int final_window = from_internal<personality, clock>(end_column); \
|
const int final_window = from_internal<personality, clock>(end_column); \
|
||||||
if(first_window == final_window) break; \
|
if(first_window == final_window) break; \
|
||||||
if(final_window != clock_rate<personality, clock>()) { \
|
if(final_window != clock_rate<personality, clock>()) { \
|
||||||
function<true>(first_window, final_window); \
|
function_true(first_window, final_window); \
|
||||||
} else { \
|
} else { \
|
||||||
function<false>(first_window, final_window); \
|
function_false(first_window, final_window); \
|
||||||
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define fetch_simple(function, clock) fetch(function<true>, function<false>, clock)
|
||||||
|
|
||||||
switch(line_buffer.line_mode) {
|
switch(line_buffer.line_mode) {
|
||||||
case LineMode::Text: { fetch(this->template fetch_tms_text, Clock::TMSMemoryWindow); } break;
|
case LineMode::Text: fetch_simple(this->template fetch_tms_text, Clock::TMSMemoryWindow); break;
|
||||||
case LineMode::Character: { fetch(this->template fetch_tms_character, Clock::TMSMemoryWindow); } break;
|
case LineMode::Character: fetch_simple(this->template fetch_tms_character, Clock::TMSMemoryWindow); break;
|
||||||
case LineMode::SMS: { fetch(this->template fetch_sms, Clock::TMSMemoryWindow); } break;
|
case LineMode::SMS: fetch_simple(this->template fetch_sms, Clock::TMSMemoryWindow); break;
|
||||||
case LineMode::Refresh: { fetch(this->template fetch_tms_refresh, Clock::TMSMemoryWindow); } break;
|
case LineMode::Refresh: fetch_simple(this->template fetch_tms_refresh, Clock::TMSMemoryWindow); break;
|
||||||
|
|
||||||
|
case LineMode::Yamaha:
|
||||||
|
#define true_func this->template fetch_yamaha<true, true>
|
||||||
|
#define false_func this->template fetch_yamaha<false, true>
|
||||||
|
fetch(
|
||||||
|
true_func,
|
||||||
|
false_func,
|
||||||
|
Clock::Internal);
|
||||||
|
#undef true_func
|
||||||
|
#undef false_func
|
||||||
|
break;
|
||||||
|
#define true_func this->template fetch_yamaha<true, false>
|
||||||
|
#define false_func this->template fetch_yamaha<false, false>
|
||||||
|
case LineMode::YamahaNoSprites:
|
||||||
|
fetch(
|
||||||
|
true_func,
|
||||||
|
false_func,
|
||||||
|
Clock::Internal);
|
||||||
|
#undef true_func
|
||||||
|
#undef false_func
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#undef fetch_simple
|
||||||
#undef fetch
|
#undef fetch
|
||||||
|
|
||||||
|
// TODO: the above is too macro-heavy. Simplify.
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------
|
// -------------------------------
|
||||||
@ -290,8 +316,8 @@ void TMS9918<personality>::run_for(const HalfCycles cycles) {
|
|||||||
case ScreenMode::YamahaGraphics5:
|
case ScreenMode::YamahaGraphics5:
|
||||||
case ScreenMode::YamahaGraphics6:
|
case ScreenMode::YamahaGraphics6:
|
||||||
case ScreenMode::YamahaGraphics7:
|
case ScreenMode::YamahaGraphics7:
|
||||||
// TODO: actual line modes.
|
// TODO: sprites?
|
||||||
next_line_buffer.line_mode = LineMode::Refresh;
|
next_line_buffer.line_mode = LineMode::YamahaNoSprites;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// This covers both MultiColour and Graphics modes.
|
// This covers both MultiColour and Graphics modes.
|
||||||
|
@ -57,7 +57,9 @@ enum class LineMode {
|
|||||||
Text,
|
Text,
|
||||||
Character,
|
Character,
|
||||||
Refresh,
|
Refresh,
|
||||||
SMS
|
SMS,
|
||||||
|
Yamaha,
|
||||||
|
YamahaNoSprites,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class MemoryAccess {
|
enum class MemoryAccess {
|
||||||
@ -459,8 +461,7 @@ template <Personality personality> struct Base: public Storage<personality> {
|
|||||||
template<bool use_end> void fetch_tms_character(int start, int end);
|
template<bool use_end> void fetch_tms_character(int start, int end);
|
||||||
|
|
||||||
template<bool use_end> void fetch_yamaha_refresh(int start, int end);
|
template<bool use_end> void fetch_yamaha_refresh(int start, int end);
|
||||||
template<bool use_end> void fetch_yamaha_no_sprites(int start, int end);
|
template<bool use_end, bool fetch_sprites> void fetch_yamaha(int start, int end);
|
||||||
template<bool use_end> void fetch_yamaha_sprites(int start, int end);
|
|
||||||
|
|
||||||
template<bool use_end> void fetch_sms(int start, int end);
|
template<bool use_end> void fetch_sms(int start, int end);
|
||||||
|
|
||||||
|
@ -479,13 +479,7 @@ template<bool use_end> void Base<personality>::fetch_yamaha_refresh(int start, i
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <Personality personality>
|
template <Personality personality>
|
||||||
template<bool use_end> void Base<personality>::fetch_yamaha_no_sprites(int start, int end) {
|
template<bool use_end, bool fetch_sprites> void Base<personality>::fetch_yamaha(int start, int end) {
|
||||||
(void)start;
|
|
||||||
(void)end;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <Personality personality>
|
|
||||||
template<bool use_end> void Base<personality>::fetch_yamaha_sprites(int start, int end) {
|
|
||||||
(void)start;
|
(void)start;
|
||||||
(void)end;
|
(void)end;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user