EPROM 2708/2704
Last revision of this page: February 2, 2025

- My Programmers
- Pin Overview
- 2708
- 2704
- Programming Parameters
- Cromemco 8k
- SSM-PB1
- Information
- Downloads
- References
My Programmers



Pin Overview
The following overview by Wolfgang Wrobel is only a small excerpt and simply awesome.

Make sure that the EPROM is in the correct position in the programming device (pin 1). If the EPROM is inserted incorrectly, the +12V voltage at pin 19 will destroy it.
The 2708 EPROM can be programmed with Matt Millman's HVEPROM project, the Cromemco 8K Bytesaver and the Solid State Music - PB1.
2708
Alternatives
F2708, MB8518, SFF71708, MCM2708, MCM68708, MM2708, NTE2708, MSM2708, TMS2708, MSM3758, CDP1834, U505, U555, K573РΦ1, K573RF1, 74S2708, 74S3708, 93461C, HM7608, 6384, 6385, MCM82708, uPB417, 29635, 82S2708, TBP28S2708 [1]
Examples

USSR/CCCP K573РΦ1/K573RF1
The following U555C EPROMs from the former GDR are characterised by the fact that they do not use the usual clear and transparent quartz glass for the erase window. It is very opaque and has a roughened surface. However, the EPROMs are erased perfectly in a UV eraser (Siemens Simatic 6ES5985-0AA11) from back then at 20 minutes.

U555M - MME

2704
Alternatives
2704, CDP1832 [1]
Strictly speaking, the CDP1832 is not an alternative because it cannot be programmed electrically by the user. It is pin-compatible with the 2704 but a so-called mask-programmed ROM, also called factory programmed ROM.
Examples

On eBay the 2704 EPROMs were currently (Nov 2023) offered for $300/pcs and more! Crazy!
So far I did not find any 2704 EPROM for a reasonable price. On eBay these EPROMs were currently (Nov 2023) offered for $300 to 700/pcs and more! Crazy! But it does not matter, because the 2708 and 2704 are pin compatible - except for pin 21 (GND/A9), so just duplicate the 2704 ROM image and program it to a 2708.
Programming Parameters
Basicall the 2708 und 2704 have the same programming parameters.
N • tpw = 100 ms
0,1 ms < tpw < 1 ms
Tp min = 1024 x 100 ms = 102.4 s
N = programming loops
tpw = program pulse width
Tp = programming time
[4]
Always start with 60 ms or loops. With the TMS you should always start with 100 (my experience).
2708
I have two HVEPROM programmers. Model 1 (left) is the original model, model 2 is an SMD version. Actually both should work the same, but they don't. With model 1 I can program the TMS and MM EPROMs, but not the K573РΦ1 and U555C. With model 2 it is the other way around, K573РΦ1/U555C yes, but TMS/MM no. I have no idea why this is the case. It may be the 25V programming voltage.

Model 1: In contrast to the 60/100 programming loops (with 1 ms) mentioned above, fewer seem to be sufficient for the GDR and USSR/CCCP EPROMs; I was successful with 30 loops.
- TMS2708
- model 1
- tpw: 1 ms
- N: > 100
- MM2708
- model 1
- tpw: 1 ms
- N: > 60
- K573РΦ1 (USSR)
- model 1
- tpw: 1 ms
- N: 50
- Oops, I had success with even 1 loop!
- U555C (GDR)
- model 1
- tpw: 1 ms
- N: 50
- I had success even with 30 loops.
Basically all my 2708 EPROMs work (fine) with Matt Millmans HVEPROM project (see above) and the Cromemco 8K Bytesaver.
2704
Same as 2708.
Cromemco 8K Bytesaver
BYTESAVE
What good is the best EPROM programmer if you don't have the appropriate program for programming? And here Martin Eberhard has done an excellent job. His program BYTESAVE can be used for the following Cromemco S-100 boards:
- 8K Bytesaver
- 8K Bytesaver II
- 32K Bytesaver
I am currently using the Bytesaver in my N* Horizon with the Vector 4.0C monitor. Therefore the memory areas B and E are a no-go. This leaves only C000-DFFF, since a contiguous 8K area is needed. Thus only a 48K CP/M can be used.
The following are the start addresses for the corresponding EPROM positions.
- C000 (- C3FF) - outside right
- C400 (- C7FF)
- C800 (- CBFF)
- CC00 (- CFFF)
- D000 (- D3FF)
- D400 (- D7FF)
- D800 (- DBFF)
- DC00 (- DFFF) - outside left


