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:
25
archie.c
25
archie.c
@@ -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";
|
||||
|
||||
2
archie.h
2
archie.h
@@ -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
27
menu.c
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user