ZX-PAINT

Products: ZX-PAINT
Developer(s): Gregory Harder
Date: 1987
Type: Cassette
Platform(s): TS 1000
Tags: Art

ZX-PAINT is a full-featured bitmap painting program that interfaces with an external “SCRAM” board, using machine code routines extensively via USR calls to handle input, output, and rendering. The program supports multiple drawing tools including freehand plotting, line drawing, rectangle drawing, flood fill-style operations, and custom 8×8 tile pattern editing, with coordinates tracked through memory-mapped registers accessed via PEEK. Output can be directed to either the screen or a printer (via LPRINT), with hardcopy support through COPY. The initialization routine at line 9000 sets up a 192×32-character string buffer, seeds coordinate registers, and uses LPRINT to send raw hex data (likely font or sprite data) to connected hardware. A notable technique throughout is the use of VAL with string expressions in GOTO and GOSUB to compute branch targets dynamically, and USR calls are used both as hardware interface functions and as Boolean flags controlling conditional execution.


Program Analysis

Program Structure

The program is organized into functional blocks separated by line number ranges. The REM at line 0 contains encoded data (likely machine code or lookup tables encoded as BASIC tokens). Lines 1–5 form a startup/dispatch stub. The main tool dispatch runs from line 70 upward, branching via computed GOTO VAL "150+K*50"-style expressions. High-level tool routines occupy the 100–4800 range, and initialization is at lines 9000–9130.

Line RangePurpose
0REM block — encoded machine code / data tables
1–5Startup: GOSUB to 9000, dispatch via USR, key scan
25–70Hardware init (POKE R/C registers), tool branching
100–190Shared three-point input subroutine (N3)
200–350Tool setup stubs (line, shape, fill modes)
400–560CLS confirm, screen copy, hardcopy
1000–1120Pen color / mode selection
2000–2510Drawing tools: freehand, circle, flood, cursor readout
3000–3900+Line and rectangle primitives (up, down, left, right)
4000–4800Pattern editor, speed select
9000–9130Initialization, SAVE, startup message

Machine Code Usage

Machine code is invoked pervasively through USR. Many conditionals take the form IF USR H THEN ..., where H holds the address of a routine that returns a Boolean result (non-zero = true). Separate USR entry points handle keyboard scanning (USR I), pen position reads (PEEK A / PEEK B after a USR call), pattern rendering (RAND USR E), and hardware initialization. The literal addresses 19466, 22144, 22274, 22333, 22353, 22387, 22427, 22474, 22484, 22613, 22928, 23018, 23039, 23065, 23076, 23110 appear in USR VAL "..." calls, pointing to machine code routines stored either in the REM block or in RAM above BASIC.

The initialization at line 9060 sends a hex string via LPRINT — almost certainly raw font or sprite bitmap data being transmitted to the SCRAM board’s own processor or memory.

Key BASIC Idioms

  • Computed branches: GOTO VAL "150+K*50", GOTO VAL "1950+USR P*50" — tool dispatch is entirely arithmetic, avoiding a long IF/THEN chain.
  • USR as Boolean: IF USR H THEN ... — the machine code routine at address H returns 0 or 1, gating entire blocks of BASIC.
  • Symbolic register variables: A, B, R, C, H, I, J, P, Q, E, L, M, N0N8 are all pre-loaded numeric constants acting as named addresses and parameters, keeping lines short.
  • RAND USR for side effects: RAND USR E discards the return value, using the call purely for its side effect (pattern rendering or hardware sync).
  • String arithmetic in pattern editor: Line 4670 builds a byte value by testing individual characters of the input string and summing weighted CODE values — a compact bit-packing idiom without bitwise operators.
  • DIM G$ as buffer reset: DIM G$(N8,N7) and similar calls reallocate the string array to establish a fresh working buffer for each tool mode.

Notable Techniques

The three-point input subroutine (starting at line 100) reads two or three coordinate pairs by polling the hardware joystick/tablet via USR, storing results into X, Y, V, W, T, U. This drives every drawing primitive (line, rectangle, arc) from the same shared input loop, with K=S as the abort sentinel.

The pattern editor (lines 4400–4800) accepts 8 rows of binary strings (e.g. "10110101"), converts each to a byte, and POKEs it directly into a tile table in RAM. It then re-renders the tile live using RAND USR E after each row, giving immediate visual feedback.

The rectangle-fill primitives (lines 3900–4290) implement directional growth: up (WU), down (WD), left (WL), right (WR) each sort their coordinate pair and loop, incrementing a delta N and LPRINTing drawing commands to the SCRAM board each iteration.

Line 9105 uses SAVE "ZX-PAIN[T]" to save the program. The startup message at line 9110 explicitly warns the user not to RUN the loaded program directly and instructs enabling the SCRAM board first, confirming the program requires external hardware to function.

Bugs and Anomalies

  • Line 4610: LET N=N-(J$="B")+(LEN J$=N0) — this modifies the FOR loop variable N directly to implement back-step and skip, an intentional but fragile idiom that depends on the BASIC interpreter re-evaluating N at each NEXT.
  • Line 2310: PRINT ;;;;AT 107,N4; — the row value 107 far exceeds normal screen coordinates, suggesting this is a deliberate out-of-bounds PRINT used to communicate data to the SCRAM board via the printer channel rather than a display operation.
  • Lines 3 and 25: IF USR 19466 THEN and IF USR H THEN RUN — these conditionally restart the program if the hardware signals a reset condition, acting as a watchdog.

Content

Appears On

Related Products

Full-featured graphics-design program for the ZX81 or T/S 1000/1500. A minimum of 32K RAM plus either a SCRAM Board, Delta...

Related Articles

Related Content

Image Gallery

