home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / basq / source / poweru / vector.asm < prev    next >
Encoding:
Assembly Source File  |  1993-08-23  |  15.5 KB  |  621 lines

  1. PUBLIC        ROTATEPOINTS
  2. PUBLIC        SETROTATEANGLE
  3. PUBLIC        ADDROTATEANGLE
  4. PUBLIC        ROTATEOBJECT
  5. PUBLIC        PUTPOLY320
  6. PUBLIC        PUTOBJ320CONV
  7. PUBLIC        V1_X
  8. PUBLIC        V1_Y
  9. PUBLIC        V2_X
  10. PUBLIC        V2_Y
  11. PUBLIC        V3_X
  12. PUBLIC        V3_Y
  13. PUBLIC        POLYCOLORW
  14. PUBLIC        EYEDISTANCE
  15. PUBLIC        ORIGO_X
  16. PUBLIC        ORIGO_Y
  17. PUBLIC        ORIGO_Z
  18.  
  19. .386
  20. .MODEL USE16 SMALL
  21. .DATA
  22.  
  23. PRESENTANGLE_X    DW    0
  24. PRESENTANGLE_Y    DW    0
  25. PRESENTANGLE_Z    DW    0
  26. SINALFA        DW    0
  27. SINBETA        DW    0
  28. SINGAMMA    DW    0
  29. COSALFA        DW    0
  30. COSBETA        DW    0
  31. COSGAMMA    DW    0
  32. SINTABLE    DW    0,142,285,428,571,714,857,1000,1142,1285,1427,1570
  33.         DW    1712,1854,1996,2138,2280,2421,2563,2704,2845,2985,3126
  34.         DW    3266,3406,3546,3685,3824,3963,4102,4240,4378,4516,4653
  35.         DW    4790,4926,5062,5198,5334,5469,5603,5737,5871,6004,6137
  36.         DW    6269,6401,6533,6663,6794,6924,7053,7182,7310,7438,7565
  37.         DW    7691,7817,7943,8067,8191,8315,8438,8560,8682,8803,8923
  38.         DW    9042,9161,9279,9397,9514,9630,9745,9860,9973,10086
  39.         DW    10199,10310,10421,10531,10640,10748,10856,10963,11068
  40.         DW    11173,11278,11381,11483,11585,11685,11785,11884,11982
  41.         DW    12079,12175,12270,12365,12458,12550,12642,12732,12822
  42.         DW    12910,12998,13084,13170,13254,13338,13420,13502,13582
  43.         DW    13662,13740,13818,13894,13969,14043,14116,14188,14259
  44.         DW    14329,14398,14466,14532,14598,14662,14725,14787,14848
  45.         DW    14908,14967,15025,15081,15136,15190,15243,15295,15346
  46.         DW    15395,15444,15491,15537,15582,15625,15668,15709,15749
  47.         DW    15788,15825,15862,15897,15931,15964,15995,16025,16055
  48.         DW    16082,16109,16135,16159,16182,16204,16224,16243,16261
  49.         DW    16278,16294,16308,16321,16333,16344,16353,16361,16368
  50.         DW    16374,16378,16381,16383
  51. COSTABLE    DW    16384,16383,16381,16378,16374,16368,16361,16353,16344
  52.         DW    16333,16321,16308,16294,16278,16261,16243,16224,16204
  53.         DW    16182,16159,16135,16109,16082,16055,16025,15995,15964
  54.         DW    15931,15897,15862,15825,15788,15749,15709,15668,15625
  55.         DW    15582,15537,15491,15444,15395,15346,15295,15243,15190
  56.         DW    15136,15081,15025,14967,14908,14848,14787,14725,14662
  57.         DW    14598,14532,14466,14398,14329,14259,14188,14116,14043
  58.         DW    13969,13894,13818,13740,13662,13582,13502,13420,13338
  59.         DW    13254,13170,13084,12998,12910,12822,12732,12642,12550
  60.         DW    12458,12365,12270,12175,12079,11982,11884,11785,11685
  61.         DW    11585,11483,11381,11278,11173,11068,10963,10856,10748
  62.         DW    10640,10531,10421,10310,10199,10086,9973,9860,9745
  63.         DW    9630,9514,9397,9279,9161,9042,8923,8803,8682,8560,8438
  64.         DW    8315,8192,8067,7943,7817,7691,7565,7438,7310,7182,7053
  65.         DW    6924,6794,6663,6533,6401,6269,6137,6004,5871,5737,5603
  66.         DW    5469,5334,5198,5062,4926,4790,4653,4516,4378,4240,4102
  67.         DW    3963,3824,3685,3546,3406,3266,3126,2985,2845,2704,2563
  68.         DW    2421,2280,2138,1996,1854,1712,1570,1427,1285,1142,1000
  69.         DW    857,714,571,428,285,142,0,-142,-285,-428,-571,-714,-857
  70.         DW    -1000,-1142,-1285,-1427,-1570,-1712,-1854,-1996,-2138
  71.         DW    -2280,-2421,-2563,-2704,-2845,-2985,-3126,-3266,-3406
  72.         DW    -3546,-3685,-3824,-3963,-4102,-4240,-4378,-4516,-4653
  73.         DW    -4790,-4926,-5062,-5198,-5334,-5469,-5603,-5737,-5871
  74.         DW    -6004,-6137,-6269,-6401,-6533,-6663,-6794,-6924,-7053
  75.         DW    -7182,-7310,-7438,-7565,-7691,-7817,-7943,-8067,-8191
  76.         DW    -8315,-8438,-8560,-8682,-8803,-8923,-9042,-9161,-9279
  77.         DW    -9397,-9514,-9630,-9745,-9860,-9973,-10086,-10199
  78.         DW    -10310,-10421,-10531,-10640,-10748,-10856,-10963
  79.         DW    -11068,-11173,-11278,-11381,-11483,-11585,-11685
  80.         DW    -11785,-11884,-11982,-12079,-12175,-12270,-12365
  81.         DW    -12458,-12550,-12642,-12732,-12822,-12910,-12998
  82.         DW    -13084,-13170,-13254,-13338,-13420,-13502,-13582
  83.         DW    -13662,-13740,-13818,-13894,-13969,-14043,-14116
  84.         DW    -14188,-14259,-14329,-14398,-14466,-14532,-14598
  85.         DW    -14662,-14725,-14787,-14848,-14908,-14967,-15025
  86.         DW    -15081,-15136,-15190,-15243,-15295,-15346,-15395
  87.         DW    -15444,-15491,-15537,-15582,-15625,-15668,-15709
  88.         DW    -15749,-15788,-15825,-15862,-15897,-15931,-15964
  89.         DW    -15995,-16025,-16055,-16082,-16109,-16135,-16159
  90.         DW    -16182,-16204,-16224,-16243,-16261,-16278,-16294
  91.         DW    -16308,-16321,-16333,-16344,-16353,-16361,-16368
  92.         DW    -16374,-16378,-16381,-16383,-16384,-16383,-16381
  93.         DW    -16378,-16374,-16368,-16361,-16353,-16344,-16333
  94.         DW    -16321,-16308,-16294,-16278,-16261,-16243,-16224
  95.         DW    -16204,-16182,-16159,-16135,-16109,-16082,-16055
  96.         DW    -16025,-15995,-15964,-15931,-15897,-15862,-15825
  97.         DW    -15788,-15749,-15709,-15668,-15625,-15582,-15537
  98.         DW    -15491,-15444,-15395,-15346,-15295,-15243,-15190
  99.         DW    -15136,-15081,-15025,-14967,-14908,-14848,-14787
  100.         DW    -14725,-14662,-14598,-14532,-14466,-14398,-14329
  101.         DW    -14259,-14188,-14116,-14043,-13969,-13894,-13818
  102.         DW    -13740,-13662,-13582,-13502,-13420,-13338,-13254
  103.         DW    -13170,-13084,-12998,-12910,-12822,-12732,-12642
  104.         DW    -12550,-12458,-12365,-12270,-12175,-12079,-11982
  105.         DW    -11884,-11785,-11685,-11585,-11483,-11381,-11278
  106.         DW    -11173,-11068,-10963,-10856,-10748,-10640,-10531
  107.         DW    -10421,-10310,-10199,-10086,-9973,-9860,-9745,-9630
  108.         DW    -9514,-9397,-9279,-9161,-9042,-8923,-8803,-8682,-8560
  109.         DW    -8438,-8315,-8192,-8067,-7943,-7817,-7691,-7565,-7438
  110.         DW    -7310,-7182,-7053,-6924,-6794,-6663,-6533,-6401,-6269
  111.         DW    -6137,-6004,-5871,-5737,-5603,-5469,-5334,-5198,-5062
  112.         DW    -4926,-4790,-4653,-4516,-4378,-4240,-4102,-3963,-3824
  113.         DW    -3685,-3546,-3406,-3266,-3126,-2985,-2845,-2704,-2563
  114.         DW    -2421,-2280,-2138,-1996,-1854,-1712,-1570,-1427,-1285
  115.         DW    -1142,-1000,-857,-714,-571,-428,-285,-142,0,142,285
  116.         DW    428,571,714,857,1000,1142,1285,1427,1570,1712,1854
  117.         DW    1996,2138,2280,2421,2563,2704,2845,2985,3126,3266,3406
  118.         DW    3546,3685,3824,3963,4102,4240,4378,4516,4653,4790,4926
  119.         DW    5062,5198,5334,5469,5603,5737,5871,6004,6137,6269,6401
  120.         DW    6533,6663,6794,6924,7053,7182,7310,7438,7565,7691,7817
  121.         DW    7943,8067,8192,8315,8438,8560,8682,8803,8923,9042,9161
  122.         DW    9279,9397,9514,9630,9745,9860,9973,10086,10199,10310
  123.         DW    10421,10531,10640,10748,10856,10963,11068,11173,11278
  124.         DW    11381,11483,11585,11685,11785,11884,11982,12079,12175
  125.         DW    12270,12365,12458,12550,12642,12732,12822,12910,12998
  126.         DW    13084,13170,13254,13338,13420,13502,13582,13662,13740
  127.         DW    13818,13894,13969,14043,14116,14188,14259,14329,14398
  128.         DW    14466,14532,14598,14662,14725,14787,14848,14908,14967
  129.         DW    15025,15081,15136,15190,15243,15295,15346,15395,15444
  130.         DW    15491,15537,15582,15625,15668,15709,15749,15788,15825
  131.         DW    15862,15897,15931,15964,15995,16025,16055,16082,16109
  132.         DW    16135,16159,16182,16204,16224,16243,16261,16278,16294
  133.         DW    16308,16321,16333,16344,16353,16361,16368,16374,16378
  134.         DW    16381,16383
  135. V1_Y        DW    0
  136. V1_X        DW    0
  137. V2_Y        DW    0
  138. V2_X        DW    0
  139. V3_Y        DW    0
  140. V3_X        DW    0
  141. EYEDISTANCE    DW    0
  142. ORIGO_X        DW    0
  143. ORIGO_Y        DW    0
  144. ORIGO_Z        DW    0
  145.  
  146. .CODE
  147.  
  148. SETROTATEANGLE:    PUSHA
  149.         MOV    SI,720
  150.         CMP    AX,SI
  151.         JB    SHORT NOOFSRAAX
  152.         CWD
  153.         IDIV    SI
  154.         TEST    DH,10000000B
  155.         JZ    SHORT NOOFSRAAX
  156.         ADD    DX,720
  157.         MOV    AX,DX
  158. NOOFSRAAX:    MOV    PRESENTANGLE_X,AX
  159.         MOV    AX,BX
  160.         CMP    AX,SI
  161.         JB    SHORT NOOFSRABX
  162.         CWD
  163.         IDIV    SI
  164.         TEST    DH,10000000B
  165.         JZ    SHORT NOOFSRABX
  166.         ADD    DX,720
  167.         MOV    AX,DX
  168. NOOFSRABX:    MOV    PRESENTANGLE_Y,AX
  169.         MOV    AX,CX
  170.         CMP    AX,SI
  171.         JB    SHORT NOOFSRACX
  172.         CWD
  173.         IDIV    SI
  174.         TEST    DH,10000000B
  175.         JZ    SHORT NOOFSRACX
  176.         ADD    DX,720
  177.         MOV    AX,DX
  178. NOOFSRACX:    MOV    PRESENTANGLE_Z,AX
  179.         POPA
  180.         RET
  181.  
  182. ADDROTATEANGLE:    PUSHA
  183.         ADD    AX,PRESENTANGLE_X
  184.         ADD    BX,PRESENTANGLE_Y
  185.         ADD    CX,PRESENTANGLE_Z
  186.         MOV    SI,720
  187.         CMP    AX,SI
  188.         JB    SHORT NOOFSRAAX2
  189.         CWD
  190.         IDIV    SI
  191.         TEST    DH,10000000B
  192.         JZ    SHORT NOOFSRAAX2
  193.         ADD    DX,720
  194.         MOV    AX,DX
  195. NOOFSRAAX2:    MOV    PRESENTANGLE_X,AX
  196.         MOV    AX,BX
  197.         CMP    AX,SI
  198.         JB    SHORT NOOFSRABX2
  199.         CWD
  200.         IDIV    SI
  201.         TEST    DH,10000000B
  202.         JZ    SHORT NOOFSRABX2
  203.         ADD    DX,720
  204.         MOV    AX,DX
  205. NOOFSRABX2:    MOV    PRESENTANGLE_Y,AX
  206.         MOV    AX,CX
  207.         CMP    AX,SI
  208.         JB    SHORT NOOFSRACX2
  209.         CWD
  210.         IDIV    SI
  211.         TEST    DH,10000000B
  212.         JZ    SHORT NOOFSRACX2
  213.         ADD    DX,720
  214.         MOV    AX,DX
  215. NOOFSRACX2:    MOV    PRESENTANGLE_Z,AX
  216.         POPA
  217.         RET
  218.  
  219. ROTATEPOINTS:    PUSHA
  220.         PUSH    DS
  221.         PUSH    FS
  222.         PUSH    GS
  223.         PUSH    SEG SINTABLE
  224.         POP    DS
  225.         PUSH    SI
  226.         PUSH    DI
  227.         MOV    FS,AX
  228.         MOV    GS,BX
  229.         MOV    BX,PRESENTANGLE_X
  230.         ADD    BX,BX
  231.         MOV    AX,SINTABLE[BX]
  232.         MOV    SINALFA,AX
  233.         MOV    AX,COSTABLE[BX]
  234.         MOV    COSALFA,AX
  235.         MOV    BX,PRESENTANGLE_Y
  236.         ADD    BX,BX
  237.         MOV    AX,SINTABLE[BX]
  238.         MOV    SINBETA,AX
  239.         MOV    AX,COSTABLE[BX]
  240.         MOV    COSBETA,AX
  241.         MOV    BX,PRESENTANGLE_Z
  242.         ADD    BX,BX
  243.         MOV    AX,SINTABLE[BX]
  244.         MOV    SINGAMMA,AX
  245.         MOV    AX,COSTABLE[BX]
  246.         MOV    COSGAMMA,AX
  247.         MOV    AX,COSBETA
  248.         MOV    BX,CX
  249.         MOV    CL,14
  250.         IMUL    COSGAMMA
  251.         SHRD    AX,DX,CL
  252.         MOV    WORD PTR CS:ROTATEPOINTS_C+1,AX
  253.         MOV    AX,COSBETA
  254.         IMUL    SINGAMMA
  255.         SHRD    AX,DX,CL
  256.         MOV    WORD PTR CS:CALC2+1,AX
  257.         MOV    AX,SINBETA
  258.         MOV    WORD PTR CS:CALC3+1,AX
  259.         MOV    AX,COSALFA
  260.         IMUL    SINGAMMA
  261.         SHRD    AX,DX,CL
  262.         MOV    DI,AX
  263.         MOV    AX,SINALFA
  264.         IMUL    SINBETA
  265.         SHRD    AX,DX,CL
  266.         IMUL    COSGAMMA
  267.         SHRD    AX,DX,CL
  268.         ADD    AX,DI
  269.         MOV    WORD PTR CS:CALC4+1,AX
  270.         MOV    AX,COSALFA
  271.         IMUL    COSGAMMA
  272.         SHRD    AX,DX,CL
  273.         MOV    DI,AX
  274.         MOV    AX,SINALFA
  275.         IMUL    SINBETA
  276.         SHRD    AX,DX,CL
  277.         IMUL    SINGAMMA
  278.         SHRD    AX,DX,CL
  279.         SUB    DI,AX
  280.         MOV    WORD PTR CS:CALC5+1,DI
  281.         MOV    AX,SINALFA
  282.         IMUL    COSBETA
  283.         SHRD    AX,DX,CL
  284.         MOV    WORD PTR CS:CALC6+1,AX
  285.         MOV    AX,SINALFA
  286.         IMUL    SINGAMMA
  287.         SHRD    AX,DX,CL
  288.         MOV    DI,AX
  289.         MOV    AX,COSALFA
  290.         IMUL    SINBETA
  291.         SHRD    AX,DX,CL
  292.         IMUL    COSGAMMA
  293.         SHRD    AX,DX,CL
  294.         SUB    DI,AX
  295.         MOV    WORD PTR CS:CALC7+1,DI
  296.         MOV    AX,SINALFA
  297.         IMUL    COSGAMMA
  298.         SHRD    AX,DX,CL
  299.         MOV    DI,AX
  300.         MOV    AX,COSALFA
  301.         IMUL    SINBETA
  302.         SHRD    AX,DX,CL
  303.         IMUL    SINGAMMA
  304.         SHRD    AX,DX,CL
  305.         ADD    AX,DI
  306.         MOV    WORD PTR CS:CALC8+1,AX
  307.         MOV    AX,COSALFA
  308.         IMUL    COSBETA
  309.         SHRD    AX,DX,CL
  310.         MOV    WORD PTR CS:CALC9+1,AX
  311.         POP    DI
  312.         POP    SI
  313. ROTATEPOINTS_C:    MOV    AX,0FFFFH        ;Self writing code. CALC1
  314.         IMUL    WORD PTR FS:[SI]
  315.         SHRD    AX,DX,CL
  316.         MOV    BP,AX
  317. CALC2:        MOV    AX,0FFFFH        ;-==- CALC2
  318.         IMUL    WORD PTR FS:[SI+2]
  319.         SHRD    AX,DX,CL
  320.         SUB    BP,AX
  321. CALC3:        MOV    AX,0FFFFH        ;-==- CALC3
  322.         IMUL    WORD PTR FS:[SI+4]
  323.         SHRD    AX,DX,CL
  324.         ADD    BP,AX
  325.         MOV    GS:[DI],BP
  326. CALC4:        MOV    AX,0FFFFH        ;-==- CALC4
  327.         IMUL    WORD PTR FS:[SI]
  328.         SHRD    AX,DX,CL
  329.         MOV    BP,AX
  330. CALC5:        MOV    AX,0FFFFH        ;-==- CALC5
  331.         IMUL    WORD PTR FS:[SI+2]
  332.         SHRD    AX,DX,CL
  333.         ADD    BP,AX
  334. CALC6:        MOV    AX,0FFFFH        ;-==- CALC6
  335.         IMUL    WORD PTR FS:[SI+4]
  336.         SHRD    AX,DX,CL
  337.         SUB    BP,AX
  338.         MOV    GS:[DI+2],BP
  339. CALC7:        MOV    AX,0FFFFH        ;-==- CALC7
  340.         IMUL    WORD PTR FS:[SI]
  341.         SHRD    AX,DX,CL
  342.         MOV    BP,AX
  343. CALC8:        MOV    AX,0FFFFH        ;-==- CALC8
  344.         IMUL    WORD PTR FS:[SI+2]
  345.         SHRD    AX,DX,CL
  346.         ADD    BP,AX
  347. CALC9:        MOV    AX,0FFFFH        ;-==- CALC9
  348.         IMUL    WORD PTR FS:[SI+4]
  349.         SHRD    AX,DX,CL
  350.         ADD    BP,AX
  351.         MOV    GS:[DI+4],BP
  352.         ADD    SI,6
  353.         ;JNC    SHORT NOADDFSROTCIK
  354.         ;MOV    AX,FS
  355.         ;ADD    AX,1000H
  356.         ;MOV    FS,AX
  357. NOADDFSROTCIK:    ADD    DI,6
  358.         ;JNC    SHORT NOADDGSROTCIK
  359.         ;MOV    AX,GS
  360.         ;ADD    AX,1000H
  361.         ;MOV    GS,AX
  362. NOADDGSROTCIK:    DEC    BX
  363.         JNZ    SHORT ROTATEPOINTS_C
  364.         POP    GS
  365.         POP    FS
  366.         POP    DS
  367.         POPA
  368.                 RET
  369.  
  370. MAKELINE320    MACRO
  371.         MOV    WORD PTR CS:ENDML320+1,CX
  372.         MOV    WORD PTR CS:ENDML3202+1,DI
  373.         CMP    CX,DI
  374.         JGE    SHORT NOXCHGCAML320
  375.         XCHG    CX,DI
  376. NOXCHGCAML320:    CMP    CX,319
  377.         JBE    SHORT CXNG320
  378.         JNG    SHORT ENDML320
  379.         MOV    CX,319
  380. CXNG320:    CMP    DI,319
  381.         JBE    SHORT AXNG320
  382.         JG    SHORT ENDML320
  383.         XOR    DI,DI
  384. AXNG320:    SUB    CX,DI
  385.         ADD    DI,DX
  386. POLYCOLORW:    MOV    EAX,0FFFFFFFFH
  387.         SHR    CX,1
  388.         JNC    SHORT NOEVENCXML3201
  389.         STOSB
  390. NOEVENCXML3201:    SHR    CX,1
  391.         JNC    SHORT NOEVENCXML3202
  392.         STOSW
  393. NOEVENCXML3202:    REP    STOSD
  394. ENDML320:    MOV    CX,0FFFFH                    ;-==-
  395. ENDML3202:    MOV    DI,0FFFFH                    ;-==-
  396. ENDM
  397.  
  398. PUTPOLY320:    MOV    DWORD PTR CS:PPEAX+2,EAX
  399.         MOV    DWORD PTR CS:PPEBX+2,EBX
  400.         MOV    DWORD PTR CS:PPECX+2,ECX
  401.         MOV    DWORD PTR CS:PPEDX+2,EDX
  402.         MOV    DWORD PTR CS:PPESI+2,ESI
  403.         MOV    DWORD PTR CS:PPEDI+2,EDI
  404.         MOV    DWORD PTR CS:PPEBP+2,EBP
  405.         MOV    ESI,DWORD PTR V1_Y
  406.         MOV    EBP,DWORD PTR V2_Y
  407.         MOV    EDI,DWORD PTR V3_Y
  408.         CMP    SI,BP
  409.         JLE    SHORT V1_TO_V2
  410.         XCHG    ESI,EBP
  411. V1_TO_V2:    CMP    SI,DI
  412.         JLE    SHORT V1_TO_V3
  413.         XCHG    ESI,EDI
  414. V1_TO_V3:    CMP    BP,DI
  415.         JLE    SHORT V2_TO_V3
  416.         XCHG    EBP,EDI
  417. V2_TO_V3:    MOV    DWORD PTR V1_Y,ESI
  418.         MOV    DWORD PTR V2_Y,EBP
  419.         MOV    DWORD PTR V3_Y,EDI
  420.         MOV    WORD PTR CS:PUTPOLY_MCIK+2,BP
  421.         MOV    WORD PTR CS:TO_WV3_Y+2,DI
  422.         MOV    AX,WORD PTR CS:POLYCOLORW+2
  423.         MOV    WORD PTR CS:POLYCOLORW+4,AX
  424.         MOV    CX,V1_X
  425.         XOR    AX,AX
  426.         XOR    DX,DX
  427.         MOV    BX,DI
  428.         SUB    BX,BP
  429.         JE    SHORT NO_OP_WV23
  430.         MOV    WORD PTR CS:TO_WV23_MREM+1,BX
  431.         MOV    BYTE PTR CS:TO_WV23_RA+5,47H
  432.         MOV    AX,V3_X
  433.         SUB    AX,V2_X
  434.         CWD
  435.         IDIV    BX
  436.         JS    SHORT NO_OP_WV23
  437.         MOV    BYTE PTR CS:TO_WV23_RA+5,4FH
  438.         NEG    DX
  439. NO_OP_WV23:    MOV    WORD PTR CS:CHG_WV23+5,AX
  440.         MOV    WORD PTR CS:TO_WV23_REM+5,DX
  441.         XOR    AX,AX
  442.         XOR    DX,DX
  443.         SUB    BP,SI
  444.         JE    SHORT NO_OP_WV2
  445.         MOV    WORD PTR CS:TO_WV2_MREM+2,BP
  446.         MOV    BYTE PTR CS:TO_WV2_RA,47H
  447.         MOV    AX,V2_X
  448.         SUB    AX,CX
  449.         CWD
  450.         IDIV    BP
  451.         JS    SHORT NO_OP_WV2
  452.         MOV    BYTE PTR CS:TO_WV2_RA,4FH
  453.         NEG    DX
  454. NO_OP_WV2:    MOV    WORD PTR CS:NOOVWV3+2,AX
  455.         MOV    WORD PTR CS:TO_WV2_REM+2,DX
  456.         XOR    AX,AX
  457.         XOR    DX,DX
  458.         MOV    BX,DI
  459.         SUB    BX,SI
  460.         JE    SHORT NO_OP_WV3
  461.         MOV    WORD PTR CS:TO_WV3_MREM+2,BX
  462.         MOV    BYTE PTR CS:TO_WV3_RA,41H
  463.         MOV    AX,V3_X
  464.         SUB    AX,CX
  465.         CWD
  466.         IDIV    BX
  467.         JS    SHORT NO_OP_WV3
  468.         MOV    BYTE PTR CS:TO_WV3_RA,49H
  469.         NEG    DX
  470. NO_OP_WV3:    MOV    WORD PTR CS:TO_WV3_INT+2,AX
  471.         MOV    WORD PTR CS:TO_WV3_REM+2,DX
  472.         MOV    AX,SI
  473.         MOV    DX,SI
  474.         SHL    AX,8
  475.         SHL    DX,6
  476.         ADD    DX,AX
  477.         MOV    DI,CX
  478.         MOV    BYTE PTR CS:NO+1,OFFSET PUTPOLY_MCIK-(NO+2)
  479. PUTPOLY_MCIK:    CMP    SI,0FFFFH
  480.         JE    CHG_WV23
  481. NO_CHG_WV23:    CMP    SI,199
  482.         JA    SHORT NOONSCREEN
  483.         MAKELINE320
  484. NOONSCREEN:    INC    SI
  485. TO_WV3_INT:    ADD    CX,0FFFFH                    ;-==-
  486. TO_WV3_REM:    SUB    BX,0FFFFH                    ;-==-
  487.         JNC    SHORT NOOVWV3
  488. TO_WV3_MREM:    ADD    BX,0FFFFH                    ;-==-
  489. TO_WV3_RA:    INC    CX                        ;-==-
  490. NOOVWV3:    ADD    DI,0FFFFH                    ;-==-
  491. TO_WV2_REM:    SUB    BP,0FFFFH                    ;-==-
  492.         JNC    SHORT NOOVWV2
  493. TO_WV2_MREM:    ADD    BP,0FFFFH                    ;-==-
  494. TO_WV2_RA:    INC    DI                        ;-==-
  495. NOOVWV2:    ADD    DX,320
  496. TO_WV3_Y:    CMP    SI,0FFFFH                    ;-==-
  497. NO:        JNG    SHORT PUTPOLY_MCIK
  498. PPEAX:        MOV    EAX,0FFFFFFFFH                    ;-==-
  499. PPEBX:        MOV    EBX,0FFFFFFFFH                    ;-==-
  500. PPECX:        MOV    ECX,0FFFFFFFFH                    ;-==-
  501. PPEDX:        MOV    EDX,0FFFFFFFFH                    ;-==-
  502. PPESI:        MOV    ESI,0FFFFFFFFH                    ;-==-
  503. PPEDI:        MOV    EDI,0FFFFFFFFH                    ;-==-
  504. PPEBP:        MOV    EBP,0FFFFFFFFH                    ;-==-
  505.         RET
  506. CHG_WV23:    MOV    WORD PTR CS:NOOVWV3+2,0FFFFH            ;-==-
  507. TO_WV23_REM:    MOV    WORD PTR CS:TO_WV2_REM+2,0FFFFH            ;-==-
  508. TO_WV23_RA:    MOV    BYTE PTR CS:TO_WV2_RA,47H            ;-==-
  509.         MOV    BYTE PTR CS:NO+1,OFFSET NO_CHG_WV23-(NO+2)
  510. TO_WV23_MREM:    MOV    BP,0FFFFH                    ;-==-
  511.         MOV    WORD PTR CS:TO_WV2_MREM+2,BP
  512.         MOV    DI,V2_X
  513.         JMP    NO_CHG_WV23
  514.  
  515. PUTOBJ320CONV:    PUSHA
  516.         PUSH    FS
  517.         MOV    FS,AX
  518.         MOV    CX,FS:[SI]
  519.         ADD    SI,2
  520.         MOV    DI,CX
  521.         SHL    DI,3
  522.         ADD    DI,SI
  523.         ADD    DI,2
  524. PUTO320CIK:    MOV    AX,FS:[SI]
  525.         MOV    WORD PTR CS:POLYCOLORW+2,AX
  526.         MOV    AX,FS:[SI+2]
  527.         MOV    BP,AX
  528.         ADD    BP,AX
  529.         ADD    BP,AX
  530.         SHL    BP,1
  531.         MOV    AX,FS:[DI][BP]
  532.         MOV    BX,EYEDISTANCE
  533.         IMUL    BX
  534.         ADD    BX,FS:[DI][BP][4]
  535.         ADD    BX,ORIGO_Z
  536.         IDIV    BX
  537.         ADD    AX,ORIGO_X
  538.         MOV    V1_X,AX
  539.         MOV    AX,FS:[DI][BP][2]
  540.         IMUL    EYEDISTANCE
  541.         IDIV    BX
  542.         NEG    AX
  543.         ADD    AX,ORIGO_Y
  544.         MOV    V1_Y,AX
  545.         MOV    AX,FS:[SI+4]
  546.         MOV    BP,AX
  547.         ADD    BP,AX
  548.         ADD    BP,AX
  549.         SHL    BP,1
  550.         MOV    AX,FS:[DI][BP]
  551.         MOV    BX,EYEDISTANCE
  552.         IMUL    BX
  553.         ADD    BX,FS:[DI][BP][4]
  554.         ADD    BX,ORIGO_Z
  555.         IDIV    BX
  556.         ADD    AX,ORIGO_X
  557.         MOV    V2_X,AX
  558.         MOV    AX,FS:[DI][BP][2]
  559.         IMUL    EYEDISTANCE
  560.         IDIV    BX
  561.         NEG    AX
  562.         ADD    AX,ORIGO_Y
  563.         MOV    V2_Y,AX
  564.         MOV    AX,FS:[SI+6]
  565.         MOV    BP,AX
  566.         ADD    BP,AX
  567.         ADD    BP,AX
  568.         SHL    BP,1
  569.         MOV    AX,FS:[DI][BP]
  570.         MOV    BX,EYEDISTANCE
  571.         IMUL    BX
  572.         ADD    BX,FS:[DI][BP][4]
  573.         ADD    BX,ORIGO_Z
  574.         IDIV    BX
  575.         ADD    AX,ORIGO_X
  576.         MOV    V3_X,AX
  577.         MOV    AX,FS:[DI][BP][2]
  578.         IMUL    EYEDISTANCE
  579.         IDIV    BX
  580.         NEG    AX
  581.         ADD    AX,ORIGO_Y
  582.         MOV    V3_Y,AX
  583.         CALL    PUTPOLY320
  584.         ADD    SI,8
  585.         DEC    CX
  586.         JNZ    PUTO320CIK
  587.         POP    FS
  588.         POPA
  589.         RET
  590.  
  591. ROTATEOBJECT:    PUSHAD
  592.         PUSH    FS
  593.         PUSH    GS
  594.         MOV    FS,AX
  595.         MOV    GS,BX
  596.         MOV    CX,FS:[SI]
  597.         MOV    GS:[DI],CX
  598.         ADD    SI,2
  599.         ADD    DI,2
  600. ROTCONVCOCIK:    MOV    EAX,FS:[SI]
  601.         MOV    GS:[DI],EAX
  602.         MOV    EAX,FS:[SI+4]
  603.         MOV    GS:[DI+4],EAX
  604.         ADD    SI,8
  605.         ADD    DI,8
  606.         DEC    CX
  607.         JNZ    SHORT ROTCONVCOCIK
  608.         MOV    CX,FS:[SI]
  609.         MOV    GS:[DI],CX
  610.         ADD    SI,2
  611.         ADD    DI,2
  612.         MOV    AX,FS
  613.         MOV    BX,GS
  614.         CALL    ROTATEPOINTS
  615.         POP    GS
  616.         POP    FS
  617.         POPAD
  618.         RET
  619.  
  620. END
  621.