diff --git a/src/808x.c b/src/808x.c index 273cb3c..6448f1b 100644 --- a/src/808x.c +++ b/src/808x.c @@ -516,7 +516,7 @@ chdir(pcempath); for (c=0;c<0x8000000;c++) putc(readmemb(c+0x10000000),f); fclose(f);*/ f=fopen("ram.dmp","wb"); - fwrite(ram,mem_size*1024*1024,1,f); + fwrite(ram,mem_size*1024,1,f); fclose(f); /* pclog("Dumping rram5.dmp\n"); f=fopen("rram5.dmp","wb"); diff --git a/src/mem.c b/src/mem.c index 9f9225d..082db66 100644 --- a/src/mem.c +++ b/src/mem.c @@ -1749,22 +1749,22 @@ void mem_init() { int c; - ram = malloc(mem_size * 1024 * 1024); + ram = malloc(mem_size * 1024); rom = malloc(0x20000); vram = malloc(0x800000); readlookup2 = malloc(1024 * 1024 * sizeof(uintptr_t)); writelookup2 = malloc(1024 * 1024 * sizeof(uintptr_t)); cachelookup2 = malloc(1024 * 1024); biosmask = 0xffff; - pages = malloc(((mem_size * 1024 * 1024) >> 12) * sizeof(page_t)); + pages = malloc(((mem_size * 1024) >> 12) * sizeof(page_t)); page_lookup = malloc((1 << 20) * sizeof(page_t *)); - memset(ram, 0, mem_size * 1024 * 1024); - memset(pages, 0, ((mem_size * 1024 * 1024) >> 12) * sizeof(page_t)); + memset(ram, 0, mem_size * 1024); + memset(pages, 0, ((mem_size * 1024) >> 12) * sizeof(page_t)); memset(page_lookup, 0, (1 << 20) * sizeof(page_t *)); - for (c = 0; c < ((mem_size * 1024 * 1024) >> 12); c++) + for (c = 0; c < ((mem_size * 1024) >> 12); c++) { pages[c].mem = &ram[c << 12]; pages[c].write_b = mem_write_ramb_page; @@ -1773,7 +1773,7 @@ void mem_init() } memset(isram, 0, sizeof(isram)); - for (c = 0; c < (mem_size * 16); c++) + for (c = 0; c < (mem_size / 256); c++) { isram[c] = 1; if (c >= 0xa && c <= 0xf) @@ -1794,13 +1794,13 @@ void mem_init() memset(_mem_state, 0, sizeof(_mem_state)); - mem_set_mem_state(0x000000, 0xa0000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_set_mem_state(0x000000, (mem_size > 640) ? 0xa0000 : mem_size * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); mem_set_mem_state(0x0c0000, 0x40000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL); - mem_set_mem_state(0x100000, (mem_size - 1) * 1024 * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_set_mem_state(0x100000, (mem_size - 1024) * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - mem_mapping_add(&ram_low_mapping, 0x00000, 0xa0000, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram, MEM_MAPPING_INTERNAL, NULL); - if (mem_size > 1) - mem_mapping_add(&ram_high_mapping, 0x100000, (mem_size - 1) * 1024 * 1024, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0x100000, MEM_MAPPING_INTERNAL, NULL); + mem_mapping_add(&ram_low_mapping, 0x00000, (mem_size > 640) ? 0xa0000 : mem_size * 1024, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram, MEM_MAPPING_INTERNAL, NULL); + if (mem_size > 1024) + mem_mapping_add(&ram_high_mapping, 0x100000, ((mem_size - 1024) * 1024), mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0x100000, MEM_MAPPING_INTERNAL, NULL); mem_mapping_add(&ram_mid_mapping, 0xc0000, 0x40000, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0xc0000, MEM_MAPPING_INTERNAL, NULL); mem_mapping_add(&romext_mapping, 0xc8000, 0x08000, mem_read_romext, mem_read_romextw, mem_read_romextl, NULL, NULL, NULL, romext, 0, NULL); @@ -1812,13 +1812,13 @@ void mem_resize() int c; free(ram); - ram = malloc(mem_size * 1024 * 1024); - memset(ram, 0, mem_size * 1024 * 1024); + ram = malloc(mem_size * 1024); + memset(ram, 0, mem_size * 1024); free(pages); - pages = malloc(((mem_size * 1024 * 1024) >> 12) * sizeof(page_t)); - memset(pages, 0, ((mem_size * 1024 * 1024) >> 12) * sizeof(page_t)); - for (c = 0; c < ((mem_size * 1024 * 1024) >> 12); c++) + pages = malloc(((mem_size * 1024) >> 12) * sizeof(page_t)); + memset(pages, 0, ((mem_size * 1024) >> 12) * sizeof(page_t)); + for (c = 0; c < ((mem_size * 1024) >> 12); c++) { pages[c].mem = &ram[c << 12]; pages[c].write_b = mem_write_ramb_page; @@ -1827,7 +1827,7 @@ void mem_resize() } memset(isram, 0, sizeof(isram)); - for (c = 0; c < (mem_size * 16); c++) + for (c = 0; c < (mem_size / 256); c++) { isram[c] = 1; if (c >= 0xa && c <= 0xf) @@ -1846,13 +1846,13 @@ void mem_resize() memset(_mem_state, 0, sizeof(_mem_state)); - mem_set_mem_state(0x000000, 0xa0000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_set_mem_state(0x000000, (mem_size > 640) ? 0xa0000 : mem_size * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); mem_set_mem_state(0x0c0000, 0x40000, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL); - mem_set_mem_state(0x100000, (mem_size - 1) * 1024 * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_set_mem_state(0x100000, (mem_size - 1024) * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - mem_mapping_add(&ram_low_mapping, 0x00000, 0xa0000, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram, MEM_MAPPING_INTERNAL, NULL); - if (mem_size > 1) - mem_mapping_add(&ram_high_mapping, 0x100000, (mem_size - 1) * 1024 * 1024, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0x100000, MEM_MAPPING_INTERNAL, NULL); + mem_mapping_add(&ram_low_mapping, 0x00000, (mem_size > 640) ? 0xa0000 : mem_size * 1024, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram, MEM_MAPPING_INTERNAL, NULL); + if (mem_size > 1024) + mem_mapping_add(&ram_high_mapping, 0x100000, (mem_size - 1024) * 1024, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0x100000, MEM_MAPPING_INTERNAL, NULL); mem_mapping_add(&ram_mid_mapping, 0xc0000, 0x40000, mem_read_ram, mem_read_ramw, mem_read_raml, mem_write_ram, mem_write_ramw, mem_write_raml, ram + 0xc0000, MEM_MAPPING_INTERNAL, NULL); mem_add_bios(); @@ -1868,7 +1868,7 @@ void mem_reset_page_blocks() { int c; - for (c = 0; c < ((mem_size * 1024 * 1024) >> 12); c++) + for (c = 0; c < ((mem_size * 1024) >> 12); c++) { pages[c].write_b = mem_write_ramb_page; pages[c].write_w = mem_write_ramw_page; diff --git a/src/model.c b/src/model.c index ce58cca..ebde313 100644 --- a/src/model.c +++ b/src/model.c @@ -71,43 +71,43 @@ int AMSTRAD, AT, PCI, TANDY; MODEL models[] = { - {"IBM PC", ROM_IBMPC, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"IBM XT", ROM_IBMXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"IBM PCjr", ROM_IBMPCJR, { "", cpus_pcjr, "", NULL, "", NULL}, 1, pcjr_init}, - {"Generic XT clone", ROM_GENXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"AMI XT clone", ROM_AMIXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"DTK XT clone", ROM_DTKXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"VTech Laser Turbo XT",ROM_LTXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"VTech Laser XT3", ROM_LXT3, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"Phoenix XT clone", ROM_PXXT, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"Juko XT clone", ROM_JUKOPC, { "", cpus_8088, "", NULL, "", NULL}, 0, xt_init}, - {"Tandy 1000", ROM_TANDY, { "", cpus_8088, "", NULL, "", NULL}, 1, tandy1k_init}, - {"Amstrad PC1512", ROM_PC1512, { "", cpus_pc1512, "", NULL, "", NULL}, 1, ams_init}, - {"Sinclair PC200", ROM_PC200, { "", cpus_8086, "", NULL, "", NULL}, 1, ams_init}, - {"Euro PC", ROM_EUROPC, { "", cpus_8086, "", NULL, "", NULL}, 0, europc_init}, - {"Olivetti M24", ROM_OLIM24, { "", cpus_8086, "", NULL, "", NULL}, 1, olim24_init}, - {"Amstrad PC1640", ROM_PC1640, { "", cpus_8086, "", NULL, "", NULL}, 1, ams_init}, - {"Amstrad PC2086", ROM_PC2086, { "", cpus_8086, "", NULL, "", NULL}, 1, ams_init}, - {"Amstrad PC3086", ROM_PC3086, { "", cpus_8086, "", NULL, "", NULL}, 1, ams_init}, - {"IBM AT", ROM_IBMAT, { "", cpus_ibmat, "", NULL, "", NULL}, 0, at_init}, - {"Commodore PC 30 III", ROM_CMDPC30, { "", cpus_286, "", NULL, "", NULL}, 0, at_init}, - {"AMI 286 clone", ROM_AMI286, { "", cpus_286, "", NULL, "", NULL}, 0, at_neat_init}, - {"DELL System 200", ROM_DELL200, { "", cpus_286, "", NULL, "", NULL}, 0, at_init}, - {"IBM PS/1 model 2011", ROM_IBMPS1_2011, { "", cpus_286, "", NULL, "", NULL}, 1, ps1_init}, - {"Compaq Deskpro 386", ROM_DESKPRO_386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, deskpro386_init}, - {"Acer 386SX25/N", ROM_ACER386, { "Intel", cpus_acer, "", NULL, "", NULL}, 1, at_acer386sx_init}, - {"DTK 386SX clone", ROM_DTK386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, at_neat_init}, - {"Phoenix 386 clone", ROM_PX386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, at_init}, - {"Amstrad MegaPC", ROM_MEGAPC, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 1, at_wd76c10_init}, - {"AMI 386 clone", ROM_AMI386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, at_headland_init}, - {"AMI 486 clone", ROM_AMI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, at_ali1429_init}, - {"AMI WinBIOS 486", ROM_WIN486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, at_ali1429_init}, -/* {"AMI WinBIOS 486 PCI", ROM_PCI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, at_um8881f_init},*/ - {"Award SiS 496/497", ROM_SIS496, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, at_sis496_init}, - {"Intel Premiere/PCI", ROM_REVENGE, { "Intel", cpus_Pentium5V, "", NULL, "", NULL}, 0, at_batman_init}, - {"Intel Advanced/EV", ROM_ENDEAVOR, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "", NULL}, 0, at_endeavor_init}, - {"Award 430VX PCI", ROM_430VX, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "", NULL}, 0, at_i430vx_init}, - {"", -1, {"", 0, "", 0, "", 0}, 0} + {"IBM PC", ROM_IBMPC, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 64, 640, xt_init}, + {"IBM XT", ROM_IBMXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"IBM PCjr", ROM_IBMPCJR, { "", cpus_pcjr, "", NULL, "", NULL}, 1, 0, 128, 640, pcjr_init}, + {"Generic XT clone", ROM_GENXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"AMI XT clone", ROM_AMIXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"DTK XT clone", ROM_DTKXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"VTech Laser Turbo XT",ROM_LTXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"VTech Laser XT3", ROM_LXT3, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"Phoenix XT clone", ROM_PXXT, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"Juko XT clone", ROM_JUKOPC, { "", cpus_8088, "", NULL, "", NULL}, 0, 0, 128, 640, xt_init}, + {"Tandy 1000", ROM_TANDY, { "", cpus_8088, "", NULL, "", NULL}, 1, 0, 128, 640, tandy1k_init}, + {"Amstrad PC1512", ROM_PC1512, { "", cpus_pc1512, "", NULL, "", NULL}, 1, 0, 512, 640, ams_init}, + {"Sinclair PC200", ROM_PC200, { "", cpus_8086, "", NULL, "", NULL}, 1, 0, 512, 640, ams_init}, + {"Euro PC", ROM_EUROPC, { "", cpus_8086, "", NULL, "", NULL}, 0, 0, 512, 640, europc_init}, + {"Olivetti M24", ROM_OLIM24, { "", cpus_8086, "", NULL, "", NULL}, 1, 0, 128, 640, olim24_init}, + {"Amstrad PC1640", ROM_PC1640, { "", cpus_8086, "", NULL, "", NULL}, 1, 0, 640, 640, ams_init}, + {"Amstrad PC2086", ROM_PC2086, { "", cpus_8086, "", NULL, "", NULL}, 1, 0, 640, 640, ams_init}, + {"Amstrad PC3086", ROM_PC3086, { "", cpus_8086, "", NULL, "", NULL}, 1, 0, 640, 640, ams_init}, + {"IBM AT", ROM_IBMAT, { "", cpus_ibmat, "", NULL, "", NULL}, 0, 1, 1, 16, at_init}, + {"Commodore PC 30 III", ROM_CMDPC30, { "", cpus_286, "", NULL, "", NULL}, 0, 1, 1, 16, at_init}, + {"AMI 286 clone", ROM_AMI286, { "", cpus_286, "", NULL, "", NULL}, 0, 1, 1, 16, at_neat_init}, + {"DELL System 200", ROM_DELL200, { "", cpus_286, "", NULL, "", NULL}, 0, 1, 1, 16, at_init}, + {"IBM PS/1 model 2011", ROM_IBMPS1_2011, { "", cpus_286, "", NULL, "", NULL}, 1, 1, 1, 16, ps1_init}, + {"Compaq Deskpro 386", ROM_DESKPRO_386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, 1, 1, 15, deskpro386_init}, + {"Acer 386SX25/N", ROM_ACER386, { "Intel", cpus_acer, "", NULL, "", NULL}, 1, 1, 1, 16, at_acer386sx_init}, + {"DTK 386SX clone", ROM_DTK386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, 1, 1, 16, at_neat_init}, + {"Phoenix 386 clone", ROM_PX386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, 1, 1, 16, at_init}, + {"Amstrad MegaPC", ROM_MEGAPC, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 1, 1, 1, 16, at_wd76c10_init}, + {"AMI 386 clone", ROM_AMI386, { "Intel", cpus_i386, "AMD", cpus_Am386, "Cyrix", cpus_486SDLC}, 0, 1, 1, 256, at_headland_init}, + {"AMI 486 clone", ROM_AMI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, 1, 1, 256, at_ali1429_init}, + {"AMI WinBIOS 486", ROM_WIN486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, 1, 1, 256, at_ali1429_init}, +/* {"AMI WinBIOS 486 PCI", ROM_PCI486, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, 1, 1, 256, at_um8881f_init},*/ + {"Award SiS 496/497", ROM_SIS496, { "Intel", cpus_i486, "AMD", cpus_Am486, "Cyrix", cpus_Cx486}, 0, 1, 1, 256, at_sis496_init}, + {"Intel Premiere/PCI", ROM_REVENGE, { "Intel", cpus_Pentium5V, "", NULL, "", NULL}, 0, 1, 1, 128, at_batman_init}, + {"Intel Advanced/EV", ROM_ENDEAVOR, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "", NULL}, 0, 1, 1, 128, at_endeavor_init}, + {"Award 430VX PCI", ROM_430VX, { "Intel", cpus_Pentium, "IDT", cpus_WinChip, "", NULL}, 0, 1, 1, 256, at_i430vx_init}, + {"", -1, {"", 0, "", 0, "", 0}, 0,0,0, 0} }; int model_count() diff --git a/src/model.h b/src/model.h index 5c140e7..b2ae3ce 100644 --- a/src/model.h +++ b/src/model.h @@ -8,6 +8,8 @@ typedef struct CPU *cpus; } cpu[4]; int fixed_gfxcard; + int is_at; + int min_ram, max_ram; void (*init)(); } MODEL; diff --git a/src/pc.c b/src/pc.c index 23c1b68..0b32727 100644 --- a/src/pc.c +++ b/src/pc.c @@ -552,7 +552,7 @@ void loadconfig(char *fn) if (p) strcpy(discfns[1], p); else strcpy(discfns[1], ""); - mem_size = config_get_int(NULL, "mem_size", 4); + mem_size = config_get_int(NULL, "mem_size", 4096); cdrom_drive = config_get_int(NULL, "cdrom_drive", 0); cdrom_enabled = config_get_int(NULL, "cdrom_enabled", 0); diff --git a/src/pc.rc b/src/pc.rc index b6cc209..9caf24c 100644 --- a/src/pc.rc +++ b/src/pc.rc @@ -74,7 +74,7 @@ BEGIN PUSHBUTTON "Configure", IDC_CONFIGURESND, 224, 156, 40, 14, WS_TABSTOP EDITTEXT IDC_MEMTEXT, 62, 172, 36, 14, ES_AUTOHSCROLL | ES_NUMBER CONTROL "", IDC_MEMSPIN, UPDOWN_CLASS, UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_SETBUDDYINT, 98, 172, 12, 14 - LTEXT "MB", IDC_STATIC, 98, 172, 40, 10 + LTEXT "MB", IDC_TEXT_MB, 98, 172, 40, 10 CONTROL "CMS / Game Blaster",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,232,118,10 CONTROL "Gravis Ultrasound",IDC_CHECKGUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,248,118,10 CONTROL "Innovation SSI-2001",IDC_CHECKSSI,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,264,118,10 diff --git a/src/piix.c b/src/piix.c index 9edab5b..e51be18 100644 --- a/src/piix.c +++ b/src/piix.c @@ -201,11 +201,11 @@ int piix_bus_master_sector_read(int channel, uint8_t *data) if (piix_busmaster[channel].count < (512 - transferred)) { // pclog("Transferring smaller - %i bytes\n", piix_busmaster[channel].count); - if (piix_busmaster[channel].addr < (mem_size * 1024 * 1024)) + if (piix_busmaster[channel].addr < (mem_size * 1024)) { int count = piix_busmaster[channel].count; - if ((piix_busmaster[channel].addr + count) > (mem_size * 1024 * 1024)) - count = (mem_size * 1024 * 1024) - piix_busmaster[channel].addr; + if ((piix_busmaster[channel].addr + count) > (mem_size * 1024)) + count = (mem_size * 1024) - piix_busmaster[channel].addr; memcpy(&ram[piix_busmaster[channel].addr], data + transferred, count); } transferred += piix_busmaster[channel].count; @@ -215,11 +215,11 @@ int piix_bus_master_sector_read(int channel, uint8_t *data) else { // pclog("Transferring larger - %i bytes\n", 512 - transferred); - if (piix_busmaster[channel].addr < (mem_size * 1024 * 1024)) + if (piix_busmaster[channel].addr < (mem_size * 1024)) { int count = 512 - transferred; - if ((piix_busmaster[channel].addr + count) > (mem_size * 1024 * 1024)) - count = (mem_size * 1024 * 1024) - piix_busmaster[channel].addr; + if ((piix_busmaster[channel].addr + count) > (mem_size * 1024)) + count = (mem_size * 1024) - piix_busmaster[channel].addr; memcpy(&ram[piix_busmaster[channel].addr], data + transferred, count); } piix_busmaster[channel].addr += (512 - transferred); @@ -258,11 +258,11 @@ int piix_bus_master_sector_write(int channel, uint8_t *data) if (piix_busmaster[channel].count < (512 - transferred)) { // pclog("Transferring smaller - %i bytes\n", piix_busmaster[channel].count); - if (piix_busmaster[channel].addr < (mem_size * 1024 * 1024)) + if (piix_busmaster[channel].addr < (mem_size * 1024)) { int count = piix_busmaster[channel].count; - if ((piix_busmaster[channel].addr + count) > (mem_size * 1024 * 1024)) - count = (mem_size * 1024 * 1024) - piix_busmaster[channel].addr; + if ((piix_busmaster[channel].addr + count) > (mem_size * 1024)) + count = (mem_size * 1024) - piix_busmaster[channel].addr; memcpy(data + transferred, &ram[piix_busmaster[channel].addr], count); } transferred += piix_busmaster[channel].count; @@ -272,11 +272,11 @@ int piix_bus_master_sector_write(int channel, uint8_t *data) else { // pclog("Transferring larger - %i bytes\n", 512 - transferred); - if (piix_busmaster[channel].addr < (mem_size * 1024 * 1024)) + if (piix_busmaster[channel].addr < (mem_size * 1024)) { int count = 512 - transferred; - if ((piix_busmaster[channel].addr + count) > (mem_size * 1024 * 1024)) - count = (mem_size * 1024 * 1024) - piix_busmaster[channel].addr; + if ((piix_busmaster[channel].addr + count) > (mem_size * 1024)) + count = (mem_size * 1024) - piix_busmaster[channel].addr; memcpy(data + transferred, &ram[piix_busmaster[channel].addr], count); } piix_busmaster[channel].addr += (512 - transferred); diff --git a/src/resources.h b/src/resources.h index 6e06248..a988c60 100644 --- a/src/resources.h +++ b/src/resources.h @@ -80,6 +80,7 @@ #define IDC_STEXT7 1106 #define IDC_STEXT8 1107 #define IDC_STEXT_DEVICE 1108 +#define IDC_TEXT_MB 1120 #define IDC_EDIT_C_SPT 1200 #define IDC_EDIT_C_HPC 1201 diff --git a/src/win-config.c b/src/win-config.c index 998cca3..ce5efcc 100644 --- a/src/win-config.c +++ b/src/win-config.c @@ -30,6 +30,7 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR int temp_GAMEBLASTER, temp_GUS, temp_SSI2001, temp_voodoo, temp_sound_card_current; int temp_dynarec; int cpu_flags; + UDACCEL accel; // pclog("Dialog msg %i %08X\n",message,message); switch (message) { @@ -167,8 +168,20 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR h = GetDlgItem(hdlg, IDC_MEMSPIN); SendMessage(h, UDM_SETBUDDY, (WPARAM)GetDlgItem(hdlg, IDC_MEMTEXT), 0); - SendMessage(h, UDM_SETRANGE, 0, (1 << 16) | 256); - SendMessage(h, UDM_SETPOS, 0, mem_size); + accel.nSec = 0; + if (!models[model].is_at) + { + SendMessage(h, UDM_SETRANGE, 0, (64 << 16) | 640); + SendMessage(h, UDM_SETPOS, 0, mem_size); + accel.nInc = 64; + } + else + { + SendMessage(h, UDM_SETRANGE, 0, (1 << 16) | 256); + SendMessage(h, UDM_SETPOS, 0, mem_size / 1024); + accel.nInc = 1; + } + SendMessage(h, UDM_SETACCEL, 1, (LPARAM)&accel); h = GetDlgItem(hdlg, IDC_CONFIGUREVID); if (video_card_has_config(video_old_to_new(gfxcard))) @@ -191,25 +204,35 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR SendMessage(h, CB_ADDSTRING, 0, (LPARAM)(LPCSTR)"5.25\" 1.2M"); SendMessage(h, CB_SETCURSEL, drive_type[1], 0); + h = GetDlgItem(hdlg, IDC_TEXT_MB); + if (models[model].is_at) + SendMessage(h, WM_SETTEXT, 0, (LPARAM)(LPCSTR)"MB"); + else + SendMessage(h, WM_SETTEXT, 0, (LPARAM)(LPCSTR)"KB"); return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: - h = GetDlgItem(hdlg, IDC_MEMTEXT); - SendMessage(h, WM_GETTEXT, 255, (LPARAM)temp_str); - sscanf(temp_str, "%i", &mem); - if (mem < 1 || mem > 256) - { - MessageBox(NULL, "Invalid memory size\nMemory must be between 1 and 256 MB", "PCem", MB_OK); - break; - } - - h = GetDlgItem(hdlg, IDC_COMBO1); temp_model = listtomodel[SendMessage(h, CB_GETCURSEL, 0, 0)]; + h = GetDlgItem(hdlg, IDC_MEMTEXT); + SendMessage(h, WM_GETTEXT, 255, (LPARAM)temp_str); + sscanf(temp_str, "%i", &mem); + if ((models[temp_model].is_at && (mem < 1 || mem > 256)) || + (!models[temp_model].is_at && (mem < 64 || mem > 640))) + { + if (models[temp_model].is_at) + MessageBox(NULL, "Invalid memory size\nMemory must be between 1 and 256 MB", "PCem", MB_OK); + else + MessageBox(NULL, "Invalid memory size\nMemory must be between 64 and 640 kB", "PCem", MB_OK); + break; + } + if (models[temp_model].is_at) + mem *= 1024; + h = GetDlgItem(hdlg, IDC_COMBOVID); SendMessage(h, CB_GETLBTEXT, SendMessage(h, CB_GETCURSEL, 0, 0), (LPARAM)temp_str); gfx = video_new_to_old(video_card_getid(temp_str)); @@ -362,6 +385,36 @@ static BOOL CALLBACK config_dlgproc(HWND hdlg, UINT message, WPARAM wParam, LPAR else EnableWindow(h, TRUE); SendMessage(h, BM_SETCHECK, ((cpu_flags & CPU_SUPPORTS_DYNAREC) && temp_dynarec) || (cpu_flags & CPU_REQUIRES_DYNAREC), 0); + + h = GetDlgItem(hdlg, IDC_TEXT_MB); + if (models[temp_model].is_at) + SendMessage(h, WM_SETTEXT, 0, (LPARAM)(LPCSTR)"MB"); + else + SendMessage(h, WM_SETTEXT, 0, (LPARAM)(LPCSTR)"KB"); + + h = GetDlgItem(hdlg, IDC_MEMTEXT); + SendMessage(h, WM_GETTEXT, 255, (LPARAM)temp_str); + sscanf(temp_str, "%i", &mem); + + h = GetDlgItem(hdlg, IDC_MEMSPIN); + accel.nSec = 0; + if (!models[temp_model].is_at) + { + SendMessage(h, UDM_SETRANGE, 0, (models[temp_model].min_ram << 16) | models[temp_model].max_ram); + accel.nInc = 64; + mem &= ~0x3f; + } + else + { + SendMessage(h, UDM_SETRANGE, 0, (models[temp_model].min_ram << 16) | models[temp_model].max_ram); + accel.nInc = 1; + } + if (mem < models[temp_model].min_ram) + mem = models[temp_model].min_ram; + else if (mem > models[temp_model].max_ram) + mem = models[temp_model].max_ram; + SendMessage(h, UDM_SETPOS, 0, mem); + SendMessage(h, UDM_SETACCEL, 1, (LPARAM)&accel); } break; case IDC_COMBOCPUM: