Skip to the content
2 layers170.2 × 78.7 mmROsiM, the printed circuit board in 3D

ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

Size
170.2 × 78.7 mm
Copper layers
2
Thickness
1.6 mm
Parts
93
Nets
144
Pads
594
Tracks, vias
3,252, 176
Pours
2
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
28 Oct 2020
Updated
22 Dec 2023

Overview

ROsiM is an open-source printed circuit board by hkzlab, from the hkzlab/ROsiM repository on GitHub, published under the GPL-3.0 licence. It is a 2-layer board of 170.2 × 78.7 mm with 93 parts on 144 nets, routed with 3,252 tracks and 176 vias.

It is built around the ATMEGA328-PU, 74HCT244D and 74HC244D, with the FT232RL, 74HC595 and 74HC166D among its other parts. Its parts include 31 resistors, 24 capacitors, 18 ICs, 6 connectors and 5 diodes. It belongs with the retro computing and games boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

10

README

README.md

ROsiM - ROM simulator

Introduction

The ROsiM is a ROM simulation / emulation board: it uses two 512k/8bit SRAM chips to simulate an 8 or 16 bit ROM (up to 512k bytes or 512k words in size).

The board is based around an ATMega328P chip @20Mhz, controlled via serial connection.

Rev. 1.3 PCB

I made this out of my personal need of a simple way to quickly test ROM images on boards I repair/hack/build. Often, these boards use big 16bit EPROMs and the projects I found around did not cater to my needs.

The idea is to use this bare board and then "pods" that attach to the two 40pin header and adapt it to simulate various types of ROMs.

WARNING: While I might help you with quick questions, there is NOT going to be hand-holding for this one.

Caveat Emptor!

I have currently built and tested revision 1.3 of this board. The following fixes must be implemented to make it usable:

  • Wire the VCCIO pad from FT232RL to VCC and do NOT short it to 3.3v. This is already fixed in board rev. 1.4

The following mod is optional but encouraged for safety, and have been implemented for revision 1.4:

  • Cut the trace between pin 1 of USB connector (Vcc) and F1, and insert a BAT48 SOD123 diode, cathode towards F1. This will protect your USB port if the board gets externally powered.
  • Lower F1 max current to 200mA

Board

This board is designed around relatively cheap through hole (with a few exceptions) components, and should be buildable by anyone with basic soldering skills.

You'll need a way to program your 328P MCU with the bootloader (you can then load the firmware via serial port).

I recommend optiboot. Remember to set the AVR frequency to 20Mhz and baudrate to 115200bps. I might provide prebuilt binaries of this in the future.

Bill of Materials

TODO

Connections

J1 - ISP 6 pin header

This is used for in-circuit programming of the MCU. You won't really use after burning the bootloader to the chip. You can leave this out if you pre-program the ATMega.

J2 - USB Type B female

Connect your USB cable here. It will appear as an FTDI serial port to the host.

The Interface runs at 230400bps 8-n-1. The protocol is mainly ASCII based, but meant to be used with an external software.

J3 - Barrel jack for power

Connect your DC power supply here, center tip positive. Anything between 7 to 9V will be good, 12V will work, but the regulator might get hotter. 500mA should be enough.

J4 - Address header

A 40 pin header:

  • Odd pins 1 thru 37 on the left side will bring out the address lines (A0-A18).
  • Pin 39 will be this board's VCC.
  • All even pins on the right are GND.
J5 - Data header

A 40 pin header:

  • Odd pins 1 thru 31 on the left side will bring out the data lines (D0-D15).
  • Pin 33 will be the /CE signal input.
  • Pin 35 will be the /OE signal input.
  • Pin 39 will be this board's VCC.
  • All even pins on the right are GND.
J6 - /RESET header

An active-low OC signal will be present on this header. You can use to pilot the /RESET of your target board.

Solder an arc of rigid wire on this one, so you can attach a small crocodile clip to it.

J7 - RESET header

An active-high signal (either high or disconnected) will be present on this header.

Solder an arc of rigid wire on this one, so you can attach a small crocodile clip to it.

Software

While this board can be controlled directly via a simple serial terminal, it is advised to use a client software that supports the following protocol, like the ROsiM Loader.

Protocol

The Remote Control protocol is pretty simple and ASCII based. It supports 12 commands, each with its own syntax and response.

String CMD_ERR will be sent in case the command is not recognized, string CMD_INV will be sent in case the command cannot be executed at this time.

RESET
  • Syntax: >K<
  • Response: none

Forces the reset by watchdog of the ROsiM.

MODEL
  • Syntax: >M<
  • Response: [M xx]

Returns the current model of the board in hex.

ADDRESS
  • Syntax: >A 00xxxxxx<
  • Response: [A 00xxxxxx]