Source Code

   0 REM [Z][X][-][P][A][I][N][T]  ## GOSUB #                                <> DIM LN F? CLEAR#OUORND[S]C IF TAN LN [M]RNDY2 GOSUB #<>5▟▝TAN  CLEARACS #▚/▖ CLEARACS #LEN LN [M]RND<>5<>RNDTAN  NEXT  CLEARACS  #: NEXT Y▘4▒ CLEARACS #LEN : PRINT Y▘# ( CLEAR▟W4 CLEAR▞"" CLEARACS ##C▝▞[K])4 5 4<>5:INKEY$ /▒)4 ▌ASN 1INKEY$ ;# GOSUB ###[:]"" GOSUB # E£RND) RUN ▙;Y2 GOSUB #Y PRINT ▘▛▝ CLEARACS ##CODE [P]▝LN [>]▝LN 4▝<>5<>RND#[8]▝ PRINT # RETURN,C▝INT / LET TAN  SCROLLLN #? FASTLN LN + LPRINT TAN  SCROLLLN #?#[B]:LN #INKEY$  PRINT LN #INKEY$ 7LN #INKEY$ # LET #TAN  SCROLL RETURN#C▀ RETURN;""6-RNDTAN  TO / PAUSE Y3[)]K▝INT (Y[Z][(]SQR INT 2LN #INKEY$ LN #INKEY$ / INPUT LN #INKEY$ /[H]LN #INKEY$ / SLOW5  6 RETURNZA4##<▘ COPY*Q  GOSUB [K]TAN A ##▞▌ACS 9ACS =( IF ,,▘ 4,,TAN LN [~~]INKEY$ ##ACS ZACS ZACS Z##STR$ LN [J]INKEY$  LET J NEW▛W#TAN LN [>]INKEY$ ##LN #INKEY$ VAL LN #INKEY$ AT LN [J]INKEY$ #TAN 2 COPY/▝2 STR$ LN [*]INKEY$ SGN  GOSUB # UNPLOT ZLN CODE INKEY$ ##?( CLEARACS .*PI▌4▝▞▒▛( CLEAR#TAN Y COPY/▘[J]/▝  MWRNDLN [*]INKEY$ # RETURN,4▛ GOSUB # UNPLOT ZLN [*]INKEY$ ## GOSUB # UNPLOT Z6 UNPLOT ZVAL #[)]-▘K▖ GOSUB #- COPY4▝-  FAST# CLEAR#Y LET [(]2▘K▖ GOSUB #2 COPY4▝2  CLEAR#X#[W]S▞##- /▝2  GOSUB #ZRND84▘96INKEY$ RND#[B]3#A 6#RNDAT VAL Y[Z][(] CLEAR#WLN [W]#/,,          CLEAR#INKEY$ ▞  CLEAR###,, CLEAR## GOSUB #ZRND CLEAR#PI GOSUB PIS▛ CLEAR## GOSUB #XRNDAT #▙##▄# CLEARO#UPIRND CLEAR[Y]#4[U]TAN LN #INKEY$ LN 4+ LOAD K LET $[M]H?▖O#[~~]+▞(## FOR 5  ACS TACS 3K▘; FOR D FOR ( POKE TAN Y COPY/▘[J]MWRND CLEARACS #[-]7LN [>]INKEY$ 5[+]▘6#RNDI 6#RND#6INKEY$ RND GOSUB # UNPLOT Z GOSUB ##RND FASTLN #INKEY$  LPRINT #6#RND6#RNDLN #INKEY$ CBLN #INKEY$ LN #INKEY$ M#RNDLN #INKEY$ C;LN #INKEY$ LN AT PI GOSUB ##RND TO LN #INKEY$ LN AT PI CLEARACS #CHR$  GOSUB ##RNDE#RND FASTEINKEY$ RND GOSUB ##RND▞▞ACS EACS .( IF  GOSUB #6INKEY$ RND FOR E#RND▞▞ACS EACS .( IF  GOSUB #6#RND GOSUB ##RNDLN PEEK PIU#RND##ACS +[£] PRINT ACS <[0]MRNDRNDEINKEY$ RND GOSUB ##RNDLN PEEK PIU#RND##ACS +[£]MZRND##ACS <[0]AT # CLEARACS ##C)E#RND#[P]C▞F6#RND/? CLEARACS #[-]Y[Z][(]S▞ CLEAR#WLN [W]# LPRINT F#[P]4█TAN  CLEARQX▘LN #INKEY$ COS LN #INKEY$ MXRNDLN #INKEY$ COS LN [>]INKEY$ LN #INKEY$ [S]S▀#INKEY$ #LN ▜INKEY$ #INKEY$ LN ▜INKEY$ #PI GOSUB #YRND[)]W PRINT LN #INKEY$ [S]K▀#INKEY$ # GOSUB #RNDRND[(]W4▘XSGN # GOSUB #PIRND CLEAR#INKEY$  CLEAR#ZLN ▜INKEY$ LN CODE INKEY$ 6#RND CLEAR## CLEAR#RND CLEAR#ZLN ▜INKEY$ LN CODE INKEY$ 6#RND CLEAR##TAN  GOSUB ##RNDE#RND CLEAR##[J]R*( UNPLOT M#RND CLEAR##[J]▌C▖R*( UNPLOT J CLEAR##▌TAN #[A] FOR ##J[A][K]# FOR TAN #VAL ▘4 ##,,#LN ###AT ( LET [J][5]/ SLOWLN ACS #4*) 4544▘ STEP * GOSUB [K]▞4F#( UNPLOT  CLEARPX4 REM TAN LN R# FAST[B] GOSUB # LPRINT C: FASTVAL STR$ LN ##Y COPYSGN AT  LPRINT F/ FOR  CLEAR[A]#LN ## CLEARPX4<>TAN VAL 5  )4 ;( CLEAR FOR E#RND; FASTE#RND;SGN AT TAN #VAL ▘4 ##[B] GOSUB PI#LN ###AT ( LOAD [J]###LN ACS #4*) COPYR5 TO R▘ STEP * GOSUB [S]▞47#( UNPLOT  CLEARPX4 REM TAN LN R#LN [T]# FAST[B] GOSUB # LPRINT C: FASTVAL STR$ LN SQR #Y COPYSGN AT  LPRINT F/ FOR  CLEAR[A]#LN SQR # CLEARPX4 AND TAN LN ACS #4+5 COPYR▞4#[B]ACS -F( CLS[8]4 POKE  CLEARPX4 GOTO TAN LN R##▖U#RNDVAL  PRINT  FASTSTR$ INKEY$ # PRINT  FAST[B] GOSUB # LPRINT C+#[4]# LET #ACS * PRINT #J[A]# LET  PRINT [K]#▞ COPYF/ SLOW#[4]### LET #ACS *[4] PRINT #J[A]# LET [K]#SGN  LPRINT ▘4  FOR ,, FOR ,, LET AT ([Y] CLEARPX4[L]TAN LN ACS #4-5 4[B]▞4ACS 27( CLSYS[W]4 NEXT  CLEARPX4 FOR TAN LN R##▖U#RND FOR VAL  PRINT  FASTSTR$ # PRINT  FAST[B] GOSUB # LPRINT C+#[4]# LET #ACS 3 PRINT #J[A]# LET  PRINT [K]#▞ COPY7/ SLOW#[4]### LET #ACS 3[4] PRINT #J[A]# LET [K]#SGN  LPRINT ▘4  FOR ,, FOR ,, LET AT ([Z] CLEARPX4[L]TAN ###Y[Z][(]STR$ VAL  PRINT LN ## LET AT SGN TAN 2 COPY/▝2 STR$ LN <>#SGN  CLEAR##UINKEY$ RND5ZRND PRINT  FASTLN  RETURN#+C▞WLN ▖#/ RUN  CLEAR#PI LPRINT  LET F FASTLN  RETURN#+C▞£LN ▖#/ RUN  CLEAR## LPRINT URNDRND PRINT  FASTLN  RETURN#+C▞XLN ▖#/ RUN  CLEAR#PI LPRINT  LET 7LN  RETURN#+COS $LN ▖#/ SAVE ##[A]##J##J[6][N]#)4 ;( LOAD TAN LN ACS #4+5 4▘ /#J#7YS[W]4 RUN  CLEARPX4 GOTO TAN LN R#▖J FAST[B] GOSUB # LPRINT C: FASTVAL STR$ LN ##Y COPYSGN AT  LPRINT F/ REM U#RNDJLN ## CLEARPX4 AND TAN M$( LN [J]INKEY$  FAST TO  FAST5[X]#6-RNDLN 0)AT  GOSUB #-RNDK▝INT 6777# RETURN▝4 PLOT 7#Y""[>]S LOAD 77#Y4[)]S SCROLL77 CLEAR#X▞ SGN TAN LN [>]INKEY$ ##Y4[)]MYRNDLN #INKEY$  SCROLLM[X]# SCROLL RETURN$4SIN ##INKEY$ VAL [J]# FOR  GOSUB PI FOR AT TAN LN  RAND # PRINT LN AT # LET ▞# FASTC0 RETURN,4[E] SCROLL RETURNA▞[A]C£ RETURNO▞[Q]C▞ RETURNX▞[I]4[*]LN #INKEY$ 4 CLS#M## LPRINT UYRNDINKEY$ :4VAL  PRINT STR$ YS[U]4▖SGN -4STR$ ,#>7< CLEARPYATN <#( REM  FOR  LPRINT ,, FOR  LET AT MYRND CLEARPX4 OR TAN Y /▝Y>M[4]#LN  RAND #4[S]LN AT #UYRNDINKEY$ :4VAL  PRINT STR$ YS[U]4▖SGN -4STR$ # PRINT ,# LET >7< CLEARPYATN <#( SCROLL FOR  LPRINT ,, FOR  LET AT MYRND CLEARPX4CHR$ TAN 7# RETURN0K▝INT 1 RETURNGK IF CHR$ 0TAN LN [U]##ACS 4ACS 4ACS 4ACS 4LN [U]#█#7# RETURN"#TAN  SCROLL RETURN"TAB 9#7#ACS #C▝CHR$ RND)  77 FAST▞▒## FOR ;( CLEAR FOR 5 S; FOR  LPRINT TAN LN  STEP #7LN TAN #>4▀## </ POKE ##[B]4## CLEAROY CLEARACS Y#4/7#[B]C LET ACS #4?▞ COPY[B]*S▖ACS // SAVE #J[5][Q]# FOR F CLEARPZ CLEARACS Z#""#[B]4▀#/ LIST ACS #""▞ COPY[B]ACS 3S▖ACS (/ RUN #J[5][Q]#TAN VAL #Y,,[(]#ACS )S▌( IF AT /[P]AT ##ACS ;S/( IF  CLEAR#WLN ## CLEAROY CLEARACS Y#""7 CLEAR#W##/[-] CLEARACS #CHR$ ##VAL ACS ;( UNPLOT AT ** CLEARACS #[-] CLEAR#WVAL Y,,[(]#[J]#ACS >ACS <ACS ▘W( RUN ACS >ACS <ACS ▘WK RUN ACS .ACS ,,XACS .ACS ;X4 RAND #AT Y,,#[(]ACS ;+( CLSACS ,,+K CLS#PIACS <ACS ▘( IF PIACS ;ACS .( IF #TAN LN [~~]INKEY$ VAL  PRINT LN 1+Y▒LN 1+LN R0LN LN +LN [B]:Y▛[)]# GOSUB ##RND LET AT #ACS UACS UACS U5YRND#7#7#LN CODE INKEY$  FASTVAL LN #INKEY$ MINKEY$ RNDLN #INKEY$ LN  STEP ##LN #INKEY$ TAB *# FOR ▘▛ ,,6#RND GOSUB ##RND GOSUB PI6PIRNDAT SGN  CLEARACS #[-] CLEAR##Y▒[)]#/▝:▒STR$ VAL EPIRND#F6PIRNDMWRND CLEARACS ##TAB [A]▝##LN =# CLEARPINKEY$ ASN [A]▝AT  LPRINT [B])4  GOSUB ## RETURN3COS URNDRNDMYRNDMZRND$ FOR 4COS E#RND6PIRND/[Y]LN [V]▝##GC SAVE ACS RNDC POKE LN [X]▛#▞ #TAN      SCROLL RETURN#4,,LN ,,#LN 0#/K SCROLL RETURN,C> RETURN;CG RETURN#C# RETURNAT C# RETURNTAB C#/# GOSUB # RETURNZ# NEW LIST LEN ( RETURNRNDCODE  FAST#ATN  STEP #/CHR$ #LEN ▒#[J]# GOSUB # RETURNZTAN ▞ COPY SCROLL RETURN#COS  RETURN,4▖Y▖/" RETURN;4LEN ▖# RETURN▀ASN 9#M CLSZ/ SLOW GOSUB # RETURNZ/SGN LN #INKEY$ ## RETURN[T]ABS [▒]INKEY$ # RETURNRNDABS ▙INKEY$  GOSUB # RETURNZ TO /[)]LN #INKEY$  NEWZ GOSUB # RETURNZ[T]#K GOTO Y▒█#/ NEWLN #? CLEARACS ▘#CODE STR$ .LN  SAVE <#[L]C OR ,VAL STR$ LN ##SGN AT <"/ LIST  RETURN""4▖Y"/U PRINT  NEW# RETURNRNDK▛ LET  CLEARACS ▘LEN /G CLEARACS ▘#C~~[J] CLEARACS ▘▚LN [/]#/▖ CLEARACS ▘LEN  LET LN #,,~~ PRINT VAL  NEW#LN [/]#AT ▀ LET  RETURN█S LET  CLEARACS ▘▚[J] GOSUB # RETURNZ PRINT YZ[)]>= STEP #LN 0# LET VAL M#RND[B]*[B]**- ACS >#5 2; FASTACS TLN [J]INKEY$ SGN U CLSZ RETURN▖ASN 7# RETURN▝CPI RETURN▘CEY▒ PRINT STR$ , PRINT U CLSZ[B]4~~ CLEARACS ##C▖ LET J/▘ LET #)4 ;SGN  LET <X4 STEP AT ££ GOSUB # RETURNZTAN U#RND RETURNASINT  RETURN[A]KACS  FAST5 2; FOR  LPRINT /TAB U#RND▛ FAST5 0S LET A,/ GOSUB  CLEARACS ##Y[S]C▝Y[C][S]SQR ▘  TAN  #VAL ) 45 5ACS SACS SACS S# GOSUB [K]F#( UNPLOT AT TAN ▘ ""LN 0## NEW# PRINT  SCROLLLN 0) AND #$ASN 9#7 FAST▞▌[J]#7( UNPLOT SGN  LET TAN LN AT INKEY$ #?( CLEARLN ##SQR Y▟>TAN LN AT INKEY$ ##LN 4+ FASTLN ## LPRINT LN  PLOT ;#[~~]+LN AT INKEY$ #▞ / REM <>#  PRINT LN  SCROLL▝2"" CLEARACS ##C▝2[K]5 4[J]PEEK  CLSLN #?ABS ▐▒<= CLS*K CLS-4▞▒#<= CLS3K CLS# NEW█PEEK  CLSACS )( PAUSE 7+4 FOR <= CLS3K CLS14PEEK Y▖PEEK  CLS LET  RETURN GOSUB ASN ▛▝#STR$ RND)KY GOSUB # UNPLOT Z CLEARACS ##4~~2S CLEAR#W[B]4▝2RND GOSUB ##RND#LEN ▖##CHR$ ▖##▜#VAL LN  LOAD #AT #[X]▛ GOSUB # UNPLOT ZLN [~~]# RETURN#TAN LN ~~#4 CLS▘COS  TAN        )[(]RNDLN #INKEY$ C>STR$ LN #INKEY$ #LN #INKEY$ ▖SGN ,LEN █><( RAND TAN ▞4[J]><( UNPLOT TAN LN #INKEY$  RETURN4) ▞K▞LN  NEXT ##▛#INT .▘4 ,,# RETURNS**#TAN LN #INKEY$  RETURN4K GOSUB LN #INKEY$ [B]***- #5 Y;6#RND##INKEY$ LN ## GOSUB # UNPLOT ZY[Z][(]K▝CHR$ RND##ACS WACS 1ACS WACS 1ACS WACS 1ACS  GOTO 6 DIM Z#J NEW▛WM#RND) FOR Z GOSUB ##RNDY▒ PRINT #>~~VAL #U#RND RETURN▌S)JLEN ,,[B]##: C:3ACS ;( CLS/▛#[J]ACS )*( CLS[I]#7<#>#[I]#FLN ##<AT ▀ LET X4SIN TAN LN #INKEY$ TAB *#E DIM Z) FOR Z▞▒VAL ,#7<,#FLN ##<AT ( LET TAN #A #2▒#[E] NEW█# FAST GOSUB # GOSUB ###SGN 5  RZ PRINT ##2▒DK▌[?] GOSUB #/,,▗ GOSUB #S▀ GOSUB PIXW14 GOTO # LET K LLIST ACS #4▘ FOR ACS #COS  FOR [B] GOSUB # GOSUB #TAN  TAN   LN [V]▝G4 IF TAN  GOSUB # UNPLOT Z# RETURN COPY4▖▞[Z]/▞ RETURN""4▝▞ Y[Z][(] GOSUB # UNPLOT ZTAN LN  IF INKEY$ )▘ .#[N]4 CLSTAN LN [~~]INKEY$  GOSUB # UNPLOT ZLN #INKEY$ M## CLEARACS #CHR$ LN >=#LN ##VAL  PRINT LN CODE INKEY$ 2 COPY LET AT VAL  PRINT LN ## LET AT LN ## E9RND##GC LPRINT LN ▝##:$)VAL ##M# CLEARACS #CHR$ /ATN  CLEARQW COPY CLEARACS #[-]/£ CLEARQW / POKE  CLEARO CLEAR CLEARP UNPLOT LN ## CLEAR#W CLEARACS ##4[E]LN [N]#/[9] CLEARO CLEAR/ REM  CLEARO UNPLOT / PLOT  CLEARO UNPLOT / STEP  CLEARP CLEAR/ PLOT  CLEARP CLEAR/CHR$  CLEARP UNPLOT / PLOT  CLEARP UNPLOT /ATN    TO  RETURN;CM RETURN#C▝INT + LPRINT ▘  ##  TO  RETURN THENC▝INT ) FAST SCROLL);#STR$ :()1#▞  FOR  GOSUB [5]C▌77 REM P##7# FOR VAL TAN SGN ):#STR$ :?) INPUT # SCROLL# SCROLL RETURN#CSQR  RETURN;4 RUN F#7 RETURN$C▘#/INT :▌)[.]#F#7/VAL :▖)[G]#/ POKE FF#77:▀)[U]#/[M]YX:  GOSUB [T]77#:▀)[(]#/[6]C GOTO PID=PIR>#9#D##E DIM #M9#P##S9#9#D NEW#LD#R[<]#U##9#G##P0#S##9#C[W]#DTAB #EATN #R##1ABS #2 INPUT #3 SAVE #4▝#5▛#6 CLEAR#7 DIM #8 NEXT ####[:]#X█#A##B OR INKEY$ C CONT PID(PIF CONT #I##L▚#P##R:#S##T##U▖#W##$##9# LPRINT ## LLIST 9# SCROLL9# LOAD 9# LIST 9# PAUSE 9# PRINT [D]# PLOT  FOR INKEY$  RUN ACS RND SAVE 9# RAND 8# CLS[0]INKEY$  UNPLOT  LOAD INKEY$  CLEARSGN RND RETURN[Z]RND COPY[:]#9#                 LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST WWWW LIST  LIST  LIST  LIST #### LIST  LIST  LIST  LIST ???? LIST  LIST  LIST  LIST  LIST  LIST  LIST  LIST WWWWWWWWWWWW####WWWW????WWWW#[9]#[9]#[9]#[9] LIST  LIST  LIST  LIST #[9]#[9]#[9]#[9] LIST  LIST  LIST  LIST  ##RND RNDRNDRND [4]E##[:][E]  ##[▒]#▙## RND8  ▖   ##PI# #  6##CODE #PI4 ▜PIPI#PI#█ ▒▖#[8]▒   ▝▖▒▖▝  LIST  ##RND#RND#  #USR [Y]▜#   #4I44#  E# INPUT #E   ▙▙##CC  RND[8]RNDRND#▖▒ RND█  ▖▖▒     £# (-,,,,0(█▜[£]▜▜▜[:]█ LIST ▖~~▝▖▒:  LIST [:]▙▜▙[~~]▜█ LIST >-,2>>(█[:][▒][£]▙[~~]▜ LIST (=/0,,= LIST █[:]PIPI8C/((=E8##▜█ ▖[~~] IF [A][6][8]  RND[8][6] NEW[E][A]  COS [C]ATN [E][E]ATN   #▜[~~][▒][▒]#  TAB [6][A][E][E]LEN    STEP ▜ASN [:][▒] NEW   LLIST ▜EXP ▜▜▜  RND[8][~~][E][A]#£ [C][C] GOTO [E][E][E]   SLOWRND### SLOW  #4A6[6]#▖ [C][C]ASN ATN [E][E]  ▜▜▜▜▜ LLIST   [4] REM  INPUT [I][E][E]  ""[G][E][E][E][E]  RND[8][E][E][E]#  ""[G][E]ASN [£][▒]▒ RND[A][E][E][A]PI7 ""[G][E]COS [C][C]  #▚#86ATN    SLOW####PI  [4][E][E][E][E]#  [4][E][E][E]##  [4][E][E][E] INPUT [E]  [4][E]##[E][E]  [4][E]##PIPI▖  STEP IPI#[▒] INPUT  #0#CATN #DABS #E>=#R0#1 LLIST #2 RETURN#3▒#4>#5*#6$#7 RAND #8▀#[;]# ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█  █ RND ""  ███RND█""█""""RND""█"" """"RNDRNDRND█RND RND COPY COPY COPY COPY COPY COPY COPY COPY COPY# COPY<> COPY# COPY<>#<>#<>#<>#<>[E]#[E]#[E]#[E]#[▒]6[▒]6[▒]6[▒]6[▒] 6 [▒] 6 █ ▒ █ ▒  COPY# COPY# COPY# COPY# [E] [E] [E] [E] COPY  COPY  COPY  COPY ""£[$][L]K▀.**█▖RND▒▘4▝(<>[V]# INPUT <>[V]# INPUT 6#[▒])6#[▒])[E][E][E][E][E][E][E][E]   COPY    COPY 66666666▒ [E] ▒ [▒] 66 COPY666 COPY6▝▝ COPY▝▝▝▝▝███ COPY▒▒▒ COPY4RND█INKEY$ 6=▒(   (    [E] [▒]=6INKEY$ [▒] RND█ ▒▖▝ 4  ▖~~  RND[4]#▙▘▘▘▙#T#6*[?]#6# SAVE ~~▖▖#[4]RNDRND#▘▘▀▜#K£▝INKEY$ Y▒▒= STOP██▖▒(4#[E] COPY▝D#▙INKEY$ 6[=]#[>][?][?]#[/] SAVE  SAVE #[,,][K][K][K][Z] [Z][Z][K]C( (C#[E]#PI▟/88/▟PI4#[▒]▌▝▌[▒]#PI[9]#88#[9]PI         COPY▟▟▟▟▟▟ COPY LIST [(][(][(][(][(][(] LIST #▟████▟# STEP [(]████[(] STEP  COPY██#:▘▘ COPY LIST ██RND4(( LIST , ▘▝▗▖▌▄▀▐█▒*?,,▛[~~][,,][▒](-+=><)""▟▜~~▞$/▙;▚:[,] ▘▝▗▖▌▄▀▐█▒[*][?],,▛[~~][,,][▒][(][-][+][=][>][<][)]["]▟▜~~▞[$][/]▙[;]▚[:]"[4]";#0?#54#69#7E#8J#9,##£###         STR$ #- PIVAL 55 LN ▌<AT ,, FOR E£RND7;SGN TAN #Y▘ACS CK▝Y▖ACS DK▘▛ PRINT LN [*]##▛ RETURN(K▞?K▝ INPUT [?]#1C▌ LET J[4]/▝ LET [K] RETURN▒S▝ INPUT [?]#TAN  GOSUB #QRND# RETURN COPY4▖▞J/▞ RETURNK4▝▞ YJ[(] PRINT # RETURNRND4▖: /▞ RETURN COPY4▝:Z GOSUB #QRND LET TAN LN [H]# GOSUB ###==###LN ~~#ASN ;#LN 4#/ PRINT LN [Z]RNDE£RND6WRNDE UNPLOT Z# RETURNSIN S▝I""YK[W]S▝AK6 UNPLOT Z##Y[Z][(]LN CODE INKEY$ 6YRND▞/VAL ▞▒VAL ▘4  FAST#,,#▞▖Y [R]ACS <ACS *ACS <ACS *ACS >ACS *ACS >ACS *5[▒]#STR$ - #;SGN #EWRND7# RETURN#C IF 6WRND#(USR  LPRINT 7AT (VAL ▘S ,,AT ([V]53/6QRND CLEARACS #CHR$ LN <>#VAL  PRINT #ACS CACS DLN [*]##2▘ LET AT STR$ VAL  PRINT LN ,,# LET AT LN ,,#SGN #E9RND##GC OR LN [X]▛#:$)###M# CLEARACS #CHR$ /SIN  CLEARQINKEY$ ▘ CLEARACS #[-]/£ CLEARQINKEY$  / POKE  CLEAROR CLEARPQLN <># CLEARACS ##4[C] CLEAR#INKEY$ LN [H]#/[4] CLEAROR/ REM  CLEAROQ/ PLOT  CLEAROQ/ STEP  CLEARPR/ PLOT  CLEARPR/CHR$  CLEARPQ/ PLOT  CLEARPQ/ATN LN ACS RNDE£RND7▞/VAL ▞▒VAL )  ▞▖ FAST#ACS #5[*]#C▌ACS [Z]5[B]#▗WVAL ▞ #,,#ACS )ACS >ACS )ACS >7#ACS )ACS <ACS )ACS <AT  LPRINT 7(PEEK  FASTEYRND#▘4  FAST,,# LPRINT 76YRND LPRINT AT ([T] FASTEYRND▘S ,,6YRND LPRINT AT 7([A]#E~~     Y[Z][(]VAL  PRINT LN ▛#Y▛[<]# GOSUB # STEP Z LET AT LN CODE INKEY$  FASTVAL 5#U GOSUB # STEP Z[B] GOSUB PI FOR AT  LPRINT  CLEAR# STEP Y▒[)]#TAN ACS #ASN  IF INKEY$  GOSUB # UNPLOT ZLN ▗#VAL #3( CLEARAT /▛VAL #3( CLEARAT **VAL ,##?ACS ,,( CLS*AT LN ▞PI▘4 [B]TAN LN [)]# RETURN0S RAND  RETURNAK PRINT CHR$ 0▞ #VAL LN ##AT TAN ▘  Y>M[4]## CLEARQY4#▚#LN  RUN #LN ##LN [)]# RETURN1S RAND  RETURNAK PRINT CHR$ 0▞ #VAL LN  RUN #AT TAN  FAST5#L; FOR  LPRINT U#RND NEW█U RETURNZ?▞▒VAL  PRINT ,#CGS0 NEW LIST  PRINT # NEW?# LET [K]#<STR$ )4 ;SGN  LET AT ( STOPAT £ GOSUB # RETURNZTAN ACS ZACS ZACS ZACS Z PRINT # NEW LIST />=S~~ACS BACS BACS BACS B/ATN  NEW?/ REM LN [~~]##[Z]#   E-RND FAST SCROLLLN [D]#LN [)]# RETURN#ASN ;# RETURN64£U[U]#X RETURN COPY4)YB/$ RETURN74 SLOWU[U]#W RETURNC4▘[J]M[U]#LN [T]# LPRINT 6-RND/ASN Y #- 5▒  FASTLN ▌<)[S]#;)#UAT  GOSUB [K]TAN VAL LN SIN # AND [B]▝[B] GOSUB PIY3[W]AT COS $.4 GOSUB )#U:▒/ NEWVAL LN SIN # AND [B]▝,,YS[W]AT COS $<4 LOAD )#U:▒/ CONT LN ~~#ASN ;# GOSUB # UNPLOT ZLN ▗#VAL  FASTSTR$ LN SQR #SGN  LPRINT ▘4 ,,AT YS[W]C( CLEAR# STEP #[B]4▌:▒)#U<LN  REM #E UNPLOT ZG4▘H6 UNPLOT Z/VAL E-RND FAST SCROLLLN ~~#ASN ;#LN  CONT # LPRINT 6-RND/ LOAD E-RND FAST SCROLLLN ~~#ASN ;#LN  CONT # CLEAR# CLEAR▖Y[Z][(]K▝▞[Z] CLEAR# CLEAR LPRINT 6-RND/ LPRINT LN ~~#ASN ;# GOSUB # UNPLOT Z2 COPYY[Z][(]VAL LN  PLOT INKEY$ LN ##LN ~~# LPRINT C SCROLL GOSUB # UNPLOT ZLN OPILN ##/**LN ~~#CCHR$  GOSUB # UNPLOT Z2 COPYY[Z][(]VAL LN  PLOT INKEY$ LN ##LN ~~#AT C""E UNPLOT ZVAL LN OPILN ## LPRINT 6 UNPLOT Z FASTLN ~~#/ DIM LN ##LN [)]#▘2 TAN E-RND FAST SCROLLLN ~~#ASN ;# GOSUB # UNPLOT Z GOSUB ##RND2 COPYY[Z][(]LN  PLOT INKEY$ LN ##LN ~~#C FASTLN =#LN ## LPRINT 6-RND/USR                            )[4]▀.#[N]4 CLSTAN ▞ #,,#-$2▘ PRINT STR$ M##5##6-RNDLN [D]# LET X RETURN COPY4▘[J]#STR$ LN 5#LN [V]▝GASN [A]▝SGN  LET / OR 5 SAVE #) Y▘K  GOSUB [K] GOSUB # RETURNZE-RND FAST CLEARACS #[-]LN ##LN ## CLEARACS ##ATN 2#LN O#ACS 5ACS 5Y[Z][(]#LN █#LN [V]▝##G4£ CLEARACS ##ATN 2#LN  LOAD #/NOT VAL LN  LOAD #AT  CLEARACS ##C#ACS RND4GACS ""LN [X]▛# RETURN#4▒ CLEARACS ##C#/# RETURNRNDK[M][B]4▖Y[£]/BLEN █ CLEARACS ##C3CHR$ [.]5##/9LN [X]▛# RETURN#C[~~] RETURNRNDK[(] CLEARACS ##4" RETURN"4▝Y""LN G#/[A][B]C▌CHR$ .5C#LN B#/ LET LN [X]▛#:▛)###M##;# CLEARACS #[2] CLEARACS #CHR$ ### CLEARACS # THEN/ NEXT  CLEARP RETURN/ATN  CLEARO COPY/SIN  CLEARP COPY/TAB  CLEARO RETURN/[X] GOSUB # RETURNZ# RETURN COPY4▖:Z/▌ RETURNRNDUSR  STEP ## RETURN COPY4▖▞[S]/▞ RETURN[T]S▝▞  GOSUB # RETURNZU CLSZ RETURN▖COS ACS ▟TAN 5 Y2▒ CLEARACS ##C:I(2/ CLEARACS ##C▖I42CU CLSZ RETURN▖4▘#6#RNDTAN          LN 7?) ▖LN #?K/( RETURN.#[N]4 POKE 5 4▘ /VAL LN 2▀7AT "#[L]4 PRINT ▘; TAN AT LN ##/ PLOT :▘Y#<= RETURNPEEK  COPY3K LOAD SQR **K PAUSE STR$ 2[=]▞,1<= RETURN*ACS ##S PRINT ( PRINT SGN 4▖ RETURN#K OR ZACS )KCHR$ TAN LN 7?5 4) /LN [X]##7.#[N]4 PLOT /[O]LN 7?) ▖LN #?K[D]( RETURN.#[N]4 POKE 5 S▘ ▞/[?]LN 7?5 S) ▞/INT E-RND FAST SCROLL FAST▘£ ,,▘0▒SGN  FASTVAL STR$  GOSUB #-RND#LN [D]#SGN AT  LPRINT £( LOAD #;#E-RND FAST SCROLL▞▒ FOR EMRNDSTR$  GOSUB #-RND<<#76MRNDVAL ▞▒[J]ACS ▘K▝Y█><( PRINT LN [D]#AT  LPRINT (<=#;#                     
   1 GOSUB VAL "9E3"
   2 GOTO CODE ";"
   3 IF USR 19466 THEN
   4 LET K=USR I
   5 RETURN
  25 IF USR H THEN RUN 
  30 POKE R,CODE "A"
  40 POKE C,CODE "M"
  50 LET K=USR P
  70 GOTO VAL "150+K*50"
 100 GOSUB N3
 105 IF K=S THEN RETURN
 110 LET X=PEEK A
 115 LET Y=PEEK B
 120 IF USR H THEN LPRINT P;X,Y,G
 125 IF USR H THEN PLOT X,Y
 130 GOSUB N3
 135 IF K=S THEN GOTO CODE "[T]"
 140 LET V=PEEK A
 145 LET W=PEEK B
 150 IF USR H THEN LPRINT P;V,W,F
 155 IF USR H THEN PLOT V,W
 160 GOSUB N3
 165 IF K=S THEN GOTO CODE "[O]"
 170 LET T=PEEK A
 175 LET U=PEEK B
 180 IF NOT F THEN IF USR H THEN UNPLOT V,W
 185 IF NOT G THEN IF USR H THEN UNPLOT X,Y
 190 RETURN
 200 POKE R,CODE "C"
 210 POKE C,CODE "P"
 220 LET L=CODE "COS "
 230 GOTO VAL "1950+USR P*50"
 250 POKE R,CODE "G"
 260 POKE C,CODE "T"
 270 LET L=CODE " IF "
 280 GOTO VAL "2900+USR P*100"
 300 POKE R,CODE "8"
 310 POKE C,CODE "C"
 320 GOTO VAL "980+USR P*20"
 350 GOTO USR VAL "22474"
 400 DIM G$(N8,N7)
 410 IF USR H THEN LPRINT G$;N0,N0,G$
 415 IF USR H THEN PRINT AT N0,N0;;"█[S][U][R][E][?]█"
 420 LET K=USR I
 425 IF USR H THEN LPRINT P$;N0,N0,G$
 430 IF K=CODE "Y" THEN IF USR H THEN CLS
 440 GOTO M
 450 GOTO USR VAL "22928"
 500 GOTO USR VAL "23018"
 550 IF USR H THEN COPY
 560 GOTO M
 600 IF USR H THEN RETURN
 610 PRINT " GOTO 25 TO RESTART."
 620 STOP
 1000 GOTO M
 1020 POKE O,N0
 1030 GOTO VAL "USR 22613+300"
 1040 POKE O,N1
 1050 GOTO VAL "USR 22613+300"
 1060 POKE O,N4
 1070 GOTO VAL "USR 22613+300"
 1080 POKE O,N2
 1090 GOTO VAL "USR 22613+300"
 1100 GOTO USR VAL "23039"
 1120 GOTO USR VAL "23065"
 2000 GOTO M
 2050 GOTO USR VAL "19476"
 2100 GOTO USR VAL "21525"
 2150 IF USR VAL "22333" THEN PRINT PEEK A,PEEK B,CODE "COS ","["]"
 2160 GOTO L
 2200 IF USR VAL "22353" THEN PRINT PEEK A,PEEK B,N1,"["]"
 2210 GOTO L
 2250 GOTO USR VAL "22274"
 2300 IF USR H THEN LPRINT S$;N0,N0,P$
 2310 IF USR VAL "22144" THEN PRINT ;;;;AT 107,N4;"["]["]["]["]["]";TAB N4;"["]["]["]["]["]";,
 2330 IF USR H THEN LPRINT S$;N0,N0,P$
 2340 GOTO L
 2350 GOTO USR VAL "22387"
 2400 GOTO USR VAL "22427"
 2450 GOSUB N3
 2455 IF K=S THEN GOTO L
 2460 LET X=PEEK A
 2465 LET Y=PEEK B
 2470 IF USR H THEN LPRINT P;X,Y,G
 2475 IF USR H THEN PLOT X,Y
 2477 GOSUB N3
 2480 IF K=S THEN GOTO L
 2481 LET V=PEEK A
 2482 LET W=PEEK B
 2484 IF USR H THEN PLOT V,W
 2486 IF USR H THEN PLOT X,Y
 2488 GOSUB N3
 2490 IF K=S THEN GOTO L
 2491 LET T=PEEK A
 2492 LET U=PEEK B
 2493 LET XR=ABS (X-V)
 2494 LET YR=ABS (Y-U)
 2495 IF USR H THEN LPRINT C;X,Y,XR,YR
 2497 IF NOT G THEN IF USR H THEN UNPLOT X,Y
 2498 GOTO VAL "2450"
 2500 IF USR VAL "22484" THEN PRINT PEEK B,PEEK 16473,PEEK A,PEEK 16472
 2510 GOTO L
 3000 GOTO M
 3100 IF USR H THEN RAND CODE "3"
 3110 GOTO L
 3200 GOSUB N3
 3205 IF K=S THEN GOTO L
 3210 LET X=PEEK A
 3215 LET Y=PEEK B
 3220 IF USR H THEN LPRINT P;X,Y,G
 3225 IF USR H THEN PLOT X,Y
 3230 GOSUB N3
 3235 LET U=PEEK A
 3240 LET V=PEEK B
 3245 IF NOT G THEN IF USR H THEN UNPLOT X,Y
 3250 IF USR H THEN LPRINT I;N1,Y,V,X,U
 3255 GOTO VAL "3200"
 3300 IF USR H THEN LPRINT G$;N0,N0,S$
 3310 GOTO L
 3400 IF USR H THEN LPRINT P$;N0,N0,S$
 3410 GOTO L
 3500 IF USR H THEN LPRINT S$;N0,N0,S$
 3510 GOTO L
 3600 IF USR H THEN LPRINT P$;N0,N0,S$,A
 3610 GOTO L
 3700 IF USR H THEN LPRINT P$;N0,N0,S$,O
 3710 GOTO L
 3800 IF USR H THEN LPRINT P$;N0,N0,S$,X
 3810 GOTO L
 3900 GOSUB VAL "100"
 3910 IF K=S THEN GOTO L
 3920 IF Y<=W THEN GOTO VAL "3960"
 3930 LET G=Y
 3940 LET Y=W
 3950 LET W=G
 3960 IF U<=W THEN GOTO VAL "3900"
 3970 LET N=U-W
 3980 IF USR H THEN LPRINT WU;N,Y,U,X,V
 3990 GOTO VAL "3900"
 4000 GOSUB VAL "100"
 4010 IF K=S THEN GOTO L
 4020 IF W<=Y THEN GOTO VAL "4060"
 4030 LET G=Y
 4040 LET Y=W
 4050 LET W=G
 4060 IF U>=W THEN GOTO VAL "4E3"
 4070 LET N=W-U
 4080 IF USR H THEN LPRINT WD;N,Y,U,X,V
 4090 GOTO VAL "4E3"
 4100 GOSUB VAL "100"
 4110 IF K=S THEN GOTO L
 4120 IF X>V THEN GOTO VAL "4160"
 4130 LET G=X
 4140 LET X=V
 4150 LET V=G
 4160 IF T>=V THEN GOTO VAL "4100"
 4170 LET N=V-T
 4180 IF USR H THEN LPRINT WL;N,Y,W,X,T
 4190 GOTO VAL "4100"
 4200 GOSUB VAL "100"
 4210 IF K=S THEN GOTO L
 4220 IF X<V THEN GOTO VAL "4260"
 4230 LET G=X
 4240 LET X=V
 4250 LET V=G
 4260 IF T<=V THEN GOTO VAL "4200"
 4270 LET N=T-V
 4280 IF USR H THEN LPRINT WR;N,Y,W,X,T
 4290 GOTO VAL "4200"
 4300 DIM G$(CODE ",,",CODE "~~")
 4310 IF USR H THEN LPRINT G$;N0,N0,G$
 4320 IF USR H THEN PRINT AT N0,N0;,"[S]ELECT SPEED, 0 TO 9"
 4330 POKE VAL "19830",USR Q
 4340 IF USR H THEN LPRINT P$;N0,N0,G$
 4350 GOTO L
 4400 DIM G$(VAL "114",CODE "~~")
 4440 LET X=PEEK J
 4450 POKE J,N0
 4460 RAND USR E
 4470 IF USR H THEN LPRINT S$;CODE "Y",N0,G$
 4480 IF USR H THEN PRINT ;,AT CODE "RND",N0;
 4490 IF USR VAL "23076" THEN PRINT TAB 17;"7"
 4500 IF USR H THEN PRINT AT CODE "[/]",N0;," [S]ELECT PATTERN    "
 4510 IF USR VAL "22144" THEN PRINT ;;;;AT 132,N2;"["]["]["]["]["]["]";TAB N2;"["]["]["]["]["]["]";,
 4520 RAND VAL "PEEK J*8+20920"
 4530 IF USR H THEN PRINT ;;AT CODE "RND",N0;
 4540 IF USR VAL "23110" THEN PRINT "█  █  █ "
 4550 IF USR H THEN PRINT ;,AT CODE "[/]",N0;"[B]=[B][A][C][K]-[U][P]  [N]/[L]=[S][K][I][P] ";TAB N0;"1=";;"█";,"         0="" """
 4560 IF USR H THEN CLEAR
 4570 FOR N=N0 TO N7
 4580 IF USR H THEN PRINT AT CODE "[C]",N0;"[I]NPUT [R][O][W] ";N;" PATTERN"
 4590 INPUT J$
 4600 IF LEN J$>N8 THEN GOTO VAL "4590"
 4610 LET N=N-(J$="B")+(LEN J$=N0)
 4620 IF N=N8 THEN GOTO VAL "4730"
 4630 IF N<N0 THEN GOTO VAL "4570"
 4640 LET Y=VAL "PEEK J*8+20920+N"
 4650 IF LEN J$=N0 THEN GOTO VAL "4580"
 4655 IF J$="B" THEN GOTO VAL "4580"
 4660 LET J$=J$+"0000000"
 4670 LET V=CODE "█"*(J$(N1)="1")+CODE "RND"*(J$(N2)="1")+CODE "4"*(J$(N3)="1")+CODE "("*(J$(N4)="1")+N8*(J$(N5)="1")+N4*(J$(N6)="1")+N2*(J$(N7)="1")+(J$(N8)="1")
 4680 IF USR H THEN PRINT ;;AT N*N8+64,N0;"█" AND J$(N1)="1";" " AND J$(N1)<>"1";"█" AND J$(N2)="1";" " AND J$(N2)<>"1";"█" AND J$(N3)="1";" " AND J$(N3)<>"1";"█" AND J$(N4)="1";" " AND J$(N4)<>"1";"█" AND J$(N5)="1";" " AND J$(N5)<>"1";"█" AND J$(N6)="1";" " AND J$(N6)<>"1";"█" AND J$(N7)="1";" " AND J$(N7)<>"1";"█" AND J$(N8)="1";" " AND J$(N8)<>"1"
 4690 POKE Y,V
 4700 RAND USR E
 4710 IF USR H THEN PRINT ;;;;AT 132,N2;"["]["]["]["]["]["]";TAB N2;"["]["]["]["]["]["]";,
 4720 NEXT N
 4730 IF USR H THEN PRINT AT CODE "[C]",N0;;"[F][I][N][I][S][H][E][D][?] ";,
 4740 IF USR I<>CODE "Y" THEN GOTO VAL "4500"
 4750 IF USR H THEN RUN 
 4760 IF USR H THEN LPRINT P$;CODE "Y",N0,G$
 4770 DIM G$(N1,N1)
 4780 POKE J,X
 4790 RAND USR E
 4800 GOTO L
 9000 DIM S$(VAL "192",VAL "32")
 9010 POKE A,VAL "126"
 9020 POKE B,VAL "96"
 9030 POKE VAL "19830",N0
 9040 POKE J,N0
 9050 RAND USR E
 9060 IF USR H THEN LPRINT SD;6,"10 24 42 81 00 41 22 14 F7 81 81 81 00 81 81 F7 34 42 81 81 00 81 42 34"
 9070 RETURN
 9100 DIM S$(N1,N1)
 9105 SAVE "ZX-PAIN[T]"
 9110 PRINT "ZX-PAINT LOADED",,,,"[C][A][U][T][I][O][N] DO NOT  RUN ",,,"ENABLE SCRAM BOARD THENPRESS A KEY TO START"
 9120 IF INKEY$ ="" THEN GOTO VAL "9120"
 9130 GOTO N1

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

Scroll to Top