Files
PCXT_MiSTer/README.md
Aitor Gómez García 5d503bc064 PCXT: macro-driven build config and unified constraints
- Add config.tcl as the PCXT build profile and source it from PCXT.qsf with defaults for system/ROM and feature toggles.

- Gate video/audio/EMS/Tandy logic by macros in PCXT.sv, Peripherals.sv, RAM.sv, and cga.v to avoid unused I/O and logic.

- Update OSD options and video swap behavior to match CGA/HGC combos and hide Tandy-only items when disabled.

- Move constraints to SYSTEM.sdc and update files.qip.

- Refresh README.md with the PCXT default config and resource profile.
2026-01-06 20:13:11 +01:00

6.8 KiB

IBM PC/XT for MiSTer FPGA

PCXT port for MiSTer by @spark2k06.

Discussion and evolution of the core in the following misterfpga forum section:

https://misterfpga.org/viewforum.php?f=40

Splash

Description

The purpose of this core is to implement a PCXT as reliable as possible. For this purpose, the MCL86 core from @MicroCoreLabs and KFPC-XT from @kitune-san are used.

The Graphics Gremlin project from TubeTimeUS (@schlae) has also been integrated in this first stage.

JTOPL by Jose Tejada (@jotego) was integrated for AdLib sound.

Key features

  • 8088 CPU with these speed settings: 4.77 MHz, 7.16 MHz, 9.54 MHz cycle accurate, and PC/AT 286 at 3.5MHz equivalent (max. speed)
  • Support for IBM PCXT 5160 and clones (CGA graphics)
  • Main memory 640Kb + 384Kb UMB memory
  • Simulated Composite Video (CGA)
  • Simultaneous video Hercules Graphics Card, F11 -> Swap Video Output with CGA
  • Enable/Disable of CGA and Hercules I/O ports
  • 1st Graphics Card selection from System & BIOS
  • EMS memory up to 2Mb
  • XTIDE support
  • Audio: Adlib, C/MS & speaker
  • Joystick support
  • Mouse support into COM1 serial port, this works like any Microsoft mouse... you just need a driver to configure it, like CTMOUSE 1.9 (available into hdd folder)
  • 2nd SD card support

Build configuration (config.tcl)

The default configuration focuses on broad PC/XT compatibility:

  • System/ROM set to PCXT
  • CGA + HGC enabled for widest video support
  • OPL2 enabled for common DOS FM audio
  • CMS enabled
  • EMS + A000 UMB enabled for expanded memory
  • Tandy-specific video/audio/keyboard by default

This default maximizes software compatibility while keeping the feature set coherent for a PC/XT target. You can edit config.tcl to enable or disable any macro and rebuild for a different profile.

Resource profile

Video options dominate resource usage. CGA uses 282/553 RAM blocks and HGC/MDA uses 270/553, so the default PCXT profile (CGA+HGC) is heavier than either single video build. Enabling all features reaches 553/553. The device budget is 553 RAM blocks and 5,662,720 block memory bits.

Columns are separate builds: Base (all features off), single-feature builds, CGA+TandyVideo (CGA + Tandy video, included for comparison), and All (everything enabled). Values are from recent synthesis runs and can be regenerated by rebuilding with different config.tcl settings.

Resource Max Base CGA CGA+TandyVideo HGC/MDA TandyAudio TandyKBD OPL2 CMS EMS A000_UMB All
ALMs 110,000 12,551 14,229 14,442 13,546 12,802 12,549 13,266 13,505 12,599 12,648 17,605
Registers ~220,000 17,861 19,755 20,081 19,680 17,974 17,883 18,509 18,815 17,776 17,739 24,311
Block memory bits 5,662,720 945,035 2,124,705 3,042,209 2,026,404 945,035 945,035 952,077 945,035 945,035 945,035 4,313,183
RAM blocks (M10K) 553 138 282 394 270 138 138 147 138 138 138 553
DSP blocks 112 33 35 35 33 33 33 34 37 33 33 40

Default configuration (current config.tcl and output_files/PCXT.fit.summary) resource usage, shown as percent of the Max column above:

Resource Used % of Max
ALMs 17,111 15.6%
Registers 23,913 10.9%
Block memory bits 3,397,414 60.0%
RAM blocks (M10K) 449 81.2%
DSP blocks 40 35.7%

Quick Start

  • Copy the contents of games/PCXT to your MiSTer SD Card and uncompress hd_image.zip. It contains a FreeDOS image ( http://www.freedos.org/ )
  • Select the core from Computers/PCXT.
  • Press WinKey + F12 on your keyboard.
    • Model: IBM PCXT.
    • CPU Speed: PC/AT 3.5MHz (Max speed)
    • FDD & HDD -> HDD Image: FreeDOS_HD.img
    • BIOS -> PCXT BIOS: pcxt_micro8088.rom
  • Choose Reset & apply settings.

ROM Instructions

ROMs should be provided initially from the BIOS section of the OSD menu. The core has a single BIOS slot; on subsequent boots it is not necessary to provide them unless you want to use others. Original and copyrighted ROMs can be generated on the fly using the python scripts available in the SW folder of this repository:

  • make_rom_with_ibm5160.py: A valid ROM is created for the PCXT core (pcxt.rom) based on the original IBM 5160 ROM, requires the XTIDE BIOS at address EC00h to work with HD images.
  • make_rom_with_jukost.py: A valid ROM is created for the PCXT core (pcxt.rom) based on the original Juko ST ROM, and with the XTIDE BIOS embedded at address F000h.

From the same BIOS section of the OSD it is possible to specify an XTIDE ROM of up to 16Kb to work at address EC00h. It is also provided in this repository.

Other Open Source ROMs are available in the same folder:

  • pcxt_pcxt31.rom: This ROM already has the XTIDE BIOS embedded at address F000h. (Source Code)
  • pcxt_micro8088.rom: This ROM already has the XTIDE BIOS embedded at address F000h. (Source Code)
  • ide_xtl.rom: This ROM corresponds to the XTIDE BIOS, it must be maintained for some scripts to work, it can also be upgraded to a newer version. (Source Code)

Note: Not all ROMs work with MDA video: (IBM5160, Yuko ST and pcxt31 works)

Other BIOSes

Mounting the FDD image

The floppy disk image size must be compatible with the BIOS, for example:

  • On IBM 5160 only 360Kb images work well.
  • On Micro8088 only 720Kb and 1.44Mb images work properly.
  • Other BIOS may not be compatible, such as OpenXT by Ja'akov Miles and Jon Petroski.

It is possible to use images smaller than the size supported by the BIOS, but only pre-formatted images, as it will not be possible to format them from MS-Dos.

Developers

Any contribution and pull request, please carry it out on the prerelease branch. Periodically they will be reviewed, moved and merged into the main branch, together with the corresponding release.

Thank you!