+ScrBuffer =8200h ;size $1400 (at least)
+
+.end
+eft:
+ dec hl
+ rl (hl)
+ djnz ShiftRowLeft
+ pop hl
+ dec c
+ jr nz,ShiftRowsLeft
+ ld bc,-16
+ add hl,bc
+ ex de,hl
+ pop bc
+ djnz ShiftLeftLoop
+ ld a,(ShiftBitsLeft)
+ jr NoShift
+ShiftRight:
+ dec hl
+ ex de,hl
+ ld c,16
+ sbc hl,bc
+ ex de,hl
+ ld b,57
+ cpl
+ add a,9
+ ld (ShiftBitsRight),a
+ShiftRightLoop:
+ push bc
+ ld bc,-32
+ add hl,bc
+ ex de,hl
+ ld a,(de)
+ ld c,0
+ShiftBitsRight = $-1
+ShiftRowsRight:
+ push hl
+ rra
+ ld b,16
+ShiftRowRight:
+ rr (hl)
+ inc hl
+ djnz ShiftRowRight
+ pop hl
+ dec c
+ jr nz,ShiftRowsRight
+ ld bc,-16
+ add hl,bc
+ ex de,hl
+ pop bc
+ djnz ShiftRightLoop
+ ld a,(ShiftBitsRight)
+NoShift:
+ ld hl,DispBuffer
+ ld de,$fc00+$70
+ ld bc,1024-$70
+ ldir
+ cpl
+ add a,8
+ jr z,NoShiftDelay
+ShiftDelay:
+ ld bc,$0005
+ShiftDelayLoop = $-1
+ djnz ShiftDelayLoop
+ dec c
+ jr nz,ShiftDelayLoop
+ dec a
+ jr nz,ShiftDelay
+NoShiftDelay:
+ pop de
+ pop bc
+ ret
+
+
+NUM_LEVELS = 9
+
+Levels:
+ .db 5,2 ;5 peas, speed 9
+ .db 64,4,0 ;x,y,d
+ .db 0,0 ;field width, height
+ .db 0 ;no additional lines
+
+ .db 8,2
+ .db 4,14,$40
+ .db 128,57
+ .db 1
+ .db 28,28,100,28
+
+ .db 9,2
+ .db 4,8,$40
+ .db 128,57
+ .db 2
+ .db 28,14,100,14
+ .db 28,41,100,41
+
+ .db 9,1
+ .db 4,8,$40
+ .db 128,80
+ .db 2
+ .db 64,14,64,66
+ .db 20,40,108,40
+
+ .db 10,1
+ .db 4,8,$40
+ .db 128,90
+ .db 3
+ .db 18,20,18,70
+ .db 110,20,110,70
+ .db 18,45,110,45
+
+ .db 7,1
+ .db 64,4,0
+ .db 128,86
+ .db 6
+ .db 34,13,56,35
+ .db 34,71,56,49
+ .db 72,35,94,13
+ .db 72,49,94,71
+ .db 16,20,16,64
+ .db 110,20,110,64
+
+ .db 9,0
+ .db 4,10,$40
+ .db 128,82
+ .db 3
+ .db 0,20,74,20
+ .db 54,40,128,40
+ .db 0,60,74,60
+
+ .db 12,0
+ .db 64,4,0
+ .db 128,90
+ .db 6
+ .db 20,16,54,16
+ .db 74,16,110,16
+ .db 20,16,20,72
+ .db 110,16,110,72
+ .db 20,72,54,72
+ .db 74,72,110,72
+
+ .db 8,0
+ .db 72,52,$c0
+ .db 128,128
+ .db 13
+ .db 34,56,56,34
+ .db 34,72,56,94
+ .db 72,34,94,56
+ .db 72,94,94,72
+ .db 46,64,80,64
+ .db 22,11,22,33
+ .db 11,22,33,22
+ .db 22,95,22,117
+ .db 11,106,33,106
+ .db 103,11,103,33
+ .db 91,22,115,22
+ .db 103,95,103,117
+ .db 91,106,115,106
+
+
+
+#include "trigtab.asm"
+#include "line.asm"
+
+WormMsg .db "Wonderworm!",0
+LevelMsg .db "Level ",0
+LivesMsg .db "Lives: ",0
+ScoreMsg .db "Score: ",0
+LeftMsg .db "Food: ",0
+HiScore .db 0
+
+Left =$
+Lives =$+1
+Level =$+2
+Score =$+3
+DispBuffer =$+5
+
+ScrBuffer =$8200 ;32x256 bytes
+SinCosTable =$a200
+WormPos = $b000