Skip to content
This repository was archived by the owner on Apr 24, 2023. It is now read-only.

Commit 5b840e2

Browse files
Florin MunteanFlorin Muntean
Florin Muntean
authored and
Florin Muntean
committed
Added support for loading Z80 file snapshots.
They can be stored into the z80 folder under the data and kept separately from the sna files.
1 parent 8179be1 commit 5b840e2

File tree

10 files changed

+461
-5
lines changed

10 files changed

+461
-5
lines changed

data/z80/Engine.z80

44.1 KB
Binary file not shown.

include/Disk.h

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
extern boolean cfg_demo_mode_on;
1212
extern unsigned short cfg_demo_every;
1313
extern String cfg_sna_file_list;
14+
extern String cfg_z80_file_list;
1415
extern String cfg_arch;
1516
extern String cfg_ram_file;
1617
extern String cfg_rom_set;
@@ -32,9 +33,11 @@ String getAllFilesFrom(const String path);
3233
void listAllFiles();
3334
File IRAM_ATTR open_read_file(String filename);
3435
void IRAM_ATTR load_ram(String sna_file);
36+
void IRAM_ATTR load_z80(String z80_file);
3537
String getFileEntriesFromDir(String path);
3638
unsigned short countFileEntriesFromDir(String path);
3739
void load_rom(String arch, String romset);
3840
String getSnaFileList();
41+
String getz80FileList();
3942
void config_read();
4043
void IRAM_ATTR config_save();

include/def/files.h

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#define DISK_BOOT_FILENAME "/boot.cfg"
22
#define DISK_ROM_DIR "/rom"
33
#define DISK_SNA_DIR "/sna"
4+
#define DISK_Z80_DIR "/z80"
45
#define NO_RAM_FILE "none"
56
#define SIZE48K 49179

include/def/msg.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
#define OSD_DEMO_MODE_OFF "Demo Mode OFF"
3333
#define OSD_PAUSE "--=[PAUSED]=--"
3434
#define MENU_SNA_TITLE "Select Snapshot"
35-
#define MENU_MAIN "Main Menu\nChange ROM\nChange RAM\nReset\nDemo Mode\nHelp\nReturn\n"
35+
#define MENU_Z80_TITLE "Select Z80 file to load"
36+
#define MENU_MAIN "Main Menu\nChange ROM\nChange RAM\nLoad Z80\nReset\nDemo Mode\nHelp\nReturn\n"
3637
#define MENU_RESET "Reset Menu\nSoft reset\nHard reset\nCancel\n"
3738
#define MENU_DEMO "Demo mode\nOFF\n 1 minute\n 3 minutes\n 5 minutes\n15 minutes\n30 minutes\n 1 hour\n"
3839
#define MENU_ARCH "Select Arch\n"

include/osd.h

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ unsigned short rowCount(String menu);
6767
String rowGet(String menu, unsigned short row_number);
6868
// SNA Management
6969
void changeSna(String sna_filename);
70+
void loadZ80(String z80_filename);
7071
void setDemoMode(boolean on, unsigned short every);
7172
// ULA
7273
void stepULA();

src/Disk.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ String cfg_arch = "128K";
2626
String cfg_ram_file = NO_RAM_FILE;
2727
String cfg_rom_set = "SINCLAIR";
2828
String cfg_sna_file_list;
29+
String cfg_z80_file_list;
2930
boolean cfg_slog_on = true;
3031
boolean cfg_wconn = false;
3132
String cfg_wssid = "none";
@@ -252,6 +253,54 @@ void load_ram(String sna_file) {
252253
KB_INT_START;
253254
}
254255

