SRAM Hi-Res Extended BASIC

Date: 1987
Type: Cassette
Platform(s): TS 1000

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 labeled CORE 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 the FAST/SAVE/LOAD tokens visible)
  • Line 2: REM block labeled 64-COL — contains the high-resolution and 64-column graphics subsystem
  • Line 10: LET HR=VAL "20000" — stores the load address in variable HR
  • Lines 30–60: Four IF 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 THEN lines 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-COL graphics module separated from the core parser.

Key BASIC Idioms

IdiomLocationPurpose
LET HR=VAL "20000"Line 10Memory-efficient storage of base address
IF USR HR THEN ...Lines 30–60Conditional dispatch based on machine code return value
PAUSE 4E4Line 50Long halt / error trap via scientific notation literal
REM as binary containerLines 0–2Safe 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

Appears On

Related Products

Thirty-eight new commands extend graphic capabilities of ZX81/TS 1000 in 4K machine-code routine package. Features include upper/lower case, 64-column mode,...

Related Articles

Related 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.

Scroll to Top