ZXblast - ZX81 memory extension plus USB

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: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

Some more technical details:

There are unfortunately a few conceptional restrictions in addressing the ZXblast hardware which showed up later and refers to the I/O usage. The concept was taken from the ZXmore but I did overlook that the addresses with A0 and A1 can not be locked when using them together with the third (configurable) address line. The ZX81 hardware does react on all action with A0=0 or A1=0. The third address line can be choosed from A3/A4/A5/A6/A7 while the default is A3 resulting in possible io addresses $F4,$F5,$F6,$F7. Due to this circumstance I used a workaround while writing to internal registers using IN instructions like IN A,(C). This looks crazy but works reliable.

Here is a list of all used addresses and bound functions. Due to another restriction (available pins) registers can be written to with 4 bit size only while using address lines A12-A15. So as there are more registers to be used for configuration, there is a mechanism to change the target register (RAM register) to additional internal registers.

Code: Select all

OUT $FF (end vsync )
OUT $FE (NMI on)
OUT $FD (NMI off)
IN $FE (read keyboard)
...
IN $F5 (write to instance RAM register)
IN $F6 (write to instance ROM register)
IN $F7 (read USB)
OUT $F7 (write USB)
IN $FD (select internal register/switch instance RAM register)
Here is a list of all available registers and functions - all functions are high active, activated with bit set to 1:
$00=RAM instance register (switch instance RAM)
Bit 7 ($80) = switch off NMI control / ZXblast control
$70=ZXblast
$60=instance 1
$50=instance 2
$40=instance 3
$30=instance 4
$20=instance 5
$10=instance 6
$00=instance 7

$10=control register
bit 4=RAM active in area $2000-$3FFF
bit 5=A15 mirror on (restricted to 16k ROM/16k RAM)
bit 6=activate paging
bit 7=page size 16k (default 8k)

$20=ram layout register - activate RAM in main memory area (0=ROM, 1=RAM)
bit 4=$0000-$3FFF
bit 5=$4000-$7FFF
bit 6=$8000-$BFFF
bit 7=$C000-$FFFF

$30=page select register - for page 0-15
$00-$F0, 16 pages (8 or 16k depending on bit 7 of control register)

$40=page window address
$00=$0000
$10=$2000
$20=$4000
$30=$6000
$40=$8000
$50=$A000
$60=$C000
$70=$E000
bit 7=high bit of page select register to use page 16-31

$50=external memory register (switch off address are completely for compatibility)
bit 4=$2000-$3FFF
bit 5=$8000-$BFFF
bit 6=$C000-$FFFF
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

Finally some code examples for ZXblast action controlled from user programs (most features can be configured via onScreen menu).

switch on ram in 8k area ($2000-$3FFF)

Code: Select all

LD      C,$F5
HALT
LD      A,$10
IN      A,($FD)
LD      B,$10
IN      A,(C)
LD      A,$00
IN      A,($FD)
The HALT instruction is used for synchronization as a NMI should not occur when switching the internal target register (RAM/control register). First the config register is selected, second the control register bit 4 is set and finally target register is switched back to RAM.

configure paging

Code: Select all

LD      C,$F5
HALT
LD      A,$40
IN      A,($FD)
LD      B,$60
IN      A,(C)
LD      A,$10
IN      A,($FD)
LD      B,$C0
IN      A,(C)
LD      A,$00
IN      A,($FD)
First, address area $C000 is used as window address, second paging and page size 16k is selected in control register.

change page

Code: Select all

LD      C,$F5
HALT
LD      A,$30
IN      A,($FD)
LD      B,$10
IN      A,(C)
LD      A,$00
IN      A,($FD)
Choose the second page ($10) to be used.

switch off paging in general

Code: Select all

LD      C,$F5
HALT
LD      A,$10
IN      A,($FD)
LD      B,$00
IN      A,(C)
LD      A,$00
IN      A,($FD)
Reset paging bit in control register.

switch off NMI control through ZXblast (does not switch off nmi in general, display still active)

