diff --git a/src/86box.h b/src/86box.h index 48a9d4890..ca1393bb9 100644 --- a/src/86box.h +++ b/src/86box.h @@ -8,7 +8,7 @@ * * Main include file for the application. * - * Version: @(#)86box.h 1.0.12 2017/11/04 + * Version: @(#)86box.h 1.0.13 2017/11/19 * * Authors: Miran Grca, * Fred N. van Kempen, @@ -119,6 +119,7 @@ extern void pclog(const char *format, ...); extern void fatal(const char *format, ...); extern void set_screen_size(int x, int y); extern void set_screen_size_natural(void); +extern void pc_reload(wchar_t *fn); extern int pc_init_modules(void); extern int pc_init(int argc, wchar_t *argv[]); extern void pc_close(void *threadid); diff --git a/src/mem.h b/src/mem.h index 16ddae75f..90ca75c62 100644 --- a/src/mem.h +++ b/src/mem.h @@ -1,8 +1,8 @@ /* Copyright holders: Sarah Walker, Tenshi see COPYING for more details */ -#ifndef _MEM_H_ -#define _MEM_H_ +#ifndef EMU_MEM_H +# define EMU_MEM_H extern uint8_t *ram; @@ -238,4 +238,5 @@ extern void port_92_clear_reset(void); extern void port_92_add(void); extern void port_92_remove(void); -#endif + +#endif /*EMU_MEM_H*/ diff --git a/src/pc.c b/src/pc.c index a53d5203b..cc8190b94 100644 --- a/src/pc.c +++ b/src/pc.c @@ -8,7 +8,7 @@ * * Main emulator module where most things are controlled. * - * Version: @(#)pc.c 1.0.43 2017/11/18 + * Version: @(#)pc.c 1.0.44 2017/11/19 * * Authors: Sarah Walker, * Miran Grca, @@ -50,6 +50,9 @@ #include "serial.h" #include "bugger.h" #include "cdrom/cdrom.h" +#include "cdrom/cdrom.h" +#include "cdrom/cdrom_image.h" +#include "cdrom/cdrom_null.h" #include "disk/hdd.h" #include "disk/hdc.h" #include "disk/hdc_ide.h" @@ -485,6 +488,55 @@ pc_speed_changed(void) } +/* Re-load system configuration and restart. */ +void +pc_reload(wchar_t *fn) +{ + int i; + + config_write(config_file_default); + + for (i=0; iexit(i); + if (cdrom_drives[i].host_drive == 200) + image_close(i); + else if ((cdrom_drives[i].host_drive >= 'A') && (cdrom_drives[i].host_drive <= 'Z')) + ioctl_close(i); + else + null_close(i); + } + + pc_reset_hard_close(); + + config_load(fn); + + for (i=0; i= 'A') && (cdrom_drives[i].host_drive <= 'Z')) + ioctl_open(i, cdrom_drives[i].host_drive); + else + cdrom_null_open(i, cdrom_drives[i].host_drive); + } + + floppy_load(0, floppyfns[0]); + floppy_load(1, floppyfns[1]); + floppy_load(2, floppyfns[2]); + floppy_load(3, floppyfns[3]); + + mem_resize(); + rom_load_bios(romset); + network_init(); + + pc_reset_hard_init(); +} + + /* Initialize modules, ran once, after pc_init. */ int pc_init_modules(void) diff --git a/src/video/vid_ega.h b/src/video/vid_ega.h index 929f2ce9e..baac2dede 100644 --- a/src/video/vid_ega.h +++ b/src/video/vid_ega.h @@ -9,9 +9,9 @@ * Emulation of the EGA, Chips & Technologies SuperEGA, and * AX JEGA graphics cards. * - * Version: @(#)vid_ega.h 1.0.2 2017/10/31 + * Version: @(#)vid_ega.h 1.0.3 2017/11/19 * - * Author: Sarah Walker, + * Authors: Sarah Walker, * Miran Grca, * akm, * @@ -19,109 +19,124 @@ * Copyright 2016,2017 Miran Grca. * Copyright 2017 akm. */ +#ifndef VIDEO_EGA_H +# define VIDEO_EGA_H -typedef struct ega_t -{ - mem_mapping_t mapping; - - rom_t bios_rom; - - uint8_t crtcreg; - uint8_t crtc[32]; - uint8_t gdcreg[16]; - int gdcaddr; - uint8_t attrregs[32]; - int attraddr, attrff; - int attr_palette_enable; - uint8_t seqregs[64]; - int seqaddr; - - uint8_t miscout; - int vidclock; - - uint8_t la, lb, lc, ld; - - uint8_t stat; - - int fast; - uint8_t colourcompare, colournocare; - int readmode, writemode, readplane; - int chain4, chain2_read, chain2_write; - int oddeven_page, oddeven_chain; - int enablevram, extvram; - uint8_t writemask; - uint32_t charseta, charsetb; - - uint8_t egapal[16]; - uint32_t *pallook; - - int vtotal, dispend, vsyncstart, split, vblankstart; - int hdisp, htotal, hdisp_time, rowoffset; - int lowres, interlace; - int linedbl, rowcount; - double clock; - uint32_t ma_latch; - - int vres; - - int64_t dispontime, dispofftime; - int64_t vidtime; - - uint8_t scrblank; - - int dispon; - int hdisp_on; - - uint32_t ma, maback, ca; - int vc; - int sc; - int linepos, vslines, linecountff, oddeven; - int con, cursoron, blink; - int scrollcache; - - int firstline, lastline; - int firstline_draw, lastline_draw; - int displine; - - uint8_t *vram; - int vrammask; - - uint32_t vram_limit; - - int video_res_x, video_res_y, video_bpp; - #ifdef JEGA - uint8_t RMOD1, RMOD2, RDAGS, RDFFB, RDFSB, RDFAP, RPESL, RPULP, RPSSC, RPSSU, RPSSL; - uint8_t RPPAJ; - uint8_t RCMOD, RCCLH, RCCLL, RCCSL, RCCEL, RCSKW, ROMSL, RSTAT; - int is_jega, font_index; - int chr_left, chr_wide; +# define SBCS 0 +# define DBCS 1 +# define ID_LEN 6 +# define NAME_LEN 8 +# define SBCS19_LEN 256 * 19 +# define DBCS16_LEN 65536 * 32 +#endif + + +#if defined(EMU_MEM_H) && defined(EMU_ROM_H) +typedef struct ega_t { + mem_mapping_t mapping; + + rom_t bios_rom; + + uint8_t crtcreg; + uint8_t crtc[32]; + uint8_t gdcreg[16]; + int gdcaddr; + uint8_t attrregs[32]; + int attraddr, attrff; + int attr_palette_enable; + uint8_t seqregs[64]; + int seqaddr; + + uint8_t miscout; + int vidclock; + + uint8_t la, lb, lc, ld; + + uint8_t stat; + + int fast; + uint8_t colourcompare, colournocare; + int readmode, writemode, readplane; + int chain4, chain2_read, chain2_write; + int oddeven_page, oddeven_chain; + int enablevram, extvram; + uint8_t writemask; + uint32_t charseta, charsetb; + + uint8_t egapal[16]; + uint32_t *pallook; + + int vtotal, dispend, vsyncstart, split, vblankstart; + int hdisp, htotal, hdisp_time, rowoffset; + int lowres, interlace; + int linedbl, rowcount; + double clock; + uint32_t ma_latch; + + int vres; + + int64_t dispontime, dispofftime; + int64_t vidtime; + + uint8_t scrblank; + + int dispon; + int hdisp_on; + + uint32_t ma, maback, ca; + int vc; + int sc; + int linepos, vslines, linecountff, oddeven; + int con, cursoron, blink; + int scrollcache; + + int firstline, lastline; + int firstline_draw, lastline_draw; + int displine; + + uint8_t *vram; + int vrammask; + + uint32_t vram_limit; + + int video_res_x, video_res_y, video_bpp; + +#ifdef JEGA + uint8_t RMOD1, RMOD2, RDAGS, RDFFB, RDFSB, RDFAP, RPESL, RPULP, RPSSC, RPSSU, RPSSL; + uint8_t RPPAJ; + uint8_t RCMOD, RCCLH, RCCLL, RCCSL, RCCEL, RCSKW, ROMSL, RSTAT; + int is_jega, font_index; + int chr_left, chr_wide; #endif } ega_t; +#endif -extern int update_overscan; - -void ega_out(uint16_t addr, uint8_t val, void *p); -uint8_t ega_in(uint16_t addr, void *p); -void ega_poll(void *p); -void ega_recalctimings(struct ega_t *ega); -void ega_write(uint32_t addr, uint8_t val, void *p); -uint8_t ega_read(uint32_t addr, void *p); -void ega_init(ega_t *ega); +#ifdef EMU_DEVICE_H extern device_t ega_device; extern device_t cpqega_device; extern device_t sega_device; - +#endif #ifdef JEGA -#define SBCS 0 -#define DBCS 1 -#define ID_LEN 6 -#define NAME_LEN 8 -#define SBCS19_LEN 256 * 19 -#define DBCS16_LEN 65536 * 32 - extern uint8_t jfont_sbcs_19[SBCS19_LEN]; /* 256 * 19( * 8) */ extern uint8_t jfont_dbcs_16[DBCS16_LEN]; /* 65536 * 16 * 2 (* 8) */ #endif + +extern int update_overscan; + + +#if defined(EMU_MEM_H) && defined(EMU_ROM_H) +extern void ega_init(ega_t *ega); +extern void ega_recalctimings(struct ega_t *ega); +#endif + +extern void ega_out(uint16_t addr, uint8_t val, void *p); +extern uint8_t ega_in(uint16_t addr, void *p); +extern void ega_poll(void *p); +extern void ega_write(uint32_t addr, uint8_t val, void *p); +extern uint8_t ega_read(uint32_t addr, void *p); + + +#endif /*VIDEO_EGA_H*/ diff --git a/src/win/win_ui.c b/src/win/win_ui.c index ec926bd43..9bfcbbb19 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -29,21 +29,11 @@ #include #include "../86box.h" #include "../config.h" -#include "../machine/machine.h" -#include "../mem.h" // because of load_config -#include "../rom.h" // because of load_config #include "../device.h" #include "../mouse.h" #include "../keyboard.h" -#include "../cdrom/cdrom.h" -#include "../cdrom/cdrom_image.h" -#include "../cdrom/cdrom_null.h" -#include "../floppy/floppy.h" -#include "../scsi/scsi.h" -#include "../network/network.h" #include "../video/video.h" #include "../video/vid_ega.h" // for update_overscan -#include "../sound/sound.h" #include "../plat.h" #include "../plat_mouse.h" #include "../plat_midi.h" @@ -116,6 +106,12 @@ video_toggle_option(HMENU h, int *val, int id) static void ResetAllMenus(void) { +#ifndef DEV_BRANCH + /* FIXME: until we fix these.. --FvK */ + EnableMenuItem(menuMain, IDM_CONFIG_LOAD, MF_DISABLED); + EnableMenuItem(menuMain, IDM_CONFIG_SAVE, MF_DISABLED); +#endif + #ifdef ENABLE_LOG_TOGGLES # ifdef ENABLE_BUSLOGIC_LOG CheckMenuItem(menuMain, IDM_LOG_BUSLOGIC, MF_UNCHECKED); @@ -252,7 +248,6 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HMENU hmenu; RECT rect; - int i = 0; switch (message) { case WM_CREATE: @@ -490,47 +485,10 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) case IDM_CONFIG_LOAD: plat_pause(1); - if (! file_dlg_st(hwnd, IDS_2160, "", 0)) { - if (ui_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051) == IDYES) { - config_write(config_file_default); - for (i = 0; i < FDD_NUM; i++) - floppy_close(i); - for (i = 0; i < CDROM_NUM; i++) - { - cdrom_drives[i].handler->exit(i); - if (cdrom_drives[i].host_drive == 200) - image_close(i); - else if ((cdrom_drives[i].host_drive >= 'A') && (cdrom_drives[i].host_drive <= 'Z')) - ioctl_close(i); - else - null_close(i); - } - pc_reset_hard_close(); - config_load(wopenfilestring); - for (i = 0; i < CDROM_NUM; i++) - { - if (cdrom_drives[i].bus_type) - SCSIReset(cdrom_drives[i].scsi_device_id, cdrom_drives[i].scsi_device_lun); - - if (cdrom_drives[i].host_drive == 200) - image_open(i, cdrom_image[i].image_path); - else if ((cdrom_drives[i].host_drive >= 'A') && (cdrom_drives[i].host_drive <= 'Z')) - ioctl_open(i, cdrom_drives[i].host_drive); - else - cdrom_null_open(i, cdrom_drives[i].host_drive); - } - - floppy_load(0, floppyfns[0]); - floppy_load(1, floppyfns[1]); - floppy_load(2, floppyfns[2]); - floppy_load(3, floppyfns[3]); - - mem_resize(); - rom_load_bios(romset); - network_init(); - ResetAllMenus(); - pc_reset_hard_init(); - } + if (!file_dlg_st(hwnd, IDS_2160, "", 0) && + (ui_msgbox(MBX_QUESTION, (wchar_t *)IDS_2051) == IDYES)) { + pc_reload(wopenfilestring); + ResetAllMenus(); } plat_pause(0); break;