home *** CD-ROM | disk | FTP | other *** search
/ Fujiology Archive / fujiology_archive_v1_0.iso / !FALCON / LINEOUT / DELTA.ZIP / DELTASRC.ZIP / DELTA.SRC / MENU2.SO < prev    next >
Text File  |  2003-01-02  |  19KB  |  1,051 lines

  1. ; Delta menu screen.
  2. ; Special version: uses 2vbl update on 3d/blur, 1vbl on rest.
  3. ; This actually looks better (longer blurtime) and saves cputime.
  4. ; Now uses ufly for tridis as well..
  5.  
  6. ******** OBJECT EQUATES ********
  7.  
  8. Menu.DELTA_W:    =    160
  9.  
  10.             RSRESET
  11. Menu.COLORTABLE:    RS.W    128
  12. Menu.3DBUFFER1:        RS.W    80*80
  13. Menu.3DBUFFER2:        RS.W    80*80
  14. Menu.SLOWFADEPAL:    RS.W    1<<16
  15. Menu.ELTA:        RS.W    Menu.DELTA_W*45
  16. Menu.PAL:        RS.W    2048
  17. Menu.RLELOGO:        RS.W    2+Menu.DELTA_W*45
  18. Menu.OPTIONSBUF:    RS.W    320*16
  19. Menu.STRIPTABLE:    RS.L    160                ; start.w, width.w
  20. Menu.BLOCK_SIZE:    RS.B    0
  21.  
  22. ******** OBJECT TABLE ********
  23.  
  24. * Must be first in object!!
  25. Menu.table:
  26.     DC.L    Menu.mainLoop
  27.     DC.L    Menu.init
  28.     DC.L    Menu.setRes
  29.     DC.L    INSTALL_ELTAMOVEIN
  30.     DC.L    INSTALL_ELTAMOVEOUT
  31.     DC.L    Menu.triggerOptions
  32.     DC.L    Menu.setA
  33.     DC.L    0
  34.  
  35.     IFND    DEMO_SYSTEM
  36.     INCLUDE    SFLY_DSP.S
  37.     TEXT
  38.     ENDC
  39.  
  40. ******** RESOLUTION SETTING ROUTINE ********
  41.  
  42. Menu.setRes:
  43.     IFEQ    testmode
  44.     move.w    monitormode,d0
  45.     cmpi.w    #vga60,d0
  46.     beq.s    .vga60
  47.     cmpi.w    #vga100,d0
  48.     beq.s    .vga100
  49.     cmpi.w    #rgb50,d0
  50.     beq.s    .rgb50
  51. * Unknown monitormode..
  52. .vga60:    bra.l    vga60_16bit_320_200
  53. .vga100:bra.l    vga100_16bit_320_200
  54. .rgb50:    bra.l    rgb50_16bit_320_200
  55.     ENDC
  56.     rts
  57.  
  58. ******** INIT SUBROUTINE ********
  59.  
  60. * OUTPUT: d0.l: 0   = All clear.
  61. *               neg = Error! Not initialized!
  62. Menu.init:
  63.     move.l    #Menu.BLOCK_SIZE,d0
  64.     bsr.l    Mem.register
  65.  
  66.     lea    sine_tbl,a1
  67.     bsr.l    Matrix.init
  68.  
  69. .success:
  70.     moveq    #0,d0
  71.     rts
  72. .error:    moveq    #-1,d0
  73.     rts
  74.  
  75. Menu.initRealtime:
  76.     move.l    #rts,vbl_gfx
  77.  
  78.     bsr.l    Mem.getBlock
  79.     move.l    d0,Menu.baseAdr
  80.  
  81.     bsr.w    Menu.clearBuffers
  82.     bsr.w    Menu.calcSlowFadePal
  83.     bsr.w    Menu.precalcElta
  84.     bsr.w    Menu.initOptions
  85.  
  86.     movea.l    Menu.baseAdr,a0
  87.     adda.l    #Menu.PAL,a0
  88.     lea    Menu.flowTable,a1
  89.     bsr.l    Pal.makeGradientHc
  90.  
  91.     bsr.w    Menu.initTables
  92.  
  93.     bsr.l    HumanFly.init
  94.  
  95. ; init constant viewport stuffs..
  96.     lea    Viewport.settingsTable,a0
  97.     move.w    #0,Viewport.XSTART(a0)
  98.     move.w    #0,Viewport.YSTART(a0)
  99.     move.w    #256,Viewport.ASPECT(a0)
  100.     move.w    #$100,Viewport.FOCAL(a0)
  101.  
  102.     lea    Menu.textureTable,a0
  103.     movea.l    Menu.baseAdr,a1
  104.     adda.l    #Menu.COLORTABLE,a1
  105.     bsr.l    Polygon.init
  106.  
  107.     bsr.l    ObjectRegistry.clear
  108.  
  109.     lea    Menu.deltaObject,a0
  110.     move.l    #Menu.deltaObjectEnd-Menu.deltaObject,d0
  111.     bsr.l    ObjectRegistry.set
  112.  
  113.     bsr.l    flushAndDisableICache
  114.     move.w    #Primitive.WORD|Primitive.MOVE,d0
  115.     moveq    #0,d1
  116.     bsr.l    Primitive.setPaintMode
  117.     move.w    d0,d1
  118.     bsr.l    restoreCache
  119. ;    tst.w    d1
  120. ;    bmi.s    .error
  121.  
  122.     clr.w    eltamovedirection
  123.     clr.w    eltamovecount
  124.     clr.w    eltamovespeed
  125.     clr.w    Menu.optionsActive
  126.  
  127.     move.w    $04BC.w,Menu.startTime
  128.     rts
  129.  
  130. ******** SCREENINIT SUBROUTINE ********
  131.  
  132. Menu.initScreen:
  133.     movea.l    scr,a0
  134.     bra.l    CLEAR_320200TSCR
  135.  
  136. ******** MAINLOOP SUBROUTINE ********
  137.  
  138. Menu.mainLoop:
  139.     movea.l    scr,a0
  140.     bsr.l    Primitive.setScreenbuffer
  141.  
  142.     move.l    frmcnt,d0
  143.     sub.l    lastframecount,d0
  144.     bne.s    .end_realtimeinit
  145.     move.l    d0,-(sp)
  146.     bsr    Menu.initRealtime
  147.     move.l    (sp)+,d0
  148. .end_realtimeinit:
  149.     cmpi.l    #2,d0
  150.     bhs.s    .end_screeninit
  151.     bsr    Menu.initScreen
  152. .end_screeninit:
  153.  
  154.     tst.w    Menu.optionsActive
  155.     beq.s    .end_options
  156. ; Paint strip of options graphics (if required)..
  157.     bsr.w    Menu.paintStrips
  158. .end_options:
  159.  
  160. ; Clear background behind logo..
  161.     bsr    Menu.clearDeltaBack
  162.  
  163. ; Paint 3d stuffs to internal buffer.
  164.     move.l    frmcnt,d0
  165.     sub.l    lastframecount,d0
  166.     andi.w    #1,d0
  167.     bne.s    .second
  168.     bsr    Menu.paint3d1stFrame
  169.     bra.s    .end_paint_3d
  170. .second:bsr    Menu.paint3d2ndFrame
  171. .end_paint_3d:
  172.  
  173. ; Paint 3d buffer to screen..
  174.     bsr    Menu.copy3dBuffer
  175.  
  176. ; Paint logo to screen..
  177.     bsr    Menu.calcLogoPos
  178.     bsr    Menu.paintLogo
  179.  
  180. ; Swap 3d buffers..
  181. ; Done only when 3d buffer is produced (after 2 frames!).
  182.     move.l    frmcnt,d0
  183.     sub.l    lastframecount,d0
  184.     andi.w    #1,d0
  185.     beq.s    .end_swap
  186.     lea    Menu.3dBufAdr,a0
  187.     move.l    (a0)+,d0
  188.     move.l    (a0),-4(a0)
  189.     move.l    d0,(a0)
  190. .end_swap:
  191.  
  192.     IFEQ    testmode
  193.     lea    scr,a0
  194.     move.l    (a0),d0
  195.     move.l    8(a0),(a0)
  196.     move.l    d0,d1
  197.     move.l    d0,8(a0)
  198.     lsr.w    #8,d0
  199.     move.l    d0,$ffff8200.w
  200.     move.b    d1,$ffff820d.w
  201.  
  202.     IFNE    1
  203.     move.w    $468.w,d0
  204. .wait_vbl_loop:
  205.     cmp.w    $468.w,d0
  206.     beq.s    .wait_vbl_loop
  207.     cmpi.w    #vga100,monitormode
  208.     bne.s    .no_double_vbl
  209.     move.w    $468.w,d0
  210. .wait_2ndvbl_loop:
  211.     cmp.w    $468.w,d0
  212.     beq.s    .wait_2ndvbl_loop
  213. .no_double_vbl:
  214.     ENDC
  215.     ENDC
  216.  
  217.     move.l    frmcnt,d0
  218.     sub.l    lastframecount,d0
  219.     bne.s    .res_done
  220.     bsr    Menu.setRes
  221. .res_done:
  222.  
  223.     rts
  224.  
  225. ******** OBJECT SUBROUTINES ********
  226.  
  227. INSTALL_ELTAMOVEIN:
  228.     move.w    #+1,eltamovedirection
  229.     rts
  230.  
  231. INSTALL_ELTAMOVEOUT:
  232.     move.w    #-1,eltamovedirection
  233.     rts
  234.  
  235. Menu.triggerOptions:
  236.     st    Menu.optionsActive
  237.     rts
  238.  
  239. Menu.setA:
  240.     moveq    #2,d0
  241.     bra.s    Menu.setBlinking
  242.     rts
  243.  
  244. ; INPUT:
  245. ; d0.w=selection 0:'a', 1:'b', 2:'c'
  246. Menu.setBlinking:
  247.     move.w    d0,Menu.partNum
  248.     move.l    #Menu.blinkChar,vbl_gfx
  249.  
  250.     movea.l    scr+8,a0                ; phys
  251.     adda.l    #(184*320+8)*2,a0
  252.     movea.l    Menu.baseAdr,a1
  253.     adda.l    #Menu.OPTIONSBUF,a1
  254.     moveq    #16-1,d7
  255.  
  256. .yloop:    move.w    #80-1,d6
  257.  
  258. .xloop:    move.l    (a1)+,(a0)+
  259.     dbf    d6,.xloop
  260.  
  261.     adda.w    #(320-160)*2,a0
  262.     adda.w    #(320-160)*2,a1
  263.     dbf    d7,.yloop
  264.  
  265.     rts
  266.  
  267. Menu.blinkChar:
  268.     move.w    $0468.w,d0
  269.     andi.w    #$000F,d0
  270.     bne.s    .end
  271.  
  272.     move.w    Menu.partNum,d0
  273.     beq.s    .aa
  274.     subq.w    #1,d0
  275.     bne.s    .cee
  276. .bee:    moveq    #21+69,d0
  277.     bra.s    .paint
  278. .aa:    moveq    #0+69,d0
  279.     bra.s    .paint    
  280. .cee:    moveq    #56+69,d0
  281.  
  282. .paint:    movea.l    scr+8,a0
  283.     lea    (a0,d0.l*2),a0
  284.     adda.l    #183*320*2,a0
  285.     moveq    #16-1,d7
  286.  
  287. .yloop:    moveq    #6-1,d6
  288.  
  289. .xloop:    not.l    (a0)+
  290.     dbf    d6,.xloop
  291.  
  292.     adda.w    #(320-12)*2,a0
  293.     dbf    d7,.yloop
  294. .end:    rts
  295.  
  296. Menu.clearBuffers:
  297.     movea.l    Menu.baseAdr,a0
  298.     movea.l    a0,a1
  299.     movea.l    a0,a2
  300.     adda.l    #Menu.ELTA,a0
  301.     move.w    #Menu.DELTA_W*45-1,d7
  302.     clr.l    d0
  303. .loop1:    move.w    d0,(a0)+
  304.     dbf    d7,.loop1
  305.  
  306.     adda.l    #Menu.3DBUFFER1,a1
  307.     move.w    #80*80-1,d7
  308. .loop2:    move.l    d0,(a1)+
  309.     dbf    d7,.loop2
  310.  
  311.     adda.l    #Menu.OPTIONSBUF,a2
  312.     move.w    #320*16/2-1,d7
  313. .loop3:    move.l    d0,(a2)+
  314.     dbf    d7,.loop3
  315.     rts
  316.  
  317. Menu.initTables:
  318. ; Setup ufly texture table.
  319.     lea    Menu.textureTable,a0
  320.     move.l    Menu.baseAdr,d0
  321.     addi.l    #Menu.RLELOGO,d0
  322.     move.l    d0,(a0)+
  323.     clr.l    (a0)+
  324.  
  325. ; Setup phys, log 3d buffers..
  326.     lea    Menu.3dBufAdr,a0
  327.     move.l    Menu.baseAdr,d0
  328.     move.l    d0,d1
  329.     addi.l    #Menu.3DBUFFER1,d0
  330.     addi.l    #Menu.3DBUFFER2,d1
  331.     move.l    d0,(a0)+
  332.     move.l    d1,(a0)+
  333.     rts
  334.  
  335. Menu.calcLogoPos:
  336.     move.w    eltamovedirection,d2
  337.     beq.s    .end_move
  338.     bgt.s    .increase_speed
  339. .decrease_speed:
  340.     move.w    eltamovespeed,d0
  341.     move.w    eltamovecount,d1
  342.     subq.w    #1,d0
  343.     add.w    d0,d1
  344.     bmi.s    .clip_1
  345.     cmpi.w    #Menu.DELTA_W*10,d1
  346.     blt.s    .ok
  347.     moveq    #0,d0
  348.     move.w    #Menu.DELTA_W*10,d1
  349.     clr.w    eltamovedirection
  350.     bra.s    .ok
  351. .clip_1:
  352.     moveq    #0,d0
  353.     moveq    #0,d1
  354.     clr.w    eltamovedirection
  355.     bra.s    .ok
  356. .increase_speed:
  357.     move.w    eltamovespeed,d0
  358.     move.w    eltamovecount,d1
  359.     addq.w    #1,d0
  360.     add.w    d0,d1
  361.     bmi.s    .clip_2
  362.     cmpi.w    #Menu.DELTA_W*10,d1
  363.     blo.s    .ok
  364.     moveq    #0,d0
  365.     move.w    #Menu.DELTA_W*10,d1
  366.     clr.w    eltamovedirection
  367.     bra.s    .ok
  368. .clip_2:
  369.     moveq    #0,d0
  370.     moveq    #0,d1
  371.     clr.w    eltamovedirection
  372. .ok:    move.w    d0,eltamovespeed
  373.     move.w    d1,eltamovecount
  374. .end_move:
  375.     rts
  376.  
  377. ; Converts a highcolor bitmap into an rle bitmap.
  378. ; INPUT:
  379. ; d0.w: width
  380. ; d1.w: height
  381. ; a0: dst highcolor rle bitmap
  382. ; a1: src highcolor bitmap
  383. Menu.convertBlock2RLE:
  384.     move.w    d0,(a0)+
  385.     move.w    d1,d7
  386.     move.w    d1,(a0)+            ; Store amount of lines.
  387.     subq.w    #1,d7
  388.     movea.l    a0,a2                ; Backup address of offsettable.
  389.     lea    (a0,d1.w*2),a0
  390.     movea.l    a0,a3                ; Backup start of rle data.
  391.  
  392. .yloop:    move.l    a0,d1                ; / Write offset to table.
  393.     sub.l    a3,d1                ; |
  394.     move.w    d1,(a2)+            ; \
  395.  
  396.     move.w    d0,d6
  397.     subq.w    #1,d6
  398.     moveq    #0,d4                ; blockcount := 0
  399.  
  400. .check_mask:
  401.     move.w    (a1)+,d1
  402.     beq.s    .unmasked
  403.  
  404. .masked:
  405.     addq.w    #1,d4                ; Increase blockcount.
  406.     movea.l    a0,a6
  407.     move.w    #$8000,(a0)+
  408.     move.w    d1,(a0)+
  409.     moveq    #1,d5                ; blocksize := 1
  410.     dbra    d6,.masked_loop
  411.     bra.s    .next_row
  412. .masked_loop:
  413.     move.w    (a1)+,d1
  414.     bne.s    .proceed_masked
  415.     or.w    d5,(a6)
  416.     bra.s    .unmasked
  417. .proceed_masked:
  418.     move.w    d1,(a0)+
  419.     addq.w    #1,d5                ; Increase blocksize.
  420.     dbra    d6,.masked_loop
  421.     bra.s    .next_row
  422.  
  423. .unmasked:
  424.     addq.w    #1,d4                ; Increase blockcount.
  425.     movea.l    a0,a6
  426.     move.w    #$0000,(a0)+
  427.     moveq    #1,d5                ; blocksize := 1
  428.     dbra    d6,.unmasked_loop
  429.     bra.s    .next_row
  430. .unmasked_loop:
  431.     move.w    (a1)+,d1
  432.     beq.s    .proceed_unmasked
  433.     or.w    d5,(a6)
  434.     bra.s    .masked
  435. .proceed_unmasked:
  436.     addq.w    #1,d5                ; Increase blocksize.
  437.     dbra    d6,.unmasked_loop
  438.  
  439. .next_row:
  440.     or.w    d5,(a6)                ; Store blocksize.
  441.     dbra    d7,.yloop
  442.  
  443.     rts
  444.  
  445. Menu.calcSlowFadePal:
  446.     movea.l    Menu.baseAdr,a0
  447.     adda.l    #Menu.SLOWFADEPAL,a0
  448.     clr.l    d7
  449.     move.w    #%1111100000000000,d3
  450.     move.w    #%0000011111000000,d4
  451.     move.w    #%0000000000011111,d5
  452.  
  453. .loop:    move.l    d7,d0
  454.     move.l    d7,d1
  455.     and.w    d3,d0
  456.     and.w    d4,d1
  457.     movea.l    d0,a1
  458.     movea.l    d1,a2
  459.     lsl.l    #8,d0
  460.     lsl.l    #8,d1
  461.     sub.l    a1,d0
  462.     sub.l    a2,d1
  463.     lsr.l    #8,d0
  464.     lsr.l    #8,d1
  465.     and.w    d3,d0
  466.     and.w    d4,d1
  467.     or.w    d1,d0
  468.     moveq    #32-1,d6
  469.  
  470. .blueloop:
  471.     move.l    d7,d2
  472.     and.w    d5,d2
  473.     movea.l    d2,a3
  474.     lsl.l    #8,d2
  475.     sub.l    a3,d2
  476.     lsr.l    #8,d2
  477.     and.w    d5,d2
  478.     or.w    d0,d2
  479.     move.w    d2,(a0)+
  480.     addq.w    #1,d7    
  481.  
  482.     dbf    d6,.blueloop
  483.  
  484.     tst.w    d7
  485.     bne.s    .loop
  486.  
  487.     rts
  488.  
  489. ; Initialize options graphics..
  490. Menu.initOptions:
  491.  
  492.     bsr.w    Menu.initStrips
  493.  
  494.     movea.l    Menu.baseAdr,a0
  495.     adda.l    #Menu.OPTIONSBUF,a0
  496.     lea    Font.pic,a1
  497.     lea    Font.charTable,a3
  498.     lea    .text(pc),a4
  499.  
  500. .charloop:
  501.     clr.l    d0
  502.     move.b    (a4)+,d0
  503.     beq.s    .end
  504.     subi.b    #32,d0
  505.     blt.s    .charloop
  506.     
  507.     mulu.w    #6,d0
  508.     movem.w    (a3,d0.l),d0-d2
  509.     mulu.w    #320,d0
  510.     add.l    d1,d0
  511.     move.w    d2,d5
  512.     subq.w    #1,d5
  513.     lea    (a1,d0.l*2),a2
  514.     movea.w    #320,a6
  515.     suba.l    d2,a6
  516.     adda.l    a6,a6
  517.     moveq    #16-1,d7
  518.  
  519. .yloop:    move.w    d5,d6
  520.  
  521. .xloop:    move.w    (a2)+,(a0)+
  522.     dbf    d6,.xloop
  523.  
  524.     adda.l    a6,a0
  525.     adda.l    a6,a2
  526.     dbf    d7,.yloop
  527.     
  528.     suba.w    #320*16*2,a0
  529.     lea    2(a0,d2.l*2),a0
  530.  
  531.     bra.s    .charloop
  532.  
  533. .end:    rts
  534.  
  535. .text:    DC.B    "choose a, b or c                     esc: exit",0
  536.     EVEN
  537.  
  538. Menu.paintStrips:
  539.     movea.l    scr,a0                    ; log
  540.     movea.l    scr+8,a3                ; phys
  541.     adda.l    #(184*320+8)*2,a0
  542.     adda.l    #(184*320+8)*2,a3
  543.     movea.l    Menu.baseAdr,a1
  544.     movea.l    a1,a2
  545.     adda.l    #Menu.OPTIONSBUF,a1
  546.     adda.l    #Menu.STRIPTABLE,a2
  547.     move.w    Menu.numStrips,d7
  548.     move.w    Menu.stripsDone,d0
  549.     cmp.w    d0,d7
  550.     beq.s    .end
  551.  
  552.     lea    (a2,d0.w*4),a2
  553.     move.w    (a2)+,d1            ; d1.w=start
  554.     add.w    d1,d1
  555.     adda.w    d1,a0
  556.     adda.w    d1,a3
  557.     adda.w    d1,a1
  558.     move.w    (a2)+,d0            ; d0.w=stripwidth-1
  559.     movea.w    #320,a6
  560.     suba.w    d0,a6
  561.     subq    #1,a6
  562.     adda.l    a6,a6
  563.     moveq    #16-1,d7
  564.  
  565. .yloop:    move.w    d0,d6
  566.  
  567. .xloop:    move.w    (a1),(a0)+
  568.     move.w    (a1)+,(a3)+
  569.     dbf    d6,.xloop
  570.  
  571.     adda.l    a6,a0
  572.     adda.l    a6,a3
  573.     adda.l    a6,a1
  574.     dbf    d7,.yloop
  575.  
  576.     addq.w    #1,Menu.stripsDone
  577.  
  578. .end:    rts
  579.  
  580. ; Create strips ordered left to right.
  581. Menu.initStrips:
  582.     movea.l    Menu.baseAdr,a0
  583.     adda.l    #Menu.STRIPTABLE,a0
  584.     move.l    random,d0
  585.     clr.w    d6
  586.     clr.w    d5
  587.     move.w    #312,d7
  588.  
  589. .loop:    move.l    d0,d1
  590.     mulu.w    d0,d0
  591.     rol.l    d1,d0
  592.     eor.l    d1,d0
  593.     addq.l    #5,d0
  594.     move.w    d0,d2
  595.     andi.w    #$0007,d2            ; d2.w=width-1
  596.     move.w    d5,(a0)+            ; Store start.
  597.     move.w    d2,(a0)+            ; Store width-1.
  598.     addq.w    #1,d6
  599.     addq.w    #1,d2                ; d2.w=width
  600.     add.w    d2,d5                ; d5.w=curwidth+width
  601.     sub.w    d2,d7                ; d7.w=remaining width
  602.     bgt.s    .loop
  603.  
  604.     add.w    d7,-(a0)            ; Adjust last width.
  605.     move.w    d6,Menu.numStrips        ; Store #strips.
  606.  
  607.     move.l    d0,random
  608.  
  609. ; Now mess up the ordering a bit..
  610.     moveq    #100-1,d7
  611.     movea.l    Menu.baseAdr,a0
  612.     adda.l    #Menu.STRIPTABLE,a0
  613.     move.l    random,d0
  614.  
  615. .mess_loop:
  616. ; Calc random pairs..
  617.     move.l    d0,d1
  618.     mulu.w    d0,d0
  619.     eor.l    d1,d0
  620.     rol.l    d1,d0
  621.     addq.l    #5,d0
  622.  
  623.     clr.l    d2
  624.     move.w    d0,d2
  625.     divu.w    Menu.numStrips,d2
  626.     swap    d2
  627.     move.l    d0,d3
  628.     clr.w    d3
  629.     swap    d3
  630.     divu.w    Menu.numStrips,d3
  631.     swap    d3
  632. ; d2.w=first index, d3.w=second index
  633.  
  634. ; Swap the pair.
  635.     move.l    (a0,d2.w*4),d4
  636.     move.l    (a0,d3.w*4),(a0,d2.w*4)
  637.     move.l    d4,(a0,d3.w*4)
  638.  
  639.     dbf    d7,.mess_loop
  640.  
  641.     move.l    d0,random
  642.  
  643. ; Set #strips done to zero.
  644.     clr.w    Menu.stripsDone
  645.     rts
  646.  
  647. Menu.paint3d1stFrame:
  648.     bsr    Menu.blur8080Upper
  649.     rts
  650.  
  651. Menu.paint3d2ndFrame:
  652.     movea.l    Menu.3dBufAdr,a0
  653.     bsr.l    Primitive.setScreenbuffer
  654.  
  655.     lea    Viewport.settingsTable,a0
  656.     move.w    #80,Viewport.XSCREEN(a0)
  657.     move.w    #80,Viewport.YSCREEN(a0)
  658.     move.w    #80,Viewport.XEND(a0)
  659.     move.w    #80,Viewport.YEND(a0)
  660.     move.w    #40,Viewport.XCENTER(a0)
  661.     move.w    #40,Viewport.YCENTER(a0)
  662.     bsr.l    Viewport.update
  663.  
  664.     bsr.l    PrimitiveMesh.new    
  665.  
  666.     move.w    $04BC.w,d0
  667.     move.w    d0,d1
  668.     move.w    d0,d2
  669.     mulu.w    #3,d1
  670.     mulu.w    #7,d2
  671.     lsr.l    #2,d1
  672.     lsr.l    #2,d2
  673.     bsr.l    Matrix.generate
  674.     clr.w    d0
  675.     clr.w    d1
  676.     move.w    #295,d2
  677.     bsr.l    Matrix.translate
  678.     bsr.l    Matrix.push
  679.  
  680.     moveq    #TransformObject.BACKFACE_CULLING|TransformObject.PERSPECTIVATE,d0
  681.     moveq    #0,d1
  682.     bsr.l    TransformObject.transform
  683.  
  684.     bsr.l    Matrix.pop
  685.  
  686.     bsr.l    PrimitiveMesh.complete
  687.  
  688. ; parallel shit!
  689.     bsr.w    Menu.blur8080Lower
  690.  
  691.     move.w    $04BC.w,d0
  692.     sub.w    Menu.startTime,d0
  693.     lsr.w    #2,d0
  694.     andi.w    #$0FFF,d0
  695.     lsr.w    #2,d0
  696.     movea.l    Menu.baseAdr,a0
  697.     adda.l    #Menu.PAL,a0
  698.     movea.l    Menu.baseAdr,a1
  699.     adda.l    #Menu.COLORTABLE,a1
  700.     move.w    (a0,d0.w*2),64*2(a1)
  701. ; end of parallel shit!
  702.  
  703.     lea    .rectBuffer(pc),a0
  704.     bsr.l    PrimitiveMesh.paint
  705.  
  706.     rts
  707.  
  708. .rectBuffer:
  709.     DS.W    100
  710.  
  711. Menu.copy3dBuffer:
  712.     movea.l    scr,a0
  713.     adda.l    #(320*60+120)*2,a0
  714.     movea.l    Menu.3dBufAdr+4,a1            ; phys buffer
  715.     moveq    #80-1,d7
  716.     movea.w    #(320-80)*2,a6
  717.  
  718. .yloop:
  719.     REPT    80/2
  720.     move.l    (a1)+,(a0)+
  721.     ENDR
  722.     adda.l    a6,a0
  723.     dbf    d7,.yloop
  724.     rts
  725.  
  726. Menu.blur8080Upper:
  727.     movea.l    Menu.3dBufAdr,a0        ; phys
  728.     movea.l    Menu.3dBufAdr+4,a1        ; log
  729.     movea.l    Menu.baseAdr,a2
  730.     adda.l    #Menu.SLOWFADEPAL,a2
  731.     move.w    #80*40/20-1,d7
  732.     clr.l    d0
  733.  
  734. .loop:
  735.     REPT    20
  736.     move.w    (a1)+,d0
  737.     move.w    (a2,d0.l*2),(a0)+
  738.     ENDR
  739.     dbf    d7,.loop
  740.     rts
  741.  
  742. Menu.blur8080Lower:
  743.     movea.l    Menu.3dBufAdr,a0        ; phys
  744.     movea.l    Menu.3dBufAdr+4,a1        ; log
  745.     adda.w    #80*40*2,a0
  746.     adda.w    #80*40*2,a1
  747.     movea.l    Menu.baseAdr,a2
  748.     adda.l    #Menu.SLOWFADEPAL,a2
  749.     move.w    #80*40/20-1,d7
  750.     clr.l    d0
  751.  
  752. .loop:
  753.     REPT    20
  754.     move.w    (a1)+,d0
  755.     move.w    (a2,d0.l*2),(a0)+
  756.     ENDR
  757.     dbf    d7,.loop
  758.     rts
  759.  
  760. Menu.precalcElta:
  761.     movea.l    Menu.baseAdr,a0
  762.     adda.l    #Menu.ELTA,a0
  763.     lea    Font.pic,a1
  764.  
  765. ; d 
  766.     movea.l    a1,a2
  767.     adda.l    #229*2,a2
  768.     moveq    #45-1,d7
  769.  
  770. .d_yloop:
  771.     moveq    #34-1,d6
  772.  
  773. .d_xloop:
  774.     move.w    (a2)+,(a0)+
  775.     dbf    d6,.d_xloop
  776.  
  777.     adda.w    #(Menu.DELTA_W-34)*2,a0
  778.     adda.w    #(320-34)*2,a2
  779.     dbf    d7,.d_yloop
  780.  
  781.     adda.w    #(40-Menu.DELTA_W*45)*2,a0
  782.  
  783. ; e
  784.     movea.l    a1,a2
  785.     adda.l    #38*2,a2
  786.     moveq    #45-1,d7
  787.  
  788. .e_yloop:
  789.     moveq    #34-1,d6
  790.  
  791. .e_xloop:
  792.     move.w    (a2)+,(a0)+
  793.     dbf    d6,.e_xloop
  794.  
  795.     adda.w    #(Menu.DELTA_W-34)*2,a0
  796.     adda.w    #(320-34)*2,a2
  797.     dbf    d7,.e_yloop
  798.  
  799.     adda.w    #(40-Menu.DELTA_W*45)*2,a0
  800.  
  801. ; l
  802.     movea.l    a1,a2
  803.     adda.l    #196*2,a2
  804.     moveq    #45-1,d7
  805.  
  806. .l_yloop:
  807.     moveq    #9-1,d6
  808.  
  809. .l_xloop:
  810.     move.w    (a2)+,(a0)+
  811.     dbf    d6,.l_xloop
  812.  
  813.     adda.w    #(Menu.DELTA_W-9)*2,a0
  814.     adda.w    #(320-9)*2,a2
  815.     dbf    d7,.l_yloop
  816.  
  817.     adda.w    #(15-Menu.DELTA_W*45)*2,a0
  818.  
  819. ; t
  820.     movea.l    a1,a2
  821.     adda.l    #210*2,a2
  822.     moveq    #45-1,d7
  823.  
  824. .t_yloop:
  825.     moveq    #17-1,d6
  826.  
  827. .t_xloop:
  828.     move.w    (a2)+,(a0)+
  829.     dbf    d6,.t_xloop
  830.  
  831.     adda.w    #(Menu.DELTA_W-17)*2,a0
  832.     adda.w    #(320-17)*2,a2
  833.     dbf    d7,.t_yloop
  834.  
  835.     adda.w    #(23-Menu.DELTA_W*45)*2,a0
  836.  
  837. ; a
  838.     movea.l    a1,a2
  839.     adda.l    #76*2,a2
  840.     moveq    #45-1,d7
  841.  
  842. .a_yloop:
  843.     moveq    #34-1,d6
  844.  
  845. .a_xloop:
  846.     move.w    (a2)+,(a0)+
  847.     dbf    d6,.a_xloop
  848.  
  849.     adda.w    #(Menu.DELTA_W-34)*2,a0
  850.     adda.w    #(320-34)*2,a2
  851.     dbf    d7,.a_yloop
  852.  
  853.     movea.l    Menu.baseAdr,a1
  854.     movea.l    a1,a0
  855.     adda.l    #Menu.ELTA,a1
  856.     adda.l    #Menu.RLELOGO,a0
  857.     move.w    #160,d0
  858.     moveq    #45,d1
  859.     bsr.w    Menu.convertBlock2RLE
  860.  
  861.     rts
  862.  
  863. Menu.clearDeltaBack:
  864.     movea.l    scr,a0
  865.     adda.l    #(320*78-120)*2,a0
  866.     moveq    #45-1,d7
  867.     clr.l    d0
  868.     movea.w    #(320-120)*2,a6
  869.  
  870. .yloop:
  871.     REPT    120/2
  872.     move.l    d0,(a0)+
  873.     ENDR
  874.  
  875.     adda.l    a6,a0
  876.     dbf    d7,.yloop
  877.     rts
  878.  
  879. Menu.paintLogo:
  880.     movea.l    scr,a0
  881.     bsr.l    Primitive.setScreenbuffer
  882.  
  883.     lea    Viewport.settingsTable,a0
  884.     move.w    #320,Viewport.XSCREEN(a0)
  885.     move.w    #200,Viewport.YSCREEN(a0)
  886.     move.w    #320,Viewport.XEND(a0)
  887.     move.w    #200,Viewport.YEND(a0)
  888.     move.w    #160,Viewport.XCENTER(a0)
  889.     move.w    #100,Viewport.YCENTER(a0)
  890.     bsr.l    Viewport.update
  891.  
  892.     clr.l    d0
  893.     move.w    eltamovecount,d0
  894.     divu.w    #5,d0
  895.     andi.w    #$fffe,d0
  896.     move.w    #Menu.DELTA_W-1,d4
  897.     lsr.w    #1,d0
  898.     sub.w    d0,d4
  899.     addi.w    #241,d4
  900.     move.w    d4,d0
  901.     movea.l    scr,a0
  902.     movea.l    Menu.baseAdr,a1
  903.     adda.l    #Menu.RLELOGO,a1
  904.     moveq    #99,d1
  905.     bra.l    Sprite.clipAndPaint
  906.  
  907. ******** OBJECT DATA ********
  908.  
  909.     DATA
  910.  
  911. Menu.deltaObject:
  912.     DC.W    9,0
  913.     DC.W    -70,64-25,0
  914.     DC.W    0,-60-25,0
  915.     DC.W    70,64-25,0
  916.     DC.W    -35,42-25,0
  917.     DC.W    0,-20-25,0
  918.     DC.W    35,42-25,0
  919.     DC.W    -50,53-25,20
  920.     DC.W    0,-40-25,20
  921.     DC.W    50,53-25,20
  922.  
  923.     DC.W    0
  924.  
  925.     DC.W    18
  926.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,0,1
  927.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,1,2
  928.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,2,0
  929.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,3,4
  930.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,4,5
  931.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,5,3
  932.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,6,7
  933.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,7,8
  934.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,8,6
  935.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,0,3
  936.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,3,6
  937.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,6,0
  938.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,1,4
  939.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,4,7
  940.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,7,1
  941.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,2,5
  942.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,5,8
  943.     DC.W    Primitive.LINETYPE|Polygon.FLATSHADED,8,2
  944. Menu.deltaObjectEnd:
  945.  
  946. Menu.flowTable:
  947.     DC.W    (.end-.start)/4
  948.     DC.W    5
  949. .start:
  950.  
  951.     IFNE    1
  952.  
  953.     DC.L    $ffff00ff
  954.     DC.L    $7fff007f
  955.     DC.L    $00ff0000
  956.     DC.L    $00ff0000
  957.     DC.L    $00ff003f
  958.     DC.L    $00df007f
  959.     DC.L    $007f00df
  960.     DC.L    $003f00ff
  961.     DC.L    $000000ff
  962.     DC.L    $000000ff
  963.     DC.L    $3f3f00ff
  964.     DC.L    $7f7f00ff
  965.     DC.L    $dfdf00ff
  966.     DC.L    $ffff00ff
  967.     DC.L    $ffff00ff
  968.     DC.L    $ffff00df
  969.     DC.L    $ffff007f
  970.     DC.L    $ffff003f
  971.     DC.L    $ffff0000
  972.     DC.L    $ffdf0000
  973.     DC.L    $ff7f0000
  974.     DC.L    $ff3f0000
  975.     DC.L    $ff000000
  976.     DC.L    $ff000000
  977.     DC.L    $ff00003f
  978.     DC.L    $ff00007f
  979.     DC.L    $ff0000df
  980.     DC.L    $ff0000ff
  981.     DC.L    $ff0000ff
  982.     DC.L    $ff3f00ff
  983.     DC.L    $ff7f00ff
  984.     DC.L    $ffdf00ff
  985.     DC.L    $ffff00ff
  986.  
  987.     ELSE
  988.  
  989.     DC.L    $00000000
  990.     DC.L    $007f0000
  991.     DC.L    $00ff0000
  992.     DC.L    $00ff0000
  993.     DC.L    $00ff003f
  994.     DC.L    $00df007f
  995.     DC.L    $007f00df
  996.     DC.L    $003f00ff
  997.     DC.L    $000000ff
  998.     DC.L    $000000ff
  999.     DC.L    $3f3f00ff
  1000.     DC.L    $7f7f00ff
  1001.     DC.L    $dfdf00ff
  1002.     DC.L    $ffff00ff
  1003.     DC.L    $ffff00ff
  1004.     DC.L    $ffff00df
  1005.     DC.L    $ffff007f
  1006.     DC.L    $ffff003f
  1007.     DC.L    $ffff0000
  1008.     DC.L    $ffdf0000
  1009.     DC.L    $ff7f0000
  1010.     DC.L    $ff3f0000
  1011.     DC.L    $ff000000
  1012.     DC.L    $ff000000
  1013.     DC.L    $ff00003f
  1014.     DC.L    $ff00007f
  1015.     DC.L    $ff0000df
  1016.     DC.L    $ff0000ff
  1017.     DC.L    $ff0000ff
  1018.     DC.L    $df0000df
  1019.     DC.L    $7f00007f
  1020.     DC.L    $3f00003f
  1021.     DC.L    $00000000
  1022.  
  1023.     ENDC
  1024. .end:
  1025.  
  1026. ******** OBJECT RESERVES ********
  1027.  
  1028.     BSS
  1029.  
  1030. Menu.textureTable:
  1031.     DS.L    2                ; ptr to elta, 0
  1032. Menu.3dBufAdr:
  1033.     DS.L    2                ; phys,log 3d buffer ptrs
  1034. eltamovedirection:
  1035.     DS.W    1
  1036. eltamovecount:
  1037.     DS.W    1
  1038. eltamovespeed:
  1039.     DS.W    1
  1040. Menu.startTime:
  1041.     DS.W    1
  1042. Menu.baseAdr:
  1043.     DS.L    1
  1044. Menu.stripsDone:
  1045.     DS.W    1
  1046. Menu.numStrips:
  1047.     DS.W    1
  1048. Menu.optionsActive:
  1049.     DS.W    1
  1050. Menu.partNum:
  1051.     DS.W    1