Specifies the start address for the next read/write commands. The address must be specified in hex, and a mask of 0x7FFFF will be applied to it.

WRITE
  • Syntax: >W xxxx<
  • Response: [W xxxx]

The SRAM must be in WRITE mode and the board switched to INTERNAL, otherwise the response CMD_INV will be sent.

xxxx is the data to write on SRAM at the current address in hex format. Once the write completes, the address will automatically increment by 1.

READ
  • Syntax: >R<
  • Response: [R xxxx]

The SRAM must be in READ mode and the board switched to INTERNAL, otherwise the response CMD_INV will be sent.

xxxx is the data written at the current address in hex format. Once the read completes, the address will automatically increment by 1.

EXTERNAL RESET
  • Syntax: >E y< where y can be 0 or 1
  • Response: [E y]

Enables (1) or disables (0) the external RESET signal to the target board.

INTERNAL/EXTERNAL SWITCH
  • Syntax: >S y< where y can be 0 or 1
  • Response: [S y]

To execute this command, the SRAM must be in READ mode, otherwise the response CMD_INV will be sent. Sets the board to INTERNAL (1) or EXTERNAL (0) mode. EXTERNAL mode will enable the drivers that communicate through the external address/data/control lines.

READ/WRITE SWITCH
  • Syntax: >X y< where y can be 0 or 1
  • Response: [X y]

To execute this command, the board must be in INTERNAL mode, otherwise the response CMD_INV will be sent. Sets the SRAM to READ (1) or WRITE (0) mode.

VIEW
  • Syntax: >V<
  • Response: [V 00xxxxxx yy]

This command will print out the current address in hex format (00xxxxxx) and a mask (yy) in hex format that contains:

  • bit 0: INTERNAL/EXTERNAL state
  • bit 1: READ/WRITE state
  • bit 2: EXTERNAL RESET state
DEFAULTS
  • Syntax: >D<
  • Response: [D]

Will revert the board state to the following state:

  • INTERNAL
  • SRAM in READ mode
  • EXTERNAL RESET disabled

The selection of the EXTERNAL RESET logic will NOT be restored by this command and will remain set to the current state.

TEST
  • Syntax: >T<
  • Response: [T xx]

Resets the board to defaults then executes a test on the SRAMs by writing patterns of data in them and reading them back.

The output can be:

  • 00 test was completed successfully
  • 01 test failed while writing the first pattern (0xAA55)
  • 02 test failed while writing the first pattern (0x55AA)
  • 03 the test failed while writing the incremental pattern
XMODEM
  • Syntax: >O x<
  • Response: [O yy]

Starts an XMODEM transfer of a binary file into the SRAM.

x can be:

  • 0 The file will be considered an 8-bit dump, the highest 8 bits of the SRAM will be set to 0x00, only the lower 8 bits will be set.
  • 1 The file will be considered a 16-bit dump, and the data will be loaded into the SRAM in words. ODD bytes in the dump will end up in the high byte of the SRAM, EVEN bytes will end up in the low byte of the SRAM.
  • 2 The file will be considered a byte swapped 16-bit dump, and the data will be loaded into the SRAM in words. EVEN bytes in the dump will end up in the high byte of the SRAM, ODD bytes will end up in the low byte of the SRAM.

yy will be:

  • 00 for a failed transfer.
  • 01 for a successful transfer.

Parts

93
QtyValueFootprintReferences
21100nFCapacitor_THT:C_Disc_D3.4mm_W2.1mm_P2.50mmC10, C11, C12, C13, C14, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26 +5
2110KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR2, R3, R4, R10, R11, R12, R13, R14, R15, R19, R20, R21, R22, R23, R24, R30 +5
574HC595Package_DIP:DIP-16_W7.62mmU2, U3, U9, U11, U12
4MountingHole_PadMountingHole:MountingHole_2.7mm_M2.5_ISO7380_PadH1, H2, H3, H4
34.7KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR25, R26, R27
374HCT244Package_DIP:DIP-20_W7.62mmU16, U17, U18
210Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR28, R29
222pFCapacitor_THT:C_Disc_D3.0mm_W2.0mm_P2.50mmC1, C2
2470Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR31, R32
274HC166Package_DIP:DIP-16_W7.62mmU8, U10
274HC244Package_DIP:DIP-20_W7.62mmU19, U20
2AS6C4008-55PCNPackage_DIP:DIP-32_W15.24mmU13, U14
110uFCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC15
11KResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR17
11MResistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR18
1200mAFuse:Fuse_1206_3216MetricF1
120MhzCrystal:Crystal_HC49-U_VerticalY1
12N3904Package_TO_SOT_THT:TO-92_InlineQ1
12N3906Package_TO_SOT_THT:TO-92_InlineQ2
1680Resistor_THT:R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_HorizontalR16
174HC04Package_DIP:DIP-14_W7.62mmU21
174HC32Package_DIP:DIP-14_W7.62mmU15
1ATmega328PPackage_DIP:DIP-28_W7.62mmU1
1AVR-ISP-6Connector_IDC:IDC-Header_2x03_P2.54mm_VerticalJ1
1BAT48ZFILMDiode_SMD:D_SOD-123D5
1DATA_LEDLED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTopD1
1EXT_ADDRConnector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ4
1EXT_DConnector_PinHeader_2.54mm:PinHeader_2x20_P2.54mm_VerticalJ5
1External RESETConnector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_VerticalJ7
1External ~{RESET}Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_VerticalJ6
1FT232RLPackage_SO:SSOP-28_5.3x10.2mm_P0.65mmU6
1POWER_LEDLED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTopD2
1RXLED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTopD4
1SW_PushButton_Switch_THT:SW_PUSH_6mmSW1
1TXLED_THT:LED_D2.0mm_W4.8mm_H2.5mm_FlatTopD3
1USB_BConnector_USB:USB_B_Lumberg_2411_02_HorizontalJ2