256+
257+
extern int load_z80_file(File *file);
258+
259+
void load_z80(String z80_file){
260+
File lhandle;
261+
uint16_t size_read;
262+
byte sp_h, sp_l;
263+
uint16_t retaddr;
264+
int sna_size;
265+
zx_reset();
266+
267+
Serial.printf("%s Z80: %ub\n", MSG_FREE_HEAP_BEFORE, ESP.getFreeHeap());
268+
269+
KB_INT_STOP;
270+
271+
lhandle = open_read_file(z80_file);
272+
sna_size = lhandle.size();
273+
274+
if (cfg_arch == "48K") {
275+
rom_latch = 0;
276+
rom_in_use = 0;
277+
bank_latch = 0;
278+
paging_lock = 1;
279+
}
280+
if (sna_size < 50000 && cfg_arch != "48K") {
281+
rom_in_use = 1;
282+
rom_latch = 1;
283+
paging_lock = 1;
284+
bank_latch = 0;
285+
video_latch = 0;
286+
paging_lock = 1;
287+
bank_latch = 0;
288+
video_latch = 0;
289+
}
290+
size_read = 0;
291+
292+
int ret = load_z80_file(&lhandle);
293+
294+
lhandle.close();
295+
296+
297+
Serial.printf("%s SNA: %u\n", MSG_FREE_HEAP_AFTER, ESP.getFreeHeap());
298+
Serial.printf("Ret address: %x Stack: %x AF: %x Border: %x sna_size: %d rom: %d bank: %x\n", _zxCpu.pc,
299+
_zxCpu.registers.word[Z80_SP], _zxCpu.registers.word[Z80_AF], borderTemp, sna_size, rom_in_use,
300+
bank_latch);
301+
KB_INT_START;
302+
}
303+
255304
String getFileEntriesFromDir(String path) {
256305
KB_INT_STOP;
257306
Serial.printf("Getting entries from: '%s'\n", path.c_str());
@@ -340,6 +389,8 @@ void load_rom(String arch, String romset) {
340389
// Get all sna files
341390
String getSnaFileList() { return getFileEntriesFromDir(DISK_SNA_DIR); }
342391

392+
String getz80FileList() { return getFileEntriesFromDir(DISK_Z80_DIR); }
393+
343394
// Read config from FS
344395
void config_read() {
345396
KB_INT_STOP;
@@ -393,6 +444,7 @@ void config_read() {
393444
cfg_f.close();
394445
Serial.println("Config file loaded OK");
395446
cfg_sna_file_list = (String)MENU_SNA_TITLE + "\n" + getSnaFileList();
447+
cfg_z80_file_list = (String)MENU_Z80_TITLE+"\n"+getz80FileList();
396448
KB_INT_START;
397449
}
398450

src/OSD/osd.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,15 @@ void do_OSD() {
8282
changeSna(rowGet(cfg_sna_file_list, snanum));
8383
}
8484
} else if (opt == 3) {
85+
//load Z80 files
86+
unsigned short snanum = menuRun(cfg_z80_file_list);
87+
if (snanum > 0) {
88+
if (cfg_demo_mode_on) {
89+
setDemoMode(OFF, 0);
90+
}
91+
loadZ80(rowGet(cfg_z80_file_list, snanum));
92+
}
93+
} else if (opt == 4) {
8594
// Reset
8695
byte opt2 = menuRun(MENU_RESET);
8796
if (opt2 == 1) {
@@ -95,7 +104,7 @@ void do_OSD() {
95104
config_save();
96105
zx_reset();
97106
}
98-
} else if (opt == 4) {
107+
} else if (opt == 5) {
99108
// Demo mode
100109
byte opt2 = menuRun(MENU_DEMO);
101110
if (opt2 == 1) {
@@ -124,7 +133,7 @@ void do_OSD() {
124133
}
125134
}
126135
vTaskDelay(500);
127-
} else if (opt == 5) {
136+
} else if (opt == 6) {
128137
// Help
129138
drawOSD();
130139
osdAt(2, 0);

src/OSD/sna.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ void changeSna(String sna_filename) {
1515
config_save();
1616
}
1717

18+
void loadZ80(String z80_filename){
19+
osdCenteredMsg((String)MSG_LOADING + ": " + z80_filename, LEVEL_INFO);
20+
zx_reset();
21+
Serial.printf("Loading z80: %s\n", z80_filename.c_str());
22+
load_z80((String)DISK_Z80_DIR + "/" + z80_filename);
23+
}
24+
1825
// Demo mode on off
1926
void setDemoMode(boolean on, unsigned short every) {
2027
cfg_demo_mode_on = on;

0 commit comments

Comments
 (0)