1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-04-17 00:15:25 +00:00

Archie: add CMOS.RAM upload

This commit is contained in:
Gyorgy Szombathelyi
2019-03-02 22:44:11 +01:00
parent 9945a22254
commit dbb2a7424e
3 changed files with 44 additions and 10 deletions

View File

@@ -14,6 +14,7 @@
typedef struct {
unsigned long system_ctrl; // system control word
char rom_img[12]; // rom image file name
char cmos_img[12]; // cmos image file name
} archie_config_t;
static archie_config_t config;
@@ -83,6 +84,11 @@ char *archie_get_rom_name(void) {
return buffer;
}
char *archie_get_cmos_name(void) {
nice_name(buffer, config.cmos_img);
return buffer;
}
char *archie_get_floppy_name(char i) {
if(!floppy[i].size)
strcpy(buffer, "* no disk *");
@@ -133,6 +139,18 @@ char archie_floppy_is_inserted(char i) {
return(floppy[i].size != 0);
}
void archie_set_cmos(fileTYPE *file) {
if(!file) return;
archie_debugf("CMOS file %.11s with %lu bytes to send",
file->name, file->size);
// save file name
memcpy(config.cmos_img, file->name, 11);
user_io_file_tx(file, 0x03);
}
void archie_set_rom(fileTYPE *file) {
if(!file) return;
@@ -192,6 +210,7 @@ void archie_init(void) {
// set config defaults
config.system_ctrl = 0;
strcpy(config.rom_img, "RISCOS ROM");
strcpy(config.cmos_img, "CMOS RAM");
// try to load config from card
if(FileOpen(&file, CONFIG_FILENAME)) {
@@ -217,6 +236,12 @@ void archie_init(void) {
} else
archie_debugf("RISCOS.EXT no found");
// upload cmos file
if(FileOpen(&file, config.cmos_img))
archie_set_cmos(&file);
else
archie_debugf("CMOS %.11s no found", config.cmos_img);
// try to open default floppies
for(i=0;i<MAX_FLOPPY;i++) {
char fdc_name[] = "FLOPPY0 ADF";

View File

@@ -8,8 +8,10 @@ void archie_poll(void);
void archie_kbd(unsigned short code);
void archie_mouse(unsigned char b, char x, char y);
char *archie_get_rom_name(void);
char *archie_get_cmos_name(void);
char *archie_get_floppy_name(char b);
void archie_set_rom(fileTYPE *);
void archie_set_cmos(fileTYPE *);
void archie_set_floppy(char i, fileTYPE *);
char archie_floppy_is_inserted(char i);
void archie_save_config(void);

27
menu.c
View File

@@ -716,7 +716,7 @@ void HandleUI(void)
/******************************************************************/
case MENU_ARCHIE_MAIN1: {
menumask=0x3f;
menumask=0x7f;
OsdSetTitle("ARCHIE", 0);
strcpy(s, " Floppy 0: ");
@@ -727,17 +727,19 @@ void HandleUI(void)
strcat(s, archie_get_floppy_name(1));
OsdWrite(1, s, menusub == 1, 0);
strcpy(s, " OS ROM: ");
strcpy(s, " OS ROM: ");
strcat(s, archie_get_rom_name());
OsdWrite(2, s, menusub == 2, 0);
OsdWrite(3, "", 0,0);
strcpy(s, " CMOS RAM: ");
strcat(s, archie_get_cmos_name());
OsdWrite(3, s, menusub == 3, 0);
// the following is exactly like the atatri st core
OsdWrite(4, " Firmware & Core \x16", menusub == 3,0);
OsdWrite(5, " Save config ", menusub == 4,0);
OsdWrite(4, " Firmware & Core \x16", menusub == 4,0);
OsdWrite(5, " Save config ", menusub == 5,0);
OsdWrite(6, "", 0,0);
OsdWrite(7, STD_EXIT, menusub == 5,0);
OsdWrite(7, STD_EXIT, menusub == 6,0);
menustate = MENU_ARCHIE_MAIN2;
parentstate=MENU_ARCHIE_MAIN1;
} break;
@@ -762,17 +764,21 @@ void HandleUI(void)
SelectFile("ROM", SCAN_LFN, MENU_ARCHIE_MAIN_FILE_SELECTED, MENU_ARCHIE_MAIN1, 0);
break;
case 3: // Firmware submenu
case 3: // Load CMOS
SelectFile("RAM", SCAN_LFN, MENU_ARCHIE_MAIN_FILE_SELECTED, MENU_ARCHIE_MAIN1, 0);
break;
case 4: // Firmware submenu
menustate = MENU_FIRMWARE1;
menusub = 1;
break;
case 4: // Save config
case 5: // Save config
menustate = MENU_NONE1;
archie_save_config();
break;
case 5: // Exit
case 6: // Exit
menustate = MENU_NONE1;
break;
}
@@ -789,6 +795,7 @@ void HandleUI(void)
user_io_file_mount(&file, 1);
}
if(menusub == 2) archie_set_rom(&file);
if(menusub == 3) archie_set_cmos(&file);
menustate = MENU_ARCHIE_MAIN1;
break;