Custom cartridge for IBM PCjr

Similar projects worth following
Idea is to create custom cartridge for IBM PCjr (1983-1985) to deliver new software and DOS to the machine without diskette. Even though PCjr was "one of the biggest flops in the history of computing" of its time (and then briefly a hit of 1984 Christmas), a lot of people still like this machine and I'm also became one of the fans - I got mine as a present to this Christmas (2016)

According to IBM PCjr Technical Reference there are 6 chip-select signals in the cartridge interface:

/CS2 - 1st cartridge ROM 2 (D0000-D7FFF)
/CS3 - 1st cartridge ROM 1 (D8000-DFFFF)

/CS4 - 2nd cartridge ROM 2 (E0000-E7FFF)
/CS5 - 2nd cartridge ROM 1 (E8000-EFFFF)

/CS6 and /CS7 are only for case when you need to substitute onboard ROM (BIOS+BASIC), but for this you also need to ground A04 and A09 (BASE 1/2 ROM IN CARTRIDGE).

And address is 15 lines (up to 32KB). And data is obviously 8 bit (it's 8088, remember?). Technically possible to create cartridge with 128 KB (4 x 32KB chips) directly available in the address space of the processor 8088, but I started with 64 KB...

You can order THREE 64KB PCBs through OSHPark:

  • Creating a BIOS extension

    SHAOS01/13/2017 at 05:11 14 comments

    So cartridges in PCjr are actually PC BIOS extensions with 055h 0AAh in the beginning and this is how they checked on boot:

    with step 2K it's looking for 0x55 0xAA signature and then check CRC:

    And this piece shows how BIOS determines which algorithm to use - CRC16 or simple arithmetic sum:

    So in order to create proper BIOS extension I wrote CRC16 library compatible with IBM's CRC_CHECK (see here) and special program that creates ROM image from COM-file (for now it has to be specifically created "read-only" COM-file) and put CRC at the end of that ROM image - PCJRCART.C

    And this is my 1st program (pictured as title image of the project):

           org 100h
    section .text
           MOV     BH,7 ; 0 for DOSBox
           MOV     BL,4
           MOV     CX,1
           MOV     DH,18
           MOV     DL,0
           LEA     SI,[STRI]
    NEXT:  MOV     AH,2
           INT     10H
           INC     DX
           MOV     AL,[SI]
           CMP     AL,'$'
           JE      KON
           MOV     AH,9
           INT     10H
           INC     SI
           JMP     SHORT NEXT
    KON:   JMP     KON
    section .data
    STRI   DB      'Hello, Hackaday ! $'

    Program is compilable by this command (you need NASM):

    nasm test1.asm -fbin -o

    now it could be tested in DOSBox for example or from DOS prompt on real machine and then pcjrcart to produce test1.bin that could be directly written into AT28C256 (or AT28C64 if size<=8K)

    UPDATE: This approach (with some tweaks) was successfully used for PC XT machine by @esot.eric :)

  • Cloning 64KB cartridge

    SHAOS01/10/2017 at 23:54 0 comments

    Thanks @oshpark for these PCBs:

    This is a clone of 64KB cartridge - I disassembled one of those to trace wires:

    But my clone is for modern EEPROMs AT28C256 (pin 1 is A14):

    Memory chips are completely independent, so one 32K could be inserted instead of two:

    UPDATE: full 64KB setup was also tested:

    UPDATE2: it looks like you can also put there smaller EEPROM 28C64 (8K)

    Link to order your boards:

View all 2 project logs

Enjoy this project?



Thomas Cherryhomes wrote a day ago point

Would it be possible to coax output from WATCOM C to be ROMable? I have a PLATO Terminal emulator which I have ported to over a dozen platforms, including PCjr, which would be great as a cart!


code is here:

  Are you sure? yes | no

SHAOS wrote a day ago point

For now I can't turn arbitrary binary to ROM, but I'm working on it ;)

  Are you sure? yes | no

oshpark wrote 01/11/2017 at 02:08 point

@Shaos Exciting!  We look forward to future updates

  Are you sure? yes | no

SHAOS wrote 01/11/2017 at 03:39 point

Thanks :)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates