Skip to the content
2 layers164.5 × 71.8 mmJupiter II Expansion, the printed circuit board in 3D

Expansion board for Jupiter-II computer

Size
164.5 × 71.8 mm
Copper layers
2
Thickness
1.6 mm
Parts
99
Nets
165
Pads
559
Tracks, vias
1,423, 56
Pours
2
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
16 Jun 2020
Updated
5 Feb 2026

Overview

Jupiter II Expansion is an open-source printed circuit board by ricaflops, from the ricaflops/Jupiter-II-Expansion repository on GitHub, published under the MIT licence. It is a 2-layer board of 164.5 × 71.8 mm with 99 parts on 165 nets, routed with 1,423 tracks and 56 vias.

It is built around the 27C128-15, 74LS257PC and 74LS574N, with the BC817 among its other parts. Its parts include 59 resistors, 14 capacitors, 9 ICs, 6 connectors and 3 transistors. It belongs with the retro computing and games boards and the FPGA and CPLD boards of this library.

Main components

4

README

README.md

Jupiter-II Expansion

An Expansion board for the Jupiter-II computer

Expands Jupiter-II with

  • Video color: 16 colors, RGB output
  • Programmable Sound Generator
  • 128K RAM: paged
  • 16K ROM: FORTH vocabulary extension
  • Serial Interface

Jupiter-II Color Screen

Jupiter-II Expansion KiCAD 3D view

FORTH code examples

Colors

text
CYAN BORDER ( Change screen border color )
WHITE PAPER ( Set char background color )
BLUE DARK INK ( Set char foreground color ) 

: COLORBAR
  CLS 10 8 AT 16 0
  DO
   I INK 144 EMIT
  LOOP 
  BLACK INK
  ;
COLORBAR ( Show a colorfull bar )

Memory/Screen/Font Paging

text
0 FONT  ( select alternative character set )
1 FONT  ( select original character set )

0 SCREEN ( select screen page 0 )
1 SCREEN ( select screen page 1 )

0 MPAGE ( select memory page 0 )
3 MPAGE ( select memory page 3 )

Sounds

text
: PING
  200 0 PSG!
  254 7 PSG!
  16 8 PSG!
  20 12 PSG!
  1 13 PSG!
;

: SHOT
  8 6 PSG!
  247 7 PSG!
  16 8 PSG!
  20 12 PSG!
  1  13 PSG!
;

Serial Comm Port

8 data bits, 1 stop bit, no parity.

text
CREATE BUFFER 256 ALLOT ( Create and Allocate a memory space to work )
: CLRBUF BUFFER 256 32 FILL ; ( Clear Buffer )
: PRTBUF CR 256 0 DO BUFFER I + EMIT LOOP CR ; ( Print Buffer )

9600 BAUD     ( set communication baud rate )
CLRBUF        ( Clear Buffer )
BUFFER 256 RX ( Receive 256 bytes from serial line )
PRTBUF        ( View received data )
BUFFER 256 TX ( Transmit 256 bytes over serial line )

Note: use Space key to abort communication if needed

Extra FORTH vocabulary

The extended vocabulary is copied from XROM to a unused 1K RAM area at $3000-$33FF of Jupiter-II during initialization. That allows safe memory paging while keeping the extra Words accessible.

Standard FORTH words

text
COUNT ( addr -- addr+1 c )  Extract String length
+! ( n addr -- )  Add 'n' to 'addr' variable
? ( addr -- )  Print variable value
CMOVE ( addr1 addr2 n -- )  Copy 'n' bytes from 'addr1' to 'addr2'
FILL  ( addr n c -- )  Fill 'n' bytes with 'c' starting from 'addr'
DEPTH ( -- n )  Data Stack Depth
HEX   ( -- )  Set numeric base to Hexadecimal

Programmable Sound Generator

text
PSG! ( c reg -- ) Write 'c' to PSG register 'reg'
PSG@ ( reg -- c ) Read PSG register 'reg' contents

Colors

text
BORDER ( c -- ) Set screen BORDER to color 'c' , 0 to 15
INK    ( c -- ) Set character INK to color 'c' , 0 to 15
PAPER  ( c -- ) Set character PAPER to color 'c' , 0 to 15
BLACK  ( -- c ) Stack color code for Black
GREY   ( -- c ) Stack color code for Grey
BLUE   ( -- c ) Stack color code for Blue
GREEN  ( -- c ) Stack color code for Green
CYAN   ( -- c ) Stack color code for Cyan
RED    ( -- c ) Stack color code for Red
PURPLE ( -- c ) Stack color code for Purple
YELLOW ( -- c ) Stack color code for Yellow
WHITE  ( -- c ) Stack color code for White
DARK   ( c1 -- c2 ) Change color code on stack to a darker tone

