API Changes

This commit is contained in:
Michael J. Manley
2022-04-17 12:28:16 -07:00
parent c7c8f5ee2f
commit 0811e43fd0
26 changed files with 347 additions and 2705 deletions

View File

@@ -7,6 +7,7 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules)
include(${CMAKE_SOURCE_DIR}/includes/includes.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/apple.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/debugdefines.cmake)
# TODO: This whole thing is jank, replace with a real way to determine cpu type
if(WIN32)
@@ -97,6 +98,7 @@ else()
set(PCEM_INCLUDE_DIR "include" CACHE STRING "PCem Include File Directory")
endif()
message("PCem Program Directories:")
message(" PCem Prefix Directory: ${CMAKE_INSTALL_PREFIX}")
message(" PCem Share Directory: ${PCEM_SHARE_DIR}")
message(" PCem Binary Directory: ${PCEM_BIN_DIR}")
message(" PCem Library Directory: ${PCEM_LIB_DIR}")
@@ -132,3 +134,4 @@ if(USE_EXPERIMENTAL)
add_subdirectory(experimental)
endif()
include(${CMAKE_SOURCE_DIR}/cmake/install.cmake)

2
NOTICE
View File

@@ -1,4 +1,4 @@
PCem uses a bit of code from some other projects to add funtionality to the program.
PCem uses a bit of code from some other projects to add functionality to the program.
The following are projects used and their authors and copyright notices/licenses
DOSBox

View File

