mirror of
https://github.com/TomHarte/CLK.git
synced 2025-08-09 05:25:01 +00:00
Apply clock conversion to existing usages of do_external_slot.
This commit is contained in:
@@ -182,6 +182,24 @@ template <Personality personality> class ClockConverter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Converts a position in TMS access cycles back to one at the native
|
||||||
|
clock rate.
|
||||||
|
*/
|
||||||
|
static constexpr int from_tms_access_clock(int source) {
|
||||||
|
switch(personality) {
|
||||||
|
default:
|
||||||
|
return source << 1;
|
||||||
|
|
||||||
|
case Personality::V9938:
|
||||||
|
case Personality::V9958:
|
||||||
|
return source << 3;
|
||||||
|
|
||||||
|
case Personality::MDVDP:
|
||||||
|
return source * 20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Converts a position in internal cycles to its corresponding position
|
Converts a position in internal cycles to its corresponding position
|
||||||
on the TMS pixel clock, i.e. scales to 342 clocks per line.
|
on the TMS pixel clock, i.e. scales to 342 clocks per line.
|
||||||
|
@@ -41,19 +41,13 @@
|
|||||||
for the exceptions.
|
for the exceptions.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: external_slot needs to do a proper conversion back to the internal clock,
|
|
||||||
// not assume a multiply by two.
|
|
||||||
//
|
|
||||||
// (and, for MSX 2 purposes, it would ideally know how many cycles since the last access
|
|
||||||
// slot, probably, but I'm not completely sure that's necessary yet)
|
|
||||||
|
|
||||||
#define slot(n) \
|
#define slot(n) \
|
||||||
if(use_end && end == n) return; \
|
if(use_end && end == n) return; \
|
||||||
[[fallthrough]]; \
|
[[fallthrough]]; \
|
||||||
case n
|
case n
|
||||||
|
|
||||||
#define external_slot(n) \
|
#define external_slot(n) \
|
||||||
slot(n): do_external_slot((n)*2);
|
slot(n): do_external_slot(clock_converter_.from_tms_access_clock(n));
|
||||||
|
|
||||||
#define external_slots_2(n) \
|
#define external_slots_2(n) \
|
||||||
external_slot(n); \
|
external_slot(n); \
|
||||||
@@ -286,7 +280,7 @@ template<bool use_end> void Base<personality>::fetch_tms_character(int start, in
|
|||||||
|
|
||||||
slot(31):
|
slot(31):
|
||||||
sprite_selection_buffer.reset_sprite_collection();
|
sprite_selection_buffer.reset_sprite_collection();
|
||||||
do_external_slot(31*2);
|
do_external_slot(clock_converter_.from_tms_access_clock(31));
|
||||||
external_slots_2(32);
|
external_slots_2(32);
|
||||||
external_slot(34);
|
external_slot(34);
|
||||||
|
|
||||||
@@ -437,7 +431,7 @@ template<bool use_end> void Base<personality>::fetch_sms(int start, int end) {
|
|||||||
|
|
||||||
slot(29):
|
slot(29):
|
||||||
sprite_selection_buffer.reset_sprite_collection();
|
sprite_selection_buffer.reset_sprite_collection();
|
||||||
do_external_slot(29*2);
|
do_external_slot(clock_converter_.from_tms_access_clock(29));
|
||||||
external_slot(30);
|
external_slot(30);
|
||||||
|
|
||||||
sprite_y_read(31, 0);
|
sprite_y_read(31, 0);
|
||||||
|
Reference in New Issue
Block a user