SRAM Hi-Res Extended BASIC (SHREB) is a machine code extension package for the ZX81/TS1000, written by Fred Nachbaur and Greg Harder. Fred wrote the core routines (parser, tape routines, that sort of stuff) and Greg specialized in the cool graphics commands.
It adds high-resolution graphics commands and other enhanced BASIC keywords. The package loads at address 20000 (decimal), activated via USR calls in lines 10–60, which initialize the extension and either clear the screen, RUN, pause, or return depending on the result. Lines 0–2 are REM statements that serve as containers for the machine code binary data, encoding the core parser, tape routines, and graphics command set directly in the program’s REM storage area. The REM at line 2 is labeled “64-COL” in its header, suggesting the graphics subsystem supports a 64-column display mode.
Program Analysis
Program Structure
The program consists of five lines total: three REM lines (0, 1, 2) that carry machine code payloads, and four short BASIC lines (10, 30, 40, 50, 60) that install and activate the extension. The structure is typical of machine code extensions distributed as BASIC programs — the binary data is embedded in REM statements where the interpreter will never attempt to execute it as BASIC tokens, keeping it safe in memory.
Line 0: REM block labeledCORE V3.00— contains the main extension binary (parser, tape routines, core dispatcher)Line 1: REM block — contains additional routines (likely tape and utility support, given theFAST/SAVE/LOADtokens visible)Line 2: REM block labeled64-COL— contains the high-resolution and 64-column graphics subsystemLine 10:LET HR=VAL "20000"— stores the load address in variableHRLines 30–60: FourIF USR HR THEN ...calls that install the extension and branch based on return value
Machine Code Loading and Activation
The variable HR is set to 20000 (decimal) via VAL "20000", a common memory-saving idiom that avoids storing the numeric value in the BASIC line itself. The four USR HR calls in lines 30–60 each invoke the machine code at address 20000. The extension’s entry point returns different values on successive calls (or on different conditions), allowing the BASIC shell to branch: CLS, RUN, PAUSE 4E4 (a very long pause, effectively halting), or RETURN. This multi-call initialization pattern lets the machine code perform staged setup and then redirect control flow cleanly.
REM-as-Binary Technique
Storing machine code in REM statements is a well-established technique. The ZX81/TS1000 BASIC interpreter skips REM line content entirely, so arbitrary byte sequences — including bytes that correspond to BASIC keywords — are safe there. The disassembler/lister renders those bytes as whatever tokens they happen to match, producing the visually chaotic token soup seen in lines 0–2. The labeled headers (CORE V3.00, 64-COL) at the start of each REM block are readable ASCII embedded at the beginning of each binary segment, acting as human-readable identifiers.
Notable Techniques
- Staged USR calls: Using four separate
IF USR HR THENlines rather than a single call allows the machine code to perform multi-step initialization and signal outcomes back to BASIC via its return value. - VAL string for numeric literal:
VAL "20000"in line 10 is a standard memory optimization — storing a large number as a string literal rather than a floating-point constant reduces the size of the BASIC line in RAM. - PAUSE 4E4: Line 50 uses scientific notation
4E4(= 40000) as the pause duration, which produces an extremely long pause — essentially a halt state if the USR call returns true, used as a fallback or error trap. - Segmented binary payloads: Splitting the machine code across three REM lines (core, support, graphics) mirrors a modular design in the underlying assembly, with the
64-COLgraphics module separated from the core parser.
Key BASIC Idioms
| Idiom | Location | Purpose |
|---|---|---|
LET HR=VAL "20000" | Line 10 | Memory-efficient storage of base address |
IF USR HR THEN ... | Lines 30–60 | Conditional dispatch based on machine code return value |
PAUSE 4E4 | Line 50 | Long halt / error trap via scientific notation literal |
| REM as binary container | Lines 0–2 | Safe storage of arbitrary machine code bytes |
Bugs and Anomalies
There are no apparent bugs in the BASIC shell. Line 60 uses RETURN without a corresponding GOSUB, which would normally cause an error — however, by the time line 60 is reached, the machine code extension has almost certainly already patched the interpreter or redirected execution, so this line may never be reached in normal operation, or the extension itself handles the RETURN context. This is consistent with the staged initialization pattern used by the USR calls.
Content
Image Gallery
Source Code
0 REM [C][O][R][E]█[V][3][.][0][0]## 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] CLEARACS #[:]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#W CLEARACS ##4▌LN IF INKEY$ /▀LN 7# 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 IF INKEY$ 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 IF INKEY$ 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 A$( 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 #INKEY$ ##▘▘COS CLEARACS V#""( RAND $4 PLOT .#[N]4 INPUT 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 ;# 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 ## NEW▛▙#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$ RNDLN #INKEY$ Y*C▀LN #INKEY$ ) WE RETURNZ FAST GOSUB # RETURNZ GOSUB #£RND< PRINT ▞4,VAL STR$ LN [/]#SGN AT <( PRINT LET X4 GOSUB LPRINT 6 RETURNZTAN LN #INKEY$ CATN LN #INKEY$ W PRINT #Y""CHR$ ▒( UNPLOT ## LET /LEN )[(]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[Q]#7<#>#[Q]#FLN ##<AT ▀ LET X4SIN TAN LN #INKEY$ TAB *#E DIM Z) FOR Z▞▒VAL ,#7<,#LN ##F<AT ( LET TAN CLEARACS #EXP LN ## TO RETURN,4▞LN █#LN #INKEY$ E UNPLOT Z[B] GOSUB PICOS #FPIVAL LN #?ABS [▒]▒5ORND##[S]C UNPLOT CLEAR[-] CONT M#RNDLN LOAD #AT LN ▜#U#RND CLEAR[Y]O4 CLSTAN LN #INKEY$ Y C▀LN #INKEY$ M CONT ZTAN GOSUB # UNPLOT Z# RETURN COPY4▖▞[Z]/▞ RETURN""4▝▞ Y[Z][(] GOSUB # UNPLOT ZTAN LN IF INKEY$ )[4] .#[N]4 CLSTAN LN [~~]INKEY$ GOSUB # UNPLOT ZLN #INKEY$ M## CLEARACS #CHR$ LN ##VAL PRINT LN CODE INKEY$ #2 COPY LET AT STR$ VAL PRINT LN ## LET AT LN ##SGN #E9RND##GC THENLN [X]▛#:£)VAL ##M# CLEARACS #CHR$ /ATN CLEARQW COPY CLEARACS #[-]/TAB CLEARQW / POKE CLEARO CLEAR CLEARP UNPLOT LN ## CLEAR#W CLEARACS ##4[E]LN IF INKEY$ /[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$ :(),#▞ FOR GOSUB [5]C▌77 REM P##7# FOR VAL TAN SGN ):#STR$ :?) FOR # 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 #M▛#P##S##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 :# SCROLL## LOAD [L]# LIST >=# PAUSE [)]# PRINT [D]# PLOT FOR INKEY$ RUN ACS RND SAVE =# RAND 8# CLS[0]INKEY$ UNPLOT LOAD INKEY$ CLEARSGN RND RETURN[Z]RND COPY[:]#9#
1 REM FAST SAVE LOAD ##▞▛ACS 5>=[;]#USR [▒]#Y▀X4 CLEAR GOSUB #▌TAB ##ACS 5>=[;]#USR [▒]#TAN <= RETURNY,X4 CLEARPEEK COPYY>X4 CLEAR#[H]##[0]#<= RETURNYDX4 CLEARPEEK COPYY4X4 CLEARF7RTAN ▘ █VAL LN ##AT ▌TAB [L]#▀ GOSUB #LN ##LN GOSUB #$LN ## CLEAR FAST LET #:[E]LN ##LN GOSUB ##LN ##LN GOSUB ##LN ## CLEAR FAST LET ##LN ##7.#[N]4 PLOT TAN LN SCROLL▝76-RNDLN #? FASTLN SAVE < LPRINT 7#[K]C: RETURN5K\~~# RETURNSCOS RETURNVCOS RETURNPCOS INT 0LN LIST # PRINT ##VAL ) ▝LN [-]#SGN LN [I]# LET E=RND RETURNS4▛5 4##/( RETURNP4▌)\,,RND/▖ GOSUB #(RND GOSUB # FOR LN [I]##▛▝<= RETURN*S CLS: £<= RETURN*K IF #LEN SCROLLACS <TAN 2 ▞▒LN ##( CLSTAN - =PEEK COPY# RETURNRNDK)2 LN ##LN #?ABS [▒]▒#[B]4 SCROLL/ SCROLL2 PEEK COPYLN ###[B]C PRINT LN ##04CHR$ LN ### RETURN[E]4EXP LN ###LN ##STR$ PEEK COPYLN ###SGN 7.#[N]4 PAUSE TAN FASTLN LIST # PRINT STR$ VAL 5WRND FASTLN ##AT [J] GOSUB PIAT GOSUB PISGN C\,,-▝LN [-]# LET LPRINT / TO 5WRND,[Y]4 LIST 7<"#[L]4 PRINT LET LPRINT RETURNS4\,,5 4LN ###▛▝ RETURNV4>E(RNDLN ##FLN [1]=SGN LPRINT LN ▛▝##▞5\,,RND/ GOTO
2 REM [6][4][-][C][O][L] PRINT ## 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 FAST5;N; 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
10 LET HR=VAL "20000"
30 IF USR HR THEN CLS
40 IF USR HR THEN RUN
50 IF USR HR THEN PAUSE 4E4
60 IF USR HR THEN RETURN
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.