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?



Gregory McGill wrote 01/17/2020 at 21:36 point

I would also like the information on the caps/resistors and jumper settings.

  Are you sure? yes | no

SHAOS wrote 01/18/2020 at 19:22 point

0.1 uF tantalum for power pins and 1-10 kOm resistors to pull up /WE pins for chips where they are used (as AT28C256).

Right jumpers (from the bottom going up): CS2, CS4, CS6

Left jumpers (from the bottom going up): CS3, CS5, CS7

In reality you need to have only 2 type of jumper settings:
bottom/bottom for 1st cartridge and
middle/middle for 2nd cartridge

Other jumpers are needed only to substitute onboard ROM (BIOS+BASIC)

  Are you sure? yes | no

gtoye wrote 12/17/2019 at 16:35 point

I can't find the component values for the 2 resistors and 2 caps on the board.  Also is there any details on the jumper settings?  Thanks!

  Are you sure? yes | no

SHAOS wrote 01/18/2020 at 19:23 point

Sorry for delay with answer - see above

  Are you sure? yes | no

Keith wrote 07/14/2019 at 13:02 point

I find it hard to believe that you have a 100% followers to viewers ratio, and only 10 likes out of that 1k1 people. And most of the followers have zero projects. Has this project page been hacked?

  Are you sure? yes | no

SHAOS wrote 07/14/2019 at 16:47 point

Hmm, may be something happened with HaD database...

BTW I have one project which has more followers than viewers ;)

And it was like that at least from May last year when I asked in Feedback why is that:

People suggested that it's because some follows from the feed without looking :)

  Are you sure? yes | no


[this comment has been deleted]

SHAOS wrote 02/22/2019 at 07:20 point

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

  Are you sure? yes | no

brian hague wrote 12/04/2019 at 21:07 point

yeah we should totally do this :)

  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