Code: Select all

LD      C,$F5
HALT
LD      B,$E0
IN      A,(C)
switch on NMI control through ZXblast

Code: Select all

LD      C,$F5
HALT
LD      B,$60
IN      A,(C)


In general all register can be written to only and not be read. It is recommended to use a page of the ZXblast RAM to mirror register settings for other instances or programs. Finally some speed aspects. ZXblast does use a bit of the power of ZX81 and slows it down a little bit. This was optimized as best as possible and CLCKFREQ.p showed a resulting speed of 97.7% - so about 2% of speed is lost. Control is taken through the first NMIs after a vsync occurred. In best case only 2 NMIs are taken, if keyboard is used and keystrokes are to be processed this may take up to 8 or 10 NMIs for two or three frames only.
User avatar
mrtinb
Posts: 1911
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXblast - ZX81 memory extension plus USB

Post by mrtinb »

Thanks. Very exciting. Will it work with Wilf's RAMDOS2?
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

Well I don't know RAMDOS2 but as there was never a standard about paging memory and even software using this is quite rare - it is unlikely that it will work without adaption. Paging is a feature but not the main feature, it is a nice add-on, mostly useful for developers I think.

Mainly ZXblast is easy to be used as software-configurable RAM device allowing to show or hide RAM or ROM for typical configurations and to LOAD and SAVE on a USB flash media stick. Maybe access to a fast and storage media with large capacities is the main benefit for ZXblast. It is in these words more or less a combination of a memory extension plus storage device.
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

So the ZXblast is ready to be ordered now. Items will be shipped after christmas but probably this year depending on your desires. There are enough boards here and enough parts for it but if you need as well the ZX extender board I have to wait for the next batch of pcb's. In worst case it could be first january week if the ZX Extender boards are needed. If you prefer the simple ZX edge connector it will be right after christmas, if you want a through connector for additional devices to be connected it's a few days more.

As I am in a small christmas/family holiday for one week from tuesday on, orders will be processed after 28th of december. But it is possible to preorder now and for all orders this year there will be a discount of EUR 5.00/GBP 4.50 for the early birds. It will be listed at sellmyretro then from 2017 on which is not far to way. For preorders please send me a PM with your desires and your address.

Image

This is a picture of the ZXblast consisting of the pcb board, USB controller chip (on the backside), CPLD, 512k Flash ROM, 512k RAM, RTC (realtime clock), battery+holder, sockets, all connectors and pin headers, heatsink and all other needed parts for it. There are two versions of assembly kit with 128k RAM
for EUR 34.90/GBP 31.40 and 512k for EUR 39.90/GBP 35.90. This contains the ZX edge connector or a right-angled VG64 connector (DIN 41612) to be used with the ZX Extender board (not included in price). So including the early bird discount it is in fact EUR 29.90/GBP 26.90 for the 128k version or EUR 34.90/GBP 31.40 for the 512k version. If there is anybody preferring a completed ZXblast (soldered and tested) this is additional EUR 5.00/GBP 4.50. So self soldering is not saving money but also more fun if you are a bit experienced. The USB controller chip as only SMD part is pre soldered.

If you want the through connector you need the ZX Extender board which includes the VG64 (DIN 41612) female connector to just click both together. This is shown in the picture below while two other modules are shown (ZeddyNet and PIO card) which can be changed. There are different modules using the ZX bus with the 64 pin connectors. The ZX extender board is available for EUR 6.00/GBP 5.40 as assembly kit or EUR 7.50/GBP 6.70 soldered including the middle connector not shown on this picture. There is no case available right now - I am thinking of something modular and cheap acrylic to keep it a bit dust proof, we will see next year.
Bildschirmfoto 2016-12-18 um 00.13.41.png
Bildschirmfoto 2016-12-18 um 00.13.41.png (888.82 KiB) Viewed 4193 times
So here are the final prices, in brackets are the preorder prices.

