ZX80 Core - new ZX80 motherboards

Any discussions related to the creation of new hardware or software for the ZX80 or ZX81
Post Reply
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by PokeMon »

So news from the ZX80Core. The development /test phase is closed now. There are some compatibility tests next week with an original ZX80 case to detect eventually mechanical problems. So that the board can be placed exactly in the case and position of all connectors do match.

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
Another attempt of writing complete rom image failed due to a programming error but is possible in same way. Will publish a program for writing complete 8k image. The EEPROMs can be written with 64 byte block with 10ms timeouts, so 8k can be written within 1.5 seconds (needs 16k RAM).

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:
IMG_6380k.JPG
IMG_6380k.JPG (240.75 KiB) Viewed 3802 times


Here the function ee_writebytes did write the string ZX80CORE in the first chars ($1E00) which produced a mystic sign in char set. :shock:
IMG_6381k.JPG
IMG_6381k.JPG (322.24 KiB) Viewed 3802 times

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

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).
Rink
Posts: 165
Joined: Wed Jun 27, 2012 5:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by Rink »

So happy that you're 28 series compatible!!! :D
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by PokeMon »

Here are some pics from tests made with the ZX80Core and a real ZX80 case. Thanks to Mathias. ;)

http://www.zx-museum.de/zx80core/

There are some holes which should be drilled a little bit bigger and some hints to respect when mounting in the original case.
But all in all looks good. 8-)
sirmorris
Posts: 2811
Joined: Thu May 08, 2008 5:45 pm

Re: ZX80 Core - new ZX80 motherboards

Post by sirmorris »

Glamorous!
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by PokeMon »

Here are the pics of the new board:

Frontside
ZX80CORE_Frontk.jpg
ZX80CORE_Frontk.jpg (287.58 KiB) Viewed 3637 times

Backside
ZX80CORE_Backk.jpg
ZX80CORE_Backk.jpg (218.25 KiB) Viewed 3637 times
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by PokeMon »

And here a picture with nearly complete components.
Only keyboard and TV modulator / chinch connector are missing.
You can choose between either using the ASTEC modulator or composite video via chinc.
The board is completely compatible to the original ZX80 case (mounting and connectors).
ZX80CORE_Live1k.jpg
ZX80CORE_Live1k.jpg (276.75 KiB) Viewed 3637 times

It is recommendable to use the ZX8-CCB module which can be used together with the modulator as well to have a really nice picture over TV / RF as well.
I made a special hack to use both signals over the modulator chinch out.
Due to some problems I needed a switch which is soldered to the ZX8-CCB module.
ZX80CORE_MODCCBSpeck.jpg
ZX80CORE_MODCCBSpeck.jpg (177.03 KiB) Viewed 3637 times


And I can recommend also these SMD switches for the keyboard. Really easy type feeling like a PC keyboard. You just need a laminated paper with a keyboard print on it rather than the original keyboard membrane (which can be used as well either with or without SMD switches).
ZX80CORE_KEYB3k.jpg
ZX80CORE_KEYB3k.jpg (164.14 KiB) Viewed 3637 times
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZX80 Core - new ZX80 motherboards

Post by PokeMon »

So I have to translate the written manual to the ZX80CORE (which is in german) and you can be ready to order in the next 1 or 2 days. ;)
gozzo
Posts: 452
Joined: Fri Jul 08, 2011 8:52 pm

Re: ZX80 Core - new ZX80 motherboards

Post by gozzo »

Will these be available from 'sellmyretro' or direct from you, as I am interested in one (plus the CCB board!)
Mike3
Posts: 83
Joined: Tue May 13, 2008 1:58 am
Location: Charleston, South Carolina USA

Re: ZX80 Core - new ZX80 motherboards

Post by Mike3 »

I would like to buy direct as the shipping seems to be cheaper from PokeMon location..

regards.. mike
XorA
Posts: 98
Joined: Thu May 10, 2012 9:14 am
Location: Glasgow, Scotland, UK
Contact:

Re: ZX80 Core - new ZX80 motherboards

Post by XorA »

Will I be able to plug my one of my Memotech Memopak Keyboards into this and it just work?
Post Reply