This tool dumps binary data from Franklin Bookman ROM cards. You can start / stop / track ROM dump progress via a web-based frontend.
These dumps are used for further binary analysis in the Bookman Archive emulator development project. See the roadmap for all the details.
Advantages:
- Many libraries available to work with MCP23017 and in a variety of languages
- Easy to configure signal direction in software
- Dumper device is its own host on the WLAN
Disadvantages:
- I2C bus is much slower than SPI
Go to http://raspberrypi.local:3000/ for the web interface.
Key press Action
p Get current dump progress
h Get first 0x100 bytes of the dump (expected ROM header)
Hardware prerequisites:
- 1 x Raspberry Pi Zero W / Zero W 2 (or equivalents)
- 3 x Adafruit GPIO expander
- Uses MCP23017
- 1 x 40-pin Franklin Bookman ROM card breakout board (DIY)
- Enable I2C interface on the Raspberry Pi
Software prerequisities:
- LTS version of NodeJS (v18+)
- NodeJS Yarn package manager
- PM2 process manager
- Cloned a copy of this repo
- Connected to your local Wifi
- Set I2C baud rate to fast mode
Running:
# Install project dependencies
yarn
# Run the frontend server
node webapp.js
# Then go to http://raspberrypi.local:3000 to access the web frontend
# Start process
pm2 start
# Save process list
pm2 save
# Restart the saved processes on reboot
pm2 startup
- Slow dump speed due to low I2C bus clock speed
- Persistant data corruption during dumping process
-
Unlikely due to timing (since a large delay can be added and corruption still observed for known ROMs)
- This can be tweaked with the "ms read delay" variable in the frontend
-
Possibly MCP23017 or I2C issues?
-
Check I2C baud rate with
sudo cat /sys/kernel/debug/clk/clk_summary
- I2C rate is derived from CPU clock so if CPU scales down then I2C clock is affected
-
- Doesn't seem to make a difference for some ROM cards
-
Likely different address pin mapping? Or perhaps some pins which are switched on (BYTE# in Bookman3 mapping should be floated)
-
Elastomeric connector needs to be seated correctly otherwise the pins will not make good contact!
-
This was possibly the failure mode for some of the ROM cards!
-
Leave the card slot empty and start a dump, then put in a "failed" card and do a dump, similar results = elastomeric connector was not making good contact so pins are left floating!!
-
TODO: measure connector and order an oversized one to compensate for any give in the breakout board
- Measurements of the conductive strip: 1.47mm D x 3.55mm H x 46.5 mm W
- Replacement strip needs to be taller than 3.55mm, preferably 4.0 or 4.5 mm in H dimension
-
Alternative: create a latch / pressure bar to apply pressure on the top of the cartridge when it's plugged into the breakout board to "force" a good contact with the elastomeric connector!
-
-
Solution This was solved by using a weight to press the top edge of the card when plugged into the card breakout board. Maximizing the lever effect seemed to produce good results in maintaining electrical contact through the elastomeric connector.
-
- Unable to handle 4MB / 2 IC ROM cards yet
- Solution This was solved by mapping the CE# pin for the second bank of the ROM card
Advantages:
- Speed, much faster speeds with shift registers
- Lower level code on an MC means less to go wrong
- Arduino acts as a pipe, dumps all bytes back out to serial port on connected machine
Disadvantages:
- No pretty web interface
- More coding required
- More soldering required for shift register daisy chaining
- Major: needs a dedicated host device to save the dumps. Thus tying up usage of the host system
Device not yet built.
- Some binary comparison utilities available in
utils
for debugging line signals / mappings