home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 187.lha / ashley.asm < prev    next >
Assembly Source File  |  1988-04-28  |  73KB  |  2,350 lines

  1.    opt  l-
  2. *  Tumbling Tots - by David Hanley
  3. *  Amazing Computing  -  August 1988.
  4. *  Painstakingly entered compliments of Tom Eshelman  OHS825
  5. *  Made it case sensitive while at it, to render code more legible.
  6.  
  7.  
  8.    incdir   "df0:include/"
  9.  
  10.    include  exec/types.i
  11.    include  exec/nodes.i
  12.    include  exec/lists.i
  13.    include  exec/memory.i
  14.    include  exec/io.i
  15.    include  exec/ports.i
  16.    include  exec/tasks.i
  17.    include  exec/libraries.i
  18.    include  exec/exec_lib.i
  19.    include  graphics/gfx.i
  20.    include  graphics/view.i
  21.    include  graphics/graphics_lib.i
  22.    include  intuition/intuition.i
  23.    include  intuition/intuition_lib.i
  24.    include  libraries/dosextens.i
  25.    include  libraries/dos_lib.i
  26.    include  workbench/workbench.i
  27.    include  workbench/startup.i
  28.    include  devices/audio.i
  29.    include  hardware/custom.i
  30.  
  31.  
  32. HARDWARE    EQU   $dff000
  33. DEPTH       EQU   3
  34. NOMCOLS     EQU   8
  35. EXTRAX      EQU   50
  36. EXTRAY      EQU   15
  37. DISTANCE    EQU   20
  38. SCOREX      EQU   250
  39. SCOREY      EQU   15
  40. SPEED       EQU   6
  41. MAXBABS     EQU   8
  42. TITLEX      EQU   150
  43. TITLEY      EQU   40
  44. MEN1X       EQU   34
  45. MEN2X       EQU   124
  46. MEN3X       EQU   214
  47. MENY        EQU   175
  48. SPLATY      EQU   MENY+17
  49. NAMEX       EQU   160
  50. NAMEY       EQU   80
  51. TRUCKX      EQU   290
  52. TRUCKY      EQU   157
  53. BUILDX      EQU   0
  54. BUILDY      EQU   18
  55.  
  56.  
  57.    STRUCTURE operation,0               Blitter buffer (exec/types.i macro)
  58.       SHORT op_bltcon0
  59.       SHORT op_bltcon1
  60.       SHORT op_bltamod
  61.       SHORT op_bltbmod
  62.       SHORT op_bltcmod
  63.       SHORT op_bltdmod
  64.       LONG  op_bltaflwm
  65.       LONG  op_bltapt
  66.       LONG  op_bltbpt
  67.       LONG  op_bltcpt
  68.       LONG  op_bltdpt
  69.       SHORT op_bltsize
  70.    LABEL    opsize                     34 bytes
  71.  
  72.  
  73. nds:     MACRO
  74. soffset: set      soffset-\2
  75. \1:      equ      soffset
  76.    ENDM
  77.  
  78.  
  79. *  All the local variables.  These are on the user stack, WORKING BACKWARDS.
  80. *  The first argument is the name.  The second is its size.
  81.  
  82. soffset:  set  0
  83.  
  84.    nds   execbase,4
  85.    nds   dosbase,4
  86.    nds   gfxbase,4
  87.    nds   intbase,4
  88.    nds   mytask,4
  89.    nds   numberops,2
  90.    nds   nextop,4
  91.    nds   operations,opsize*10          10 packs of blitter register values.
  92.    nds   memory,4
  93.    nds   babyscreen,4
  94.    nds   myplanes,4
  95.    nds   state,4
  96.    nds   changes,4
  97.    nds   count,2
  98.    nds   seed,4
  99.    nds   sizetemp,4
  100.    nds   planelength,4
  101.    nds   babywindow,4
  102.    nds   codekey,2
  103.    nds   uport,4
  104.    nds   place,2
  105.    nds   timer,2
  106.    nds   old,2
  107.    nds   babies,2
  108.    nds   saved,2
  109.    nds   temp,2
  110.    nds   cycle1,4
  111.    nds   cycle2,4
  112.    nds   wave,2
  113.    nds   attract,2
  114.    nds   babieson,2
  115.    nds   soundport,MP_SIZE
  116.    nds   soundio,ioa_SIZEOF
  117.    nds   io2,ioa_SIZEOF
  118.    nds   allocated,4
  119.    nds   returnmsg,4
  120. workspce:   equ   soffset                    -656 bytes, or thereabouts.
  121.  
  122.  
  123. start:
  124.  
  125.    link     a5,#workspce            Steal variable storage from stack.
  126.  
  127.    move.l   4,execbase(a5)
  128.    move.l   4,a6
  129.  
  130.    suba.l   a1,a1                   No name known, so clear a1.
  131.    jsr      _LVOFindTask(a6)
  132.  
  133.    move.l   d0,mytask(a5)
  134.  
  135.    lea      intuiname(pc),a1        Pre-initialized variables off the pc.
  136.    moveq    #0,d0
  137.    jsr      _LVOOpenLibrary(a6)
  138.  
  139.    move.l   d0,intbase(a5)
  140.  
  141.    lea      gfxname(pc),a1
  142.    moveq    #0,d0
  143.    jsr      _LVOOpenLibrary(a6)
  144.  
  145.    move.l   d0,gfxbase(a5)
  146.  
  147.    lea      dosnam(pc),a1
  148.    moveq    #0,d0
  149.    jsr      _LVOOpenLibrary(a6)
  150.  
  151.    move.l   d0,dosbase(a5)
  152.  
  153.    clr.l    returnmsg(a5)
  154.  
  155.    move.l   mytask(a5),a4
  156.    tst.l    pr_CLI(a4)
  157.    bne      nowb
  158.  
  159.  
  160.    lea      pr_MsgPort(a4),a0
  161.    jsr      _LVOWaitPort(a6)        We must wait for WB to give a go-ahead.
  162.  
  163.    lea      pr_MsgPort(a4),a0
  164.    jsr      _LVOGetMsg(a6)          Received.  Get it off said port.
  165.  
  166.    move.l   d0,returnmsg(a5)
  167.  
  168.    move.l   d0,a4
  169.    move.l   sm_ArgList(a4),d0
  170.    beq      nowb                    This should never happen.
  171.  
  172.    move.l   d0,a4
  173.    move.l   wa_Lock(a4),d1
  174.  
  175.    move.l   dosbase(a5),a6
  176.    jsr      _LVOCurrentDir
  177.  
  178. nowb:
  179.  
  180.    bsr      tots                    Call program proper.
  181.  
  182.    move.l   4,a6                    We wish to quit now.
  183.    move.l   returnmsg(a5),d4        Retrieve the message.
  184.    beq      nowb2                   If none, we  came from the CLI.
  185.  
  186.    jsr      _LVOForbid(a6)          Otherwise, Forbid.  No multitask please!
  187.  
  188.    move.l   d4,a1
  189.    jsr      _LVOReplyMsg(a6)        Reply to the WorkBench!
  190.  
  191. nowb2:
  192.  
  193.    move.l   dosbase(a5),a1          In all events, close your libraries.
  194.    jsr      _LVOCloseLibrary(a6)
  195.  
  196.    move.l   gfxbase(a5),a1
  197.    jsr      _LVOCloseLibrary(a6)
  198.  
  199.    move.l   intbase(a5),a1
  200.    jsr      _LVOCloseLibrary(a6)
  201.  
  202.    unlk     a5                      Release variable memory
  203.    rts                              Return to system.
  204.  
  205.  
  206. *******           End main.
  207.  
  208. tots:
  209.  
  210.    lea      datastart(pc),a1        Get base of all data.
  211.  
  212.    move.l   execbase(a5),a6
  213.    jsr      _LVOTypeOfMem(a6)       Was it defined as 'section CHIP'?
  214.  
  215.    moveq    #MEMF_CHIP,d1
  216.    and.l    d0,d1
  217.    beq      notchip
  218.  
  219.    lea      datastart(pc),a1        If already chip ram (512K) all is OK.
  220.    move.l   a1,memory(a5)           Save pointer to the buffer on user stk.
  221.    clr.l    allocated(a5)           Just clear this variable.
  222.    bra      inchip
  223.  
  224. notchip:
  225.  
  226.    move.l   #dataend-datastart,d0   Calculate required number of bytes.
  227.    moveq    #MEMF_CHIP,d1
  228.    jsr      _LVOAllocMem(a6)        Allocate chip memory.
  229.  
  230.    move.l   d0,memory(a5)           Save buffer pointer here.
  231.    move.l   d0,allocated(a5)
  232.    beq      nomem
  233.  
  234.    move.l   d0,a1
  235.    lea      datastart(pc),a0              Pointer to data.
  236.    move     #(dataend-datastart)/2,d0     Length in WORDS.  (Save steps).
  237.  
  238. copymem:
  239.  
  240.    move     (a0)+,(a1)+             Copy to chip in word increments.
  241.    subq     #1,d0
  242.    bne      copymem
  243.  
  244. inchip:
  245.  
  246.    lea      nscreen(pc),a0
  247.    move.l   intbase(a5),a6
  248.    jsr      _LVOOpenScreen(a6)
  249.  
  250.    move.l   d0,babyscreen(a5)
  251.    beq      noscreen
  252.  
  253.    lea      nwindow+nw_Screen(pc),a0      NOTE TECHNIQUE.
  254.    move.l   d0,(a0)                       Attach screen to NewWindow.
  255.  
  256.    move.l   d0,a0
  257.  
  258.    lea      sc_BitMap+bm_Planes(a0),a1
  259.    move.l   a1,myplanes(a5)               Save bitplanes pointer for blitops.
  260.  
  261.    lea      nwindow(pc),a0
  262.    jsr      _LVOOpenWindow(a6)
  263.  
  264.    move.l   d0,babywindow(a5)
  265.    beq      nowindow
  266.  
  267.    move.l   d0,a0
  268.    move.l   wd_UserPort(a0),uport(a5)
  269.  
  270.    lea      soundio(a5),a0
  271.    moveq    #ioa_SIZEOF,d0
  272.    bsr      clearmem
  273.  
  274.    lea      soundport(a5),a0
  275.    moveq    #MP_SIZE,d0
  276.    bsr      clearmem
  277.  
  278.    lea      audname(pc),a0
  279.    lea      soundio(a5),a1
  280.    moveq    #0,d0
  281.    moveq    #0,d1
  282.    move.l   execbase(a5),a6
  283. *                                                end col 1, page 74
  284.    jsr      _LVOOpenDevice(a6)
  285.  
  286.    moveq    #-1,d0
  287.    jsr      _LVOAllocSignal(a6)
  288.  
  289.    lea      soundport(a5),a0                    Now he prepares his ioaReq.
  290.    clr.l    LN_NAME(a0)
  291.    clr.b    LN_PRI(a0)
  292.    move.b   #NT_MSGPORT,LN_TYPE(a0)
  293.    move.b   #PA_SIGNAL,MP_FLAGS(a0)
  294.    move.b   d0,MP_SIGBIT(a0)
  295.  
  296.    move.l   mytask(a5),MP_SIGTASK(a0)
  297.    move.l   a0,(a0)
  298.    addq.l   #LH_TAIL,(a0)
  299.    clr.l    LH_TAIL(a0)
  300.    move.l   a0,LH_TAILPRED(a0)
  301.  
  302.    lea      soundio(a5),a1
  303.    move.l   a0,MN_REPLYPORT(a1)
  304.    move     #ADCMD_ALLOCATE,IO_COMMAND(a1)
  305.  
  306.    lea      audiomap(pc),a0
  307.    move.l   a0,ioa_Data(a1)
  308.    moveq    #4,d0
  309.    move.l   d0,ioa_Length(a1)
  310.    move.b   #ADIOF_NOWAIT,IO_FLAGS(a1)
  311.  
  312.    move.l   IO_DEVICE(a1),a6
  313.    jsr      DEV_BEGINIO(a6)
  314.  
  315. *   tst.l    d0
  316. *   bne      error
  317.  
  318.    lea      soundio(a5),a0                      Here, we copy the relevant
  319.    lea      io2(a5),a1                          data from the master ioReq
  320.    move.l   IO_DEVICE(a0),IO_DEVICE(a1)         to a slave ioReq.
  321.    move     ioa_AllocKey(a0),ioa_AllocKey(a1)
  322.    move.l   MN_REPLYPORT(a0),MN_REPLYPORT(a1)   Note which four elements are
  323.    move.l   IO_UNIT(a0),IO_UNIT(a1)             deemed vital.
  324.  
  325.    move.l   babyscreen(a5),a0
  326.    lea      sc_ViewPort(a0),a0                  Get address screen's ViewPort
  327.  
  328.    lea      ctable(pc),a1                       Locate the colortable.
  329.    moveq    #NOMCOLS,d0
  330.  
  331.    move.l   gfxbase(a5),a6
  332.    jsr      _LVOLoadRGB4(a6)                    Load the color registers.
  333.  
  334.    bsr      clearops                      Clear blitter ops.  34 bit vars.
  335.  
  336.    move.b   #$da,seed(a5)                 Select random seed.
  337.    clr.l    state(a5)                     Clear 32 'baby' bits.
  338.  
  339.    move     #MENY,d1                      Draw firemen.
  340.    move     #MEN1X,d0
  341.  
  342.    move     d0,place(a5)                  Begin with men on left.
  343.    moveq    #0,d2
  344.    bsr      figure                        Put men.
  345.  
  346.    bsr      doops                         Do blitter operations.
  347.  
  348.    moveq    #100,d4                       Load counter for next routine.
  349.  
  350. random:
  351.  
  352.    bsr      rnd                           toss 100 random numbers
  353.  
  354.    subq     #1,d4
  355.    bne      random
  356.  
  357.    move     #TRUCKX,d0                    setup for truck
  358.    move     #TRUCKY,d1
  359.    moveq    #18,d2
  360.    bsr      figure                        put truck
  361.  
  362.    bsr      doops                         do blits
  363.  
  364.    moveq    #BUILDX,d0                    setup for building
  365.    move     #BUILDY,d1
  366.  
  367.    moveq    #19,d2
  368.    bsr      figure                        put building
  369.  
  370.    bsr      doops                         do blits
  371.  
  372.    move     #5,babies(a5)                 5 extra babies
  373.    move     #1,wave(a5)                   wave 1
  374.    clr      saved(a5)                     saved = 0
  375.  
  376. restart2:
  377.  
  378.    move     #1,attract(a5)                game in attract mode
  379.    move     #TITLEX,d0                    setup for title
  380.    moveq    #TITLEY,d1
  381.    moveq    #15,d2
  382.    bsr      figure                        put title
  383.  
  384.    bsr      doops                         do blits
  385.  
  386.    move     #NAMEX,d0                     setup for name
  387.    moveq    #NAMEY,d1
  388.    moveq    #17,d2
  389.    bsr      figure                        put name
  390.  
  391.    bsr      doops                         do blits
  392.  
  393. restart:
  394.  
  395.    moveq    #0,d0
  396.    bsr      update                        update = all babies off
  397.  
  398.    move     #SPLATY,d1                    clear all splats
  399.    move     #MEN1X+24,d0
  400.    moveq    #16,d2
  401.    bsr      erase                         erase splat 1
  402.  
  403.    move     #MEN2X+24,d0
  404.    bsr      erase                         erase splat 2
  405.  
  406.    move     #MEN3X+24,d0
  407.    bsr      erase                         erase splat 3
  408.  
  409.    bsr      doops                         do blits
  410.  
  411.    moveq    #EXTRAX,d0                    set up for extras
  412.    moveq    #EXTRAY,d1
  413.    moveq    #1,d2
  414.    move     babies(a5),count(a5)          temporary counter
  415.  
  416.    subq     #1,babies(a5)
  417.  
  418. extralp:
  419.  
  420.    bsr      figure                        put extra baby
  421.    bsr      doops                         do blits
  422.  
  423.    addi     #DISTANCE,d0                  move to next extra
  424.    subq     #1,count(a5)                  decrement count
  425.  
  426.    bne      extralp
  427. *                                         end page 74
  428.    move     #SPEED,timer(a5)              initialize timer
  429.    move     #SCOREX-50,d0                 wavex = SCOREX - 50
  430.    moveq    #SCOREY,d1
  431.    bsr      clearnum                      blank out wave number
  432.  
  433.    move     wave(a5),d2
  434.    move     #SCOREX-50,d0
  435.    moveq    #SCOREY,d1
  436.    bsr      putnum                        put up wave number
  437.  
  438.    move     #SCOREX,d0
  439.    moveq    #SCOREY,d1
  440.    bsr      clearnum                      blank out score
  441.  
  442.    move     saved(a5),d2
  443.    move     #SCOREX,d0
  444.    moveq    #SCOREY,d1
  445.    bsr      putnum                        put score
  446.  
  447.    clr.l    cycle1(a5)                    clear 64 baby bits
  448.    clr.l    cycle2(a5)
  449.    clr      babieson(a5)                  clear display bits
  450.  
  451. loop:
  452.  
  453.    move.l   gfxbase(a5),a6
  454.    jsr      _LVOWaitTOF(a6)
  455.    bsr      what                          any keyboard activity?
  456.  
  457.    move     codekey(a5),d0                get code of last key
  458.    tst      attract(a5)                   are we in attract?
  459.    beq      normplay                      if not, behave normally
  460.  
  461.    cmpi     #$45,d0                       was it an ESC?
  462.    beq      exit
  463.  
  464.    tst      d0                            if zero, no key was hit
  465.    beq      atrmode                       continue attract
  466.  
  467.    cmpi     #10,d0                        was it a digit key?
  468.    bcc      nowavset                      if >= 10, was not
  469.  
  470.    move     d0,wave(a5)                   < 10, so store in wave
  471.    bra      waveset                       set which wave
  472.  
  473. nowavset:
  474.  
  475.    cmpi     #$40,d0                       was it a space?
  476.    bne      atrmode                       if not, ignore and continue
  477.  
  478.    move     #1,wave(a5)                   space means wave 1
  479.  
  480. *                                         waveset = a game is starting.
  481. *                                         do setups.
  482. waveset:
  483.  
  484.    clr      attract(a5)                   no longer attract mode
  485.    clr      saved(a5)                     zero out score
  486.    move     #5,babies(a5)                 5 extra babies
  487.    move     #TITLEX,d0                    setup for title erase
  488.    moveq    #TITLEY,d1
  489.    moveq    #15,d2
  490.    bsr      erase                         erase title
  491.  
  492.    bsr      doops                         do blits
  493.  
  494.    move     #NAMEX,d0                     set up for name erase
  495.    moveq    #NAMEY,d1
  496.    moveq    #17,d2
  497.    bsr      erase                         erase name
  498.    bsr      doops                         doops
  499.  
  500.    bra      restart                       go to restart
  501.  
  502. atrmode:
  503.  
  504.    bsr      computer
  505.  
  506. normplay:
  507.  
  508.    tst      d0
  509.    bmi      nohit                         ignore negatives
  510.  
  511.    cmpi     #$45,d0                       ESC?
  512.    beq      exit
  513.  
  514.    subi     #$1d,d0                       try keypads 123
  515.    bcs      nohit                         not 123 or 46
  516.  
  517.    cmpi     #3,d0
  518.    bcs      absvalue                      yes.  Was 123
  519.  
  520.    subi     #$10,d0                       try 46
  521.    bcs      nohit                         not 46
  522.  
  523.    beq      tryleft                       if it was a 4
  524.  
  525.    cmpi     #2,d0                         is it 6?
  526.    beq      tryright                      yes
  527.  
  528.    bra      nohit                         ignore otherwise
  529.  
  530. tryleft:
  531.  
  532.    cmpi     #MEN1X,place(a5)              try to go left
  533.    beq      nohit                         already on left side
  534.  
  535.    move     place(a5),d0                  not on left.  so ok.
  536.    subi     #90,d0                        move left one
  537.    bra      delta                         continue
  538.  
  539. tryright:
  540.  
  541.    cmpi     #MEN3X,place(a5)              try to go right
  542.    beq      nohit                         already on right side
  543.  
  544.    move     place(a5),d0                  not on right.  ok
  545.    addi     #90,d0                        move right one
  546.    bra      delta                         continue
  547.  
  548. absvalue:
  549.  
  550.    mulu     #90,d0                        an absolute, 012 x 90
  551.    addi     #MEN1X,d0                     add in left man's x
  552.  
  553. delta:
  554.  
  555.    move     place(a5),d1                  see if any change
  556.    cmp      d1,d0
  557.    beq      nohit                         if same, don't bother
  558.  
  559.    move     d0,place(a5)                  update fireman's place
  560.    move     d1,d0                         set up to erase old
  561.    move     #MENY,d1
  562.    moveq    #0,d2                         figure 0 is fireman
  563.    bsr      erase                         erase old
  564.  
  565.    move     place(a5),d0                  set up for new
  566.    bsr      figure                        put new
  567.  
  568.    bsr      doops                         do blits
  569.  
  570. nohit:
  571.  
  572.    bsr      sndchnge                      perhaps change sound
  573.  
  574.    subq     #1,timer(a5)
  575.    bne      loop                          not 0.  no change in babies
  576.  
  577.    move     #SPEED,timer(a5)              restore timer
  578.  
  579. *                                                            end of page 75
  580.    tst      attract(a5)                   in attract mode?
  581.    beq      noattr                        if not, skip
  582.  
  583.    btst     #0,state+3(a5)                did a baby make it?
  584.    beq      nodecbab                      if not, skip
  585.  
  586.    subq     #1,babieson(a5)               one fewer in cycle
  587.  
  588. nodecbab:
  589.  
  590.    cmpi     #MAXBABS,babieson(a5)         are there too many?
  591.    bcc      ordinary                      if so, skip
  592.  
  593.    addq     #1,babieson(a5)               we will add one
  594.  
  595.    move.l   cycle1(a5),d4
  596.    move.l   cycle2(a5),d5
  597.    moveq    #1,d6                         add only one baby
  598.    bra      pickloop                      go and pick one
  599.  
  600. noattr:
  601.  
  602.    tst.l    cycle1(a5)                    are there more
  603.    bne      ordinary                      yes.  keep going
  604.  
  605.    tst.l    cycle2(a5)                    are there more
  606.    bne      ordinary                      yes.  keep going
  607.  
  608.    tst.l    state(a5)                     are we in demo mode?
  609.    bne      ordinary                      if so, keep going
  610.  
  611. *  Following code:  d4 and d5 consist of a 64 bit 'word' which
  612. *     represents the baby cycle.
  613.  
  614.    moveq    #1,d5                         always first baby here
  615.    moveq    #0,d4                         clear out upper 32 bits
  616.    move     wave(a5),d6                   how many babies to put
  617.  
  618. waveput:
  619.  
  620.    subq     #1,d6                         sub one from counter
  621.    beq      cycmade                       if zero, we are done
  622.  
  623. pickloop:
  624.  
  625.    bsr      rnd                           get a random number
  626.  
  627.    andi     #$3f,d0                       make 0 - 63
  628.    tst      attract(a5)                   if attract, confine to > 14.
  629.  
  630.    beq      under14                       not attract, so skip
  631.  
  632.    cmpi     #14,d0
  633.    bcs      pickloop                      if < 14, try again
  634.  
  635. under14:
  636.  
  637.    cmpi     #32,d0                        which 32 bits?
  638.    bcs      inlow32                       less than 32 means d5
  639.  
  640.    btst     d0,d4                         otherwise, check d4
  641.    bra      inhigh32
  642.  
  643. inlow32:
  644.  
  645.    btst     d0,d5                         check d5
  646.  
  647. inhigh32:
  648.  
  649.    bne      pickloop                      a one bit means baby
  650.  
  651. *  The following code checks for an impossible baby situation, where
  652. *  the firement would have to be in two places at once.
  653.  
  654.    lea      bitlocs(pc),a0                prepare for check
  655.    moveq    #6,d2                         there are 6 possible
  656.    moveq    #0,d3                         collision count is zero.
  657.  
  658. bitcheck:
  659.  
  660.    move     d0,d1
  661.    add.b    (a0)+,d1                      bit # plus offset == test
  662.    cmpi.b   #64,d1                        off scale?
  663.    bcc      noincr                        yes.  don't check.
  664.  
  665.    cmpi.b   #32,d1                        which 32 bits?
  666.    bcs      low32                         < 32 means low 32
  667.  
  668.    btst     d1,d4                         otherwise, check upper
  669.    bra      high32
  670.  
  671. low32:
  672.  
  673.    btst     d1,d5                         check d5
  674.  
  675. high32:
  676.  
  677.    beq      noincr                        zero bit means empty.
  678.  
  679.    addq     #1,d3                         a collision!  increment count.
  680.  
  681. noincr:
  682.  
  683.    subq     #1,d2                         any checks left?
  684.    bne      bitcheck                      if so, continue
  685.  
  686.    tst      d3                            must be zero for ok
  687.    bne      pickloop                      if > 0, try again
  688.  
  689.    cmpi     #32,d0                        which 32 bits
  690.    bcs      low32set                      if < 32, is low 32.
  691.  
  692.    bset     d0,d4                         otherwise, put in high 32
  693.    bra      hig32set
  694.  
  695. low32set:
  696.  
  697.    bset     d0,d5                         put in low 32
  698.  
  699. hig32set:
  700.  
  701.    bra      waveput                       continue with loop
  702.  
  703. cycmade:
  704.  
  705.    move.l   d4,cycle1(a5)                 we are all done
  706.    move.l   d5,cycle2(a5)                 store the cycle
  707.  
  708. ordinary:
  709.  
  710.    moveq    #0,d0                         now comes updating
  711.    roxr     #1,d0                         clear extend flag
  712.    roxr     cycle1(a5)                    shift entire cycle
  713.    roxr     cycle1+2(a5)                  one bit right in time
  714.    roxr     cycle2(a5)
  715.    roxr     cycle2+2(a5)
  716.    move.l   state(a5),d0                  now, shift into visible
  717.    roxr.l   #1,d0
  718.    moveq    #16,d1                        place for first bounce
  719.    btst     d1,d0                         any baby there?
  720.    beq      no1                           if bit is zero, none.
  721.  
  722.    moveq    #MEN1X,d2                     where men should be
  723.    cmp      place(a5),d2                  compare with place
  724.    beq      bounce1                       good.  a bounced baby.
  725.  
  726.    cmp      old(a5),d2                    compare with last
  727.    beq      bounce1                       last is good, too
  728.  
  729.    bclr     d1,d0                         player lost one
  730.    bsr      death                         baby is paste
  731.  
  732.    bra      no1                           don't make sound
  733.  
  734. bounce1:
  735.  
  736.    bsr      sound                         make a bounce sound
  737.  
  738. no1:
  739.  
  740.    moveq    #8,d1                         second bounce place
  741.    btst     d1,d0                         any baby there?
  742.    beq      no2                           none, so skip
  743.  
  744.    move     #MEN2X,d2                     where men should be
  745.    cmp      place(a5),d2                  are they there?
  746.    beq      bounce2                       yes baby got bounced.
  747.  
  748. *                                                  end first column, page 76
  749.    cmp      old(a5),d2                    were they there?
  750.    beq      bounce2                       yes, baby bounced
  751.  
  752.    bclr     d1,d0                         clear baby bit
  753.    bsr      death                         kill baby
  754.  
  755.    bra      no2                           skip sound
  756.  
  757. bounce2:
  758.  
  759.    bsr      sound                         make a bounce sound
  760.  
  761. no2:
  762.  
  763.    moveq    #2,d1                         last place for baby
  764.    btst     d1,d0                         is baby there?
  765.    beq      no3                           if not, skip
  766.  
  767.    move     #MEN3X,d2                     men should be
  768.    cmp      place(a5),d2                  are they here
  769.    beq      bounce3                       yes, baby bounced
  770.  
  771.    cmp      old(a5),d2                    were they there
  772.    beq      bounce3                       yes.  baby bounced
  773.  
  774.    bclr     d1,d0                         clear baby
  775.    bsr      death                         kill baby
  776.  
  777.    bra      no3                           no sound
  778.  
  779. bounce3:
  780.  
  781.    bsr      sound                         make bounce sound
  782.  
  783. no3:
  784.  
  785.    bsr      update                        update display
  786.  
  787.    move     place(a5),old(a5)             old == place
  788.    btst     #0,state+3(a5)                did a baby make it?
  789.    beq      loop                          no.  continue.
  790.  
  791.    tst      attract(a5)                   are we in attract mode?
  792.    bne      loop                          if so, continue
  793.  
  794.    addq     #1,saved(a5)      ,d2         another baby saved.
  795.    move     saved(a5),d2                  prepare to show score.
  796.    move     #SCOREX,d0
  797.    moveq    #SCOREY,d1
  798.    bsr      putnum                        put up score
  799.  
  800. *  This next check is to see if we are in a new wave.  wavelens is a table
  801. *  of the changeover points for new waves.
  802.  
  803.    move     wave(a5),d0                   see if we are in a new wave
  804.    lea      wavelens-2(pc),a0
  805.    adda     d0,a0
  806.    adda     d0,a0
  807.    move     (a0),d0                       get count for next
  808.    cmp      saved(a5),d0                  are we far enough
  809.    bcc      loop                          not far enough
  810.  
  811.    addq     #1,wave(a5)                   we are in new wave
  812.    move     wave(a5),d2                   prepare to show new wave
  813.    move     #SCOREX-50,d0
  814.    moveq    #SCOREY,d1
  815.    bsr      putnum                        put new wave number
  816.  
  817.    bra      loop                          continue
  818.  
  819. exit:
  820.  
  821.    move.l   execbase(a5),a6               game over.  close up
  822.    lea      soundio(a5),a1
  823.    jsr      _LVOCloseDevice(a6)
  824.  
  825.    move.b   soundport+MP_SIGBIT(a5),d0
  826.    jsr      _LVOFreeSignal(a6)
  827.  
  828.    move.l   babywindow(a5),a0
  829.    move.l   intbase(a5),a6
  830.    jsr      _LVOCloseWindow(a6)
  831.  
  832. nowindow:
  833.  
  834.    move.l   babyscreen(a5),a0
  835.    move.l   intbase(a5),a6
  836.    jsr      _LVOCloseScreen(a6)
  837.  
  838. noscreen:
  839.  
  840.    move.l   allocated(a5),d1                    free CHIP mem if there
  841.    beq      nomem                               zero means didn't get
  842.  
  843.    move.l   d1,a1
  844.    move.l   #dataend-datastart,d0               size of it
  845.    move.l   execbase(a5),a6
  846.    jsr      _LVOFreeMem(a6)                     free it
  847.  
  848. nomem:
  849.  
  850.    rts
  851.  
  852. *  This handles a baby's death.  Put a splat and decrement extra babies,
  853. *  perhaps end game.  Enters with d2 the X to put the splay.  d0 is the
  854. *  visible portion of the cycle, so preserve it.
  855.  
  856. death:
  857.  
  858.    move.l   d0,-(sp)                      set up for splat
  859.    move     d2,d0
  860.    addi     #24,d0
  861.    move     #SPLATY,d1
  862.    moveq    #16,d2
  863.    bsr      figure                        put splat
  864.  
  865.    bsr      doops                         do blits
  866.  
  867.    move     babies(a5),d1                 get # of babies
  868.    beq      toobad                        if zero, game over
  869.  
  870.    subq     #1,babies(a5)                 one fewer
  871.    mulu     #DISTANCE,d1                  compute where to erase
  872.    moveq    #EXTRAX,d0
  873.    add      d1,d0
  874.    moveq    #EXTRAY,d1
  875.    moveq    #1,d2
  876.    bsr      erase                         erase an extra baby
  877.  
  878.    bsr      doops                         do blits
  879.  
  880.    move.l   (sp)+,d0
  881.    rts
  882.  
  883. *  The game is over.  Do not restore d0, and do not return.
  884. *  Throw away things on the stack.
  885.  
  886. toobad:
  887.  
  888.    addq     #8,a7                         d0 and retad
  889.    move     #1,babies(a5)
  890.    bra      restart2                      restart
  891.  
  892. *  This routine puts a number.  d2 is the number, d0 = x and d1 = y.
  893. *  We print it from right to left, dividing by 10 and printing the modulus.
  894.  
  895. putnum:
  896.  
  897.    move     d2,temp(a5)                   put in temp storage
  898.    move     #4,count(a5)                  never more than four
  899. *                                                            end of page 76
  900. numberlp:
  901.  
  902.    move     temp(a5),d2
  903.    ext.l    d2
  904.    divu     #10,d2
  905.  
  906.    move     d2,temp(a5)                   put back in temp
  907.    swap     d2
  908.    addq     #5,d2                         make it a digit
  909.    bsr      figure                        put it
  910.  
  911.    bsr      doops                         do blits
  912.  
  913.    tst      temp(a5)                      any more digits?
  914.    beq      alldigs                       if zero, we're done.
  915.  
  916.    subq     #8,d0                         move left one place
  917.    subq     #1,count(a5)                  did we print a 4 yet?
  918.    bne      numberlp                      if not, continue.
  919.  
  920. alldigs:
  921.  
  922.    rts
  923.  
  924. *  Clear out where a number is to be displayed.  d0 = x, d1 = y.
  925.  
  926. clearnum:
  927.  
  928.    move     #4,count(a5)
  929.    moveq    #5,d2                         do 5 just to be sure
  930.  
  931. clearlp:
  932.  
  933.    bsr      erase                         blank out
  934.  
  935.    bsr      doops                         do blits
  936.  
  937.    subq     #8,d0                         move left one
  938.    subq     #1,count(a5)                  any left?
  939.    bne      clearlp                       if so, continue.
  940.  
  941.    rts
  942.  
  943. *  This routine updates the visible portion of the cycle.
  944. *  It will erase babies when they are turned off, and
  945. *  Display babies when they are turned on.
  946. *  If bits stay the same, nothing is done.
  947. *  Enter with d0 the new state.
  948.  
  949. update:
  950.  
  951.    move.l   state(a5),d1                  get old state
  952.    move.l   d0,state(a5)                  update state
  953.    eor.l    d0,d1                         get changing bits
  954.    move.l   d1,changes(a5)                save in changes
  955.    clr      count(a5)                     clear counter
  956.  
  957. updatelp:
  958.  
  959.    move     count(a5),d2                  get counter
  960.    move.l   changes(a5),d1                get changes
  961.    btst     d2,d1                         is this bit one?
  962.    beq      updated                       if not, skip
  963.  
  964.    moveq    #25,d0                        25-bit which is baby
  965.    move.l   state(a5),d1                  get new state
  966.    btst     d2,d1                         see if on or off
  967.    beq      babyoff                       if zero, erase baby
  968.  
  969.    sub      d2,d0                         compute 25-bit number
  970.    bsr      putbaby                       put baby
  971.  
  972.    bra      babydone                      skip
  973.  
  974. babyoff:
  975.  
  976.    sub      d2,d0                         compute 25-bit number
  977.    bsr      erasbaby                      erase baby
  978.  
  979. babydone:
  980.  
  981.    bsr      doops                         do blits
  982.  
  983. updated:
  984.  
  985.    addq     #1,count(a5)                  move to next bit
  986.    cmpi     #26,count(a5)                 are we done?
  987.    bne      updatelp                      if not, continue
  988.  
  989.    rts
  990.  
  991.  
  992. *  This routine is the brains of the demo mode.  It handles where to put
  993. *  the firemen to make sure all babies survive.  It returns a number in d0
  994. *  which is like a keycode, so other code is unaware of who is controlling
  995. *  the men.
  996.  
  997. computer:
  998.  
  999.    moveq    #$1d,d0                       default is left side
  1000.    moveq    #3,d1                         place on right
  1001.    moveq    #9,d2                         place in middle
  1002.    moveq    #17,d3                        place on left
  1003.    move.l   state(a5),d5                  get state
  1004.  
  1005. aheadlp:
  1006.  
  1007.    btst     d1,d5                         baby on right?
  1008.    bne      returnlf                      if so, return a '3'
  1009.  
  1010.    btst     d2,d5                         baby in middle?
  1011.    bne      returnle                      if so, return a '2'
  1012.  
  1013.    btst     d3,d5                         baby on left?
  1014.    bne      returnld                      if so, return a '1'
  1015.  
  1016.    lsr.l    #1,d5                         move forward in time
  1017.    bne      aheadlp                       keep going if any more
  1018.  
  1019.    rts                                    default case,  left side.
  1020.  
  1021.  
  1022. returnld:
  1023.  
  1024.    moveq    #$1d,d0
  1025.    rts
  1026.  
  1027. returnle:
  1028.  
  1029.    moveq    #$1e,d0
  1030.    rts
  1031.  
  1032. returnlf:
  1033.  
  1034.    moveq    #$1f,d0
  1035.    rts
  1036.  
  1037.  
  1038. what:
  1039.  
  1040.    move.l   execbase(a5),a6
  1041.    move     #-1,codekey(a5)               default case
  1042.    move.l   uport(a5),a0                  get reply port
  1043.    move.b   MP_SIGBIT(a0),d1              get signal bit
  1044.    moveq    #1,d0
  1045.    asl.l    d1,d0                         make mask
  1046.    move.l   mytask(a5),a0                 get our task block handle
  1047.    move.l   TC_SIGRECVD(a0),d1            get our signals
  1048.    and.l    d0,d1                         apply mask
  1049.    beq      none                          if zero, none there.
  1050.  
  1051.    jsr      _LVOWait(a6)                  let exec clear it
  1052.  
  1053. msgloop:
  1054.  
  1055.    move.l   uport(a5),a0
  1056.    jsr      _LVOGetMsg(a6)                get a message
  1057.  
  1058.    tst.l    d0
  1059.    beq      donelp                        if zero, we are done.
  1060.  
  1061.    move.l   d0,-(sp)                      push message
  1062.    pea      nextmsg(pc)                   push return address
  1063.    move.l   d0,a4
  1064. *                                                             end of page 77
  1065.    move.l   im_Class(a4),d0               look at Class
  1066.    cmpi.l   #RAWKEY,d0                    RAWKEY?
  1067.    beq      rkey
  1068.  
  1069. donelp:
  1070. none:
  1071.  
  1072.    rts                                    sloppy.  various uses this rts
  1073.  
  1074. nextmsg:
  1075.  
  1076.    move.l   (sp)+,a1                      get the message
  1077.    jsr      _LVOReplyMsg(a6)
  1078.  
  1079.    bra      msgloop                       continue
  1080.  
  1081. rkey:
  1082.  
  1083.    move     im_Code(a4),d0
  1084.    tst.b    d0                            key up?
  1085.    bmi      notdown                       if so, ignore
  1086.  
  1087.    move     d0,codekey(a5)                save in code
  1088.  
  1089. notdown:
  1090.  
  1091.    rts
  1092.  
  1093. *  Routine to clear d0 bytes at a0
  1094.  
  1095. clearmem:
  1096.  
  1097.    clr.b    (a0)+
  1098.    subq     #1,d0
  1099.    bne      clearmem
  1100.    rts
  1101.  
  1102. *  Routine to make a bounce sound
  1103.  
  1104. sound:
  1105.  
  1106.    tst      attract(a5)                   attract mode is quiet
  1107.    bne      dontsnd
  1108.  
  1109.    move.l   d0,-(sp)                      save
  1110.    lea      soundio(a5),a1                get io block
  1111.    move.l   execbase(a5),a6
  1112.    jsr      _LVOCheckIO(a6)               are we busy?
  1113.  
  1114.    tst.l    d0
  1115.    bne      quiet                         if not zero, ok
  1116.  
  1117.    lea      soundio(a5),a1
  1118.    move.l   IO_DEVICE(a1),a6
  1119.    jsr      DEV_ABORTIO(a6)               abort sound
  1120.  
  1121. quiet:
  1122.  
  1123.    lea      soundio(a5),a1
  1124.    move     #CMD_WRITE,IO_COMMAND(a1)
  1125.    move.l   memory(a5),a0                 get chip start
  1126.    adda     #soundbuf-datastart,a0        add offset
  1127.    move.l   a0,ioa_Data(a1)               point to waveform
  1128.    moveq    #2,d0                         length is two bytes
  1129.    move.l   d0,ioa_Length(a1)
  1130.    move     #80,ioa_Cycles(a1)
  1131.    move.b   #ADIOF_PERVOL,IO_FLAGS(a1)
  1132.    move     #2590,ioa_Period(a1)
  1133.    move     #64,ioa_Volume(a1)
  1134.  
  1135.    move.l   IO_DEVICE(a1),a6
  1136.    jsr      DEV_BEGINIO(a6)
  1137.  
  1138.    lea      soundio(a5),a0                copy over
  1139. *                                                   end first column page 78
  1140.    lea      io2(a5),a1                    to secondary io block
  1141.    move     ioa_Period(a0),ioa_Period(a1)
  1142.    move     ioa_Volume(a0),ioa_Volume(a1)    more copying
  1143.    move.l   (sp)+,d0
  1144.  
  1145. dontsnd:
  1146.  
  1147.    rts
  1148.  
  1149. sndchnge:
  1150.  
  1151.    move.l   execbase(a5),a6
  1152.    lea      soundio(a5),a1                get io block
  1153.    jsr      _LVOCheckIO(a6)
  1154.  
  1155.    tst.l    d0
  1156.    bne      nosound
  1157.  
  1158.    lea      io2(a5),a1                    modify sound
  1159.    move     #ADCMD_PERVOL,IO_COMMAND(a1)
  1160.    move.b   #ADIOF_SYNCCYCLE,IO_FLAGS(a1)
  1161.    subi     #150,ioa_Period(a1)           raise frequency
  1162.    move.l   IO_DEVICE(a1),a6
  1163.    jsr      DEV_BEGINIO(a6)
  1164.  
  1165. nosound:
  1166.  
  1167.    rts
  1168.  
  1169. *  This routine sets up d0,d1 and d2 for a baby operation.  d0 = x.
  1170. *  d1 = y,  d2 = which of four babies, each 90 degree-possibility.
  1171.  
  1172. setbaby:
  1173.  
  1174.    mulu     #6,d0                      each entry is 6 bytes
  1175.    lea      locs(pc),a0                get start of a table
  1176.    adda     d0,a0                      move out to entry
  1177.    move     (a0)+,d0                   get data
  1178.    move     (a0)+,d1
  1179.    move     (a0)+,d2
  1180.    rts
  1181.  
  1182. *  Put a baby.  This falls through the comments to figure routine.
  1183.  
  1184. putbaby:
  1185.  
  1186.    bsr      setbaby
  1187.  
  1188.  
  1189.  
  1190. *  This is a complicated blitter routine.  It will do any 'size' blits.
  1191. *  This routine lines up all data for up to 10 consecutive blits, to be
  1192. *  handled by the doops routine.
  1193.  
  1194. *  The 'size' is based on which figure to put.  d0 = x, d1 = y, d2 = figure #.
  1195. *  It looks in the "moving:" table of the offset into the chip memory block.
  1196.  
  1197. *  The first word of each of the images in the data section of this program,
  1198. *  the hex value, is a pre-calclation of what to put into BLTSIZE.
  1199.  
  1200. *  The second word, in decimal,  is what to put into BLTMODS, C (source)
  1201. *  and D (destination).
  1202.  
  1203. *  The third word, also decimal, is how many bytes per bitplane.
  1204.  
  1205. *  The fourth word is a stencil or mask.  It has the bits set where the blit
  1206. *  is to have an effect.
  1207.  
  1208. *  Then come the bitplanes for each blit:
  1209. *  A  points to the stencil
  1210. *  B  points to a bitplane
  1211. *  C and D point to the background and destination. (Dave's video bitplanes)
  1212.  
  1213. figure:
  1214.  
  1215.    move.l   nextop(a5),a2                 get op pointer
  1216.    move     d0,d4
  1217.    andi     #$000f,d4                     mask so low 4 of X
  1218.    ror      #4,d4                         rotate to upper four
  1219.  
  1220.    move     d4,op_bltcon1(a2)             put in bltcon1 for shifts
  1221.    ori      #$0fca,d4                     OR in MinTerm
  1222.  
  1223.    move     d4,op_bltcon0(a2)             put in bltcon0
  1224.    moveq    #-2,d4                        mods for a and b = -2
  1225.  
  1226.    move     d4,op_bltamod(a2)
  1227.    move     d4,op_bltbmod(a2)
  1228.    move.l   #$ffff0000,op_bltaflwm(a2)    throw away last.  keep all first.
  1229.  
  1230.    move     d0,d4
  1231.    lsr      #4,d4                         compute word
  1232.    add      d4,d4                         double for byte address
  1233.    move     d1,d3
  1234.  
  1235.    mulu     #40,d3                        compute line
  1236.    add      d3,d4                         compute word offset into bitplane
  1237.  
  1238.    lea      moving(pc),a3                 start of figure table
  1239.    adda     d2,a3
  1240.    adda     d2,a3
  1241.    move     (a3),d3                       get element
  1242.  
  1243.    move.l   memory(a5),a3
  1244.    adda     d3,a3                         add to chip offset
  1245.  
  1246.    move     (a3)+,sizetemp(a5)            bltsize for later
  1247.    move     (a3)+,d3                      mods for video's C&D
  1248.    move     d3,op_bltcmod(a2)
  1249.    move     d3,op_bltdmod(a2)
  1250.    move     (a3)+,d3                      get size of a bitplane
  1251.  
  1252.    move.l   a3,op_bltapt(a2)              stencil follows
  1253.  
  1254.    move.l   myplanes(a5),a1               table of bitplanes
  1255.  
  1256.    moveq    #opsize,d5                    size of an operation
  1257.  
  1258.    moveq    #DEPTH,d6                     depth operations
  1259.  
  1260. figurelp:
  1261.  
  1262.    adda     d3,a3                         skip to new bitplane
  1263.    move.l   a3,op_bltbpt(a2)
  1264.    move.l   (a1)+,a0                      next vidio bitplane
  1265.    adda     d4,a0                         add offset
  1266.  
  1267.    move.l   a0,op_bltcpt(a2)              put in C and D
  1268.    move.l   a0,op_bltdpt(a2)
  1269.  
  1270.    move     sizetemp(a5),op_bltsize(a2)
  1271.  
  1272. *  The following moves copy data that doesn't change into the next
  1273. *  operation.  The last copy is wasted as it is written over by the next
  1274. *  figure.
  1275.  
  1276.    move.l   op_bltapt(a2),opsize+op_bltapt(a2)
  1277.    move.l   op_bltcon0(a2),opsize+op_bltcon0(a2)
  1278.    move.l   op_bltamod(a2),opsize+op_bltamod(a2)
  1279.    move.l   op_bltcmod(a2),opsize+op_bltcmod(a2)
  1280. *                                                  end page 78
  1281.    move.l   op_bltaflwm(a2),opsize+op_bltaflwm(a2)
  1282.    adda     d5,a2                               skip to new operation
  1283.    subq     #1,d6                               depth counter
  1284.    bne      figurelp                            if more, continue.
  1285.  
  1286.    move.l   a2,nextop(a5)                       save for future
  1287.    addq     #DEPTH,numberops(a5)                just did 'depth' ops
  1288.  
  1289.    rts
  1290.  
  1291.  
  1292. erasbaby:
  1293.  
  1294.    bsr      setbaby
  1295.  
  1296. *  The following routine erases a figure.  The only differences from the
  1297. *  routine above are:
  1298. *  No B needed because not copying... only clearing.
  1299. *  Different MinTerm.
  1300.  
  1301. erase:
  1302.  
  1303.    move.l   nextop(a5),a2                 get op pointer
  1304.    move     d0,d4
  1305.    andi     #$000f,d4                     mask so low 4 of X
  1306.    ror      #4,d4                         rotate to upper four
  1307.  
  1308.    clr      op_bltcon1(a2)
  1309.    ori      #$0b0a,d4                     OR in MinTerm
  1310.  
  1311.    move     d4,op_bltcon0(a2)             put in bltcon0
  1312.    moveq    #-2,d4                        mods for a and b = -2
  1313.  
  1314.    move     d4,op_bltamod(a2)
  1315.    move.l   #$ffff0000,op_bltaflwm(a2)    throw away last.  keep all first.
  1316.  
  1317.    move     d0,d4
  1318.    lsr      #4,d4                         compute word
  1319.    add      d4,d4                         double for byte address
  1320.    move     d1,d3
  1321.  
  1322.    mulu     #40,d3                        compute line
  1323.    add      d3,d4                         compute word offset into bitplane
  1324.  
  1325.    lea      moving(pc),a3                 start of figure table
  1326.    adda     d2,a3
  1327.    adda     d2,a3
  1328.    move     (a3),d3                       get element
  1329.  
  1330.    move.l   memory(a5),a3
  1331.    adda     d3,a3                         add to chip offset
  1332.  
  1333.    move     (a3)+,sizetemp(a5)            bltsize for later
  1334.    move     (a3)+,d3                      mods for video's C&D
  1335.    move     d3,op_bltcmod(a2)
  1336.    move     d3,op_bltdmod(a2)
  1337.    move     (a3)+,d3                      get size of a bitplane
  1338.  
  1339.    move.l   a3,op_bltapt(a2)              stencil follows
  1340.  
  1341.    move.l   myplanes(a5),a1               table of bitplanes
  1342.  
  1343.    moveq    #opsize,d5                    size of an operation
  1344.  
  1345.    moveq    #DEPTH,d6                     depth operations
  1346.  
  1347. eraselp:
  1348.  
  1349.    move.l   (a1)+,a0                      next vidio bitplane
  1350.    adda     d4,a0                         add offset
  1351.  
  1352.    move.l   a0,op_bltcpt(a2)              put in C and D
  1353.    move.l   a0,op_bltdpt(a2)
  1354.  
  1355.    move     sizetemp(a5),op_bltsize(a2)
  1356.    move.l   op_bltapt(a2),opsize+op_bltapt(a2)
  1357.    move.l   op_bltcon0(a2),opsize+op_bltcon0(a2)
  1358.    move.l   op_bltamod(a2),opsize+op_bltamod(a2)
  1359.    move.l   op_bltcmod(a2),opsize+op_bltcmod(a2)
  1360.    move.l   op_bltaflwm(a2),opsize+op_bltaflwm(a2)
  1361.    adda     d5,a2                               skip to new operation
  1362.    subq     #1,d6                               depth counter
  1363.    bne      eraselp                             if more, continue.
  1364.  
  1365.    move.l   a2,nextop(a5)                       save for future
  1366.    addq     #DEPTH,numberops(a5)                just did depth ops
  1367.    rts
  1368.  
  1369. *  Do all blitter operations that have been stored, if any.  An operation
  1370. *  consists of all the registers to be loaded into the blitter.  We do an
  1371. *  OwnBlitter() to make sure we don't mess up someone else's operations.
  1372.  
  1373. doops:
  1374.  
  1375.    move     numberops(a5),d3              How many bitplanes did we blit?
  1376.    beq      noops                         None, stupid!
  1377.  
  1378.    move.l   execbase(a5),a6
  1379.    jsr      _LVOForbid(a6)                Stop all multi-tasking.
  1380.  
  1381.    move.l   gfxbase(a5),a6
  1382.    jsr      _LVOOwnBlitter(a6)            Lock blitter to this task.
  1383.  
  1384. *  'operations' is where we allocated enough space to store all writes to
  1385. *  all blitter registers for a total of 10 different sequences.
  1386.  
  1387.    lea      operations(a5),a1             Load our blitter register package.
  1388.    move.l   #HARDWARE,a0                  Load the hardware base. ($dff000)
  1389.  
  1390. *  'dmacon' is the correct designation for the dma control - Write register.
  1391. *  RKM calls it, 'DMACONW'.  By setting bit 10, we set the BLTPRI bit and
  1392. *  lock the CPU from the memory bus.  To cause the reaction, we must also
  1393. *  set bit 15.  Hence, the move.w  #$8400.
  1394.  
  1395.    move.w   #$8400,dmacon(a0)
  1396.  
  1397. *  We check to see if the blitter is busy, just in case.  Supposedly,
  1398. *  OwnBlitter() does this, but a bug in Intuition's OpenScreen routine
  1399. *  causes an early return.  Best be careful!
  1400.  
  1401. *  The 14th bit of dmacon is called BBUSY, is read-only, and is known as the
  1402. *  blitter-busy status bit.  Sounds like the Max HeadRoom bit, to me.
  1403.  
  1404.  
  1405.    move.w   #$4000,d7                     Move 0100 0000 0000 0000 to d7.
  1406.  
  1407. waitblit2:
  1408.  
  1409.    move.w   dmaconr(a0),d6                Copy the blitter READ register.
  1410.    and      d7,d6                         AND its contents to see if 14 set.
  1411.    bne      waitblit2                     If so, busy-wait!
  1412.  
  1413. dooplp:
  1414.  
  1415.    move.l   (a1)+,bltcon0(a0)          Load the blitter registers for the
  1416.    move     (a1)+,bltamod(a0)          operation on one of the planes.
  1417.    move     (a1)+,bltbmod(a0)          Behold the use of LONGS.  bltcon1
  1418.    move     (a1)+,bltcmod(a0)          thus goes right with bltcon0, and
  1419.    move     (a1)+,bltdmod(a0)          other junkers, held holy by the RKM,
  1420.    move.l   (a1)+,bltafwm(a0)          are treated as one LONG instead of
  1421.    move.l   (a1)+,bltapt(a0)           'low-order' and 'high-order' words.
  1422.    move.l   (a1)+,bltbpt(a0)
  1423. *                                                      end column 1, page 79
  1424.    move.l   (a1)+,bltcpt(a0)           Post increment preps for next blit.
  1425.    move.l   (a1)+,bltdpt(a0)
  1426.    move     (a1)+,bltsize(a0)          Once this loads, 'EL BLITO!!!!'
  1427.  
  1428. *  This next check is not exactly like busy-waiting, which is bad.
  1429. *  Since the blitter is nasty, the 68000 will get almost no cycles.  Hence,
  1430. *  this code will probably execute few times, if any.
  1431.  
  1432. waitblit:
  1433.  
  1434.    move     dmaconr(a0),d6                A repeat of waitblit2.
  1435.    and      d7,d6                         You may whistle 'Dixie' while
  1436.    bne      waitblit                      waiting for this loop to execute.
  1437.  
  1438.    subq     #1,d3                         Test for pending blits.
  1439.    bne      dooplp                        Loop if true.
  1440.  
  1441.    jsr      _LVODisownBlitter(a6)         Release blitter.
  1442.  
  1443.    move.l   execbase(a5),a6
  1444.    jsr      _LVOPermit(a6)                Return to multi-tasking.
  1445.  
  1446. clearops:
  1447.  
  1448.    lea      operations(a5),a0             Make the first op (blit) the
  1449.    move.l   a0,nextop(a5)                 next one.
  1450.    clr      numberops(a5)                 Reset counter.
  1451.  
  1452. noops:
  1453.  
  1454.    rts
  1455.  
  1456.  
  1457. *  This routine makes a random 8-bit number in d0.  It performs a shift
  1458. *  where the new bit is the exclusive-or of two high bits.
  1459.  
  1460.  
  1461. rnd:
  1462.  
  1463.    move.l   seed(a5),d0
  1464.    moveq    #8,d2                         Will do 8 times
  1465.  
  1466. rtop:
  1467.  
  1468.    move.b   d0,d1
  1469.    ror.b    #3,d1                         get 5th bit
  1470.    eor.b    d0,d1                         eor with the 2nd bit
  1471.    roxr.b   #2,d1                         put in X flag
  1472.    roxr.l   #1,d0                         shift in to seed
  1473.    subq     #1,d2                         any more?
  1474.    bne      rtop                          loop if so
  1475.  
  1476.    move.l   d0,seed(a5)                   restore seed
  1477.    rts
  1478.  
  1479.  
  1480. *****  End of Code as such.
  1481.  
  1482. *  Table of changeover points for the waves.
  1483.  
  1484. wavelens:
  1485.  
  1486.    dc.w   14,42,84,140,210,294,392,504,630,770,924,9999
  1487.  
  1488. nscreen:
  1489.  
  1490.    dc.w  0,0,320,200,DEPTH
  1491.    dc.b  1,0
  1492.    dc.w  V_SPRITES
  1493.    dc.w  CUSTOMSCREEN
  1494.    dc.l  0,0,0,0
  1495.  
  1496. nwindow:
  1497.  
  1498.    dc.w  0,0,320,200
  1499.    dc.b  0,0
  1500.    dc.l  RAWKEY
  1501.    dc.l  ACTIVATE+BORDERLESS+SMART_REFRESH+REPORTMOUSE+BACKDROP
  1502.    dc.l  0,0,0,0,0
  1503.    dc.w  0,0,0,0
  1504.    dc.w  CUSTOMSCREEN
  1505.  
  1506. ctable:
  1507.  
  1508.    dc.w  $000,$fff,$f00,$00f,$f0f,$00f,$fff,$f00
  1509.  
  1510. *  Places to be checked for a baby collision
  1511.  
  1512. bitlocs:
  1513.  
  1514.    dc.b  -14,-8,-6,6,8,14
  1515.  
  1516.  
  1517. audiomap:
  1518.  
  1519.    dc.b  1,2,4,8
  1520.  
  1521. audname:
  1522.    dc.b  'audio.device',0
  1523.    EVEN
  1524.  
  1525. intuiname:
  1526.    dc.b  'intuition.library',0
  1527.    EVEN
  1528.  
  1529. gfxname:
  1530.    dc.b  'graphics.library',0
  1531.    EVEN
  1532.  
  1533. dosnam:
  1534.    dc.b  'dos.library',0
  1535.    EVEN
  1536.  
  1537. *  This is the loction table for all babies.
  1538. *  Format:  X, Y, Baby# 1 - 4.      You have 26 babies in the table.
  1539.  
  1540. locs:
  1541.  
  1542.    dc.w  1,32,1,28,34,2,41,48,3,50,64,4
  1543.    dc.w  55,82,1,60,110,2,62,127,3,60,152,4
  1544.    dc.w  62,171,1,77,160,2,86,141,3,93,122,4
  1545.    dc.w  111,108,1,127,122,2,136,141,3,147,157,4
  1546.    dc.w  152,171,1,167,153,2,180,140,3,197,129,4
  1547.    dc.w  214,140,1,228,157,3,242,171,1,256,152,1
  1548.    dc.w  271,134,3,300,139,1
  1549.  
  1550.  
  1551. *  This is the table of offsets into the CHIP memory block for the figures.
  1552.  
  1553. moving:
  1554.  
  1555.    dc.w  firemen-datastart    0
  1556.    dc.w  baby1-datastart      1
  1557.    dc.w  baby2-datastart      2
  1558.    dc.w  baby3-datastart      3
  1559.    dc.w  baby4-datastart      4
  1560.    dc.w  digit0-datastart     5
  1561.    dc.w  digit1-datastart
  1562.    dc.w  digit2-datastart
  1563.    dc.w  digit3-datastart
  1564.    dc.w  digit4-datastart
  1565.    dc.w  digit5-datastart
  1566.    dc.w  digit6-datastart
  1567.    dc.w  digit7-datastart
  1568.    dc.w  digit8-datastart
  1569.    dc.w  digit9-datastart
  1570.    dc.w  title-datastart      15
  1571.    dc.w  splat-datastart      16
  1572.    dc.w  dash-datastart       17
  1573.    dc.w  truck-datastart      18
  1574.    dc.w  building-datastart   19
  1575.  
  1576.  
  1577. *  This is the start of the data that must be in CHIP memory.  If already
  1578. *  in chip, we will not bother to allocte and copy.
  1579.  
  1580. datastart:
  1581.  
  1582. soundbuf:
  1583.  
  1584.    dc.w     $807f
  1585.  
  1586.  
  1587. *  We begin the figures for blitter copies.
  1588.  
  1589. baby1:
  1590.  
  1591.    dc.w  $0402,36,32
  1592.    dc.w  $0700,$0f80,$0f80,$0700,$0700,$1fc0,$bfe8,$6fb0
  1593.    dc.w  $0f80,$0700,$0f80,$4f90,$7ff0,$1fc0,$0000,$0000
  1594.    dc.w  $0000,$0500,$0000,$0200,$0000,$0000,$0000,$0000
  1595.    dc.w  $0000,$0000,$0f80,$0f80,$0700,$0700,$0000,$0000
  1596.    dc.w  $0700,$0a80,$0f80,$0500,$0700,$1fc0,$bfe8,$6fb0
  1597.    dc.w  $0f80,$0700,$0000,$4010,$78f0,$18c0,$0000,$0000
  1598.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1599.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1600.  
  1601. baby3:
  1602.  
  1603.    dc.w  $0402,36,32
  1604.    dc.w  $0000,$0000,$1fc0,$7ff0,$4f90,$0f80,$0700,$0f80
  1605.    dc.w  $6fb0,$bfe8,$1fc0,$0700,$0700,$0f80,$0f80,$0700
  1606.    dc.w  $0000,$0000,$0700,$0700,$0f80,$0f80,$0000,$0000
  1607.    dc.w  $0000,$0000,$0000,$0000,$0200,$0000,$0500,$0000
  1608.    dc.w  $0000,$0000,$18c0,$78f0,$4010,$0000,$0700,$0f80
  1609.    dc.w  $6fb0,$bfe8,$1fc0,$0700,$0500,$0f80,$0a80,$0700
  1610.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1611.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1612.  
  1613. baby2:
  1614.  
  1615.    dc.w  $0402,36,32
  1616.    dc.w  $0080,$3100,$2180,$60c0,$7bcc,$7ffe,$7ffe,$7ffe
  1617.    dc.w  $7bcc,$60c0,$2180,$3100,$0080,$0000,$0000,$0000
  1618.    dc.w  $0000,$0000,$0000,$0000,$1800,$7804,$7810,$7804
  1619.    dc.w  $1800,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  1620.    dc.w  $0080,$3100,$2180,$60c0,$63cc,$07fa,$07ee,$07fa
  1621.    dc.w  $63cc,$60c0,$2180,$3100,$0080,$0000,$0000,$0000
  1622.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1623.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1624.  
  1625. baby4:
  1626.  
  1627.    dc.w  $0402,36,32
  1628.    dc.w  $0100,$008c,$0184,$0306,$33de,$7ffe,$7ff3,$7ffe
  1629.    dc.w  $33de,$0306,$0184,$008c,$0100,$0000,$0000,$0000
  1630.    dc.w  $0000,$0000,$0000,$0000,$0018,$201e,$081e,$201e
  1631.    dc.w  $0018,$0000,$0000,$0000,$0000,$0000,$0000,$0000
  1632.    dc.w  $0100,$008c,$0184,$0306,$33c6,$5fe0,$77e0,$5fe0
  1633.    dc.w  $33c6,$0306,$0184,$008c,$0100,$0000,$0000,$0000
  1634.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1635.    dc.w  $ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff,$ffff
  1636.  
  1637. firemen:
  1638.  
  1639.    dc.w  $0546,28,210
  1640.  
  1641. * stencil
  1642.  
  1643.    dc.w  $0ff0,$0000,$0000,$01fe,$0000
  1644.    dc.w  $3ff0,$0000,$0000,$01ff,$8000
  1645.    dc.w  $fff8,$0000,$0000,$03ff,$e000
  1646.    dc.w  $07e0,$0000,$0000,$00fc,$0000
  1647.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1648.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1649.    dc.w  $01c0,$0000,$0000,$0070,$0000
  1650.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1651.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1652.    dc.w  $07fe,$0000,$0000,$0ffc,$0000
  1653.    dc.w  $07ff,$ffff,$ffff,$fffc,$0000
  1654.    dc.w  $03fb,$ffff,$ffff,$fbf8,$0000
  1655.    dc.w  $03f8,$e000,$0000,$e3f8,$0000
  1656.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1657.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1658.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1659.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1660.    dc.w  $03fc,$0000,$0000,$07f8,$0000
  1661.    dc.w  $07bc,$0000,$0000,$07bc,$0000
  1662.    dc.w  $0f1e,$0000,$0000,$0f1e,$0000
  1663.    dc.w  $1f1f,$0000,$0000,$1f1f,$0000
  1664.  
  1665. * plane0
  1666.  
  1667.    dc.w  $0fe0,$0000,$0000,$00fe,$0000
  1668.    dc.w  $3ff0,$0000,$0000,$01ff,$8000
  1669.    dc.w  $fff8,$0000,$0000,$03ff,$e000
  1670.    dc.w  $0020,$0000,$0000,$0080,$0000
  1671.    dc.w  $0000,$0000,$0000,$0000,$0000
  1672.    dc.w  $0000,$0000,$0000,$0000,$0000
  1673.    dc.w  $0000,$0000,$0000,$0000,$0000
  1674.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1675.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1676.    dc.w  $07fe,$0000,$0000,$0ffc,$0000
  1677.    dc.w  $07fc,$0000,$0000,$07fc,$0000
  1678.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1679.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1680.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1681.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1682.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1683.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1684.    dc.w  $03fc,$0000,$0000,$07f8,$0000
  1685.    dc.w  $07bc,$0000,$0000,$07bc,$0000
  1686.    dc.w  $0f1e,$0000,$0000,$0f1e,$0000
  1687.    dc.w  $1f1f,$0000,$0000,$1f1f,$0000
  1688.  
  1689. * plane1
  1690.  
  1691.    dc.w  $0ff0,$0000,$0000,$01fe,$0000
  1692.    dc.w  $3ff0,$0000,$0000,$01ff,$8000
  1693.    dc.w  $fff8,$0000,$0000,$03ff,$e000
  1694.    dc.w  $07c0,$0000,$0000,$007c,$0000
  1695.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1696.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1697.    dc.w  $01c0,$0000,$0000,$0070,$0000
  1698.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1699.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1700.    dc.w  $07fe,$0000,$0000,$0ffc,$0000
  1701.    dc.w  $07fc,$7fff,$ffff,$c7fc,$0000
  1702.    dc.w  $03f8,$1fff,$ffff,$03f8,$0000
  1703.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1704.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1705.    dc.w  $0000,$0000,$0000,$0000,$0000
  1706.    dc.w  $0000,$0000,$0000,$0000,$0000
  1707.    dc.w  $0000,$0000,$0000,$0000,$0000
  1708.    dc.w  $0000,$0000,$0000,$0000,$0000
  1709.    dc.w  $0000,$0000,$0000,$0000,$0000
  1710.    dc.w  $0000,$0000,$0000,$0000,$0000
  1711.    dc.w  $0000,$0000,$0000,$0000,$0000
  1712.  
  1713. * plane2
  1714.  
  1715.    dc.w  $0ff0,$0000,$0000,$01fe,$0000
  1716.    dc.w  $3ff0,$0000,$0000,$01ff,$8000
  1717.    dc.w  $fff8,$0000,$0000,$03ff,$e000
  1718.    dc.w  $07e0,$0000,$0000,$00fc,$0000
  1719.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1720.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1721.    dc.w  $01c0,$0000,$0000,$0070,$0000
  1722.    dc.w  $03e0,$0000,$0000,$00f8,$0000
  1723.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1724.    dc.w  $07fe,$0000,$0000,$0ffc,$0000
  1725.    dc.w  $07ff,$ffff,$ffff,$fffc,$0000
  1726.    dc.w  $03fb,$ffff,$ffff,$fbf8,$0000
  1727.    dc.w  $03f8,$e000,$0000,$e3f8,$0000
  1728.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1729.    dc.w  $07f0,$0000,$0000,$01fc,$0000
  1730.    dc.w  $07f8,$0000,$0000,$03fc,$0000
  1731.    dc.w  $03f8,$0000,$0000,$03f8,$0000
  1732.    dc.w  $03fc,$0000,$0000,$07f8,$0000
  1733.    dc.w  $07bc,$0000,$0000,$07bc,$0000
  1734.    dc.w  $0f1e,$0000,$0000,$0f1e,$0000
  1735.    dc.w  $1f1f,$0000,$0000,$1f1f,$0000
  1736.  
  1737. digit0:
  1738.  
  1739.    dc.w  $01c2,36,14
  1740.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1741.    dc.w  $7000,$8800,$8800,$8800,$8800,$8800,$7000
  1742.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1743.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1744.  
  1745. digit1:
  1746.  
  1747.    dc.w  $01c2,36,14
  1748.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1749.    dc.w  $2000,$6000,$2000,$2000,$2000,$2000,$7000
  1750.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1751.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1752.  
  1753. digit2:
  1754.  
  1755.    dc.w  $01c2,36,14
  1756.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1757.    dc.w  $7000,$8800,$0800,$1000,$2000,$4000,$f800
  1758.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1759.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1760.  
  1761. digit3:
  1762.  
  1763.    dc.w  $01c2,36,14
  1764.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1765.    dc.w  $7000,$8800,$0800,$3000,$0800,$8800,$7000
  1766.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1767.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1768.  
  1769. digit4:
  1770.  
  1771.    dc.w  $01c2,36,14
  1772.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1773.    dc.w  $8800,$8800,$8800,$f800,$0800,$0800,$0800
  1774.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1775.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1776.  
  1777. digit5:
  1778.  
  1779.    dc.w  $01c2,36,14
  1780.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1781.    dc.w  $f800,$8000,$8000,$f000,$0800,$8800,$7000
  1782.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1783.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1784.  
  1785. digit6:
  1786.  
  1787.    dc.w  $01c2,36,14
  1788.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1789.    dc.w  $7000,$8800,$8000,$f000,$8800,$8800,$7000
  1790.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1791.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1792.  
  1793. digit7:
  1794.  
  1795.    dc.w  $01c2,36,14
  1796.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1797.    dc.w  $f800,$0800,$1000,$2000,$4000,$8000,$8000
  1798.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1799.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1800.  
  1801. digit8:
  1802.  
  1803.    dc.w  $01c2,36,14
  1804.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1805.    dc.w  $7000,$8800,$8800,$7000,$8800,$8800,$7000
  1806.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1807.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1808.  
  1809. digit9:
  1810.  
  1811.    dc.w  $01c2,36,14
  1812.    dc.w  $f800,$f800,$f800,$f800,$f800,$f800,$f800
  1813.    dc.w  $7000,$8800,$8800,$7800,$0800,$0800,$0800
  1814.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1815.    dc.w  $0000,$0000,$0000,$0000,$0000,$0000,$0000
  1816.  
  1817. splat:
  1818.  
  1819.    dc.w  $0103,34,16
  1820.  
  1821.    dc.w  $03ff,$8000,$07ff,$8000
  1822.    dc.w  $1fff,$f000,$ffff,$fc00
  1823.  
  1824.    dc.w  $00ce,$8000,$061f,$0000
  1825.    dc.w  $1189,$8000,$ffff,$fc00
  1826.  
  1827.    dc.w  $03f1,$8000,$07f1,$8000
  1828.    dc.w  $1ff7,$f000,$ffff,$fc00
  1829.  
  1830.    dc.w  $03ff,$8000,$07ff,$8000
  1831.    dc.w  $1fff,$f000,$ffff,$fc00
  1832.  
  1833. dash:
  1834.  
  1835.    dc.w  $0209,22,128
  1836.  
  1837.    dc.w  $fc00,$f8,$0,$180e,$18,$e0,$3800,$0
  1838.    dc.w  $6600,$6c,$0,$6,$3c,$60,$1800,$0
  1839.    dc.w  $6666,$66,$3c66,$3836,$3c,$3e6c,$183c,$6600
  1840.    dc.w  $7c66,$66,$666,$186e,$66,$6076,$1866,$6600
  1841.    dc.w  $6666,$66,$1e66,$1866,$7e,$3c66,$187e,$6600
  1842.    dc.w  $663c,$6c,$663c,$1866,$c3,$666,$1860,$3c00
  1843.    dc.w  $fc18,$f8,$3b18,$3c3b,$c3,$7ce6,$3c3c,$1800
  1844.    dc.w  $70,$0,$0,$0,$0,$0,$0,$7000
  1845.  
  1846.    dc.w  $fc00,$f8,$0,$180e,$18,$e0,$3800,$0
  1847.    dc.w  $6600,$6c,$0,$6,$3c,$60,$1800,$0
  1848.    dc.w  $6666,$66,$3c66,$3836,$3c,$3e6c,$183c,$6600
  1849.    dc.w  $7c66,$66,$666,$186e,$66,$6076,$1866,$6600
  1850.    dc.w  $6666,$66,$1e66,$1866,$7e,$3c66,$187e,$6600
  1851.    dc.w  $663c,$6c,$663c,$1866,$c3,$666,$1860,$3c00
  1852.    dc.w  $fc18,$f8,$3b18,$3c3b,$c3,$7ce6,$3c3c,$1800
  1853.    dc.w  $70,$0,$0,$0,$0,$0,$0,$7000
  1854.  
  1855.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1856.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1857.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1858.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1859.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1860.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1861.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1862.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1863.  
  1864.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1865.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1866.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1867.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1868.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1869.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1870.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1871.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1872.  
  1873. truck:
  1874.  
  1875.    dc.w  $0ac3,34,172
  1876.  
  1877.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1878.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1879.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1880.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1881.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1882.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1883.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1884.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1885.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1886.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1887.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1888.    dc.w  $ffff,$fffc,$fffd,$7ffc,$fffb,$bffc
  1889.    dc.w  $7f,$fc00,$7b,$bc00,$7d,$7c00
  1890.    dc.w  $3f,$f800,$3f,$f800,$1f,$f000
  1891.    dc.w  $7,$c000
  1892.  
  1893. *plane0
  1894.  
  1895.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1896.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1897.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$ffe0,$fffc
  1898.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$ffe0,$fffc
  1899.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$e000,$fc
  1900.    dc.w  $e000,$fc,$e000,$fc,$e000,$fc
  1901.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$ffe0,$fffc
  1902.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$ffe0,$fffc
  1903.    dc.w  $ffe0,$fffc,$ffe0,$fffc,$ffff,$fffc
  1904.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1905.    dc.w  $ffff,$fffc,$ffff,$fffc,$ffff,$fffc
  1906.    dc.w  $ffff,$fffc,$fffd,$7ffc,$fffb,$bffc
  1907.    dc.w  $7f,$fc00,$7b,$bc00,$7d,$7c00
  1908.    dc.w  $3f,$f800,$3f,$f800,$1f,$f000
  1909.    dc.w  $7,$c000
  1910.  
  1911.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1912.    dc.w  $1f,$0,$1f,$0,$1f,$0,$1f,$0,$1f,$0
  1913.    dc.w  $1f,$0,$1f,$0,$1f,$0,$1fff,$ff00
  1914.    dc.w  $1fff,$ff00,$1fff,$ff00,$1fff,$ff00
  1915.    dc.w  $1f,$0,$1f,$0,$1f,$0,$1f,$0,$1f,$0
  1916.    dc.w  $1f,$0,$1f,$0,$1f,$0,$0,$0,$0,$0
  1917.    dc.w  $0,$0,$0,$0,$7,$c000,$1f,$f000
  1918.    dc.w  $3f,$f800,$3f,$f800,$7d,$7c00,$7b,$bc00
  1919.    dc.w  $7f,$fc00,$7b,$bc00,$7d,$7c00,$3f,$f800
  1920.    dc.w  $3f,$f800,$1f,$f000,$7,$c000
  1921.  
  1922.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1923.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1924.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1925.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1926.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1927.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1928.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  1929.    dc.w  $0,$0
  1930.  
  1931. title:
  1932.  
  1933.    dc.w  $0909,22,576
  1934.  
  1935.    dc.w  $7fff,$7003,$b000,$1bff,$e00,$3b00,$703f,$c000
  1936.    dc.w  $fffe,$f007,$f800,$3fff,$de00,$7f80,$f0ff,$e000
  1937.    dc.w  $3c0,$f007,$fc00,$7f83,$fe00,$7fc0,$f3c0,$c000
  1938.    dc.w  $3c0,$f007,$fe00,$ff81,$fe00,$7fe0,$f700,$0
  1939.    dc.w  $3c0,$f007,$ff01,$ff81,$fe00,$7ff0,$ff00,$0
  1940.    dc.w  $3c0,$f007,$ff83,$ff81,$de00,$7ff8,$ff00,$0
  1941.    dc.w  $3c0,$f007,$ffc7,$7fff,$9e00,$7ffc,$ff03,$f000
  1942.    dc.w  $3c0,$f007,$fbee,$7fff,$de00,$7fbe,$ff07,$f000
  1943.    dc.w  $3c0,$f007,$f9fc,$7f83,$fe00,$7f9f,$ff00,$f000
  1944.    dc.w  $3c0,$f007,$f8f8,$7f81,$fe00,$7f8f,$ff00,$f000
  1945.    dc.w  $3c0,$f007,$f870,$7f81,$fe00,$7f87,$ff00,$f000
  1946.    dc.w  $3c0,$f807,$7820,$7f81,$fe00,$7f83,$ff80,$f000
  1947.    dc.w  $3c0,$7c0e,$7800,$7f81,$de00,$7f81,$f7c0,$e000
  1948.    dc.w  $3c0,$3ffc,$7800,$7fff,$9fff,$ff80,$f3ff,$c000
  1949.    dc.w  $380,$ff0,$7000,$77fe,$1fff,$7700,$60ff,$0
  1950.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1951.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1952.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1953.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1954.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1955.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1956.    dc.w  $0,$3,$fff8,$3fc1,$fffc,$3fe0,$0,$0
  1957.    dc.w  $0,$7,$fff0,$fff3,$fff8,$fff8,$0,$0
  1958.    dc.w  $0,$0,$1e01,$c0f8,$f01,$c078,$0,$0
  1959.    dc.w  $0,$0,$1e03,$807c,$f03,$c030,$0,$0
  1960.    dc.w  $0,$0,$1e07,$803c,$f03,$c000,$0,$0
  1961.    dc.w  $0,$0,$1e07,$803c,$f03,$f000,$0,$0
  1962.    dc.w  $0,$0,$1e07,$803c,$f01,$fe00,$0,$0
  1963.    dc.w  $0,$0,$1e07,$803c,$f00,$3fc0,$0,$0
  1964.    dc.w  $0,$0,$1e07,$803c,$f00,$ff0,$0,$0
  1965.    dc.w  $0,$0,$1e07,$803c,$f00,$1f8,$0,$0
  1966.    dc.w  $0,$0,$1e07,$803c,$f00,$78,$0,$0
  1967.    dc.w  $0,$0,$1e07,$c038,$f01,$8078,$0,$0
  1968.    dc.w  $0,$0,$1e03,$e070,$f03,$c070,$0,$0
  1969.    dc.w  $0,$0,$1e01,$ffe0,$f03,$ffe0,$0,$0
  1970.    dc.w  $0,$0,$1c00,$7f80,$e00,$ff80,$0,$0
  1971.  
  1972. *plane0
  1973.  
  1974.    dc.w  $7fff,$7003,$b000,$1bff,$e00,$3b00,$703f,$c000
  1975.    dc.w  $0,$1000,$9800,$801,$c200,$980,$1080,$6000
  1976.    dc.w  $40,$1000,$8c00,$880,$6200,$8c0,$1200,$0
  1977.    dc.w  $40,$1000,$8600,$880,$2200,$860,$1000,$0
  1978.    dc.w  $40,$1000,$8300,$880,$2200,$830,$1100,$0
  1979.    dc.w  $40,$1000,$8180,$880,$200,$818,$1100,$0
  1980.    dc.w  $40,$1000,$88c0,$8fc,$200,$88c,$1103,$f000
  1981.    dc.w  $40,$1000,$8860,$800,$c200,$886,$1100,$1000
  1982.    dc.w  $40,$1000,$8820,$880,$6200,$883,$1100,$1000
  1983.    dc.w  $40,$1000,$8800,$880,$2200,$881,$1100,$1000
  1984.    dc.w  $40,$1000,$8800,$880,$2200,$880,$1100,$1000
  1985.    dc.w  $40,$1800,$800,$880,$2200,$880,$1180,$1000
  1986.    dc.w  $40,$c00,$800,$880,$200,$880,$10c0,$0
  1987.    dc.w  $40,$7e0,$800,$8fc,$3ff,$8880,$107e,$0
  1988.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1989.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1990.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1991.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1992.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1993.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1994.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  1995.    dc.w  $0,$3,$fff8,$3fc1,$fffc,$3fe0,$0,$0
  1996.    dc.w  $0,$7,$fff0,$fff3,$fff8,$fff8,$0,$0
  1997.    dc.w  $0,$0,$1e01,$c0f8,$f01,$c078,$0,$0
  1998.    dc.w  $0,$0,$1e03,$807c,$f03,$c030,$0,$0
  1999.    dc.w  $0,$0,$1e07,$803c,$f03,$c000,$0,$0
  2000.    dc.w  $0,$0,$1e07,$803c,$f03,$f000,$0,$0
  2001.    dc.w  $0,$0,$1e07,$803c,$f01,$fe00,$0,$0
  2002.    dc.w  $0,$0,$1e07,$803c,$f00,$3fc0,$0,$0
  2003.    dc.w  $0,$0,$1e07,$803c,$f00,$ff0,$0,$0
  2004.    dc.w  $0,$0,$1e07,$803c,$f00,$1f8,$0,$0
  2005.    dc.w  $0,$0,$1e07,$803c,$f00,$78,$0,$0
  2006.    dc.w  $0,$0,$1e07,$c038,$f01,$8078,$0,$0
  2007.    dc.w  $0,$0,$1e03,$e070,$f03,$c070,$0,$0
  2008.    dc.w  $0,$0,$1e01,$ffe0,$f03,$ffe0,$0,$0
  2009.    dc.w  $0,$0,$1c00,$7f80,$e00,$ff80,$0,$0
  2010.  
  2011. *plane1
  2012.  
  2013.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2014.    dc.w  $fffe,$e007,$6000,$37fe,$1c00,$7600,$e07f,$8000
  2015.    dc.w  $380,$e007,$7000,$7703,$9c00,$7700,$e1c0,$c000
  2016.    dc.w  $380,$e007,$f800,$f701,$dc00,$7780,$e700,$0
  2017.    dc.w  $380,$e007,$7c01,$f701,$dc00,$77c0,$ee00,$0
  2018.    dc.w  $380,$e007,$7e03,$f701,$dc00,$77e0,$ee00,$0
  2019.    dc.w  $380,$e007,$7707,$7703,$9c00,$7770,$ee00,$0
  2020.    dc.w  $380,$e007,$738e,$77ff,$1c00,$7738,$ee07,$e000
  2021.    dc.w  $380,$e007,$71dc,$7703,$9c00,$771c,$ee00,$e000
  2022.    dc.w  $380,$e007,$70f8,$7701,$dc00,$770e,$ee00,$e000
  2023.    dc.w  $380,$e007,$7070,$7701,$dc00,$7707,$ee00,$e000
  2024.    dc.w  $380,$ee07,$7020,$7701,$dc00,$7703,$ee80,$e000
  2025.    dc.w  $380,$700e,$7000,$7701,$dc00,$7701,$e700,$e000
  2026.    dc.w  $380,$381c,$7000,$7703,$9c00,$7700,$e381,$c000
  2027.    dc.w  $380,$ff0,$7000,$77fe,$1fff,$7700,$60ff,$0
  2028.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2029.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2030.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2031.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2032.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2033.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2034.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2035.    dc.w  $0,$7,$fff0,$7f83,$fff8,$7fc0,$0,$0
  2036.    dc.w  $0,$0,$1c01,$c0e0,$e01,$c070,$0,$0
  2037.    dc.w  $0,$0,$1c03,$8070,$e03,$8030,$0,$0
  2038.    dc.w  $0,$0,$1c07,$38,$e03,$8000,$0,$0
  2039.    dc.w  $0,$0,$1c07,$38,$e03,$8000,$0,$0
  2040.    dc.w  $0,$0,$1c07,$38,$e01,$e000,$0,$0
  2041.    dc.w  $0,$0,$1c07,$38,$e00,$3c00,$0,$0
  2042.    dc.w  $0,$0,$1c07,$38,$e00,$f80,$0,$0
  2043.    dc.w  $0,$0,$1c07,$38,$e00,$1e0,$0,$0
  2044.    dc.w  $0,$0,$1c07,$38,$e00,$70,$0,$0
  2045.    dc.w  $0,$0,$1c07,$38,$e00,$70,$0,$0
  2046.    dc.w  $0,$0,$1c03,$8070,$e03,$70,$0,$0
  2047.    dc.w  $0,$0,$1c01,$c0e0,$e03,$80e0,$0,$0
  2048.    dc.w  $0,$0,$1c00,$7f80,$e00,$ff80,$0,$0
  2049.  
  2050. *plane2
  2051.  
  2052.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2053.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2054.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2055.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2056.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2057.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2058.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2059.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2060.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2061.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2062.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2063.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2064.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2065.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2066.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2067.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2068.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2069.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2070.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2071.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2072.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2073.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2074.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2075.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2076.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2077.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2078.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2079.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2080.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2081.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2082.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2083.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2084.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2085.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2086.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2087.    dc.w  $0,$0,$0,$0,$0,$0,$0,$0
  2088.  
  2089. building:
  2090.  
  2091.    dc.w  $2c83,34,178*2*2
  2092.  
  2093.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2094.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2095.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2096.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2097.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2098.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2099.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2100.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2101.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2102.    dc.w  $1,$ff00,$1,$ff00,$ffff,$ff00
  2103.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2104.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2105.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2106.    dc.w  $ffff,$ff00,$ffff,$ff00,$4001,$ff00
  2107.    dc.w  $7801,$ff00,$3e01,$ff00,$1f01,$ff00
  2108.    dc.w  $9f01,$ff00,$fe01,$ff00,$fe41,$ff00
  2109.    dc.w  $7e61,$ff00,$fce1,$ff00,$f8e1,$ff00
  2110.    dc.w  $fbc9,$ff00,$7f99,$ff00,$3f39,$ff00
  2111.    dc.w  $fff1,$ff00,$ffe1,$ff00,$7fc1,$ff00
  2112.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2113.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2114.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2115.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2116.    dc.w  $1001,$ff00,$1e01,$ff00,$8f81,$ff00
  2117.    dc.w  $c7c1,$ff00,$67c1,$ff00,$7f81,$ff00
  2118.    dc.w  $3f91,$ff00,$1f99,$ff00,$3f39,$ff00
  2119.    dc.w  $be39,$ff00,$3ef3,$ff00,$9fe7,$ff00
  2120.    dc.w  $cfcf,$ff00,$fffd,$ff00,$3ff9,$ff00
  2121.    dc.w  $1ff1,$ff00,$ffff,$ff00,$ffff,$ff00
  2122.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2123.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2124.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2125.    dc.w  $ffff,$ff00,$1001,$ff00,$1e01,$ff00
  2126.    dc.w  $8f81,$ff00,$c7c1,$ff00,$67c1,$ff00
  2127.    dc.w  $7f81,$ff00,$3f91,$ff00,$1f99,$ff00
  2128.    dc.w  $3f39,$ff00,$be39,$ff00,$3ef3,$ff00
  2129.    dc.w  $9fe7,$ff00,$cfcf,$ff00,$fffd,$ff00
  2130.    dc.w  $3ff9,$ff00,$1ff1,$ff00,$ffff,$ff00
  2131.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2132.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2133.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2134.    dc.w  $ffff,$ff00,$2001,$ff00,$3c01,$ff00
  2135.    dc.w  $1f01,$ff00,$8f81,$ff00,$cf81,$ff00
  2136.    dc.w  $ff01,$ff00,$7f21,$ff00,$3f31,$ff00
  2137.    dc.w  $7e71,$ff00,$7c71,$ff00,$7de5,$ff00
  2138.    dc.w  $3fcd,$ff00,$9f9d,$ff00,$fff9,$ff00
  2139.    dc.w  $7ff1,$ff00,$3fe1,$ff00,$ffff,$ff00
  2140.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2141.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2142.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2143.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2144.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2145.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2146.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2147.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2148.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2149.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2150.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2151.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2152.    dc.w  $ffff,$ff00
  2153.  
  2154. *plane0
  2155.  
  2156.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2157.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2158.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2159.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2160.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2161.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2162.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2163.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2164.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2165.    dc.w  $1,$ff00,$1,$ff00,$ffff,$ff00
  2166.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2167.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2168.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2169.    dc.w  $ffff,$ff00,$ffff,$ff00,$1,$ff00
  2170.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2171.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2172.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2173.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2174.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2175.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2176.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2177.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2178.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2179.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2180.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2181.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2182.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2183.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2184.    dc.w  $1,$ff00,$ffff,$ff00,$ffff,$ff00
  2185.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2186.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2187.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2188.    dc.w  $ffff,$ff00,$1,$ff00,$1,$ff00
  2189.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2190.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2191.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2192.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2193.    dc.w  $1,$ff00,$1,$ff00,$ffff,$ff00
  2194.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2195.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2196.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2197.    dc.w  $ffff,$ff00,$1,$ff00,$1,$ff00
  2198.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2199.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2200.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2201.    dc.w  $1,$ff00,$1,$ff00,$1,$ff00
  2202.    dc.w  $1,$ff00,$1,$ff00,$ffff,$ff00
  2203.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2204.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2205.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2206.    dc.w  $ffff,$ff00,$ffff,$ff00,$0,$7f00
  2207.    dc.w  $0,$7f00,$0,$7f00,$0,$7f00
  2208.    dc.w  $7e7e,$7f00,$7e7e,$7f00,$7e7e,$7f00
  2209.    dc.w  $7e7e,$7f00,$7e7e,$7f00,$0,$7f00
  2210.    dc.w  $0,$7f00,$0,$7f00,$0,$7f00
  2211.    dc.w  $0,$7f00,$6,$7f00,$6,$7f00
  2212.    dc.w  $0,$7f00,$0,$7f00,$0,$7f00
  2213.    dc.w  $0,$7f00,$0,$7f00,$0,$7f00
  2214.    dc.w  $0,$7f00,$0,$7f00,$0,$7f00
  2215.    dc.w  $0,$7f00
  2216.  
  2217. *plane1
  2218.  
  2219.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2220.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2221.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2222.    dc.w  $ffff,$ff00,$ffff,$ff00,$0,$ff00
  2223.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2224.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2225.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2226.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2227.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2228.    dc.w  $0,$ff00,$0,$ff00,$0,$ff00
  2229.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2230.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2231.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2232.    dc.w  $ffff,$ff00,$0,$ff00,$4001,$ff00
  2233.  
  2234.    dc.w  $7800,$ff00,$3e00,$ff00,$1f00,$ff00
  2235.    dc.w  $9f00,$ff00,$fe00,$ff00,$fe40,$ff00
  2236.    dc.w  $7e60,$ff00,$fce0,$ff00,$f8e0,$ff00
  2237.    dc.w  $fbc8,$ff00,$7f98,$ff00,$3f38,$ff00
  2238.    dc.w  $fff0,$ff00,$ffe0,$ff00,$7fc0,$ff00
  2239.    dc.w  $0,$ff00,$ffff,$ff00,$ffff,$ff00
  2240.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2241.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2242.    dc.w  $ffff,$ff00,$ffff,$ff00,$0,$ff00
  2243.    dc.w  $1000,$ff00,$1e00,$ff00,$8f80,$ff00
  2244.    dc.w  $c7c0,$ff00,$67c0,$ff00,$7f80,$ff00
  2245.    dc.w  $3f90,$ff00,$1f98,$ff00,$3f38,$ff00
  2246.    dc.w  $be38,$ff00,$3ef2,$ff00,$9fe6,$ff00
  2247.    dc.w  $cfce,$ff00,$fffc,$ff00,$3ff8,$ff00
  2248.    dc.w  $1ff0,$ff00,$0,$ff00,$ffff,$ff00
  2249.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2250.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2251.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2252.    dc.w  $0,$ff00,$1000,$ff00,$1e00,$ff00
  2253.    dc.w  $8f80,$ff00,$c7c0,$ff00,$67c0,$ff00
  2254.    dc.w  $7f80,$ff00,$3f90,$ff00,$1f98,$ff00
  2255.    dc.w  $3f38,$ff00,$be38,$ff00,$3ef2,$ff00
  2256.    dc.w  $9fe6,$ff00,$cfce,$ff00,$fffc,$ff00
  2257.    dc.w  $3ff8,$ff00,$1ff0,$ff00,$0,$ff00
  2258.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2259.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2260.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2261.    dc.w  $0,$ff00,$2000,$ff00,$3c00,$ff00
  2262.    dc.w  $1f00,$ff00,$8f80,$ff00,$cf80,$ff00
  2263.    dc.w  $ff00,$ff00,$7f20,$ff00,$3f30,$ff00
  2264.    dc.w  $7e70,$ff00,$7c70,$ff00,$7de4,$ff00
  2265.    dc.w  $3fcc,$ff00,$9f9c,$ff00,$fff8,$ff00
  2266.    dc.w  $7ff0,$ff00,$3fe0,$ff00,$0,$ff00
  2267.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2268.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2269.    dc.w  $ffff,$ff00,$ffff,$ff00,$ffff,$ff00
  2270.    dc.w  $ffff,$ff00,$0,$3f00,$ffff,$bf00
  2271.    dc.w  $ffff,$bf00,$ffff,$bf00,$ffff,$bf00
  2272.    dc.w  $8181,$bf00,$bdbd,$bf00,$bdbd,$bf00
  2273.    dc.w  $bdbd,$bf00,$8181,$bf00,$ffff,$bf00
  2274.    dc.w  $ffff,$bf00,$ffff,$bf00,$ffff,$bf00
  2275.    dc.w  $ffff,$bf00,$fff9,$bf00,$fff9,$bf00
  2276.    dc.w  $ffff,$bf00,$ffff,$bf00,$ffff,$bf00
  2277.    dc.w  $ffff,$bf00,$ffff,$bf00,$ffff,$bf00
  2278.    dc.w  $ffff,$bf00,$ffff,$bf00,$ffff,$bf00
  2279.    dc.w  $ffff,$bf00
  2280.  
  2281. *plane2
  2282.  
  2283.    dc.w  $0,$0,$0,$0,$0,$0
  2284.    dc.w  $0,$0,$0,$0,$0,$0
  2285.    dc.w  $0,$0,$0,$0,$0,$0
  2286.    dc.w  $0,$0,$0,$0,$0,$0
  2287.    dc.w  $0,$0,$0,$0,$0,$0
  2288.    dc.w  $0,$0,$0,$0,$0,$0
  2289.    dc.w  $0,$0,$0,$0,$0,$0
  2290.    dc.w  $0,$0,$0,$0,$0,$0
  2291.    dc.w  $0,$0,$0,$0,$0,$0
  2292.    dc.w  $0,$0,$0,$0,$0,$0
  2293.    dc.w  $0,$0,$0,$0,$0,$0
  2294.    dc.w  $0,$0,$0,$0,$0,$0
  2295.    dc.w  $0,$0,$0,$0,$0,$0
  2296.    dc.w  $0,$0,$0,$0,$0,$0
  2297.    dc.w  $0,$0,$0,$0,$0,$0
  2298.    dc.w  $0,$0,$0,$0,$0,$0
  2299.    dc.w  $0,$0,$0,$0,$0,$0
  2300.    dc.w  $0,$0,$0,$0,$0,$0
  2301.    dc.w  $0,$0,$0,$0,$0,$0
  2302.    dc.w  $0,$0,$0,$0,$0,$0
  2303.    dc.w  $0,$0,$0,$0,$0,$0
  2304.    dc.w  $0,$0,$0,$0,$0,$0
  2305.    dc.w  $0,$0,$0,$0,$0,$0
  2306.    dc.w  $0,$0,$0,$0,$0,$0
  2307.    dc.w  $0,$0,$0,$0,$0,$0
  2308.    dc.w  $0,$0,$0,$0,$0,$0
  2309.    dc.w  $0,$0,$0,$0,$0,$0
  2310.    dc.w  $0,$0,$0,$0,$0,$0
  2311.    dc.w  $0,$0,$0,$0,$0,$0
  2312.    dc.w  $0,$0,$0,$0,$0,$0
  2313.    dc.w  $0,$0,$0,$0,$0,$0
  2314.    dc.w  $0,$0,$0,$0,$0,$0
  2315.    dc.w  $0,$0,$0,$0,$0,$0
  2316.    dc.w  $0,$0,$0,$0,$0,$0
  2317.    dc.w  $0,$0,$0,$0,$0,$0
  2318.    dc.w  $0,$0,$0,$0,$0,$0
  2319.    dc.w  $0,$0,$0,$0,$0,$0
  2320.    dc.w  $0,$0,$0,$0,$0,$0
  2321.    dc.w  $0,$0,$0,$0,$0,$0
  2322.    dc.w  $0,$0,$0,$0,$0,$0
  2323.    dc.w  $0,$0,$0,$0,$0,$0
  2324.    dc.w  $0,$0,$0,$0,$0,$0
  2325.    dc.w  $0,$0,$0,$0,$0,$0
  2326.    dc.w  $0,$0,$0,$0,$0,$0
  2327.    dc.w  $0,$0,$0,$0,$0,$0
  2328.    dc.w  $0,$0,$0,$0,$0,$0
  2329.    dc.w  $0,$0,$0,$0,$0,$0
  2330.    dc.w  $0,$0,$0,$0,$0,$0
  2331.    dc.w  $0,$0,$0,$0,$0,$0
  2332.    dc.w  $0,$0,$0,$0,$0,$0
  2333.    dc.w  $0,$0,$0,$0,$0,$0
  2334.    dc.w  $0,$0,$0,$0,$0,$0
  2335.    dc.w  $0,$0,$0,$0,$0,$0
  2336.    dc.w  $0,$0,$0,$0,$0,$0
  2337.    dc.w  $0,$0,$0,$0,$0,$0
  2338.    dc.w  $0,$0,$0,$0,$0,$0
  2339.    dc.w  $0,$0,$0,$0,$0,$0
  2340.    dc.w  $0,$0,$0,$0,$0,$0
  2341.    dc.w  $0,$0,$0,$0,$0,$0
  2342.    dc.w  $0,$0
  2343.  
  2344. *  End of data that must be in CHIP
  2345.  
  2346. dataend:
  2347.  
  2348.                                  end
  2349.  
  2350.