@@ -1,421 +0,0 @@
# [PCem](https://pcem-emulator.co.uk/)
![C/C++ CI](https://github.com/sarah-walker-pcem/pcem/actions/workflows/c-cpp.yml/badge.svg)
## Download: [Windows](https://pcem-emulator.co.uk/files/PCemV17Win.zip)/[Linux](https://pcem-emulator.co.uk/files/PCemV17Linux.tar.gz)
Latest version: <b>v17</b> [Changelog](CHANGELOG.md)
PCem is licensed under GPL v2.0, see [COPYING](COPYING) for more details.
You can submit patches on our [forum](https://pcem-emulator.co.uk/phpBB3). Before you do, please note the [guidelines](https://pcem-emulator.co.uk/phpBB3/viewtopic.php?f=3&t=5) for submitting patches.
:exclamation: Note: <b>NO COPYRIGHTED ROM FILES ARE INCLUDED NOR WILL THEY BE. PLEASE DO NOT ASK FOR THEM.</b>
## BSD and Linux supplement (v17)
You will need the following libraries and buildtools (and their dependencies):
- SDL2
- wxWidgets 3.x
- OpenAL
- Meson
- Ninja
Open a terminal window, navigate to the PCem directory then enter:
```
meson --buildtype release build
cd build
ninja
DESTDIR="$(pwd)"/install meson install
```
then `./install/bin/pcem` to run.
The Linux/BSD versions store BIOS ROM images, configuration files, and other data in `~/.pcem`.
Meson configure options are :
```
--buildtype release : Generate release build. Recommended for regular use.
--buildtype debug : Compile with debugging enabled.
-Duse-networking=true : Build with networking support.
-Duse-pcap-networking=true : Build with pcap networking support. (On by default needs USE_NETWORKING to compile) Requires libpcap
-Duse-alsa=true : Build with support for MIDI output through ALSA. Requires libasound.
-Duse-plugin-engine=true : Build with plugin support. Builds libpcem-plugin-api and links PCem with it.
```
If you are using --buildtype debug, there are some more debug options you can enable if needed
```
-Dslirp-debug=true : Build PCem with SLIRP_DEBUG debug output
-Drecompiler-debug=true : Build PCem with RECOMPILER_DEBUG debug output
-Dne2000-debug=true : Build PCem with NE2000_DEBUG debug output
-Demu8k-debug-registers=true : Build PCem with EMU8K_DEBUG_REGISTERS debug output
-Dsb-dsp-record-debug=true : Build PCem with SB_DSP_RECORD_DEBUG debug output
-Dmach64-debug=true : Build PCem with MACH64_DEBUG debug output
-Dplugin-debug=true : Build PCem with PLUGIN_DEBUG debug output
-Dextra-debug=true : Build PCem with DEBUG_EXTRA debug output
-Dprinter-debug=true : Build PCem with PRINTER_DEBUG debug output
```
They are some extra modules you can add if you build with `-Dallow-experimental-code=true`. These modules are untested.
incomplete, and may or may not be in a future build of PCem. We do not provide builds with these enabled as
well.
```
-Duse-experimental-pdc=true : Build PCem with Professional Graphics Controller support.
-Duse-experimental-printer=true : Build PCem with Printer support. Requires freetype.
```
The menu is a pop-up menu in the Linux/BSD port. Right-click on the main window when mouse is not
captured.
CD-ROM support currently only accesses `/dev/cdrom`. It has not been heavily tested.
## Links
### PCem emulates the following hardware (as of v17):
Hardware | Links
--- | ---
Systems | [8088](#8088-based)<br/>[8086](#8086-based)<br/>[286](#286-based)<br/>[386](#386-based)<br/>[486](#486-based)<br/>[Pentium](#pentium-based)<br/>[Super Socket 7](#super-socket-7-based)
Graphics | [Basic](#basic-cards)<br/>[Unaccelerated (S)VGA cards](#unaccelerated-svga-cards)<br/>[2D accelerated SVGA cards](#2d-accelerated-svga-cards)<br/>[3D accelerated SVGA cards](#3d-accelerated-svga-cards)<br/>[3D only cards](#3d-only-cards)
Sound | [Cards](#sound-cards)
HDD Controller | [Cards](#hdd-controller-cards)
Misc | [Cards](#misc-cards)
### [Software Tested](TESTED.md) (list)
- [DOS](TESTED.md#dos)<br/>
- [Windows](TESTED.md#windows)<br/>
- [Windows NT](TESTED.md#windows-nt)<br/>
- [OS/2](TESTED.md#os2)<br/>
- [Linux](TESTED.md#linux)<br/>
- [Applications](TESTED.md#applications)<br/>
- [Games](TESTED.md#games)<br/>
- [Demos](TESTED.md#demos)<br/>
- [Emulators](TESTED.md#emulators)<br/>
<hr>
## Systems
### 8088 based
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | ---
1981 | <b>IBM PC</b><br/>8088 at 4.77 MHz<br/>16KB - 640KB RAM (min. 64KB) | ibmpc/pc102782.bin<br/>ibmpc/basicc11.f6<br/>ibmpc/basicc11.f8<br/>ibmpc/basicc11.fa<br/>ibmpc/basicc11.fc
1983 | <b>Compaq Portable Plus</b><br/>8088 at 4.77 MHz<br/>128KB - 640KB RAM | compaq_pip/Compaq Portable Plus 100666-001 Rev C.bin
1983 | <b>IBM XT</b><br/>8088 at 4.77 MHz<br/>64KB - 640KB RAM | ibmxt/5000027.u19<br/>ibmxt/1501512.u18
1983 | <b>Leading Edge Model M</b><br/>8088 at 7.16 MHz<br/>128KB - 704KB RAM | leadingedge_modelm/Leading Edge - Model M - BIOS ROM - Version 4.71.bin
1984 | <b>IBM PCjr</b> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>64KB - 640KB RAM (min. 128KB)<br/>Built-in 16 colour graphics<br/>3 voice sound<br/>Not generally PC compatible. | ibmpcjr/bios.rom
1984 | <b>Tandy 1000</b> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>128KB - 640KB RAM<br/>Built-in 16 colour graphics<br/>3 voice sound | tandy/tandy1t1.020
1985 | <b>Commodore PC10</b><br/>8088 at 4.77 MHz<br/>640KB RAM CGA/Monochrome | cbm_pc10/cbm-pc10c-bios-v4.41-318085-08.bin
1985 | <b>NCR PC4i</b><br/>8088 at 4.77 MHz<br/>256KB - 640KB RAM | ncr_pc4i/NCR_PC4i_BIOSROM_1985.BIN
1986 | <b>DTK Clone XT</b><br/>8088 at 8/10 MHz<br/>64KB - 640KB RAM | dtk/dtk_erso_2.42_2764.bin
1986 | <b>Phoenix XT clone</b><br/>8088 at 8/10 MHz<br/>64KB - 640KB RAM | pxxt/000p001.bin
1987 | <b>Hyundai Super 16T</b><br/>8088/8087 at 4.77/8.0 MHz<br/>640KB RAM<br/>EGA 16 colour graphics<br/> | ./huyndaixte/super16te_v2.00id.bin
1987 | <b>Tandy 1000HX</b><br/>8088 at 7.16 MHz<br/>256KB - 640KB RAM<br/>Built-in 16 colour graphics<br/>3 voice sound<br/>Has DOS 2.11 in ROM | tandy1000hx/v020000.u12
1987 | <b>Thomson TO16 PC</b><br/>8088 at 9.54 MHz<br/>512KB - 640KB RAM | to16_pc/TO16_103.bin
1987 | <b>Toshiba T1000</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>8088 at 4.77 MHz<br/>512KB - 1024KB RAM<br/>CGA on built-in LCD | t1000/t1000.rom<br/>t1000/t1000font.rom
1987 | <b>VTech Laser Turbo XT</b><br/>8088 at 10 MHz<br/>640KB RAM | ltxt/27c64.bin
1987 | <b>Zenith Data SupersPort</b><br/>8088 at 8 MHz<br/>128KB - 640KB RAM<br/>Built-in LCD video is not currently emulated | zdsupers/z184m v3.1d.10d
1988? | <b>&#169;Anonymous Generic Turbo XT BIOS</b><br/>8088 at 8+ MHz<br/>64KB - 640KB RAM | genxt/pcxt.rom
1988 | <b>Atari PC3</b><br/>8088 at 8 MHz<br/>640KB RAM | ataripc3/AWARD_ATARI_PC_BIOS_3.08.BIN
1988 | <b>Juko XT clone</b> | jukopc/000o001.bin
1988 | <b>Schneider Euro PC</b><br/>8088 at 9.54 MHz<br/>512KB - 640KB RAM | europc/50145<br/>europc/50146
1989 | <b>AMI XT clone</b><br/>8088 at 8+ MHz<br/>64KB - 640KB RAM | amixt/ami_8088_bios_31jan89.bin
1989 | <b>Hyundai Super 16TE</b><br/>8088/8087 at 10 MHz<br/>640KB RAM<br/>EGA 16 colour graphics<br/> | ./huyndaixte/super16te_v2.00id.bin
2015 | <b>Xi8088</b><br/>8088 at 4.77-13.33 MHz<br/>640KB RAM | xi8088/bios-xi8088.bin
### 8086 based
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | ---
1984 | <b>Compaq Deskpro</b><br/>8086 at 8 MHz<br/>128KB - 640KB RAM | deskpro/Compaq - BIOS - Revision J - 106265-002.bin
1984 | <b>Olivetti M24</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>128KB - 640KB RAM<br/>Built-in enhanced CGA (supports 640x400x2) | olivetti_m24/olivetti_m24_version_1.43_low.bin<br/>olivetti_m24/olivetti_m24_version_1.43_high.bin
1986 | <b>Amstrad PC1512</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Enhanced CGA (supports 640x200x16)<br/>Custom mouse port | pc1512/40043.v1<br/>pc1512/40044.v2<br/>pc1512/40078.ic127
1987 | <b>Amstrad PC1640</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in Paradise EGA<br/>Custom mouse port | pc1640/40043.v3<br/>pc1640/40044.v3<br/>pc1640/40100
1987 | <b>Toshiba T1200</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>8086 at 9.54 MHz<br/>1MB - 2MB RAM<br/>CGA on built-in LCD | t1200/t1200_019e.ic15.bin<br/>t1200/t1000font.rom
1988 | <b>Amstrad PPC512/640</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Built-in CGA w/ plasma display | ppc512/40107.v2<br/>ppc512/40108.v2<br/>ppc512/40109.bin
1988 | <b>Sinclair PC200/Amstrad PC20</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>512KB - 640KB RAM<br/>Built-in CGA (supports TV-out 50hz PAL) | pc200/pc20v2.0<br/>pc200/pc20v2.1<br/>pc200/40109.bin
1988 | <b>VTech Laser XT3</b><br/>8086 at 10 MHz<br/>512KB - 1152KB RAM | lxt3/27c64d.bin
1989 | <b>Amstrad PC2086</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in VGA | pc2086/40179.ic129<br/>pc2086/40180.ic132<br/>pc2086/40186.ic171
1989 | <b>Tandy 1000SL/2</b> <i>[[5]](#system-note-5)</i><br/>8086 at 9.54 MHz<br/>512KB - 768KB RAM<br/>Built-in 16 colour graphics<br/>4 voice sound | tandy1000sl2/8079047.hu1<br/>tandy1000sl2/8079048.hu2
1990 | <b>Amstrad PC3086</b> <i>[[5]](#system-note-5)</i><br/>8086 at 8 MHz<br/>640KB RAM<br/>Built-in VGA | pc3086/fc00.bin<br/>pc3086/c000.bin
1991 | <b>Amstrad PC5086</b><br/>8086 at 8 MHz<br/>640KB RAM | pc5086/sys_rom.bin
### 286 based
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | ---
1984 | <b>IBM AT</b><br/>286 at 6 or 8 MHz<br/>256KB - 16MB RAM | ibmat/at111585.0<br/>ibmat/at111585.1
1986 | <b>Compaq Portable II</b><br/>286 at 8 MHz<br/>256KB - 15MB RAM | compaq_pii/109739-001.rom<br/>compaq_pii/109740-001.rom
1986 | <b>IBM XT Model 286</b><br/>286 at 6 MHz<br/>256KB - 16MB RAM | ibmxt286/BIOS_5162_21APR86_U34_78X7460_27256.BIN<br/>ibmxt286/BIOS_5162_21APR86_U35_78X7461_27256.BIN
1986 | <b>Toshiba T3100e</b> <i>[[1]](#system-note-1)</i> <i>[[5]](#system-note-5)</i><br/>286 at 12 MHz<br/>1MB - 5MB RAM<br/>CGA on gas-plasma display | t3100e/t3100e_font.bin<br/>t3100e/t3100e.rom
1987 | <b>IBM PS/2 Model 50</b> <i>[[5]](#system-note-5)</i><br/>286 at 10 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | i8550021/90x7420.zm13<br/>i8550021/90x7423.zm14<br/>i8550021/90x7426.zm16<br/>i8550021/90x7429.zm18
1988 | <b>Bull Micral 45</b><br/>286 at 12 MHz<br/>1MB - 6MB RAM | bull_micral_45/even.fil<br/>bull_micral_45/odd.fil
1988 | <b>Commodore PC30-III</b><br/>286 at 12 MHz<br/>512KB - 16MB RAM | cmdpc30/commodore pc 30 iii even.bin<br/>cmdpc30/commodore pc 30 iii odd.bin
1988 | <b>IBM PS/2 Model 30-286</b><br/>286 at 10 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | ibmps2_m30_286/33f5381a.bin
1989 | <b>Epson PC AX</b><br/>286<br/>256KB - 16MB RAM | epson_pcax/EVAX<br/>epson_pcax/ODAX
1989 | <b>Epson PC AX2e</b><br/>286 at 12 MHz<br/>256KB - 16MB RAM | epson_pcax2e/EVAX<br/>epson_pcax2e/ODAX
1990 | <b>AMI 286 clone</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | ami286/amic206.bin
1990 | <b>Award 286 clone</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | award286/award.bin
1990 | <b>Dell System 200</b><br/>286 at 12 MHz<br/>640KB - 16MB RAM | dells200/dell0.bin<br/>dells200/dell1.bin
1990 | <b>IBM PS/1 Model 2011</b> <i>[[5]](#system-note-5)</i><br/>286 at 10 MHz<br/>512KB - 16MB RAM<br/>Built-in VGA<br/>DOS 4.01 + GUI menu system in ROM | ibmps1/f80000.bin
? | <b>Goldstar GDC-212M</b><br/>286 at 12 MHz<br/>512KB - 4MB RAM | gdc212m/gdc212m_72h.bin
? | <b>GW-286CT GEAR</b><br/>286 at 8+ MHz<br/>512KB - 16MB RAM | gw286ct/2ctc001.bin
? | <b>Hyundai Super-286TR</b><br/>286 at 12 MHz<br/>1MB - 4MB RAM | super286tr/award.bin
? | <b>Samsung SPC-4200P</b><br/>286 at 12 MHz<br/>512KB - 2MB RAM | spc4200p/u8.01
? | <b>Samsung SPC-4216P</b><br/>286 at 12 MHz<br/>1MB - 5MB RAM | spc4216p/phoenix.bin<br/>&nbsp;&nbsp;&nbsp;<i>or</i><br/>spc4216p/7101.u8<br/>spc4216p/ac64.u10
? | <b>Samsung SPC-4620P</b><br/>286 at 12 MHz<br/>1MB - 5MB RAM<br/>Built-in Korean ATI-28800 | spc4620p/31005h.u8<br/>spc4620p/31005h.u10<br/>spc4620p/svb6120a_font.rom<br/>spc4620p/31005h.u8<br/>spc4620p/31005h.u10
? | <b>Tulip AT Compact</b><br/>286<br/>640KB - 16MB RAM | tulip_tc7/tc7be.bin<br/>tulip_tc7/tc7bo.bin
### 386 based
Release | Machine | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | ---
1987 | <b>IBM PS/2 Model 80</b> <i>[[5]](#system-note-5)</i><br/>386DX at 20 MHz<br/>1MB - 12MB RAM<br/>Built-in VGA<br/>MCA bus | i8580111/15f6637.bin<br/>i8580111/15f6639.bin
1988 | <b>ECS 386/32</b><br/>386DX at 20 MHz<br/>1MB - 16MB RAM | ecs386_32/386_32_even.bin<br/>ecs386_32/386_32_odd.bin
1989 | <b>IBM PS/2 Model 70 (type 3)</b> <i>[[5]](#system-note-5)</i><br/>386DX at 25 MHz<br/>2MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | ibmps2_m70_type3/70-a_even.bin<br/>ibmps2_m70_type3/70-a_odd.bin
1989 | <b>Compaq Deskpro 386</b><br/>386DX at 20 MHz<br/>1MB - 15MB RAM | deskpro386/109592-005.u11.bin<br/>deskpro386/109591-005.u13.bin
1989 | <b>Epson PC AX3</b><br/>386SX at 16 MHz<br/>256KB - 16MB RAM | epson_pcax3/EVAX3<br/>epson_pcax3/ODAX3
1989 | <b>IBM PS/2 Model 55SX</b><br/>386SX at 16 MHz<br/>1MB - 8MB RAM<br/>Built-in VGA<br/>MCA bus | i8555081/33f8146.zm41<br/>i8555081/33f8145.zm40
1990 | <b>DTK 386SX clone</b><br/>386SX<br/>512KB - 16MB RAM | dtk386/3cto001.bin
1990 | <b>IBM PS/1 Model 2121</b> <i>[[5]](#system-note-5)</i><br/>386SX at 20 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA | ibmps1_2121/fc0000.bin
1990 | <b>Samsung SPC-6000A</b><br/>386DX<br/>1MB - 32 MB RAM | spc6000a/3c80.u27<br/>spc6000a/9f80.u26
1992 | <b>Acermate 386SX/25N</b> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>2MB - 16MB RAM<br/>Built-in Oak SVGA | acer386/acer386.bin<br/>acer386/oti067.bin
1992 | <b>Amstrad MegaPC</b> <i>[[2]](#system-note-2)</i> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>1MB - 16MB RAM<br/>Built-in VGA<br/> | megapc/41651-bios lo.u18<br/>megapc/211253-bios hi.u19
1992 | <b>Commodore SL386SX-25</b> <i>[[5]](#system-note-5)</i><br/>386SX at 25 MHz<br/>1MB - 16MB RAM<br/>Built-in AVGA2 | cbm_sl386sx25/f000.bin<br/>cbm_sl386sx25/c000.bin
1992 | <b>Packard Bell Legend 300SX</b><br/>386SX at 16 MHz<br/>1MB - 16MB RAM | pb_l300sx/pb_l300sx.bin
1992 | <b>Samsung SPC-6033P</b><br/>386SX at 33 MHz<br/>2MB - 12 MB RAM | spc6033p/phoenix.bin<br/>spc6033p/svb6120a_font.rom
1994 | <b>AMI 386DX clone</b><br/>386DX at 40 MHz<br/>1MB - 32MB RAM | ami386dx/opt495sx.ami
1994 | <b>AMI 386SX clone</b><br/>386SX at 25 MHz<br/>1MB - 16MB RAM | ami386/ami386.bin
1994 | <b>MR 386DX clone</b><br/>This is a generic 386DX clone with an MR BIOS | mr386dx/opt495sx.mr
? | <b>KMX-C-02</b><br/>386SX<br/>512KB - 16MB RAM | kmxc02/3ctm005.bin
### 486 based
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ---
1990 | <b>IBM PS/2 Model 70 (type 4)</b> <i>[[3]](#system-note-3)</i><br/>2MB - 16MB RAM<br/>Built-in VGA<br/>MCA bus | <b>486DX</b> at 25 MHz | ibmps2_m70_type3/70-a_even.bin<br/>ibmps2_m70_type3/70-a_odd.bin
1993 | <b>AMI 486 clone</b><br/>1MB - 32MB RAM | <b>486</b> at 16-66 MHz | ami486/ami486.bin
1993 | <b>Elonex PC-425X</b> <i>[[5]](#system-note-5)</i><br/>1MB - 256MB RAM<br/>Built-in Trident TGUI9440CXi | <b>486SX</b> at 25 MHz | elx_pc425x/elx_pc425x.bin<br/>&nbsp;&nbsp;&nbsp;<i>or</i><br/>elx_pc425x/elx_pc425x_bios.bin<br/>elx_pc425x/elx_pc425x_vbios.bin
1993 | <b>IBM PS/1 Model 2133 (EMEA 451)</b><br/>2MB - 64MB RAM<br/>Built-in Cirrus Logic GD5426 | <b>486SX</b> at 25 MHz | ibmps1_2133/PS1_2133_52G2974_ROM.bin
1993 | <b>Packard Bell PB410A</b> <i>[[5]](#system-note-5)</i><br/>1MB - 64MB RAM<br/>Built-in HT-216 video | <b>486</b> at 25-120 MHz<br/><b>Am5x86</b> at 133-160 MHz<br/><b>Cx5x86</b> at 100-133 MHz<br/><b>Pentium Overdrive</b> at 63-83 MHz | pb410a/PB410A.080337.4ABF.U25.bin
1994 | <b>AMI WinBIOS 486 clone</b><br/>1MB - 32MB RAM | <b>486</b> at 16-66 MHz | win486/ali1429g.amw
1995 | <b>Award SiS 496/497</b><br/>1MB - 64MB RAM | <b>486</b> at 16-120 MHz<br/><b>Am5x86</b> at 133-160 MHz<br/><b>Cx5x86</b> at 100-133 MHz<br/><b>Pentium Overdrive</b> at 63-83 MHz | sis496/sis496-1.awa
### Pentium based
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ---
1994 | <b>Intel Premiere/PCI (Batman's Revenge)</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 60-66 MHz<br/><b>Pentium Overdrive</b> at 120-133 MHz | revenge/1009af2_.bi0<br/>revenge/1009af2_.bi1
1995 | <b>Intel Advanced/EV (Endeavor)</b> <i>[[4]](#system-note-4)</i><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | endeavor/1006cb0_.bi0<br/>endeavor/1006cb0_.bi1
1995 | <b>Intel Advanced/ZP (Zappa)</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | zappa/1006bs0_.bio<br/>zappa/1006bs0_.bi1
1995 | <b>Packard Bell PB520R (Robin LC)</b> <i>[[5]](#system-note-5)</i><br/>1MB - 128MB RAM<br/>Built-in Cirrus Logic GD-5434 | <b>Pentium</b> at 60-66 MHz<br/><b>Pentium Overdrive</b> at 120-133 MHz | pb520r/1009bc0r.bio<br/>pb520r/1009bc0r.bi1<br/>pb520r/gd5434.bin
1995 | <b>Packard Bell PB570 (Hillary)</b> <i>[[5]](#system-note-5)</i><br/>1MB - 128MB RAM<br/>Built-in Cirrus Logic GD-5430 | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | pb570/1007by0r.bio<br/>pb570/1007by0r.bi1<br/>pb570/gd5430.bin
1996 | <b>ASUS P/I-P55TVP4</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55tvp4/tv5i0204.awd
1996 | <b>ASUS P/I-P55T2P4</b><br/>1MB - 512MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55t2p4/0207_j2.bin
1996 | <b>Award 430VX PCI</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | 430vx/55xwuq0e.bin
1996 | <b>Itautec Infoway Multimidia</b><br/>8MB - 128MB RAM | <b>Pentium</b> at 75-133 MHz<br/><b>Pentium Overdrive</b> at 125-200 MHz | infowaym/1006bs0_.bio<br/>infowaym/1006bs0_.bi1
1997 | <b>Epox P55-VA</b><br/>1MB - 128MB RAM | <b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT Winchip 2</b> at 200-240 MHz<br/><b>IDT Winchip 2A</b> at 200-233 MHz<br/><b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> <i>(AFR-66)</i> at 233-300 MHz | p55va/va021297.bin
### Super Socket 7 based
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ---
1998 | <b>FIC VA-503+</b><br/>1MB - 512MB RAM | <b>AMD K6</b> at 166-300 MHz<br/><b>AMD K6-2</b> at 233-550 MHz<br/><b>AMD K6-2+</b> at 450-550 MHz<br/><b>AMD K6-III</b> at 400-450 MHz<br/><b>AMD K6-III+</b> at 400-500 MHz<br/><b>Pentium</b> at 75-200 MHz<br/><b>Pentium MMX</b> at 166-233 MHz<br/><b>Mobile Pentium MMX</b> at 120-300 MHz<br/><b>Cyrix 6x86</b> at PR90<i>(80 MHz)</i>-PR200<i>(200 MHz)</i><br/><b>Cyrix 6x86MX/MII</b> at PR166<i>(133 MHz)</i>-PR400<i>(285 MHz)</i><br/><b>IDT WinChip</b> at 75-240 MHz<br/><b>IDT WinChip2</b> at 200-250 MHz<br/><b>IDT Winchip 2A</b> at PR200<i>(200 MHz)</i>-PR300<i>(250 MHz)</i> | fic_va503p/je4333.bin
### Socket 8 based
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ---
1996 | <b>Intel VS440FX</b><br/>8MB - 256 MB RAM | <b>Pentium Pro</b> at 150-200 MHz<br/><b>Pentium II Overdrive</b> at 300-333 MHz | vs440fx/1018CS1_.BI1<br/>vs440fx/1018CS1_.BI2<br/>vs440fx/1018CS1_.BI3<br/>vs440fx/1018CS1_.BIO<br/>vs440fx/1018CS1_.RCV
### Slot 1 based
Release | Machine<br/>(+ addl. hardware) | CPU(s) Supported | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ---
1998 | <b>Gigabyte GA-686BX</b><br/>8MB - 512MB RAM | <b>Pentium II</b> at 233-450 MHz<br/><b>Celeron</b> at 266-533 MHz<br/><b>Cyrix III</b>at 500 MHz | ga686bx/6BX.F2a
#### Additional Notes
<a name="system-note-1">`[1]`</a> <b>Toshiba Button Mapping</b>:
PCem maps [Fn] to `right-Ctrl` and `right-Alt`. The following functions are supported:
Key Combo | Function
---|---
Fn + Num Lock | toggle numpad
Fn + Home | Internal LCD display
Fn + Page Down | Turbo on
Fn + Right | Toggle LCD font
Fn + End | External CRT display
Fn + SysRQ | Toggle window
<a name="system-note-2">`[2]`</a> <b>Amstrad MegaPC</b> <i>(386SX)</i>: The original machine had a built-in Sega MegaDrive. This is not emulated in PCem.
<a name="system-note-3">`[3]`</a> <b>IBM PS/2 Model 70 (type 4)</b> <i>(486DX)</i>: PCem's FPU emulation is not bit accurate and can not pass IBM's floating point tests. As a result, this machine will always print 12903 and 162 errors on bootup. These can be ignored - F1 will boot the machine.
<a name="system-note-4">`[4]`</a> <b>Intel Advanced/EV (Endeavor)</b> <i>(Pentium)</i>: The real board has a Sound Blaster 16 onboard and optionally an S3 Trio64V+. Neither are emulated as onboard devices.
<a name="system-note-5">`[5]`</a> Some systems have fixed graphics adapters:<br/>
<i>** = Can use external video card.</i><br/>
System | Graphics | Addl. Info | **
--- | --- | --- | :-:
<b>Amstrad MegaPC</b> | Paradise 90C11 | A development of the PVGA1 with 512KB VRAM | &#10004;
<b>Acer 386SX/25N</b> | Oak OTI-067 | Another 512KB SVGA clone | &#10004;
<b>Amstrad PC1512</b> | CGA | Has a new mode (640x200x16) | X
<b>Amstrad PC1640</b> | Paradise EGA | &nbsp; | &#10004;
<b>Amstrad PC2086/PC3086</b> | Paradise PVGA1 | An early SVGA clone with 256KB VRAM | &#10004;
<b>Amstrad PPC512/640</b> | CGA/MDA | Outputs to 640x200 plasma display | &#10004;
<b>Commodore SL386SX-25</b> | AVGA2 | 256KB - 512KB VRAM | X
<b>Elonex PC-425X</b> | Trident TGUI9400CXi | 512KB VRAM | X
<b>IBM PCjr</b> | CGA | Has various new modes: <br/>160x200 x 16<br/>320x200 x 16<br/>640x200 x 4 | X
<b>IBM PS/1 Model 2011</b> | Stock VGA | 256KB VRAM | X
<b>IBM PS/1 Model 2121</b> | Basic (and unknown) SVGA | 256KB VRAM | X
<b>IBM PS/2 machines</b> | Stock VGA | 256KB VRAM | X
<b>Olivetti M24</b> <i>[[6]](#system-note-6)</i>| CGA | Has double-res text modes + 640x400 mode | X
<b>Packard Bell PB410A</b> | Headland HT-216 | &nbsp; | &#10004;
<b>Packard Bell PB520R</b> | Cirrus Logic GD-5434 | &nbsp; | &#10004;
<b>Packard Bell PB570</b> | Cirrus Logic GD-5430 | &nbsp; | &#10004;
<b>Sinclair PC200</b> | CGA | Can output to TV @ 50hz (UK) | &#10004;
<b>Tandy 1000</b> | Clone of PCjr video | Widely supported in 80s games | X
<b>Tandy 1000 SL/2</b> | Improved Tandy 1000 | Has support for 640x200x16 | X
<b>Toshiba T-series</b> | CGA | Outputs to built-in LCD or plasma display | X
<a name="system-note-6">`[6]`</a> <b>Olivetti M24 (display)</b>: I haven't seen a dump of the font ROM for this yet, so if one is not provided the MDA font will be used - which looks slightly odd as it is 14-line instead of 16-line.
<hr>
## Graphics Cards
### Basic cards
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
--- | --- | ---
<b>MDA</b> <i>(1981)</i> | 80x25 monochrome text | <i>(none)</i>
<b>CGA</b> <i>(1981)</i> | 40x25 and 80x25 text<br/>320x200 in 4 colours<br/>620x200 in 2 colours<br/>Supports composite output for ~16 colours. | <i>(none)</i>
<b>Hercules</b> <i>(1982)</i> | 80x25 monochrome text<br/>720x348 in monochrome | <i>(none)</i>
<b>Plantronics ColorPlus</b> | An enhanced CGA board with support for 320x200x16 and 640x200x4 | <i>(none)</i>
<b>Wyse WY-700</b> | A CGA-compatible board with support for a 1280x800 mode | <i>(none)</i>
<b>MDSI Genius</b> | Mono portrait board with support for a 728x1008 mode | 8x12.bin
<b>IBM EGA</b> <i>(1984)</i> | Text up to 80x43<br/>Graphics up to 640x350 in 16 colours | ibm_6277356_ega_card_u44_27128.bin
<b>ATI EGA Wonder 800+</b> | An enhanced EGA-compatible board with support for up to 800x600 in 16 colours | ATI EGA Wonder 800+ N1.00.BIN
<b>Hercules InColor</b> | An enhanced Hercules with a custom 720x350 16 colour mode | <i>(none)</i>
### Unaccelerated (S)VGA cards
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
--- | --- | ---
<b>ATI Korean VGA</b> | ATI-28800 based.<br/>512KB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | atikorvga.bin<br/>ati_ksc5601.rom
<b>ATI VGA Edge-16</b> | ATI-18800 based<br/>512KB VRAM<br/>Supports up to 8-bit colour | vgaedge16.vbi
<b>ATI VGA Charger</b> | ATI-28800 based<br/>512KB VRAM<br/>Supports up to 8-bit colour | bios.bin
<b>AVGA2</b> | Also known as Cirrus Logic GD5402<br/>256KB - 512KB VRAM<br/>Supports up to 8-bit colour | avga2vram.vbi
<b>IBM VGA</b> <i>(1987)</i> | 256KB VRAM<br/>Text up to 80x50<br/>Graphics up to 320x200 in 256 colours or 640x480 in 16 colours | ibm_vga.bin
<b>Kasan Hangulmadang-16</b> | ET4000AX based<br/>1MB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | et4000_kasan16.bin<br/>kasan_ksc5601.rom
<b>OAK OTI-037C</b> | 256KB VRAM<br/>Supports up to 8-bit colour | oti037/bios.bin
<b>OAK OTI-067</b> | 256KB - 512KB VRAM<br/>Supports up to 8-bit colour | oti067/bios.bin
<b>Olivetti GO481 (Paradise PVGA1A)</b> | 256KB VRAM<br/>Supports up to 8-bit colour | oli_go481_lo.bin<br/>oli_go481_hi.bin
<b>Trident 8900D SVGA</b> | 256KB - 1MB VRAM<br/>Supports up to 24-bit colour | trident.bin
<b>Trident 9000B SVGA</b> | 512KB VRAM<br/>Supports up to 8-bit colour | tvga9000b/BIOS.BIN
<b>Trident TGUI9400CXi</b> | 1MB - 2MB VRAM<br/>Supports up to 24-bit colour | 9440.vbi
<b>Trigem Korean VGA</b> | ET4000AX based<br/>1MB VRAM<br/>Supports up to 8-bit colour<br/>Korean font support | tgkorvga.bin<br/>tg_ksc5601.rom
<b>Tseng ET4000AX SVGA</b> | 1MB VRAM<br/>Supports up to 8-bit colour | et4000.bin
### 2D Accelerated SVGA cards
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
--- | --- | ---
<b>ATI Graphics Pro Turbo</b> | Mach64GX based<br/>1MB - 4MB VRAM | mach64gx/bios.bin
<b>ATI Video Xpression</b> | Mach64VT2 based<br/>2MB - 4MB VRAM<br/>Has video acceleration | atimach64vt2pci.bin
<b>Cirrus Logic GD-5428</b> | 1MB - 2MB VRAM | Machspeed_VGA_GUI_2100_VLB.vbi
<b>Cirrus Logic GD-5429</b> | 1MB - 2MB VRAM | 5429.vbi
<b>Cirrus Logic GD-5430</b> | 1MB - 2MB VRAM | gd5430/pci.bin
<b>Cirrus Logic GD-5434</b> <i>[[1]](#graphics-note-1)</i> | 2MB - 4MB VRAM | gd5434.bin
<b>Diamond Stealth 32 SVGA</b> | ET4000/W32p based<br/>1MB - 2MB VRAM | et4000w32.bin
<b>IBM 1MB SVGA Adapter/A</b> | Cirrus Logic GD5428 based<br/>1 MB VRAM<br/>Only supported on PS/2 models | SVGA141.ROM
<b>Number Nine 9FX</b> | S3 Trio64 based<br/>1MB - 2MB VRAM | s3_764.bin
<b>Paradise Bahamas 64</b> | S3 Vision864 based<br/>1MB - 4MB VRAM | bahamas64.bin
<b>Phoenix S3 Trio32</b> | S3 Trio32 based<br/>512KB - 2MB VRAM | 86c732p.bin
<b>Phoenix S3 Trio64</b> | S3 Trio64 based<br/>1MB - 4MB VRAM | 86c764x1.bin
<b>Trident TGUI9440</b> | 1MB - 2MB VRAM | 9440.vbi
### 3D Accelerated SVGA cards
Hardware | Addl. Info | ROM file needed<br/>(within ./roms/ folder)
--- | --- | ---
<b>3DFX Voodoo Banshee (reference)</b> | Voodoo Banshee based<br/>8MB - 16MB VRAM | pci_sg.rom
<b>3DFX Voodoo 3 2000</b> | Voodoo 3 based<br/>16MB VRAM | voodoo3_2000/2k11sd.rom
<b>3DFX Voodoo 3 3000</b> | Voodoo 3 based<br/>16MB VRAM | voodoo3_3000/3k12sd.rom
<b>Creative Labs 3D Blaster Banshee</b> | Voodoo Banshee based<br/>16MB VRAM | blasterpci.rom
<b>Diamond Stealth 3D 2000</b> <i>[[2]](#graphics-note-2)</i>| S3 ViRGE/325 based<br/>2MB - 4MB VRAM | s3virge.bin
<b>S3 ViRGE/DX</b> <i>[[3]](#graphics-note-3)</i>| S3 ViRGE/DX based<br/>2MB - 4MB VRAM | 86c375_1.bin
### 3D only cards
Hardware | Addl. Info
--- | ---
<b>3DFX Voodoo Graphics</b> <i>[[4]](#graphics-note-4)</i>| 3D accelerator. Widely supported in late 90s games.
<b>Obsidian SB50</b> <i>[[5]](#graphics-note-5)</i>| Voodoo with 2 TMUs
<b>3DFX Voodoo 2</b> <i>[[6]](#graphics-note-6)</i>| Improved Voodoo Graphics<br/>Higher clocks<br/>2 TMUs<br/>Triangle setup, etc.
#### Additional Notes
<a name="graphics-note-1">`[1]`</a> <b>Cirrus Logic GD-5434</b>: Real chip also supports 1MB configurations, however this is not currently supported in PCem.
<a name="graphics-note-2">`[2]`</a> <b>Diamond Stealth 3D 2000</b>: PCem emulates the ViRGE S3D engine in software. This works with most games I tried, but there may be some issues. The Direct3D drivers for the /325 are fairly poor (often showing as missing triangles), so use of the /DX instead is recommended.
<a name="graphics-note-3">`[3]`</a> <b>S3 ViRGE/DX</b>: The drivers that come with Windows are similar to those for the /325, however better ones do exist (try the 8-21-1997 version). With the correct drivers, many early Direct3D games work okay (if slowly).
<a name="graphics-note-4">`[4]`</a> <b>3DFX Voodoo Graphics</b>: PCem emulates this in software. The emulation is a lot faster than in v10 (thanks to a new dynamic recompiler) and should be capable of hitting Voodoo 1 performance on most machines when two render threads are used. As before, the emulated CPU is the bottleneck for most games. <br/><br/>PCem can emulate 6 and 8 MB configurations, but defaults to 4 MB for compatibility. It can also emulate the screen filter present on the original card, though this does at present have a noticeable performance hit.<br/><br/>Almost everything I've tried works okay, with a very few exceptions - Screamer 2 and Rally have serious issues.
<a name="graphics-note-5">`[5]`</a> <b>Obsidian SB50</b>: Drivers for this are a bit limited - the official drivers don't support 2 TMUs in Direct3D.
<a name="graphics-note-6">`[6]`</a> <b>3DFX Voodoo 2</b>: PCem can emulate both 8 and 12 MB configurations. It can also emulate 6 and 10 MB configurations (with 2MB framebuffer memory), which were never sold into the PC market but do exist for arcade systems.
<hr>
## Sound Cards
Hardware | Notes
--- | ---
<b>PC speaker</b> | The standard beeper on all PCs. Supports samples/RealSound.
<b>Tandy PSG</b> | The Texas Instruments chip in the PCjr and Tandy 1000. Supports 3 voices plus noise. I reused the emulator in B-em for this (slightly modified). PCem emulates the differences between the SN76496 (PCjr and Tandy 1000), and the NCR8496 (currently assigned to the Tandy 1000HX). Maniac Mansion and Zak McKraken will only sound correct on the latter.
<b>Tandy PSSJ</b> | Used on the Tandy 1000SL/2, this clones the NCR8496, adding an addition frequency divider (did any software actually use this?) and an 8-bit DAC.
<b>PS/1 audio card</b> | An SN76496 clone plus an 8-bit DAC. The SN76496 isn't at the same address as PCjr/Tandy, so most software doesn't support it.
<b>Gameblaster</b> | The Creative Labs Gameblaster/Creative Music System, Creative's first sound card introduced in 1987. Has two Philips SAA1099, giving 12 voices of square waves plus 4 noise voices. In stereo!
<b>Adlib</b> | Has a Yamaha YM3812, giving 9 voices of 2 op FM, or 6 voices plus a rhythm section. PCem uses the DOSBox dbopl emulator.
<b>Adlib Gold</b> | OPL3 with YM318Z 12-bit digital section. Possibly some bugs (not a lot of software to test). The surround module is now emulated.
<b>Sound Blaster</b> <i>[[1]](#sound-note-1)</i> | See linked note for more details.
<b>Gravis Ultrasound</b> | 32 voice sample playback. Port address is fixed to 240, IRQ and DMA can be changed from the drivers. Emulation is improved significantly over previous versions.
<b>Windows Sound System</b> | 16-bit digital + OPL3. Note that this only emulates WSS itself, and should not be used with drivers from compatible boards with additional components (eg Turtle Beach Monte Carlo)
<b>Aztech Sound Galaxy Pro 16 AB (Washington)</b> | SB compatible + WSS compatible
<b>Innovation SSI-2001</b> | SID6581. Emulated using resid-fp. Board is fixed to port 280.
<b>Ensoniq AudioPCI (ES1371)<br/>Sound Blaster PCI 128</b> | Basic PCI sound card. Emulates Sound Blaster in software.
### Additional Notes
<a name="sound-note-1">`[1]`</a> <b>Sound Blaster</b>: Several Sound Blasters are emulated.
* SB v1.0 - The original. Limited to 22khz, and no auto-init DMA (can cause crackles sometimes).
* SB v1.5 - Adds auto-init DMA
* SB v2.0 - Upped to 41khz
* SB Pro v1.0 - Stereo with twin OPL2 chips.
* SB Pro v2.0 - Stereo with OPL 3 chip
* SB 16 - 16 bit stereo
* SB AWE32 - SB 16 + wavetable MIDI. This requires a ROM dump from a real AWE32.
All cards are set to Address 220, IRQ 7 and DMA 1 (and High DMA 5). IRQ and DMA can be changed for the SB16 & AWE32 in the drivers. The relevant SET line for autoexec.bat is `SET BLASTER = A220 I7 D1 Tx` - where Tx is T1 for SB v1.0, T3 for SB v2.0, T4 for SB Pro, and T6 for SB16.
AWE32 requires a ROM dump called `awe32.raw`. AWE-DUMP is a utility which can get a dump from a real card. Most EMU8000 functionality should work, however filters are not correct and reverb/chorus effects are not currently emulated.
<hr>
## HDD Controller Cards
Int. | Hardware | Notes | ROM file needed<br/>(within ./roms/ folder)
:-: | --- | --- | ----
MFM | <b>Fixed Disk Adapter (Xebec)</b> | MFM controller originally included in the IBM XT. This controller only supports HD types 0, 2, 13, and 16. | ibm_xebec_62x0822_1985.bin
MFM | <b>DTC 5150X</b> | 8-bit MFM controller.<br/>To configure drive types, run `DEBUG.EXE` and enter `g=c800:5`. | dtc_cxd21a.bin
MFM | <b>AT Fixed Disk Adapter</b> | MFM controller originally included in the IBM AT. Supported by all AT-compatible BIOSes. | <i>(none)</i>
ESDI | <b>Western Digital WD1007V-SE1</b> | 16-bit ESDI controller | 62-000279-061.bin
ESDI | <b>IBM ESDI Fixed Disk Controller</b> | MCA ESDI controller. Only supported on PS/2 models. | 90x8969.bin<br/>90x8970.bin
IDE | <b>Standard IDE</b> | Standard IDE controller. Supported by all AT-compatible BIOSes. Use this if in any doubt! | <i>(none)</i>
IDE | <b>XTIDE</b> | 8-bit IDE controller. The BIOS is available [here](http://code.google.com/p/xtideuniversalbios/). <br/>v2.0.0 beta 1 is the version I've mostly tested. v2.0.0 beta 3 is known to have some issues. | ide_xt.bin
IDE | <b>XTIDE (AT)</b> | 16-bit IDE controller. | ide_at.bin
IDE | <b>XTIDE (PS/1)</b> | IDE controller for the PS/1 model 2033. For this machine you will need BIOS version v1.1.5. The PS/1 is a bit fussy with XTIDE, and I've found that it works best when the XTIDE configuration has 'Full Operating Mode' disabled. | ide_at_1_1_5.bin
SCSI | <b>Longshine LCS-6821N</b> | 8-bit SCSI controller. | Longshine LCS-6821N - BIOS version 1.04.bin
SCSI | <b>Rancho RT1000B</b> | 8-bit SCSI controller. | Rancho_RT1000_RTBios_version_8.10R.bin
SCSI | <b>Trantor T130B</b> | 8-bit SCSI controller. | trantor_t130b_bios_v2.14.bin
SCSI | <b>IBM SCSI Adapter with Cache</b> | MCA SCSI controller. Only supported on PS/2 models. | 92F2244.U68<br/>92F2245.U69
SCSI | <b>Adaptec AHA-1542C</b> | 16-bit SCSI controller. | adaptec_aha1542c_bios_534201-00.bin
SCSI | <b>BusLogic BT-545S</b> | 16-bit SCSI controller. | BusLogic_BT-545S_U15_27128_5002026-4.50.bin
<hr>
## Misc Cards
Hardware | Note
--- | ---
Serial mouse | A Microsoft compatible serial mouse on COM1. Compatible drivers are all over the place for this.
M24 mouse | I haven't seen a DOS mouse driver for this yet but the regular scancode mode works as does the Windows 1.x driver.
PC1512 mouse | The PC1512's perculiar quadrature mouse. You need Amstrad's actual driver for this one.
PS/2 mouse | A standard 2 button PS/2 mouse. As with serial, compatible drivers are common.
Microsoft PS/2 Intellimouse | A PS/2 mouse with mouse wheel.
ATAPI CD-ROM | Works with OAKCDROM.SYS, VDD-IDE.SYS, and the internal drivers of every OS I've tried.

View File

@@ -1,219 +0,0 @@
<h1 id="pcem-v18">PCem v18</h1>
<h2 id="changes-in-v18">Changes in v18</h2>
<ul>
<li>PCAP Support is now both Windows and Linux</li>
<li>Added plugin support. You can add video, hdd, network, sound, and PC Models using a plugin.</li>
<li>Numerous bugfixes in this build</li>
</ul>
<h2 id="added-the-following-machines-to-v18">Added the following machines to v18</h2>
<ul>
<li>Huyndai SUPER-16T</li>
<li>Huyndai SUPER-16TE</li>
<li>Commodore PC10C</li>
</ul>
<h2 id="developer-changes-to-v18">Developer Changes to v18</h2>
<ul>
<li>First release to switch from autotools to CMake</li>
<li>Legacy autotools and mingw makefiles are removed</li>
</ul>
<h1 id="pcem-v17">PCem v17</h1>
<ul>
<li>New machines added - Amstrad PC5086, Compaq Deskpro, Samsung SPC-6033P, Samsung SPC-6000A, Intel VS440FX, Gigabyte GA-686BX</li>
<li>New graphics cards added - 3DFX Voodoo Banshee, 3DFX Voodoo 3 2000, 3DFX Voodoo 3 3000, Creative 3D Blaster Banshee, Kasan Hangulmadang-16, Trident TVGA9000B</li>
<li>New CPUs - Pentium Pro, Pentium II, Celeron, Cyrix III</li>
<li>VHD disc image support</li>
<li>Numerous bug fixes</li>
<li>A few other bits and pieces</li>
</ul>
<h1 id="pcem-v16">PCem v16</h1>
<ul>
<li>New machines added - Commodore SL386SX-25, ECS 386/32, Goldstar GDC-212M, Hyundai Super-286TR, IBM PS/1 Model 2133 (EMEA 451), Itautec Infoway Multimidia, Samsung SPC-4620P, Leading Edge Model M</li>
<li>New graphics cards added - ATI EGA Wonder 800+, AVGA2, Cirrus Logic GD5428, IBM 1MB SVGA Adapter/A</li>
<li>New sound card added - Aztech Sound Galaxy Pro 16 AB (Washington)</li>
<li>New SCSI card added - IBM SCSI Adapter with Cache</li>
<li>Support FPU emulation on pre-486 machines</li>
<li>Numerous bug fixes</li>
<li>A few other bits and pieces</li>
</ul>
<h1 id="pcem-v15">PCem v15</h1>
<ul>
<li>New machines added - Zenith Data SupersPort, Bull Micral 45, Tulip AT Compact, Amstrad PPC512/640, Packard Bell PB410A, ASUS P/I-P55TVP4, ASUS P/I-P55T2P4, Epox P55-VA, FIC VA-503+</li>
<li>New graphics cards added - Image Manager 1024, Sigma Designs Color 400, Trigem Korean VGA</li>
<li>Added emulation of AMD K6 family and IDT Winchip 2</li>
<li>New CPU recompiler. This provides several optimisations, and the new design allows for greater portability and more scope for optimisation in the future</li>
<li>Experimental ARM and ARM64 host support</li>
<li>Read-only cassette emulation for IBM PC and PCjr</li>
<li>Numerous bug fixes</li>
</ul>
<h1 id="pcem-v14">PCem v14</h1>
<ul>
<li>New machines added - Compaq Portable Plus, Compaq Portable II, Elonex PC-425X, IBM PS/2 Model 70 (types 3 &amp; 4), Intel Advanced/ZP, NCR PC4i, Packard Bell Legend 300SX, Packard Bell PB520R, Packard Bell PB570, Thomson TO16 PC, Toshiba T1000, Toshiba T1200, Xi8088</li>
<li>New graphics cards added - ATI Korean VGA, Cirrus Logic CL-GD5429, Cirrus Logic CL-GD5430, Cirrus Logic CL-GD5435, OAK OTI-037, Trident TGUI9400CXi</li>
<li>New network adapters added - Realtek RTL8029AS</li>
<li>Iomega Zip drive emulation</li>
<li>Added option for default video timing</li>
<li>Added dynamic low-pass filter for SB16/AWE32 DSP playback</li>
<li>Can select external video card on some systems with built-in video</li>
<li>Can use IDE hard drives up to 127 GB</li>
<li>Can now use 7 SCSI devices</li>
<li>Implemented CMPXCHG8B on Winchip. Can now boot Windows XP on Winchip processors</li>
<li>CD-ROM emulation on OS X</li>
<li>Tweaks to Pentium and 6x86 timing</li>
<li>Numerous bug fixes</li>
</ul>
<h1 id="pcem-v13.1">PCem v13.1</h1>
<ul>
<li>Minor recompiler tweak, fixed slowdown in some situations (mainly seen on Windows 9x just after booting)</li>
<li>Fixed issues with PCJr/Tandy sound on some Sierra games</li>
<li>Fixed plasma display on Toshiba 3100e</li>
<li>Fixed handling of configurations with full stops in the name</li>
<li>Fixed sound output gain when using OpenAL Soft</li>
<li>Switched to using OpenAL Soft by default</li>
</ul>
<h1 id="pcem-v13">PCem v13</h1>
<ul>
<li>New machines added - Atari PC3, Epson PC AX, Epson PC AX2e, GW-286CT GEAR, IBM PS/2 Model 30-286, IBM PS/2 Model 50, IBM PS/2 Model 55SX, IBM PS/2 Model 80, IBM XT Model 286, KMX-C-02, Samsung SPC-4200P, Samsung SPC-4216P, Toshiba 3100e</li>
<li>New graphics cards - ATI Video Xpression, MDSI Genius</li>
<li>New sound cards added - Disney Sound Source, Ensoniq AudioPCI (ES1371), LPT DAC, Sound Blaster PCI 128</li>
<li>New hard drive controllers added - AT Fixed Disk Adapter, DTC 5150X, Fixed Disk Adapter (Xebec), IBM ESDI Fixed Disk Controller, Western Digital WD1007V-SE1</li>
<li>New SCSI adapters added - Adaptec AHA-1542C, BusLogic BT-545S, Longshine LCS-6821N, Rancho RT1000B, Trantor T130B</li>
<li>New network adapters added - NE2000 compatible</li>
<li>New cross-platform GUI</li>
<li>Voodoo SLI emulation</li>
<li>Improvements to Sound Blaster emulation</li>
<li>Improvements to Pentium timing</li>
<li>Various bug fixes</li>
<li>Minor optimisations</li>
</ul>
<h1 id="pcem-v12">PCem v12</h1>
<ul>
<li>New machines added - AMI 386DX, MR 386DX</li>
<li>New graphics cards - Plantronics ColorPlus, Wyse WY-700, Obsidian SB50, Voodoo 2</li>
<li>CPU optimisations - up to 50% speedup seen</li>
<li>3DFX optimisations</li>
<li>Improved joystick emulation - analogue joystick up to 8 buttons, CH Flightstick Pro, ThrustMaster FCS, SideWinder pad(s)</li>
<li>Mouse can be selected between serial, PS/2, and IntelliMouse</li>
<li>Basic 286/386 prefetch emulation - 286 &amp; 386 performance much closer to real systems</li>
<li>Improved CGA/PCjr/Tandy composite emulation</li>
<li>Various bug fixes</li>
</ul>
<h1 id="pcem-v11">PCem v11</h1>
<ul>
<li>New machines added - Tandy 1000HX, Tandy 1000SL/2, Award 286 clone, IBM PS/1 model 2121</li>
<li>New graphics card - Hercules InColor</li>
<li>3DFX recompiler - 2-4x speedup over previous emulation</li>
<li>Added Cyrix 6x86 emulation</li>
<li>Some optimisations to dynamic recompiler - typically around 10-15% improvement over v10, more when MMX used</li>
<li>Fixed broken 8088/8086 timing</li>
<li>Fixes to Mach64 and ViRGE 2D blitters</li>
<li>XT machines can now have less than 640kb RAM</li>
<li>Added IBM PS/1 audio card emulation</li>
<li>Added Adlib Gold surround module emulation</li>
<li>Fixes to PCjr/Tandy PSG emulation</li>
<li>GUS now in stereo</li>
<li>Numerous FDC changes - more drive types, FIFO emulation, better support of XDF images, better FDI support</li>
<li>CD-ROM changes - CD-ROM IDE channel now configurable, improved disc change handling, better volume control support</li>
<li>Now directly supports .ISO format for CD-ROM emulation</li>
<li>Fixed crash when using Direct3D output on Intel HD graphics</li>
<li>Various other fixes</li>
</ul>
<h1 id="pcem-v10.1">PCem v10.1</h1>
<ul>
<li>Fixed buffer overruns in PIIX and ET4000/W32p emulation</li>
<li>Add command line options to start in fullscreen and to specify config file</li>
<li>Emulator doesnt die when the CPU jumps to an unexecutable address</li>
<li>Removed Voodoo memory dump on exit</li>
</ul>
<h1 id="pcem-v10">PCem v10</h1>
<ul>
<li>New machines - AMI XT clone, VTech Laser Turbo XT, VTech Laser XT3, Phoenix XT clone, Juko XT clone, IBM PS/1 model 2011, Compaq Deskpro 386, DTK 386SX clone, Phoenix 386 clone, Intel Premiere/PCI, Intel Advanced/EV</li>
<li>New graphics cards - IBM VGA, 3DFX Voodoo Graphics</li>
<li>Experimental dynamic recompiler - up to 3x speedup</li>
<li>Pentium and Pentium MMX emulation</li>
<li>CPU fixes - fixed issues in Unreal, Half-Life, Final Fantasy VII, Little Big Adventure 2, Windows 9x setup, Coherent, BeOS and others</li>
<li>Improved FDC emulation - more accurate, supports FDI images, supports 1.2MB 5.25" floppy drive emulation, supports write protect correctly</li>
<li>Internal timer improvements, fixes sound in some games (eg Lion King)</li>
<li>Added support for up to 4 IDE hard drives</li>
<li>MIDI OUT code now handles sysex commands correctly</li>
<li>CD-ROM code now no longer crashes Windows 9x when CD-ROM drive empty</li>
<li>Fixes to ViRGE, S3 Vision series, ATI Mach64 and OAK OTI-067 cards</li>
<li>Various other fixes/changes</li>
</ul>
<h1 id="pcem-v9">PCem v9</h1>
<ul>
<li>New machines - IBM PCjr</li>
<li>New graphics cards - Diamond Stealth 3D 2000 (S3 ViRGE/325), S3 ViRGE/DX</li>
<li>New sound cards - Innovation SSI-2001 (using ReSID-FP)</li>
<li>CPU fixes - Windows NT now works, OS/2 2.0+ works better</li>
<li>Fixed issue with port 3DA when in blanking, DOS 6.2/V now works</li>
<li>Re-written PIT emulation</li>
<li>IRQs 8-15 now handled correctly, Civilization no longer hangs</li>
<li>Fixed vertical axis on Amstrad mouse</li>
<li>Serial fixes - fixes mouse issues on Win 3.x and OS/2</li>
<li>New Windows keyboard code - should work better with international keyboards</li>
<li>Changes to keyboard emulation - should fix stuck keys</li>
<li>Some CD-ROM fixes</li>
<li>Joystick emulation</li>
<li>Preliminary Linux port</li>
</ul>
<h1 id="pcem-v8.1">PCem v8.1</h1>
<ul>
<li>This fixes a number of issues in v8.</li>
</ul>
<h1 id="pcem-v8">PCem v8</h1>
<ul>
<li>New machines - SiS496/497, 430VX</li>
<li>WinChip emulation (including MMX emulation)</li>
<li>New graphics cards - S3 Trio64, Trident TGUI9440AGi, ATI VGA Edge-16, ATI VGA Charger, OAK OTI-067, ATI Mach64</li>
<li>New sound cards - Adlib Gold, Windows Sound System, SB AWE32</li>
<li>Improved GUS emulation</li>
<li>MPU-401 emulation (UART mode only) on SB16 and AWE32</li>
<li>Fixed DMA bug, floppy drives work properly in Windows 3.x</li>
<li>Fixed bug in FXAM - fixes Wolf 3D, Dogz, some other stuff as well</li>
<li>Other FPU fixes</li>
<li>Fixed serial bugs, mouse no longer disappears in Windows 9x hardware detection</li>
<li>Major reorganisation of CPU emulation</li>
<li>Direct3D output mode</li>
<li>Fullscreen mode</li>
<li>Various internal changes</li>
</ul>
<h1 id="pcem-v0.7">PCem v0.7</h1>
<ul>
<li>Windows 98 now works, Win95 more stable, more machines + graphics cards, and a huge number of fixes.</li>
</ul>
<h1 id="pcem-v0.6">PCem v0.6</h1>
<ul>
<li>Windows 95 now works, FPU emulation, and load of other stuff.</li>
</ul>
<h1 id="pcem-v0.5">PCem v0.5</h1>
<ul>
<li>Loads of fixes + new features in this version.</li>
</ul>
<h1 id="pcem-v0.41a">PCem v0.41a</h1>
<ul>
<li>This fixes a disc corruption bug, and re-adds (poor) composite colour emulation.</li>
</ul>
<h1 id="pcem-v0.41">PCem v0.41</h1>
<ul>
<li>This fixes some embarassing bugs in v0.4, as well as a few games.</li>
</ul>
<h1 id="pcem-v0.4">PCem v0.4</h1>
<ul>
<li>386/486 emulation (buggy), GUS emulation, accurate 8088/8086 timings, and lots of other changes.</li>
</ul>
<h1 id="pcem-v0.3">PCem v0.3</h1>
<ul>
<li>This adds more machines, SB Pro emulation, SVGA emulation, and some other stuff.</li>
</ul>
<h1 id="pcem-v0.2a">PCem v0.2a</h1>
<ul>
<li>This is a bugfix release over v0.2.</li>
</ul>
<h1 id="pcem-v0.2">PCem v0.2</h1>
<ul>
<li>This adds PC1640 and AT emulation, 286 emulation, EGA/VGA emulation, Soundblaster emulation, hard disc emulation, and some bugfixes.</li>
</ul>
<h1 id="pcem-v0.1">PCem v0.1</h1>
<ul>
<li>First Release</li>
</ul>

35
cmake/debugdefines.cmake Normal file
View File

@@ -0,0 +1,35 @@
set(PCEM_DEFINES ${PCEM_DEFINES} PLUGIN_DIR="${CMAKE_INSTALL_PREFIX}/${PCEM_PLUGIN_DIR}")
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG)
if(PCEM_SLIRP_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} SLIRP_DEBUG)
endif()
if(PCEM_RECOMPILER_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} RECOMPILER_DEBUG)
endif()
if(PCEM_NE2000_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG)
endif()
if(PCEM_EMU8K_DEBUG_REGISTERS)
set(PCEM_DEFINES ${PCEM_DEFINES} EMU8K_DEBUG_REGISTERS)
endif()
if(PCEM_SB_DSP_RECORD_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} SB_DSP_RECORD_DEBUG)
endif()
if(PCEM_MACH64_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} MACH64_DEBUG)
endif()
if(PCEM_NE2000_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG)
endif()
if(PCEM_DEBUG_EXTRA)
set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG_EXTRA)
endif()
if(PCEM_PRINTER_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} PRINTER_DEBUG)
endif()
else()
set(PCEM_DEFINES ${PCEM_DEFINES} RELEASE_BUILD)
endif()

108
cmake/install.cmake Normal file
View File

@@ -0,0 +1,108 @@
install(TARGETS pcem RUNTIME DESTINATION ${PCEM_BIN_DIR})
install(DIRECTORY ${CMAKE_SOURCE_DIR}/nvr/ DESTINATION ${PCEM_SHARE_DIR}/nvr/default)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/430vx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/acer386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami386dx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami486)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/amixt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ataripc3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/bull_micral_45)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cbm_pc10)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cbm_sl386sx25)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cmdpc30)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/compaq_pii)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/compaq_pip)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dells200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/deskpro)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/deskpro386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dtk)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dtk386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ecs386_32)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/endeavor)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax2e)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/europc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/fic_va503p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ga686bx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gd5430)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gdc212m)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/genxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gw286ct)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/hot-433)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/huyndaixt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/huyndaixte)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8550021)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8555081)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8580111)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmat)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmpc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmpcjr)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1_2121)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1_2133)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1es)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps2_m30_286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps2_m70_type3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmxt286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/infowaym)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/jukopc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/kmxc02)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/leadingedge_modelm)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ltxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/lxt3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/mach64gx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/megapc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/mr386dx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ncr_pc4i)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/olivetti_m24)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/oti067)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55t2p4)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55tvp4)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55va)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb410a)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb520r)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb570)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb_l300sx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc1512)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc1640)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc2086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc3086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc5086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ppc512)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/px386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pxxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/revenge)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/sis496)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4200p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4216p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4620p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc6000a)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc6033p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/super286tr)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t1000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t1200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t3100e)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy1000hx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy1000sl2)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/to16_pc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tulip_tc7)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tvga9000b)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/voodoo3_2000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/voodoo3_3000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/vs440fx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/win486)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/xi8088)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/zappa)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/zdsupers)
install(FILES ${CMAKE_SOURCE_DIR}/docs/configs.txt DESTINATION ${PCEM_SHARE_DIR}/configs)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
install(FILES ${CMAKE_SOURCE_DIR}/docs/pcem.man.1 DESTINATION share/man/man1/pcem.man)
endif()
install(DIRECTORY ${CMAKE_SOURCE_DIR}/includes/public/ DESTINATION ${PCEM_INCLUDE_DIR} FILES_MATCHING PATTERN *.h)

View File

@@ -13,4 +13,4 @@ set(EPSON_LX810_SRC
add_library(printer_epsonlx810 SHARED ${EPSON_LX810_SRC} ${EPSON_LX810_HEADER})
target_link_libraries(printer_epsonlx810 ${PCEM_LIBRARIES} Freetype::Freetype)
set_target_properties(printer_epsonlx810 PROPERTIES SUFFIX ".pcem")
set_target_properties(printer_epsonlx810 PROPERTIES SUFFIX ".pplg")

View File

@@ -93,7 +93,6 @@
#include "lpt_epsonlx810.h"
#include <pcem/devices.h>
#include <pcem/unsafe/devices.h>
#include <pcem/unsafe/config.h>
#include <pcem/logging.h>
#include <SDL.h>

View File

@@ -1,5 +1,5 @@
#include <pcem/plugin.h>
#include <pcem/unsafe/config.h>
#include <pcem/config.h>
#include <string.h>
#include "lpt_epsonlx810.h"

View File

@@ -1,25 +1,3 @@
set(PCEM_PRIVATE_API ${PCEM_PRIVATE_API}
${CMAKE_SOURCE_DIR}/includes/private/bswap.h
${CMAKE_SOURCE_DIR}/includes/private/fdi2raw.h
${CMAKE_SOURCE_DIR}/includes/private/filters.h
${CMAKE_SOURCE_DIR}/includes/private/ibm.h
${CMAKE_SOURCE_DIR}/includes/private/io.h
${CMAKE_SOURCE_DIR}/includes/private/pch.h
${CMAKE_SOURCE_DIR}/includes/private/pgc_palettes.h
${CMAKE_SOURCE_DIR}/includes/private/plat-dinput.h
${CMAKE_SOURCE_DIR}/includes/private/plat-joystick.h
${CMAKE_SOURCE_DIR}/includes/private/plat-keyboard.h
${CMAKE_SOURCE_DIR}/includes/private/plat-midi.h
${CMAKE_SOURCE_DIR}/includes/private/plat-mouse.h
${CMAKE_SOURCE_DIR}/includes/private/pzx.h
${CMAKE_SOURCE_DIR}/includes/private/resources.h
${CMAKE_SOURCE_DIR}/includes/private/rtc.h
${CMAKE_SOURCE_DIR}/includes/private/rtc_tc8521.h
${CMAKE_SOURCE_DIR}/includes/private/scamp.h
${CMAKE_SOURCE_DIR}/includes/private/thread.h
${CMAKE_SOURCE_DIR}/includes/private/timer.h
)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/includes/private)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/includes/private/bus)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/includes/private/cdrom)

