Skip to content

Commit 9533d12

Browse files
committed
Road to 1.3 -> 125, 150 and turbo speed modes
1 parent abc8ee5 commit 9533d12

11 files changed

+236
-174
lines changed

include/ESPectrum.h

+14-4
Original file line numberDiff line numberDiff line change
@@ -57,34 +57,44 @@ using namespace std;
5757

5858
#define ESP_AUDIO_OVERSAMPLES_48 4368
5959
#define ESP_AUDIO_FREQ_48 31250 // In 48K calcs are perfect :) -> ESP_AUDIO_SAMPLES_48 * 50,0801282 frames per second = 31250 Hz
60+
#define ESP_AUDIO_FREQ_48_125SPEED 39063 // 125% speed
61+
#define ESP_AUDIO_FREQ_48_150SPEED 46875 // 150% speed
6062
#define ESP_AUDIO_SAMPLES_48 624
6163
#define ESP_AUDIO_SAMPLES_DIV_48 7
6264
#define ESP_AUDIO_AY_DIV_48 112
6365
#define ESP_AUDIO_OVERSAMPLES_DIV_48 16
6466

6567
#define ESP_AUDIO_OVERSAMPLES_TK_50 3744
6668
#define ESP_AUDIO_FREQ_TK_50 31365 // ESP_AUDIO_SAMPLES_TK_50 * 50,2638854 frames per second = 31364,6645 Hz
69+
#define ESP_AUDIO_FREQ_TK_50_125SPEED 39206 // 125% speed
70+
#define ESP_AUDIO_FREQ_TK_50_150SPEED 47048 // 150% speed
6771
#define ESP_AUDIO_SAMPLES_TK_50 624
6872
#define ESP_AUDIO_SAMPLES_DIV_TK_50 6
6973
#define ESP_AUDIO_AY_DIV_TK_50 114
7074
#define ESP_AUDIO_OVERSAMPLES_DIV_TK_50 19
7175

7276
#define ESP_AUDIO_OVERSAMPLES_TK_60 3144
73-
#define ESP_AUDIO_FREQ_TK_60 31365 // ESP_AUDIO_SAMPLES_TK_60 * 59,856887 frames per second = 31365,0088 Hz
77+
#define ESP_AUDIO_FREQ_TK_60 31364 // ESP_AUDIO_SAMPLES_TK_60 * 59,8551505 frames per second = 31364,0989 Hz
78+
#define ESP_AUDIO_FREQ_TK_60_125SPEED 39204 // 125% speed
79+
#define ESP_AUDIO_FREQ_TK_60_150SPEED 47046 // 150% speed
7480
#define ESP_AUDIO_SAMPLES_TK_60 524
7581
#define ESP_AUDIO_SAMPLES_DIV_TK_60 6
7682
#define ESP_AUDIO_AY_DIV_TK_60 114
7783
#define ESP_AUDIO_OVERSAMPLES_DIV_TK_60 19
7884

7985
#define ESP_AUDIO_OVERSAMPLES_128 3732
8086
#define ESP_AUDIO_FREQ_128 31112 // ESP_AUDIO_SAMPLES_128 * 50,020008 fps = 31112,445 Hz.
87+
#define ESP_AUDIO_FREQ_128_125SPEED 38890 // 125% speed
88+
#define ESP_AUDIO_FREQ_128_150SPEED 46669 // 150% speed
8189
#define ESP_AUDIO_SAMPLES_128 622
8290
#define ESP_AUDIO_SAMPLES_DIV_128 6
8391
#define ESP_AUDIO_AY_DIV_128 114
8492
#define ESP_AUDIO_OVERSAMPLES_DIV_128 19
8593