---------------------------------------------------------------------
My screen dump on the N* Horizon with comment(s) in [brackets]
---------------------------------------------------------------------
--VECTOR GRAPHIC MONITOR VERSION 4.0C--
(Ported to North Star Horizon)
[the 2708.bin file is yet missing; I copied it later with PCGET]
Mon> BOOT DISK
CP/M2 on North Star
48K Vers 2.23a DQ
(C) 1981 Lifeboat Associates
A>dir
A: MOVCPM COM : CONFIG COM : ASM COM : COPY COM
A: FORMAT COM : FILECOPY COM : DDT COM : ED COM
A: LOAD COM : PIP COM : STAT COM : SYSGEN COM
A: SAVEUSER COM : SETCPM COM : SUBMIT COM : XSUB COM
A: DUMP COM : BYTESAVE COM : MEMR COM : MEMR DOC
A: PCGET COM : PCPUT COM : DISKDEF LIB : READ-ME DOC
A: PC2FLOP COM : LS COM : FLOP2PC COM : NSWP COM
A: BYTESAVE ASM
A>bytesave
===========================================
= BYTESAVE EPROM Programmer/Reader/Editor =
= For the various Cromemco Bytesavers =
= Vers. 1.02 May, 2019 by M. Eberhard =
===========================================
Original Bytesaver selected
EPROM Type: 2708
No bank select for this programmer
[load 2708.bin from file into the buffer]
>BL 2708
Target address offset: 0000
Error: Buffer overflow
1024 bytes loaded into buffer
[set the address of the EPROM to program]
[I use a N* with the Cro-8K at C000 (0-1-1)]
[here: C000 + 0400; 8K = 0400; the 2nd bank]
>PA c400
Programmer address: : C400
[compute EPROM checksum]
>ES
Byte count: 0400
EPROM checksum: 00
[blank-check EPROM ]
>EB
Byte count: 0400
Total errors: 0
[30 ms programming time per byte; default is 60 ms]
[30 ms works fine with my U555C]
>MS 30
??? ergänzen
[display BYTESAVE settings]
>SE
Original Bytesaver selected
EPROM Type: 2708
No bank select for this programmer
Programmer address: : C400
2704/08 programming time: 30 mS/Byte
Target address offset: 0000
[For a binary file, the target address address offset allows you to
position the code within an EPROM. For example, if you had a 256 byte
chunk of code from a 1702a and you wanted it in the top 256 bytes of
the (2708) EPROM, you’d specify “AO 0300”; by Mike Douglas]
[start program EPROM from buffer]
>EP
Byte count: 0400
EPROM Power on, ready (Y/N)? y
Programming..............................
Verifying
Total errors: 0
[display buffer]
>DB
0000: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
0010: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
0020: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
0030: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
0040: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
0050: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
0060: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
0070: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
0080: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
0090: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
00A0: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
00B0: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
00C0: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
00D0: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
00E0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
00F0: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
-Space to continue, Q to quit-
0100: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
0110: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
0120: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
0130: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
0140: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
0150: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
0160: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
0170: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
0180: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
0190: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
01A0: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
01B0: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
01C0: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
01D0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
01E0: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
01F0: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
-Space to continue, Q to quit-
0200: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
0210: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
0220: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
0230: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
0240: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
0250: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
0260: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
0270: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
0280: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
0290: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
02A0: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
02B0: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
02C0: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
02D0: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
02E0: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
02F0: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
-Space to continue, Q to quit-
0300: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
0310: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
0320: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
0330: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
0340: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
0350: 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 34 4444444444444444
0360: 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 35 5555555555555555
0370: 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 6666666666666666
0380: 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 37 7777777777777777
0390: 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 38 8888888888888888
03A0: 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 9999999999999999
03B0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0000000000000000
03C0: 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 1111111111111111
03D0: 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 2222222222222222
03E0: 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 3333333333333333
03F0: 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 5F 45 4F 46 _____________EOF
Buffer checksum: ED
---------------------------------------------------------------------
reboot the N* Horizon
---------------------------------------------------------------------
--VECTOR GRAPHIC MONITOR VERSION 4.0C--
(Ported to North Star Horizon)
Mon> ASCII DUMP C400 C7FF
ADDR 0 . . . 1 . . . 2 . . . 3 . . .
C400 1111111111111111222222222222222233333333333333334444444444444444
C440 5555555555555555666666666666666677777777777777778888888888888888
C480 9999999999999999000000000000000011111111111111112222222222222222
C4C0 3333333333333333444444444444444455555555555555556666666666666666
C500 7777777777777777888888888888888899999999999999990000000000000000
C540 1111111111111111222222222222222233333333333333334444444444444444
C580 5555555555555555666666666666666677777777777777778888888888888888
C5C0 9999999999999999000000000000000011111111111111112222222222222222
C600 3333333333333333444444444444444455555555555555556666666666666666
C640 7777777777777777888888888888888899999999999999990000000000000000
C680 1111111111111111222222222222222233333333333333334444444444444444
C6C0 5555555555555555666666666666666677777777777777778888888888888888
C700 9999999999999999000000000000000011111111111111112222222222222222
C740 3333333333333333444444444444444455555555555555556666666666666666
C780 7777777777777777888888888888888899999999999999990000000000000000
C7C0 111111111111111122222222222222223333333333333333_____________EOF
Mon>
Result: Programming a 2708 EPROM with the "Cromemco Bytesaver 8K" and the program BYTESAVE worked!
MEMON/80
And once again the name Martin Eberhard crops up.