View File

@@ -1,6 +1,28 @@
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <pcem/unsafe/config.h>
#include <pcem/config.h>
extern char *get_filename(char *s);
extern void append_filename(char *dest, char *s1, char *s2, int size);
extern void append_slash(char *s, int size);
extern void put_backslash(char *s);
extern char *get_extension(char *s);
extern void config_load(int is_global, char *fn);
extern void config_save(int is_global, char *fn);
extern void config_dump(int is_global);
extern void config_free(int is_global);
extern char config_file_default[256];
extern char config_name[256];
typedef struct config_callback_t {
void (*loadconfig)();
void (*saveconfig)();
void (*onloaded)();
} config_callback_t;
extern config_callback_t config_callbacks[CALLBACK_MAX];
extern int num_config_callbacks;
#endif /* _CONFIG_H_ */

View File

@@ -2,7 +2,16 @@
#define _DEVICE_H_
#include <pcem/devices.h>
#include <pcem/unsafe/devices.h>
extern device_t *current_device;
extern char *current_device_name;
extern int model;
int device_get_config_int(char *name);
char *device_get_config_string(char *s);
int model_get_config_int(char *s);
char *model_get_config_string(char *s);
device_t *model_getdevice(int model);
void device_init();
void device_add(device_t *d);

View File

