Bootstrap
logo EPROM

EPROM 2708/2704

Last revision of this page: February 2, 2025

My oldest and my most valuable 2708 EPROM

My Programmers

Batronix-Barlino II <-- Galep 5 --> HVEPROM project v1
Cromemco 8K Bytesaver
Solid State Music - PB1

Pin Overview

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

Pin assignment overview [2]

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

Texas Instruments TMS2708
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.

German Democratic Republic (GDR)
U555M - MME
National Semiconductor - MM2708

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

Intel C2704, D2708 [5]

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.

(1) orig version < -- HVEPROM (V1) --> SMD version (2)

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.

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:

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.

  1. C000 (- C3FF) - outside right
  2. C400 (- C7FF)
  3. C800 (- CBFF)
  4. CC00 (- CFFF)
  5. D000 (- D3FF)
  6. D400 (- D7FF)
  7. D800 (- DBFF)
  8. DC00 (- DFFF) - outside left
Bytesave EPROM Programmer
Bytesave EPROM Programmer - Intro
Bytesave EPROM Programmer
Bytesave EPROM Programmer - Help Menu

---------------------------------------------------------------------
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.

Programming an 2708 with MEMON/80 [6]
Programming an 2708 with MEMON/80 [6]

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

Programming an 2716 via 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!

Programming an 2716 with DDT

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

Downloads

References

  1. (↑) https://8bit-museum.de/sonstiges/hardware-projekte/supported-ics/
  2. (↑) Wolfgang Robel, pin assignment overview, 2014
  3. (↑) eBay sales picture
  4. (↑) Niklisch, Gerhard & Winter, Wolfgang; Programmieren von EPROMs, radio fernsehen elektrotechnik, 30(1981), page 177
  5. (↑) http://www.cpu-zone.com/2704.htm
  6. (↑) MEMON/80 USERS MANUAL, Version 3.05, 12 March 2022, Martin Eberhard