8694
#define ESP_AUDIO_OVERSAMPLES_PENTAGON 4480
8795
#define ESP_AUDIO_FREQ_PENTAGON 31250 // ESP_AUDIO_SAMPLES_PENTAGON * 48,828125 frames per second = 31250 Hz
96+
#define ESP_AUDIO_FREQ_PENTAGON_125SPEED 39062 // 125% speed
97+
#define ESP_AUDIO_FREQ_PENTAGON_150SPEED 46876 // 150% speed
8898
#define ESP_AUDIO_SAMPLES_PENTAGON 640
8999
#define ESP_AUDIO_SAMPLES_DIV_PENTAGON 7
90100
#define ESP_AUDIO_AY_DIV_PENTAGON 112
@@ -131,15 +141,15 @@ class ESPectrum
131141
static int faudioBit;
132142
static int samplesPerFrame;
133143
static bool AY_emu;
134-
static int Audio_freq;
144+
static int Audio_freq[4];
135145

136-
static bool ESP_delay;
146+
static uint8_t ESP_delay;
137147
static int sync_cnt;
138148

139149
static int TapeNameScroller;
140150

141151
static int64_t ts_start;
142-
static int64_t target;
152+
static int64_t target[4];
143153
static double totalseconds;
144154
static double totalsecondsnodelay;
145155
static int64_t elapsed;

include/FileUtils.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class FileUtils
7575
static void unmountSDCard();
7676

7777
static bool isMountedSDCard();
78-
static void remountSDCardIfNeeded();
78+
static bool isSDReady();
7979

8080
// static String getAllFilesFrom(const String path);
8181
// static void listAllFiles();

include/cpuESP.h

+14
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,24 @@ visit https://zxespectrum.speccy.org/contacto
4646
#define TSTATES_PER_FRAME_PENTAGON 71680
4747

4848
#define MICROS_PER_FRAME_48 19968
49+
#define MICROS_PER_FRAME_48_125SPEED 15974
50+
#define MICROS_PER_FRAME_48_150SPEED 13312
51+
4952
#define MICROS_PER_FRAME_TK_50 19895
53+
#define MICROS_PER_FRAME_TK_50_125SPEED 15916
54+
#define MICROS_PER_FRAME_TK_50_150SPEED 13263
55+
5056
#define MICROS_PER_FRAME_TK_60 16707
57+
#define MICROS_PER_FRAME_TK_60_125SPEED 13366
58+
#define MICROS_PER_FRAME_TK_60_150SPEED 11138
59+
5160
#define MICROS_PER_FRAME_128 19992
61+
#define MICROS_PER_FRAME_128_125SPEED 15994
62+
#define MICROS_PER_FRAME_128_150SPEED 13328
63+
5264
#define MICROS_PER_FRAME_PENTAGON 20480
65+
#define MICROS_PER_FRAME_PENTAGON_125SPEED 16384
66+
#define MICROS_PER_FRAME_PENTAGON_150SPEED 13653
5367

5468
#define INT_START48 0
5569
#define INT_END48 32

src/CPU.cpp

