I have finished tweaking the performance of this card and Im happy to say that it increases the PCjr’s speed by nearly 6X, over 4X faster than an IBM PC/XT, and about as fast as the 8Mhz IBM PC AT! I took some screenshots below of the latest performance numbers.
The FPGA is a Xilinx Spartan-6 which contains the MCL86 microsequencer-based 8088 core and two SRAM controllers for the 512KB of SRAM on the board. The slow controller runs at the bus speed of the PCJr so that when using the cycle accurate mode it will perform the same as the regular physical DRAM on the PCjr’s motherboard or side-card. When the MCL86jr is put into “unlocked” or non-cycle accurate mode, it then uses a fast SRAM controller which accesses the SRAM the fastest possible speed of around 50ns! It is the combination of this fast controller and the CPU running in non-cycle accurate mode that allows the MCL86jr to boost the PCjr’s speed by more than almost 6X!
The schematics and layout was done using KiCad and the board was manufactured and assembled by PCBWay with a total total cost per board of around $50.
I was able to successfully test a number software packages and tools which will be listed at the bottom. There are a few issues that arose when using the MCL86jr Accelerator board in the PCjr. One is that the PCjr’s internal diagnostics, which are started by pressing Ctrl-Ins-Del do not all work. Another is that the PCjr’s BASIC cartridge does not work, but the BASIC included with any DOS version does work. So does the PCjr’s internal cassette BASIC. I believe both of these issues are due to speed differences which IBM is checking. Perhaps it is a way to ensure this version of BASIC will only run on a PCjr and not any other machine…
The MCL86jr will boot into cycle-accurate mode with an additional 512KB of RAM which brings the total memory to the maximum of 640KB. To run in accelerated mode the user can run a small DOS program called MCL_FAST.COM. The program MCL_SLOW.COM will bring the CPU back into cycle-accurate mode.
Software verified to work:
DOS 1.0 DOS 2.0 DOS 2.1 DOS 3.1 DOS 3.2 ITT DOS 2.11 BASIC ** Disk version with PCjr cartridge BASIC not installed BASICA
IBM PCjr Sampler PrintMaster Plus Exploring the IBM PCjr
PC-TALK III IBM Macro Assembler 1.0 Turbo Pascal 2.08 — Runs obviously faster in “unlocked” mode Norton Utilities 3.0
Pango Archon Lode Runner Space Invaders Jumpman King’s Quest I Gato Shamus Zork Microsoft Flight Simulator II Tapper Congo Bongo
I made some feature and speed improvements to the MCL86jr board which set a new speed record for the World’s Fastest PCjr!
The MCL86jr board brings the PCjr’s total memory to 640KB and supports 8088 cycle-accurate mode as well as an “unlocked” mode which makes it around 4X faster than the IBM PCand about as fast as an IBM PC-AT!
I added two controllers to access the 512KB of SRAM. One of them runs at the 8088 bus speed which is just as fast as the memory you would plug into the side of the PCjr and runs about 1uS per access. The other controller, when selected, runs at the speed of the SRAM which is 50ns. The slower controller is used in 8088 cycle accurate mode and performs identically to the PCjr’s physical memory. The fast controller is used in “unlocked” mode and runs many times faster than the original hardware.
I also reduced some register pipeline delays in the FPGA which increased the performance to a new record.
I just received the MCL86jr board in the mail today and it seems to be working great! I was able to program the FPGA and the attached SPI flash, and then use it to boot the PCjr! I added a DIP adapter so that the pins on this board would not bend and it all fits perfectly under the disk drive carrier!
The initial FPGA code contains the MCL86 CPU core and an 8088 BIU so that it can be used on the PCjr. The next step is to add an SRAM controller so that the additional 512KB can be available to the computer which brings system memory to 640KB. After that I will add registers to provide the ability to run the CPU core as cycle accurate or unlocked mode which allows the PCjr to run significantly faster. I will also add a “fast” SRAM controller which can access the 512KB of memory within 50ns rather than at nearly 1uS as as it would for cycle accurate bus mode.
There is also 32KB of block SRAM in the FPGA which I may use to store PCjr cartridges or the XT-IDE boot image. I will also add the ability to change the computer type-ID to a PC,XT, or AT. This will all be under register control so no jumpers or switches will be needed!
PS: Those red LEDs blink back and forth like KITT from Night-Rider!
I just finished the layout for the MCL86jr, which is a small board which can replace the 8088 CPU in the IBM PCjr. It uses my MCL86 CPU core with a “minimum” mode BIU (Bus Interface Unit) and is implemented in a Xilinx Spartan-6 FPGA. The board contains a 512KB Static RAM which can bring the PCjr’s total RAM to 640KB or can be used to mirror and accelerate the BIOS ROM or even load PCJr cartridge images!
Small project which allows user to control the Brother Word Processor as a remote keyboard using an Arduino. You can paste a block of text into the terminal which will be sent to the typewriter for quick printing!
This was a small weekend project to have some fun with a vintage typewriter/word processor. The serial interface to the word processor is a simple two-wire interface of clock and data where characters are sent as 8-bits. The longest part of the project was using the logic analyzer to examine what the encoding was for each character!
I recently helped my friend Clive “Max” Maxfield with his 12×12 ping-pong LED array by making a simulator which runs on the Arduino GUI so that anyone can create and test a program to run on Max’s LED array.
The idea is that people can develop their own application and test it using my simulator, then submit it to Max so he can run it on the real 12×12 LED array. He will then post a video of the submission!
I developed it using the Easy68K simulator, which is a terrific tool that is very easy to use. The code runs successfully through my MCL68 and Easy68K, so either they are both “correct”, or they share the same bugs! 🙂