+;100% = bugs fixed + levels done
+
+;-----------------------------
+;-----------------------------
+;--------- W O R M ---------
+;-----------------------------
+;-----------------------------
+
+#define cal call
+#define psh push
+#define dnz djnz
+
+#include "asm86.h"
+#include "ti86asm.inc"
+
+_SHRACC = $4383
+_SHLACC = $438B
+_divHLby10 = $4044 ;hl=hl/10
+_divAby10 = $4DAF ;a=a/10
+_HLTIMES10 = $41BF ;hl=hl*10
+_cphlde = $403C
+_clrWindow = $4A86 ;clear screen
+_asapvar = $D6FC ;own name (worm)
+_MOV4B = $429B ;4x ld (de),(hl)
+_MOV5B = $4297 ;5x ld (de),(hl)
+_mov9b = $4283 ;9x ld (de),(hl)
+_ldHLind = $4010 ;ld hl,(hl)
+_swapt_ = $45F3 ;ex_ahl_bde
+_Get_Word_ahl = $521D ;ld de,(ahl)
+_Set_Word_ahl = $5221 ;ld (ahl),de
+_INC_PTR_AHL = $4637 ;ahl=ahl+1
+_AHL_PLUS_2_PG3 = $4C3F ;ahl=ahl+2
+_SET_ABS_SRC_ADDR = $4647 ;set source for mm.ldir =ahl
+_LOAD_ABS_SRC_ADDR = $5209 ;ahl = mm.ldir source
+_SET_ABS_DEST_ADDR = $5285 ;set destination for mm.ldir = ahl
+_SET_MM_NUM_BYTES = $464F ;number of bytes for mm.ldir = ahl
+_mm_ldir = $52ED ;24bit ldir
+_RAM_PAGE_1 = $47E3 ;set $8000+ to page 1
+_RAM_PAGE_7 = $47F3
+_PTEMP_END = $D29A
+_load_ram_ahl = $462F ;ahl->page+hl
+_writeb_inc_ahl = $5567 ;ld (ahl),c
+
+;-----------------------------
+;------- data storage -------
+;-----------------------------
+
+;--- permanent
+
+resbit = 2 ;and%111110**
+
+ScrBuffer = $8820 ;-A7FF (20*FF=1FE0)
+worm1p = $A800 ;-ABFF (400) %10101O00
+worm1 = $AC00 ;-AC1D (30d)
+worm2 = $AC1E ;-AC3B (1E)
+worm3 = $AC3C ;-AC59 (1E)
+worm4 = $AC5A ;-AC77 (1E)
+balls = $AC78 ;-ACFF (3x45d)
+SinCosTable = $AD00 ;-AE00 (4x40)
+ ;free $AE01 ;-AFFF (1FF)
+worm2p = $B000 ;-B3FF (400) %10110O00
+DispBuffer = $B400 ;-B790 (10x57d)
+ ;free $B791 ;-B7FF (6F)
+worm3p = $B800 ;-BBFF (400) %10111O00
+ ;free $BC00 ;-BFFF (400)
+
+ ;program $D748 ;-E7FF (106D+4A)
+ ;free $E800 ;-EFFF (800)
+worm4p = $F000 ;-F3FF (400) %11110O00
+leveldata = $F400 ;-FA70 (<=671)
+
+;--- temporary
+
+templevels = $B400 ;(3*levelstr_on_calc)