| Contents |
| ZX80/ZX81 |
| ZX80/ZX81 Models |
CPU: NEC P1X108-144 D780C-1 (Z80 compatible) 3.25MHz The clock frequency is gained from a high tolerance 6.5MHz chewing gum, not exactly a quartz oscillator, in fact, my oscilloscope tells me that my ZX81 is running at 3.33Mhz. Effective CPU Speed in SLOW mode (when Display is enabled) For 50Hz Display Refresh: 0.804600 MHz For 60Hz Display Refresh: 0.536400 MHz Custom: FERRANTI ULA 2C184E 8147 Combines the ZX80 video circuit in one chip, plus NMI-generator Video Tech Data Video: 32x24 Characters (256x192 pixels), 64x48 Dots Block Graphics Characters: 64 Characters, defined in ROM area Attributes: Normal and Inverted (separately for each char) Memory 8 Kbytes ROM 1 KByte RAM built-in Expanision RAM: 16KBytes (most popular) up to 56KBytes |
TK80 ZX80 clone with 4K ROM, 1K RAM, TTL-chips, without NMI
TK82 ZX80 clone with 4K ROM, 2K RAM, TTL-chips, without NMI
TK82-C ZX81 clone with 8K ROM, 2K RAM, TTL-chips, with NMI on daughterboard
TK83 ZX81 clone with 8K ROM, 2K RAM, ULA-chip, with NMI,joystick,new case
TK85 ZX81 clone with 10K ROM, 16K RAM, psg-solder-points, rubber keyb,
and other extras...
|
| ZX80/ZX81 Keyboard Assignment |
<-key-> <------------- ZX81 -----------> <------ZX80------> NORMAL COMMAND SHIFT FUNCTION GRAPHICS ZX80/CMD ZX80/SHFT 1 1 <edit> -- 1000 1 NOT 2 2 AND -- 0100 2 AND 3 3 THEN -- 0001 3 THEN 4 4 TO -- 0010 4 TO 5 5 <left> -- 0101 5 <left> 6 6 <down> -- 0011 6 <down> 7 7 <up> -- 1100 7 <up> 8 8 <right> -- 0101 8 <right> 9 9 <graphics> -- -- 9 <hide???> 0 0 <rubout> -- -- 0 <rubout> Q PLOT "" SIN 0111 NEW 1010 W UNPLOT OR COS 1011 LOAD 0011 E REM STEP TAN 1110 SAVE 1000 R RUN <= INT 1101 RUN 0100 T RAND <> RND 0110 " " 0022 Y RETURN >= STR$ 1001 REM " U IF $ CHR$ -- IF $ I INPUT ( CODE -- INPUT ( O POKE ) PEEK -- PRINT ) P PRINT " TAB -- "?" * A NEW STOP ARCSIN 2222 LIST 2222 S SAVE LPRINT ARCCOS 2200 STOP 0110 D DIM SLOW ARCTAN 0022 DIM 0010 F FOR FAST SGN 2211 FOR 0001 G GOTO LLIST ABS 1122 GO TO 2200 H GOSUB ** SQR 2222 POKE ** J LOAD - VAL -- RANDOMISE - K LIST + LEN -- LET + L LET = USR -- "?" = ENTER newline function -- newline <edit> SHIFT -- -- -- -- -- -- Z COPY : LN -- "?" : X CLEAR ; EXP -- CLEAR ; C CONT ? AT -- CLS ? V CLS / -- -- GO SUB / B SCROLL * INKEY$ -- RETURN OR N NEXT < NOT -- NEXT < M PAUSE > PI -- "?" > . , -- -- "." , SPACE BREAK pound -- 1111 BREAK pound |
| 1 2 3 4 5 6 7 8 9 0 | | Q W E R T Y U I O P | | A S D F G H J K L ENTER| |SHF Z X C V B N M . SPACE| |
ZX81 ZX80 PC EDIT NOT ! AND AND & THEN THEN # TO TO % |
| ZX80/ZX81 I/O Map |
xx0Fh.W PSG data (Bi-Pak ZON-X81 Sound) xx1Dh.R Zebra Joystick adapter xx2Fh.R Memopak I/F Centronics Interface status (IN status,[dd3Fh]);dd=data xx3Fh.R Memopak I/F Centronics Interface finish (IN dummy,[dd3Fh]) ;dd=data FF7Eh.R Lambda - read PAL/NTSC flag (A7=row) (via diode from A7 to KEYB.0) xx9Fh.W PSG index (Timedata ZXM Sound Box) xxBFh.R PSG data (Timedata ZXM Sound Box/Joystick Read) xxDFh.W PSG index (Bi-Pak ZON-X81 Sound) (default address) (sometimes CFh) xxDFh.W PSG data (Timedata ZXM Sound Box) xxDFh.R Mikro-Gen digital joystick xxDFh.R AGB - JOYSTICK II (port A) (or B ?) xxEFh.R AGB - JOYSTICK II (port B) (or A ?) xxF5h.R Lambda - toggle sound output level xxF5h.W Lambda - select charset line number (00..07) xxF6h.R Lambda - read selected charset data (8 pixels) xxF6h.W Lambda - select charset char number (00..3F) xxFBh.R Sinclair Printer Status xxFBh.W Sinclair Printer Output xxFDh.W Disable NMI (ZX81 only) xxFEh.W Enable NMI (ZX81 only) NNFEh.R Keyboard read, when NMI=Off: also enter VSYNC and set CAS.OUT=Low xxFFh.W Terminate Vsync and restart LINECNTR and set CAS.OUT=High |
0Eh.R Faulty mirror of FEh.R (used by a GRAND-PRIX game) CFh.W PSG index (Bi-Pak ZON-X81 Sound) (used accidently in Bi-Pak manual) CFh.W PSG index (Bi-Pak ZON-X81 Sound) (used by Lunar 10) FEh.W Faulty mirror of FFh.W (used by animated Space Invaders for ZX80) |
3E80h.R/W Mikro-Gen analog joystick A/D board 7FFFh.W PSG index (Quicksilva QS Sound board) 7FFEh.R/W PSG data (Quicksilva QS Sound board) |
I=00h Pseudo HiRes (Madjump II) I=08h Pseudo HiRes (Bipods, Micromouse) I=0Ch Pseudo HiRes (Rock Crush, Dans Revenge, etc.) I=1Eh ZX81 ROM Charset (or QS CHRS board RAM) I=2xh dk'tronics UDG ROM (or unknown UDG RAM) I=3xh dk'tronics UDG RAM I=40h Xtricator IM2 vector at [40FFh] (with databus assumed to be FFh) IR=x True hires bitmap address R=x Interrupt counter for "compressed" text output (INT wired to A6) R=x+EI Interrupt execution forces HSYNC (on ZX81: also resets NMI counter) |
| ZX80/ZX81 I/O Ports |
Bit Expl. 0-4 Keyboard column bits (0=Pressed) 5 Not used (1) 6 Display Refresh Rate (0=60Hz, 1=50Hz) 7 Cassette input (0=Normal, 1=Pulse) |
Port____Line____Bit__0____1____2____3____4__ FEFEh 0 (A8) SHIFT Z X C V FDFEh 1 (A9) A S D F G FBFEh 2 (A10) Q W E R T F7FEh 3 (A11) 1 2 3 4 5 EFFEh 4 (A12) 0 9 8 7 6 DFFEh 5 (A13) P O I U Y BFFEh 6 (A14) ENTER L K J H 7FFEh 7 (A15) SPC . M N B |
Bit Expl. 0 Data Request (0=Busy, 1=Ready/DRQ) 1-5 Not used 6 Printer Detect (0=Okay, 1=None) 7 Newline (0=Nope, 1=Begin of new line) |
Bit Expl. 0 Not used 1 Undoc/Speed? (0=Normal, 1=used to slow-down last 2 scanlines) 2 Motor (0=Start, 1=Stop) 3-6 Not used 7 Pixel Output (0=White/Silver, 1=Black) |
| ZX80/ZX81 Video Mode Text and Blockgraphics |
| ZX80/ZX81 Video Mode Pseudo Hi-Res Graphics |
| ZX80/ZX81 Video Mode True Hi-Res Graphics |
| ZX80/ZX81 Video Blanking and Retrace |
| ZX80/ZX81 Video Interrupts (INTs and NMIs) |
| ZX80/ZX81 Video Display Timings |
Horizontal Display 128 cycles (32 characters, 256 pixels) Horizontal Blanking 64 cycles (left and right screen border) Horizontal Retrace 15 cycles Total Scanline Time 207 cycles |
Upper Blanking 11592 cycles 56 scanlines (7 charlines) Display Area 39744 cycles 192 scanlines (24 charlines) Lower Blanking ca.11592 cycles ca. 56 scanlines (or a bit less) Vertical Retrace 1235 cycles ca. 6 scanlines |
Upper Blanking 6624 cycles 32 scanlines (4 charlines) Display Area 39744 cycles 192 scanlines (24 charlines) Lower Blanking ca. 6624 cycles ca. 32 scanlines (or a bit less) Vertical Retrace 1235 cycles ca. 6 scanlines |
Item Original ZX81 Tuned ZX81 Total scanline time 207 cycles 207 cycles NMI WAIT - 14 cycles - 0 cycles (WAITMOD by Wilf Rigter) NMI CALL 66h - 12 cycles - 12 cycles NMI handler - 32 cycles - 29 cycles (NMIPATCH by Nocash) Remaining user time = 149 cycles = 166 cycles |
SLOW, 50Hz Effective Speed 0.804600 MHz (54*2*149 cycles, 50 frames) (ori) SLOW, 50Hz Effective Speed 0.896400 MHz (54*2*166 cycles, 50 frames) (tuned) SLOW, 60Hz Effective Speed 0.536400 MHz (30*2*149 cycles, 60 frames) (ori) SLOW, 60Hz Effective Speed 0.597600 MHz (30*2*166 cycles, 60 frames) (tuned) FAST, Total CPU Speed 3.250000 MHz (display disabled) ZX80/PAUSE/INPUT 0.0 MHz (user program stopped) |
| ZX80/ZX81 Video Character Set |
____0___1___2___3___4___5___6___7___8___9___A___B___C___D___E___F____
00 SPC [' ][ '][''][. ][: ][.'][:']{::}{..}{''} " GBP $ : ? 0F
10 ( ) > < = + - * / ; , . 0 1 2 3 1F
20 4 5 6 7 8 9 A B C D E F G H I J 2F
30 K L M N O P Q R S T U V W X Y Z 3F
|
____0___1___2___3___4___5___6___7___8___9___A___B___C___D___E___F____
00 SPC " [: ][..][' ][ '][. ][ .][.']{::}{..}{''}GBP $ : ? 0F
10 ( ) - + * / = > < ; , . 0 1 2 3 1F
20 4 5 6 7 8 9 A B C D E F G H I J 2F
30 K L M N O P Q R S T U V W X Y Z 3F
|
| ZX81 Video Nonstandard UDG/CHRS Expansions |
Asteroids Centipede Defender Meteor Storm Space Invaders Character Development System (aka UDG, User Defined Graphics editor) |
Centipede Peckman (this one probably requires the Kayde-ROM with Pac-Man symbols) Space Invaders |
| ZX81 Video Nonstandard HIRES Expansions |
| ZX81 Video Nonstandard Picture Size |
Highres Chess (192 hires lines, plus 1-2 text lines) Maxdemo (splits hires/text regions) |
| ZX81 Video Nonstandard Color Expansions |
White plays 4 or CHR invested $ 160 Yellow key 5 or CHR $ 161 Light Blue plays 6 or CHR $ 162 Green light touch 7 or CHR $ 163 Fusch plays 8 or CHR $ 164 Red key 9 or CHR $ 165 Keyboard has blue or CHR $ 166 Dark gray or key B CHR $ 167 CHR turn gray or C $ 168 Kaki plays D or CHR $ 169 Cyan play E or CHR $ 170 Green plays or F CHR $ 171 Magenta G plays or CHR $ 172 Carmin playing H or CHR $ 173 And navy blue key or CHR $ 174 Black J key or CHR $ 175 |
10 PRINT CHR $ 173 20 PRINT "THREE" |
| ZX81 Joystick Expansions |
Port_Joystick_Type___________________________7_6_5_4_3_2_1_0___Data Bits___ EFFE Nocash A12 joystick (keys 6,7,8,9,0) - - - D U R L F (0=Pressed) EFFE AGF (cursor mode, A12, keys 6,7,8,0) - - - D U R - F (0=Pressed) F7FE AGF (cursor mode, A11, key 5) - - - L - - - - (0=Pressed) DFFE AGF (2nd Joystick, A13, keys Y,U,I,P) - - - D U R - F (0=Pressed) FBFE AGF (2nd Joystick, A10, key T) - - - L - - - - (0=Pressed) nnFE PC8300 (ZX81 clone using A9..A13, bit3) - - - - x - - - (0=Pressed) xx1D Zebra Joystick - - - F R L D U (0=Pressed) xxBF Timedata ZXM Sound Box, PSG Reg 14 0 F U D L R y x (0=Pressed) xxDF Mikro-Gen (Digital joystick)(Frogs) - - - F L R D U (0=Pressed) MEM Mikro-Gen (Analog joystick) F a a a a a a a (analog) MEM Quicksilva Sound Board, PSG Reg 15 ? ? ? ? ? ? ? ? (?=Pressed) ???? Microdigital TK83/TK85 (DIN socket) ? ? ? ? ? ? ? ? (?) |
IN (xxDFh) -- bits 1,2 // lunar: bit2,3,4
xx == select something ?
|
00h Axis 0 (request vertical position, and bit7=not used) 01h Axis 1 (request horizontal position, and bit7=Fire button 1=Pressed) ??h Axis 2,3 (for second joystick) (not used by any games) |
returns 7bit analog for selected axis (and bit7=fire, if any) vertical: 00h..7Fh = up..down horizontal: 00h..7Fh = left..right |
Space Invaders (Mikro-Gen) (uses analog value as screen position) Scramble (Mikro-Gen) (converts analog value to digital move/no move) Bomber (Mikro-Gen) (supports both digital and analog joysticks) Croaka Crawler (aka Hopper) (Quicksilva) |
Lunar Rescue (Mikro-Gen) Frogs (Mikro-Gen) Bomber (Mikro-Gen) (supports both digital and analog joysticks) Tempest (also does a single read from 3E80h, but otherwise supports DFh only) |
5-6-7-8-0 Joystick 1 (Cursor keys & rubout) T-Y-U-I-P Joystick 2 (same data bits as above, but other address lines) |
Reportedly: Use the $DF & $EF IN IRQ Port. Port A: Press "5" LEFT "6" DOWN "7" UP "8" RIGHT "New/Line" FIRE Port B: Press "A" LEFT "S" DOWN "W" UP "D" RIGHT "F" FIRE |
0 up (0=Pressed) 1 down (0=Pressed) 2 left (0=Pressed) 3 right (0=Pressed) 4 fire (0=Pressed) 5-7 |
1 REM 123456789 2 POKE 16514,219 DB ;\IN A,[1Dh] 3 POKE 16515,29 1D ;/ 4 POKE 16516,47 2F ;-CPL 5 POKE 16517,230 E6 ;\AND A,1Fh 6 POKE 16518,31 1F ;/ 7 POKE 16519,6 06 ;\LD B,0 8 POKE 16520,0 00 ;/ 9 POKE 16521,79 4F ;-LD C,A 10 POKE 16522,201 C9 ;-RET 20 PRINT USR 16514; |
| ZX81 Sound Expansions |
F = 1625000 Hz / 16 / nnn |
OUT (CFh or DFh),A ;index OUT (0Fh),A ;data (w) |
Cosmic (brazilian magazine Revista Micro Sistemas, Oct/1986) Lunar 10 (brazilian magazine Revista Micro Sistemas, Nov/1986) |
F = 100000 Hz / nnn ;approximately, according to manual |
OUT (159),A ;9F index ;\same addresses for ZX81 and Spectrum, ZX81 OUT (223),A ;DF data (w) ; accesses via POKE+USR, Spectrum via OUT token IN A,(191) ;BF data (r) ;/ <--- for joystick port |
Pin Bit 1 PSG.PortA.Bit5 up / forward 2 PSG.PortA.Bit4 down / back 3 PSG.PortA.Bit3 left 4 PSG.PortA.Bit2 right 5 PSG.PortA.Bit1 general purpose (usually 1) (C64: Pot Y) 6 PSG.PortA.Bit6 Fire 7 +5V 8 GND 9 PSG.PortA.Bit0 general purpose (usually 1) (C64: Pot X) |
Sound Box Super Editor (Timedata) (zxm demo tape & type-in listing in manual) |
7FFFh index (W) 7FFEh data (R/W) |
Cosmic Guerilla (Quicksilva) Croaka (aka Hopper) (Quicksilva) Defenda (Quicksilva) Space Invaders Asteroids (Quicksilva) (also supports PSG reg 15 as alternate joystick) Scramble (Quicksilva) |
But... |
| ZX80/ZX81 Memory Map and System Area |
0000-1FFF BIOS ROM (8KBytes) 2000-3FFF not used 4000-43FF Internal RAM (1 KByte) 4000-7FFF External RAM (16 KBytes) |
4000 System Area (see below) 407D BASIC Program D_FILE Video Memory (BG Map) VARS BASIC Variables E_LINE-1 Byte 80h E_LINE Input Buffer/Workspace STKBOT BASIC Calculator Stack STKEND Machine Stack/Free Memory SP Machine Stack/In Use (SP is meant to be the CPUs SP register) ERR_SP GOSUB Stack RAMTOP USR Programs (Begin of unused/reserved memory) |
Addr. Name Expl
4000 ERR_NR Errorcode-1
4001 FLAGS Various BASIC Control flags
Bit0=used (purpose unknown)
Bit1=Redirect Output to printer
Bit2=used (purpose unknown)
Bit3-5=not used
Bit6=used (purpose unknown)
Bit7=used (purpose unknown)
4002 ERR_SP Pointer to top of Machine Stack / Bottom of GOSUB Stack
4004 RAMTOP Pointer to unused/free memory (Changes realized
at next NEW or CLS)
4006 MODE Selects [K], [L], [F], or [G] Cursor
4007 PPC Line Number of most recently executed BASIC line
---Begin of Save Area---
4009 VERSN Should be 00h to identify ZX81 cassette files (FFh=Lambda)
400A E_PPC Line Number of currently selected line [>] Cursor
400C D_File Pointer to Video Memory (BG Map) / End of Basic Program
400E DF_CC Pointer to VRAM Address for PRINT
4010 VARS Pointer to BASIC Variables Area
4012 DEST Pointer to Variable when assigning a value to it
4014 E_LINE Pointer to Input Buffer/Workspace, and to --End of Save Area--
4016 CH_ADD Pointer to next interpreted character
4018 X_PTR Pointer to character prior to [S] Symbol (=Syntax Error) (or
ptr to aborted/breaked line)
401A STKBOT Pointer to BASIC Calculator Stack / End of
Input Buffer/Workspace
401C STKEND Pointer to bottom of Machine Stack / End of Calculator Stack
401E BERG Calculator B-Register
401F MEM Pointer to Calculator Memory (usually same as MEMBOT)
4021 - Not used
4022 DF_SZ Number of lines in lower display section (including 1 blank
line)
4023 S_TOP Line Number of first line for automatic LISTing
4025 LAST_K Keyboard - Recently pressed key (4025=row, 4026=shift/column)
4027 DEBOUN Keyboard - Debounce State (key release delay)
4028 MARGIN Vertical Border Height (55 lines at top/bottom for 50Hz,
31 for 60Hz)
4029 NXTLIN Address of next BASIC line which is to be executed,
pointing to a byte >=40h when stopped, indicates
autostart address in cassette files.
402B OLDPPC Line Number for CONT
402D FLAGX Various Flags
Bit0 used (purpose unknown)
Bit1 used (purpose unknown)
Bit2-4 not used
Bit5 used (purpose unknown)
Bit6 used (purpose unknown)
Bit7 not used
402E STRLEN Length of string during assignment
4030 T_ADDR Pointer to next item in Syntax Table (or INPUT's old S_POSN)
4032 SEED Random Number Seed
4034 FRAMES Decrementing Video Frame Counter (Bit15: 0=PAUSE, ie.
display ON, program PAUSEd)
4036 COORDS X-Coordinate of last PLOT, Y-Coordinate of last PLOT
4038 PR_CC Least significant byte of PRBUFF printer buffer pointer
4039 S_POSN X-Coordinate for PRINT, Y-Coordinate for PRINT
403B CDFLAG Various Flags
Bit7: Current Speed (1=SLOW (Display Enable), 0=FAST)
Bit6: Requested Speed (or old speed during
pause/cassette io, etc)
Bit5-1: Not used
Bit0: Keystroke (0=None, 1=Yes)
403C PRBUFF Printer Buffer 32 characters + NEWLINE (76h)
405D MEMBOT Default workspace for BASIC Calculator
407B - Not used (2 bytes)
|
4000..4027 System Area 4028..(4008)-1 Basic Program (4008)..(4004 or 400A)-1 VARS (4004 or 400A)..(400C)-1 Input Buffer, and probably something else ??? (400C)... VRAM ... |
4000 ERR_NR Error Number (one less than report code)
4001 FLAGS Various Flags to control BASIC System
7 1-Syntax off 0-Syntax on
6 1-Numeric result 0-String result
5 1-Evaluating function (not used)
3 1-K cursor 0-L cursor
2 1-K mode 0-L mode
0 1-No leading space 0-Leading space
4002 PPC Line number which is to be executed next (bit15: 1=stopped)
4004 P_PTR Position in RAM of [K] or [L] cursor
4006 E_PPC Line Number of current line with [>] cursor (for LIST)
4008 VARS Address of start of variables area (end of BASIC Program)
400A E_LINE Address of start of Edit Line (end of VARS) (-save area end-)
400C D_FILE Start of Display File (VRAM) (end of Edit Line/Input Buffer)
400E DF_EA Address of the start of lower screen
4010 DF_END Display File End
4012 DF_SZ Number of lines in lower screen
4013 S_TOP The number of first line on screen
4015 X_PTR Address of the character preceding the [S] marker
4017 OLDPPC Line number to which CONTINUE jumps
4019 FLAGX More flags.
7 1-K mode 0-L mode
6 1-Numeric result 0-String result
5 1-Inputting 0-Editing
401A T_ADDR Address of next item in syntax table
401C SEED The seed for the random number
401E FRAMES Count of frames shown since start-up (incrementing)
4020 DEST Address of variable in statement
---Active/Basic:
4022 RESULT Value of the last expression
4024 S_POSN_X Column number for print position
4025 S_POSN_Y Line number for print position
4026 CH_ADD BASIC program pointer (address of next char/token)
---Pause/Input:
4022 - Keyboard debounce
4023 MARGIN Screen border height
4024 ?
4026 LAST_K Keyboard last key pressed (4026=row, 4027=column)
|
| ZX80/ZX81 Memory Mirrors and Expansions |
address code read write 0000..1FFF ROM ROM --- ;all ZX81's 2000..3FFF RAM4 RAM4 RAM4 ;ZX81 with 56K only 4000..7FFF RAM1 RAM1 RAM1 ;ZX81 with 16K or more RAM 8000..BFFF VRAM2 RAM2 RAM2 ;ZX81 with 32K or more RAM C000..FFFF VRAM1 RAM3 RAM3 ;ZX81 with 48K or more RAM (*) (*) That, for the RAM3 part, VRAM1 is of course found in all ZX with 16K |
| ZX80/ZX81 Memory Binary Data/Machine Code Programs |
| ZX80/ZX81 Cassette File Images |
| ZX80/ZX81 Cassette File Content |
4014h defines the end address (used to calculate the file length) 4029h points to the next executed (autostarted) BASIC line 403Bh indicates if program runs in SLOW or FAST mode (bit 6) |
;nocash LD H,L trick for autostarting ZX80 files, 9/2009 by martin korth 4000h 8 x 00h ;System area: Zerofilled stuff 4008h 402Ch ;System area: Pointer to VARS 400Ah nn3Dh ;System area: Pointer to End of file 400Ch 1Ch x 00h ;System area: Zerofilled stuff 4028h 00h,01h,65h,76h ;BASIC program: Line 0001, LD H,L opcode, NEWLINE 402Ch 80h ;VARS area: End code 402Dh 13h x 00h ;Unused/padding (for entryoint 4040h) 4040h ... ;Machine code (entrypoint at 4040h) xxxxh (xx3Dh-$) x 00h ;Unused/padding (for end address xx3Dh) xx3Dh ;End of file (must be at xx3Dh) |
| ZX80/ZX81 Cassette Signals |
x seconds your voice, saying "filename" (optional) x seconds video noise 5 seconds silence (only some clock cycles required for ZX81) 1-127 bytes filename (bit7 set in last char) LEN bytes data, loaded to address 4009h, LEN=(4014h)-4009h. 1 pulse video retrace signal (only if display was enabled) x seconds silence / video noise |
x seconds your voice, saying "filename" (optional) x seconds video noise 5 seconds silence (at least 0.5 seconds REQUIRED for ZX80) LEN bytes data, loaded to address 4000h, LEN=(400Ah)-4000h. x seconds silence / video noise |
0: /\/\/\/\________ 1: /\/\/\/\/\/\/\/\/\________ |
| Hardware, Connectors, Upgrading |