home *** CD-ROM | disk | FTP | other *** search
/ The Very Best of Atari Inside / The Very Best of Atari Inside 1.iso / sharew / spiele / kids / worm / worm.s < prev   
Encoding:
Text File  |  1995-08-15  |  48.0 KB  |  2,479 lines

  1. * GET SCREEN PHYSICAL BASE ADDRESS
  2. *  Returns base address in D0
  3. *==================================
  4. get_scrn_base:    macro
  5.     move.w    #2,-(a7)
  6.     trap    #14
  7.     addq.l    #2,a7
  8.     endm
  9. *SOUND MACROS
  10. *=================
  11.  
  12. sound    macro
  13.     move.w    \1,d0
  14.     bsr    sndcom
  15.     endm
  16. music_on:    macro
  17.     bsr    smp_cmnd
  18.     endm
  19. music_off:    macro
  20.     lea.l    zeros(pc),a0
  21.     move.l    a0,p_sam
  22.     endm
  23. *GRAPHIC MACROS
  24. *=================================
  25.  
  26. * 1) draw x1,y1,x2,y2
  27. *-------------------------
  28. draw:     macro
  29.     bsr    linea
  30.         move.w    \1,x1(a0)
  31.         move.w    \2,y1(a0)
  32.         move.w    \3,x2(a0)
  33.         move.w    \4,y2(a0)  
  34.     bsr    dline
  35.           endm
  36. undraw:    macro
  37.     bsr    linea
  38.         move.w    \1,x1(a0)
  39.         move.w    \2,y1(a0)
  40.         move.w    \3,x2(a0)
  41.         move.w    \4,y2(a0)  
  42.     bsr    undline
  43.           endm
  44. bdraw:    macro
  45.     bsr    linea
  46.         move.w    \1,x1(a0)
  47.         move.w    \2,y1(a0)
  48.         move.w    \3,x2(a0)
  49.         move.w    \4,y2(a0)  
  50.     bsr    bdline
  51.           endm
  52.  
  53. * 2) bar x1,y1,x2,y2
  54. *---------------------------
  55. bar:    macro
  56.     bsr    linea
  57.         move.w    \1,x1(a0)
  58.         move.w    \2,y1(a0)
  59.         move.w    \3,x2(a0)
  60.         move.w    \4,y2(a0)  
  61.     bsr    dbar
  62.     endm
  63.  
  64. * 3) fill_s patern    
  65. fill_s:    macro
  66.     bsr    linea
  67.     move.l    \1,patptr(a0)
  68.     endm
  69.  
  70. * 4) cls
  71. cls:    macro
  72.     bsr    clrscr
  73.     endm
  74.  
  75. * 5) mouse on/off
  76. mouse_on:    macro
  77.     dc.w    $a009
  78.     endm
  79. mouse_off:    macro
  80.     dc.w    $a00a
  81.     endm
  82. * 6) set a colour register
  83. pallete:    macro
  84.     move.w    #\1,d0
  85.     move.w    #\2,d1
  86.     bsr    colset
  87.     endm
  88. * 7) plot x,y
  89. plot:    macro
  90.     move.w    \1,d0
  91.     move.w    \2,d1
  92.     move.w    \3,d2
  93.     bsr    rplot
  94.     endm
  95. * 8) print '<string>'
  96. print:    macro
  97.     lea.l    x\@(pc),a0
  98.     bsr    prnt
  99.     bra    y\@
  100. x\@    dc.b    \1,$0a,$0d,0
  101.     cnop    0,2
  102. y\@    nop
  103.     endm
  104. locate:    macro
  105.     lea.l    x\@(pc),a0
  106.     bsr    prnt
  107.     bra    y\@
  108. x\@    dc.b    27,'Y',\2+32,\1+32,0
  109.     cnop    0,2
  110. y\@    nop
  111.     endm
  112. nprint:    macro
  113.     move.l    \1,d0
  114.     bsr    prtdec
  115.     endm
  116. home:    macro
  117.     move.w    #27,-(a7)
  118.     move.w    #2,-(a7)
  119.     trap    #1
  120.     addq.l    #4,a7
  121.     move.w    #'H',-(a7)
  122.     move.w    #2,-(a7)
  123.     trap    #1
  124.     addq.l    #4,a7
  125.     endm
  126. invert    macro
  127.     move.w    #27,-(a7)
  128.     move.w    #2,-(a7)
  129.     trap    #1
  130.     addq.l    #4,a7
  131.     move.w    #'p',-(a7)
  132.     move.w    #2,-(a7)
  133.     trap    #1
  134.     addq.l    #4,a7
  135.     endm
  136. normal    macro
  137.     move.w    #27,-(a7)
  138.     move.w    #2,-(a7)
  139.     trap    #1
  140.     addq.l    #4,a7
  141.     move.w    #'q',-(a7)
  142.     move.w    #2,-(a7)
  143.     trap    #1
  144.     addq.l    #4,a7
  145.     endm
  146. * 9) pget x,y
  147. pget:    macro
  148.     move.w    \1,d0
  149.     move.w    \2,d1
  150.     bsr    rpget
  151.     endm
  152.           
  153. *Shink Memory Allocation to size
  154. * Must go at start of program, so not terminated by RTS.
  155. *=======================================================
  156. shr_mall:
  157.     move.l    4(a7),a6
  158.     move.l    #20000,-(a7)    *Size to be kept (program+stack+vars)
  159.     move.l    a6,-(a7)
  160.     move.w    #0,-(a7)
  161.     move.w    #$4A,-(a7)
  162.     trap    #1
  163.     add.l    #12,a7
  164. *INSTALL SCREEN BASE
  165.     get_scrn_base
  166.     move.l    d0,sb
  167.     lea.l    bitblt(pc),a6
  168.     move.l    sb,32(a6)
  169. *INITIALISATION BLOCK
  170.     cls
  171.     bsr    injoy
  172.     bsr    init_blocks
  173.     bsr    load_data
  174. *sampled music routines
  175.     lea.l    music(pc),a0
  176.     bsr    sample_init
  177.     bra    title_page 
  178.  
  179. *GAME ROUTINE (MAINLOOP) START
  180. start    move.l    screen1,this_screen
  181.     move.w    #1,screen_num
  182.     move.w    #3,lives
  183.     move.w    #600,fuel
  184.     move.l    #0,score
  185. gs_start:
  186.     bsr    init_vars    
  187.     bsr    draw_screen
  188.     lea.l    joyp0(pc),a0
  189.     addq.w    #1,a0
  190.     move.b    #0,(a0)
  191. mainloop:
  192.     lea.l    joyp0(pc),a0
  193.     addq.w    #1,a0
  194.     move.b    (a0),d5
  195.     bsr    check_for_ground
  196.     move.w    sx,d0
  197.     move.w    sy,d1
  198.     btst    #0,d5
  199.     beq    jjp1
  200.     subq.w    #1,d1
  201.     sub.w    #1,fuel
  202.     btst.b    #0,prev_dir
  203.     bne    jjp1
  204.     movem.l    d0/d1/d5,-(a7)
  205.     sound    #2
  206.     movem.l    (a7)+,d0/d1/d5
  207. jjp1    btst    #1,d5
  208.     beq    jjp2
  209.     addq.w    #2,d1
  210. jjp2    btst    #2,d5
  211.     beq    jjp3
  212.     subq.w    #2,d0
  213. jjp3    btst    #3,d5
  214.     beq    jjp4
  215.     addq.w    #2,d0
  216. jjp4    btst    #7,d5            *if fire then check for cheat
  217.     bne    cheat
  218. jjp4a    btst.b    #0,prev_dir
  219.     beq    jjp5
  220.     btst    #0,d5
  221.     bne    jjp5
  222.     addq.w    #2,d1
  223.     movem.l    d0/d1/d5,-(a7)
  224.     sound    #0
  225.     movem.l    (a7)+,d0/d1/d5
  226. jjp5    move.b    d5,prev_dir
  227.     movem.w    d0-d1,-(a7)
  228.     bsr    vbi
  229.     movem.w    (a7)+,d0-d1
  230.     cmp.w    sx,d0
  231.     bne    udate
  232.     cmp.w    sy,d1
  233.     bne    udate
  234. rtudate    bsr    vbi
  235.     cmp.w    #2,extras
  236.     beq    rtudatej1
  237.     bsr    ualiens
  238. rtudatej1:
  239.     cmp.w    #1,extras
  240.     beq    rtudatej2
  241.     bsr    check_death
  242.     cmp.w    #1,d4
  243.     beq    lose_life
  244. rtudatej2:
  245.     bsr    ufuel
  246.     cmp.w    #0,fuel
  247.     beq    lose_life
  248.     bsr    check_item
  249.     cmp.w    #0,item_count
  250.     beq    finish_screen
  251.     bra    mainloop
  252.  
  253. *CHEAT MODE
  254. cheat    movem.l    d0/d1/d5,-(a7)
  255.     lea.l    cheat_code(pc),a5
  256.     move.b    (a5)+,d5
  257. cheatlp    bsr    inkey
  258.     clr.l    d5
  259.     cmp.w    #0,d0
  260.     beq    cheatlp
  261.     or.w    #32,d0
  262.     move.b    (a5)+,d5
  263.     cmp.w    #255,d5
  264.     beq    enable_cheat
  265.     cmp.w    d5,d0
  266.     beq    cheatlp
  267.     movem.l    (a7)+,d0/d1/d5
  268.     bra    jjp4a
  269. enable_cheat:
  270.     movem.l    (a7)+,d0/d1/d5
  271.     bra    finish_screen    
  272.  
  273. *UPDATE FUEL INDICATOR AND SCORE ( & HI SCORE)
  274. ufuel    undraw    #156,#156,#305,#156
  275.     undraw    #156,#157,#305,#157
  276.     move.w    fuel,d5
  277.     lsr.w    #2,d5
  278.     add.w    #150,d5
  279.     draw    #156,#156,d5,#156    
  280.     draw    #156,#157,d5,#157
  281.     move.l    score,d0
  282.     cmp.l    last_score,d0
  283.     beq    eufuel    
  284.     cmp.l    hiscore,d0
  285.     blt    ufuelj1
  286.     invert
  287.     move.l    score,hiscore
  288.     locate    34,0
  289.     nprint    hiscore
  290.     normal
  291. ufuelj1    home
  292.     nprint    score
  293.     move.l    score,last_score
  294. eufuel    rts
  295.     
  296. *LOSE A LIFE
  297. lose_life:
  298.     bsr    check_item
  299.     bsr    vbi
  300.     cmp.w    #0,collector
  301.     bne    lose_life    
  302.     move.w    #8,palien
  303.     move.w    #600,fuel
  304.     sound    #5
  305. lose_loop:
  306.     move.l    wormdie,a0
  307.     move.w    sx,d0
  308.     move.w    sy,d1
  309.     bsr    sprite
  310.     bsr    vbi
  311.     bsr    vbi
  312.     bsr    vbi
  313.     bsr    vbi
  314.     sub.w    #1,palien
  315.     cmp.w    #0,palien
  316.     bne    lose_loop
  317.     sub.w    #1,lives
  318.     cmp.w    #0,lives
  319.     beq    game_over
  320.     bra    gs_start
  321.  
  322. *GAME OVER
  323. game_over:
  324.     bsr    vbi
  325.     cls
  326.     draw    #9,#9,#311,#9
  327.     draw    #9,#9,#9,#151
  328.     draw    #9,#151,#311,#151
  329.     draw    #311,#151,#311,#9
  330.     move.l    logo,a0
  331.     move.w    #30,d0
  332.     move.w    #160,d1
  333.     bsr    sprite
  334.     bsr    vbi
  335.     move.w    #120,d0
  336.     move.w    #50,d1
  337.     move.l    gameover,a0
  338.     bsr    sprite
  339.     move.w    #500,d5
  340. wait_gover:
  341.     bsr    vbi
  342.     dbra    d5,wait_gover
  343.     bra    title_page
  344.  
  345. *FINISH SCREEN
  346. finish_screen:
  347.     bsr    check_item
  348.     bsr    vbi
  349.     cmp.w    #0,collector
  350.     bne    finish_screen
  351.     bsr    vbi
  352.     cmp.w    #25,screen_num
  353.     beq    end_game
  354.     cls
  355.     draw    #9,#9,#311,#9
  356.     draw    #9,#9,#9,#151
  357.     draw    #9,#151,#311,#151
  358.     draw    #311,#151,#311,#9
  359.     move.l    logo,a0
  360.     move.w    #30,d0
  361.     move.w    #160,d1
  362.     bsr    sprite
  363.     bsr    vbi
  364.     move.w    #120,d0
  365.     move.w    #50,d1
  366.     move.l    welldone,a0
  367.     bsr    sprite
  368.     move.w    #250,d5
  369. wait_finish:
  370.     bsr    vbi
  371.     dbra    d5,wait_finish
  372.     move.l    next_screen,this_screen
  373.     add.w    #1,screen_num
  374.     bra    gs_start
  375.  
  376. *UPDATE SCREEN DISPLAY
  377. *worm display
  378. udate    cmp.w    sx,d0
  379.     blt    udj1
  380.     move.l    wormr,a0
  381. udj1    cmp.w    sx,d0
  382.     bgt    udj2
  383.     move.l    worml,a0
  384. udj2    cmp.w    sy,d1
  385.     beq    udj4
  386.     blt    udj3
  387.     cmp.w    sx,d0
  388.     bne    udj4
  389.     move.l    wormd,a0
  390.     bra    udj4
  391. udj3    move.l    wormu,a0
  392. udj4    move.w    d0,sx
  393.     move.w    d1,sy
  394.     move.l    a0,-(a7)
  395.     move.l    (a7)+,a0
  396.     move.w    sx,d0
  397.     move.w    sy,d1
  398.     bsr    sprite
  399.     bra    rtudate
  400.  
  401. *udate alien locations and display
  402. ualiens    move.l    alien_blok,palien
  403. al_loop    move.l    palien,a5
  404.     move.l    (a5)+,a0
  405.     cmp.l    #0,a0
  406.     beq    eal_loop
  407.     clr.l    d2
  408.     move.w    12(a5),d2
  409.     move.w    8(a5),d0
  410.     move.w    4(a5),d1
  411.     cmp.w    (a5),d0
  412.     bne    al_jp1
  413.     btst.l    #1,d2
  414.     beq    al_jp1
  415.     bclr.l    #1,d2
  416.     bset.l    #0,d2
  417. al_jp1    cmp.w    (a5),d1
  418.     bne    al_jp2
  419.     btst.l    #0,d2
  420.     beq    al_jp2
  421.     bclr.l    #0,d2
  422.     bset.l    #1,d2
  423. al_jp2    move.w    10(a5),d0
  424.     move.w    6(a5),d1
  425.     cmp.w    2(a5),d0
  426.     bne    al_jp3
  427.     btst.l    #3,d2
  428.     beq    al_jp3
  429.     bclr.l    #3,d2
  430.     bset.l    #2,d2
  431. al_jp3    cmp.w    2(a5),d1
  432.     bne    al_jp4
  433.     btst    #2,d2
  434.     beq    al_jp4
  435.     bset.l    #3,d2
  436.     bclr.l    #2,d2
  437. al_jp4    move.w    d2,12(a5)
  438.     btst.l    #0,d2
  439.     beq    al_jp5
  440.     subq.w    #1,(a5)
  441. al_jp5    btst.l    #1,d2
  442.     beq    al_jp6
  443.     addq.w    #1,(a5)
  444. al_jp6    btst.l    #2,d2
  445.     beq    al_jp7
  446.     subq.w    #1,2(a5)
  447. al_jp7    btst.l    #3,d2
  448.     beq    al_jpe
  449.     addq.w    #1,2(a5)
  450. al_jpe    move.w    (a5),d0
  451.     move.w    2(a5),d1
  452.     add.l    #14,a5
  453.     move.l    a5,palien
  454.     bsr    sprite
  455.     bra    al_loop
  456. eal_loop:
  457.     rts
  458.  
  459. exit    bsr    resmou
  460.     clr.w    -(a7)
  461.     trap    #1
  462.  
  463. *initialise variables
  464. init_vars:
  465.     move.w    #100,sx
  466.     move.w    #100,sy
  467.     move.l    alien_blok,palien
  468.     move.l    palien,a0
  469.     move.l    #0,(a0)+
  470.     move.l    #0,(a0)
  471.     move.l    item_blok,pitem
  472.     move.w    #0,item_count
  473.     move.w    #0,collector
  474.     move.w    #0,extras
  475.     rts
  476. *Draw screen display (inc. lives,fuel,etc)
  477. draw_screen:
  478.     bsr    drw_blocks
  479.     draw    #9,#9,#311,#9
  480.     draw    #9,#9,#9,#151
  481.     draw    #9,#151,#311,#151
  482.     draw    #311,#151,#311,#9
  483.     draw    #8,#8,#312,#8
  484.     draw    #8,#8,#8,#152
  485.     draw    #8,#152,#312,#152
  486.     draw    #312,#152,#312,#8
  487.     move.l    logo,a0
  488.     move.w    #12,d0
  489.     move.w    #160,d1
  490.     bsr    sprite
  491.     move.l    fuellogo,a0
  492.     move.w    #130,d0
  493.     move.w    #155,d1
  494.     bsr    sprite
  495.     bdraw    #155,#155,#307,#155
  496.     bdraw    #155,#158,#307,#158
  497.     locate  5,0
  498.     print    ':SCORE'
  499.     locate    26,0
  500.     print    'HISCORE:'
  501.     locate    34,0
  502.     nprint    hiscore
  503. drw_lvs    move.w    lives,dspt
  504.     move.w    #280,palien
  505. d_lives    move.w    palien,d0
  506.     move.w    #170,d1
  507.     move.l    worml,a0
  508.     jsr    sprite
  509.     sub.w    #35,palien
  510.     sub.w    #1,dspt
  511.     cmp.w    #0,dspt
  512.     bne    d_lives
  513.     rts
  514. *DRAW OUT A SCREEN FROM A SCREEN DESCRIPTION
  515. drw_blocks:
  516.     cls
  517.     move.l    this_screen,a5
  518. drwscrlp:
  519.     move.w    (a5)+,d2
  520.     move.w    (a5)+,d0
  521.     move.w    (a5)+,d1
  522.     move.l    a5,dspt
  523.     cmp.w    #0,d2
  524.     beq    end_drwscr
  525.     cmp.w    #1,d2
  526.     bne    drwscrj1
  527.     move.l    brick,a0
  528. drwscrj1:
  529.     cmp.w    #2,d2
  530.     bne    drwscrj2
  531.     move.l    blueball,a0
  532. drwscrj2:
  533.     cmp.w    #3,d2
  534.     bne    drwscrj3
  535.     move.l    grass,a0
  536. drwscrj3:
  537.     cmp.w    #4,d2
  538.     bne    drwscrj4
  539.     move.w    d0,sx
  540.     move.w    d1,sy
  541.     bra    drwscrlp
  542. drwscrj4:
  543.     cmp.w    #5,d2
  544.     bne    drwscrj5
  545.     move.l    tree,a0
  546. drwscrj5:
  547.     cmp.w    #6,d2
  548.     bne    drwscrj6
  549.     move.l    pillar,a0
  550. drwscrj6:
  551.     cmp.w    #100,d2
  552.     bne    drwscrj7
  553.     move.l    palien,a0
  554.     move.l    eyeball,(a0)+
  555.     move.w    d0,(a0)+
  556.     move.w    d1,(a0)+    
  557.     move.l    (a5)+,(a0)+
  558.     move.l    (a5)+,(a0)+
  559.     move.w    (a5)+,(a0)+
  560.     move.l    a0,palien
  561.     move.l    #0,(a0)
  562.     addq.l    #2,a5
  563.     bra    drwscrlp
  564. drwscrj7:
  565.     cmp.w    #101,d2
  566.     bne    drwscrj8
  567.     move.l    palien,a0
  568.     move.l    platform,(a0)+
  569.     move.w    d0,(a0)+
  570.     move.w    d1,(a0)+    
  571.     move.l    (a5)+,(a0)+
  572.     move.l    (a5)+,(a0)+
  573.     move.w    (a5)+,(a0)+
  574.     move.l    a0,palien
  575.     move.l    #0,(a0)
  576.     addq.l    #2,a5
  577.     bra    drwscrlp
  578. drwscrj8:
  579.     cmp.w    #200,d2
  580.     bne    drwscrj9
  581.     move.l    pitem,a0
  582.     move.w    #1,(a0)+
  583.     move.w    d0,(a0)+
  584.     move.w    d1,(a0)+
  585.     move.l    a0,pitem
  586.     move.l    #0,(a0)
  587.     add.w    #1,item_count
  588.     move.l    wormegg,a0
  589. drwscrj9:
  590.     cmp.w    #7,d2
  591.     bne    drwscrj10
  592.     move.l    hpipe,a0
  593. drwscrj10:
  594.     cmp.w    #8,d2
  595.     bne    drwscrj11
  596.     move.l    vpipe,a0
  597. drwscrj11:
  598.     cmp.w    #9,d2
  599.     bne    drwscrj12
  600.     move.l    conpipe,a0
  601. drwscrj12:
  602.     cmp.w    #102,d2
  603.     bne    drwscrj13
  604.     move.l    palien,a0
  605.     move.l    drill,(a0)+
  606.     move.w    d0,(a0)+
  607.     move.w    d1,(a0)+    
  608.     move.l    (a5)+,(a0)+
  609.     move.l    (a5)+,(a0)+
  610.     move.w    (a5)+,(a0)+
  611.     move.l    a0,palien
  612.     move.l    #0,(a0)
  613.     addq.l    #2,a5
  614.     bra    drwscrlp
  615. drwscrj13:
  616.     cmp.w    #201,d2
  617.     bne    drwscrj14
  618.     move.l    pitem,a0
  619.     move.w    #2,(a0)+
  620.     move.w    d0,(a0)+
  621.     move.w    d1,(a0)+
  622.     move.l    a0,pitem
  623.     move.l    #0,(a0)
  624.     move.l    xtralife,a0
  625. drwscrj14:
  626.     cmp.w    #202,d2
  627.     bne    drwscrj15
  628.     move.l    pitem,a0
  629.     move.w    #3,(a0)+
  630.     move.w    d0,(a0)+
  631.     move.w    d1,(a0)+
  632.     move.l    a0,pitem
  633.     move.l    #0,(a0)
  634.     move.l    xtrafuel,a0
  635. drwscrj15:
  636.     cmp.w    #103,d2
  637.     bne    drwscrj16
  638.     move.l    palien,a0
  639.     move.l    mushroom,(a0)+
  640.     move.w    d0,(a0)+
  641.     move.w    d1,(a0)+    
  642.     move.l    (a5)+,(a0)+
  643.     move.l    (a5)+,(a0)+
  644.     move.w    (a5)+,(a0)+
  645.     move.l    a0,palien
  646.     move.l    #0,(a0)
  647.     addq.l    #2,a5
  648.     bra    drwscrlp
  649. drwscrj16:
  650.     cmp.w    #10,d2
  651.     bne    drwscrj17
  652.     move.l    hbones,a0
  653. drwscrj17:
  654.     cmp.w    #11,d2
  655.     bne    drwscrj18
  656.     move.l    vbones,a0
  657. drwscrj18:
  658.     cmp.w    #12,d2
  659.     bne    drwscrj19
  660.     move.l    conbones,a0
  661. drwscrj19:
  662.     cmp.w    #203,d2
  663.     bne    drwscrj20
  664.     move.l    pitem,a0
  665.     move.w    #4,(a0)+
  666.     move.w    d0,(a0)+
  667.     move.w    d1,(a0)+
  668.     move.l    a0,pitem
  669.     move.l    #0,(a0)
  670.     move.l    bonus,a0
  671. drwscrj20:
  672.     cmp.w    #13,d2
  673.     bne    drwscrj21
  674.     move.l    sstal,a0
  675. drwscrj21:
  676.     cmp.w    #14,d2
  677.     bne    drwscrj22
  678.     move.l    lstal,a0
  679. drwscrj22:
  680.     cmp.w    #204,d2
  681.     bne    drwscrj23
  682.     move.l    pitem,a0
  683.     move.w    #5,(a0)+
  684.     move.w    d0,(a0)+
  685.     move.w    d1,(a0)+
  686.     move.l    a0,pitem
  687.     move.l    #0,(a0)
  688.     move.l    invun,a0
  689. drwscrj23:
  690.     cmp.w    #205,d2
  691.     bne    drwscrje
  692.     move.l    pitem,a0
  693.     move.w    #6,(a0)+
  694.     move.w    d0,(a0)+
  695.     move.w    d1,(a0)+
  696.     move.l    a0,pitem
  697.     move.l    #0,(a0)
  698.     move.l    freeze,a0
  699. drwscrje:
  700.     bsr    sprite
  701.     move.l    dspt,a5
  702.     bra    drwscrlp
  703. end_drwscr:
  704.     move.l    a5,next_screen
  705.     rts
  706.  
  707. *check for alien contact
  708. check_death:
  709.     move.w    #0,d4
  710.     move.l    alien_blok,a5
  711. c_loop    move.l    (a5)+,a0
  712.     cmp.l    #0,a0
  713.     beq    ec_loop
  714.     move.w    (a5)+,d0
  715.     move.w    (a5),d1
  716.     add.l    #12,a5
  717.     add.w    2(a0),d0
  718.     add.w    4(a0),d1
  719.     move.w    sx,d2
  720.     move.w    sy,d3
  721.     cmp.w    d2,d0
  722.     blt    c_loop
  723.     cmp.w    d3,d1
  724.     blt    c_loop
  725.     sub.w    2(a0),d0
  726.     sub.w    4(a0),d1
  727.     sub.w    #18,d1
  728.     sub.w    #40,d0
  729.     cmp.w    d2,d0
  730.     bgt    c_loop
  731.     cmp.w    d3,d1
  732.     bgt    c_loop
  733.     move.w    #1,d4
  734.     bra    c_loop
  735. ec_loop rts
  736.  
  737. * check for item contact
  738. check_item:
  739.     cmp.w    #0,collector
  740.     bne    get_egglp
  741.     move.l    item_blok,a5
  742. ci_loop    move.w    (a5)+,d5
  743.     cmp.w    #0,d5
  744.     beq    eci_loop
  745.     move.w    (a5)+,d0
  746.     move.w    (a5)+,d1
  747.     add.w    #18,d0
  748.     add.w    #18,d1
  749.     move.w    sx,d2
  750.     move.w    sy,d3
  751.     cmp.w    d2,d0
  752.     blt    ci_loop
  753.     cmp.w    d3,d1
  754.     blt    ci_loop
  755.     sub.w    #40,d1
  756.     sub.w    #61,d0
  757.     cmp.w    d2,d0
  758.     bgt    ci_loop
  759.     cmp.w    d3,d1
  760.     bgt    ci_loop
  761.     cmp.w    #2,d5        * EXTRA LIFE OBJECT
  762.     bne    ci_loopj1
  763.     add.w    #1,item_count
  764.     add.w    #1,lives
  765.     movem.l    d0-d5,-(a7)
  766.     bsr    drw_lvs
  767.     movem.l    (a7)+,d0-d5
  768. ci_loopj1:
  769.     cmp.w    #3,d5        * EXTRA FUEL OBJECT
  770.     bne    ci_loopj2
  771.     add.w    #1,item_count
  772.     move.w    #600,fuel
  773. ci_loopj2:
  774.     cmp.w    #4,d5        * BONUS DIAMOND
  775.     bne    ci_loopj3
  776.     add.w    #1,item_count
  777.     add.l    #50,score
  778. ci_loopj3:
  779.     cmp.w    #5,d5        * INVULNERABILITY
  780.     bne    ci_loopj4
  781.     add.w    #1,item_count
  782.     add.w    #1,extras
  783.     movem.l    d5/a5,-(a7)
  784.     move.l    invun,a0
  785.     move.w    #172,d0
  786.     move.w    #160,d1
  787.     bsr    sprite
  788.     movem.l    (a7)+,d5/a5
  789. ci_loopj4:
  790.     cmp.w    #6,d5        * FREEZE
  791.     bne    ci_loopj5
  792.     add.w    #1,item_count
  793.     add.w    #2,extras
  794.     movem.l    d5/a5,-(a7)
  795.     move.l    freeze,a0
  796.     move.w    #172,d0
  797.     move.w    #160,d1
  798.     bsr    sprite
  799.     movem.l    (a7)+,d5/a5
  800. ci_loopj5:
  801.     add.l    #10,score
  802.     sub.w    #1,item_count
  803.     sub.l    #4,a5
  804.     move.l    a5,stor_pointer
  805.     move.w    #8,collector
  806.     cmp.w    #1,d5
  807.     bne    get_sndj1
  808.     sound    #4
  809. get_sndj1:
  810.     cmp.w    #1,d5
  811.     beq    get_egglp
  812.     sound    #1
  813. get_egglp:
  814.     move.l    stor_pointer,a5
  815.     move.w    (a5),d0
  816.     move.w    2(a5),d1
  817.     move.l    getegg,a0
  818.     bsr    sprite
  819.     sub.w    #1,collector
  820.     cmp.w    #0,collector
  821.     bne    eci_loop
  822.     move.l    stor_pointer,a5
  823.     move.l    #99999999,(a5)+
  824.     bra    ci_loop
  825. eci_loop rts
  826.  
  827. *check for ground underneath worm
  828. check_for_ground:
  829.     clr.w    count
  830.     move.w    #20,d4
  831.     move.w    sx,-(a7)
  832.     move.w    sy,-(a7)
  833.     add.w    #21,sy
  834.     add.w    #40,sx
  835. chklp1    pget    sx,sy
  836.     add.w    d0,count
  837.     subq.w    #2,sx
  838.     dbra    d4,chklp1
  839.     move.w    (a7)+,sy
  840.     move.w    (a7)+,sx
  841.     cmp.w    #0,count
  842.     bne    echk1a
  843.     btst    #0,d5
  844.     bne    echk1a
  845.     bset    #1,d5
  846.     bra    echk1
  847. echk1a    bclr    #1,d5
  848. echk1    clr.w    count
  849.     move.w    #20,d4
  850.     move.w    sx,-(a7)
  851.     move.w    sy,-(a7)
  852.     sub.w    #2,sy
  853.     add.w    #40,sx
  854. chklp2    pget    sx,sy
  855.     add.w    d0,count
  856.     subq.w    #2,sx
  857.     dbra    d4,chklp2
  858.     move.w    (a7)+,sy
  859.     move.w    (a7)+,sx
  860.     cmp.w    #0,count
  861.     beq    echk2
  862.     bclr    #0,d5
  863. echk2    clr.w    count
  864.     move.w    #9,d4
  865.     move.w    sx,-(a7)
  866.     move.w    sy,-(a7)
  867.     add.w    #18,sy
  868.     sub.w    #2,sx
  869. chklp3    pget    sx,sy
  870.     add.w    d0,count
  871.     subq.w    #2,sy
  872.     dbra    d4,chklp3
  873.     move.w    (a7)+,sy
  874.     move.w    (a7)+,sx
  875.     cmp.w    #0,count
  876.     beq    echk3
  877.     bclr    #2,d5
  878. echk3    clr.w    count
  879.     move.w    #9,d4
  880.     move.w    sx,-(a7)
  881.     move.w    sy,-(a7)
  882.     add.w    #18,sy
  883.     add.w    #42,sx
  884. chklp4    pget    sx,sy
  885.     add.w    d0,count
  886.     subq.w    #2,sy
  887.     dbra    d4,chklp4
  888.     move.w    (a7)+,sy
  889.     move.w    (a7)+,sx
  890.     cmp.w    #0,count
  891.     beq    echk4
  892.     bclr    #3,d5
  893. echk4    rts
  894.     
  895. *VARIABLES
  896. sx    dc.w    10
  897. sy    dc.w    10
  898. dspt    dc.l    0
  899. lst_dir    dc.w    0
  900. count    dc.w    0
  901. item_count:
  902.     dc.w    0
  903. collector:
  904.     dc.w    0
  905. stor_pointer:
  906.     dc.l    0
  907. this_screen:
  908.     dc.l    0
  909. next_screen:
  910.     dc.l    0
  911. screen_num:
  912.     dc.w    0
  913. prev_dir:
  914.     dc.w    0
  915. lives    dc.w    0
  916. fuel    dc.w    0
  917. score    dc.l    0
  918. hiscore:
  919.     dc.l    500
  920. last_score:
  921.     dc.l    0
  922. textp    dc.l    0
  923. sb    dc.l    0
  924. extras    dc.w    0
  925. nwormr    dc.b    'SPRITES\WORMR.SPR',0
  926. nworml    dc.b    'SPRITES\WORML.SPR',0
  927. nwormd    dc.b    'SPRITES\WORMD.SPR',0
  928. nwormu    dc.b    'SPRITES\WORMU.SPR',0
  929. nbrick    dc.b    'SPRITES\BRICK.SPR',0
  930. nmushroom:
  931.     dc.b    'SPRITES\MUSHROOM.SPR',0
  932. nscrn1    dc.b    'SPRITES\SCREEN1.SCR',0
  933. ngrass    dc.b    'SPRITES\GRASST.SPR',0
  934. nblueball:
  935.     dc.b    'SPRITES\BLUEBALL.SPR',0
  936. nlogo    dc.b    'SPRITES\WORMLOGO.SPR',0
  937. nsstal    dc.b    'SPRITES\SHORSTAL.SPR',0
  938. nlstal    dc.b    'SPRITES\LONGSTAL.SPR',0    
  939. nbonus    dc.b    'SPRITES\BONUS.SPR',0
  940. ninvun    dc.b    'SPRITES\INVUN.SPR',0
  941. nfreeze    dc.b    'SPRITES\FREEZE.SPR',0
  942. ngameover:
  943.     dc.b    'SPRITES\GAMEOVER.SPR',0
  944. music    dc.b    'MUSIC.PAF',0
  945. ntree    dc.b    'SPRITES\TREE.SPR',0
  946. npillar    dc.b    'SPRITES\PILLAR.SPR',0
  947. nvbones    dc.b    'SPRITES\VBONES.SPR',0
  948. nhbones    dc.b    'SPRITES\HBONES.SPR',0
  949. nconbones:
  950.     dc.b    'SPRITES\CONBONES.SPR',0
  951. nvpipe    dc.b    'SPRITES\VPIPE.SPR',0
  952. nhpipe    dc.b    'SPRITES\HPIPE.SPR',0
  953. nconpipe:
  954.     dc.b    'SPRITES\CONPIPE.SPR',0
  955. neyeball:
  956.     dc.b    'SPRITES\EYEBALL.SPR',0
  957. nplatform:
  958.     dc.b    'SPRITES\PLATFORM.SPR',0
  959. ndrill    dc.b    'SPRITES\DRILL.SPR',0
  960. ntitles    dc.b    'SPRITES\TITLES.SCR',0
  961. nwormdie:
  962.     dc.b    'SPRITES\WORMDIE.SPR',0
  963. nwormegg:
  964.     dc.b    'SPRITES\WORMEGG.SPR',0
  965. ngetegg    dc.b    'SPRITES\GETEGG.SPR',0
  966. nwelldone:
  967.     dc.b    'SPRITES\WELLDONE.SPR',0
  968. nxtralife:
  969.     dc.b    'SPRITES\XTRALIFE.SPR',0
  970. nfuellogo:
  971.     dc.b    'SPRITES\FUEL.SPR',0
  972. nsoundfx:
  973.     dc.b    'SOUNDS.SND',0
  974. nxtrafuel:
  975.     dc.b    'SPRITES\XTRAFUEL.SPR',0
  976. credits dc.b    'WORM - The story of "OOEY GOOEY",your average young worm'
  977.     dc.b    ' out trying to save wormkind from a land invaded by '
  978.     dc.b    'monsters. No fighting though - worms are not like that.'
  979.     dc.b    ' Ooey sets out to rescue the next generation of worms '
  980.     dc.b    'and take them away to safety.......'
  981.     dc.b    'Guide Ooey in his mission - use his helicopter pack and '
  982.     dc.b    'perhaps collect a bonus or two along the way.'
  983.     dc.b    '    "WORM" is a product of DATA UNCERTAIN Software.'
  984.     dc.b    ' (C)1991, Data Uncertain Software....' 
  985.     dc.b    'Sound, Graphics & Program code by Craig Graham.'
  986.     dc.b    ' Additional ideas courtesy of people who happened to '
  987.     dc.b    'pass by.  Thanks go to Steven for the abuse, Mr & Mrs '
  988.     dc.b    'Graham for the electricity, and to Andrea for showing a '
  989.     dc.b    'healthy interest in something that bores her silly. '
  990.     dc.b    'Thanks to Pop Will Eat Itself for inspiration. '
  991.     dc.b    'Thanks also to the COZMIK OYSTERZ (Mr Hancock, Trev the'
  992.     dc.b    ' Fish, Dan the Man & Jon E Bass). Watch out for '
  993.     dc.b    'Mixing Desk Pro v1.2 & Sprite Animator IV, as used in '
  994.     dc.b    'the developement of this game. Compliments, comments, '
  995.     dc.b    'job offers and MONEY can be sent to CRAIG GRAHAM, Care Of 46 '
  996.     dc.b    'SCHOOL RD, LANGOLD, WORKSOP, NOTTS, S81 9PY. TEL (0909)'
  997.     dc.b    ' 732788. (Weekends only.)       '
  998.     dc.b    'Midweek correspondance via BAe SPACE SYSTEMS Stevenage, Herts.'
  999.     dc.b    ' Care of P W Romain, Training Department.                     '
  1000.     dc.b    'CRAIG LOVES ANDREA . . . . CRAIG LOVES ANDREA. . . . '
  1001.     dc.b    'CRAIG LOVES ANDREA . . . . CRAIG LOVES ANDREA. . . . . . . . . . That could be a cheat code ?'
  1002.     dc.b    '                                         ',0
  1003. e_credits:
  1004.     dc.b    'And thus Ooey Gooey rescued the next generation of worm'
  1005.     dc.b    'kind. Thanks to your help the wormeggs all hatched, and'
  1006.     dc.b    ' the Newey Gooeys (baby worms) lived happily ever after'
  1007.     dc.b    '. . . . . . . . . . .                                  ',0
  1008. cheat_code:
  1009.     dc.b    0,'craig loves andrea',255
  1010.     cnop    0,2
  1011. wormr    dc.l    0
  1012. worml    dc.l    0
  1013. wormd    dc.l    0
  1014. wormu    dc.l    0
  1015. wormdie    dc.l    0
  1016. brick    dc.l    0
  1017. sstal    dc.l    0
  1018. lstal    dc.l    0
  1019. invun    dc.l    0
  1020. freeze    dc.l    0
  1021. mushroom:
  1022.     dc.l    0
  1023. screen1    dc.l    0
  1024. eyeball    dc.l    0
  1025. vpipe    dc.l    0
  1026. hpipe    dc.l    0
  1027. conpipe    dc.l    0
  1028. vbones    dc.l    0
  1029. hbones    dc.l    0
  1030. conbones:
  1031.     dc.l    0
  1032. bonus    dc.l    0
  1033. platform:
  1034.     dc.l    0
  1035. xtralife:
  1036.     dc.l    0
  1037. drill    dc.l    0
  1038. blueball:
  1039.     dc.l    0
  1040. grass    dc.l    0
  1041. logo    dc.l    0
  1042. titles    dc.l    0
  1043. gameover:
  1044.     dc.l    0
  1045. tree    dc.l    0
  1046. pillar    dc.l    0
  1047. wormegg    dc.l    0
  1048. getegg    dc.l    0
  1049. fuellogo:
  1050.     dc.l    0
  1051. xtrafuel:
  1052.     dc.l    0
  1053. welldone:
  1054.     dc.l    0
  1055. soundfx    dc.l    0
  1056. alien_blok:
  1057.     dc.l    0
  1058. palien    dc.l    0
  1059. item_blok:
  1060.     dc.l    0
  1061. pitem    dc.l    0
  1062. load_data:
  1063.     lea.l    nlogo(pc),a0
  1064.     move.l    logo,a1    
  1065.     bsr    spload
  1066.     move.w    #110,d0
  1067.     move.w    #50,d1
  1068.     move.l    logo,a0
  1069.     bsr    sprite
  1070.     lea.l    nwormr(pc),a0
  1071.     move.l    wormr,a1    
  1072.     bsr    spload
  1073.     lea.l    nwormdie(pc),a0
  1074.     move.l    wormdie,a1    
  1075.     bsr    spload
  1076.     lea.l    nwormegg(pc),a0
  1077.     move.l    wormegg,a1    
  1078.     bsr    spload
  1079.     lea.l    ngetegg(pc),a0
  1080.     move.l    getegg,a1    
  1081.     bsr    spload
  1082.     lea.l    ninvun(pc),a0
  1083.     move.l    invun,a1    
  1084.     bsr    spload
  1085.     lea.l    ntitles(pc),a0
  1086.     move.l    titles,a1    
  1087.     bsr    spload
  1088.     lea.l    nmushroom(pc),a0
  1089.     move.l    mushroom,a1    
  1090.     bsr    spload
  1091.     lea.l    nwelldone(pc),a0
  1092.     move.l    welldone,a1    
  1093.     bsr    spload
  1094.     lea.l    nlstal(pc),a0
  1095.     move.l    lstal,a1    
  1096.     bsr    spload
  1097.     lea.l    nsstal(pc),a0
  1098.     move.l    sstal,a1    
  1099.     bsr    spload
  1100.     lea.l    nbonus(pc),a0
  1101.     move.l    bonus,a1    
  1102.     bsr    spload
  1103.     lea.l    ngameover(pc),a0
  1104.     move.l    gameover,a1    
  1105.     bsr    spload
  1106.     lea.l    nworml(pc),a0
  1107.     move.l    worml,a1    
  1108.     bsr    spload
  1109.     lea.l    nwormd(pc),a0
  1110.     move.l    wormd,a1    
  1111.     bsr    spload
  1112.     lea.l    nwormu(pc),a0
  1113.     move.l    wormu,a1    
  1114.     bsr    spload
  1115.     lea.l    nhpipe(pc),a0
  1116.     move.l    hpipe,a1    
  1117.     bsr    spload
  1118.     lea.l    nvbones(pc),a0
  1119.     move.l    vbones,a1    
  1120.     bsr    spload
  1121.     lea.l    nconbones(pc),a0
  1122.     move.l    conbones,a1    
  1123.     bsr    spload
  1124.     lea.l    nhbones(pc),a0
  1125.     move.l    hbones,a1    
  1126.     bsr    spload
  1127.     lea.l    nvpipe(pc),a0
  1128.     move.l    vpipe,a1    
  1129.     bsr    spload
  1130.     lea.l    nconpipe(pc),a0
  1131.     move.l    conpipe,a1    
  1132.     bsr    spload
  1133.     lea.l    nbrick(pc),a0
  1134.     move.l    brick,a1    
  1135.     bsr    spload
  1136.     lea.l    nblueball(pc),a0
  1137.     move.l    blueball,a1    
  1138.     bsr    spload
  1139.     lea.l    npillar(pc),a0
  1140.     move.l    pillar,a1    
  1141.     bsr    spload
  1142.     lea.l    ntree(pc),a0
  1143.     move.l    tree,a1    
  1144.     bsr    spload
  1145.     lea.l    ngrass(pc),a0
  1146.     move.l    grass,a1    
  1147.     bsr    spload
  1148.     lea.l    neyeball(pc),a0
  1149.     move.l    eyeball,a1    
  1150.     bsr    spload
  1151.     lea.l    nplatform(pc),a0
  1152.     move.l    platform,a1    
  1153.     bsr    spload
  1154.     lea.l    ndrill(pc),a0
  1155.     move.l    drill,a1    
  1156.     bsr    spload
  1157.     lea.l    nxtralife(pc),a0
  1158.     move.l    xtralife,a1    
  1159.     bsr    spload
  1160.     lea.l    nfuellogo(pc),a0
  1161.     move.l    fuellogo,a1    
  1162.     bsr    spload
  1163.     lea.l    nxtrafuel(pc),a0
  1164.     move.l    xtrafuel,a1    
  1165.     bsr    spload
  1166.     lea.l    nscrn1(pc),a0
  1167.     move.l    screen1,a1    
  1168.     bsr    spload
  1169.     lea.l    nsoundfx(pc),a0
  1170.     move.l    soundfx,a1    
  1171.     bsr    spload
  1172.     lea.l    nfreeze(pc),a0
  1173.     move.l    freeze,a1    
  1174.     bsr    spload
  1175.     rts
  1176. *get memory blocks
  1177. init_blocks:
  1178.     move.l    #9000,-(a7)
  1179.     move.w    #$48,-(a7)
  1180.     trap    #1
  1181.     addq.l    #6,a7
  1182.     move.l    d0,eyeball
  1183.     move.l    #9000,-(a7)
  1184.     move.w    #$48,-(a7)
  1185.     trap    #1
  1186.     addq.l    #6,a7
  1187.     move.l    d0,mushroom
  1188.     move.l    #300,-(a7)
  1189.     move.w    #$48,-(a7)
  1190.     trap    #1
  1191.     addq.l    #6,a7
  1192.     move.l    d0,titles
  1193.     move.l    #450,-(a7)
  1194.     move.w    #$48,-(a7)
  1195.     trap    #1
  1196.     addq.l    #6,a7
  1197.     move.l    d0,soundfx
  1198.     move.l    #600,-(a7)
  1199.     move.w    #$48,-(a7)
  1200.     trap    #1
  1201.     addq.l    #6,a7
  1202.     move.l    d0,xtrafuel
  1203.     move.l    #600,-(a7)
  1204.     move.w    #$48,-(a7)
  1205.     trap    #1
  1206.     addq.l    #6,a7
  1207.     move.l    d0,invun
  1208.     move.l    #600,-(a7)
  1209.     move.w    #$48,-(a7)
  1210.     trap    #1
  1211.     addq.l    #6,a7
  1212.     move.l    d0,freeze
  1213.     move.l    #600,-(a7)
  1214.     move.w    #$48,-(a7)
  1215.     trap    #1
  1216.     addq.l    #6,a7
  1217.     move.l    d0,bonus
  1218.     move.l    #800,-(a7)
  1219.     move.w    #$48,-(a7)
  1220.     trap    #1
  1221.     addq.l    #6,a7
  1222.     move.l    d0,fuellogo
  1223.     move.l    #600,-(a7)
  1224.     move.w    #$48,-(a7)
  1225.     trap    #1
  1226.     addq.l    #6,a7
  1227.     move.l    d0,xtralife
  1228.     move.l    #4150,-(a7)
  1229.     move.w    #$48,-(a7)
  1230.     trap    #1
  1231.     addq.l    #6,a7
  1232.     move.l    d0,gameover
  1233.     move.l    #4500,-(a7)
  1234.     move.w    #$48,-(a7)
  1235.     trap    #1
  1236.     addq.l    #6,a7
  1237.     move.l    d0,drill
  1238.     move.l    #7500,-(a7)
  1239.     move.w    #$48,-(a7)
  1240.     trap    #1
  1241.     addq.l    #6,a7
  1242.     move.l    d0,wormdie
  1243.     move.l    #2200,-(a7)
  1244.     move.w    #$48,-(a7)
  1245.     trap    #1
  1246.     addq.l    #6,a7
  1247.     move.l    d0,getegg
  1248.     move.l    #800,-(a7)
  1249.     move.w    #$48,-(a7)
  1250.     trap    #1
  1251.     addq.l    #6,a7
  1252.     move.l    d0,vpipe
  1253.     move.l    #1600,-(a7)
  1254.     move.w    #$48,-(a7)
  1255.     trap    #1
  1256.     addq.l    #6,a7
  1257.     move.l    d0,conpipe
  1258.     move.l    #800,-(a7)
  1259.     move.w    #$48,-(a7)
  1260.     trap    #1
  1261.     addq.l    #6,a7
  1262.     move.l    d0,hpipe
  1263.     move.l    #800,-(a7)
  1264.     move.w    #$48,-(a7)
  1265.     trap    #1
  1266.     addq.l    #6,a7
  1267.     move.l    d0,vbones
  1268.     move.l    #1600,-(a7)
  1269.     move.w    #$48,-(a7)
  1270.     trap    #1
  1271.     addq.l    #6,a7
  1272.     move.l    d0,conbones
  1273.     move.l    #800,-(a7)
  1274.     move.w    #$48,-(a7)
  1275.     trap    #1
  1276.     addq.l    #6,a7
  1277.     move.l    d0,hbones
  1278.     move.l    #4000,-(a7)
  1279.     move.w    #$48,-(a7)
  1280.     trap    #1
  1281.     addq.l    #6,a7
  1282.     move.l    d0,welldone
  1283.     move.l    #3000,-(a7)
  1284.     move.w    #$48,-(a7)
  1285.     trap    #1
  1286.     addq.l    #6,a7
  1287.     move.l    d0,platform
  1288.     move.l    #1000,-(a7)
  1289.     move.w    #$48,-(a7)
  1290.     trap    #1
  1291.     addq.l    #6,a7
  1292.     move.l    d0,alien_blok
  1293.     move.l    #1000,-(a7)
  1294.     move.w    #$48,-(a7)
  1295.     trap    #1
  1296.     addq.l    #6,a7
  1297.     move.l    d0,item_blok
  1298.     move.l    #3300,-(a7)
  1299.     move.w    #$48,-(a7)
  1300.     trap    #1
  1301.     addq.l    #6,a7
  1302.     move.l    d0,wormr
  1303.     move.l    #3300,-(a7)
  1304.     move.w    #$48,-(a7)
  1305.     trap    #1
  1306.     addq.l    #6,a7
  1307.     move.l    d0,worml
  1308.     move.l    #900,-(a7)
  1309.     move.w    #$48,-(a7)
  1310.     trap    #1
  1311.     addq.l    #6,a7
  1312.     move.l    d0,wormd
  1313.     move.l    #850,-(a7)
  1314.     move.w    #$48,-(a7)
  1315.     trap    #1
  1316.     addq.l    #6,a7
  1317.     move.l    d0,wormegg
  1318.     move.l    #3000,-(a7)
  1319.     move.w    #$48,-(a7)
  1320.     trap    #1
  1321.     addq.l    #6,a7
  1322.     move.l    d0,logo
  1323.     move.l    #900,-(a7)
  1324.     move.w    #$48,-(a7)
  1325.     trap    #1
  1326.     addq.l    #6,a7
  1327.     move.l    d0,blueball
  1328.     move.l    #900,-(a7)
  1329.     move.w    #$48,-(a7)
  1330.     trap    #1
  1331.     addq.l    #6,a7
  1332.     move.l    d0,pillar
  1333.     move.l    #910,-(a7)
  1334.     move.w    #$48,-(a7)
  1335.     trap    #1
  1336.     addq.l    #6,a7
  1337.     move.l    d0,grass
  1338.     move.l    #910,-(a7)
  1339.     move.w    #$48,-(a7)
  1340.     trap    #1
  1341.     addq.l    #6,a7
  1342.     move.l    d0,tree
  1343.     move.l    #910,-(a7)
  1344.     move.w    #$48,-(a7)
  1345.     trap    #1
  1346.     addq.l    #6,a7
  1347.     move.l    d0,brick
  1348.     move.l    #600,-(a7)
  1349.     move.w    #$48,-(a7)
  1350.     trap    #1
  1351.     addq.l    #6,a7
  1352.     move.l    d0,sstal
  1353.     move.l    #1150,-(a7)
  1354.     move.w    #$48,-(a7)
  1355.     trap    #1
  1356.     addq.l    #6,a7
  1357.     move.l    d0,lstal
  1358.     move.l    #6000,-(a7)
  1359.     move.w    #$48,-(a7)
  1360.     trap    #1
  1361.     addq.l    #6,a7
  1362.     move.l    d0,wormu
  1363.     move.l    #10000,-(a7)
  1364.     move.w    #$48,-(a7)
  1365.     trap    #1
  1366.     addq.l    #6,a7
  1367.     move.l    d0,screen1
  1368.     rts
  1369. *TITLEPAGE/MAIN MENU
  1370. title_page:
  1371.     bsr    draw_title_page
  1372.     music_on
  1373.     lea.l    credits(pc),a5
  1374.     move.l    a5,textp
  1375.     move.w    #0,item_count
  1376. menu_loop:
  1377.     bsr    vbi
  1378.     bsr    ualiens
  1379.     bsr    scrolly_message
  1380.     lea.l    joyp0(pc),a0
  1381.     move.b    1(a0),d0
  1382.     btst    #7,d0
  1383.     bne    emenu_loop
  1384.     jsr    inkey
  1385.     or.w    #32,d0
  1386.     cmp.w    #'i',d0
  1387.     bne    menu_loop
  1388.     bsr    instructions
  1389.     bra    menu_loop
  1390. emenu_loop:
  1391.     lea.l    joyp0(pc),a0
  1392.     move.b    1(a0),d0
  1393.     btst    #7,d0
  1394.     bne    emenu_loop
  1395.     music_off
  1396.     bra    start
  1397. draw_title_page:
  1398.     bsr    init_vars
  1399.     move.l    titles,this_screen
  1400.     bsr    drw_blocks
  1401.     move.l    logo,a0
  1402.     move.w    #5,d0
  1403.     move.w    #5,d1
  1404.     bsr    sprite
  1405.     move.l    logo,a0
  1406.     move.w    #210,d0
  1407.     move.w    #5,d1
  1408.     bsr    sprite
  1409.     locate  10,20
  1410.     print    'PRESS-FIRE-TO-START'
  1411.     locate    6,21
  1412.     print    'PRESS-"I"-FOR-INSTRUCTIONS'
  1413.     locate  40,26
  1414.     rts
  1415. instructions:
  1416.     bsr    partcls
  1417.     locate    8,1
  1418.     print    '<<<<<<INSTRUCTIONS>>>>>>>'
  1419.     locate    7,4
  1420.     print    'EVIL-EYEBALL'
  1421.     locate    7,9
  1422.     print    'MAGIC-MUSHROOM'
  1423.     locate    7,13
  1424.     print    'RENAGADE-DRILL-BIT'
  1425.     locate    7,18
  1426.     print    'FLYING-SAUCER'
  1427.     locate 10,21
  1428.     print    'AVOID-ALL-OF-THESE.....'
  1429.     move.w    #300,score
  1430.     locate  40,26
  1431. instrlp1:
  1432.     bsr    vbi
  1433.     move.l    eyeball,a0
  1434.     move.w    #20,d0
  1435.     move.w    #20,d1
  1436.     jsr    sprite
  1437.     move.l    mushroom,a0
  1438.     move.w    #20,d0
  1439.     move.w    #60,d1
  1440.     jsr    sprite
  1441.     move.l    drill,a0
  1442.     move.w    #20,d0
  1443.     move.w    #100,d1
  1444.     jsr    sprite
  1445.     move.l    platform,a0
  1446.     move.w    #20,d0
  1447.     move.w    #140,d1
  1448.     jsr    sprite
  1449.     bsr    scrolly_message
  1450.     lea.l    joyp0(pc),a0
  1451.     move.b    1(a0),d0
  1452.     btst    #7,d0
  1453.     bne    emenu_loop
  1454.     subq.w    #1,score
  1455.     cmp.w    #0,score
  1456.     bne    instrlp1
  1457.     bsr    partcls
  1458.     locate    8,1
  1459.     print    '<<<<<<INSTRUCTIONS>>>>>>>'
  1460.     locate    7,3
  1461.     print    'WORM-EGG'
  1462.     locate    7,6
  1463.     print    'BONUS-DIAMOND'
  1464.     locate    7,9
  1465.     print    'EXTRA-LIFE'
  1466.     locate    7,12
  1467.     print    'EXTRA-FUEL'
  1468.     locate    7,15
  1469.     print    'INVULNERABILITY'
  1470.     locate    7,18
  1471.     print    'FREEZE'
  1472.     locate 10,22
  1473.     print    'COLLECT-ALL-OF-THESE.....'
  1474.     move.w    #300,score
  1475.     locate  40,26
  1476. instrlp2:
  1477.     bsr    vbi
  1478.     move.l    wormegg,a0
  1479.     move.w    #20,d0
  1480.     move.w    #20,d1
  1481.     jsr    sprite
  1482.     move.l    bonus,a0
  1483.     move.w    #20,d0
  1484.     move.w    #45,d1
  1485.     jsr    sprite
  1486.     move.l    xtralife,a0
  1487.     move.w    #20,d0
  1488.     move.w    #70,d1
  1489.     jsr    sprite
  1490.     move.l    xtrafuel,a0
  1491.     move.w    #20,d0
  1492.     move.w    #95,d1
  1493.     jsr    sprite
  1494.     move.l    invun,a0
  1495.     move.w    #20,d0
  1496.     move.w    #120,d1
  1497.     jsr    sprite
  1498.     move.l    freeze,a0
  1499.     move.w    #20,d0
  1500.     move.w    #145,d1
  1501.     jsr    sprite
  1502.     bsr    scrolly_message
  1503.     lea.l    joyp0(pc),a0
  1504.     move.b    1(a0),d0
  1505.     btst    #7,d0
  1506.     bne    emenu_loop
  1507.     subq.w    #1,score
  1508.     cmp.w    #0,score
  1509.     bne    instrlp2
  1510.     bsr    draw_title_page
  1511.     rts
  1512. scrolly_message:
  1513.     cmp.w    #0,item_count
  1514.     beq    nextchr
  1515.     bsr    scroll
  1516.     sub.w    #1,item_count
  1517.     rts
  1518. nextchr    move.l    textp,a0
  1519.     clr.l    d0
  1520.     move.b    (a0)+,d0
  1521.     cmp.w    #0,d0
  1522.     bne    nxtj1
  1523.     lea.l    credits(pc),a5
  1524.     move.l    a5,textp
  1525.     bra    nextchr
  1526. nxtj1    move.l    a0,textp
  1527.     move.w    d0,-(a7)
  1528.     move.w    #2,-(a7)
  1529.     trap    #1
  1530.     addq.l    #4,a7
  1531.     move.w    #8,item_count
  1532.     bra    scrolly_message
  1533. partcls:
  1534.     move.l    sb,a0
  1535. partclslp:
  1536.     move.l    #0,(a0)+
  1537.     move.l    sb,d0
  1538.     add.l    #$76c0,d0
  1539.     cmp.l    d0,a0
  1540.     bne    partclslp
  1541.     rts
  1542. end_game:
  1543.     cls
  1544.     move.w    #10,d0
  1545.     move.w    #10,d1
  1546.     move.l    welldone,a0
  1547.     bsr    sprite
  1548.     move.w    #220,d0
  1549.     move.w    #10,d1
  1550.     move.l    welldone,a0
  1551.     bsr    sprite
  1552.     lea.l    e_credits(pc),a5
  1553.     move.l    a5,textp
  1554.     locate    39,40
  1555.     music_on
  1556. egame_loop:
  1557.     bsr    vbi
  1558.     bsr    scrolly_message2
  1559.     lea.l    joyp0(pc),a0
  1560.     move.b    1(a0),d0
  1561.     btst    #7,d0
  1562.     beq    egame_loop
  1563.     bra    title_page    
  1564.  
  1565. scrolly_message2:
  1566.     cmp.w    #0,item_count
  1567.     beq    nextchr2
  1568.     bsr    scroll
  1569.     sub.w    #1,item_count
  1570.     rts
  1571. nextchr2:
  1572.     move.l    textp,a0
  1573.     clr.l    d0
  1574.     move.b    (a0)+,d0
  1575.     cmp.w    #0,d0
  1576.     bne    nxtj1_2
  1577.     lea.l    e_credits(pc),a5
  1578.     move.l    a5,textp
  1579.     bra    nextchr2
  1580. nxtj1_2    move.l    a0,textp
  1581.     move.w    d0,-(a7)
  1582.     move.w    #2,-(a7)
  1583.     trap    #1
  1584.     addq.l    #4,a7
  1585.     move.w    #8,item_count
  1586.     bra    scrolly_message2
  1587.  
  1588. scroll    move.w    #0,d2
  1589.           move.w    #0,d3
  1590.           move.w    #0,d4
  1591.           move.w    #0,d5
  1592.           move.l    sb,a0
  1593.           add.l     #$7800,a0
  1594.           move.l    a0,a1
  1595.           add.l        #$500,a1
  1596. scrlp     subq.l    #2,a1
  1597.           move.w    (a1),d1
  1598.           move.w    #0,d0
  1599.           lsl.w     #1,d1
  1600.           bcc       scrj1
  1601.           move.w    #1,d0
  1602. scrj1     cmp.w     #0,d2
  1603.           beq       scrj2
  1604.           bset      #0,d1
  1605. scrj2     move.w    d1,(a1)
  1606.           move.w    d0,d2
  1607.           subq.l    #2,a1
  1608.           move.w    (a1),d1
  1609.           move.w    #0,d0
  1610.           lsl.w     #1,d1
  1611.           bcc       scrj3
  1612.           move.w    #1,d0
  1613. scrj3     cmp.w     #0,d3
  1614.           beq       scrj4
  1615.           bset      #0,d1
  1616. scrj4     move.w    d1,(a1)
  1617.           move.w    d0,d3
  1618.           subq.l    #2,a1
  1619.           move.w    (a1),d1
  1620.           move.w    #0,d0
  1621.           lsl.w     #1,d1
  1622.           bcc       scrj5
  1623.           move.w    #1,d0
  1624. scrj5     cmp.w     #0,d4
  1625.           beq       scrj6
  1626.           bset      #0,d1
  1627. scrj6     move.w    d1,(a1)
  1628.           move.w    d0,d4
  1629.           subq.l    #2,a1
  1630.           move.w    (a1),d1
  1631.           move.w    #0,d0
  1632.           lsl.w     #1,d1
  1633.           bcc       scrj7
  1634.           move.w    #1,d0
  1635. scrj7     cmp.w     #0,d5
  1636.           beq       scrj8
  1637.           bset      #0,d1
  1638. scrj8     move.w    d1,(a1)
  1639.           move.w    d0,d5
  1640.           cmp.l     a0,a1
  1641.           bne       scrlp
  1642.           rts
  1643. *SUBROUTINE LIBRARY TO SUPPORT MACROS
  1644. *=====================================
  1645. dline:      move.w #-1,lstlin(a0)
  1646.           move.w #$ffff,lnmask(a0)
  1647.           move.w #1,fgbp1(a0)
  1648.           move.w #1,fgbp2(a0)
  1649.           move.w #1,fgbp3(a0)
  1650.           move.w #0,fgbp4(a0)
  1651.     dc.w line
  1652.     rts
  1653.  
  1654. bdline:      move.w #-1,lstlin(a0)
  1655.           move.w #$ffff,lnmask(a0)
  1656.           move.w #1,fgbp1(a0)
  1657.           move.w #1,fgbp2(a0)
  1658.           move.w #1,fgbp3(a0)
  1659.           move.w #1,fgbp4(a0)
  1660.     dc.w line
  1661.     rts
  1662.  
  1663. undline:  move.w #-1,lstlin(a0)
  1664.           move.w #$ffff,lnmask(a0)
  1665.           move.w #0,fgbp1(a0)
  1666.           move.w #0,fgbp2(a0)
  1667.           move.w #0,fgbp3(a0)
  1668.           move.w #0,fgbp4(a0)
  1669.     dc.w line
  1670.     rts
  1671. dbar:      move.w #-1,lstlin(a0)
  1672.           move.w #$ffff,lnmask(a0)
  1673.           move.w #1,fgbp1(a0)
  1674.           move.w #1,fgbp2(a0)
  1675.           move.w #1,fgbp3(a0)
  1676.           move.w #0,fgbp4(a0)
  1677.     dc.w fdrect
  1678.     rts
  1679. clrscr    move.w    #27,-(a7)
  1680.           move.w    #2,-(a7)
  1681.           trap      #1
  1682.           addq.l    #4,a7
  1683.           move.w    #'E',-(a7)
  1684.           move.w    #2,-(a7)
  1685.           trap      #1
  1686.           addq.l    #4,a7
  1687.           rts
  1688. linea     dc.w $a000
  1689.           move.l a0,parm
  1690.           rts
  1691. *plot a point
  1692. rplot:    move.l    sb,a0
  1693.     mulu    #160,d1
  1694.     move.w    d0,d3
  1695.     lsr    #4,d3
  1696.     lsl    #2,d3
  1697.     add    d3,d3
  1698.  
  1699.     add    d3,d1
  1700.     adda    d1,a0
  1701.     and    #$f,d0
  1702.     neg    d0
  1703.     add    #15,d0
  1704.  
  1705.     moveq    #3,d3
  1706. color_loop:
  1707.     move    (a0),d1
  1708.     lsr    #1,d2
  1709.     bcs.s    set_bit
  1710.     bclr    d0,d1
  1711.     bra    write_back
  1712. set_bit:
  1713.     bset    d0,d1
  1714. write_back:
  1715.     move    d1,(a0)+
  1716.     dbra    d3,color_loop
  1717.     rts
  1718. *get a point
  1719. rpget:    clr.l    d2
  1720.     move.l    sb,a0
  1721.     mulu    #160,d1
  1722.     move.w    d0,d3
  1723.     lsr    #4,d3
  1724.     lsl    #2,d3
  1725.     add    d3,d3
  1726.  
  1727.     add    d3,d1
  1728.     adda    d1,a0
  1729.     addq.l    #8,a0
  1730.     and    #$f,d0
  1731.     neg    d0
  1732.     add    #15,d0
  1733.  
  1734.     moveq    #3,d3
  1735. pcolor_loop:
  1736.     lsl    #1,d2
  1737.     move    -(a0),d1
  1738.     btst    d0,d1
  1739.     bne    pset_bit
  1740.     bclr    #0,d2
  1741.     bra    pwrite_back
  1742. pset_bit:
  1743.     bset    #0,d2
  1744. pwrite_back:
  1745.     dbra    d3,pcolor_loop
  1746.     move.w    d2,d0
  1747.     rts
  1748. *print a string
  1749. prnt          movem.l a0-a3/d0-d3,-(a7)
  1750.                move.l a0,-(a7)
  1751.                move.w #9,-(a7)
  1752.                trap #1
  1753.                addq.l #6,a7
  1754.                movem.l (a7)+,a0-a3/d0-d3
  1755.                rts
  1756.  
  1757. *sets color , d0=color to set , d1=rgb value
  1758. colset         movem.l a0-a3/d0-d3,-(a7)
  1759.                move.w d1,-(a7)
  1760.                move.w d0,-(a7)
  1761.                move.w #7,-(a7)
  1762.                trap #14
  1763.                addq.l #6,a7
  1764.                movem.l (a7)+,d0-d3/a0-a3
  1765.                rts
  1766. *SEND SOUND COMMANDS
  1767. *------------------------------
  1768. sndcom    mulu.w    #40,d0
  1769.     move.l    soundfx,a0
  1770.     add.l    d0,a0
  1771.       move.l    a0,-(a7)
  1772.           move.w    #32,-(a7)
  1773.           trap      #14
  1774.           addq.l    #6,a7
  1775.           rts
  1776.  
  1777. *        JOYSTICK     ROUTINES
  1778. *-----------------------------------------------------
  1779. *INITIALISATION ROUTINE TO BE CALLED ONCE 
  1780. * AT THE START OF YOUR PROGRAM
  1781. injoy     move.w    #$14,-(a7)
  1782.           move.w    #4,-(a7)
  1783.           move.w    #3,-(a7)
  1784.           trap      #13
  1785.           addq.l    #6,a7
  1786.           move.w    #34,-(a7)
  1787.           trap      #14
  1788.           addq.l    #2,a7
  1789.           movea.l   d0,a0
  1790.           adda.l    #24,a0
  1791.           lea       oldpac(pc),a1
  1792.           move.l    (a0),(a1)
  1793.           lea       joypac(pc),a1
  1794.           move.l    a1,(a0)
  1795.           rts
  1796. *JOYSTK PACKET HANDLER
  1797. *THIS ROUTINE IS CALLED BY TH O/S
  1798. joypac    movem.l   a0/a1,-(a7)
  1799.           lea       joyp0(pc),a1
  1800.           move.b    1(a0),(a1)
  1801.           move.b    2(a0),1(a1)
  1802.           movem.l   (a7)+,a0/a1
  1803.           rts
  1804. *RESTORE NORMAL MOUSE CONTROL
  1805. *CALL THIS ROUTINE TO RETURN TO NORMAL MOUSE CONTROL
  1806. resmou    move.w    #34,-(a7)
  1807.           trap      #14
  1808.           addq.l    #2,a7
  1809.           movea.l   d0,a0
  1810.           adda.l    #24,a0
  1811.           move.l    oldpac(pc),(a0)
  1812.           move.w    #128,-(a7)
  1813.           move.w    #4,-(a7)
  1814.           move.w    #3,-(a7)
  1815.           trap      #13
  1816.           addq.l    #6,a7
  1817.           move.w    #1,-(a7)
  1818.           move.w    #4,-(a7)
  1819.           move.w    #3,-(a7)
  1820.           trap      #13
  1821.           addq.l    #6,a7
  1822.           rts
  1823. oldpac    dc.l      0
  1824. joyp0     dc.w      0
  1825.           ds.b      2
  1826. * { XBIOS CALL $25 }
  1827. *WAITS FOR THE NEXT VERTICAL BLANK AND THEN RETURNS.
  1828. *-------------------------------------------------------
  1829. vbi       move.w    #37,-(a7)
  1830.           trap      #14
  1831.           addq.l    #2,a7
  1832.           rts
  1833. *PRINT DECIMAL NUMBER AT PRESENT SCREEN LOCATION...
  1834. * D0=NUMBER TO PRINT
  1835. *-----------------------
  1836. prtdec      move.l    d0,d1
  1837.           divu.w    #10000,d1
  1838.           move.w    d1,d2
  1839.           bsr       prtdig
  1840.           lsr.l     #8,d1
  1841.           lsr.l     #8,d1
  1842.           divu.w    #1000,d1
  1843.           move.w    d1,d2
  1844.           bsr       prtdig
  1845.           asr.l     #8,d1
  1846.           asr.l     #8,d1
  1847.           divu.w    #100,d1
  1848.           move.w    d1,d2
  1849.           bsr       prtdig
  1850.           lsr.l     #8,d1
  1851.           lsr.l     #8,d1
  1852.           divu.w    #10,d1
  1853.           move.w    d1,d2
  1854.           bsr       prtdig
  1855.           lsr.l     #8,d1
  1856.           lsr.l     #8,d1
  1857.           move.w    d1,d2
  1858.           bsr       prtdig
  1859.           rts
  1860. *print digit 0-9
  1861. prtdig    movem.l   d0-d2/a0-a2,-(a7)
  1862.           add.w     #$30,d2
  1863.           move.w    d2,-(a7)
  1864.           move.w    #2,-(a7)
  1865.           trap      #1
  1866.           addq.l    #4,a7
  1867.           movem.l   (a7)+,d0-d2/a0-a2
  1868.           rts
  1869. * { TOS CALL $06 }
  1870. *This works the same as INKEY$ in basic
  1871. *the ascii code will be returned in D0
  1872. inkey          move.w #$00ff,-(a7)
  1873.                move.w #6,-(a7)
  1874.                trap #1
  1875.                addq.l #4,a7
  1876.                rts
  1877. *---------------------------------------------------
  1878. *SPRITE ROUTINE (version 2.0)
  1879. * use with DESII.BAS generated sprites.
  1880. *To Call :-   LEA.L  <sprite name>(pc),a0
  1881. *             MOVE.W #X,D0
  1882. *             MOVE.W #Y,D1
  1883. *             JSR    SPRITE
  1884. *------------------------------------------
  1885. sprite    lea.l     bitblt(pc),a6
  1886.           move.l    a0,a3
  1887.           move.w    (a0),d4             *max_f
  1888.           move.w    2(a0),(a6)          *x-size
  1889.           move.w    4(a0),2(a6)         *y-size
  1890.           move.w    6(a0),24(a6)        *line-length
  1891.           move.w    8(a0),d2            *present frame No.(0-max_f)
  1892.           move.w    10(a0),d3           *size of frame(bytes)
  1893.           mulu.w    d2,d3               *frame*size_f
  1894.           add.l     #12,d3              *skip header
  1895.           add.l     d3,a0               *location of image to draw
  1896.           move.l    a0,18(a6)           *put l_img into bitblt
  1897.           move.w    d0,28(a6)           *x-pos
  1898.           move.w    d1,30(a6)           *y-pos
  1899.           add.w     #1,d2               *add 1 to frame pointer
  1900.           cmp.w     d4,d2
  1901.           bne       sprit2              *is next frame=max_f ?
  1902.           move.w    #0,d2               *if yes,next frame=0
  1903. sprit2    move.w    d2,8(a3)            *stor next frame
  1904.           lea.l     bitblt(pc),a6
  1905.           move.w    #4,4(a6)
  1906.           dc.w      $a007               *blit
  1907.           rts
  1908. * SAMPLE SEQUENCER
  1909. *  *.PAF FILE PLAYER ROUTINE 1
  1910. * (not under interupt)
  1911. *================================
  1912. next_sam:
  1913.     move.l    p_sam,a0
  1914.     move.l    (a0)+,d0
  1915.     move.l    (a0)+,d1
  1916.     sub.l    d0,d1
  1917.     add.l    l_sam,d0
  1918.     move.l    a0,p_sam
  1919.     lea.l    spa(pc),a0
  1920.     move.l    d0,(a0)+
  1921.     move.l    d1,(a0)
  1922.     rts
  1923.  
  1924. smp_cmnd    MOVEM.L        A0-A3/D0-D4,-(SP)    save registers
  1925.         move.l        l_tape,p_sam
  1926.         bsr        next_sam
  1927.         MOVE.W        #8,-(SP)
  1928.         MOVE.W        #27,-(SP)
  1929.         TRAP        #14
  1930.         ADDQ.L        #4,SP            enable timer b interrupt
  1931.         BSR        super            call supervisor mode
  1932.         MOVE.B        #0,$FFFA1B        stop timer b
  1933.         MOVE        #7,-(SP)
  1934.         CLR        -(SP)
  1935.         MOVE        #28,-(SP)
  1936.         TRAP        #14
  1937.         ADDQ.L        #6,SP            read sound chip port 7
  1938.         LEA        port7(PC),A0
  1939.         MOVE.B        D0,(A0)            save port 7
  1940.         AND.W        #192,D0
  1941.         ADD.W        #63,D0
  1942.         MOVE        #135,-(SP)
  1943.         MOVE        D0,-(SP)
  1944.         MOVE        #28,-(SP)
  1945.         TRAP        #14
  1946.         ADDQ.L        #6,SP            load new value to port 7
  1947.         MOVE.L        #$FF8800,A0                
  1948.         MOVE.L        #$FF8802,A1        sound chip address
  1949.         LEA        sup(PC),A2        data for setting up sound chip
  1950.         MOVE.L        #9,D0
  1951. slp        MOVE.B        (A2)+,(A0)
  1952.         MOVE.B        (A2)+,(A1)
  1953.         DBF        D0,slp            set up sound chip
  1954.         MOVE.L        #8,D0            load coded sample rate
  1955.         MULU        #4,D0            multiply for position in data table
  1956.         LEA        sdt(PC),A2        load address of data table
  1957.         LEA        ntbint(PC),A3        load address of interrupt routine
  1958.         MOVE.L        A3,-(SP)        
  1959.         MOVE.W        0(A2,D0),-(SP)
  1960.         MOVE.W        2(A2,D0),-(SP)
  1961.         MOVE.W        #1,-(SP)
  1962.         MOVE.W        #31,-(SP)
  1963.         TRAP        #14
  1964.         ADD.L        #12,SP            start timer b
  1965.         BSR        usuper            exit supervisor mode
  1966.         MOVEM.L        (SP)+,A0-A3/D0-D4    load registers
  1967.         RTS                    and exit...
  1968.  
  1969. spa        DS.L    2                interrupt routine variables
  1970. sup        DC.B    10,0,9,0,8,0,11,0,12,0        data for sound chip set up
  1971. sd        DC.B    10,0,9,0,8,0            data for sound chip shut down
  1972. port7        DC.L    0                port7
  1973.  
  1974. ;TIMER B INTERRUPT
  1975.  
  1976. ntbint        MOVEM.L        A0-A2/D0-D2,-(SP)    save registers
  1977.         LEA.L        stable(PC),A1        address of data table
  1978.         LEA.L        spa(PC),A2        variables address
  1979.         SUBQ.L        #1,4(A2)
  1980.         BEQ        spexit            decrement and test counter
  1981. ntbt        MOVE.L        (A2),A0            sample address
  1982.         ADDQ.L        #1,(A2)            increment sample address
  1983.         CLR.L        d1
  1984.         CLR.L        d2            clear data registers
  1985.         MOVE.B        (A0),D1            read sample
  1986.         lsr        #2,d1
  1987.         LSL        #1,D1            byte to word value
  1988.         MOVE.B        0(A1,D1.w),D0        read data from sound table
  1989.         MOVE.B        $1(A1,D1.W),D1        data to voice C register
  1990.         MOVE        D0,D2
  1991.         LSR        #4,D2            put volume in lowest nibble
  1992.         ANDI        #$F,D0            mask voice b
  1993.         MOVE.B        #8,$FF8800        select voice a
  1994.         MOVE.B        D2,$FF8802        write volume
  1995.         MOVE.B        #9,$FF8800        select voice b
  1996.         MOVE.B        D1,$FF8802        write volume
  1997.         MOVE.B        #$A,$FF8800        select voice c
  1998.         MOVE.B        D0,$FF8802        write volume
  1999.         MOVEM.L        (SP)+,A0-A2/D0-D2    load registers
  2000.         BCLR        #0,$FFFA0F        acknowledge interrupt
  2001.         RTE                    and exit...
  2002. zeros    dc.l    0,0,0
  2003. spexit
  2004.         move.l        p_sam,a0
  2005.         addq.l        #4,a0
  2006.         cmp.l        #0,(a0)
  2007.         beq        spexit1
  2008.         bsr        next_sam
  2009.         bra        ntbt
  2010. spexit1        MOVE.L        #$FF8800,A0        
  2011.         MOVE.L        #$FF8802,A1        sound chip address for fast accsess
  2012.         LEA        sd(PC),A2        data for sound chip shut down 
  2013.         MOVE.L        #5,D0
  2014. selp        MOVE.B        (A2)+,(A0)
  2015.         MOVE.B        (A2)+,(A1)
  2016.         DBF        D0,selp            output data
  2017.         LEA        port7(PC),A2
  2018.         MOVE.B        #7,(A0)
  2019.         MOVE.B        (A2),(A1)        load port 7
  2020.         MOVEM.L        (SP)+,A0-A2/D0-D2    load registers    
  2021.         MOVE.B        #0,$FFFA1B        timer b    off
  2022.         BCLR        #0,$FFFA0F        acknowledge interrupt
  2023.         RTE                    and exit
  2024. stable        DC.W         $0000
  2025.         DC.W         $0000
  2026.         DC.W         $0001
  2027.         DC.W         $0002
  2028.         DC.W         $0003
  2029.         DC.W         $0004
  2030.         DC.W         $0004
  2031.         DC.W         $0005
  2032.         DC.W         $0005
  2033.         DC.W         $0005
  2034.         DC.W         $0006
  2035.         DC.W         $0006
  2036.         DC.W         $0006    
  2037.         DC.W         $0006
  2038.         DC.W         $0007
  2039.         DC.W         $0007
  2040.         DC.W         $0007
  2041.         DC.W         $0007
  2042.         DC.W         $0007
  2043.         DC.W         $0008
  2044.         DC.W         $0008
  2045.         DC.W         $0008
  2046.         DC.W         $0008
  2047.         DC.W         $0008
  2048.         DC.W         $0208
  2049.         DC.W         $0308
  2050.         DC.W         $0308
  2051.         DC.W         $0408
  2052.         DC.W         $0408
  2053.         DC.W         $0009
  2054.         DC.W         $0009
  2055.         DC.W         $0009
  2056.         DC.W         $0009
  2057.         DC.W         $0209
  2058.         DC.W         $0309
  2059.         DC.W         $0309
  2060.         DC.W         $0409
  2061.         DC.W         $0409
  2062.         DC.W         $0509
  2063.         DC.W         $0509
  2064.         DC.W         $0509
  2065.         DC.W         $0509
  2066.         DC.W         $0609
  2067.         DC.W         $0609
  2068.         DC.W         $0609
  2069.         DC.W         $0609
  2070.         DC.W         $000A
  2071.         DC.W         $020A
  2072.         DC.W         $030A
  2073.         DC.W         $040A
  2074.         DC.W         $040A
  2075.         DC.W         $050A
  2076.         DC.W         $050A
  2077.         DC.W         $050A
  2078.         DC.W         $060A
  2079.         DC.W         $060A
  2080.         DC.W         $060A
  2081.         DC.W         $160A
  2082.         DC.W         $160A
  2083.         DC.W         $000B
  2084.         DC.W         $000B
  2085.         DC.W         $000B
  2086.         DC.W         $010B
  2087.         DC.W         $010B
  2088.         DC.W         $020B
  2089.         DC.W         $030B
  2090.         DC.W         $030B
  2091.         DC.W         $040B
  2092.         DC.W         $0408    
  2093.         DC.W         $050B
  2094.         DC.W         $050B
  2095.         DC.W         $060B
  2096.         DC.W         $060B
  2097.         DC.W         $060B
  2098.         DC.W         $160B
  2099.         DC.W         $070B
  2100.         DC.W         $070B
  2101.         DC.W         $070B
  2102.         DC.W         $170B
  2103.         DC.W         $170B
  2104.         DC.W         $270B
  2105.         DC.W         $080B
  2106.         DC.W         $180B
  2107.         DC.W         $280B
  2108.         DC.W         $380B
  2109.         DC.W         $380B
  2110.         DC.W         $480B
  2111.         DC.W         $480B
  2112.         DC.W         $480B
  2113.         DC.W         $000C
  2114.         DC.W         $010C
  2115.         DC.W         $020C
  2116.         DC.W         $030C
  2117.         DC.W         $030C
  2118.         DC.W         $040C
  2119.         DC.W         $040C
  2120.         DC.W         $050C
  2121.         DC.W         $250C
  2122.         DC.W         $060C
  2123.         DC.W         $060C
  2124.         DC.W         $360C
  2125.         DC.W         $070C
  2126.         DC.W         $270C
  2127.         DC.W         $370C
  2128.         DC.W         $470C
  2129.         DC.W         $470C
  2130.         DC.W         $080C
  2131.         DC.W         $280C
  2132.         DC.W         $280C
  2133.         DC.W         $380C
  2134.         DC.W         $380C
  2135.         DC.W         $480C
  2136.         DC.W         $480C
  2137.         DC.W         $580C
  2138.         DC.W         $580C
  2139.         DC.W         $090C
  2140.         DC.W         $290C
  2141.         DC.W         $390C
  2142.         DC.W         $490C
  2143.         DC.W         $490C
  2144.         DC.W         $590C
  2145.         DC.W         $590C
  2146.         DC.W         $000D
  2147.         DC.W         $010D
  2148.         DC.W         $020D
  2149.         DC.W         $030D
  2150.         DC.W         $040D
  2151.         DC.W         $040D
  2152.         DC.W         $050D
  2153.         DC.W         $050D
  2154.         DC.W         $060D
  2155.         DC.W         $060D
  2156.         DC.W         $070D
  2157.         DC.W         $070D
  2158.         DC.W         $270D
  2159.         DC.W         $270D
  2160.         DC.W         $370D
  2161.         DC.W         $370D
  2162.         DC.W         $080D
  2163.         DC.W         $080D
  2164.         DC.W         $180D
  2165.         DC.W         $280D
  2166.         DC.W         $280D
  2167.         DC.W         $380D
  2168.         DC.W         $480D
  2169.         DC.W         $090D
  2170.         DC.W         $290D
  2171.         DC.W         $390D
  2172.         DC.W         $490D
  2173.         DC.W         $590D
  2174.         DC.W         $690D
  2175.         DC.W         $0A0D
  2176.         DC.W         $2A0D
  2177.         DC.W         $3A0D
  2178.         DC.W         $4A0D
  2179.         DC.W         $5A0D
  2180.         DC.W         $5A0D
  2181.         DC.W         $6A0D
  2182.         DC.W         $6A0D
  2183.         DC.W         $7A0D
  2184.         DC.W         $7A0D
  2185.         DC.W         $0B0D
  2186.         DC.W         $0B0D
  2187.         DC.W         $3B0D
  2188.         DC.W         $4B0D
  2189.         DC.W         $4B0D
  2190.         DC.W         $5B0D
  2191.         DC.W         $5B0D
  2192.         DC.W         $6B0D
  2193.         DC.W         $6B0D
  2194.         DC.W         $6B0D
  2195.         DC.W         $7B0D
  2196.         DC.W         $7B0D
  2197.         DC.W         $7B0D
  2198.         DC.W         $8B0D
  2199.         DC.W         $8B0D
  2200.         DC.W         $8B0D
  2201.         DC.W         $8B0D
  2202.         DC.W         $8B0D
  2203.         DC.W         $000E
  2204.         DC.W         $000E
  2205.         DC.W         $010E
  2206.         DC.W         $020E
  2207.         DC.W         $030E
  2208.         DC.W         $040E
  2209.         DC.W         $040E
  2210.         DC.W         $050E
  2211.         DC.W         $050E
  2212.         DC.W         $060E
  2213.         DC.W         $060E
  2214.         DC.W         $260E
  2215.         DC.W         $070E
  2216.         DC.W         $070E
  2217.         DC.W         $270E
  2218.         DC.W         $080E
  2219.         DC.W         $080E
  2220.         DC.W         $090E
  2221.         DC.W         $490E
  2222.         DC.W         $590E
  2223.         DC.W         $690E
  2224.         DC.W         $0A0E
  2225.         DC.W         $0A0E
  2226.         DC.W         $3A0E
  2227.         DC.W         $3A0E
  2228.         DC.W         $5A0E
  2229.         DC.W         $5A0E
  2230.         DC.W         $6A0E
  2231.         DC.W         $6A0E
  2232.         DC.W         $7A0E
  2233.         DC.W         $7A0E
  2234.         DC.W         $0B0E
  2235.         DC.W         $4B0E
  2236.         DC.W         $4B0E
  2237.         DC.W         $5B0E
  2238.         DC.W         $5B0E
  2239.         DC.W         $6B0E
  2240.         DC.W         $6B0E
  2241.         DC.W         $7B0E
  2242.          DC.W         $7B0E
  2243.         DC.W         $8B0E
  2244.         DC.W         $8B0E
  2245.         DC.W         $9B0E
  2246.         DC.W         $9B0E
  2247.         DC.W         $9B0E
  2248.         DC.W         $9B0E
  2249.         DC.W         $0C0E
  2250.         DC.W         $0C0E
  2251.         DC.W         $3C0E
  2252.         DC.W         $7C0E
  2253.         DC.W         $8C0E
  2254.         DC.W         $8C0E
  2255.         DC.W         $8C0E
  2256.         DC.W         $8C0E
  2257.         DC.W         $8C0E
  2258.         DC.W         $9C0E
  2259.         DC.W         $9C0E
  2260.         DC.W         $9C0E
  2261.         DC.W         $9C0E
  2262.         DC.W         $9C0E
  2263.         DC.W         $9C0E
  2264.         DC.W         $9C0E
  2265.         DC.W         $AC0E
  2266.         DC.W         $AC0E
  2267.         DC.W         $AC0E
  2268.         DC.W         $AC0E
  2269.         DC.W         $AC0E
  2270.         DC.W         $AC0E
  2271.         DC.W         $000F
  2272.         DC.W         $060F
  2273.         DC.W         $060F
  2274.         DC.W         $070F
  2275.         DC.W         $070F
  2276.         DC.W         $070F
  2277.         DC.W         $080F   
  2278.         DC.W         $080F   
  2279.         DC.W         $080F            data for sampled sounds            
  2280.  
  2281. super        CLR.L        -(SP)
  2282.         MOVE.W        #$20,-(SP)
  2283.         TRAP        #1
  2284.         ADD.L        #$6,SP            call supervisor
  2285.         LEA        stksve(PC),A0
  2286.         MOVE.L        D0,(A0)            save stack
  2287.         RTS                    and exit...
  2288.  
  2289. usuper        LEA        stksve(PC),A0
  2290.         MOVE.L        (A0),D0
  2291.         MOVE.L        D0,-(SP)        load stack
  2292.         MOVE        #$20,-(SP)
  2293.         TRAP        #1
  2294.         ADDQ.L        #6,SP            back to user mode
  2295.         RTS        and exit...
  2296.  
  2297. sdt        DC.W        $E2,2,$E2,2,$76,2,$CA,1,$98,1
  2298.         DC.W        $79,1,$65,1,$56,1,$50,1,$45,1
  2299.         DC.W        $39,1,$36,1,$33,1,$30,1,$27,1
  2300.         DC.W        $21,1,$10,1        data table for sample rates(data,control(timer b registers)
  2301.  
  2302. stksve        DS.L        1            stack save
  2303.  
  2304. vbls        DS.L        4            variables
  2305.  
  2306. sample_init:
  2307.     move.l    a0,n_tape
  2308.  
  2309.     move.l    #4000,-(a7)        *Get memory block for
  2310.     move.w    #$48,-(a7)        * "<*.PAF>".
  2311.     trap    #1
  2312.     addq.l    #6,a7
  2313.     move.l    d0,l_tape
  2314.  
  2315.     move.l    #200000,-(a7)        *Get memory block for
  2316.     move.w    #$48,-(a7)        * "<sample>.SPL".
  2317.     trap    #1
  2318.     addq.l    #6,a7
  2319.     move.l    d0,l_sam
  2320.     
  2321.     move.l    n_tape,a0        *Load "<sequnce>.PAF"
  2322.     move.l    l_tape,a2
  2323.     bsr    sload
  2324.     
  2325.     move.l    l_tape,a0        *Load "<sample>.SPL"
  2326.      move.l    l_sam,a2
  2327.     bsr    sload
  2328.     
  2329.     move.l    l_tape,a0        *skip "filename"
  2330.     add.l    #16,a0
  2331.     move.l    a0,l_tape
  2332.     rts
  2333.     
  2334. *variables
  2335. l_tape    dc.l    0
  2336. n_tape    dc.l    0
  2337. l_sam    dc.l    0
  2338. p_sam    dc.l    0
  2339.  
  2340. sload      move.l    a2,edbuff
  2341.           move.w    #0,-(a7)
  2342.           move.l    a0,-(a7)
  2343.           move.w    #$3d,-(a7)
  2344.           trap      #1
  2345.           addq.l    #8,a7
  2346.           tst.w     d0
  2347.           bmi       sload
  2348.           move.w    d0,handle
  2349. snxtbyt    move.l    edbuff,-(a7)
  2350.           move.l    #100000,-(a7)
  2351.           move.w    handle,-(a7)
  2352.           move.w    #$3f,-(a7)
  2353.           trap      #1
  2354.           adda.l    #12,a7
  2355.           tst.l     d0
  2356.           bmi       sclose
  2357.           beq       sclose
  2358.           move.l    d0,d1
  2359.           add.l     #100000,edbuff
  2360.           bra       snxtbyt
  2361. sclose     move.l    edbuff,d1
  2362.           add.l     #100000,d1
  2363.           sub.l     a2,d1
  2364.           move.w    handle,-(a7)
  2365.           move.w    #$3e,-(a7)
  2366.           trap      #1
  2367.           addq.l    #4,a7
  2368.           rts
  2369. *LOAD SPRITE ('<name>.SPR')
  2370. * To Call :-  LEA.L SP<name>(pc),(a0)
  2371. *             LEA.L <name>(pc),(a1)
  2372. *             JSR   SPLOAD
  2373. *-----------------------
  2374. spload    move.l    a0,f_len
  2375.     move.l    a1,edbuff
  2376.           move.w    #0,-(a7)
  2377.           move.l    a0,-(a7)
  2378.           move.w    #$3d,-(a7)
  2379.           trap      #1
  2380.           addq.l    #8,a7
  2381.           tst.w     d0
  2382.           bmi       spload
  2383.           move.w    d0,handle
  2384.     clr.w    -(a7)
  2385.     move.l    f_len,-(a7)
  2386.     move.w    #$4e,-(a7)
  2387.     trap    #1
  2388.     addq.l    #8,a7
  2389.     move.w    #$2f,-(a7)
  2390.     trap    #1
  2391.     addq.l    #2,a7
  2392.     move.l    d0,a0
  2393.     move.l    26(a0),f_len
  2394. nxtbyt    move.l    edbuff,-(a7)
  2395.           move.l    f_len,-(a7)
  2396.           move.w    handle,-(a7)
  2397.           move.w    #$3f,-(a7)
  2398.           trap      #1
  2399.           adda.l    #12,a7
  2400.           tst.l     d0
  2401.           bmi       close
  2402.           beq       close
  2403.           move.l    d0,d1
  2404.           add.l     #512,edbuff
  2405.           bra       nxtbyt
  2406. close     move.l    edbuff,d1
  2407.           add.l     #512,d1
  2408.           sub.l     a2,d1
  2409.           move.w    handle,-(a7)
  2410.           move.w    #$3e,-(a7)
  2411.           trap      #1
  2412.           addq.l    #4,a7
  2413.           rts
  2414. handle    dc.w      0
  2415. edbuff    dc.l      0
  2416. f_len      dc.l        0
  2417. bitblt    dc.w      32
  2418.           dc.w      60
  2419.           dc.w      4
  2420.           dc.w      0
  2421.           dc.w      0
  2422.           dc.w      $0303
  2423.           dc.w      $0303
  2424.           dc.w      0
  2425.           dc.w      0
  2426.           dc.l      $78000
  2427.           dc.w      8
  2428.           dc.w      16
  2429.           dc.w      2
  2430.           dc.w      0
  2431.           dc.w      0
  2432.           dc.l      $78000
  2433.           dc.w      8
  2434.           dc.w      160
  2435.           dc.w      2
  2436.           dc.l     0,0,0,0,0,0,0,0,0
  2437. fill_pattern:
  2438.     dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0
  2439.     dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0
  2440. *LINE A PARAMETERS AND INTERFACE BLOCK
  2441. *------------------------------------------
  2442. *line A calls
  2443. init      equ  0
  2444. line      equ  $a003
  2445. fdrect    equ  $a005
  2446. fdpoly    equ  $a006
  2447. showm     equ  $a009
  2448. hidem     equ  $a00a
  2449. vlinwr    equ  2
  2450. contrl    equ  4
  2451. intin     equ  8
  2452. ptsin     equ  12
  2453. intout    equ  16
  2454. ptsout    equ  20
  2455. fgbp1     equ  24
  2456. fgbp2     equ  26
  2457. fgbp3     equ  28
  2458. fgbp4     equ  30
  2459. lstlin    equ  32
  2460. lnmask    equ  34
  2461. wrtmod    equ  36
  2462. x1        equ  38
  2463. y1        equ  40
  2464. x2        equ  42
  2465. y2        equ  44
  2466. patptr    equ  46
  2467. patmak    equ  50
  2468. multif    equ  52
  2469. sourcx    equ  72
  2470. sourcy    equ  74
  2471. destx     equ  76
  2472. desty     equ  78
  2473. fbase     equ  84
  2474. fwidth    equ  88
  2475. litema    equ  92
  2476. skewma    equ  94
  2477. parm      ds.l 1
  2478.     end
  2479.