diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 3ebb39d..055a22e 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -30,6 +30,10 @@ docs: url: /docs/28C256-notes - title: "PROM Types" url: /docs/prom-families + - title: "2316 and 2332 ROMs" + url: /docs/2316-roms + - title: "Release History" + url: /docs/release-history - title: "Links" children: - title: "Code and Schematics" diff --git a/docs/_docs/design-250-prom-specific-code.md b/docs/_docs/design-250-prom-specific-code.md index e920a12..a128f83 100644 --- a/docs/_docs/design-250-prom-specific-code.md +++ b/docs/_docs/design-250-prom-specific-code.md @@ -129,7 +129,7 @@ For the 2316 make the following connections: The 2332 does not have a CS3, and the 2364 does not have CS3 or CS2, so those Arduino pins are not used. -Before reading the chip, run the Unlock command to scan the Chip Selects. This will try all combinations +__Before reading the chip, run the Unlock command to scan the Chip Selects__. This will try all combinations of CS values to read data from the chip. After the Unlock command runs successfully, the Dump or Read commands can then be used to read from the chip. diff --git a/docs/_docs/design-300-pcb.md b/docs/_docs/design-300-pcb.md index 10141f9..fbd6717 100644 --- a/docs/_docs/design-300-pcb.md +++ b/docs/_docs/design-300-pcb.md @@ -4,8 +4,10 @@ permalink: /docs/pcb exerpt: "Printed Circuit Boards" --- -Although it was originally designed as a one-off programmer to be used on a breadboard, -there are now some PCB versions. +Although TommyPROM was originally designed as a one-off programmer to be used on a breadboard, there are now some PCB versions. The original TommyPROM PCB for 28C256 chips is described here, and the [TommyPROM32 PCB](tommyprom32-pcb), for handling a variety of chips, has its own page. + +[![TommyPROM PCB](images/TommyPROM-pcb-500.jpg)](images/TommyPROM-pcb.jpg)[![TommyPROM PCB](images/TommyPROM32-SST39SF-500.jpg)](images/TommyPROM32-SST39SF.jpg) + ## 28C256 PCB @@ -17,54 +19,6 @@ disturbing any of the wires. The [KiCad design files](https://github.com/TomNisbet/TommyPROM/tree/master/schematics) are in the project repo. -[![TommyPROM PCB](images/TommyPROM-pcb-with-microcode-500.jpg)](images/TommyPROM-pcb.jpg) +[![TommyPROM PCB](images/TommyPROM-pcb-with-microcode-500.jpg)](images/TommyPROM-pcb-with-microcode.jpg) -## TommyPROM32 - -TommyPROM32 was built to support SST39SF0x0 and other 32-pin EEPROM and Flash chips. While -providing a stable platform for the SST39SF chips, the board can serve as a test bed for -other chips as well. It uses a set of headers that allow any of the signals to the target -chip to be re-routed. The default configuration, with just jumper shunts installed, is -wired for the SST39SF0x0 chips. - -[![TommyPROM PCB](images/TommyPROM32-SST39SF-500.jpg)](images/TommyPROM32-SST39SF.jpg) - -Many other chips, particularly if they follow JEDEC standards, can be supported by -removing shunts and adding just a few jumper wires. - -Chips with fewer pins can also be supported. There are power pins in place to support -28-pin and 24-pin chips with a shunt to the correct VCC pin. The photo below shows the -28C256 with a power jumper on pin 28, the _WE_ signal moved down to pin 27, and the _A14_ -signal moved from ping 27 to pin 1. - -[![TommyPROM PCB](images/TommyPROM32-28C256-500.jpg)](images/TommyPROM32-28C256.jpg) - -Power inputs and a switch are provided to support older flash and EEPROM chips that need -higher programming voltages. Many of these chips just need a higher voltage, like 12V, -applied to the VPP pin continuously during the programing and verification cycle. In -normal operation, the 5V VCC signal is applied to the VPP pin. The board has VPP inputs -for two voltages. Applying 12V to _VPP In High_ and 5V to _VPP In Low_ lets the VPP -output be switched between these two voltages using a manual slide switch for programming. - -The photo below shows the WE27C257 set up for programming. The _VPP in Low_ signal is -connected to _VCC_ and the _VPP in High_ signal is using 12V from an external power -supply. The _VPP Out_ signal is connected to the chip's VPP on pin 1. The chip is in -programming mode when the slide switch is set to the _High_ position and is in read mode -when in the _Low_ position. - -[![TommyPROM PCB](images/TommyPROM32-27C257-pgm-500.jpg)](images/TommyPROM32-27C257-pgm.jpg) - -To erase the WE27C257 chip, the external power supply is providing 14V and the _VPP Out_ -is connected to the chip's _VPP_ and _A9_ pins. An external breadboard was needed to -allow the _VPP Out_ signal to be connected to multiple pins. A new spin of the board is -planned with multiple _VPP Output_ pins and some general-purpose interconnect pins. - -[![TommyPROM PCB](images/TommyPROM32-27C257-erase-500.jpg)](images/TommyPROM32-27C257-erase.jpg) - -For chips that require a high voltage VPP pulse during programming, some external -switching circuitry will be needed to allow the Arduino to control the VPP voltage. There -is a header connected to the unused D13 pin that can support this. See the -[Intel 8755 version of the hardware](hardware/#intel-8755a-hardware-version) for an -example of voltage switching by TommyPROM. - -[![TommyPROM PCB](images/TommyPROM32-sch-700.png)](images/TommyPROM32-sch.png) +[![TommyPROM schematic](images/TommyPROM-nano-sch.png)](images/TommyPROM-pcb.jpg) diff --git a/docs/_docs/design-350-tommyprom32-pcb.md b/docs/_docs/design-350-tommyprom32-pcb.md new file mode 100644 index 0000000..b93611d --- /dev/null +++ b/docs/_docs/design-350-tommyprom32-pcb.md @@ -0,0 +1,54 @@ +--- +title: TommyPROM32 PCB +permalink: /docs/tommyprom32-pcb +exerpt: "TommyPROM32 Printed Circuit Board" +--- + +## TommyPROM32 + +TommyPROM32 was built to support 32-pin and smallerr EEPROM and Flash chips. While providing a stable platform for the SST39SF chips, the board can be easily configured for many other chips as well. It uses a set of headers that allow any of the signals to the target chip to be re-routed. + +[![TommyPROM PCB](images/TommyPROM32-jumpers-500.jpg)](images/TommyPROM32-jumpers.jpg) + +The default configuration, with just jumper shunts installed, is wired for the SST39SF0x0 chips. + +[![TommyPROM PCB](images/TommyPROM32-SST39SF-500.jpg)](images/TommyPROM32-SST39SF.jpg) + +Many other chips, particularly if they follow JEDEC standards, can be supported by removing shunts and adding just a few jumper wires. + +Note that some of the photos below show the initial version of the TommyPROM32 board that only contained a single switchable voltage. The version 2.0 boards added a second switchable Vpp voltage section with multiple _VPP Output_ pins. The _5V_ and _Vpp in low_ pins are now adjacent so that a wire is not needed for the common case where Vpp low is set to 5V. There are also some general-purpose 5v, GND, and interconnect pins. + +Chips with fewer pins can also be supported. There are power pins in place to support 28-pin and 24-pin chips with a shunt to the correct VCC pin. The photo below shows the 28C256 with a power jumper on pin 28, the _WE_ signal moved down to pin 27, and the _A14_ signal moved from ping 27 to pin 1. + +[![TommyPROM PCB](images/TommyPROM32-28C256-500.jpg)](images/TommyPROM32-28C256.jpg) + +## Vpp Power Selection Examples + +Two power inputs and switches are provided to support older flash and EEPROM chips that need higher programming voltages. Many of these chips just need a higher voltage, like 12V, applied to the VPP pin continuously during the programing and verification cycle. In normal operation, the 5V VCC signal is applied to the VPP pin. The board has VPP inputs for two voltages. Applying 12V to _VPP In High_ and 5V to _VPP In Low_ lets the VPP output be switched between these two voltages using a manual slide switch for programming. + +### WE27C257 + +The photo below shows the WE27C257 set up for programming. The _VPP in Low_ signal is connected to _VCC_ and the _VPP in High_ signal is using 12V from an external power supply. The _VPP Out_ signal is connected to the chip's VPP on pin 1. The chip is in programming mode when the slide switch is set to the _High_ position and is in read mode when in the _Low_ position. + +[![TommyPROM PCB](images/TommyPROM32-27C257-pgm-500.jpg)](images/TommyPROM32-27C257-pgm.jpg) + +To erase the WE27C257 chip, the external power supply is providing 14V and the _VPP Out_ is connected to the chip's _VPP_ and _A9_ pins. + +[![TommyPROM PCB](images/TommyPROM32-27C257-erase-500.jpg)](images/TommyPROM32-27C257-erase.jpg) + +### M27C256 +The M27C256 chip needs two voltages for programming. The external power supply is providing 12.75V to _VPP Out 1_ for the the chip's _VPP_ and _A9_ pins. The power supply is also providing 6.25V to _VPP Out 2_ for the chips _Vcc_. Note the the chip's Vcc is no longer connected to the system +5V. The two VPP Select switches should be in the _low_ lowition for normal read operation and in the _high_ position for programming. + +[![TommyPROM PCB](images/TommyPROM32-27C256-500.jpg)](images/TommyPROM32-27C256.jpg) + +## High Voltage Pulses + +For chips that require a high voltage VPP pulse during programming, some external switching circuitry will be needed to allow the Arduino to control the VPP voltage. There is a header connected to the unused D13 pin that can support this. See the [Intel 8755 version of the hardware](hardware/#intel-8755a-hardware-version) for an example of voltage switching by TommyPROM. + +## Schematics and Gerbers + + +The [KiCad design files](https://github.com/TomNisbet/TommyPROM/tree/master/schematics) +are in the project repo. + +[![TommyPROM schematic](images/TommyPROM32-sch-700.png)](images/TommyPROM32-sch.png) diff --git a/docs/_docs/images/TommyPROM32-27C256-500.jpg b/docs/_docs/images/TommyPROM32-27C256-500.jpg new file mode 100644 index 0000000..979583a Binary files /dev/null and b/docs/_docs/images/TommyPROM32-27C256-500.jpg differ diff --git a/docs/_docs/images/TommyPROM32-27C256.jpg b/docs/_docs/images/TommyPROM32-27C256.jpg new file mode 100644 index 0000000..48de728 Binary files /dev/null and b/docs/_docs/images/TommyPROM32-27C256.jpg differ diff --git a/docs/_docs/images/TommyPROM32-27C257-erase-500.jpg b/docs/_docs/images/TommyPROM32-27C257-erase-500.jpg index b301e23..df885c9 100644 Binary files a/docs/_docs/images/TommyPROM32-27C257-erase-500.jpg and b/docs/_docs/images/TommyPROM32-27C257-erase-500.jpg differ diff --git a/docs/_docs/images/TommyPROM32-27C257-erase.jpg b/docs/_docs/images/TommyPROM32-27C257-erase.jpg index f620162..c8c1b07 100644 Binary files a/docs/_docs/images/TommyPROM32-27C257-erase.jpg and b/docs/_docs/images/TommyPROM32-27C257-erase.jpg differ diff --git a/docs/_docs/images/TommyPROM32-SST39SF-500.jpg b/docs/_docs/images/TommyPROM32-SST39SF-500.jpg index af06d2a..8974810 100644 Binary files a/docs/_docs/images/TommyPROM32-SST39SF-500.jpg and b/docs/_docs/images/TommyPROM32-SST39SF-500.jpg differ diff --git a/docs/_docs/images/TommyPROM32-SST39SF.jpg b/docs/_docs/images/TommyPROM32-SST39SF.jpg index 959ed93..5b4788f 100644 Binary files a/docs/_docs/images/TommyPROM32-SST39SF.jpg and b/docs/_docs/images/TommyPROM32-SST39SF.jpg differ diff --git a/docs/_docs/images/TommyPROM32-jumpers-500.jpg b/docs/_docs/images/TommyPROM32-jumpers-500.jpg new file mode 100644 index 0000000..7e8a11c Binary files /dev/null and b/docs/_docs/images/TommyPROM32-jumpers-500.jpg differ diff --git a/docs/_docs/images/TommyPROM32-jumpers.jpg b/docs/_docs/images/TommyPROM32-jumpers.jpg new file mode 100644 index 0000000..38bd5ec Binary files /dev/null and b/docs/_docs/images/TommyPROM32-jumpers.jpg differ diff --git a/docs/_docs/ref-300-2316-2332-roms.md b/docs/_docs/ref-300-2316-2332-roms.md index 9ac4611..9922c13 100644 --- a/docs/_docs/ref-300-2316-2332-roms.md +++ b/docs/_docs/ref-300-2316-2332-roms.md @@ -18,7 +18,9 @@ Some systems will contain multiple 23xx chips with the Chip Selects configured t ## Reading 23xx chips with TommyPROM -A TommyPROM programmer can be constructed with an Arduino to read 2316 ROM chips. The code will scan the ROM to determine the correct Chip Select settings, so no wiring changes or inverters are needed when switching chips of the same type. +A TommyPROM programmer can be constructed with an Arduino to read 2316 ROM chips. This can be constructed on a breadboard for quick use. [TommyPROM32 printed circuit board](tommyprom32-pcb) can be constructed for a more stable solution. + +The TommyPROM code will scan the ROM to determine the correct Chip Select settings, so no wiring changes or inverters are needed when switching chips of the same type. To use TommyPROM with 2316 chips, perform the following steps: @@ -38,7 +40,13 @@ The 2332 only has two chip selects, so pin 21 should instead be connected to the |Model |Type |CS3 |CS2 |CS1 |Tested|Notes| |:--- |:--- |:---:|:---:|:---:|:---:|:--- | -|**UK101**||| +|**Ohio Scientific SuperBoard**||| +|Monitor |2316 | x | H | H | Y | +|BASIC1 |2316 | x | H | H | Y | +|BASIC2 |2316 | x | H | H | Y | +|BASIC3 |2316 | x | H | H | Y | +|BASIC4 |2316 | x | H | H | Y | +|**Compukit UK101**||| |MONUK02 |2316 | x | H | H | Y | |BASUK01 |2316 | x | H | H | Y | |BASUK02 |2316 | x | H | H | Y | @@ -47,21 +55,22 @@ The 2332 only has two chip selects, so pin 21 should instead be connected to the |**Commodore 64**||| |901225-01 |2332 | - | | | N | Character ROM |901226-01 |2364 | - | - | | N | Basic -|901227-03 |2364 | - | - | | N | Kernel +|901227-03 |2364 | - | - | | N | Kernal |**Commodore VIC 20**||| |901460-03 |2332 | - | L | L | N | Character ROM |901486-01 |2364 | - | - | | N | Basic -|901486-06 |2364 | - | - | | N | Kernel +|901486-06 |2364 | - | - | | N | Kernal |**Commodore 1451**||| |325302-01 |2364 | - | - | | N | DOS -|901229-05 |2364 | - | - | | N | Kernel +|901229-05 |2364 | - | - | | N | Kernal |**TRS-80 Model 1**||| |ROM A |2364 | - | - | | N| |ROM B |2332 | - | | | N| |**Apple II**||| -|**Ohio Scientific SuperBoard**||| -||2316|| |**Atari 400 and 800**||| +|**Atari 2600 Cartridge**||| +|ROM A |2332 | - | | | N| +|ROM B |2332 | - | | | N| ## References diff --git a/docs/_docs/ref-900-release-history.md b/docs/_docs/ref-900-release-history.md new file mode 100644 index 0000000..d5b727c --- /dev/null +++ b/docs/_docs/ref-900-release-history.md @@ -0,0 +1,34 @@ +--- +title: TommyPROM Release History +permalink: /docs/release-history +exerpt: "What's New in TommyPROM" +--- + +## TommyPROM Release History + +|Revision |Date_added |Notes| +|:---: |:---: |:--- | +|1.0 |2017-02-27 |Initial version to support 28C256 EEPROMs| +|1.5 |2018-05-10 |Split into modular PromDevice drivers to support 8655A| +|1.6 |2018-12-22 |Early suport for 27C devices | +|1.7 |2019-06-08 |Add Lock command for 28C256 | +|1.8 |2019-06-09 |Optimize address register code to meet unlock timing requirements and create HardwareVerify sketch| +|2.0 |2019-07-19 |Extend addressing to 19 bits to read larger chips, like the 29C040| +| |2020-08-08 |Add dedicated sketch to unlock 28C256 chips using Ben Eater hardware design| +|2.1 |2020-08-15 |Add Poke command| +|2.2 |2020-08-24 |Add support for 74LS595 shift registers for addressing and fix XModem ACK issue| +|2.3 |2020-08-26 |Fix addressing bug| +|2.4 |2020-10-10 |Add XModem debugging information and fix #17 for AT28C256 write failures| +|2.5 |2020-10-14 |Change XModem default to 8-bit checksum instead of CRC16| +|2.6 |2020-11-11 |Change XModem default back to CRC16| +|2.7 |2020-11-14 |Additional XModem protocol error handling| +|3.0 |2021-08-12 |Support for SST39SF0x0 flash devices| +|3.1 |2022-12-10 |Support for 27C257/27E257 EEPROM| +|3.2 |2022-12-13 |Support for SST28SF flash| +|3.3 |2022-12-14 |Support 29C0x0 flash| +| |2022-12-23 |Documentation for TommyPROM32 PCB| +|3.4 |2024-04-09 |Support 2316,2332, and 2364 mask-programmed ROMs| +|3.5 |2024-04-12 |jcranes's updates to CLI for better parameter defaults and additional error checking.| + + + diff --git a/schematics/TommyPROM-schematics/TommyPROM-schematics.kicad_pcb b/schematics/TommyPROM/TommyPROM-schematics.kicad_pcb similarity index 100% rename from schematics/TommyPROM-schematics/TommyPROM-schematics.kicad_pcb rename to schematics/TommyPROM/TommyPROM-schematics.kicad_pcb diff --git a/schematics/TommyPROM-schematics/TommyPROM-schematics.pro b/schematics/TommyPROM/TommyPROM-schematics.pro similarity index 100% rename from schematics/TommyPROM-schematics/TommyPROM-schematics.pro rename to schematics/TommyPROM/TommyPROM-schematics.pro diff --git a/schematics/TommyPROM-schematics/TommyPROM-schematics.sch b/schematics/TommyPROM/TommyPROM-schematics.sch similarity index 100% rename from schematics/TommyPROM-schematics/TommyPROM-schematics.sch rename to schematics/TommyPROM/TommyPROM-schematics.sch diff --git a/schematics/TommyPROM-schematics/TommyPROM-schematics.zip b/schematics/TommyPROM/TommyPROM-schematics.zip similarity index 100% rename from schematics/TommyPROM-schematics/TommyPROM-schematics.zip rename to schematics/TommyPROM/TommyPROM-schematics.zip diff --git a/schematics/TommyPROM-schematics/fp-info-cache b/schematics/TommyPROM/fp-info-cache similarity index 100% rename from schematics/TommyPROM-schematics/fp-info-cache rename to schematics/TommyPROM/fp-info-cache diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_Cu.gbl b/schematics/TommyPROM/plot/TommyPROM-schematics-B_Cu.gbl similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_Cu.gbl rename to schematics/TommyPROM/plot/TommyPROM-schematics-B_Cu.gbl diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_Mask.gbs b/schematics/TommyPROM/plot/TommyPROM-schematics-B_Mask.gbs similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_Mask.gbs rename to schematics/TommyPROM/plot/TommyPROM-schematics-B_Mask.gbs diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_SilkS.gbo b/schematics/TommyPROM/plot/TommyPROM-schematics-B_SilkS.gbo similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-B_SilkS.gbo rename to schematics/TommyPROM/plot/TommyPROM-schematics-B_SilkS.gbo diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-Edge_Cuts.gm1 b/schematics/TommyPROM/plot/TommyPROM-schematics-Edge_Cuts.gm1 similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-Edge_Cuts.gm1 rename to schematics/TommyPROM/plot/TommyPROM-schematics-Edge_Cuts.gm1 diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_Cu.gtl b/schematics/TommyPROM/plot/TommyPROM-schematics-F_Cu.gtl similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_Cu.gtl rename to schematics/TommyPROM/plot/TommyPROM-schematics-F_Cu.gtl diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_Mask.gts b/schematics/TommyPROM/plot/TommyPROM-schematics-F_Mask.gts similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_Mask.gts rename to schematics/TommyPROM/plot/TommyPROM-schematics-F_Mask.gts diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_SilkS.gto b/schematics/TommyPROM/plot/TommyPROM-schematics-F_SilkS.gto similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-F_SilkS.gto rename to schematics/TommyPROM/plot/TommyPROM-schematics-F_SilkS.gto diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-NPTH-drl_map.gbr b/schematics/TommyPROM/plot/TommyPROM-schematics-NPTH-drl_map.gbr similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-NPTH-drl_map.gbr rename to schematics/TommyPROM/plot/TommyPROM-schematics-NPTH-drl_map.gbr diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-NPTH.drl b/schematics/TommyPROM/plot/TommyPROM-schematics-NPTH.drl similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-NPTH.drl rename to schematics/TommyPROM/plot/TommyPROM-schematics-NPTH.drl diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-PTH-drl_map.gbr b/schematics/TommyPROM/plot/TommyPROM-schematics-PTH-drl_map.gbr similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-PTH-drl_map.gbr rename to schematics/TommyPROM/plot/TommyPROM-schematics-PTH-drl_map.gbr diff --git a/schematics/TommyPROM-schematics/plot/TommyPROM-schematics-PTH.drl b/schematics/TommyPROM/plot/TommyPROM-schematics-PTH.drl similarity index 100% rename from schematics/TommyPROM-schematics/plot/TommyPROM-schematics-PTH.drl rename to schematics/TommyPROM/plot/TommyPROM-schematics-PTH.drl