static void freescsi(struct scsi_data *sd)
{
+ if (!sd)
+ return;
hdf_hd_close(sd->hfd);
scsi_free(sd);
}
* - 0xc00000
* - 0x080000
*
- * CIA-A: 0xb40000
- * CIA-B: 0xb40001
+ * CIA-A: 0xb40000 (0x000, 0x100,...)
+ * CIA-B: 0xb40001 (0x001, 0x101,...)
* Custom: 0xe40000
*/
+ /* X-Power 500:
+ *
+ * ROM: 0xe20000 (128k)
+ * RAM: 0xf20000 (64k)
+ * CIA-A: 0xf2fc00 (00,02,04,...)
+ * CIA-B: 0xf2fc01 (01,03,05,...)
+ * Custom: 0xf2fc00 (from 0x20->)
+ */
+
+ /* Nordic Power:
+ *
+ * ROM: 0xf00000 (64k)
+ * RAM: 0xf40000 (32k)
+ * CIA-A: 0xf47c00 (00,02,04,...)
+ * CIA-B: 0xf47c01 (01,03,05,...)
+ * Custom: 0xf47c00 (from 0x20->)
+ */
+
#include "sysconfig.h"
#include "sysdeps.h"
uae_u8 ar_custom[2*256];
uae_u8 ar_ciaa[16], ar_ciab[16];
+static int hrtmon_ciadiv = 256;
int hrtmon_flag = ACTION_REPLAY_INACTIVE;
static int cart_type;
static uae_u32 hrtmem_mask, hrtmem2_mask, hrtmem3_mask;
static uae_u8 *hrtmon_custom, *hrtmon_ciaa, *hrtmon_ciab;
uae_u32 hrtmem_start, hrtmem2_start, hrtmem3_start, hrtmem_size, hrtmem2_size, hrtmem2_size2, hrtmem3_size;
+static int hrtmem_rom;
static int triggered_once;
static void hrtmon_unmap_banks(void);
addr &= hrtmem_mask;
if (cart_type == CART_AR1200 && addr < 0x80000)
return;
+ if (hrtmem_rom)
+ return;
m = (uae_u32 *)(hrtmemory + addr);
do_put_mem_long (m, l);
}
addr &= hrtmem_mask;
if (cart_type == CART_AR1200 && addr < 0x80000)
return;
+ if (hrtmem_rom)
+ return;
m = (uae_u16 *)(hrtmemory + addr);
do_put_mem_word (m, (uae_u16)w);
}
addr &= hrtmem_mask;
if (cart_type == CART_AR1200 && addr < 0x80000)
return;
+ if (hrtmem_rom)
+ return;
hrtmemory[addr] = b;
}
static int REGPARAM2 hrtmem_check (uaecptr addr, uae_u32 size)
cartridge_enter();
hrtmon_flag = ACTION_REPLAY_ACTIVE;
set_special (®s, SPCFLAG_ACTION_REPLAY);
- memcpy (hrtmon_custom, ar_custom, 2 * 256);
+ if (hrtmon_custom)
+ memcpy (hrtmon_custom, ar_custom, 2 * 256);
for (i = 0; i < 16; i++) {
if (hrtmon_ciaa)
- hrtmon_ciaa[i * 256 + 1] = ar_ciaa[i];
+ hrtmon_ciaa[i * hrtmon_ciadiv + 1] = ar_ciaa[i];
if (hrtmon_ciab)
- hrtmon_ciab[i * 256 + 0] = ar_ciab[i];
+ hrtmon_ciab[i * hrtmon_ciadiv + 0] = ar_ciab[i];
}
if (cart_type == CART_AR1200) {
old = get_long((uaecptr)(regs.vbr + 0x8));
return 1;
}
-static int superiv_init(struct zfile *f)
+static int superiv_init(struct romdata *rd, struct zfile *f)
{
uae_u32 chip = currprefs.chipmem_size - 0x10000;
+ int subtype = rd->id;
cart_type = CART_SUPER4;
- hrtmem_start = 0xd00000;
- hrtmem_size = 0x40000;
- hrtmem2_start = 0xb00000;
- hrtmem2_size = 0x100000;
- hrtmem2_size2 = 0x0c0000;
- hrtmem3_start = 0xe00000;
- hrtmem3_size = 0x80000;
+
+ hrtmon_custom = 0;
+ hrtmon_ciaa = 0;
+ hrtmon_ciab = 0;
+
+ if (subtype == 65) { /* xpower */
+ hrtmem_start = 0xe20000;
+ hrtmem_size = 0x20000;
+ hrtmem2_start = 0xf20000;
+ hrtmem2_size = 0x10000;
+ hrtmem_rom = 1;
+ hrtmon_ciadiv = 2;
+ } else if (subtype == 66 || subtype == 67) { /* nordic */
+ hrtmem_start = 0xf00000;
+ hrtmem_size = 0x10000;
+ hrtmem2_start = 0xf40000;
+ hrtmem2_size = 0x10000;
+ hrtmem_rom = 1;
+ hrtmon_ciadiv = 2;
+ } else { /* super4 */
+ hrtmem_start = 0xd00000;
+ hrtmem_size = 0x40000;
+ hrtmem2_start = 0xb00000;
+ hrtmem2_size = 0x100000;
+ hrtmem2_size2 = 0x0c0000;
+ hrtmem3_start = 0xe00000;
+ hrtmem3_size = 0x80000;
+ }
+ if (hrtmem2_size && !hrtmem2_size2)
+ hrtmem2_size2 = hrtmem2_size;
hrtmemory = mapped_malloc (hrtmem_size, cart_memnames[cart_type]);
memset (hrtmemory, 0x00, hrtmem_size);
hrtmem_mask = hrtmem_size - 1;
hrtmem2_mask = hrtmem2_size - 1;
hrtmem3_mask = hrtmem3_size - 1;
- hrtmemory2 = mapped_malloc (hrtmem2_size, cart_memnames2[cart_type]);
- memset(hrtmemory2, 0, hrtmem2_size);
- hrtmemory3 = mapped_malloc (hrtmem3_size, cart_memnames3[cart_type]);
- memset(hrtmemory3, 0, hrtmem3_size);
+ if (hrtmem2_size) {
+ hrtmemory2 = mapped_malloc (hrtmem2_size, cart_memnames2[cart_type]);
+ memset(hrtmemory2, 0, hrtmem2_size);
+ }
+ if (hrtmem3_size) {
+ hrtmemory3 = mapped_malloc (hrtmem3_size, cart_memnames3[cart_type]);
+ memset(hrtmemory3, 0, hrtmem3_size);
+ }
hrtmem3_bank.baseaddr = hrtmemory3;
hrtmem2_bank.baseaddr = hrtmemory2;
hrtmem_bank.baseaddr = hrtmemory;
- hrtmon_custom = hrtmemory3 + 0x040000;
- hrtmon_ciaa = hrtmemory2 + 0x040000;
- hrtmon_ciab = hrtmemory2 + 0x040001;
-
- chip += 0x30000;
- hrtmemory2[0x80] = chip >> 24;
- hrtmemory2[0x81] = chip >> 16;
- hrtmemory2[0x82] = chip >> 8;
- hrtmemory2[0x83] = chip >> 0;
+ if (subtype == 65) {
+ hrtmon_custom = hrtmemory2 + 0xfc00;
+ hrtmon_ciaa = hrtmemory2 + 0xfc00;
+ hrtmon_ciab = hrtmemory2 + 0xfc01;
+ chip += 0x30000;
+ hrtmemory2[0xfc80] = chip >> 24;
+ hrtmemory2[0xfc81] = chip >> 16;
+ hrtmemory2[0xfc82] = chip >> 8;
+ hrtmemory2[0xfc83] = chip >> 0;
+ } else if (subtype == 66 || subtype == 67) {
+ hrtmon_custom = hrtmemory2 + 0x7c00;
+ hrtmon_ciaa = hrtmemory2 + 0x7c00;
+ hrtmon_ciab = hrtmemory2 + 0x7c01;
+ } else {
+ hrtmon_custom = hrtmemory3 + 0x040000;
+ hrtmon_ciaa = hrtmemory2 + 0x040000;
+ hrtmon_ciab = hrtmemory2 + 0x040001;
+ chip += 0x30000;
+ hrtmemory2[0x80] = chip >> 24;
+ hrtmemory2[0x81] = chip >> 16;
+ hrtmemory2[0x82] = chip >> 8;
+ hrtmemory2[0x83] = chip >> 0;
+ }
hrtmon_flag = ACTION_REPLAY_IDLE;
write_log("%s installed at %08.8X\n", cart_memnames[cart_type], hrtmem_start);
return 0;
rd = getromdatabypath(currprefs.cartfile);
if (rd && rd->id == 62)
- return superiv_init(NULL);
+ return superiv_init(rd, NULL);
f = zfile_fopen(currprefs.cartfile,"rb");
if (!f) {
write_log("failed to load '%s' cartridge ROM\n", currprefs.cartfile);
write_log("Unknown cartridge ROM\n");
} else {
if (rd->type & ROMTYPE_SUPERIV) {
- return superiv_init(f);
+ return superiv_init(rd, f);
}
}
zfile_fseek(f, 0, SEEK_END);
hrtmemory3 = 0;
hrtmem_size = 0;
hrtmem2_size = 0;
+ hrtmem2_size2 = 0;
hrtmem3_size = 0;
cart_type = 0;
+ hrtmem_rom = 0;
+ hrtmon_ciadiv = 256;
}
#ifndef FALSE
return INTREQR() & (0x80 << nr);
}
-static void setirq (int nr, int debug)
+static void setirq (int nr)
{
#ifdef DEBUG_AUDIO
if (debugchannel (nr))
- write_log ("SETIRQ %d %08.8X (%d)\n", nr, M68K_GETPC, debug);
+ write_log ("SETIRQ %d %08.8X\n", nr, M68K_GETPC);
#endif
INTREQ (0x8000 | (0x80 << nr));
}
}
}
-static void audio_handler (int nr, int timed)
+static void audio_handler (int nr)
{
struct audio_channel_data *cdp = audio_channel + nr;
switch (cdp->state)
{
case 0:
- cdp->request_word = 0;
- cdp->request_word_skip = 0;
cdp->intreq2 = 0;
cdp->vpos = vpos;
if (cdp->dmaen) {
if (debugchannel (nr))
write_log ("%d:0>1: LEN=%d\n", nr, cdp->wlen);
#endif
- audio_handler (nr, timed);
+ cdp->request_word = 0;
+ cdp->request_word_skip = 0;
+ audio_handler (nr);
return;
} else if (!cdp->dmaen && cdp->request_word < 0 && !isirq (nr)) {
cdp->evtime = 0;
cdp->state = 2;
- setirq (nr, 0);
- audio_handler (nr, timed);
+ setirq (nr);
+ audio_handler (nr);
return;
}
+ cdp->request_word = 0;
+ cdp->request_word_skip = 0;
return;
case 1:
cdp->request_word = 2;
return;
}
- setirq (nr, 1);
+ setirq (nr);
if (!cdp->dmaen) {
cdp->state = 0;
cdp->request_word = 0;
/* Period attachment? */
if (audap) {
if (cdp->intreq2 && cdp->dmaen)
- setirq (nr, 2);
+ setirq (nr);
cdp->intreq2 = 0;
cdp->request_word = 1;
cdp->dat = cdp->dat2;
if (napnav)
cdp->request_word = 1;
if (cdp->intreq2 && napnav)
- setirq (nr, 3);
+ setirq (nr);
} else {
if (napnav)
- setirq (nr, 4);
+ setirq (nr);
}
cdp->intreq2 = 0;
}
if (audio_channel[0].evtime == 0)
- audio_handler (0, 1);
+ audio_handler (0);
if (audio_channel[1].evtime == 0)
- audio_handler (1, 1);
+ audio_handler (1);
if (audio_channel[2].evtime == 0)
- audio_handler (2, 1);
+ audio_handler (2);
if (audio_channel[3].evtime == 0)
- audio_handler (3, 1);
+ audio_handler (3);
}
end:
last_cycles = get_cycles () - n_cycles;
handle2 = 1;
}
if (handle2)
- audio_handler (nr, 0);
+ audio_handler (nr);
handle |= handle2;
}
if (handle) {
cdp->dat2 = v;
cdp->request_word = -1;
cdp->request_word_skip = 0;
- if (cdp->state == 0) {
+ /* cpu >= 68020: another "too fast" memory/CPU hack */
+ if (cdp->state == 0 || currprefs.cpu_model >= 68020) {
cdp->state = 2;
- audio_handler (nr, 0);
+ if (currprefs.cpu_model >= 68020)
+ INTREQ (0x80 << nr);
+ audio_handler (nr);
schedule_audio ();
events_schedule ();
}
static const int blit_cycle_diagram_fill[][10] =
{
{ 0, 3, 0,5,0 }, /* 0 */
- { 0, 3, 3,5,4 }, /* 1 */
+ { 0, 3, 0,5,4 }, /* 1 */
{ 0, 3, 0,3,0 }, /* 2 */
{ 2, 3, 3,5,4, 3,0 }, /* 3 */
{ 0, 3, 0,2,5 }, /* 4 */
{
if (!hfd)
return;
- if (hfd->hfd.handle_valid)
- hdf_close(&hfd->hfd);
- xfree(hfd->path);
+ hdf_close(&hfd->hfd);
+ xfree(hfd->path);
}
int hdf_hd_open(struct hd_hardfiledata *hfd, char *path, int blocksize, int readonly,
char *devname, int sectors, int surfaces, int reserved,
int bootpri, char *filesys)
{
+ memset(hfd, 0, sizeof (struct hd_hardfiledata));
hfd->bootpri = bootpri;
hfd->hfd.blocksize = blocksize;
if (!hdf_open(&hfd->hfd, path))
struct zarchive_info
{
- char *name;
+ const char *name;
unsigned int size;
int flags;
char *comment;
return NULL;
}
-#define NEXT_ROM_ID 65
+#define NEXT_ROM_ID 68
static struct romheader romheaders[] = {
{ "Freezer Cartridges", 1 },
{ "A1000 bootstrap ROM", 0, 0, 0, 0, "A1000\0", 65536, 24, 0, 0, ROMTYPE_KICK, 0,
0x0b1ad2d0, 0xBA93B8B8,0x5CA0D83A,0x68225CC3,0x3B95050D,0x72D2FDD7 },
- { "Action Replay Mk I v1.00", 1, 0, 1, 0, "AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk I v1.00", 1, 0, 1, 0, "AR\0", 65536, 52, 0, 0, ROMTYPE_AR, 1,
0x2d921771, 0x1EAD9DDA,0x2DAD2914,0x6441F5EF,0x72183750,0x22E01248 },
- { "Action Replay Mk I v1.50", 1, 50, 1, 50, "AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk I v1.50", 1, 50, 1, 50, "AR\0", 65536, 25, 0, 0, ROMTYPE_AR, 1,
0xd4ce0675, 0x843B433B,0x2C56640E,0x045D5FDC,0x854DC6B1,0xA4964E7C },
- { "Action Replay Mk II v2.05", 2, 5, 2, 5, "AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk II v2.05", 2, 5, 2, 5, "AR\0", 131072, 26, 0, 0, ROMTYPE_AR, 1,
0x1287301f, 0xF6601DE8,0x888F0050,0x72BF562B,0x9F533BBC,0xAF1B0074 },
- { "Action Replay Mk II v2.12", 2, 12, 2, 12, "AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk II v2.12", 2, 12, 2, 12, "AR\0", 131072, 27, 0, 0, ROMTYPE_AR, 1,
0x804d0361, 0x3194A07A,0x0A82D8B5,0xF2B6AEFA,0x3CA581D6,0x8BA8762B },
- { "Action Replay Mk II v2.14", 2, 14, 2, 14, "AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk II v2.14", 2, 14, 2, 14, "AR\0", 131072, 28, 0, 0, ROMTYPE_AR, 1,
0x49650e4f, 0x255D6DF6,0x3A4EAB0A,0x838EB1A1,0x6A267B09,0x59DFF634 },
- { "Action Replay Mk III v3.09", 3, 9, 3, 9, "AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk III v3.09", 3, 9, 3, 9, "AR\0", 262144, 29, 0, 0, ROMTYPE_AR, 1,
0x0ed9b5aa, 0x0FF3170A,0xBBF0CA64,0xC9DD93D6,0xEC0C7A01,0xB5436824 },
- { "Action Replay Mk III v3.17", 3, 17, 3, 17, "AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay Mk III v3.17", 3, 17, 3, 17, "AR\0", 262144, 30, 0, 0, ROMTYPE_AR, 1,
0xc8a16406, 0x5D4987C2,0xE3FFEA8B,0x1B02E314,0x30EF190F,0x2DB76542 },
- { "Action Replay 1200", 0, 0, 0, 0, "AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 1,
+ { "Freezer: Action Replay 1200", 0, 0, 0, 0, "AR\0", 262144, 47, 0, 0, ROMTYPE_AR, 1,
0x8d760101, 0x0F6AB834,0x2810094A,0xC0642F62,0xBA42F78B,0xC0B07E6A },
- { "Action Cartridge Super IV Pro (+ROM)", 4, 3, 4, 3, "SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 1,
+
+ { "Freezer: Action Cartridge Super IV Pro (+ROM)", 4, 3, 4, 3, "SUPERIV\0", 170368, 60, 0, 0, ROMTYPE_SUPERIV, 1,
0xe668a0be, 0x633A6E65,0xA93580B8,0xDDB0BE9C,0x9A64D4A1,0x7D4B4801 },
- { "Action Cartridge Super IV Pro", 0, 0, 0, 0, "SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 1,
+ { "Freezer: Action Cartridge Super IV Pro", 0, 0, 0, 0, "SUPERIV\0", 0, 62, 0, 0, ROMTYPE_SUPERIV, 1,
0xffffffff, 0, 0, 0, 0, 0, "SuperIV" },
- { "HRTMon (built-in)", 0, 0, 0, 0, "HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 1,
+ { "Freezer: X-Power Professional 500", 1, 2, 1, 2, "XPOWER\0", 131072, 65, 0, 0, ROMTYPE_SUPERIV, 1,
+ 0x9e70c231, 0xa2977a1c,0x41a8ca7d,0x4af4a168,0x726da542,0x179d5963 },
+ /* only 2 bad dumps available */
+ { "Freezer: Nordic Power v?", 0, 0, 0, 0, "NPOWER\0", 65536, 66, 0, 0, ROMTYPE_SUPERIV, 1, },
+ { "Freezer: Nordic Power v?", 0, 0, 0, 0, "NPOWER\0", 65536, 67, 0, 0, ROMTYPE_SUPERIV, 1, },
+ //0xdd16cdec, 0xfd882967,0x87e2da5f,0x4ef6be32,0x5f7c9324,0xb5bd8e64 },
+
+ { "Freezer: HRTMon (built-in)", 0, 0, 0, 0, "HRTMON\0", 0, 63, 0, 0, ROMTYPE_HRTMON, 1,
0xffffffff, 0, 0, 0, 0, 0, "HRTMon" },
{ "A590/A2091 SCSI boot ROM", 0, 0, 6, 0, "A590\0A2091\0", 16384, 53, 0, 0, ROMTYPE_A2091BOOT, 0,
EDITTEXT IDC_CS_DENISEREV,235,226,45,13,ES_AUTOHSCROLL\r
CONTROL "A590/A2091 SCSI",IDC_CS_A2091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,175,76,10\r
CONTROL "A4000T SCSI",IDC_CS_DMAC2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,190,175,88,10\r
- LTEXT "A4000/A4000T SCSI not yet implemented.",IDC_STATIC,25,161,224,8,SS_CENTERIMAGE\r
+ LTEXT "A4091/A4000T SCSI not yet implemented.",IDC_STATIC,25,161,224,8,SS_CENTERIMAGE\r
CONTROL "PCMCIA",IDC_CS_PCMCIA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,190,146,92,10\r
CONTROL "A4091 SCSI",IDC_CS_A4091,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,17,187,76,10\r
CONTROL "CDTV SCSI",IDC_CS_CDTVSCSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,97,187,76,10\r
#define GETBDM(x) (((x) - ((x / 10000) * 10000)) / 100)
#define GETBDD(x) ((x) % 100)
-#define WINUAEBETA 7
+#define WINUAEBETA 8
#define WINUAEPUBLICBETA 1
-#define WINUAEDATE MAKEBD(2007, 6, 27)
+#define WINUAEDATE MAKEBD(2007, 7, 6)
#define WINUAEEXTRA ""
#define WINUAEREV ""
#include "uaeipc.h"
#include "crc32.h"
-#define ARCHIVE_STRING "*.zip;*.7z;*.rar;*.lha;*.lzh;*.lzx\0"
+#define ARCHIVE_STRING "*.zip;*.7z;*.rar;*.lha;*.lzh;*.lzx"
-#define DISK_FORMAT_STRING "(*.adf;*.adz;*.gz;*.dms;*.fdi;*.ipf;*.exe)\0*.adf;*.adz;*.gz;*.dms;*.fdi;*.ipf;*.exe;*.ima;" ARCHIVE_STRING
-#define ROM_FORMAT_STRING "(*.rom;*.roz)\0*.rom;*.roz;" ARCHIVE_STRING
-#define USS_FORMAT_STRING_RESTORE "(*.uss)\0*.uss;*.gz;" ARCHIVE_STRING
+#define DISK_FORMAT_STRING "(*.adf;*.adz;*.gz;*.dms;*.fdi;*.ipf;*.exe)\0*.adf;*.adz;*.gz;*.dms;*.fdi;*.ipf;*.exe;*.ima;" ARCHIVE_STRING "\0"
+#define ROM_FORMAT_STRING "(*.rom;*.roz)\0*.rom;*.roz;" ARCHIVE_STRING "\0"
+#define USS_FORMAT_STRING_RESTORE "(*.uss)\0*.uss;*.gz;" ARCHIVE_STRING "\0"
#define USS_FORMAT_STRING_SAVE "(*.uss)\0*.uss\0"
#define HDF_FORMAT_STRING "(*.hdf;*.rdf;*.hdz;*.rdz)\0*.hdf;*.rdf;*.hdz;*.rdz\0"
#define INP_FORMAT_STRING "(*.inp)\0*.inp\0"
openFileName.lpstrFilter = szFilter;
break;
case 6:
- WIN32GUI_LoadUIString( IDS_SELECTROM, szTitle, MAX_DPATH);
- WIN32GUI_LoadUIString( IDS_ROM, szFormat, MAX_DPATH);
+ WIN32GUI_LoadUIString(IDS_SELECTROM, szTitle, MAX_DPATH);
+ WIN32GUI_LoadUIString(IDS_ROM, szFormat, MAX_DPATH);
sprintf(szFilter, "%s ", szFormat);
memcpy(szFilter + strlen(szFilter), ROM_FORMAT_STRING, sizeof (ROM_FORMAT_STRING) + 1);
break;
case 11:
WIN32GUI_LoadUIString(IDS_SELECTFLASH, szTitle, MAX_DPATH);
- WIN32GUI_LoadUIString(IDS_FLASH, szFormat, MAX_DPATH );
+ WIN32GUI_LoadUIString(IDS_FLASH, szFormat, MAX_DPATH);
sprintf(szFilter, "%s ", szFormat);
memcpy(szFilter + strlen(szFilter), "(*.nvr)\0*.nvr\0", 15);
break;
case 14:
strcpy (szTitle, "Select supported archive file");
+ sprintf (szFilter, "%s (%s)", "Archive", ARCHIVE_STRING);
+ strcpy (szFilter + strlen(szFilter) + 1, ARCHIVE_STRING);
openFileName.lpstrFilter = NULL;
- openFileName.lpstrDefExt = NULL;
+ openFileName.lpstrFilter = szFilter;
openFileName.lpstrInitialDir = path_out;
break;
}
char txt[20];
bufsize = exact_log2 (workprefs.sound_maxbsiz / 1024);
- sprintf (txt, "%d (%dms)",
- bufsize, ((1000 * (workprefs.sound_maxbsiz >> 1) / workprefs.sound_freq) + 30) / 10 * 10);
+ sprintf (txt, "%d", bufsize);
SetDlgItemText (hDlg, IDC_SOUNDBUFFERMEM, txt);
SendDlgItemMessage( hDlg, IDC_SOUNDVOLUME, TBM_SETPOS, TRUE, 100 - workprefs.sound_volume);
list++;
}
}
+ } else if (currentpage == HARDDISK_ID) {
+ add_filesys_config (&workprefs, -1, NULL, "", file, 0,
+ 0, 0, 0, 0, 0, NULL, 0, 0);
} else {
strcpy (workprefs.df[drv], file);
disk_insert (drv, workprefs.df[drv]);
+Beta 8:
+
+- plain executable mounted as a harddrive automatically creates
+ virtual s/startup-sequence (same as mounting executable as a floppy)
+- possible crash fix in SCSI emulation
+- X-Power Professional 500 cartridge support. (basically old version
+ of Action Cartridge Super IV)
+- Nordic Power cartridge "support" but only 2 bad non-working rom
+ dumps available (ROM chip fault, one data line stuck) And perhaps
+ suprisingly, perhaps not, Nordic Power is old version of X-Power :)
+- possible fix for audio problems when using audio.device (usually
+ when continuously starting and stopping short samples) in JIT mode.
+ (usual reason: too "fast" cpu/chipset access speed..)
+- removed sound latency value from GUI, it was wildly inaccurate
+
+WANTED: Nordic Power cartridge(s) (can be non-working)
+
Beta 7:
- rom scanner detects overdumped roms again
/* pointless but who cares? */
if (!zv)
zv = archive_directory_plain (zf);
- zvolume_addtolist (zv);
+ if (zv)
+ zvolume_addtolist (zv);
+ else
+ zfile_fclose(zf);
return zv;
}
}
/* plain single file */
+
+static void addfile(struct zvolume *zv, const char *path, uae_u8 *data, int size)
+{
+ struct zarchive_info zai;
+ struct znode *zn;
+ struct zfile *z = zfile_fopen_empty (path, size);
+
+ zfile_fwrite(data, size, 1, z);
+ memset(&zai, 0, sizeof zai);
+ zai.name = path;
+ zai.size = size;
+ zn = zvolume_addfile_abs(zv, &zai);
+ if (zn)
+ zn->f = z;
+ else
+ zfile_fclose(z);
+}
+
+static uae_u8 exeheader[]={0x00,0x00,0x03,0xf3,0x00,0x00,0x00,0x00};
struct zvolume *archive_directory_plain (struct zfile *z)
{
struct zvolume *zv;
+ struct znode *zn;
struct zarchive_info zai;
int i;
+ char *filename;
+ uae_u8 id[8];
memset(&zai, 0, sizeof zai);
zv = zvolume_alloc(z, ArchiveFormatPLAIN, NULL);
break;
}
}
- zai.name = &z->name[i];
+ filename = &z->name[i];
+ memset(id, 0, sizeof id);
+ zai.name = filename;
zfile_fseek(z, 0, SEEK_END);
zai.size = zfile_ftell(z);
zfile_fseek(z, 0, SEEK_SET);
- zvolume_addfile_abs(zv, &zai);
+ zfile_fread(id, sizeof id, 1, z);
+ zfile_fseek(z, 0, SEEK_SET);
+ zn = zvolume_addfile_abs(zv, &zai);
+ if (!memcmp (id, exeheader, sizeof id)) {
+ uae_u8 *data = xmalloc(strlen(filename) + 2);
+ sprintf(data,"%s\n", filename);
+ addfile(zv, "s/startup-sequence", data, strlen(data));
+ xfree(data);
+ }
return zv;
}
struct zfile *archive_access_plain (struct znode *zn)