+25-6
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ void CPU::reset() {
7272
statesInFrame = TSTATES_PER_FRAME_48;
7373
IntStart = INT_START48;
7474
IntEnd = INT_END48 + CPU::latetiming;
75-
ESPectrum::target = MICROS_PER_FRAME_48;
75+
ESPectrum::target[0] = MICROS_PER_FRAME_48;
76+
ESPectrum::target[1] = MICROS_PER_FRAME_48;
77+
ESPectrum::target[2] = MICROS_PER_FRAME_48_125SPEED;
78+
ESPectrum::target[3] = MICROS_PER_FRAME_48_150SPEED;
79+
7680
} else if (Config::arch == "TK90X" || Config::arch == "TK95") {
7781

7882
Z80Ops::is48 = true;
@@ -83,17 +87,26 @@ void CPU::reset() {
8387
case 0:
8488
Ports::getFloatBusData = &Ports::getFloatBusData48;
8589
statesInFrame = TSTATES_PER_FRAME_48;
86-
ESPectrum::target = MICROS_PER_FRAME_48;
90+
ESPectrum::target[0] = MICROS_PER_FRAME_48;
91+
ESPectrum::target[1] = MICROS_PER_FRAME_48;
92+
ESPectrum::target[2] = MICROS_PER_FRAME_48_125SPEED;
93+
ESPectrum::target[3] = MICROS_PER_FRAME_48_150SPEED;
8794
break;
8895
case 1:
8996
Ports::getFloatBusData = &Ports::getFloatBusDataTK;
9097
statesInFrame = TSTATES_PER_FRAME_TK_50;
91-
ESPectrum::target = MICROS_PER_FRAME_TK_50;
98+
ESPectrum::target[0] = MICROS_PER_FRAME_TK_50;
99+
ESPectrum::target[1] = MICROS_PER_FRAME_TK_50;
100+
ESPectrum::target[2] = MICROS_PER_FRAME_TK_50_125SPEED;
101+
ESPectrum::target[3] = MICROS_PER_FRAME_TK_50_150SPEED;
92102
break;
93103
case 2:
94104
Ports::getFloatBusData = &Ports::getFloatBusDataTK;
95105
statesInFrame = TSTATES_PER_FRAME_TK_60;
96-
ESPectrum::target = MICROS_PER_FRAME_TK_60;
106+
ESPectrum::target[0] = MICROS_PER_FRAME_TK_60;
107+
ESPectrum::target[1] = MICROS_PER_FRAME_TK_60;
108+
ESPectrum::target[2] = MICROS_PER_FRAME_TK_60_125SPEED;
109+
ESPectrum::target[3] = MICROS_PER_FRAME_TK_60_150SPEED;
97110
}
98111

99112
IntStart = INT_STARTTK;
@@ -107,15 +120,21 @@ void CPU::reset() {
107120
statesInFrame = TSTATES_PER_FRAME_128;
108121
IntStart = INT_START128;
109122
IntEnd = INT_END128 + CPU::latetiming;
110-
ESPectrum::target = MICROS_PER_FRAME_128;
123+
ESPectrum::target[0] = MICROS_PER_FRAME_128;
124+
ESPectrum::target[1] = MICROS_PER_FRAME_128;
125+
ESPectrum::target[2] = MICROS_PER_FRAME_128_125SPEED;
126+
ESPectrum::target[3] = MICROS_PER_FRAME_128_150SPEED;
111127
} else if (Config::arch == "Pentagon") {
112128
Z80Ops::is48 = false;
113129
Z80Ops::is128 = false;
114130
Z80Ops::isPentagon = true;
115131
statesInFrame = TSTATES_PER_FRAME_PENTAGON;
116132
IntStart = INT_START_PENTAGON;
117133
IntEnd = INT_END_PENTAGON + CPU::latetiming;
118-
ESPectrum::target = MICROS_PER_FRAME_PENTAGON;
134+
ESPectrum::target[0] = MICROS_PER_FRAME_PENTAGON;
135+
ESPectrum::target[1] = MICROS_PER_FRAME_PENTAGON;
136+
ESPectrum::target[2] = MICROS_PER_FRAME_PENTAGON_125SPEED;
137+
ESPectrum::target[3] = MICROS_PER_FRAME_PENTAGON_150SPEED;
119138
}
120139

121140
stFrame = statesInFrame - IntEnd;

src/CaptureBMP.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ visit https://zxespectrum.speccy.org/contacto
4545
void CaptureToBmp()
4646
{
4747

48+
if (!FileUtils::isSDReady()) return;
49+
4850
char filename[] = "ESP00000.bmp";
4951

5052
unsigned char bmp_header2[BMP_HEADER2_SIZE] = {
@@ -72,19 +74,19 @@ void CaptureToBmp()
7274
string filelist;
7375
string scrdir = (string) MOUNT_POINT_SD + DISK_SCR_DIR;
7476

75-
FileUtils::remountSDCardIfNeeded();
76-
7777
// Create dir if it doesn't exist
7878
struct stat stat_buf;
7979
if (stat(scrdir.c_str(), &stat_buf) != 0) {
8080
if (mkdir(scrdir.c_str(),0775) != 0) {
81+
delete[] linebuf;
8182
printf("Capture BMP: problem creating capture dir\n");
8283
return;
8384
}
8485
}
8586

8687
DIR* dir = opendir(scrdir.c_str());
8788
if (dir == NULL) {
89+
delete[] linebuf;
8890
printf("Capture BMP: problem accessing capture dir\n");
8991
return;
9092
}

0 commit comments

Comments
 (0)