home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / basq / source / poweru / poweru.asm < prev    next >
Encoding:
Assembly Source File  |  1993-08-07  |  25.8 KB  |  1,348 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        POLYCOLOR
  14. PUBLIC        EYEDISTANCE
  15. PUBLIC        ORIGO_X
  16. PUBLIC        ORIGO_Y
  17. PUBLIC        ORIGO_Z
  18. PUBLIC        EXIT
  19. PUBLIC        FATALEXIT
  20. PUBLIC        RANDOM
  21. PUBLIC        TEST386
  22. PUBLIC        CHECKMEMORY
  23. PUBLIC        RNDMAX
  24. PUBLIC        RTIMEON
  25. PUBLIC        RTIMEOFF
  26. PUBLIC        WAITVERTRETRACE
  27. PUBLIC        RESETCOLORS
  28. PUBLIC        SETCOLORS
  29. PUBLIC        FADEUPCOLORS
  30. PUBLIC        FADEDWCOLORS
  31. PUBLIC        SETFCMODE
  32. PUBLIC        TURNOFFFCMODE
  33. PUBLIC        OPENOVERLAY
  34. PUBLIC        LOADOVERLAYITEM
  35. PUBLIC        WRITOVERLAYITEM
  36. PUBLIC        CLOSEOVERLAY
  37. PUBLIC        OILENGTH
  38. PUBLIC        TIMINGON
  39. PUBLIC        TIMINGOFF
  40. PUBLIC        SETTIMFUNCON
  41. PUBLIC        SETTIMFUNCOFF
  42.  
  43. .386
  44. .MODEL USE16 SMALL
  45. .DATA
  46.  
  47. PRESENT_COLORS    DB    768 DUP(0)
  48. RNDMAX        DW    65535
  49. PRESRNDNUM    DW    1
  50. TEXT386        DB    'THIS STUFF REQUIED A 386 PROCESSOR OR BETTER.',13,10,"$"
  51. OVERLAYMODULEBA    DD    0
  52. OVERLAYLSIGN    DB    5 DUP(0)
  53. OVERLAYBSIGN    DB    'PSO10'
  54. OVERLAYHANDLE    DW    0
  55. OVERLAYOPENED    DB    0
  56. OVERLAYOPENEDH    DB    0
  57. OVERLAYENDPOS    DD    -9
  58. OIID        DW    0
  59. OIUID        DW    0
  60. OIPOS        DD    0
  61. OILENGTH    DD    0
  62. OIWLENGTH    DD    0
  63. OISEG        DW    0
  64. OIPID        DW    0
  65. PREVINT08H    DW    0
  66.         DW    0
  67. PRESTIMNUM    DB    4
  68. TIMINGSTATUS    DB    0
  69. TIMINGFUNCST    DW    0000000000000000B
  70. TIMINGS        DW    16      DUP(0)
  71. TIMINGFUNCS    DW    16      DUP(EMPTYTIMFUNC)
  72. PRESENTTIMINGS    DW    16      DUP(0)
  73. PRESENTANGLE_X    DW    0
  74. PRESENTANGLE_Y    DW    0
  75. PRESENTANGLE_Z    DW    0
  76. CALC1        DW    0
  77. CALC2        DW    0
  78. CALC3        DW    0
  79. CALC4        DW    0
  80. CALC5        DW    0
  81. CALC6        DW    0
  82. CALC7        DW    0
  83. CALC8        DW    0
  84. CALC9        DW    0
  85. SINALFA        DW    0
  86. SINBETA        DW    0
  87. SINGAMMA    DW    0
  88. COSALFA        DW    0
  89. COSBETA        DW    0
  90. COSGAMMA    DW    0
  91. SINTABLE    DW    0,142,285,428,571,714,857,1000,1142,1285,1427,1570
  92.         DW    1712,1854,1996,2138,2280,2421,2563,2704,2845,2985,3126
  93.         DW    3266,3406,3546,3685,3824,3963,4102,4240,4378,4516,4653
  94.         DW    4790,4926,5062,5198,5334,5469,5603,5737,5871,6004,6137
  95.         DW    6269,6401,6533,6663,6794,6924,7053,7182,7310,7438,7565
  96.         DW    7691,7817,7943,8067,8191,8315,8438,8560,8682,8803,8923
  97.         DW    9042,9161,9279,9397,9514,9630,9745,9860,9973,10086
  98.         DW    10199,10310,10421,10531,10640,10748,10856,10963,11068
  99.         DW    11173,11278,11381,11483,11585,11685,11785,11884,11982
  100.         DW    12079,12175,12270,12365,12458,12550,12642,12732,12822
  101.         DW    12910,12998,13084,13170,13254,13338,13420,13502,13582
  102.         DW    13662,13740,13818,13894,13969,14043,14116,14188,14259
  103.         DW    14329,14398,14466,14532,14598,14662,14725,14787,14848
  104.         DW    14908,14967,15025,15081,15136,15190,15243,15295,15346
  105.         DW    15395,15444,15491,15537,15582,15625,15668,15709,15749
  106.         DW    15788,15825,15862,15897,15931,15964,15995,16025,16055
  107.         DW    16082,16109,16135,16159,16182,16204,16224,16243,16261
  108.         DW    16278,16294,16308,16321,16333,16344,16353,16361,16368
  109.         DW    16374,16378,16381,16383
  110. COSTABLE    DW    16384,16383,16381,16378,16374,16368,16361,16353,16344
  111.         DW    16333,16321,16308,16294,16278,16261,16243,16224,16204
  112.         DW    16182,16159,16135,16109,16082,16055,16025,15995,15964
  113.         DW    15931,15897,15862,15825,15788,15749,15709,15668,15625
  114.         DW    15582,15537,15491,15444,15395,15346,15295,15243,15190
  115.         DW    15136,15081,15025,14967,14908,14848,14787,14725,14662
  116.         DW    14598,14532,14466,14398,14329,14259,14188,14116,14043
  117.         DW    13969,13894,13818,13740,13662,13582,13502,13420,13338
  118.         DW    13254,13170,13084,12998,12910,12822,12732,12642,12550
  119.         DW    12458,12365,12270,12175,12079,11982,11884,11785,11685
  120.         DW    11585,11483,11381,11278,11173,11068,10963,10856,10748
  121.         DW    10640,10531,10421,10310,10199,10086,9973,9860,9745
  122.         DW    9630,9514,9397,9279,9161,9042,8923,8803,8682,8560,8438
  123.         DW    8315,8192,8067,7943,7817,7691,7565,7438,7310,7182,7053
  124.         DW    6924,6794,6663,6533,6401,6269,6137,6004,5871,5737,5603
  125.         DW    5469,5334,5198,5062,4926,4790,4653,4516,4378,4240,4102
  126.         DW    3963,3824,3685,3546,3406,3266,3126,2985,2845,2704,2563
  127.         DW    2421,2280,2138,1996,1854,1712,1570,1427,1285,1142,1000
  128.         DW    857,714,571,428,285,142,0,-142,-285,-428,-571,-714,-857
  129.         DW    -1000,-1142,-1285,-1427,-1570,-1712,-1854,-1996,-2138
  130.         DW    -2280,-2421,-2563,-2704,-2845,-2985,-3126,-3266,-3406
  131.         DW    -3546,-3685,-3824,-3963,-4102,-4240,-4378,-4516,-4653
  132.         DW    -4790,-4926,-5062,-5198,-5334,-5469,-5603,-5737,-5871
  133.         DW    -6004,-6137,-6269,-6401,-6533,-6663,-6794,-6924,-7053
  134.         DW    -7182,-7310,-7438,-7565,-7691,-7817,-7943,-8067,-8191
  135.         DW    -8315,-8438,-8560,-8682,-8803,-8923,-9042,-9161,-9279
  136.         DW    -9397,-9514,-9630,-9745,-9860,-9973,-10086,-10199
  137.         DW    -10310,-10421,-10531,-10640,-10748,-10856,-10963
  138.         DW    -11068,-11173,-11278,-11381,-11483,-11585,-11685
  139.         DW    -11785,-11884,-11982,-12079,-12175,-12270,-12365
  140.         DW    -12458,-12550,-12642,-12732,-12822,-12910,-12998
  141.         DW    -13084,-13170,-13254,-13338,-13420,-13502,-13582
  142.         DW    -13662,-13740,-13818,-13894,-13969,-14043,-14116
  143.         DW    -14188,-14259,-14329,-14398,-14466,-14532,-14598
  144.         DW    -14662,-14725,-14787,-14848,-14908,-14967,-15025
  145.         DW    -15081,-15136,-15190,-15243,-15295,-15346,-15395
  146.         DW    -15444,-15491,-15537,-15582,-15625,-15668,-15709
  147.         DW    -15749,-15788,-15825,-15862,-15897,-15931,-15964
  148.         DW    -15995,-16025,-16055,-16082,-16109,-16135,-16159
  149.         DW    -16182,-16204,-16224,-16243,-16261,-16278,-16294
  150.         DW    -16308,-16321,-16333,-16344,-16353,-16361,-16368
  151.         DW    -16374,-16378,-16381,-16383,-16384,-16383,-16381
  152.         DW    -16378,-16374,-16368,-16361,-16353,-16344,-16333
  153.         DW    -16321,-16308,-16294,-16278,-16261,-16243,-16224
  154.         DW    -16204,-16182,-16159,-16135,-16109,-16082,-16055
  155.         DW    -16025,-15995,-15964,-15931,-15897,-15862,-15825
  156.         DW    -15788,-15749,-15709,-15668,-15625,-15582,-15537
  157.         DW    -15491,-15444,-15395,-15346,-15295,-15243,-15190
  158.         DW    -15136,-15081,-15025,-14967,-14908,-14848,-14787
  159.         DW    -14725,-14662,-14598,-14532,-14466,-14398,-14329
  160.         DW    -14259,-14188,-14116,-14043,-13969,-13894,-13818
  161.         DW    -13740,-13662,-13582,-13502,-13420,-13338,-13254
  162.         DW    -13170,-13084,-12998,-12910,-12822,-12732,-12642
  163.         DW    -12550,-12458,-12365,-12270,-12175,-12079,-11982
  164.         DW    -11884,-11785,-11685,-11585,-11483,-11381,-11278
  165.         DW    -11173,-11068,-10963,-10856,-10748,-10640,-10531
  166.         DW    -10421,-10310,-10199,-10086,-9973,-9860,-9745,-9630
  167.         DW    -9514,-9397,-9279,-9161,-9042,-8923,-8803,-8682,-8560
  168.         DW    -8438,-8315,-8192,-8067,-7943,-7817,-7691,-7565,-7438
  169.         DW    -7310,-7182,-7053,-6924,-6794,-6663,-6533,-6401,-6269
  170.         DW    -6137,-6004,-5871,-5737,-5603,-5469,-5334,-5198,-5062
  171.         DW    -4926,-4790,-4653,-4516,-4378,-4240,-4102,-3963,-3824
  172.         DW    -3685,-3546,-3406,-3266,-3126,-2985,-2845,-2704,-2563
  173.         DW    -2421,-2280,-2138,-1996,-1854,-1712,-1570,-1427,-1285
  174.         DW    -1142,-1000,-857,-714,-571,-428,-285,-142,0,142,285
  175.         DW    428,571,714,857,1000,1142,1285,1427,1570,1712,1854
  176.         DW    1996,2138,2280,2421,2563,2704,2845,2985,3126,3266,3406
  177.         DW    3546,3685,3824,3963,4102,4240,4378,4516,4653,4790,4926
  178.         DW    5062,5198,5334,5469,5603,5737,5871,6004,6137,6269,6401
  179.         DW    6533,6663,6794,6924,7053,7182,7310,7438,7565,7691,7817
  180.         DW    7943,8067,8192,8315,8438,8560,8682,8803,8923,9042,9161
  181.         DW    9279,9397,9514,9630,9745,9860,9973,10086,10199,10310
  182.         DW    10421,10531,10640,10748,10856,10963,11068,11173,11278
  183.         DW    11381,11483,11585,11685,11785,11884,11982,12079,12175
  184.         DW    12270,12365,12458,12550,12642,12732,12822,12910,12998
  185.         DW    13084,13170,13254,13338,13420,13502,13582,13662,13740
  186.         DW    13818,13894,13969,14043,14116,14188,14259,14329,14398
  187.         DW    14466,14532,14598,14662,14725,14787,14848,14908,14967
  188.         DW    15025,15081,15136,15190,15243,15295,15346,15395,15444
  189.         DW    15491,15537,15582,15625,15668,15709,15749,15788,15825
  190.         DW    15862,15897,15931,15964,15995,16025,16055,16082,16109
  191.         DW    16135,16159,16182,16204,16224,16243,16261,16278,16294
  192.         DW    16308,16321,16333,16344,16353,16361,16368,16374,16378
  193.         DW    16381,16383
  194. V1_Y        DW    0
  195. V1_X        DW    0
  196. V2_Y        DW    0
  197. V2_X        DW    0
  198. V3_Y        DW    0
  199. V3_X        DW    0
  200. WV1_Y        DW    0
  201. WV1_X        DW    0
  202. WV2_Y        DW    0
  203. WV2_X        DW    0
  204. WV3_Y        DW    0
  205. WV3_X        DW    0
  206. POLYCOLOR    DB    0
  207.         DB    0
  208. TO_WV23_INT    DW    0
  209. TO_WV23_REM    DW    0
  210. TO_WV23_MREM    DW    0
  211. TO_WV23_RA    DW    0
  212.  
  213. TO_WV2_Y    DW    0
  214. PPLO        DW    0
  215. EXCX        DW    0
  216. EYEDISTANCE    DW    0
  217. ORIGO_X        DW    0
  218. ORIGO_Y        DW    0
  219. ORIGO_Z        DW    0
  220. PP        DW    3C4H
  221. L_PLANES    DB    00001111B
  222.         DB    00001110B
  223.         DB    00001100B
  224.         DB    00001000B
  225. R_PLANES    DB    0
  226.         DB    00000001B
  227.         DB    00000011B
  228.         DB    00000111B
  229.  
  230. .CODE
  231. .STARTUP
  232.  
  233. MAKELINE320    MACRO
  234.         PUSH    AX
  235.         PUSH    DI
  236.         MOV    CX,AX
  237.         MOV    DI,BP
  238.         CMP    CX,DI
  239.         JGE    SHORT NOXCHGCAML320
  240.         XCHG    DI,CX
  241. NOXCHGCAML320:    CMP    CX,319
  242.         JBE    SHORT CXNG320
  243.         JNG    SHORT ENDML320
  244.         MOV    CX,319
  245. CXNG320:    CMP    DI,319
  246.         JBE    SHORT AXNG320
  247.         JG    SHORT ENDML320
  248.         XOR    DI,DI
  249. AXNG320:    MOV    BX,DI
  250.         AND    BX,3
  251.         MOV    AL,L_PLANES[BX]
  252.         MOV    BX,CX
  253.         AND    BX,3
  254.         MOV    AH,R_PLANES[BX]
  255.         SHR    CX,2
  256.         SHR    DI,2
  257.         SUB    CX,DI
  258.         ADD    DI,PPLO
  259.         OUT    DX,AL
  260.         MOV    AL,POLYCOLOR
  261.         ;STOSB
  262.         MOV    AL,0FH
  263.         OUT    DX,AL
  264.         MOV    AL,POLYCOLOR
  265.         ;REP    STOSB
  266.         MOV    AL,AH
  267.         OUT    DX,AL
  268.         MOV    AL,POLYCOLOR
  269.         ;STOSB
  270. ENDML320:    POP    DI
  271.         POP    AX
  272. ENDM
  273.  
  274. PUTPOLY320:    PUSHAD
  275.         MOV    ESI,DWORD PTR V1_Y
  276.         MOV    EDI,DWORD PTR V2_Y
  277.         MOV    EBP,DWORD PTR V3_Y
  278.         CMP    SI,DI
  279.         JLE    SHORT V1_TO_V2
  280.         XCHG    EDI,ESI
  281. V1_TO_V2:    CMP    SI,BP
  282.         JLE    SHORT V1_TO_V3
  283.         XCHG    ESI,EBP
  284. V1_TO_V3:    CMP    DI,BP
  285.         JLE    SHORT V2_TO_V3
  286.         XCHG    EDI,EBP
  287. V2_TO_V3:    MOV    DWORD PTR WV1_Y,ESI
  288.         MOV    DWORD PTR WV2_Y,EDI
  289.         MOV    DWORD PTR WV3_Y,EBP
  290.         INC    DI
  291.         SUB    DI,SI
  292.         MOV    TO_WV2_Y,DI
  293.         MOV    AX,SI
  294.         MOV    DX,AX
  295.         SHL    AX,4
  296.         SHL    DX,6
  297.         ADD    AX,DX
  298.         MOV    PPLO,AX
  299.         MOV    WORD PTR CS:TO_WV3_RA+1,1
  300.         XOR    AX,AX
  301.         MOV    DX,AX
  302.         MOV    WORD PTR CS:TO_WV3_MREM+2,1
  303.         MOV    BX,WV3_Y
  304.         SUB    BX,WV1_Y
  305.         MOV    EXCX,BX
  306.         JE    SHORT NO_OP_WV3
  307.         MOV    CX,WV3_X
  308.         SUB    CX,WV1_X
  309.         MOV    AX,CX
  310.         MOV    WORD PTR CS:TO_WV3_MREM+2,BX
  311.         CWD
  312.         IDIV    BX
  313.         TEST    DH,128
  314.         JE    SHORT NO_OP_WV3
  315.         MOV    WORD PTR CS:TO_WV3_RA+1,-1
  316.         NEG    DX
  317. NO_OP_WV3:    MOV    WORD PTR CS:TO_WV3_INT+1,AX
  318.         MOV    WORD PTR CS:TO_WV3_REM+2,DX
  319.         MOV    TO_WV23_RA,1
  320.         XOR    AX,AX
  321.         MOV    DX,AX
  322.         MOV    TO_WV23_MREM,1
  323.         MOV    CX,WV3_X
  324.         SUB    CX,WV2_X
  325.         MOV    BX,WV3_Y
  326.         SUB    BX,WV2_Y
  327.         JE    SHORT NO_OP_WV23
  328.         MOV    AX,CX
  329.         MOV    TO_WV23_MREM,BX
  330.         CWD
  331.         IDIV    BX
  332.         TEST    DH,128
  333.         JE    SHORT NO_OP_WV23
  334.         MOV    TO_WV23_RA,-1
  335.         NEG    DX
  336. NO_OP_WV23:    MOV    TO_WV23_INT,AX
  337.         MOV    TO_WV23_REM,DX
  338.         MOV    WORD PTR CS:TO_WV2_RA+2,1
  339.         XOR    AX,AX
  340.         MOV    DX,AX
  341.         MOV    WORD PTR CS:TO_WV2_MREM+2,1
  342.         MOV    CX,WV2_X
  343.         SUB    CX,WV1_X
  344.         MOV    BX,WV2_Y
  345.         SUB    BX,WV1_Y
  346.         JE    SHORT NO_OP_WV2
  347.         MOV    AX,CX
  348.         MOV    WORD PTR CS:TO_WV2_MREM+2,BX
  349.         CWD
  350.         IDIV    BX
  351.         TEST    DH,128
  352.         JE    SHORT NO_OP_WV2
  353.         MOV    WORD PTR CS:TO_WV2_RA+2,-1
  354.         NEG    DX
  355. NO_OP_WV2:    MOV    WORD PTR CS:TO_WV2_INT+2,AX
  356.         MOV    WORD PTR CS:TO_WV2_REM+2,DX
  357.         INC    EXCX
  358.         MOV    SI,BP
  359.         MOV    DI,WORD PTR CS:TO_WV3_MREM+2
  360.         NEG    SI
  361.         NEG    DI
  362.         MOV    AL,POLYCOLOR
  363.         MOV    POLYCOLOR[1],AL
  364.         MOV    BP,WV1_X
  365.         MOV    AX,BP
  366.         MOV    DX,3C5H
  367. PUTPOLY_MCIK:    DEC    TO_WV2_Y
  368.         JE    CHG_WV23
  369. NO_CHG_WV23:    CMP    WV1_Y,199
  370.         JA    SHORT NOONSCREEN
  371.         MAKELINE320
  372. NOONSCREEN:    INC    WV1_Y
  373. TO_WV3_INT:    ADD    AX,0FFFFH        ;SELF-WRITING CODE. TO_WV3_INT
  374. TO_WV3_REM:    ADD    DI,0FFFFH        ;-==- TO_WV3_REM
  375.         JNC    SHORT NOOVWV3
  376. TO_WV3_MREM:    SUB    DI,0FFFFH        ;-==- TO_WV3_MREM
  377. TO_WV3_RA:    ADD    AX,0FFFFH        ;-==- TO_WV3_RA
  378. TO_WV2_INT:
  379. NOOVWV3:    ADD    BP,0FFFFH        ;-==- TO_WV2_INT
  380. TO_WV2_REM:    ADD    SI,0FFFFH        ;-==- TO_WV2_REM
  381.         JNC    SHORT NOOVWV2
  382. TO_WV2_MREM:    SUB    SI,0FFFFH        ;-==- TO_WV2_MREM
  383. TO_WV2_RA:    ADD    BP,0FFFFH        ;-==- TO_WV2_RA
  384. NOOVWV2:    ADD    PPLO,80
  385.         DEC    EXCX
  386.         JNE    PUTPOLY_MCIK
  387.         POPAD
  388.         RET
  389. CHG_WV23:    MOV    SI,TO_WV23_INT
  390.         MOV    WORD PTR CS:TO_WV2_INT+2,SI
  391.         MOV    SI,TO_WV23_REM
  392.         MOV    WORD PTR CS:TO_WV2_REM+2,SI
  393.         MOV    SI,TO_WV23_RA
  394.         MOV    WORD PTR CS:TO_WV2_RA+2,SI
  395.         MOV    SI,TO_WV23_MREM
  396.         MOV    WORD PTR CS:TO_WV2_MREM+2,SI
  397.         NEG    SI
  398.         MOV    BP,WV2_X
  399.         JMP    NO_CHG_WV23
  400.  
  401. PUTOBJ320CONV:    PUSHA
  402.         PUSH    FS
  403.         MOV    FS,AX
  404.         MOV    CX,FS:[SI]
  405.         ADD    SI,2
  406.         MOV    DI,CX
  407.         SHL    DI,3
  408.         ADD    DI,SI
  409.         ADD    DI,2
  410. PUTO320CIK:    MOV    AX,FS:[SI]
  411.         MOV    POLYCOLOR,AL
  412.         MOV    AX,FS:[SI+2]
  413.         MOV    BP,AX
  414.         ADD    BP,AX
  415.         ADD    BP,AX
  416.         SHL    BP,1
  417.         MOV    AX,FS:[DI][BP]
  418.         MOV    BX,EYEDISTANCE
  419.         IMUL    BX
  420.         ADD    BX,FS:[DI][BP][4]
  421.         ADD    BX,ORIGO_Z
  422.         IDIV    BX
  423.         ADD    AX,ORIGO_X
  424.         MOV    V1_X,AX
  425.         MOV    AX,FS:[DI][BP][2]
  426.         IMUL    EYEDISTANCE
  427.         IDIV    BX
  428.         NEG    AX
  429.         ADD    AX,ORIGO_Y
  430.         MOV    V1_Y,AX
  431.         MOV    AX,FS:[SI+4]
  432.         MOV    BP,AX
  433.         ADD    BP,AX
  434.         ADD    BP,AX
  435.         SHL    BP,1
  436.         MOV    AX,FS:[DI][BP]
  437.         MOV    BX,EYEDISTANCE
  438.         IMUL    BX
  439.         ADD    BX,FS:[DI][BP][4]
  440.         ADD    BX,ORIGO_Z
  441.         IDIV    BX
  442.         ADD    AX,ORIGO_X
  443.         MOV    V2_X,AX
  444.         MOV    AX,FS:[DI][BP][2]
  445.         IMUL    EYEDISTANCE
  446.         IDIV    BX
  447.         NEG    AX
  448.         ADD    AX,ORIGO_Y
  449.         MOV    V2_Y,AX
  450.         MOV    AX,FS:[SI+6]
  451.         MOV    BP,AX
  452.         ADD    BP,AX
  453.         ADD    BP,AX
  454.         SHL    BP,1
  455.         MOV    AX,FS:[DI][BP]
  456.         MOV    BX,EYEDISTANCE
  457.         IMUL    BX
  458.         ADD    BX,FS:[DI][BP][4]
  459.         ADD    BX,ORIGO_Z
  460.         IDIV    BX
  461.         ADD    AX,ORIGO_X
  462.         MOV    V3_X,AX
  463.         MOV    AX,FS:[DI][BP][2]
  464.         IMUL    EYEDISTANCE
  465.         IDIV    BX
  466.         NEG    AX
  467.         ADD    AX,ORIGO_Y
  468.         MOV    V3_Y,AX
  469.         CALL    PUTPOLY320
  470.         ADD    SI,8
  471.         DEC    CX
  472.         JNZ    PUTO320CIK
  473.         POP    FS
  474.         POPA
  475.         RET
  476.  
  477. ROTATEOBJECT:    PUSHAD
  478.         PUSH    FS
  479.         PUSH    GS
  480.         MOV    FS,AX
  481.         MOV    GS,BX
  482.         MOV    CX,FS:[SI]
  483.         MOV    GS:[DI],CX
  484.         ADD    SI,2
  485.         ADD    DI,2
  486. ROTCONVCOCIK:    MOV    EAX,FS:[SI]
  487.         MOV    GS:[DI],EAX
  488.         MOV    EAX,FS:[SI+4]
  489.         MOV    GS:[DI+4],EAX
  490.         ADD    SI,8
  491.         ADD    DI,8
  492.         DEC    CX
  493.         JNZ    SHORT ROTCONVCOCIK
  494.         MOV    CX,FS:[SI]
  495.         MOV    GS:[DI],CX
  496.         ADD    SI,2
  497.         ADD    DI,2
  498.         MOV    AX,FS
  499.         MOV    BX,GS
  500.         CALL    ROTATEPOINTS
  501.         POP    GS
  502.         POP    FS
  503.         POPAD
  504.         RET
  505.  
  506. RTIMEON:    PUSH    DX
  507.         PUSH    AX
  508.         MOV    DX,3C8H
  509.         XOR    AL,AL
  510.         OUT    DX,AL
  511.         INC    DX
  512.         MOV    AL,63
  513.         OUT    DX,AL
  514.         OUT    DX,AL
  515.         OUT    DX,AL
  516.         POP     AX
  517.         POP     DX
  518.         RET
  519.  
  520. RTIMEOFF:    PUSH    DX
  521.         PUSH    AX
  522.         MOV    DX,3C8H
  523.         XOR    AL,AL
  524.         OUT    DX,AL
  525.         INC    DX
  526.         OUT    DX,AL
  527.         OUT    DX,AL
  528.         OUT    DX,AL
  529.         POP    AX
  530.         POP    DX
  531.         RET
  532.  
  533. WAITVERTRETRACE:PUSH    DX
  534.         PUSH    AX
  535.         MOV    DX,3DAH
  536. NOVRETRACE:    IN    AL,DX
  537.         TEST    AL,8
  538.         JZ    NOVRETRACE
  539. VRETRACE:    IN    AL,DX
  540.         TEST    AL,8
  541.         JNZ    VRETRACE
  542.         POP    AX
  543.         POP    DX
  544.         RET
  545.  
  546. RESETCOLORS:    PUSH    AX
  547.         PUSH    CX
  548.         PUSH    DX
  549.         PUSH    SI
  550.         PUSH    DS
  551.         MOV    CX,768
  552.         MOV    DX,3C8H
  553.         XOR    AL,AL
  554.         OUT    DX,AL
  555.         INC    DX
  556.         XOR    SI,SI
  557.         PUSH    SEG PRESENT_COLORS
  558.         POP    DS
  559. RESETCOLORSCIK:    OUT    DX,AL
  560.         MOV    PRESENT_COLORS[SI],AL
  561.         INC    SI
  562.         LOOP    RESETCOLORSCIK
  563.         POP    DS
  564.         POP    SI
  565.         POP    DX
  566.         POP    CX
  567.         POP    AX
  568.         RET
  569.  
  570. FADEUPCOLORS:    PUSHA
  571.         PUSH    DS
  572.         PUSH    FS
  573.         PUSH    SEG PRESENT_COLORS
  574.         POP    DS
  575.         MOV    FS,AX
  576.         LEA    DI,PRESENT_COLORS
  577.         MOV    CX,768
  578.         MOV    DX,3C8H
  579.         XOR    AL,AL
  580.         OUT    DX,AL
  581.         INC    DX
  582. FADEUPCOLCIK:    MOV    AL,DS:[DI]
  583.         CMP    AL,FS:[SI]
  584.         JZ    NOCHANGECOLFU
  585.         JA    SUBALFU
  586.         INC    AL
  587.         JMP    NOCHANGECOLFU
  588. SUBALFU:    DEC    AL
  589. NOCHANGECOLFU:    MOV    DS:[DI],AL
  590.         OUT    DX,AL
  591.         INC    DI
  592.         ADD    SI,1
  593.         JNC    NOADDFSFUCOLORS
  594.         MOV    AX,FS
  595.         ADD    AX,1000H
  596.         MOV    FS,AX
  597. NOADDFSFUCOLORS:DEC    CX
  598.         JNZ    FADEUPCOLCIK
  599.         POP    FS
  600.         POP    DS
  601.         POPA
  602.         RET
  603.  
  604. FADEDWCOLORS:    PUSHA
  605.         PUSH    DS
  606.         PUSH    SEG PRESENT_COLORS
  607.         POP    DS
  608.         MOV    CX,768
  609.         MOV    DX,3C8H
  610.         XOR    AL,AL
  611.         OUT    DX,AL
  612.         INC    DX
  613.         XOR    DI,DI
  614. FADEDWCIK:      MOV    AL,PRESENT_COLORS[DI]
  615.         OR    AL,AL
  616.         JZ    NOSUBCOLORAL
  617.         DEC    AL
  618. NOSUBCOLORAL:    MOV    PRESENT_COLORS[DI],AL
  619.         OUT    DX,AL
  620.         INC    DI
  621.         DEC    CX
  622.         JNZ    FADEDWCIK
  623.         POP    DS
  624.         POPA
  625.         RET
  626.  
  627. SETCOLORS:    PUSHA
  628.         PUSH    FS
  629.         PUSH    DS
  630.         PUSH    SEG PRESENT_COLORS
  631.         POP    DS
  632.         XOR    DI,DI
  633.         MOV    CX,768
  634.         MOV    FS,AX
  635.         MOV    DX,3C8H
  636.         XOR    AL,AL
  637.         OUT    DX,AL
  638.         INC    DX
  639. SETCOLORSCIK:    MOV    AL,FS:[SI]
  640.         OUT    DX,AL
  641.         MOV    PRESENT_COLORS[DI],AL
  642.         INC    DI
  643.         ADD    SI,1
  644.         JNC    NOADDFSSCCIK
  645.         MOV    AX,FS
  646.         ADD    AX,1000H
  647.         MOV    FS,AX
  648. NOADDFSSCCIK:    DEC    CX
  649.         JNZ    SETCOLORSCIK
  650.         POP    DS
  651.         POP    FS
  652.         POPA
  653.         RET
  654.  
  655. SETFCMODE:    PUSHA
  656.         MOV    DX,03C4H
  657.         MOV    AL,4
  658.         OUT    DX,AL
  659.         INC    DX
  660.         IN    AL,DX
  661.         AND    AL,0F7H
  662.         OR    AL,4
  663.         OUT    DX,AL
  664.         MOV    DX,03CEH
  665.         MOV    AL,5
  666.         OUT    DX,AL
  667.         INC    DX
  668.         IN    AL,DX
  669.         AND    AL,0EFH
  670.         OR    AL,040H
  671.         OUT    DX,AL
  672.         MOV    DX,03CEH
  673.         MOV    AL,6
  674.         OUT    DX,AL
  675.         INC    DX
  676.         IN    AL,DX
  677.         AND    AL,0FDH
  678.         OUT    DX,AL
  679.         MOV    DX,03D4H
  680.         MOV    AL,014H
  681.         OUT    DX,AL
  682.         INC    DX
  683.         IN    AL,DX
  684.         AND    AL,0BFH
  685.         OUT    DX,AL
  686.         MOV    DX,03D4H
  687.         MOV    AL,017H
  688.         OUT    DX,AL
  689.         INC    DX
  690.         IN    AL,DX
  691.         OR    AL,040H
  692.         OUT    DX,AL
  693.         POPA
  694.         RET
  695.  
  696. TURNOFFFCMODE:    PUSHA
  697.         MOV    DX,03C4H
  698.         MOV    AL,4
  699.         OUT    DX,AL
  700.         INC    DX
  701.         IN    AL,DX
  702.         OR    AL,00001000B
  703.         AND    AL,11111101B
  704.         OUT    DX,AL
  705.         MOV    DX,03CEH
  706.         MOV    AL,5
  707.         OUT    DX,AL
  708.         INC    DX
  709.         IN    AL,DX
  710.         OR    AL,00010000B
  711.         AND    AL,10111111B
  712.         OUT    DX,AL
  713.         MOV    DX,03CEH
  714.         MOV    AL,6
  715.         OUT    DX,AL
  716.         INC    DX
  717.         IN    AL,DX
  718.         OR    AL,00000010B
  719.         OUT    DX,AL
  720.         MOV    DX,03D4H
  721.         MOV    AL,014H
  722.         OUT    DX,AL
  723.         INC    DX
  724.         IN    AL,DX
  725.         OR    AL,01000000B
  726.         OUT    DX,AL
  727.         MOV    DX,03D4H
  728.         MOV    AL,017H
  729.         OUT    DX,AL
  730.         INC    DX
  731.         IN    AL,DX
  732.         AND    AL,10111111B
  733.         OUT    DX,AL
  734.         POPA
  735.         RET
  736.  
  737. OPENOVERLAY:    PUSHA
  738.         PUSH    DS
  739.         PUSH    ES
  740.         MOV    AX,SEG OVERLAYMODULEBA
  741.         MOV     DS,AX
  742.         MOV    OVERLAYOPENED,0
  743.         MOV    OVERLAYOPENEDH,1
  744.         MOV    AX,CS
  745.         SUB    AX,10H
  746.         MOV    DS,AX
  747.         MOV    SI,2CH
  748.         MOV    AX,[SI]
  749.         MOV    DS,AX
  750.         MOV    ES,AX
  751.         XOR    DI,DI
  752.         MOV    AL,1
  753.         MOV    CX,0FFFH
  754.         CLD
  755.         REPNZ    SCASB
  756.         INC    DI
  757.         MOV    DX,DI
  758.         MOV    AH,3DH
  759.         MOV    AL,01000010B
  760.         INT    21H
  761.         JC    NOTOPENOKOV
  762.         MOV    BX,SEG OVERLAYMODULEBA
  763.         MOV    DS,BX
  764.         MOV    OVERLAYHANDLE,AX
  765.         MOV    OVERLAYOPENEDH,1
  766.         MOV    BX,AX
  767.         MOV    AH,42H
  768.         MOV    AL,2
  769.         MOV    CX, WORD PTR OVERLAYENDPOS[2]
  770.         MOV    DX, WORD PTR OVERLAYENDPOS[0]
  771.         INT    21H
  772.         JC    NOTOPENOKOV
  773.         MOV    AH,3FH
  774.         MOV    CX,9
  775.         MOV    BX,OVERLAYHANDLE
  776.         LEA    DX,OVERLAYMODULEBA
  777.         INT    21H
  778.         JC    NOTOPENOKOV
  779.         CLD
  780.         MOV    AX,DS
  781.         MOV    ES,AX
  782.         MOV    CX,5
  783.         LEA    SI,OVERLAYBSIGN
  784.         LEA    DI,OVERLAYLSIGN
  785.         REPZ    CMPSB
  786.         OR    CX,CX
  787.         JNZ    SCFLAG
  788.         CLC
  789.         MOV    OVERLAYOPENED,1
  790. NOTOPENOKOV:    POP    ES
  791.         POP    DS
  792.         POPA
  793.         RET
  794. SCFLAG:        STC
  795.         JMP    NOTOPENOKOV
  796.  
  797. LOADOVERLAYITEM:PUSHAD
  798.         PUSH    DS
  799.         PUSH    SEG OIID
  800.         POP    DS
  801.         OR    OVERLAYOPENED,0
  802.         JNZ    OPENEDOV
  803.         STC
  804.         JMP    ENDLOADING
  805. OPENEDOV:    MOV    OIPID,BX
  806.         MOV    OISEG,AX
  807.         MOV    SI,BX
  808.         MOV    AX,4200H
  809.         MOV    BX,OVERLAYHANDLE
  810.         MOV    CX,WORD PTR OVERLAYMODULEBA[2]
  811.         MOV    DX,WORD PTR OVERLAYMODULEBA[0]
  812.         INT    21H
  813.         JC    ENDLOADING
  814. NEXTITEM:    MOV    AH,3FH
  815.         MOV    BX,OVERLAYHANDLE
  816.         MOV    CX,12
  817.         LEA    DX,OIID
  818.         INT    21H
  819.         JC    ENDLOADING
  820.         OR    OIID,0
  821.         JNZ    GOMORE
  822.         STC
  823.         JMP    ENDLOADING
  824. GOMORE:        CMP    SI,OIUID
  825.         JNZ    NEXTITEM
  826.         MOV    AX,4200H
  827.         MOV    BX,OVERLAYHANDLE
  828.         MOV    CX,WORD PTR OIPOS[2]
  829.         MOV    DX,WORD PTR OIPOS[0]
  830.         INT    21H
  831.         JC    ENDLOADING
  832.         MOV    ESI,OILENGTH
  833.         MOV    EDI,32000
  834.         CMP    ESI,32000
  835.         JAE    NONEWVALUEEDI
  836.         MOV    EDI,ESI
  837. NONEWVALUEEDI:    XOR    DX,DX
  838. RETRYLOADING:    MOV    AX,3F00H
  839.         MOV    BX,OVERLAYHANDLE
  840.         MOV    CX,DI
  841.         PUSH    DS
  842.         PUSH    OISEG
  843.         POP    DS
  844.         INT    21H
  845.         POP    DS
  846.         JC    ENDLOADING
  847.         SUB    ESI,EDI
  848.         OR    ESI,ESI
  849.         JNZ    NOENDLOADING
  850.         CLC
  851.         JMP    ENDLOADING
  852. NOENDLOADING:    ADD    DX,DI
  853.         JNC    NOADDSEG
  854.         ADD    OISEG,2000
  855. NOADDSEG:    CMP    ESI,32000
  856.         JAE    NONEWEDI
  857.         MOV    EDI,ESI
  858. NONEWEDI:    JMP    RETRYLOADING
  859. ENDLOADING:    POP    DS
  860.         POPAD
  861.         RET
  862.  
  863. WRITOVERLAYITEM:PUSHAD
  864.         PUSH    DS
  865.         PUSH    SEG OIID
  866.         POP    DS
  867.         OR    OVERLAYOPENED,0
  868.         JNZ    OPENEDOV2
  869.         STC
  870.         JMP    ENDLOADING2
  871. OPENEDOV2:    MOV    OIPID,BX
  872.         MOV    OISEG,AX
  873.         MOV    OIWLENGTH,ECX
  874.         MOV    SI,AX
  875.         MOV    AX,4200H
  876.         MOV    BX,OVERLAYHANDLE
  877.         MOV    CX,WORD PTR OVERLAYMODULEBA[2]
  878.         MOV    DX,WORD PTR OVERLAYMODULEBA[0]
  879.         INT    21H
  880.         JC    ENDLOADING2
  881. NEXTITEM2:    MOV     AH,3FH
  882.         MOV    BX,OVERLAYHANDLE
  883.         MOV    CX,12
  884.         LEA    DX,OIID
  885.         INT    21H
  886.         JC    ENDLOADING2
  887.         OR    OIID,0
  888.         JNZ    GOMORE2
  889.         STC
  890.         JMP    ENDLOADING2
  891. GOMORE2:    CMP    SI,OIUID
  892.         JNZ    NEXTITEM2
  893.         MOV    AX,4200H
  894.         MOV    BX,OVERLAYHANDLE
  895.         MOV    CX,WORD PTR OIPOS[2]
  896.         MOV    DX,WORD PTR OIPOS[0]
  897.         INT    21H
  898.         JC    ENDLOADING2
  899.         MOV    ESI,OIWLENGTH
  900.         CMP    ESI,OILENGTH
  901.         JBE    OVLENGTHOK
  902.         MOV    ESI,OILENGTH
  903. OVLENGTHOK:    MOV    EDI,32000
  904.         CMP    ESI,32000
  905.         JAE    NONEWVALUEEDI2
  906.         MOV    EDI,ESI
  907. NONEWVALUEEDI2:    XOR    DX,DX
  908. RETRYLOADING2:    MOV    AX,4000h
  909.         MOV    BX,OVERLAYHANDLE
  910.         MOV    CX,DI
  911.         PUSH    DS
  912.         PUSH    OISEG
  913.         POP    DS
  914.         INT    21H
  915.         POP    DS
  916.         JC    ENDLOADING2
  917.         SUB    ESI,EDI
  918.         OR    ESI,ESI
  919.         JNZ    NOENDLOADING2
  920.         CLC
  921.         JMP    ENDLOADING2
  922. NOENDLOADING2:    ADD    DX,DI
  923.         JNC    NOADDSEG2
  924.         ADD    OISEG,2000
  925. NOADDSEG2:    CMP    ESI,32000
  926.         JAE    NONEWEDI2
  927.         MOV    EDI,ESI
  928. NONEWEDI2:    JMP    RETRYLOADING2
  929. ENDLOADING2:    POP    DS
  930.         POPAD
  931.         RET
  932.  
  933. CLOSEOVERLAY:    PUSHA
  934.         PUSH    DS
  935.         MOV    AX,SEG OVERLAYMODULEBA
  936.         MOV    DS,AX
  937.         CMP    OVERLAYOPENEDH,1
  938.         JNZ    NOTOPENEDOV
  939.         MOV    AH,3EH
  940.         MOV    BX,OVERLAYHANDLE
  941.         INT    21H
  942. NOTOPENEDOV:    POP    DS
  943.         POPA
  944.         RET
  945.  
  946. CHECKMEMORY:    PUSHA
  947.         PUSH    AX
  948.         MOV    AX,0A000H
  949.         MOV    BX,CS
  950.         SUB    AX,BX
  951.         MOV    BX,16
  952.         MUL    BX
  953.         MOV    BX,1024
  954.         DIV    BX
  955.         POP    BX
  956.         CMP    AX,BX
  957.         JA    MEMORYENOUGHF
  958.         STC
  959.         POPA
  960.         RET
  961. MEMORYENOUGHF:    CLC
  962.         POPA
  963.         RET
  964.  
  965. TEST386:    MOV    AX,1110000000000000B
  966.         PUSH    AX
  967.         POPF
  968.         PUSHF
  969.         POP    AX
  970.         TEST    AX,1110000000000000B
  971.         JZ    NOT386
  972.         RET
  973. NOT386:        MOV    AX,SEG TEXT386
  974.         MOV    DS,AX
  975.         MOV    AH,9
  976.         LEA    DX,TEXT386
  977.         INT    21H
  978.         JMP    EXIT
  979. FATALEXIT:    MOV    AX,3
  980.         INT    10H
  981. EXIT:        MOV    AH,4CH
  982.         INT    21H
  983.  
  984. RANDOM:        PUSH    BX
  985.         PUSH    DX
  986. RECALCRND:    MOV    AX,4E35H
  987.         MUL    PRESRNDNUM
  988.         INC    AX
  989.         MOV    PRESRNDNUM,AX
  990.         MOV    BX,RNDMAX
  991.         MUL    BX
  992.         MOV    BX,0FFFFH
  993.         DIV    BX
  994.         POP    DX
  995.         POP    BX
  996.         RET
  997.  
  998. SETTIMFUNCON:    CLI
  999.         PUSHA
  1000.         PUSH    DS
  1001.         PUSH    DGROUP
  1002.         POP    DS
  1003.         CMP    AX,15
  1004.         JA    ERRORNSTON
  1005.         PUSH    AX
  1006.         ADD    AX,AX
  1007.         MOV    DI,AX
  1008.         MOV    TIMINGS[DI],CX
  1009.         MOV    PRESENTTIMINGS[DI],0
  1010.         MOV    TIMINGFUNCS[DI],SI
  1011.         POP    CX
  1012.         MOV    AX,1
  1013.         SHL    AX,CL
  1014.         OR    TIMINGFUNCST,AX
  1015. ERRORNSTON:    POP    DS
  1016.         POPA
  1017.         STI
  1018.         RET
  1019.  
  1020. SETTIMFUNCOFF:    CLI
  1021.         PUSHA
  1022.         PUSH    DS
  1023.         PUSH    DGROUP
  1024.         POP    DS
  1025.         CMP    AX,15
  1026.         JA    ERRORNSTOFF
  1027.         MOV    DX,AX
  1028.         ADD    AX,AX
  1029.         MOV    SI,AX
  1030.         LEA    CX,EMPTYTIMFUNC
  1031.         MOV    TIMINGFUNCS[SI],CX
  1032.         MOV    TIMINGS[SI],0
  1033.         MOV    CX,DX
  1034.         MOV    AX,1
  1035.         SHL    AX,CL
  1036.         XOR    AX,1111111111111111B
  1037.         AND    TIMINGFUNCST,AX
  1038. ERRORNSTOFF:    POP    DS
  1039.         POPA
  1040.         STI
  1041.         RET
  1042.  
  1043. TIMINGON:    PUSHA
  1044.         PUSH    ES
  1045.         PUSH    DS
  1046.         CLI
  1047.         XOR    AX,AX
  1048.         MOV    ES,AX
  1049.         MOV    SI,8
  1050.         SHL    SI,2
  1051.         MOV    AX,ES:[SI]
  1052.         MOV    PREVINT08H,AX
  1053.         MOV    AX,ES:[SI+2]
  1054.         MOV    PREVINT08H[2],AX
  1055.         MOV    AX,CS
  1056.         MOV    ES:[SI+2],AX
  1057.         LEA    AX,NEWINT08H
  1058.         MOV    ES:[SI],AX
  1059.         MOV    AL,36H
  1060.         OUT    43H,AL
  1061.         MOV    AX,16384
  1062.         OUT    40H,AL
  1063.         MOV    AL,AH
  1064.         OUT    40H,AL
  1065.         MOV    PRESTIMNUM,4
  1066.         MOV    TIMINGSTATUS,1
  1067.         STI
  1068.         POP    DS
  1069.         POP    ES
  1070.         POPA
  1071. EMPTYTIMFUNC:    RET
  1072.  
  1073. NEWINT08H:    PUSHA
  1074.         PUSH    DS
  1075.         ;DEC    PRESTIMNUM
  1076.         ;JNZ    NOWNOTCALLI8
  1077.         ;PUSHF
  1078.         ;CALL    DWORD PTR DS:[PREVINT08H]
  1079.         ;MOV    PRESTIMNUM,4
  1080. NOWNOTCALLI8:    ;MOV    AX,DGROUP
  1081.         ;MOV    DS,AX
  1082.         ;MOV    BX,1
  1083.         ;XOR    SI,SI
  1084. RETRYSCTIMFCIK:    ;TEST    BX,TIMINGFUNCST
  1085.         ;JZ    NOONTIMFUNC
  1086.         ;MOV    AX,PRESENTTIMINGS[SI]
  1087.         ;INC    AX
  1088.         ;CMP    AX,TIMINGS[SI]
  1089.         ;JNZ    NOCALLTIMFUNC
  1090.         ;CALL    WORD PTR TIMINGFUNCS[SI]
  1091.         ;XOR    AX,AX
  1092. NOCALLTIMFUNC:    ;MOV    PRESENTTIMINGS[SI],AX
  1093. NOONTIMFUNC:    ;CMP    BX,32768
  1094.         ;JZ    ENDTIMINGFUNC
  1095.         ;SHL    BX,1
  1096.         ;ADD    SI,2
  1097.         ;JMP    RETRYSCTIMFCIK
  1098. ENDTIMINGFUNC:    MOV     AL,20H        ; 8259A I/O PORT
  1099.                 OUT     20H,AL        ; SEND NONSPECIFIC EOI TO 8259A
  1100.         POP    DS
  1101.         POPA
  1102.         IRET
  1103.  
  1104. TIMINGOFF:    PUSHA
  1105.         PUSH    DS
  1106.         PUSH    DGROUP
  1107.         POP    DS
  1108.         TEST    TIMINGSTATUS,1
  1109.         JZ    NOONTIMING
  1110.         CLI
  1111.         LDS    DX,DWORD PTR PREVINT08H
  1112.                 MOV    AX,2508H
  1113.                 INT    21H
  1114.         MOV    TIMINGSTATUS,0
  1115.         MOV    AL,36H
  1116.         OUT    43H,AL
  1117.         XOR    AL,AL
  1118.         OUT    40H,AL
  1119.         OUT    40H,AL
  1120.         STI
  1121. NOONTIMING:    POP    DS
  1122.         POPA
  1123.         RET
  1124.  
  1125. SETROTATEANGLE:    PUSHA
  1126.         MOV    SI,720
  1127.         CMP    AX,SI
  1128.         JB    SHORT NOOFSRAAX
  1129.         CWD
  1130.         IDIV    SI
  1131.         TEST    DH,10000000B
  1132.         JZ    SHORT NOOFSRAAX
  1133.         ADD    DX,720
  1134.         MOV    AX,DX
  1135. NOOFSRAAX:    MOV    PRESENTANGLE_X,AX
  1136.         MOV    AX,BX
  1137.         CMP    AX,SI
  1138.         JB    SHORT NOOFSRABX
  1139.         CWD
  1140.         IDIV    SI
  1141.         TEST    DH,10000000B
  1142.         JZ    SHORT NOOFSRABX
  1143.         ADD    DX,720
  1144.         MOV    AX,DX
  1145. NOOFSRABX:    MOV    PRESENTANGLE_Y,AX
  1146.         MOV    AX,CX
  1147.         CMP    AX,SI
  1148.         JB    SHORT NOOFSRACX
  1149.         CWD
  1150.         IDIV    SI
  1151.         TEST    DH,10000000B
  1152.         JZ    SHORT NOOFSRACX
  1153.         ADD    DX,720
  1154.         MOV    AX,DX
  1155. NOOFSRACX:    MOV    PRESENTANGLE_Z,AX
  1156.         POPA
  1157.         RET
  1158.  
  1159. ADDROTATEANGLE:    PUSHA
  1160.         ADD    AX,PRESENTANGLE_X
  1161.         ADD    BX,PRESENTANGLE_Y
  1162.         ADD    CX,PRESENTANGLE_Z
  1163.         MOV    SI,720
  1164.         CMP    AX,SI
  1165.         JB    SHORT NOOFSRAAX2
  1166.         CWD
  1167.         IDIV    SI
  1168.         TEST    DH,10000000B
  1169.         JZ    SHORT NOOFSRAAX2
  1170.         ADD    DX,720
  1171.         MOV    AX,DX
  1172. NOOFSRAAX2:    MOV    PRESENTANGLE_X,AX
  1173.         MOV    AX,BX
  1174.         CMP    AX,SI
  1175.         JB    SHORT NOOFSRABX2
  1176.         CWD
  1177.         IDIV    SI
  1178.         TEST    DH,10000000B
  1179.         JZ    SHORT NOOFSRABX2
  1180.         ADD    DX,720
  1181.         MOV    AX,DX
  1182. NOOFSRABX2:    MOV    PRESENTANGLE_Y,AX
  1183.         MOV    AX,CX
  1184.         CMP    AX,SI
  1185.         JB    SHORT NOOFSRACX2
  1186.         CWD
  1187.         IDIV    SI
  1188.         TEST    DH,10000000B
  1189.         JZ    SHORT NOOFSRACX2
  1190.         ADD    DX,720
  1191.         MOV    AX,DX
  1192. NOOFSRACX2:    MOV    PRESENTANGLE_Z,AX
  1193.         POPA
  1194.         RET
  1195.  
  1196. ROTATEPOINTS:    PUSHA
  1197.         PUSH    DS
  1198.         PUSH    FS
  1199.         PUSH    GS
  1200.         PUSH    SEG SINTABLE
  1201.         POP    DS
  1202.         PUSH    SI
  1203.         PUSH    DI
  1204.         MOV    FS,AX
  1205.         MOV    GS,BX
  1206.         MOV    BX,PRESENTANGLE_X
  1207.         ADD    BX,BX
  1208.         MOV    AX,SINTABLE[BX]
  1209.         MOV    SINALFA,AX
  1210.         MOV    AX,COSTABLE[BX]
  1211.         MOV    COSALFA,AX
  1212.         MOV    BX,PRESENTANGLE_Y
  1213.         ADD    BX,BX
  1214.         MOV    AX,SINTABLE[BX]
  1215.         MOV    SINBETA,AX
  1216.         MOV    AX,COSTABLE[BX]
  1217.         MOV    COSBETA,AX
  1218.         MOV    BX,PRESENTANGLE_Z
  1219.         ADD    BX,BX
  1220.         MOV    AX,SINTABLE[BX]
  1221.         MOV    SINGAMMA,AX
  1222.         MOV    AX,COSTABLE[BX]
  1223.         MOV    COSGAMMA,AX
  1224.         MOV    AX,COSBETA
  1225.         MOV    BX,CX
  1226.         MOV    CL,14
  1227.         IMUL    COSGAMMA
  1228.         SHRD    AX,DX,CL
  1229.         MOV    CALC1,AX
  1230.         MOV    AX,COSBETA
  1231.         IMUL    SINGAMMA
  1232.         SHRD    AX,DX,CL
  1233.         MOV    CALC2,AX
  1234.         MOV    AX,SINBETA
  1235.         MOV    CALC3,AX
  1236.         MOV    AX,COSALFA
  1237.         IMUL    SINGAMMA
  1238.         SHRD    AX,DX,CL
  1239.         MOV    DI,AX
  1240.         MOV    AX,SINALFA
  1241.         IMUL    SINBETA
  1242.         SHRD    AX,DX,CL
  1243.         IMUL    COSGAMMA
  1244.         SHRD    AX,DX,CL
  1245.         ADD    DI,AX
  1246.         MOV    CALC4,DI
  1247.         MOV    AX,COSALFA
  1248.         IMUL    COSGAMMA
  1249.         SHRD    AX,DX,CL
  1250.         MOV    DI,AX
  1251.         MOV    AX,SINALFA
  1252.         IMUL    SINBETA
  1253.         SHRD    AX,DX,CL
  1254.         IMUL    SINGAMMA
  1255.         SHRD    AX,DX,CL
  1256.         SUB    DI,AX
  1257.         MOV    CALC5,DI
  1258.         MOV    AX,SINALFA
  1259.         IMUL    COSBETA
  1260.         SHRD    AX,DX,CL
  1261.         MOV    CALC6,AX
  1262.         MOV    AX,SINALFA
  1263.         IMUL    SINGAMMA
  1264.         SHRD    AX,DX,CL
  1265.         MOV    DI,AX
  1266.         MOV    AX,COSALFA
  1267.         IMUL    SINBETA
  1268.         SHRD    AX,DX,CL
  1269.         IMUL    COSGAMMA
  1270.         SHRD    AX,DX,CL
  1271.         SUB    DI,AX
  1272.         MOV    CALC7,DI
  1273.         MOV    AX,SINALFA
  1274.         IMUL    COSGAMMA
  1275.         SHRD    AX,DX,CL
  1276.         MOV    DI,AX
  1277.         MOV    AX,COSALFA
  1278.         IMUL    SINBETA
  1279.         SHRD    AX,DX,CL
  1280.         IMUL    SINGAMMA
  1281.         SHRD    AX,DX,CL
  1282.         ADD    AX,DI
  1283.         MOV    CALC8,AX
  1284.         MOV    AX,COSALFA
  1285.         IMUL    COSBETA
  1286.         SHRD    AX,DX,CL
  1287.         MOV    CALC9,AX
  1288.         POP    DI
  1289.         POP    SI
  1290. ROTATEPOINTS_C:    MOV    AX,CALC1
  1291.         IMUL    WORD PTR FS:[SI]
  1292.         SHRD    AX,DX,CL
  1293.         MOV    BP,AX
  1294.         MOV    AX,CALC2
  1295.         IMUL    WORD PTR FS:[SI+2]
  1296.         SHRD    AX,DX,CL
  1297.         SUB    BP,AX
  1298.         MOV    AX,CALC3
  1299.         IMUL    WORD PTR FS:[SI+4]
  1300.         SHRD    AX,DX,CL
  1301.         ADD    BP,AX
  1302.         MOV    GS:[DI],BP
  1303.         MOV    AX,CALC4
  1304.         IMUL    WORD PTR FS:[SI]
  1305.         SHRD    AX,DX,CL
  1306.         MOV    BP,AX
  1307.         MOV    AX,CALC5
  1308.         IMUL    WORD PTR FS:[SI+2]
  1309.         SHRD    AX,DX,CL
  1310.         ADD    BP,AX
  1311.         MOV    AX,CALC6
  1312.         IMUL    WORD PTR FS:[SI+4]
  1313.         SHRD    AX,DX,CL
  1314.         SUB    BP,AX
  1315.         MOV    GS:[DI+2],BP
  1316.         MOV    AX,CALC7
  1317.         IMUL    WORD PTR FS:[SI]
  1318.         SHRD    AX,DX,CL
  1319.         MOV    BP,AX
  1320.         MOV    AX,CALC8
  1321.         IMUL    WORD PTR FS:[SI+2]
  1322.         SHRD    AX,DX,CL
  1323.         ADD    BP,AX
  1324.         MOV    AX,CALC9
  1325.         IMUL    WORD PTR FS:[SI+4]
  1326.         SHRD    AX,DX,CL
  1327.         ADD    BP,AX
  1328.         MOV    GS:[DI+4],BP
  1329.         ADD    SI,6
  1330.         JNC    SHORT NOADDFSROTCIK
  1331.         MOV    AX,FS
  1332.         ADD    AX,1000H
  1333.         MOV    FS,AX
  1334. NOADDFSROTCIK:    ADD    DI,6
  1335.         JNC    SHORT NOADDGSROTCIK
  1336.         MOV    AX,GS
  1337.         ADD    AX,1000H
  1338.         MOV    GS,AX
  1339. NOADDGSROTCIK:    DEC    BX
  1340.         JNZ    ROTATEPOINTS_C
  1341.         POP    GS
  1342.         POP    FS
  1343.         POP    DS
  1344.         POPA
  1345.                 RET
  1346.  
  1347. END
  1348.