Support for Archie.
This commit is contained in:
87
archie.c
87
archie.c
@@ -5,6 +5,7 @@
|
||||
#include "menu.h"
|
||||
#include "archie.h"
|
||||
#include "debug.h"
|
||||
#include "user_io.h"
|
||||
|
||||
#define MAX_FLOPPY 4
|
||||
|
||||
@@ -74,35 +75,34 @@ static unsigned long hold_off_timer;
|
||||
|
||||
static char sector_buffer[1024];
|
||||
|
||||
static void nice_name(char *dest, char *src)
|
||||
{
|
||||
char *c;
|
||||
|
||||
// copy and append nul
|
||||
strncpy(dest, src, 8);
|
||||
for (c = dest + 7; *c == ' '; c--); c++;
|
||||
*c++ = '.';
|
||||
strncpy(c, src + 8, 3);
|
||||
for (c += 2; *c == ' '; c--); c++;
|
||||
*c++ = '\0';
|
||||
}
|
||||
|
||||
static char buffer[17]; // local buffer to assemble file name (8+.+3+\0)
|
||||
|
||||
char *archie_get_rom_name(void)
|
||||
{
|
||||
nice_name(buffer, config.rom_img);
|
||||
return buffer;
|
||||
char *p = strrchr(config.rom_img, '/');
|
||||
if (!p) p = config.rom_img; else p++;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
char *archie_get_floppy_name(char i)
|
||||
{
|
||||
if (!floppy[i].size)
|
||||
strcpy(buffer, "* no disk *");
|
||||
else
|
||||
nice_name(buffer, floppy[i].name);
|
||||
if (!floppy[i].size) return "* no disk *";
|
||||
|
||||
return buffer;
|
||||
char *p = strrchr(floppy[i].name, '/');
|
||||
if (!p) p = floppy[i].name; else p++;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
void archie_set_ar(char i)
|
||||
{
|
||||
if (i) config.system_ctrl |= 1;
|
||||
else config.system_ctrl &= ~1;
|
||||
user_io_8bit_set_status((i ? -1 : 0), 2);
|
||||
}
|
||||
|
||||
char archie_get_ar()
|
||||
{
|
||||
return config.system_ctrl & 1;
|
||||
}
|
||||
|
||||
void archie_save_config(void)
|
||||
@@ -200,6 +200,8 @@ char archie_floppy_is_inserted(char i)
|
||||
void archie_set_rom(char *name)
|
||||
{
|
||||
if (!name) return;
|
||||
|
||||
printf("archie_set_rom(%s)\n", name);
|
||||
|
||||
// save file name
|
||||
strcpy(config.rom_img, name);
|
||||
@@ -215,7 +217,7 @@ static void archie_kbd_enqueue(unsigned char state, unsigned char byte)
|
||||
return;
|
||||
}
|
||||
|
||||
archie_debugf("KBD ENQUEUE %x (%x)", byte, state);
|
||||
//archie_debugf("KBD ENQUEUE %x (%x)", byte, state);
|
||||
tx_queue[tx_queue_wptr][0] = state;
|
||||
tx_queue[tx_queue_wptr][1] = byte;
|
||||
tx_queue_wptr = QUEUE_NEXT(tx_queue_wptr);
|
||||
@@ -223,7 +225,7 @@ static void archie_kbd_enqueue(unsigned char state, unsigned char byte)
|
||||
|
||||
static void archie_kbd_tx(unsigned char state, unsigned char byte)
|
||||
{
|
||||
archie_debugf("KBD TX %x (%x)", byte, state);
|
||||
//archie_debugf("KBD TX %x (%x)", byte, state);
|
||||
spi_uio_cmd_cont(0x05);
|
||||
spi8(byte);
|
||||
DisableIO();
|
||||
@@ -258,7 +260,7 @@ void archie_init(void)
|
||||
|
||||
// set config defaults
|
||||
config.system_ctrl = 0;
|
||||
strcpy(config.rom_img, "RISCOS.ROM");
|
||||
strcpy(config.rom_img, "Archie/RISCOS.ROM");
|
||||
|
||||
// try to load config from card
|
||||
int size = FileLoadConfig(CONFIG_FILENAME, 0, 0);
|
||||
@@ -274,17 +276,19 @@ void archie_init(void)
|
||||
else
|
||||
archie_debugf("No %s config found", CONFIG_FILENAME);
|
||||
|
||||
archie_set_ar(archie_get_ar());
|
||||
|
||||
// upload rom file
|
||||
archie_set_rom(config.rom_img);
|
||||
|
||||
// upload ext file
|
||||
archie_send_file(0x02, "RISCOS.EXT");
|
||||
//archie_send_file(0x02, "RISCOS.EXT");
|
||||
|
||||
// try to open default floppies
|
||||
for (i = 0; i<MAX_FLOPPY; i++)
|
||||
{
|
||||
char fdc_name[] = "FLOPPY0.ADF";
|
||||
fdc_name[6] = '0' + i;
|
||||
char fdc_name[] = "Archie/FLOPPY0.ADF";
|
||||
fdc_name[13] = '0' + i;
|
||||
if (FileOpen(&floppy[i], fdc_name))
|
||||
archie_debugf("Inserted floppy %d with %d bytes", i, floppy[i].size);
|
||||
else
|
||||
@@ -299,7 +303,7 @@ void archie_init(void)
|
||||
|
||||
void archie_kbd(unsigned short code)
|
||||
{
|
||||
archie_debugf("KBD key code %x", code);
|
||||
//archie_debugf("KBD key code %x", code);
|
||||
|
||||
// don't send anything yet if we are still in reset state
|
||||
if (kbd_state <= STATE_RAK2)
|
||||
@@ -322,9 +326,9 @@ void archie_kbd(unsigned short code)
|
||||
archie_kbd_send(STATE_WAIT4ACK2, prefix | (code & 0x0f));
|
||||
}
|
||||
|
||||
void archie_mouse(unsigned char b, char x, char y)
|
||||
void archie_mouse(unsigned char b, int16_t x, int16_t y)
|
||||
{
|
||||
archie_debugf("KBD MOUSE X:%d Y:%d B:%d", x, y, b);
|
||||
//archie_debugf("KBD MOUSE X:%d Y:%d B:%d", x, y, b);
|
||||
|
||||
// max values -64 .. 63
|
||||
mouse_x += x;
|
||||
@@ -386,7 +390,6 @@ static void archie_check_queue(void)
|
||||
|
||||
void archie_handle_kbd(void)
|
||||
{
|
||||
|
||||
#ifdef HOLD_OFF_TIME
|
||||
if ((kbd_state == STATE_HOLD_OFF) && CheckTimer(hold_off_timer)) {
|
||||
archie_debugf("KBD resume after hold off");
|
||||
@@ -412,7 +415,7 @@ void archie_handle_kbd(void)
|
||||
{
|
||||
if (CheckTimer(ack_timeout))
|
||||
{
|
||||
archie_debugf("KBD timeout in reset state");
|
||||
//archie_debugf("KBD timeout in reset state");
|
||||
|
||||
archie_kbd_send(STATE_RAK1, HRST);
|
||||
ack_timeout = GetTimer(20); // 20ms timeout
|
||||
@@ -425,7 +428,7 @@ void archie_handle_kbd(void)
|
||||
unsigned char data = spi_in();
|
||||
DisableIO();
|
||||
|
||||
archie_debugf("KBD RX %x", data);
|
||||
//archie_debugf("KBD RX %x", data);
|
||||
|
||||
switch (data) {
|
||||
// arm requests reset
|
||||
@@ -518,10 +521,9 @@ void archie_handle_kbd(void)
|
||||
DisableIO();
|
||||
}
|
||||
|
||||
static unsigned char fdc_buffer[1024];
|
||||
|
||||
void archie_handle_fdc(void)
|
||||
{
|
||||
static uint8_t buffer[1024];
|
||||
static unsigned char old_status[4] = { 0,0,0,0 };
|
||||
unsigned char status[4];
|
||||
|
||||
@@ -550,6 +552,7 @@ void archie_handle_fdc(void)
|
||||
{
|
||||
if (status[0] & 2)
|
||||
{
|
||||
printf("p0\n");
|
||||
int floppy_map = status[3] >> 4;
|
||||
int side = (status[2] & 0x80) ? 0 : 1;
|
||||
int track = status[2] & 0x7f;
|
||||
@@ -563,12 +566,16 @@ void archie_handle_fdc(void)
|
||||
if (floppy_map == (0x0f ^ (1 << i)))
|
||||
floppy_index = i;
|
||||
|
||||
printf("p1\n");
|
||||
|
||||
if (floppy_index < 0)
|
||||
archie_x_debugf("DIO: unexpected floppy_map %x", floppy_map);
|
||||
else
|
||||
{
|
||||
fileTYPE *f = &floppy[floppy_index];
|
||||
|
||||
printf("p2\n");
|
||||
|
||||
archie_x_debugf("DIO: floppy %d sector read SD%d T%d S%d -> %ld",
|
||||
floppy_index, side, track, sector, lba);
|
||||
|
||||
@@ -577,15 +584,13 @@ void archie_handle_fdc(void)
|
||||
else {
|
||||
DISKLED_ON;
|
||||
// read two consecutive sectors
|
||||
FileSeek(f, lba, SEEK_SET);
|
||||
FileRead(f, fdc_buffer);
|
||||
FileNextSector(f);
|
||||
FileRead(f, fdc_buffer + 512);
|
||||
FileSeekLBA(f, lba);
|
||||
FileReadAdv(f, buffer, 1024);
|
||||
DISKLED_OFF;
|
||||
|
||||
EnableFpga();
|
||||
spi8(ARCHIE_FDC_TX_DATA);
|
||||
spi_write(fdc_buffer, 1024, 0);
|
||||
spi_write(buffer, 1024, 0);
|
||||
DisableFpga();
|
||||
}
|
||||
}
|
||||
|
||||
5
archie.h
5
archie.h
@@ -6,7 +6,7 @@
|
||||
void archie_init(void);
|
||||
void archie_poll(void);
|
||||
void archie_kbd(unsigned short code);
|
||||
void archie_mouse(unsigned char b, char x, char y);
|
||||
void archie_mouse(unsigned char b, int16_t x, int16_t y);
|
||||
char *archie_get_rom_name(void);
|
||||
char *archie_get_floppy_name(char b);
|
||||
void archie_set_rom(char *);
|
||||
@@ -14,4 +14,7 @@ void archie_set_floppy(char i, char *);
|
||||
char archie_floppy_is_inserted(char i);
|
||||
void archie_save_config(void);
|
||||
|
||||
void archie_set_ar(char i);
|
||||
char archie_get_ar();
|
||||
|
||||
#endif // ARCHIE_H
|
||||
|
||||
262
input.c
262
input.c
@@ -538,6 +538,266 @@ static const int ev2ps2[] =
|
||||
NONE //255 ???
|
||||
};
|
||||
|
||||
static int ev2archie[] =
|
||||
{
|
||||
NONE, //0 KEY_RESERVED
|
||||
0x00, //1 KEY_ESC
|
||||
0x11, //2 KEY_1
|
||||
0x12, //3 KEY_2
|
||||
0x13, //4 KEY_3
|
||||
0x14, //5 KEY_4
|
||||
0x15, //6 KEY_5
|
||||
0x16, //7 KEY_6
|
||||
0x17, //8 KEY_7
|
||||
0x18, //9 KEY_8
|
||||
0x19, //10 KEY_9
|
||||
0x1a, //11 KEY_0
|
||||
0x1b, //12 KEY_MINUS
|
||||
0x1c, //13 KEY_EQUAL
|
||||
0x1e, //14 KEY_BACKSPACE
|
||||
0x26, //15 KEY_TAB
|
||||
0x27, //16 KEY_Q
|
||||
0x28, //17 KEY_W
|
||||
0x29, //18 KEY_E
|
||||
0x2a, //19 KEY_R
|
||||
0x2b, //20 KEY_T
|
||||
0x2c, //21 KEY_Y
|
||||
0x2d, //22 KEY_U
|
||||
0x2e, //23 KEY_I
|
||||
0x2f, //24 KEY_O
|
||||
0x30, //25 KEY_P
|
||||
0x31, //26 KEY_LEFTBRACE
|
||||
0x32, //27 KEY_RIGHTBRACE
|
||||
0x47, //28 KEY_ENTER
|
||||
0x3b, //29 KEY_LEFTCTRL
|
||||
0x3c, //30 KEY_A
|
||||
0x3d, //31 KEY_S
|
||||
0x3e, //32 KEY_D
|
||||
0x3f, //33 KEY_F
|
||||
0x40, //34 KEY_G
|
||||
0x41, //35 KEY_H
|
||||
0x42, //36 KEY_J
|
||||
0x43, //37 KEY_K
|
||||
0x44, //38 KEY_L
|
||||
0x45, //39 KEY_SEMICOLON
|
||||
0x46, //40 KEY_APOSTROPHE
|
||||
0x10, //41 KEY_GRAVE
|
||||
0x4c, //42 KEY_LEFTSHIFT
|
||||
0x33, //43 KEY_BACKSLASH
|
||||
0x4e, //44 KEY_Z
|
||||
0x4f, //45 KEY_X
|
||||
0x50, //46 KEY_C
|
||||
0x51, //47 KEY_V
|
||||
0x52, //48 KEY_B
|
||||
0x53, //49 KEY_N
|
||||
0x54, //50 KEY_M
|
||||
0x55, //51 KEY_COMMA
|
||||
0x56, //52 KEY_DOT
|
||||
0x57, //53 KEY_SLASH
|
||||
0x58, //54 KEY_RIGHTSHIFT
|
||||
0x24, //55 KEY_KPASTERISK
|
||||
0x5e, //56 KEY_LEFTALT
|
||||
0x5f, //57 KEY_SPACE
|
||||
0x5d, //58 KEY_CAPSLOCK
|
||||
0x01, //59 KEY_F1
|
||||
0x02, //60 KEY_F2
|
||||
0x03, //61 KEY_F3
|
||||
0x04, //62 KEY_F4
|
||||
0x05, //63 KEY_F5
|
||||
0x06, //64 KEY_F6
|
||||
0x07, //65 KEY_F7
|
||||
0x08, //66 KEY_F8
|
||||
0x09, //67 KEY_F9
|
||||
0x0a, //68 KEY_F10
|
||||
0x22, //69 KEY_NUMLOCK
|
||||
NONE, //70 KEY_SCROLLLOCK
|
||||
0x37, //71 KEY_KP7
|
||||
0x38, //72 KEY_KP8
|
||||
0x39, //73 KEY_KP9
|
||||
0x3a, //74 KEY_KPMINUS
|
||||
0x48, //75 KEY_KP4
|
||||
0x49, //76 KEY_KP5
|
||||
0x4a, //77 KEY_KP6
|
||||
0x4b, //78 KEY_KPPLUS
|
||||
0x5a, //79 KEY_KP1
|
||||
0x5b, //80 KEY_KP2
|
||||
0x5c, //81 KEY_KP3
|
||||
0x65, //82 KEY_KP0
|
||||
0x66, //83 KEY_KPDOT
|
||||
NONE, //84 ???
|
||||
NONE, //85 KEY_ZENKAKU
|
||||
NONE, //86 KEY_102ND
|
||||
0x0b, //87 KEY_F11
|
||||
0x0c, //88 KEY_F12
|
||||
NONE, //89 KEY_RO
|
||||
NONE, //90 KEY_KATAKANA
|
||||
NONE, //91 KEY_HIRAGANA
|
||||
NONE, //92 KEY_HENKAN
|
||||
NONE, //93 KEY_KATAKANA
|
||||
NONE, //94 KEY_MUHENKAN
|
||||
NONE, //95 KEY_KPJPCOMMA
|
||||
0x67, //96 KEY_KPENTER
|
||||
0x61, //97 KEY_RIGHTCTRL
|
||||
0x23, //98 KEY_KPSLASH
|
||||
0x0D, //99 KEY_SYSRQ
|
||||
0x60, //100 KEY_RIGHTALT
|
||||
NONE, //101 KEY_LINEFEED
|
||||
0x20, //102 KEY_HOME
|
||||
0x59, //103 KEY_UP
|
||||
0x21, //104 KEY_PAGEUP
|
||||
0x62, //105 KEY_LEFT
|
||||
0x64, //106 KEY_RIGHT
|
||||
0x35, //107 KEY_END
|
||||
0x63, //108 KEY_DOWN
|
||||
0x36, //109 KEY_PAGEDOWN
|
||||
0x1f, //110 KEY_INSERT
|
||||
0x34, //111 KEY_DELETE
|
||||
NONE, //112 KEY_MACRO
|
||||
NONE, //113 KEY_MUTE
|
||||
NONE, //114 KEY_VOLUMEDOWN
|
||||
NONE, //115 KEY_VOLUMEUP
|
||||
NONE, //116 KEY_POWER
|
||||
NONE, //117 KEY_KPEQUAL
|
||||
NONE, //118 KEY_KPPLUSMINUS
|
||||
0x0f, //119 KEY_PAUSE
|
||||
NONE, //120 KEY_SCALE
|
||||
NONE, //121 KEY_KPCOMMA
|
||||
NONE, //122 KEY_HANGEUL
|
||||
NONE, //123 KEY_HANJA
|
||||
NONE, //124 KEY_YEN
|
||||
NONE, //125 KEY_LEFTMETA
|
||||
NONE, //126 KEY_RIGHTMETA
|
||||
0x71, //127 KEY_COMPOSE
|
||||
NONE, //128 KEY_STOP
|
||||
NONE, //129 KEY_AGAIN
|
||||
NONE, //130 KEY_PROPS
|
||||
NONE, //131 KEY_UNDO
|
||||
NONE, //132 KEY_FRONT
|
||||
NONE, //133 KEY_COPY
|
||||
NONE, //134 KEY_OPEN
|
||||
NONE, //135 KEY_PASTE
|
||||
NONE, //136 KEY_FIND
|
||||
NONE, //137 KEY_CUT
|
||||
NONE, //138 KEY_HELP
|
||||
NONE, //139 KEY_MENU
|
||||
NONE, //140 KEY_CALC
|
||||
NONE, //141 KEY_SETUP
|
||||
NONE, //142 KEY_SLEEP
|
||||
NONE, //143 KEY_WAKEUP
|
||||
NONE, //144 KEY_FILE
|
||||
NONE, //145 KEY_SENDFILE
|
||||
NONE, //146 KEY_DELETEFILE
|
||||
NONE, //147 KEY_XFER
|
||||
NONE, //148 KEY_PROG1
|
||||
NONE, //149 KEY_PROG2
|
||||
NONE, //150 KEY_WWW
|
||||
NONE, //151 KEY_MSDOS
|
||||
NONE, //152 KEY_SCREENLOCK
|
||||
NONE, //153 KEY_DIRECTION
|
||||
NONE, //154 KEY_CYCLEWINDOWS
|
||||
NONE, //155 KEY_MAIL
|
||||
NONE, //156 KEY_BOOKMARKS
|
||||
NONE, //157 KEY_COMPUTER
|
||||
NONE, //158 KEY_BACK
|
||||
NONE, //159 KEY_FORWARD
|
||||
NONE, //160 KEY_CLOSECD
|
||||
NONE, //161 KEY_EJECTCD
|
||||
NONE, //162 KEY_EJECTCLOSECD
|
||||
NONE, //163 KEY_NEXTSONG
|
||||
NONE, //164 KEY_PLAYPAUSE
|
||||
NONE, //165 KEY_PREVIOUSSONG
|
||||
NONE, //166 KEY_STOPCD
|
||||
NONE, //167 KEY_RECORD
|
||||
NONE, //168 KEY_REWIND
|
||||
NONE, //169 KEY_PHONE
|
||||
NONE, //170 KEY_ISO
|
||||
NONE, //171 KEY_CONFIG
|
||||
NONE, //172 KEY_HOMEPAGE
|
||||
NONE, //173 KEY_REFRESH
|
||||
NONE, //174 KEY_EXIT
|
||||
NONE, //175 KEY_MOVE
|
||||
NONE, //176 KEY_EDIT
|
||||
NONE, //177 KEY_SCROLLUP
|
||||
NONE, //178 KEY_SCROLLDOWN
|
||||
NONE, //179 KEY_KPLEFTPAREN
|
||||
NONE, //180 KEY_KPRIGHTPAREN
|
||||
NONE, //181 KEY_NEW
|
||||
NONE, //182 KEY_REDO
|
||||
NONE, //183 KEY_F13
|
||||
NONE, //184 KEY_F14
|
||||
NONE, //185 KEY_F15
|
||||
NONE, //186 KEY_F16
|
||||
NONE, //187 KEY_F17
|
||||
NONE, //188 KEY_F18
|
||||
NONE, //189 KEY_F19
|
||||
NONE, //190 KEY_F20
|
||||
NONE, //191 KEY_F21
|
||||
NONE, //192 KEY_F22
|
||||
NONE, //193 KEY_F23
|
||||
NONE, //194 KEY_F24
|
||||
NONE, //195 ???
|
||||
NONE, //196 ???
|
||||
NONE, //197 ???
|
||||
NONE, //198 ???
|
||||
NONE, //199 ???
|
||||
NONE, //200 KEY_PLAYCD
|
||||
NONE, //201 KEY_PAUSECD
|
||||
NONE, //202 KEY_PROG3
|
||||
NONE, //203 KEY_PROG4
|
||||
NONE, //204 KEY_DASHBOARD
|
||||
NONE, //205 KEY_SUSPEND
|
||||
NONE, //206 KEY_CLOSE
|
||||
NONE, //207 KEY_PLAY
|
||||
NONE, //208 KEY_FASTFORWARD
|
||||
NONE, //209 KEY_BASSBOOST
|
||||
NONE, //210 KEY_PRINT
|
||||
NONE, //211 KEY_HP
|
||||
NONE, //212 KEY_CAMERA
|
||||
NONE, //213 KEY_SOUND
|
||||
NONE, //214 KEY_QUESTION
|
||||
NONE, //215 KEY_EMAIL
|
||||
NONE, //216 KEY_CHAT
|
||||
NONE, //217 KEY_SEARCH
|
||||
NONE, //218 KEY_CONNECT
|
||||
NONE, //219 KEY_FINANCE
|
||||
NONE, //220 KEY_SPORT
|
||||
NONE, //221 KEY_SHOP
|
||||
NONE, //222 KEY_ALTERASE
|
||||
NONE, //223 KEY_CANCEL
|
||||
NONE, //224 KEY_BRIGHT_DOWN
|
||||
NONE, //225 KEY_BRIGHT_UP
|
||||
NONE, //226 KEY_MEDIA
|
||||
NONE, //227 KEY_SWITCHVIDEO
|
||||
NONE, //228 KEY_DILLUMTOGGLE
|
||||
NONE, //229 KEY_DILLUMDOWN
|
||||
NONE, //230 KEY_DILLUMUP
|
||||
NONE, //231 KEY_SEND
|
||||
NONE, //232 KEY_REPLY
|
||||
NONE, //233 KEY_FORWARDMAIL
|
||||
NONE, //234 KEY_SAVE
|
||||
NONE, //235 KEY_DOCUMENTS
|
||||
NONE, //236 KEY_BATTERY
|
||||
NONE, //237 KEY_BLUETOOTH
|
||||
NONE, //238 KEY_WLAN
|
||||
NONE, //239 KEY_UWB
|
||||
NONE, //240 KEY_UNKNOWN
|
||||
NONE, //241 KEY_VIDEO_NEXT
|
||||
NONE, //242 KEY_VIDEO_PREV
|
||||
NONE, //243 KEY_BRIGHT_CYCLE
|
||||
NONE, //244 KEY_BRIGHT_AUTO
|
||||
NONE, //245 KEY_DISPLAY_OFF
|
||||
NONE, //246 KEY_WWAN
|
||||
NONE, //247 KEY_RFKILL
|
||||
NONE, //248 KEY_MICMUTE
|
||||
NONE, //249 ???
|
||||
NONE, //250 ???
|
||||
NONE, //251 ???
|
||||
NONE, //252 ???
|
||||
NONE, //253 ???
|
||||
NONE, //254 ???
|
||||
NONE //255 ???
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
// unmapped atari keys:
|
||||
@@ -847,7 +1107,7 @@ uint32_t get_atari_code(uint16_t key)
|
||||
uint32_t get_archie_code(uint16_t key)
|
||||
{
|
||||
if (key > 255) return NONE;
|
||||
return 0; // ev2archie[key];
|
||||
return ev2archie[key];
|
||||
}
|
||||
|
||||
static uint32_t modifier = 0;
|
||||
|
||||
85
menu.c
85
menu.c
@@ -274,9 +274,9 @@ static void SelectFile(char* pFileExt, unsigned char Options, unsigned char Menu
|
||||
{ // if different from the current one go to the root directory and init entry buffer
|
||||
SelectedPath[0] = 0;
|
||||
|
||||
if(((user_io_core_type() == CORE_TYPE_8BIT) || (user_io_core_type() == CORE_TYPE_MINIMIG2)) && chdir)
|
||||
if(((user_io_core_type() == CORE_TYPE_8BIT) || (user_io_core_type() == CORE_TYPE_MINIMIG2) || (user_io_core_type() == CORE_TYPE_ARCHIE)) && chdir)
|
||||
{
|
||||
strcpy(SelectedPath, (user_io_core_type() == CORE_TYPE_MINIMIG2) ? "Amiga" : user_io_get_core_name());
|
||||
strcpy(SelectedPath, (user_io_core_type() == CORE_TYPE_MINIMIG2) ? "Amiga" : is_archie() ? "Archie" : user_io_get_core_name());
|
||||
ScanDirectory(SelectedPath, SCAN_INIT, pFileExt, Options);
|
||||
if (!nDirEntries)
|
||||
{
|
||||
@@ -666,29 +666,42 @@ void HandleUI(void)
|
||||
/******************************************************************/
|
||||
|
||||
case MENU_ARCHIE_MAIN1: {
|
||||
OsdSetSize(8);
|
||||
menumask = 0x3f;
|
||||
OsdSetSize(16);
|
||||
menumask = 0xff;
|
||||
OsdSetTitle("ARCHIE", 0);
|
||||
|
||||
OsdWrite(0, "", 0, 0);
|
||||
|
||||
strcpy(s, " Floppy 0: ");
|
||||
strcat(s, archie_get_floppy_name(0));
|
||||
OsdWrite(0, s, menusub == 0, 0);
|
||||
strncat(s, archie_get_floppy_name(0),27);
|
||||
OsdWrite(1, s, menusub == 0, 0);
|
||||
|
||||
strcpy(s, " Floppy 1: ");
|
||||
strcat(s, archie_get_floppy_name(1));
|
||||
OsdWrite(1, s, menusub == 1, 0);
|
||||
|
||||
strcpy(s, " OS ROM: ");
|
||||
strcat(s, archie_get_rom_name());
|
||||
OsdWrite(2, s, menusub == 2, 0);
|
||||
strncat(s, archie_get_floppy_name(1), 27);
|
||||
OsdWrite(2, s, menusub == 1, 0);
|
||||
|
||||
OsdWrite(3, "", 0, 0);
|
||||
|
||||
strcpy(s, " OS ROM: ");
|
||||
strcat(s, archie_get_rom_name());
|
||||
OsdWrite(4, s, menusub == 2, 0);
|
||||
|
||||
OsdWrite(5, "", 0, 0);
|
||||
|
||||
strcpy(s, " Aspect ratio: ");
|
||||
strcat(s, archie_get_ar() ? "16:9" : " 4:3");
|
||||
OsdWrite(6, s, menusub == 3, 0);
|
||||
OsdWrite(7, " Define joystick buttons", menusub == 4, 0);
|
||||
|
||||
OsdWrite(8, "", 0, 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(6, "", 0, 0);
|
||||
OsdWrite(7, STD_EXIT, menusub == 5, 0);
|
||||
OsdWrite(9, " Firmware & Core \x16", menusub == 5, 0);
|
||||
OsdWrite(10, " Save config ", menusub == 6, 0);
|
||||
|
||||
for (int i = 11; i<15; i++) OsdWrite(i, "", 0, 0);
|
||||
|
||||
OsdWrite(15, STD_EXIT, menusub == 7, 0);
|
||||
menustate = MENU_ARCHIE_MAIN2;
|
||||
parentstate = MENU_ARCHIE_MAIN1;
|
||||
} break;
|
||||
@@ -713,17 +726,30 @@ void HandleUI(void)
|
||||
SelectFile("ROM", 0, MENU_ARCHIE_MAIN_FILE_SELECTED, MENU_ARCHIE_MAIN1, 1);
|
||||
break;
|
||||
|
||||
case 3: // Firmware submenu
|
||||
case 3:
|
||||
archie_set_ar(!archie_get_ar());
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
joy_bcount = 1;
|
||||
strcpy(joy_bnames[0], "Fire");
|
||||
start_map_setting(joy_bcount ? joy_bcount + 5 : 9);
|
||||
menustate = MENU_JOYDIGMAP;
|
||||
menusub = 0;
|
||||
break;
|
||||
|
||||
case 5: // Firmware submenu
|
||||
menustate = MENU_FIRMWARE1;
|
||||
menusub = 1;
|
||||
break;
|
||||
|
||||
case 4: // Save config
|
||||
case 6: // Save config
|
||||
menustate = MENU_NONE1;
|
||||
archie_save_config();
|
||||
break;
|
||||
|
||||
case 5: // Exit
|
||||
case 7: // Exit
|
||||
menustate = MENU_NONE1;
|
||||
break;
|
||||
}
|
||||
@@ -1223,8 +1249,21 @@ void HandleUI(void)
|
||||
if (select || menu || get_map_button() >= (joy_bcount ? joy_bcount + 5 : 9))
|
||||
{
|
||||
finish_map_setting(menu);
|
||||
menustate = is_menu_core() ? MENU_FIRMWARE1 : MENU_8BIT_SYSTEM1;
|
||||
menusub = is_menu_core() ? 2 : 1;
|
||||
if (is_menu_core())
|
||||
{
|
||||
menustate = MENU_FIRMWARE1;
|
||||
menusub = 2;
|
||||
}
|
||||
else if (is_archie())
|
||||
{
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
menusub = 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
menustate = MENU_8BIT_SYSTEM1;
|
||||
menusub = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -3022,7 +3061,7 @@ void HandleUI(void)
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
break;
|
||||
case CORE_TYPE_ARCHIE:
|
||||
menusub = 3;
|
||||
menusub = 5;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
break;
|
||||
default:
|
||||
@@ -3042,7 +3081,7 @@ void HandleUI(void)
|
||||
menustate = MENU_MIST_MAIN1;
|
||||
break;
|
||||
case CORE_TYPE_ARCHIE:
|
||||
menusub = 3;
|
||||
menusub = 5;
|
||||
menustate = MENU_ARCHIE_MAIN1;
|
||||
break;
|
||||
default:
|
||||
|
||||
33
user_io.c
33
user_io.c
@@ -81,6 +81,11 @@ char is_minimig()
|
||||
return(core_type == CORE_TYPE_MINIMIG2);
|
||||
}
|
||||
|
||||
char is_archie()
|
||||
{
|
||||
return(core_type == CORE_TYPE_ARCHIE);
|
||||
}
|
||||
|
||||
char* user_io_create_config_name()
|
||||
{
|
||||
static char str[40];
|
||||
@@ -1646,6 +1651,30 @@ static void send_keycode(unsigned short key, int press)
|
||||
uint32_t code = get_archie_code(key);
|
||||
if (code == NONE) return;
|
||||
|
||||
//WIN+...
|
||||
if (get_key_mod() & (RGUI | LGUI))
|
||||
{
|
||||
switch(code)
|
||||
{
|
||||
case 0x00: code = 0xf; //ESC = BRAKE
|
||||
break;
|
||||
|
||||
case 0x11: code = 0x73; // 1 = Mouse extra 1
|
||||
break;
|
||||
|
||||
case 0x12: code = 0x74; // 2 = Mouse extra 2
|
||||
break;
|
||||
|
||||
case 0x13: code = 0x25; // 3 = KP#
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (code == 0 && (get_key_mod() & (RGUI | LGUI)))
|
||||
{
|
||||
code = 0xF;
|
||||
}
|
||||
if (!press) code |= 0x8000;
|
||||
archie_kbd(code);
|
||||
}
|
||||
}
|
||||
@@ -1758,14 +1787,14 @@ void user_io_kbd(uint16_t key, int press)
|
||||
{
|
||||
if (is_menu_core()) printf("PS2 code(make)%s for core: %d(0x%X)\n", (code & EXT) ? "(ext)" : "", code & 255, code & 255);
|
||||
|
||||
if ((has_menu() || osd_is_visible || (get_key_mod() & (LALT | RALT | RGUI | LGUI))) && (((key == KEY_F12) && (!is_x86_core() || (get_key_mod() & (RGUI | LGUI)))) || key == KEY_MENU)) menu_key_set(KEY_F12);
|
||||
if ((has_menu() || osd_is_visible || (get_key_mod() & (LALT | RALT | RGUI | LGUI))) && (((key == KEY_F12) && ((!is_x86_core() && !is_archie()) || (get_key_mod() & (RGUI | LGUI)))) || key == KEY_MENU)) menu_key_set(KEY_F12);
|
||||
else if (osd_is_visible)
|
||||
{
|
||||
if (press == 1) menu_key_set(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((code & EMU_SWITCH_1) || ((code & EMU_SWITCH_2) && !use_ps2ctl))
|
||||
if ((code & EMU_SWITCH_1) || ((code & EMU_SWITCH_2) && !use_ps2ctl && !is_archie()))
|
||||
{
|
||||
if (press == 1)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user