@@ -7,11 +7,8 @@ extern char nvr_path[512];
extern char logs_path[512];
extern char screenshots_path[512];
extern char nvr_default_path[512];
extern char plugins_default_path[512];
extern char base_path[512];
void get_pcem_path(char *s, int size);
void get_pcem_base_path(char *s, int size);
char get_path_separator();
void paths_init();
int dir_exists(char* path);
@@ -32,6 +29,7 @@ void set_nvr_path(char *s);
void set_logs_path(char *s);
void set_configs_path(char *s);
void set_screenshots_path(char *s);
void set_plugins_path(char *s);
#define safe_strncpy(a, b, n) do { strncpy((a),(b),(n)-1); (a)[(n)-1] = 0; } while (0)
#endif /* _PATHS_H_ */

View File

@@ -3,40 +3,16 @@
#include <pcem/defines.h>
#define CFG_MACHINE 0
#define CFG_GLOBAL 1
extern float config_get_float(int is_global, char *head, char *name, float def);
extern int config_get_int(int is_global, char *head, char *name, int def);
extern char *config_get_string(int is_global, char *head, char *name, char *def);
extern void config_set_float(int is_global, char *head, char *name, float val);
extern void config_set_int(int is_global, char *head, char *name, int val);
extern void config_set_string(int is_global, char *head, char *name, char *val);
extern int config_free_section(int is_global, char *head);
extern void add_config_callback(void(*loadconfig)(), void(*saveconfig)(), void(*onloaded)());
extern char *get_filename(char *s);
extern void append_filename(char *dest, char *s1, char *s2, int size);
extern void append_slash(char *s, int size);
extern void put_backslash(char *s);
extern char *get_extension(char *s);
extern void config_load(int is_global, char *fn);
extern void config_save(int is_global, char *fn);
extern void config_dump(int is_global);
extern void config_free(int is_global);
extern char config_file_default[256];
extern char config_name[256];
typedef struct config_callback_t {
void (*loadconfig)();
void (*saveconfig)();
void (*onloaded)();
} config_callback_t;
extern config_callback_t config_callbacks[CALLBACK_MAX];
extern int num_config_callbacks;
#define CFG_MACHINE 0
#define CFG_GLOBAL 1
#endif /* _PCEM_CONFIG_H_ */
#endif /* _PCEM_CONFIG_H_ */