ZXblast 128k assembly kit EUR 34,90/GBP 31.40 (EUR 29,90/GBP 26.90)
ZXblast 512k assembly kit EUR 39,90/GBP 35.90 (EUR 34,90/GBP 31.40)

ZXblast 128k complete (soldered) EUR 39,90/GBP 35.90 (EUR 34,90/GBP 31.40)
ZXblast 512k complete (soldered) EUR 44,90/GBP 40.40 (EUR 39,90/GBP 35.90)

ZX Extender pcb only EUR 2.00/GBP 1.80
ZX Extender assembly kit EUR 6.00/GBP 5.40
ZX Extender complete (soldered) EUR 7.50/GBP 6.70

Shipment for EU countries and worldwide EUR 3.70/GBP 3.30.

Maybe you ask yourself, if you need the 128k version or the 512k version. If you just need a configurable memory device (up to 56k RAM) and a USB flash media for LOAD and SAVE programs and data, the 128k version is sufficient for general users. The 512k offers the feature to start different programs in parallel as with the ZXmore and to switch between them with just a keypress (double shift 1-7) without loading programs new. Just there is no multi tasking possible as it doesn't make sense to make the standard ZX81 slower than it is in general. The second is to have more memory in access through the paging feature but this is something for developers as there is no really standard for paging RAM and there is not much software out there, using this. This could be a nice feature for tracing programs when having a disassembler in parallel in another instance. So general purpose users have the chance to have more than one program in access in parallel and the feature to load different programs or instances in parallel with starting up system (similar as auto start feature). This is available for the 128k version as well but restricted on only one program/instance.

Anyway it would be possible to update the ZXblast at a later point as well.
So if you are interested in the preorder with early bird prices, please send me a PM with your requirements and your address.
dessony
Posts: 342
Joined: Tue Oct 29, 2013 2:26 pm
Location: Indiana, USA

Re: ZXblast - ZX81 memory extension plus USB

Post by dessony »

Hello Pokémon,

Can you also post a price list using American dollars?

Thank you very much in advance. :)

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

Re: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

As EUR und USD is nearly equal you can pay the EUR value in USD as well. ;)
User avatar
mrtinb
Posts: 1911
Joined: Fri Nov 06, 2015 5:44 pm
Location: Denmark
Contact:

Re: ZXblast - ZX81 memory extension plus USB

Post by mrtinb »

Hi :)

Just out of curiosity:
  • Are filenames 8 or 8.3 or long-file-names?
  • Are there support for only Basic-program, or also memory-dump-to-file (machine language, variables)?
Martin
https://zx.rtin.be
ZX81, Lambda 8300, Commodore 64, Mac G4 Cube
User avatar
blittled
Posts: 229
Joined: Fri Dec 19, 2008 3:04 am
Location: Northwestern Pennsylvania, USA

Re: ZXblast - ZX81 memory extension plus USB

Post by blittled »

Great news. :D Thanks for all your work in this Pokemon. I don't know how this slipped by my radar since I've been waiting with anticipation.
2X Timex Sinclair 1000, ZX81, ZX80Core, 5X 16K Ram Pack, ZXBlast, ZX P file to Ear Input Signal Converter, Elf II
User avatar
PokeMon
Posts: 2264
Joined: Sat Sep 17, 2011 6:48 pm

Re: ZXblast - ZX81 memory extension plus USB

Post by PokeMon »

mrtinb wrote:Hi :)

Just out of curiosity:
  • Are filenames 8 or 8.3 or long-file-names?
  • Are there support for only Basic-program, or also memory-dump-to-file (machine language, variables)?
Hi - the filenames are supported with 8.3 as standard.
There will no be no LFN (long file name) support as long as I do not a license agreement with Microsoft or I do write my own driver for this. This is not planned to do. There are workarounds with reading both formats but write only one format (8.3) as Microsoft has a patent for writing only as far as I know. :mrgreen:

But this requires at least an own driver with all overhead and possible failure problems (unreadable directory in worst case when not good programmed).
Post Reply