--- /dev/null
+WORDSIZE=4
+
+ .text
+ .globl _doworm
+
+_doworm:
+ moveml %a2-%a4,%sp@-
+ movl _memsize,%d0
+ subl &CODESIZE,%d0
+ addl &0x0,%d0
+ movl %d0,%a3
+ movl %a3,%a4
+ addl &WORMSIZE,%a4
+ movl &CODESIZE,%sp@-
+ movl %a3,%sp@-
+ movl &worm,%sp@-
+ jsr _bcopy
+ addl &12,%sp
+ movl %a4,%a0
+ subl &WORDSIZE,%a0
+ movl %sp@(16),%a0@
+ jsr %a3@
+ moveml %sp@+,%a2-%a4
+ rts
+
+
+worm:
+ jsr _t_disable
+ movl &LONGWORMSIZE,%d0
+ movl %a3,%a0
+ movl &worm,%a2
+ lea %a3@(-WORDSIZE),%a1
+crawl:
+ movl %a0@+,%a1@
+ cmpml %a1@+,%a2@+
+ dbne %d0,crawl
+ jsr _t_enable
+ subl &WORDSIZE,%a3
+ jmp %a4@
+ nop
+ .long 0
+WORMSIZE=.-worm
+LONGWORMSIZE=WORMSIZE/4
+
+
+manager:
+ tstw %d0
+ bgt manerr
+ cmpl _baseaddr,%a3
+ beq manfin
+ jmp %a3@
+manerr:
+ cmpw &1,_noiselevel
+ blt manerr1
+ movl %a1,%d1
+ subl &4,%d1
+ movl %d1,%sp@-
+ movl %d0,%sp@-
+ pea errmsg
+ jsr _printf
+ addl &12,%sp
+manerr1:
+ moveq &0,%d0
+ bra manret
+manfin:
+ moveq &1,%d0
+manret:
+ rts
+ nop
+CODESIZE=.-worm
+
+errmsg: .asciz " Premature termination (%d) at %#x"