home *** CD-ROM | disk | FTP | other *** search
/ Amiga ACS 1997 #2 / amigaacscoverdisc / games / alienbreed3d2 / source_4000 / hiresgourwall.s < prev    next >
Text File  |  1997-01-31  |  22KB  |  1,651 lines

  1.  
  2. *********************************** 
  3.  
  4. * The screendivide routine is simpler
  5. * using a0=left pixel
  6. * a2= right pixel
  7. * d0= left dist
  8. * d2= right dist
  9. * d4 = left strip
  10. * d5 = right strip
  11.  
  12. * (a0)=leftx
  13. * 2(a0)=rightx
  14.  
  15. * 4(a0)=leftbm
  16. * 6(a0)=rightbm
  17.  
  18. * 8(a0)=leftdist
  19. * 10(a0)=rightdist
  20.  
  21. * 12(a0)=lefttop
  22. * 14(a0)=righttop
  23.  
  24. * 16(a0)=leftbot
  25. * 18(a0)=rightbot
  26.  
  27.  
  28. DoleftendGOUR:
  29.  
  30.  move.w leftclip,d0
  31.  sub.w #1,d0
  32.  move.w d0,leftclipandlast
  33.  
  34.  
  35.  move.w (a0),d0
  36.  move.w 2(a0),d1
  37.  sub.w d0,d1
  38.  bge.s sometodrawG
  39.  rts
  40. sometodrawG:
  41.  move.w itertabG(pc,d1.w*4),d7
  42.  swap d0
  43.  move.w itertabG+2(pc,d1.w*4),d6
  44.  clr.w d0
  45.  swap d1
  46.  clr.w d1
  47.  asr.l d6,d1
  48.  move.l d1,(a0)
  49.  
  50.  bra pstitG
  51.  
  52. itertabG:
  53.  incbin "ab3:includes/iterfile"
  54.  
  55. pstitG:
  56.  
  57.  moveq #0,d1
  58.  move.w 4(a0),d1
  59.  moveq #0,d2
  60.  move.w 6(a0),d2
  61.  sub.w d1,d2
  62.  swap d1
  63.  swap d2
  64.  asr.l d6,d2
  65.  move.l d2,4(a0)
  66.  
  67.  moveq #0,d2
  68.  move.w 8(a0),d2
  69.  moveq #0,d3
  70.  move.w 10(a0),d3
  71.  sub.w d2,d3
  72.  swap d2
  73.  swap d3
  74.  asr.l d6,d3
  75.  move.l d3,8(a0)
  76.  
  77.  moveq #0,d3
  78.  move.w 12(a0),d3
  79.  moveq #0,d4
  80.  move.w 14(a0),d4
  81.  sub.w d3,d4
  82.  swap d3
  83.  swap d4
  84.  asr.l d6,d4
  85.  move.l d4,12(a0)
  86.  
  87.  moveq #0,d4
  88.  move.w 16(a0),d4
  89.  moveq #0,d5
  90.  move.w 18(a0),d5
  91.  sub.w d4,d5
  92.  swap d4
  93.  swap d5
  94.  asr.l d6,d5
  95.  move.l d5,16(a0)
  96.  
  97.  
  98. *** Gouraud shading ***
  99.  moveq #0,d5
  100.  move.w 26(a0),d5
  101.  sub.w 24(a0),d5
  102.  add.w d5,d5
  103.  swap d5
  104.  asr.l d6,d5
  105.  move.l d5,28(a0)
  106.  moveq #0,d5
  107.  move.w 24(a0),d5
  108.  add.w d5,d5
  109.  swap d5
  110.  move.l d5,24(a0)
  111.  
  112. *** Extra Gouraud Shading ***
  113.  
  114.  moveq #0,d5
  115.  move.w 34(a0),d5
  116.  sub.w 32(a0),d5
  117.  add.w d5,d5
  118.  swap d5
  119.  asr.l d6,d5
  120.  move.l d5,36(a0)
  121.  moveq #0,d5
  122.  move.w 32(a0),d5
  123.  add.w d5,d5
  124.  swap d5
  125.  move.l d5,32(a0)
  126.  
  127.  bra screendivideGOUR
  128.  
  129. TOPBRCOUNT: dc.l 0
  130. BOTBRCOUNT: dc.l 0
  131.  
  132. screendivideGOUR:
  133.  
  134.  or.l #$ffff0000,d7
  135.  move.w leftclipandlast(pc),d6
  136.  move.l #WorkSpace,a2
  137.  
  138.  move.l (a0),a3
  139.  move.l 4(a0),a4
  140.  move.l 8(a0),a5
  141.  move.l 12(a0),a6
  142.  move.l 16(a0),a1
  143.  
  144.  
  145. scrdivlopG:
  146.  
  147.  swap d0
  148.  cmp.w d6,d0
  149.  bgt scrnotoffleftG
  150.  swap d0
  151.  add.l a4,d1
  152.  add.l a5,d2
  153.  add.l a6,d3
  154.  add.l a1,d4
  155.  add.l a3,d0
  156.  move.l 28(a0),d5
  157.  add.l d5,24(a0)
  158.  move.l 36(a0),d5
  159.  add.l d5,32(a0)
  160.  
  161.  dbra d7,scrdivlopG
  162.  rts
  163.  
  164. scrnotoffleftG:
  165.  
  166.  move.w d0,d6
  167.  
  168.  cmp.w rightclip(pc),d0
  169.  bge.s outofcalcG
  170.  
  171. scrnotoffrightG:
  172.  
  173.  
  174.  move.w d0,(a2)+
  175.  move.l d1,(a2)+
  176.  move.l d2,(a2)+
  177.  move.l d3,(a2)+
  178.  move.l d4,(a2)+
  179.  move.l 24(a0),(a2)+
  180.  move.l 32(a0),(a2)+
  181.  swap d0
  182.  add.l a3,d0
  183.  add.l a4,d1
  184.  add.l a5,d2
  185.  add.l a6,d3
  186.  add.l a1,d4
  187.  move.l 28(a0),d5
  188.  add.l d5,24(a0)
  189.  move.l 36(a0),d5
  190.  add.l d5,32(a0)
  191.  add.l #$10000,d7
  192.  dbra d7,scrdivlopG
  193.  
  194. outofcalcG:
  195.  swap d7
  196.  tst.w d7
  197.  bge.s .somethingtodraw
  198.  rts
  199. .somethingtodraw:
  200.  
  201.  move.l #consttab,a1
  202.  move.l #WorkSpace,a0
  203.  
  204. ; tst.b seethru
  205. ; bne screendividethru
  206.  
  207.  tst.b FULLSCR
  208.  bne scrdrawlopGB
  209.  
  210.  tst.b DOUBLEWIDTH
  211.  bne scrdrawlopGDOUB
  212.  bra scrdrawlopG
  213.  
  214. thislinedoneG:
  215.  add.w #4+4+4+4+4+4,a0
  216.  dbra d7,scrdrawlopG
  217.  
  218.  rts
  219.  
  220. scrdrawlopG:
  221.  
  222.  move.w (a0)+,d0
  223.  
  224.  cmp.w LASTSTIRRUP,d0
  225.  beq.s thislinedoneG
  226.  move.w d0,LASTSTIRRUP
  227.  
  228.  move.l FASTBUFFER,a3
  229.  lea (a3,d0.w),a3
  230.  move.l (a0)+,d1
  231.  
  232. ; bra pastscrinto
  233. ;
  234. ;pastscrinto 
  235.  
  236.  swap d1
  237.  
  238.  move.w d1,d6
  239.  and.w HORAND,d6
  240.  move.l (a0)+,d2
  241.  swap d2
  242.  add.w fromtile(pc),d6
  243.  add.w d6,d6
  244.  move.w d6,a5
  245.  move.l (a0)+,d3
  246.  swap d3
  247.  add.l #divthreetab,a5
  248.  move.w (a5),StripData
  249.  
  250.  move.l ChunkAddr,a5
  251.  moveq #0,d6
  252.  move.b StripData,d6
  253.  add.w d6,d6
  254.  move.w VALSHIFT,d4
  255.  asl.l d4,d6
  256.  add.l d6,a5
  257.  move.l (a0)+,d4
  258.  swap d4
  259.  addq #1,d4
  260.  move.w d2,d6
  261. ***************************
  262. * old version
  263.  asr.w #7,d6
  264. ***************************
  265. ; asr.w #3,d6
  266. ; sub.w #4,d6
  267. ; cmp.w #6,d6
  268. ; blt.s tstbrbr
  269. ; move.w #6,d6
  270. ;tstbrbr:
  271. ***************************
  272.  move.l (a0)+,d5
  273.  swap d5
  274.  move.w d7,-(a7)
  275.  ext.w d5
  276.  move.w d6,d7
  277.  add.w d5,d7
  278.  bge.s .brnotneg
  279.  moveq #0,d7
  280. .brnotneg
  281.  cmp.w #62,d7
  282.  blt.s .brnotpos
  283.  move.w #62,d7
  284. .brnotpos
  285.  
  286.  move.l (a0)+,d5
  287.  swap d5
  288.  ext.w d5
  289.  add.w d5,d6
  290.  bge.s .brnotneg2
  291.  moveq #0,d6
  292. .brnotneg2
  293.  cmp.w #62,d6
  294.  blt.s .brnotpos2
  295.  move.w #62,d6
  296. .brnotpos2
  297.  
  298.  asr.w #1,d6
  299.  asr.w #1,d7
  300.  sub.w d6,d7
  301.  
  302.  move.l PaletteAddr,a4
  303. ; move.l a2,a4
  304. ; add.w ffscrpickhowbright(pc,d6*2),a2
  305. ; and.b #$fe,d6
  306. ; add.w ffscrpickhowbright(pc,d6*2),a4
  307.  
  308. ; btst #0,d0
  309. ; beq .nobrightswap
  310. ; exg a2,a4
  311. ;.nobrightswap:
  312.  
  313.  bsr ScreenWallstripdrawGOUR
  314.  move.w (a7)+,d7
  315.  
  316. toosmallG:
  317.  
  318.  dbra d7,scrdrawlopG
  319.  
  320.  rts
  321.  
  322. itsoddy:
  323.  add.w #4+4+4+4+4+4,a0
  324.  dbra d7,scrdrawlopGDOUB
  325.  rts
  326.  
  327. scrdrawlopGDOUB:
  328.  
  329.  move.w (a0)+,d0
  330.  btst #0,d0
  331.  bne.s itsoddy
  332.  
  333.  cmp.w LASTSTIRRUP,d0
  334.  beq.s itsoddy
  335.  move.w d0,LASTSTIRRUP
  336.  
  337.  move.l FASTBUFFER,a3
  338.  lea (a3,d0.w),a3
  339.  move.l (a0)+,d1
  340.  
  341. ; bra pastscrinto
  342. ;
  343. ;pastscrinto 
  344.  
  345.  swap d1
  346.  
  347.  move.w d1,d6
  348.  and.w HORAND,d6
  349.  move.l (a0)+,d2
  350.  swap d2
  351.  add.w fromtile(pc),d6
  352.  add.w d6,d6
  353.  move.w d6,a5
  354.  move.l (a0)+,d3
  355.  swap d3
  356.  add.l #divthreetab,a5
  357.  move.w (a5),StripData
  358.  
  359.  move.l ChunkAddr,a5
  360.  moveq #0,d6
  361.  move.b StripData,d6
  362.  add.w d6,d6
  363.  move.w VALSHIFT,d4
  364.  asl.l d4,d6
  365.  add.l d6,a5
  366.  move.l (a0)+,d4
  367.  swap d4
  368.  addq #1,d4
  369.  move.w d2,d6
  370. ***************************
  371. * old version
  372.  asr.w #7,d6
  373. ***************************
  374. ; asr.w #3,d6
  375. ; sub.w #4,d6
  376. ; cmp.w #6,d6
  377. ; blt.s tstbrbr
  378. ; move.w #6,d6
  379. ;tstbrbr:
  380. ***************************
  381.  move.l (a0)+,d5
  382.  swap d5
  383.  move.w d7,-(a7)
  384.  ext.w d5
  385.  move.w d6,d7
  386.  add.w d5,d7
  387.  bge.s .brnotneg
  388.  moveq #0,d7
  389. .brnotneg
  390.  cmp.w #62,d7
  391.  blt.s .brnotpos
  392.  move.w #62,d7
  393. .brnotpos
  394.  
  395.  move.l (a0)+,d5
  396.  swap d5
  397.  ext.w d5
  398.  add.w d5,d6
  399.  bge.s .brnotneg2
  400.  moveq #0,d6
  401. .brnotneg2
  402.  cmp.w #62,d6
  403.  blt.s .brnotpos2
  404.  move.w #62,d6
  405. .brnotpos2
  406.  
  407.  asr.w #1,d6
  408.  asr.w #1,d7
  409.  sub.w d6,d7
  410.  
  411.  move.l PaletteAddr,a4
  412. ; move.l a2,a4
  413. ; add.w ffscrpickhowbright(pc,d6*2),a2
  414. ; and.b #$fe,d6
  415. ; add.w ffscrpickhowbright(pc,d6*2),a4
  416.  
  417. ; btst #0,d0
  418. ; beq .nobrightswap
  419. ; exg a2,a4
  420. ;.nobrightswap:
  421.  
  422.  bsr ScreenWallstripdrawGOUR
  423.  move.w (a7)+,d7
  424.  
  425.  dbra d7,scrdrawlopGDOUB
  426.  
  427.  rts
  428.  
  429.  
  430. scrdrawlopGB:
  431.  
  432.  move.w (a0)+,d0
  433.  move.l FASTBUFFER,a3
  434.  lea (a3,d0.w),a3
  435.  move.l (a0)+,d1
  436.  
  437. ; bra pastscrinto
  438. ;
  439. ;pastscrinto 
  440.  
  441.  swap d1
  442.  
  443.  move.w d1,d6
  444.  and.w HORAND,d6
  445.  move.l (a0)+,d2
  446.  swap d2
  447.  add.w fromtile(pc),d6
  448.  add.w d6,d6
  449.  move.w d6,a5
  450.  move.l (a0)+,d3
  451.  swap d3
  452.  add.l #divthreetab,a5
  453.  move.w (a5),StripData
  454.  
  455.  move.l ChunkAddr,a5
  456.  moveq #0,d6
  457.  move.b StripData,d6
  458.  add.w d6,d6
  459.  move.w VALSHIFT,d4
  460.  asl.l d4,d6
  461.  add.l d6,a5
  462.  move.l (a0)+,d4
  463.  swap d4
  464.  addq #1,d4
  465.  move.w d2,d6
  466. ***************************
  467. * old version
  468.  asr.w #7,d6
  469. ***************************
  470. ; asr.w #3,d6
  471. ; sub.w #4,d6
  472. ; cmp.w #6,d6
  473. ; blt.s tstbrbr
  474. ; move.w #6,d6
  475. ;tstbrbr:
  476. ***************************
  477.  move.l (a0)+,d5
  478.  swap d5
  479.  move.w d7,-(a7)
  480.  ext.w d5
  481.  move.w d6,d7
  482.  add.w d5,d7
  483.  bge.s .brnotneg
  484.  moveq #0,d7
  485. .brnotneg
  486.  cmp.w #62,d7
  487.  blt.s .brnotpos
  488.  move.w #62,d7
  489. .brnotpos
  490.  
  491.  move.l (a0)+,d5
  492.  swap d5
  493.  ext.w d5
  494.  add.w d5,d6
  495.  bge.s .brnotneg2
  496.  moveq #0,d6
  497. .brnotneg2
  498.  cmp.w #62,d6
  499.  blt.s .brnotpos2
  500.  move.w #62,d6
  501. .brnotpos2
  502.  
  503.  asr.w #1,d6
  504.  asr.w #1,d7
  505.  sub.w d6,d7
  506.  
  507.  move.l PaletteAddr,a4
  508. ; move.l a2,a4
  509. ; add.w ffscrpickhowbright(pc,d6*2),a2
  510. ; and.b #$fe,d6
  511. ; add.w ffscrpickhowbright(pc,d6*2),a4
  512.  
  513. ; btst #0,d0
  514. ; beq .nobrightswap
  515. ; exg a2,a4
  516. ;.nobrightswap:
  517.  
  518.  bsr ScreenWallstripdrawGOURB
  519.  move.w (a7)+,d7
  520.  
  521.  dbra d7,scrdrawlopGB
  522.  
  523.  rts
  524.  
  525. itsbilloddy:
  526.  add.w #4+4+4+4+4+4,a0
  527.  dbra d7,scrdrawlopGDOUB
  528.  rts
  529.  
  530. scrdrawlopGBDOUB:
  531.  
  532.  move.w (a0)+,d0
  533.  btst #0,d0
  534.  bne.s itsbilloddy
  535.  move.l FASTBUFFER,a3
  536.  lea (a3,d0.w),a3
  537.  move.l (a0)+,d1
  538.  
  539. ; bra pastscrinto
  540. ;
  541. ;pastscrinto 
  542.  
  543.  swap d1
  544.  
  545.  move.w d1,d6
  546.  and.w HORAND,d6
  547.  move.l (a0)+,d2
  548.  swap d2
  549.  add.w fromtile(pc),d6
  550.  add.w d6,d6
  551.  move.w d6,a5
  552.  move.l (a0)+,d3
  553.  swap d3
  554.  add.l #divthreetab,a5
  555.  move.w (a5),StripData
  556.  
  557.  move.l ChunkAddr,a5
  558.  moveq #0,d6
  559.  move.b StripData,d6
  560.  add.w d6,d6
  561.  move.w VALSHIFT,d4
  562.  asl.l d4,d6
  563.  add.l d6,a5
  564.  move.l (a0)+,d4
  565.  swap d4
  566.  addq #1,d4
  567.  move.w d2,d6
  568. ***************************
  569. * old version
  570.  asr.w #7,d6
  571. ***************************
  572. ; asr.w #3,d6
  573. ; sub.w #4,d6
  574. ; cmp.w #6,d6
  575. ; blt.s tstbrbr
  576. ; move.w #6,d6
  577. ;tstbrbr:
  578. ***************************
  579.  move.l (a0)+,d5
  580.  swap d5
  581.  move.w d7,-(a7)
  582.  ext.w d5
  583.  move.w d6,d7
  584.  add.w d5,d7
  585.  bge.s .brnotneg
  586.  moveq #0,d7
  587. .brnotneg
  588.  cmp.w #62,d7
  589.  blt.s .brnotpos
  590.  move.w #62,d7
  591. .brnotpos
  592.  
  593.  move.l (a0)+,d5
  594.  swap d5
  595.  ext.w d5
  596.  add.w d5,d6
  597.  bge.s .brnotneg2
  598.  moveq #0,d6
  599. .brnotneg2
  600.  cmp.w #62,d6
  601.  blt.s .brnotpos2
  602.  move.w #62,d6
  603. .brnotpos2
  604.  
  605.  asr.w #1,d6
  606.  asr.w #1,d7
  607.  sub.w d6,d7
  608.  
  609.  move.l PaletteAddr,a4
  610. ; move.l a2,a4
  611. ; add.w ffscrpickhowbright(pc,d6*2),a2
  612. ; and.b #$fe,d6
  613. ; add.w ffscrpickhowbright(pc,d6*2),a4
  614.  
  615. ; btst #0,d0
  616. ; beq .nobrightswap
  617. ; exg a2,a4
  618. ;.nobrightswap:
  619.  
  620.  bsr ScreenWallstripdrawGOURB
  621.  move.w (a7)+,d7
  622.  
  623.  dbra d7,scrdrawlopGBDOUB
  624.  
  625.  rts
  626.  
  627. walldrawGOUR:
  628.  
  629.  tst.w d1
  630.  bgt.s oneinfront1G
  631.  tst.w d3
  632.  bgt.s oneinfrontG
  633.  rts
  634.  
  635. oneinfront1G
  636.  tst.w d3
  637.  ble.s oneinfrontG
  638. ; Bothinfront!
  639.  
  640.  nop
  641.  
  642. oneinfrontG
  643.  
  644.  move.w #16,d7
  645.  move.w #2,d6
  646.  
  647.  tst.b GOODRENDER
  648.  beq.s .notgood
  649.  
  650.  move.w #64,d7
  651.  move.w #4,d6
  652.  bra .ISGOOD
  653. .notgood:
  654.  
  655.  move.l a2,d0
  656.  sub.l a0,d0
  657.  bge.s .okpos
  658.  neg.l d0
  659. .okpos:
  660.  
  661.  cmp.l #256*128,d0
  662.  blt.s .ISGOOD
  663.  add.w d7,d7
  664.  addq #1,d6
  665.  cmp.l #512*128,d0
  666.  blt.s .ISGOOD
  667.  add.w d7,d7
  668.  addq #1,d6
  669. .ISGOOD
  670.  
  671.  move.w d3,d0
  672.  sub.w d1,d0
  673.  bge.s notnegzdiffG
  674.  neg.w d0
  675. notnegzdiffG
  676. ; cmp.w #1024,d0
  677. ; blt.s nd01G
  678. ; add.w d7,d7
  679. ; add.w #1,d6
  680. ;nd01G:
  681.  cmp.w #512,d0
  682.  blt.s nd0G 
  683.  tst.b GOODRENDER
  684.  beq.s nd0G
  685.  add.w d7,d7
  686.  add.w #1,d6
  687.  bra nhaG
  688. nd0G:
  689.  
  690.  cmp.w #256,d0
  691.  bgt.s nh1G
  692.  asr.w #1,d7
  693.  subq #1,d6
  694. nh1G:
  695.  cmp.w #128,d0
  696.  bgt.s nh2G
  697.  asr.w #1,d7
  698.  subq #1,d6
  699. nh2G:
  700.  
  701. nhaG:
  702.  
  703.  move.w d3,d0
  704.  cmp.w d1,d3
  705.  blt.s rightnearestG
  706.  move.w d1,d0
  707. rightnearestG:
  708.  cmp.w #32,d0
  709.  bgt.s ndd0G
  710.  addq #1,d6
  711.  add.w d7,d7
  712. ndd0G:
  713.  cmp.w #64,d0
  714.  bgt.s nd1G
  715.  addq #1,d6
  716.  add.w d7,d7
  717. nd1G:
  718.  
  719.  cmp.w #128,d0
  720.  blt.s nh3G
  721.  asr.w #1,d7
  722.  subq #1,d6
  723.  blt.s nh4G
  724.  cmp.w #256,d0
  725.  blt.s nh3G
  726.  asr.w #1,d7
  727.  subq #1,d6
  728.  blt.s nh4G
  729. nh3G:
  730.  cmp.w #512,d0
  731.  blt.s nh4G
  732.  asr.w #1,d7
  733.  subq #1,d6
  734. nh4G:
  735.  
  736.  cmp.w #128,d7
  737.  ble.s .okokok
  738.  move.w #128,d7
  739.  move.w #5,d6
  740. .okokok:
  741.  
  742.  
  743.  move.w d6,iters
  744.  subq #1,d7
  745.  move.w d7,multcount
  746.  
  747.  move.l #databuffer,a3
  748.  move.l a0,d0
  749.  move.l a2,d2
  750.  
  751.  move.l d0,(a3)+
  752.  add.l d2,d0
  753.  move.w d1,(a3)+
  754.  move.w leftwallTOPbright,d7
  755.  move.w d7,(a3)+
  756.  asr.l #1,d0
  757.  move.w d4,(a3)+
  758.  
  759.  move.w leftwallbright,d6
  760.  move.w d6,(a3)+
  761.  
  762.  add.w d5,d4
  763.  move.l d0,(a3)+
  764.  add.w d3,d1
  765.  asr.w #1,d1
  766.  move.w d1,(a3)+
  767.  
  768.  add.w rightwallTOPbright,d7
  769.  asr.w #1,d7
  770.  move.w d7,(a3)+
  771.  
  772.  asr.w #1,d4
  773.  move.w d4,(a3)+
  774.  
  775.  add.w rightwallbright,d6
  776.  asr.w #1,d6
  777.  move.w d6,(a3)+
  778.  
  779.  
  780.  move.l d2,(a3)+
  781.  move.w d3,(a3)+
  782.  move.w rightwallTOPbright,(a3)+
  783.  move.w d5,(a3)+
  784.  move.w rightwallbright,(a3)+
  785.  
  786.  ; We now have the two endpoints and the midpoint
  787.  ; so we need to perform 1 iteration of the inner
  788.  ; loop, the first time.
  789.  
  790. * Decide how often to subdivide by how far away the wall is, and
  791. * how perp. it is to the player.
  792.  
  793.  move.l #databuffer,a0
  794.  move.l #databuffer2,a1
  795.  
  796.  swap d7
  797.  move.w iters,d7
  798.  blt noitersG
  799.  move.l #1,a2
  800.  
  801. iterloopG:
  802.  move.l a0,a3
  803.  move.l a1,a4
  804.  swap d7
  805.  move.w a2,d7
  806.  exg a0,a1
  807.  
  808.  move.l (a3)+,d0
  809.  move.l (a3)+,d1
  810.  move.l (a3)+,d2
  811. middleloopG:
  812.  move.l d0,(a4)+
  813.  move.l (a3)+,d3
  814.  add.l d3,d0
  815.  move.l d1,(a4)+
  816.  asr.l #1,d0
  817.  move.l (a3)+,d4
  818.  add.l d4,d1
  819.  move.l d2,(a4)+
  820.  asr.l #1,d1
  821.  and.w #$7fff,d1
  822.  move.l (a3)+,d5
  823.  add.l d5,d2
  824.  move.l d0,(a4)+
  825.  asr.l #1,d2
  826.  move.l d1,(a4)+
  827.  move.l d2,(a4)+
  828.  
  829.  move.l d3,(a4)+
  830.  move.l (a3)+,d0
  831.  add.l d0,d3
  832.  
  833.  move.l d4,(a4)+
  834.  asr.l #1,d3
  835.  move.l (a3)+,d1
  836.  add.l d1,d4
  837.  move.l d5,(a4)+
  838.  asr.l #1,d4
  839.  and.w #$7fff,d4
  840.  move.l (a3)+,d2
  841.  add.l d2,d5
  842.  move.l d3,(a4)+
  843.  asr.l #1,d5
  844.  move.l d4,(a4)+
  845.  move.l d5,(a4)+
  846.  
  847.  subq #1,d7
  848.  bgt.s middleloopG
  849.  move.l d0,(a4)+
  850.  move.l d1,(a4)+
  851.  move.l d2,(a4)+
  852.  
  853.  add.w a2,a2
  854.  
  855.  swap d7
  856.  dbra d7,iterloopG
  857.  
  858. noitersG:
  859.  
  860. CalcAndDrawG:
  861.  
  862. ; CACHE_ON d2
  863.  
  864.  move.l a0,a1
  865.  move.w multcount,d7
  866. .findfirstinfront:
  867.  move.l (a1)+,d1
  868.  move.w (a1)+,d0
  869.  bgt.s .foundinfront
  870.  move.l (a1)+,d4
  871.  move.w (a1)+,d4
  872.  dbra d7,.findfirstinfront
  873.  rts    ; no two points were in front
  874.  
  875. .foundinfront:
  876.  move.w (a1)+,tlbr
  877.  move.w (a1)+,d4
  878.  move.w (a1)+,lbr
  879.  ; d1=left x, d4=left end, d0=left dist 
  880.  
  881.  ext.l d0
  882.  
  883.  divs.l d0,d1
  884.  moveq #0,d5
  885.  move.w MIDDLEX,d5
  886.  add.l d5,d1
  887.  
  888.  move.l topofwall(pc),d5
  889.  divs d0,d5
  890.  add.w MIDDLEY,d5
  891.  move.w d5,strtop
  892.  move.l botofwall(pc),d5
  893.  divs d0,d5
  894.  add.w MIDDLEY,d5
  895.  move.w d5,strbot
  896.  
  897. .computeloop:
  898.  move.w 4(a1),d2
  899.  bgt.s .infront
  900.  rts
  901.  
  902. .infront:
  903.  move.l #store,a0
  904.  move.l (a1),d3
  905.  ext.l d2
  906.  divs.l d2,d3
  907.  moveq #0,d5
  908.  move.w MIDDLEX,d5
  909.  add.l d5,d3
  910.  move.w 8(a1),d5
  911.  move.w strtop(pc),12(a0)
  912.  move.l topofwall(pc),d6
  913.  divs d2,d6
  914.  move.w strbot(pc),16(a0)
  915.  add.w MIDDLEY,d6
  916.  move.w d6,strtop
  917.  move.w d6,14(a0)
  918.  move.l botofwall(pc),d6
  919.  divs d2,d6
  920.  add.w MIDDLEY,d6
  921.  move.w d6,strbot
  922.  move.w d6,18(a0)
  923.  move.l d3,(a1)
  924.  cmp.l leftclip-2(pc),d3
  925.  blt .alloffleft
  926.  cmp.l rightclip-2(pc),d1
  927. ; cmp.w #95,d1
  928.  bge .alloffright
  929.  
  930.  movem.l d0/d1/d2/d3/a0,-(a7)
  931.  
  932.  moveq #0,d0
  933.  move.b WALLIDENT,d0
  934.  blt.s .noputinmap
  935.  
  936.  move.b d0,d3
  937.  and.b #15,d0
  938.  move.l COMPACTPTR,a0
  939.  moveq #0,d1
  940.  move.w d0,d2
  941.  add.w d0,d0
  942.  add.w d2,d0
  943.  bset d0,d1
  944.  btst #4,d3
  945.  beq.s .nodoor
  946.  addq #2,d0
  947.  bset d0,d1
  948. .nodoor:
  949.  
  950.  or.l d1,(a0)
  951.  move.l BIGPTR,a0
  952.  
  953.  move.w wallleftpt,(a0,d2.w*4) 
  954.  move.w wallrightpt,2(a0,d2.w*4) 
  955.  
  956. .noputinmap
  957.  
  958.  movem.l (a7)+,d0/d1/d2/d3/a0
  959.  
  960.  bra OTHERHALFG
  961.  
  962.  
  963. .alloffleft:
  964.  
  965.  move.l (a1)+,d1
  966.  move.w (a1)+,d0
  967.  move.w (a1)+,tlbr
  968.  move.w (a1)+,d4
  969.  move.w (a1)+,lbr
  970.  
  971.  dbra d7,.computeloop
  972.  rts
  973.  
  974. .alloffright:
  975.  rts
  976.  
  977. computeloop2G:
  978.  move.w 4(a1),d2
  979.  bgt.s .infront
  980.  rts
  981.  
  982. .infront:
  983.  ext.l d2
  984.  move.l #store,a0
  985.  move.l (a1),d3
  986.  divs.l d2,d3
  987.  moveq #0,d5
  988.  move.w MIDDLEX,d5
  989.  add.l d5,d3
  990.  move.w 8(a1),d5
  991.  move.w strtop(pc),12(a0)
  992.  move.l topofwall(pc),d6
  993.  divs d2,d6
  994.  move.w strbot(pc),16(a0)
  995.  add.w MIDDLEY,d6
  996.  move.w d6,strtop
  997.  move.w d6,14(a0)
  998.  move.l botofwall(pc),d6
  999.  divs d2,d6
  1000.  add.w MIDDLEY,d6
  1001.  move.w d6,strbot
  1002.  move.w d6,18(a0)
  1003.  move.l d3,(a1)
  1004.  cmp.w leftclip(pc),d3
  1005.  blt.s alloffleft2G
  1006.  cmp.w rightclip(pc),d1
  1007. ; cmp.w #95,d1
  1008.  bge alloffright2G
  1009.  
  1010. OTHERHALFG:
  1011.  
  1012.  move.w d1,(a0)
  1013.  move.w d3,2(a0)
  1014.  move.w d4,4(a0)
  1015.  move.w d5,6(a0)
  1016.  move.w d0,8(a0)
  1017.  move.w d2,10(a0)
  1018.  
  1019.  move.w lbr,d5
  1020.  sub.w #300,d5
  1021.  ext.w d5
  1022.  move.w d5,24(a0)
  1023.  move.w 10(a1),d5
  1024.  sub.w #300,d5
  1025.  ext.w d5
  1026.  move.w d5,26(a0)
  1027.  
  1028.  move.w tlbr,d5
  1029.  sub.w #300,d5
  1030.  ext.w d5
  1031.  move.w d5,32(a0)
  1032.  move.w 6(a1),d5
  1033.  sub.w #300,d5
  1034.  ext.w d5
  1035.  move.w d5,34(a0)
  1036.  
  1037.  movem.l d7/a1,-(a7)
  1038.  move.w #maxscrdiv,d7
  1039.  bsr DoleftendGOUR
  1040.  movem.l (a7)+,d7/a1
  1041.  
  1042. alloffleft2G:
  1043.  
  1044.  move.l (a1)+,d1
  1045.  move.w (a1)+,d0
  1046.  move.w (a1)+,tlbr
  1047.  move.w (a1)+,d4
  1048.  move.w (a1)+,lbr
  1049.  
  1050.  dbra d7,computeloop2G
  1051.  
  1052.  rts
  1053.  
  1054. alloffright2G:
  1055.  rts
  1056.  
  1057.  
  1058. ***********************************
  1059.  
  1060. * Need a routine which takes...?
  1061. * Top Y (3d)
  1062. * Bottom Y (3d)
  1063. * distance
  1064. * height of each tile (number and routine addr)
  1065. * And produces the appropriate strip on the
  1066. * screen.
  1067.  
  1068.  
  1069. nostripqG:
  1070.  rts
  1071.  
  1072. STARTGOUR: dc.l 0
  1073.  
  1074. ScreenWallstripdrawGOUR:
  1075.  
  1076.  swap d6
  1077.  clr.w d6
  1078.  move.l d6,STARTGOUR
  1079.  
  1080.  swap d7
  1081.  clr.w d7
  1082.  
  1083.  move.w d4,d6
  1084.  sub.w d3,d6
  1085.  beq.s nostripqG
  1086.  ext.l d6
  1087.  
  1088.  divs.l d6,d7    ; speed through gouraud table.
  1089.  
  1090.  move.w d4,d6
  1091.  cmp.w topclip(pc),d6
  1092.  blt.s nostripqG
  1093.  cmp.w botclip(pc),d3
  1094.  bgt.s nostripqG
  1095.  
  1096.  cmp.w botclip(pc),d6
  1097.  ble.s noclipbotG
  1098.  move.w botclip(pc),d6
  1099. noclipbotG:
  1100.  
  1101.  move.w d3,d5
  1102.  cmp.w topclip(pc),d5
  1103.  bge.s nocliptopG
  1104.  
  1105.  sub.w topclip(pc),d5
  1106.  neg.w d5
  1107.  ext.l d5
  1108.  move.l d7,d0
  1109.  muls.l d5,d0
  1110.  add.l d0,STARTGOUR
  1111.  
  1112.  move.w topclip(pc),d5
  1113.  
  1114.  
  1115. ; bra gotoendG
  1116. nocliptopG:
  1117.  
  1118.  bra gotoendG
  1119.  
  1120.  CNOP 0,128 
  1121. drawwallPACK0G:
  1122.  swap d4
  1123.  and.w d7,d4
  1124.  move.l d3,d2
  1125.  swap d2
  1126.  move.b 1(a5,d4.w*2),d1
  1127.  and.w #%1111111111100000,d2
  1128.  swap d4
  1129.  and.b #31,d1
  1130.  add.w d1,d2
  1131.  move.b (a4,d2.w*2),(a3)
  1132.  adda.w d0,a3
  1133.  add.l d5,d3
  1134.  add.l a2,d4
  1135.  dbra d6,drawwallPACK0G
  1136.  
  1137. nostripG:
  1138.  rts
  1139.  
  1140.  
  1141.  CNOP 0,4 
  1142. drawwallPACK1G:
  1143.  swap d4
  1144.  and.w d7,d4
  1145.  move.l d3,d2
  1146.  swap d2
  1147.  move.w (a5,d4.w*2),d1
  1148.  and.w #%1111111111100000,d2
  1149.  swap d4
  1150.  lsr.w #5,d1
  1151.  and.w #31,d1
  1152.  add.b d1,d2
  1153.  move.b (a4,d2.w*2),(a3)
  1154.  adda.w d0,a3
  1155.  add.l d5,d3
  1156.  add.l a2,d4
  1157.  dbra d6,drawwallPACK1G
  1158.  
  1159.  rts
  1160.  
  1161.  
  1162.  CNOP 0,4 
  1163. drawwallPACK2G:
  1164.  swap d4
  1165.  and.w d7,d4
  1166.  move.l d3,d2
  1167.  swap d2
  1168.  move.b (a5,d4.w*2),d1
  1169.  and.w #%1111111111100000,d2
  1170.  swap d4
  1171.  lsr.b #2,d1
  1172.  and.w #31,d1
  1173.  add.b d1,d2
  1174.  move.b (a4,d2.w*2),(a3)
  1175.  adda.w d0,a3
  1176.  add.l d5,d3
  1177.  add.l a2,d4
  1178.  dbra d6,drawwallPACK2G
  1179.  rts
  1180.  
  1181.  
  1182. usesimpleG:
  1183.  mulu d3,d4
  1184.  
  1185.  add.l d0,d4
  1186.  swap d4
  1187.  add.w totalyoff(pc),d4
  1188.  
  1189. cliptopusesimpleG
  1190.  move.w VALAND,d7
  1191.  move.w #320,d0
  1192.  moveq #0,d1
  1193.  
  1194.  swap d2
  1195.  
  1196.  ifne CHEESEY
  1197.  asr.l #1,d2
  1198.  endc
  1199.  move.l d2,a2
  1200.  swap d4
  1201.  ifne CHEESEY
  1202.  asr.l #1,d4
  1203.  endc
  1204.  
  1205.  move.l GOURSPEED,d5
  1206.  asl.l #5,d5
  1207.  move.l STARTGOUR,d3
  1208.  asl.l #5,d3
  1209.  
  1210.  cmp.b #1,StripData+1
  1211.  dbge d6,simplewalliPACK0G
  1212.  dbne d6,simplewalliPACK1G
  1213.  dble d6,simplewalliPACK2G
  1214.  rts
  1215.  
  1216.  CNOP 0,4
  1217. simplewalliPACK0G:
  1218.  swap d4
  1219.  and.w d7,d4
  1220.  move.l d3,d2
  1221.  swap d2
  1222.  move.b 1(a5,d4.w*2),d1
  1223.  and.w #%1111111111100000,d2
  1224.  swap d4
  1225.  and.b #31,d1
  1226.  add.b d1,d2
  1227.  move.b (a2,d2.w*2),d3
  1228. simplewallPACK0G:
  1229.  move.b d3,(a3)
  1230.  adda.w d0,a3
  1231.  add.l a2,d4
  1232.  bcc.s .noread
  1233.  addq #1,d4
  1234.  and.w d7,d4
  1235.  move.b 1(a5,d4.w*2),d1
  1236.  and.b #31,d1
  1237.  move.b (a2,d1.w*2),d3
  1238. .noread:
  1239.  dbra d6,simplewallPACK0G
  1240.  rts
  1241.  
  1242.  CNOP 0,4
  1243. simplewalliPACK1G:
  1244.  swap d4
  1245.  and.w d7,d4
  1246.  move.l d3,d2
  1247.  swap d2
  1248.  move.w (a5,d4.w*2),d1
  1249.  lsr.w #5,d1
  1250.  and.w #31,d1
  1251.  move.b (a2,d1.w*2),d3
  1252. simplewallPACK1G:
  1253.  move.b d3,(a3)
  1254.  adda.w d0,a3
  1255.  add.l d5,d4
  1256.  bcc.s .noread
  1257.  addq #1,d4
  1258.  and.w d7,d4
  1259.  move.w (a5,d4.w*2),d1
  1260.  lsr.w #5,d1
  1261.  and.w #31,d1
  1262.  move.b (a2,d1.w*2),d3
  1263. .noread:
  1264.  dbra d6,simplewallPACK1G
  1265.  rts
  1266.  
  1267.  CNOP 0,4
  1268. simplewalliPACK2G:
  1269.  move.b (a5,d4.w*2),d1
  1270.  lsr.b #2,d1
  1271.  and.b #31,d1
  1272.  move.b (a2,d1.w*2),d3
  1273. simplewallPACK2G:
  1274.  move.b d3,(a3)
  1275.  adda.w d0,a3
  1276.  add.l d5,d4
  1277.  bcc.s .noread
  1278.  addq #1,d4
  1279.  and.w d7,d4
  1280.  move.b (a5,d4.w*2),d1
  1281.  lsr.b #2,d1
  1282.  move.b (a2,d1.w*2),d3
  1283. .noread:
  1284.  dbra d6,simplewallPACK2G
  1285.  rts
  1286.  
  1287. ;gotoendnomult:
  1288. ; movem.l d0/d1/d2/d3/d4/d7,-(a7)
  1289. ; add.l timeslarge(pc,d5.w*4),a3 
  1290. ; move.w d5,d4
  1291. ; move.l 4(a1,d2.w*8),d0
  1292. ; move.l (a1,d2.w*8),d2
  1293. ; moveq #0,d3
  1294. ; move.w d2,d3
  1295. ; swap d2
  1296. ; tst.w d2
  1297. ; move.w wallyoff(pc),d4
  1298. ; add.w #44,d4
  1299. ; bne.s .notsimple
  1300. ; cmp.l #$b000,d3
  1301. ; ble cliptopusesimple
  1302. ;.notsimple:
  1303. ; bra cliptop
  1304.  
  1305. GOURSPEED: dc.l 0
  1306.  
  1307. gotoendG:
  1308.  tst.b DOUBLEHEIGHT
  1309.  bne doubwallGOUR
  1310.  
  1311.  sub.w d5,d6    ; height to draw.
  1312.  ble nostripqG
  1313.  
  1314.  move.l d7,GOURSPEED
  1315.  
  1316.  add.l timeslargeG(pc,d5.w*4),a3 
  1317.  
  1318.  add.w d2,d2
  1319.  
  1320.  move.l 4(a1,d2.w*8),d0
  1321.  add.w TOPOFFSET(pc),d5
  1322.  move.w d5,d4
  1323.  
  1324.  move.l (a1,d2.w*4),d2
  1325.  moveq #0,d3
  1326. ; move.w d2,d3
  1327. ; swap d2
  1328. ; tst.w d2
  1329. ; bne.s .notsimple
  1330. ; cmp.l #$b000,d3
  1331. ; ble usesimple
  1332. ;.notsimple:
  1333.  
  1334.  ext.l d5
  1335.  move.l d2,d4
  1336.  muls.l d5,d4
  1337.  
  1338. ; mulu d3,d4
  1339. ; muls d2,d5
  1340.  add.l d0,d4
  1341.  ifne CHEESEY
  1342.  asr.l #1,d4
  1343.  endc
  1344.  swap d4
  1345. ; add.w d5,d4
  1346.  add.w totalyoff(pc),d4
  1347. cliptopG
  1348.  move.w VALAND,d7
  1349.  and.w d7,d4
  1350.  move.w #320,d0
  1351.  moveq #0,d1
  1352.  
  1353.  ifne CHEESEY
  1354.  asr.l #1,d2
  1355.  endc
  1356.  move.l d2,a2
  1357.  swap d4
  1358.  
  1359.  move.l GOURSPEED,d5
  1360.  asl.l #5,d5
  1361.  move.l STARTGOUR,d3
  1362.  asl.l #5,d3
  1363.  
  1364.  cmp.b #1,StripData+1
  1365.  dbge d6,drawwallPACK0G
  1366.  dbne d6,drawwallPACK1G
  1367.  dble d6,drawwallPACK2G
  1368.  rts
  1369.  
  1370. timeslargeG:
  1371. val SET 0
  1372.  REPT 256
  1373.  dc.l val
  1374. val SET val+320
  1375.  ENDR
  1376.  
  1377. doubwallGOUR:
  1378.  
  1379.  moveq #0,d0
  1380.  asr.w #1,d5
  1381.  addx.w d0,d5
  1382.  add.w d5,d5
  1383.  
  1384.  sub.w d5,d6    ; height to draw.
  1385.  asr.w #1,d6
  1386.  ble nostripqG
  1387.  
  1388.  move.l d7,GOURSPEED
  1389.  
  1390.  add.l timeslargeGDOUB(pc,d5.w*4),a3 
  1391.  
  1392.  add.w d2,d2
  1393.  
  1394.  move.l 4(a1,d2.w*8),d0
  1395.  add.w TOPOFFSET(pc),d5
  1396.  move.w d5,d4
  1397.  
  1398.  move.l (a1,d2.w*4),d2
  1399.  moveq #0,d3
  1400. ; move.w d2,d3
  1401. ; swap d2
  1402. ; tst.w d2
  1403. ; bne.s .notsimple
  1404. ; cmp.l #$b000,d3
  1405. ; ble usesimple
  1406. ;.notsimple:
  1407.  
  1408.  ext.l d5
  1409.  move.l d2,d4
  1410.  muls.l d5,d4
  1411.  
  1412. ; mulu d3,d4
  1413. ; muls d2,d5
  1414.  add.l d0,d4
  1415.  ifne CHEESEY
  1416.  asr.l #1,d4
  1417.  endc
  1418.  swap d4
  1419. ; add.w d5,d4
  1420.  add.w totalyoff(pc),d4
  1421.  move.w VALAND,d7
  1422.  and.w d7,d4
  1423.  move.w #640,d0
  1424.  moveq #0,d1
  1425.  
  1426.  ifeq CHEESEY
  1427.  add.l d2,d2
  1428.  endc
  1429.  move.l d2,a2
  1430.  swap d4
  1431.  
  1432.  move.l GOURSPEED,d5
  1433.  asl.l #6,d5
  1434.  move.l STARTGOUR,d3
  1435.  asl.l #5,d3
  1436.  
  1437.  cmp.b #1,StripData+1
  1438.  dbge d6,drawwallPACK0G
  1439.  dbne d6,drawwallPACK1G
  1440.  dble d6,drawwallPACK2G
  1441.  rts
  1442.  
  1443. timeslargeGDOUB:
  1444. val SET 0
  1445.  REPT 256
  1446.  dc.l val
  1447. val SET val+320
  1448.  ENDR
  1449.  
  1450.  
  1451.  
  1452. ScreenWallstripdrawGOURB:
  1453.  
  1454.  swap d6
  1455.  clr.w d6
  1456.  move.l d6,STARTGOUR
  1457.  
  1458.  swap d7
  1459.  clr.w d7
  1460.  
  1461.  move.w d4,d6
  1462.  sub.w d3,d6
  1463.  beq nostripqG
  1464.  ext.l d6
  1465.  
  1466.  divs.l d6,d7    ; speed through gouraud table.
  1467.  
  1468.  move.w d4,d6
  1469.  cmp.w topclip(pc),d6
  1470.  blt nostripqG
  1471.  cmp.w botclip(pc),d3
  1472.  bgt nostripqG
  1473.  
  1474.  cmp.w botclip(pc),d6
  1475.  ble.s noclipbotGb
  1476.  move.w botclip(pc),d6
  1477. noclipbotGb:
  1478.  
  1479.  move.w d3,d5
  1480.  cmp.w topclip(pc),d5
  1481.  bge.s nocliptopGB
  1482.  
  1483.  sub.w topclip(pc),d5
  1484.  neg.w d5
  1485.  ext.l d5
  1486.  move.l d7,d0
  1487.  muls.l d5,d0
  1488.  add.l d0,STARTGOUR
  1489.  
  1490.  move.w topclip(pc),d5
  1491.  
  1492. nocliptopGB:
  1493.  
  1494.  
  1495.  
  1496. gotoendGB:
  1497.  
  1498.  tst.b DOUBLEHEIGHT
  1499.  bne doubwallGOURBIG
  1500.  
  1501.  sub.w d5,d6    ; height to draw.
  1502.  ble nostripqG
  1503.  move.l d7,GOURSPEED
  1504.  
  1505.  add.l timeslargeGB(pc,d5.w*4),a3 
  1506.  
  1507.  move.w d2,d4
  1508.  add.w d2,d2
  1509.  add.w d2,d4
  1510.  
  1511.  move.l 4(a1,d4.w*8),d0
  1512.  add.w TOPOFFSET(pc),d5
  1513.  move.w d5,d4
  1514.  
  1515.  move.l (a1,d2.w*4),d2
  1516.  moveq #0,d3
  1517. ; move.w d2,d3
  1518. ; swap d2
  1519. ; tst.w d2
  1520. ; bne.s .notsimple
  1521. ; cmp.l #$b000,d3
  1522. ; ble usesimple
  1523. ;.notsimple:
  1524.  
  1525.  ext.l d5
  1526.  move.l d2,d4
  1527.  muls.l d5,d4
  1528.  
  1529. ; mulu d3,d4
  1530. ; muls d2,d5
  1531.  add.l d0,d4
  1532.  ifne CHEESEY
  1533.  asr.l #1,d4
  1534.  endc
  1535.  swap d4
  1536. ; add.w d5,d4
  1537.  add.w totalyoff(pc),d4
  1538.  move.w VALAND,d7
  1539.  and.w d7,d4
  1540.  move.w #320,d0
  1541.  moveq #0,d1
  1542.  
  1543.  ifne CHEESEY
  1544.  asr.l #1,d2
  1545.  endc
  1546.  
  1547.  move.l d2,a2
  1548.  swap d4
  1549.  
  1550.  
  1551.  move.l GOURSPEED,d5
  1552.  asl.l #5,d5
  1553.  move.l STARTGOUR,d3
  1554.  asl.l #5,d3
  1555.  
  1556.  cmp.b #1,StripData+1
  1557.  dbge d6,drawwallPACK0G
  1558.  dbne d6,drawwallPACK1G
  1559.  dble d6,drawwallPACK2G
  1560.  rts
  1561.  
  1562. timeslargeGB:
  1563. val SET 0
  1564.  REPT 256
  1565.  dc.l val
  1566. val SET val+320
  1567.  ENDR
  1568.  
  1569.  
  1570. doubwallGOURBIG:
  1571.  
  1572.  moveq #0,d0
  1573.  asr.w #1,d5
  1574.  addx.w d0,d5
  1575.  add.w d5,d5
  1576.  
  1577.  sub.w d5,d6    ; height to draw.
  1578.  asr.w #1,d6
  1579.  ble nostripqG
  1580.  move.l d7,GOURSPEED
  1581.  
  1582.  add.l timeslargeGBDOUB(pc,d5.w*4),a3 
  1583.  
  1584.  move.w d2,d4
  1585.  add.w d2,d2
  1586.  add.w d2,d4
  1587.  
  1588.  move.l 4(a1,d4.w*8),d0
  1589.  add.w TOPOFFSET(pc),d5
  1590.  move.w d5,d4
  1591.  
  1592.  move.l (a1,d2.w*4),d2
  1593.  moveq #0,d3
  1594. ; move.w d2,d3
  1595. ; swap d2
  1596. ; tst.w d2
  1597. ; bne.s .notsimple
  1598. ; cmp.l #$b000,d3
  1599. ; ble usesimple
  1600. ;.notsimple:
  1601.  
  1602.  ext.l d5
  1603.  move.l d2,d4
  1604.  muls.l d5,d4
  1605.  
  1606. ; mulu d3,d4
  1607. ; muls d2,d5
  1608.  add.l d0,d4
  1609.  ifne CHEESEY
  1610.  asr.l #1,d4
  1611.  endc
  1612.  swap d4
  1613. ; add.w d5,d4
  1614.  add.w totalyoff(pc),d4
  1615.  move.w VALAND,d7
  1616.  
  1617.  and.w d7,d4
  1618.  move.w #640,d0
  1619.  moveq #0,d1
  1620.  
  1621.  ifeq CHEESEY
  1622.  add.l d2,d2
  1623.  endc
  1624.  move.l d2,a2
  1625.  swap d4
  1626.  
  1627.  
  1628.  move.l GOURSPEED,d5
  1629.  asl.l #6,d5
  1630.  move.l STARTGOUR,d3
  1631.  asl.l #5,d3
  1632.  
  1633.  cmp.b #1,StripData+1
  1634.  dbge d6,drawwallPACK0G
  1635.  dbne d6,drawwallPACK1G
  1636.  dble d6,drawwallPACK2G
  1637.  rts
  1638.  
  1639. timeslargeGBDOUB:
  1640. val SET 0
  1641.  REPT 256
  1642.  dc.l val
  1643. val SET val+320
  1644.  ENDR
  1645.