Solid State Music - PB1
There are a total of three variants to choose from.
SSM Source Code
;A SIMPLE ROUTINE FOR PROGRAMMING 2708'S
;COPYRIGHT BY SOLID STATE MUSIC, 1978
;REGISTER USAGE:
;REG.A....PASS DATA FROM MEMORY TO THE PROGRAMMER
;REG.B....REPEATED PROGRAMMING CYLES
;REG.DE...PROM CARD ADDRESS
;REG.HL...DATA ADDRESS TO BE COPIED
LOC EQU 100H
;SET THESE EQUATES TO MATCH YOUR CONFIGURATION
PROM EQU 0D000H ;PROGRAMMING SOCKET
RAM EQU 0C000H ;DATA TO BE COPIED
CPORT EQU 10H ;CONTROLPORT FOR PB1
MONIT EQU 0E000H ;EXIT ADDRESS SET BY USER, VECTOR 4.0C
ORG LOC
;START OF PROGRAM
;INITIALIZE BOARD
PROG0: MVI A,01 ;01=2708
OUT CPORT ;RESET BOARD
;SET UP PARAMETERS
;NUMBER OF PROGRAMING CYCLES
MVI B,64H ;50-255 FOR 2708, 64H=100D
;NUMBER OF BYTES =256(C+1)
; =256x4=1024 or 1KB
MVI C,03 ;03=2708
;SET UP ADDRESS FOR TRANSFER
PROG1: LXI D,PROM
LXI H,RAM
;PROGRAM THE EPROM
PROG2: MOV A,M
STAX D
INX D
INX H
MOV A,D
ANA C
ORA E
JNZ PROG2
DCR B
JNZ PROG1
DCX D
LDAX D ;RESET PB1
JMP MONIT ;BACK TO MONITOR
;END OF PROGRAM
END
Programming with DDT

And here is a screendump. Have a look at lines 26, 27 and 36. Load the EPROM file as HEX and put it at address 0200. Start programming with G100. Why this works you can see at lines 56. Smart!

SSMPB1 by Martin Eberhard and Mike Douglas
;======================================================
; SSMPB1 by Martin Eberhard and Mike Douglas
;======================================================
; SSMPB1 is a menu-driven EPROM Programmer/Reader/
; Editor program for the Solid State Music PB1
; EPROM board running in a CP/M 2.x sytstem.
; See the Help screen for a list of supported
; commands.
;
; Based on the configuration of your PB1 board, set
; the programming socket address and the command
; port I/O address in the equates below, PGMADR and
; CMDPORT.
;
; Command Line Scripts
;
; An initial list of commands may be specified on the
; command line that invokes SSMPB1. SSMPB1 commands
; on the command line are separated by commas. These
; commands will be executed before allowing user input
; from the SSMPB1 prompt. Any errors encountered while
; executing a command line script will terminate
; processing the remainder of the script. Example:
;
; SSMPB1 HA MYFILE,EP,QU
;
; This example will load the file MYFILE.HEX into the
; buffer, automatically setting the address offset. It
; will then program the EPROM from the buffer (after
; prompting the user to install the EPROM etc.), and
; then quit to CP/M.
;
; Screen Sizes
;
; SSMPB1 supports both a 16X64 screen and a 24X80
; (or larger) screen, selected with the SS command.
; At 16X64, the DB command does not display the ASCII
; values of the buffer data, since the screen is not
; wide enough.
;
; You will need a version of CP/M that avoids the
; memory space that you have allocated to the programmer
; and still leaves at least 14K of free RAM starting at
; address 100h.
;
;
; * Assemble with Digital Research's ASM assembler
; * Requires about 14K of RAM, starting at 0100h
;
;======================================================
; Revision History:
; 1.00 18 May 2019 M. Douglas
; Ported from M. Eberhard's BYTESAVE v1.01.
;======================================================
Information
- Wolfgang Robel (2014): Pin assignment overview.
- 8-Bit-Museum.de: ROM, PROM, EPROM overview.
Downloads
- PROGRAMMER SOFTWARE SSM - PB1 - CP/M UNDER DDT
- PROGRAMMER SOFTWARE SSM - PB1 - MIKE DOUGLAS, MARTIN EBERHARD
References
- (↑) https://8bit-museum.de/sonstiges/hardware-projekte/supported-ics/
- (↑) Wolfgang Robel, pin assignment overview, 2014
- (↑) eBay sales picture
- (↑) Niklisch, Gerhard & Winter, Wolfgang; Programmieren von EPROMs, radio fernsehen elektrotechnik, 30(1981), page 177
- (↑) http://www.cpu-zone.com/2704.htm
- (↑) MEMON/80 USERS MANUAL, Version 3.05, 12 March 2022, Martin Eberhard