More from hkzlab/ROsiM

12
  • 2 layers39.4 × 57.2 mmPod 27C040, the printed circuit board in 3D

    Pod 27C040

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    13 parts11GPL-3.0
  • 2 layers17.8 × 53.3 mmSocket A500R5, the printed circuit board in 3D

    Socket A500R5

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    4 parts11GPL-3.0
  • 2 layers17.8 × 35.6 mmSocket 27C16, the printed circuit board in 3D

    Socket 27C16

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 40.6 mmSocket 27C020, the printed circuit board in 3D

    Socket 27C020

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 35.6 mmSocket 27C32, the printed circuit board in 3D

    Socket 27C32

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 40.6 mmSocket 27C040, the printed circuit board in 3D

    Socket 27C040

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 35.6 mmSocket 27C64, the printed circuit board in 3D

    Socket 27C64

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 35.6 mmSocket 27C256, the printed circuit board in 3D

    Socket 27C256

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 50.8 mmSocket 27C400, the printed circuit board in 3D

    Socket 27C400

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 50.8 mmSocket 27C400B, the printed circuit board in 3D

    Socket 27C400B

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 35.6 mmSocket 27C512, the printed circuit board in 3D

    Socket 27C512

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0
  • 2 layers17.8 × 40.6 mmSocket 29C040, the printed circuit board in 3D

    Socket 29C040

    hkzlab/ROsiM

    ROsiM is a ROM simulator/emulator, supporting up to 512k/16bit ROMs

    2 parts11GPL-3.0

Similar boards

  • 4 layers188 × 128.3 mmZAK180, the printed circuit board in 3D

    ZAK180

    agkaminski/ZAK180

    DIY all-in-keyboard computer featuring Z180 and floppy drive

    140 parts
  • 2 layers306.1 × 130.2 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64-Home-Computer

    Legacy: Full TTL-only home computer with VGA and PS/2 and twice the processing power of a Commodore 64

    132 parts94
  • 2 layers284.9 × 96.5 mmFella, the printed circuit board in 3D

    Fella

    agkaminski/FellaPC

    DIY 6502 all-in-keyboard personal computer

    115 parts2CC0-1.0
  • 2 layers245.1 × 160 mm8-Bit CPU 32k, the printed circuit board in 3D

    8-Bit CPU 32k

    slu4coder/Minimal-64x4-Home-Computer

    My DIY TTL home computer with VGA and PS/2 and 4x the processing power of a Commodore C64 or Apple II.

    139 parts326
  • 2 layers99.1 × 99.1 mmVga, the printed circuit board in 3D

    Vga

    rjw57/simplest-80s-computer

    This is my rough scratch repo where I keep experiments to do with desiging 80s computer peripherals. It is not in any sensible shape to be used by others yet, apologies.

    45 parts
  • 2 layers715.5 × 705.5 mmFrontpanel, the printed circuit board in 3D

    Frontpanel

    Pconst167/sol-1

    Sol-1 is a homebrew CPU and Minicomputer built from 74HC logic. It is published here for educational purposes.

    299 parts1
  • 2 layers216 × 150 mmMotherboard-101, the printed circuit board in 3D

    Motherboard-101

    artemisamsx/artemisa

    Schematics, PCB designs and HDL simulations to build a 8-bits MSX computer

    124 parts67

Questions

How big is the ROsiM PCB?

It measures 170.2 × 78.7 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ROsiM use?

93 parts, built around the ATMEGA328-PU, 74HCT244D, 74HC244D and FT232RL. 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 ROsiM KiCad files?

From the hkzlab/ROsiM repository on GitHub, at the commit this page was made from: the board is board/ROsiM/ROsiM.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the ROsiM design in my own project?

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