View File

@@ -123,4 +123,10 @@ extern void pcem_add_hddcontroller(HDD_CONTROLLER *hddcontroller);
extern void pcem_add_networkcard(NETWORK_CARD *netcard);
extern void pcem_add_device(device_t *device);
extern int pcem_device_get_config_int(device_t *device, char *name);
extern char *pcem_device_get_config_string(device_t *device, char *s);
extern int pcem_model_get_config_int(device_t *device, char *s);
extern char *pcem_model_get_config_string(device_t *device, char *s);
extern device_t *pcem_model_getdevice(int model);
#endif /* _PCEM_DEVICES_H_ */

View File

@@ -1,16 +0,0 @@
#ifndef _UNSAFE_DEVICES_H_
#define _UNSAFE_DEVICES_H_
#include <pcem/devices.h>
extern device_t *current_device;
extern char *current_device_name;
extern int model;
extern int device_get_config_int(char *name);
extern char *device_get_config_string(char *s);
extern int model_get_config_int(char *s);
extern char *model_get_config_string(char *s);
extern device_t *model_getdevice(int model);
#endif /* _UNSAFE_DEVICES_H_ */

File diff suppressed because it is too large Load Diff

View File

@@ -1,42 +1,24 @@
set(PCEM_DEFINES ${PCEM_DEFINES} INST_PREFIX="${CMAKE_INSTALL_PREFIX}")
if(PLUGIN_ENGINE)
set(PCEM_DEFINES ${PCEM_DEFINES} PLUGIN_ENGINE)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG)
if(PCEM_SLIRP_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} SLIRP_DEBUG)
endif()
if(PCEM_RECOMPILER_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} RECOMPILER_DEBUG)
endif()
if(PCEM_NE2000_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG)
endif()
if(PCEM_EMU8K_DEBUG_REGISTERS)
set(PCEM_DEFINES ${PCEM_DEFINES} EMU8K_DEBUG_REGISTERS)
endif()
if(PCEM_SB_DSP_RECORD_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} SB_DSP_RECORD_DEBUG)
endif()
if(PCEM_MACH64_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} MACH64_DEBUG)
endif()
if(PCEM_NE2000_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} NE2000_DEBUG)
endif()
if(PCEM_DEBUG_EXTRA)
set(PCEM_DEFINES ${PCEM_DEFINES} DEBUG_EXTRA)
endif()
if(PCEM_PRINTER_DEBUG)
set(PCEM_DEFINES ${PCEM_DEFINES} PRINTER_DEBUG)
endif()
else()
set(PCEM_DEFINES ${PCEM_DEFINES} RELEASE_BUILD)
endif()
set(PCEM_PRIVATE_API ${PCEM_PRIVATE_API}
${CMAKE_SOURCE_DIR}/includes/private/bswap.h
${CMAKE_SOURCE_DIR}/includes/private/fdi2raw.h
${CMAKE_SOURCE_DIR}/includes/private/filters.h
${CMAKE_SOURCE_DIR}/includes/private/ibm.h
${CMAKE_SOURCE_DIR}/includes/private/io.h
${CMAKE_SOURCE_DIR}/includes/private/pch.h
${CMAKE_SOURCE_DIR}/includes/private/pgc_palettes.h
${CMAKE_SOURCE_DIR}/includes/private/plat-dinput.h
${CMAKE_SOURCE_DIR}/includes/private/plat-joystick.h
${CMAKE_SOURCE_DIR}/includes/private/plat-keyboard.h
${CMAKE_SOURCE_DIR}/includes/private/plat-midi.h
${CMAKE_SOURCE_DIR}/includes/private/plat-mouse.h
${CMAKE_SOURCE_DIR}/includes/private/pzx.h
${CMAKE_SOURCE_DIR}/includes/private/resources.h
${CMAKE_SOURCE_DIR}/includes/private/rtc.h
${CMAKE_SOURCE_DIR}/includes/private/rtc_tc8521.h
${CMAKE_SOURCE_DIR}/includes/private/scamp.h
${CMAKE_SOURCE_DIR}/includes/private/thread.h
${CMAKE_SOURCE_DIR}/includes/private/timer.h
)
include(${CMAKE_CURRENT_SOURCE_DIR}/bus/bus.cmake)
include(${CMAKE_CURRENT_SOURCE_DIR}/cdrom/cdrom.cmake)
@@ -80,125 +62,7 @@ set(PCEM_LIBRARIES ${wxWidgets_LIBRARIES} ${SDL2_LIBRARIES} ${OPENAL_LIBRARY} ${
include(${CMAKE_CURRENT_SOURCE_DIR}/plugin-api/plugin-api.cmake)
if(PLUGIN_ENGINE)
add_library(pcem-plugin-api SHARED ${PCEM_SRC_PLUGINAPI} ${PCEM_PUBLIC_API})
target_link_libraries(pcem-plugin-api ${PCEM_LIBRARIES})
target_compile_definitions(pcem-plugin-api PUBLIC ${PCEM_DEFINES})
install(TARGETS pcem-plugin-api RUNTIME DESTINATION ${PCEM_BIN_DIR} LIBRARY DESTINATION ${PCEM_LIB_DIR} ARCHIVE DESTINATION ${PCEM_LIB_DIR})
set(PCEM_LIBRARIES ${PCEM_LIBRARIES} pcem-plugin-api)
else()
set(PCEM_EMBEDDED_PLUGIN_API ${PCEM_SRC_PLUGINAPI} ${PCEM_PUBLIC_API})
endif()
add_executable(pcem ${PCEM_SRC} ${PCEM_PRIVATE_API} ${PCEM_EMBEDDED_PLUGIN_API})
target_compile_definitions(pcem PUBLIC ${PCEM_DEFINES})
target_compile_options(pcem PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-fcommon> $<$<COMPILE_LANGUAGE:C>:-fcommon>)
target_link_libraries(pcem ${PCEM_LIBRARIES})
install(TARGETS pcem RUNTIME DESTINATION ${PCEM_BIN_DIR})
install(DIRECTORY ${CMAKE_SOURCE_DIR}/nvr/ DESTINATION ${PCEM_SHARE_DIR}/nvr/default)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/430vx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/acer386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami386dx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ami486)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/amixt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ataripc3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/bull_micral_45)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cbm_pc10)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cbm_sl386sx25)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/cmdpc30)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/compaq_pii)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/compaq_pip)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dells200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/deskpro)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/deskpro386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dtk)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/dtk386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ecs386_32)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/endeavor)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax2e)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/epson_pcax3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/europc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/fic_va503p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ga686bx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gd5430)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gdc212m)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/genxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/gw286ct)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/hot-433)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/huyndaixt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/huyndaixte)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8550021)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8555081)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/i8580111)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmat)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmpc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmpcjr)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1_2121)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1_2133)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps1es)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps2_m30_286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmps2_m70_type3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ibmxt286)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/infowaym)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/jukopc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/kmxc02)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/leadingedge_modelm)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ltxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/lxt3)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/mach64gx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/megapc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/mr386dx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ncr_pc4i)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/olivetti_m24)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/oti067)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55t2p4)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55tvp4)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/p55va)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb410a)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb520r)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb570)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pb_l300sx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc1512)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc1640)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc2086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc3086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pc5086)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/ppc512)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/px386)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/pxxt)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/revenge)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/sis496)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4200p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4216p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc4620p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc6000a)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/spc6033p)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/super286tr)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t1000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t1200)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/t3100e)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy1000hx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tandy1000sl2)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/to16_pc)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tulip_tc7)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/tvga9000b)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/voodoo3_2000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/voodoo3_3000)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/vs440fx)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/win486)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/xi8088)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/zappa)
install(FILES ${CMAKE_SOURCE_DIR}/docs/roms.txt DESTINATION ${PCEM_SHARE_DIR}/roms/zdsupers)
install(FILES ${CMAKE_SOURCE_DIR}/docs/configs.txt DESTINATION ${PCEM_SHARE_DIR}/configs)
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
install(FILES ${CMAKE_SOURCE_DIR}/docs/pcem.man.1 DESTINATION share/man/man1/pcem.man)
endif()
install(DIRECTORY ${CMAKE_SOURCE_DIR}/includes/public/ DESTINATION ${PCEM_INCLUDE_DIR} FILES_MATCHING PATTERN *.h)