Serial Communication

8 data bits, 1 stop bit, no parity.

text
BAUD ( n --  )  Set UART to Baud rate 'n'
TX ( addr n --  )  Transmit 'n' bytes starting from 'addr' to serial line
RX ( addr n --  )  Receive 'n' bytes from serial line to memory 'addr'

Avoid transfering to/from video RAM using video circuit priority addressing. That prevents transfer speeds above 1200 bauds.

  • Video RAM from $2400 to $27FF. Use mirror addressing $2000 to $23FF instead (CPU priority).
  • Character Genrator RAM from $2C00 to $2FFF. Use mirror addressing $2800 to $2BFF instead (CPU priority).

Note: Character Generator RAM is write only

Memory Paging

text
MPAGE  ( c -- ) Select memory page 'c' , 0 to 3
SCREEN ( c -- ) Select Screen page 'c' , 0 or 1
FONT   ( c -- ) Select character set 'c' , 0 or 1

Memry Paging

Note: System resets to page 3

Programmable Sound Generator Registers

Programmable Sound Generator Registers

text
   bits: 76543210 76543210
  R1 R0: ----tttt tttttttt : Tone generator A period (12-bits) 0-4095
  R3 R2: ----tttt tttttttt : Tone generator B period (12-bits) 0-4095
  R5 R4: ----tttt tttttttt : Tone generator C period (12-bits) 0-4095
     R6:          ---ttttt : Noise generator period  (5-bits)  0-31
     R7:          ppcbaCBA : I/O port and sound channel enablers
     R8:          ---Mvvvv : Channel A Volume (v) and Envelope Mode (M)
     R9:          ---Mvvvv : Channel B Volume (v) and Envelope Mode (M)
    R10:          ---Mvvvv : Channel C Volume (v) and Envelope Mode (M)
R12 R11: tttttttt tttttttt : Envelope period (16-bits) 0-65535
    R13:          ----calh : Envelope Shape: Continue (c), Attack (a), Alternate(l), Hold (h)
    R14:          dddddddd : I/O Port-A data
    R15:          dddddddd : I/O Port-B data

R0..R6: Tone and Noise Period (Frequency) settings

t = 203125 / f , where f is the desirable frequency in Hz
Tone Range: 49.6 Hz to 203.1 kHz (0..4095)
Noise Range: 6.55 kHz to 293.1 kHz (0..31)

R7: Tone and Noise Mixer and I/O Ports direction

  • bit0: when 0 enables tone A on channel A, 1 disables it
  • bit1: when 0 enables tone B on channel B, 1 disables it
  • bit2: when 0 enables tone C on channel C, 1 disables it
  • bit3: when 0 enables Noise on channel A, 1 disables it
  • bit4: when 0 enables Noise on channel B, 1 disables it
  • bit5: when 0 enables Noise on channel C, 1 disables it
  • bit6: when 0 set digital Port-A as input, 1 set it as output
  • bit7: when 0 set digital Port-B as input, 1 set it as output

R8..R10: Channel volume

  • bit4 : when 0 volume is fixed, when 1 volume is Envelope controlled
  • bit3-0: Fixed volume value (0-31)

R11, R12: Envelope period

t = s / 78.769e-6 , where s is the desirable period in seconds
Period range: 78.8 us to 5.16 seconds

R13: Envelope Shape combination

  • bit3: Continue: when 1 follows Hold setting, when 0 resets down after one cycle
  • bit2: Attack: when 1 attack ramps up, when 0 ramps down
  • bit1: Alternate: when 1 envelope shape reverses on each cycle (up/down)
  • bit0: Hold: when 1 limits to one cycle and sustain final value

R14, R15: Digital I/O Port data

  • Port A (register 14) controls PAPER and INK colors
  • Port B (register 15) controls BORDER color and paging

Programmable Sound Generator Ports

Parts

