First I have to announce that the NMI generator could not be realized, will post some information about it later in the other "Houston" thread.

As alternative I plan to develop a new video "deluxe" board with a frame buffer in a memory and generate a picture from memory which will be updated with valid video frames. This will stop flickering of the ZX80 on one hand and allow new increase in program speed on the other hand. And I plan to support either composite video and VGA interface. This will be probably new and available in autum I think and can be used for all ZX80 or ZX81 (not just for this ZX80Core board).
Today the last tests with EEPROM and inboard programming are passed.
The board supports either 28C64 or 28C256 EEPROMs from Atmel, compatible to the 27C... EPROM series.
The EEPROM needs software protection because due to some strange concepts in ZX81 ROM there is a trial of rewriting the first bytes of the ROM when using the floating point stack under several conditions. The PRINT command can crash the system easily. But this is not persistent, after restart the systems starts up again due to software protection of the EEPROM. To avoid this, the /WR signal can be overdriven by a hex code switch (ROM switch easily). Switch positions for operation should be 4,5,6,7 and C,D,E,F depending on EEPROM size. This activates a hardware write protection. These restrictions apply to ZX81 only, I think for the ZX80 there are no restrictions at all because there is no floating point stack trying to overwrite ROM content.
The EEPROMs can be reprogrammed inboard with switch positions 0,1,2,3 and 8,9,A,B and this can be done with a simple loader program. The commands LOAD "", executing USR routines with RAND USR and screen display with RST $10 are working without hardware protection.
Here is a small program for rewriting single bytes or byte sequences up to 64 byte (written with ZX-IDE):
Code: Select all
format zx81
;labelusenumeric
;LISTOFF
; hardware options to be set and change defaults in ZX81DEF.INC
MEMAVL = MEM_16K ; can be MEM_1K, MEM_2K, MEM_4K, MEM_8K, MEM_16K, MEM_32K, MEM_48K
; default value is MEM_16K
DFILETYPE EQU EXPANDED ; COLLAPSED or EXPANDED
STARTUPMSG EQU 'CREATED WITH ZX81-IDE' ; any message will be shown on screen after loading, max. 32 chars
include 'SINCL-ZX\ZX81.INC' ; definitions of constants
;LISTON
;AUTORUN:
1 REM _noedit EEPROM 28C64 TEST
10 REM _asm
LD DE,$1E00 ; char table in ROM
LD A,$FF ; new data
CALL ee_writebyte ; write byte in A to DE
LD DE,$1E00 ; char table in ROM
LD HL,buffer ; buffer with data to write/copy
LD BC,8 ; length of buffer/data
CALL ee_writebytes ; write block
LD HL,$1E00 ; char table in ROM
CALL debugs ; debug on screen
RET
buffer:
dbzx 'ZX80CORE' ; data for char table test
buffer_end:
END _asm
20 RAND USR #10
REM ASM DEBUG LIB
REM _asm
printh: ; print hex byte on screen
LD D,$0F ; for mask of nibble
LD E,A ; save A for later use
RRCA ; shift high nibble to right first (4x)
RRCA
RRCA
RRCA
AND D ; mask hex digit 0-F
ADD A,,'0' ; make printable char 0-F
RST $10 ; print char on screen
LD A,E ; restore A
AND D ; now mask low nibble
ADD A,,'0' ; make printable char 0-F
RST $10 ; print char on screen
RET
printh8: ; print 8 hex bytes on screen
LD B,8 ; number of chars to print
.loop: LD A,(HL) ; get value
CALL printh ; print hex char
XOR A ; load space
RST $10 ; print space
INC HL ; next char
DJNZ .loop ; loop
RET
debugl: ; debug one screen line with printable chars
CALL printh8 ; print 8 bytes as hex values
LD DE,-8
ADD HL,DE ; restore HL
LD B,8 ; 8 chars to print
LD C,$40 ; no chars with bit 6 high !
.loop: LD A,(HL) ; load char
LD E,A ; save A
AND C ; mask printable chars
LD A,,'.' ; display . for unprintable char
JR NZ,@f ; test
LD A,E ; restore A if printable
@@: RST $10 ; print char on screen
INC HL ; next char
DJNZ .loop ; loop
RET
debugs: ; debug screen (debug monitor)
LD B,16 ; 16 lines to print
.loop: PUSH BC ; save counter
CALL debugl ; print debug line
POP BC ; restore counter
DJNZ .loop ; loop
RET
ee_writebytes:
LD B,0 ; check BC <= 64
LD A,C
CP 65
JP P,@f
AND A ; check BC != 0
JR Z,@f
CALL ee_enable ; enable EEPROM for write
LDIR ; write data block
CALL ee_writetimer ; start write timer
@@: RET
ee_writebyte:
PUSH AF ; save A
CALL ee_enable ; enable EEPROM for write
POP AF ; restore A
LD (DE),A ; write byte
CALL ee_writetimer ; start write timer
RET
ee_enable: ; sequence for enable write modus
LD A,$AA ; see datasheet Atmel 28C64
LD ($1555),A
LD A,$55
LD ($0AAA),A
LD A,$A0
LD ($1555),A
RET
ee_writetimer: ; timer for write (10ms)
LD C,10
.loop: LD B,0
@@: DJNZ @b ; 256 * 4us (13 clock cylces à 0.3 us) = 1ms
DEC C
JR NZ,.loop ; wait 10 x 1ms
RET
END _asm
include 'SINCL-ZX\ZX81POST.INC' ; include D_FILE and needed memory areas
assert ($-MEMST)<MEMAVL
; end of program
The function ee_writebyte writes a single char in the EEPROM, ee_writbytes writes a small block of up to 64 following chars/values in the EEPROM.
Here the char space was overwritten via ee_writebyte with $FF which is a overline instead of a space:
Here the function ee_writebytes did write the string ZX80CORE in the first chars ($1E00) which produced a mystic sign in char set.

So now the board is finished and will be available soon (about 3 weeks).

Anybody interested please write me a PN so that I can count the approximate pieces needed. I will do a few more as well.
The price for the board will be EUR 25.00 (approx. 21.00 GBP).