View File

@@ -63,6 +63,7 @@
#ifdef USE_NETWORKING
#include "nethandler.h"
#include "plugin.h"
#define NE2000 1
uint8_t ethif;
int inum;
@@ -238,6 +239,9 @@ void initpc(int argc, char *argv[]) {
loadconfig(NULL);
pclog("Config loaded\n");
load_plugins();
// if (config_file)
// saveconfig();

View File

@@ -461,4 +461,4 @@ void add_config_callback(void(*loadconfig)(), void(*saveconfig)(), void(*onloade
config_callbacks[num_config_callbacks].saveconfig = saveconfig;
config_callbacks[num_config_callbacks].onloaded = onloaded;
num_config_callbacks++;
}
}

View File

@@ -2,7 +2,7 @@
#include <pcem/devices.h>
#include <pcem/logging.h>
#include <string.h>
#include <pcem/unsafe/config.h>
#include <pcem/config.h>
extern void *device_priv[256];
extern device_t *devices[DEV_MAX];
@@ -157,6 +157,64 @@ char *model_get_config_string(char *s) {
return NULL;
}
int pcem_device_get_config_int(device_t *device, char *s) {
device_config_t *config = device->config;
while (config->type != -1) {
if (!strcmp(s, config->name))
return config_get_int(CFG_MACHINE, device->name, s, config->default_int);
config++;
}
return 0;
}
char *pcem_device_get_config_string(device_t *device, char *s) {
device_config_t *config = device->config;
while (config->type != -1) {
if (!strcmp(s, config->name))
return config_get_string(CFG_MACHINE, device->name, s, config->default_string);
config++;
}
return NULL;
}
int pcem_model_get_config_int(device_t *device, char *s) {
device_config_t *config;
if (!device)
return 0;
config = device->config;
while (config->type != -1) {
if (!strcmp(s, config->name))
return config_get_int(CFG_MACHINE, device->name, s, config->default_int);
config++;
}
return 0;
}
char *pcem_model_get_config_string(device_t *device, char *s) {
device_config_t *config;
if (!device)
return 0;
config = device->config;
while (config->type != -1) {
if (!strcmp(s, config->name))
return config_get_string(CFG_MACHINE, device->name, s, config->default_string);
config++;
}
return NULL;
}
int model_count() {
int ret = 0;

View File

@@ -6,8 +6,6 @@
#include "ibm.h"
#include "wx-utils.h"
#define safe_strncpy(a, b, n) do { strncpy((a),(b),(n)-1); (a)[(n)-1] = 0; } while (0)
char default_roms_paths[4096];
char default_nvr_path[512];
char default_configs_path[512];
@@ -31,7 +29,6 @@ char screenshots_path[512];
char plugins_default_path[512];
char nvr_default_path[512];
char base_path[512];
char get_path_separator() {
#ifdef _WIN32
@@ -114,11 +111,6 @@ void set_screenshots_path(char *s) {
append_slash(screenshots_path, 512);
}
void set_plugins_path(char *s) {
safe_strncpy(plugins_default_path, s, 512);
append_slash(plugins_default_path, 512);
}
/* set the default roms paths, this makes them permanent */
void set_default_roms_paths(char *s) {
safe_strncpy(default_roms_paths, s, 4096);
@@ -211,31 +203,20 @@ void paths_init() {
*p = 0;
/* set up default paths for this session */
get_pcem_base_path(base_path, 512);
append_filename(s, base_path, "roms/", 512);
append_filename(s, pcem_path, "roms/", 512);
set_roms_paths(s);
append_filename(s, base_path, "nvr/", 512);
append_filename(s, pcem_path, "nvr/", 512);
set_nvr_path(s);
append_filename(s, base_path, "configs/", 512);
append_filename(s, pcem_path, "configs/", 512);
set_configs_path(s);
append_filename(s, base_path, "screenshots/", 512);
append_filename(s, pcem_path, "screenshots/", 512);
set_screenshots_path(s);
append_filename(s, base_path, "logs/", 512);
append_filename(s, pcem_path, "logs/", 512);
set_logs_path(s);
append_filename(s, base_path, "nvr/default/", 512);
append_filename(s, pcem_path, "nvr/default/", 512);
set_default_nvr_default_path(s);
append_filename(s, base_path, "plugins/", 512);
set_plugins_path(s);
add_config_callback(paths_loadconfig, paths_saveconfig, paths_onconfigloaded);
}
void get_pcem_base_path(char *s, int size) {
char *path = SDL_GetBasePath();
strcpy(s, path);
}
void get_pcem_path(char *s, int size) {

View File

@@ -1,3 +1,7 @@
if(PLUGIN_ENGINE)
set(PCEM_DEFINES ${PCEM_DEFINES} PLUGIN_ENGINE)
endif()
set(PCEM_PRIVATE_API ${PCEM_PRIVATE_API}
${CMAKE_SOURCE_DIR}/includes/private/plugin-api/config.h
${CMAKE_SOURCE_DIR}/includes/private/plugin-api/paths.h
@@ -12,8 +16,7 @@ set(PCEM_PUBLIC_API ${PCEM_PUBLIC_API}
${CMAKE_SOURCE_DIR}/includes/public/pcem/devices.h
${CMAKE_SOURCE_DIR}/includes/public/pcem/logging.h
${CMAKE_SOURCE_DIR}/includes/public/pcem/plugin.h
${CMAKE_SOURCE_DIR}/includes/public/pcem/unsafe/config.h
${CMAKE_SOURCE_DIR}/includes/public/pcem/unsafe/devices.h
${CMAKE_SOURCE_DIR}/includes/public/pcem/config.h
)
set(PCEM_SRC_PLUGINAPI
@@ -24,4 +27,14 @@ set(PCEM_SRC_PLUGINAPI
plugin-api/device.c
plugin-api/plugin.c
plugin-api/wx-utils.cc
)
)
if(PLUGIN_ENGINE)
add_library(pcem-plugin-api SHARED ${PCEM_SRC_PLUGINAPI} ${PCEM_PUBLIC_API})
target_link_libraries(pcem-plugin-api ${PCEM_LIBRARIES})
target_compile_definitions(pcem-plugin-api PUBLIC ${PCEM_DEFINES})
install(TARGETS pcem-plugin-api RUNTIME DESTINATION ${PCEM_BIN_DIR} LIBRARY DESTINATION ${PCEM_LIB_DIR} ARCHIVE DESTINATION ${PCEM_LIB_DIR})
set(PCEM_LIBRARIES ${PCEM_LIBRARIES} pcem-plugin-api)
else()
set(PCEM_EMBEDDED_PLUGIN_API ${PCEM_SRC_PLUGINAPI} ${PCEM_PUBLIC_API})
endif()

View File

@@ -9,6 +9,7 @@
#include "plugin.h"
#include "tinydir.h"
#include "paths.h"
#include "config.h"
#include <pcem/logging.h>
@@ -19,6 +20,35 @@ extern HDD_CONTROLLER *hdd_controllers[HDDCONTROLLERS_MAX];
extern NETWORK_CARD *network_cards[NETWORK_CARD_MAX];
extern LPT_DEVICE *lpt_devices[LPT_MAX];
char plugin_path[512];
#ifdef PLUGIN_ENGINE
void set_plugin_path(char *s) {
safe_strncpy(plugin_path, s, 512);
set_screenshots_path(s);
}
void pluginengine_load_config()
{
char* cfg_plugin_path = config_get_string(CFG_GLOBAL, "Paths", "plugin_path", 0);
if (cfg_plugin_path)
set_plugin_path(cfg_plugin_path);
}
void pluginengine_save_config()
{
config_set_string(CFG_GLOBAL, "Paths", "plugin_path", plugin_path);
}
void pluginengine_init_config()
{
char s[512];
append_filename(s, pcem_path, "plugins/", 512);
set_plugin_path(s);
}
#endif
void init_plugin_engine() {
memset(models, 0, sizeof(models));
memset(video_cards, 0, sizeof(video_cards));
@@ -26,24 +56,22 @@ void init_plugin_engine() {
memset(sound_cards, 0, sizeof(sound_cards));
memset(hdd_controllers, 0, sizeof(hdd_controllers));
memset(network_cards, 0, sizeof(network_cards));
#ifdef PLUGIN_ENGINE
add_config_callback(pluginengine_load_config, pluginengine_save_config, pluginengine_init_config);
#endif
}
void load_plugins() {
#ifdef PLUGIN_ENGINE
tinydir_dir dir;
tinydir_open(&dir, plugins_default_path);
tinydir_open(&dir, plugin_path);
while (dir.has_next)
{
while (dir.has_next) {
tinydir_file file;
tinydir_readfile(&dir, &file);
#if defined(linux)
if (!strcmp(file.extension, "so"))
#elif defined(WIN32)
if (!strcmp(file.extension, "dll"))
#endif
{
if (!strcmp(file.extension, "pplg")) {
pclog("plugin loading: %s\n", file.name);
void (* initialize_loaded_plugin)();
#if defined(linux)
@@ -51,40 +79,28 @@ void load_plugins() {
char *plugin_name;
handle = dlopen(file.path, RTLD_NOW);
if (!handle)
{
if (!handle) {
error("Error: %s\n", dlerror());
}
else
{
} else {
*(void**)(&initialize_loaded_plugin) = dlsym(handle, "init_plugin");
if (!initialize_loaded_plugin)
{
if (!initialize_loaded_plugin) {
error("Error: %s\n", dlerror());
dlclose(handle);
}
else
{
} else {
initialize_loaded_plugin();
}
}
#elif defined(WIN32)
HMODULE handle = LoadLibrary(file.path);
if(!handle)
{
if(!handle) {
error("Cannot load DLL: %s", file.path);
}
else
{
} else {
*(void**)(&initialize_loaded_plugin) = GetProcAddress(handle, "init_plugin");
if(!initialize_loaded_plugin)
{
if(!initialize_loaded_plugin) {
error("Cannot load init_plugin function from: %s", file.path);
}
else
{
} else {
initialize_loaded_plugin();
}
}
@@ -97,4 +113,4 @@ void load_plugins() {
tinydir_close(&dir);
#endif
}
}

View File

@@ -471,34 +471,9 @@ int pc_main(int argc, char **argv) {
network_card_init_builtin();
#endif
#ifdef __linux__
char s[1024];
/* create directories if they don't exist */
if (!wx_setup(pcem_path))
return FALSE;
/* set up default paths */
sprintf(s, "%s%s%c%s", pcem_path, "roms/", get_path_separator(), "/usr/share/pcem/roms/");
set_default_roms_paths(s);
append_filename(s, pcem_path, "nvr/", 511);
set_default_nvr_path(s);
append_filename(s, "/usr/share/pcem/", "nvr/default/", 512);
set_default_nvr_default_path(s);
append_filename(s, pcem_path, "configs/", 511);
set_default_configs_path(s);
append_filename(s, pcem_path, "screenshots/", 511);
set_default_screenshots_path(s);
append_filename(s, pcem_path, "logs/", 511);
set_default_logs_path(s);
append_filename(s, pcem_path, "plugins/", 512);
set_plugins_path(s);
#endif
add_config_callback(sdl_loadconfig, sdl_saveconfig, sdl_onconfigloaded);
add_config_callback(wx_loadconfig, wx_saveconfig, 0);
load_plugins();
initpc(argc, argv);
resetpchard();

View File

@@ -1,340 +0,0 @@
<h2 id="software-tested-v17">Software tested (v17):</h2>
<h3 id="dos">DOS</h3>
<ul>
<li>PC-DOS 1.0</li>
<li>MS-DOS 2.11</li>
<li>MS-DOS 3.30</li>
<li>MS-DOS 4.01</li>
<li>MS-DOS 5.0</li>
<li>MS-DOS 6.0</li>
<li>MS-DOS 6.22</li>
</ul>
<h3 id="windows">Windows</h3>
<ul>
<li>Windows 1.04</li>
<li>Windows/286 2.11</li>
<li>Windows/386 2.11</li>
<li>Windows 3.0</li>
<li>Windows 3.1</li>
<li>Windows for Workgroups 3.11</li>
<li>Windows 95</li>
<li>Windows 95 OSR2</li>
<li>Windows 98SE</li>
<li>Windows ME</li>
</ul>
<h3 id="windows-nt">Windows NT</h3>
<ul>
<li>Windows NT 3.1</li>
<li>Windows NT 3.51</li>
<li>Windows NT 4 Workstation (SP6a)</li>
<li>Windows 2000</li>
<li>Windows XP</li>
</ul>
<h3 id="os2">OS/2</h3>
<ul>
<li>OS/2 v1.0</li>
<li>OS/2 v1.1</li>
<li>OS/2 v1.2</li>
<li>OS/2 v1.3</li>
<li>OS/2 v2.1</li>
<li>OS/2 Warp 3</li>
<li>OS/2 Warp 4</li>
</ul>
<h3 id="linux">Linux</h3>
<ul>
<li>Corel Linux 1.2</li>
<li>Mandriva LE 2005</li>
<li>Red Hat Linux 7.1 (Seawolf)</li>
</ul>
<h3 id="beos">BeOS</h3>
<ul>
<li>BeOS 5.0 Professional Edition</li>
</ul>
<h3 id="applications">Applications</h3>
<ul>
<li>3DMark 2000</li>
<li>3DMark 2001SE</li>
<li>After Dark 3.06</li>
<li>Cinemania 1994</li>
<li>Creative Writer</li>
<li>Cubasis</li>
<li>Encarta 1994</li>
<li>Fasttracker v2.08</li>
<li>PageMaker 5.0</li>
<li>PC Paintbrush 1.05</li>
<li>Photoshop 3.0</li>
<li>Smartsuite 97</li>
<li>Visual Basic 3.0</li>
<li>Visual C++ 6.0</li>
<li>Word for Windows 2.0</li>
<li>Winzip 6.2</li>
</ul>
<h3 id="games">Games</h3>
<ul>
<li>1602 AD (demo)</li>
<li>3D Ultra Pinball Thrillride</li>
<li>A-10 Tank Killer</li>
<li>Actua Soccer</li>
<li>Adventure Pinball Forgotten Island (demo)</li>
<li>Aladdin</li>
<li>Alien vs Predator</li>
<li>Alien vs Predator 2 (demo)</li>
<li>All New World of Lemmings</li>
<li>Alone in the Dark</li>
<li>Alone in the Dark : The New Nightmare (demo)</li>
<li>Anachronox</li>
<li>Arkanoid</li>
<li>Armoured Fist 3 (demo)</li>
<li>Asteroids (1998)</li>
<li>B-17 Flying Fortress</li>
<li>Battle Chess</li>
<li>Battlezone</li>
<li>Battlezone II</li>
<li>Bejeweled</li>
<li>Beyond Castle Wolfenstein</li>
<li>Big Red Racing</li>
<li>Bio Menace</li>
<li>Black &amp; White</li>
<li>Brix</li>
<li>Bugs Bunny Lost In Time (demo)</li>
<li>Cannon Fodder 2</li>
<li>Carnivores 2</li>
<li>Civilization</li>
<li>Civilization for Windows</li>
<li>Claw</li>
<li>Clive Barkers Undying (demo)</li>
<li>Clockwiser</li>
<li>Command &amp; Conquer : Red Alert</li>
<li>Command &amp; Conquer : Red Alert 2</li>
<li>Command &amp; Conquer : Tiberian Sun (demo)</li>
<li>Command &amp; Conquer Renegade</li>
<li>Conquest</li>
<li>Corridor 7</li>
<li>Counter-Strike 2D</li>
<li>Crimson Skies (demo)</li>
<li>Croc</li>
<li>Curse of Monkey Island</li>
<li>Cutthroats (demo)</li>
<li>Daikatana</li>
<li>Dawn Patrol</li>
<li>Day of the Tentacle</li>
<li>Dance Dance Revolution</li>
<li>Dead Reckoning (demo)</li>
<li>Death Drome</li>
<li>Desert Strike</li>
<li>Digger</li>
<li>Dirt Track Racing (demo)</li>
<li>Disciples (demo)</li>
<li>Discworld II</li>
<li>Doom (v1.2)</li>
<li>Doom II (v1.666)</li>
<li>Double Dragon</li>
<li>Drakan (demo)</li>
<li>Duke Nukem 3D (v1.3D)</li>
<li>Dune</li>
<li>DX-Ball 2</li>
<li>Echelon</li>
<li>Ecstatica</li>
<li>Epic Pinball</li>
<li>Every Extend</li>
<li>Evolva (demo)</li>
<li>Expendable</li>
<li>Eye of the Beholder</li>
<li>Fallout Tactics (demo)</li>
<li>Final Fantasy VIII (demo)</li>
<li>Flashback</li>
<li>Flight Simulator 5</li>
<li>Frogger</li>
<li>Frontier : First Encounters</li>
<li>Gabriel Knight 3 (demo)</li>
<li>Giants : Citizen Kabuto</li>
<li>GLQuake</li>
<li>Grand Theft Auto 2</li>
<li>Half-Life</li>
<li>Halloween Harry</li>
<li>Heartlight</li>
<li>Hellbender</li>
<li>Hexen</li>
<li>High Heat Baseball 2002 (demo)</li>
<li>Hitch Hikers Guide to the Galaxy</li>
<li>Hocus Pocus</li>
<li>Homeworld Cataclysm (demo)</li>
<li>Incoming</li>
<li>James Pond 2 : Robocod</li>
<li>Jazz Jackrabbit</li>
<li>Jazz Jackrabbit 2</li>
<li>Jill of the Jungle</li>
<li>Kings Quest</li>
<li>Kings Quest II</li>
<li>Kings Quest III</li>
<li>Lemmings</li>
<li>Lemmings 2 : The Tribes</li>
<li>Lode Runner : The Legend Continues</li>
<li>Lotus III</li>
<li>Madden 2002 (demo)</li>
<li>Majesty (demo)</li>
<li>Maniac Mansion (enhanced)</li>
<li>Max Payne</li>
<li>MDK (Direct3D, USA release)</li>
<li>MechCommander 2</li>
<li>Mechwarrior 2</li>
<li>Mechwarrior 3</li>
<li>Megaman Legends</li>
<li>Metal Gear Solid</li>
<li>Microsoft Arcade</li>
<li>Microsoft Golf 99 (demo)</li>
<li>Midtown Madness 2 (demo)</li>
<li>Monaco Grand Prix (demo)</li>
<li>Monkey Island 2</li>
<li>Monster Bash</li>
<li>Monster Truck Madness</li>
<li>Mortal Kombat</li>
<li>Mortal Kombat 2</li>
<li>Mortal Kombat 3</li>
<li>Motorcross Madness (demo)</li>
<li>Mystic Towers</li>
<li>Nascar Heat</li>
<li>Need for Speed II SE</li>
<li>Need for Speed III</li>
<li>Need for Speed : High Stakes</li>
<li>NHL 2001 (demo)</li>
<li>No One Lives Forever</li>
<li>Oddworld : Abes Exoddus</li>
<li>One Must Fall 2097</li>
<li>Oni</li>
<li>Outlaws</li>
<li>Pacific Strike</li>
<li>Pacman Adventures in Time (demo)</li>
<li>Pharoah (demo)</li>
<li>Pinball Fantasies</li>
<li>Pinball Illusions</li>
<li>Police Quest</li>
<li>Police Quest 2</li>
<li>Porrasturvat</li>
<li>Power Drive</li>
<li>Prince of Persia</li>
<li>Prince of Persia 3D (demo)</li>
<li>Pro Pinball : The Web</li>
<li>Psycho Pinball</li>
<li>Quake</li>
<li>Quake II</li>
<li>Quake III Arena</li>
<li>Rayman 2 (demo)</li>
<li>Red Faction</li>
<li>Redline Racer</li>
<li>Rise of the Triad (v1.2)</li>
<li>Screamer</li>
<li>Sega Rally 2 (demo)</li>
<li>Sensible World of Soccer</li>
<li>Settlers 3 (demo)</li>
<li>Severance : Blade of Darkness (demo)</li>
<li>Shadow Company (demo)</li>
<li>Shadow Warrior</li>
<li>Shadowman (demo)</li>
<li>Sid Meiers Alien Crossfire (demo)</li>
<li>SimCity 2000</li>
<li>SimCity Classic</li>
<li>SimTower</li>
<li>Sink or Swim</li>
<li>Soldat (1.0.5)</li>
<li>Sonic CD</li>
<li>Space Simulator</li>
<li>Space Strike</li>
<li>Spider-Man (demo)</li>
<li>Springy Madness</li>
<li>Star Trek Hidden Evil (demo)</li>
<li>Star Trek Voyager Elite Force</li>
<li>Star Wars Jedi Academy</li>
<li>Starfleet Command 2 (demo)</li>
<li>Stargunner</li>
<li>Starlancer (demo)</li>
<li>Steel Beasts (demo)</li>
<li>Stunt Island</li>
<li>SWAT 3 Elite Edition (demo)</li>
<li>Syndicate</li>
<li>System Shock</li>
<li>Tanktics (demo)</li>
<li>Terminal Velocity</li>
<li>The Dig</li>
<li>The Humans</li>
<li>The Labyrinth (RealArcade version)</li>
<li>The Lost Vikings</li>
<li>The Ultimate Doom (v1.9)</li>
<li>Theme Hospital</li>
<li>Theme Park</li>
<li>Tomb Raider</li>
<li>Tomb Raider II</li>
<li>Tomb Raider The Last Revelation (demo)</li>
<li>Tony Hawks Pro Skater 2</li>
<li>Transport Tycoon</li>
<li>Transport Tycoon Deluxe</li>
<li>Tropico (demo)</li>
<li>Turrican 2</li>
<li>UFO : Enemy Unknown</li>
<li>Ultimate Ride (demo)</li>
<li>Unreal</li>
<li>Unreal Tournament</li>
<li>Unreal Tournament 2004 (Direct3D)</li>
<li>Wacky Wheels</li>
<li>Warlords Battlecry (demo)</li>
<li>Wheel of Time (demo)</li>
<li>Wing Commander</li>
<li>Wing Commander : Privateer</li>
<li>Wizkid</li>
<li>Wolfenstein 3D</li>
<li>World War III : Black Gold (demo)</li>
<li>Worms</li>
<li>Worms Armageddon</li>
<li>X-Com : Terror From The Deep</li>
<li>Xargon</li>
<li>Z : Steel Soldiers (demo)</li>
<li>Zak McKracken</li>
<li>Zone 66</li>
</ul>
<h3 id="demos">Demos</h3>
<ul>
<li>Cascada - Cronologia</li>
<li>Coma - Paimen</li>
<li>Complex - Cyboman 2</li>
<li>Complex - Dope</li>
<li>EMF - Verses</li>
<li>Exceed - Heaven 7</li>
<li>Future Crew - Second Reality</li>
<li>Gazebo - Cyboman</li>
<li>Halcyon - Lifeforms</li>
<li>Iguana - Heartquake</li>
<li>Impact Studios - Legend</li>
<li>Impact Studios - Project Angel</li>
<li>KFMF - Dance, Move, Shake</li>
<li>KFMF - Trip</li>
<li>Logic Design - Fashion</li>
<li>Majic 12 - Show</li>
<li>Majic 12 - Wish</li>
<li>Megabusters - Hellraiser</li>
<li>Orange - x14</li>
<li>Renaissance - Amnesia</li>
<li>Skull - Putre Faction</li>
<li>Tran - Ambience (flickery)</li>
<li>Tran - Luminati (flickery)</li>
<li>Tran - Timeless</li>
<li>Triton - Crystal Dream</li>
<li>Triton - Crystal Dream 2</li>
<li>Ultraforce - Coldcut</li>
<li>Ultraforce - Vector Demo</li>
<li>Valhalla - Solstice</li>
<li>Witan - Witan House</li>
</ul>
<h3 id="emulators">Emulators</h3>
<ul>
<li>Beebem v1.02</li>
<li>BeebInC v0.99f</li>
<li>CPE v5.2i</li>
<li>DOSBox 0.74-3</li>
<li>Fellow 0.33</li>
<li>KGen98 v0.4b</li>
<li>PaCifiST v0.48</li>
<li>SNES9x v0.96</li>
<li>UltraHLE v1.0.0</li>
<li>vMac v0.1.9.1</li>
<li>ZSNES v0.800c</li>
</ul>