99
QtyValueFootprintReferences
142k2Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR16, R21, R26, R27, R28, R29, R38, R39, R43, R44, R45, R46, R48, R57
121k2Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR30, R31, R32, R33, R34, R35, R36, R37, R49, R50, R51, R52
8100nCapacitor_THT:C_Rect_L7.0mm_W2.5mm_P5.00mmC7, C8, C9, C10, C11, C12, C13, C14
84k7Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR1, R2, R3, R4, R55, R56, R58, R59
610kResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR7, R9, R10, R12, R53, R54
61kResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR11, R14, R15, R20, R25, R47
63k3Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR17, R18, R22, R23, R40, R41
4MountingHoleMounting_Holes:MountingHole_3.2mm_M3H1, H2, H3, H4
375Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR19, R24, R42
3BC817Package_TO_SOT_SMD:SOT-23Q1, Q2, Q3
210uCapacitor_Tantalum_SMD:CP_EIA-6032-15_Kemet-U_Pad2.25x2.35mm_HandSolderC3, C6
21N914Diode_THT:D_DO-35_SOD27_P7.62mm_HorizontalD1, D2
233pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC4, C5
2470Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR8, R13
274LS257Package_DIP:DIP-16_W7.62mmU7, U9
116C450Package_DIP:DIP-40_W15.24mm_SocketU5
11MResistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR6
11k5Resistor_SMD:R_0805_2012Metric_Pad1.15x1.40mm_HandSolderR5
122pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC2
127C128Package_DIP:DIP-28_W15.24mmU2
13.6864 MHzCrystal:Crystal_HC18-U_VerticalY1
147pCapacitor_SMD:C_0805_2012Metric_Pad1.15x1.40mm_HandSolderC1
16116Package_DIP:DIP-24_W15.24mmU6
1628128Package_DIP:DIP-32_W15.24mmU3
174LS574Package_DIP:DIP-20_W7.62mmU8
1AY-3-8910Package_DIP:DIP-40_W15.24mm_SocketU4
1CXO_DIP14 3.6864 MHzOscillator:Oscillator_DIP-14X1
1Conn_01x03Connector_Molex:Molex_KK-254_AE-6410-03A_1x03_P2.54mm_VerticalJ4
1Conn_01x07Connector_Molex:Molex_KK-254_AE-6410-07A_1x07_P2.54mm_VerticalJ6
1Conn_01x10Connector_Molex:Molex_KK-254_AE-6410-10A_1x10_P2.54mm_VerticalJ3
1Conn_02x15_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x15_P2.54mm_VerticalJ7
1Conn_02x25_Odd_EvenConnector_PinHeader_2.54mm:PinHeader_2x25_P2.54mm_VerticalJ1
1Conn_02x25_Odd_EvenConnector_PinSocket_2.54mm:PinSocket_2x25_P2.54mm_VerticalJ2
1GAL22V10Package_DIP:DIP-24_W7.62mm_SocketU1

Similar boards

  • 2 layersComputer, the printed circuit board in 3D

    Computer

    rocket3989/KiCad

    personal kicad file storage

    44 parts4
  • 2 layers164.5 × 89.5 mmJupiter II, the printed circuit board in 3D

    Jupiter II

    ricaflops/Jupiter-II

    Another Jupiter Ace computer clone

    126 parts43MIT
  • 2 layers100 × 80 mmMini8085, the printed circuit board in 3D

    Mini8085

    skiselev/minimax8085

    Simple Intel 8085 based Single Board Computer (SBC)

    45 parts60GPL-3.0
  • 2 layers333.2 × 205.9 mmDragon64, the printed circuit board in 3D

    Dragon64

    danwerner21/Dragon64

    A clone board for the Dragon64 and Tandy Color Computer

    232 parts34
  • 2 layers222.3 × 88.9 mmSCSISidecar, the printed circuit board in 3D

    SCSISidecar

    schlae/a1000-scsi-sidecar

    Amiga 1000 SCSI sidecar adapter

    82 parts12CERN-OHL-P-2.0
  • 2 layers299.2 × 180 mm2layer, the printed circuit board in 3D

    2layer

    ceteras/CoBra

    A Z80 retro computer, ZX Spectrum compatible, can also run CP/M.

    369 parts11MIT
  • 2 layers125.7 × 97.8 mmQdisk v4, the printed circuit board in 3D

    Qdisk v4

    alvaroalea/QL_CST_FLoppyController

    A clone of the CST's Floppy Disk Interface for Sinclair QL (PCB version 3 & 4)

    31 parts8
  • 2 layers239.6 × 239.9 mmTK3000, the printed circuit board in 3D

    TK3000

    clemarfolly/TK3000

    Réplica do Microdigital TK3000

    329 parts7GPL-3.0

Questions

How big is the Jupiter II Expansion PCB?

It measures 164.5 × 71.8 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Jupiter II Expansion use?

99 parts, built around the 27C128-15, 74LS257PC, 74LS574N and BC817. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Jupiter II Expansion KiCad files?

From the ricaflops/Jupiter-II-Expansion repository on GitHub, at the commit this page was made from: the board is Jupiter-II_expansion.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Jupiter II Expansion design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).