home *** CD-ROM | disk | FTP | other *** search
- PUBLIC ROTATEPOINTS
- PUBLIC SETROTATEANGLE
- PUBLIC ADDROTATEANGLE
- PUBLIC ROTATEOBJECT
- PUBLIC PUTPOLY320
- PUBLIC PUTOBJ320CONV
- PUBLIC V1_X
- PUBLIC V1_Y
- PUBLIC V2_X
- PUBLIC V2_Y
- PUBLIC V3_X
- PUBLIC V3_Y
- PUBLIC POLYCOLOR
- PUBLIC EYEDISTANCE
- PUBLIC ORIGO_X
- PUBLIC ORIGO_Y
- PUBLIC ORIGO_Z
- PUBLIC EXIT
- PUBLIC FATALEXIT
- PUBLIC RANDOM
- PUBLIC TEST386
- PUBLIC CHECKMEMORY
- PUBLIC RNDMAX
- PUBLIC RTIMEON
- PUBLIC RTIMEOFF
- PUBLIC WAITVERTRETRACE
- PUBLIC RESETCOLORS
- PUBLIC SETCOLORS
- PUBLIC FADEUPCOLORS
- PUBLIC FADEDWCOLORS
- PUBLIC SETFCMODE
- PUBLIC TURNOFFFCMODE
- PUBLIC OPENOVERLAY
- PUBLIC LOADOVERLAYITEM
- PUBLIC WRITOVERLAYITEM
- PUBLIC CLOSEOVERLAY
- PUBLIC OILENGTH
- PUBLIC TIMINGON
- PUBLIC TIMINGOFF
- PUBLIC SETTIMFUNCON
- PUBLIC SETTIMFUNCOFF
-
- .386
- .MODEL USE16 SMALL
- .DATA
-
- PRESENT_COLORS DB 768 DUP(0)
- RNDMAX DW 65535
- PRESRNDNUM DW 1
- TEXT386 DB 'THIS STUFF REQUIED A 386 PROCESSOR OR BETTER.',13,10,"$"
- OVERLAYMODULEBA DD 0
- OVERLAYLSIGN DB 5 DUP(0)
- OVERLAYBSIGN DB 'PSO10'
- OVERLAYHANDLE DW 0
- OVERLAYOPENED DB 0
- OVERLAYOPENEDH DB 0
- OVERLAYENDPOS DD -9
- OIID DW 0
- OIUID DW 0
- OIPOS DD 0
- OILENGTH DD 0
- OIWLENGTH DD 0
- OISEG DW 0
- OIPID DW 0
- PREVINT08H DW 0
- DW 0
- PRESTIMNUM DB 4
- TIMINGSTATUS DB 0
- TIMINGFUNCST DW 0000000000000000B
- TIMINGS DW 16 DUP(0)
- TIMINGFUNCS DW 16 DUP(EMPTYTIMFUNC)
- PRESENTTIMINGS DW 16 DUP(0)
- PRESENTANGLE_X DW 0
- PRESENTANGLE_Y DW 0
- PRESENTANGLE_Z DW 0
- CALC1 DW 0
- CALC2 DW 0
- CALC3 DW 0
- CALC4 DW 0
- CALC5 DW 0
- CALC6 DW 0
- CALC7 DW 0
- CALC8 DW 0
- CALC9 DW 0
- SINALFA DW 0
- SINBETA DW 0
- SINGAMMA DW 0
- COSALFA DW 0
- COSBETA DW 0
- COSGAMMA DW 0
- SINTABLE DW 0,142,285,428,571,714,857,1000,1142,1285,1427,1570
- DW 1712,1854,1996,2138,2280,2421,2563,2704,2845,2985,3126
- DW 3266,3406,3546,3685,3824,3963,4102,4240,4378,4516,4653
- DW 4790,4926,5062,5198,5334,5469,5603,5737,5871,6004,6137
- DW 6269,6401,6533,6663,6794,6924,7053,7182,7310,7438,7565
- DW 7691,7817,7943,8067,8191,8315,8438,8560,8682,8803,8923
- DW 9042,9161,9279,9397,9514,9630,9745,9860,9973,10086
- DW 10199,10310,10421,10531,10640,10748,10856,10963,11068
- DW 11173,11278,11381,11483,11585,11685,11785,11884,11982
- DW 12079,12175,12270,12365,12458,12550,12642,12732,12822
- DW 12910,12998,13084,13170,13254,13338,13420,13502,13582
- DW 13662,13740,13818,13894,13969,14043,14116,14188,14259
- DW 14329,14398,14466,14532,14598,14662,14725,14787,14848
- DW 14908,14967,15025,15081,15136,15190,15243,15295,15346
- DW 15395,15444,15491,15537,15582,15625,15668,15709,15749
- DW 15788,15825,15862,15897,15931,15964,15995,16025,16055
- DW 16082,16109,16135,16159,16182,16204,16224,16243,16261
- DW 16278,16294,16308,16321,16333,16344,16353,16361,16368
- DW 16374,16378,16381,16383
- COSTABLE DW 16384,16383,16381,16378,16374,16368,16361,16353,16344
- DW 16333,16321,16308,16294,16278,16261,16243,16224,16204
- DW 16182,16159,16135,16109,16082,16055,16025,15995,15964
- DW 15931,15897,15862,15825,15788,15749,15709,15668,15625
- DW 15582,15537,15491,15444,15395,15346,15295,15243,15190
- DW 15136,15081,15025,14967,14908,14848,14787,14725,14662
- DW 14598,14532,14466,14398,14329,14259,14188,14116,14043
- DW 13969,13894,13818,13740,13662,13582,13502,13420,13338
- DW 13254,13170,13084,12998,12910,12822,12732,12642,12550
- DW 12458,12365,12270,12175,12079,11982,11884,11785,11685
- DW 11585,11483,11381,11278,11173,11068,10963,10856,10748
- DW 10640,10531,10421,10310,10199,10086,9973,9860,9745
- DW 9630,9514,9397,9279,9161,9042,8923,8803,8682,8560,8438
- DW 8315,8192,8067,7943,7817,7691,7565,7438,7310,7182,7053
- DW 6924,6794,6663,6533,6401,6269,6137,6004,5871,5737,5603
- DW 5469,5334,5198,5062,4926,4790,4653,4516,4378,4240,4102
- DW 3963,3824,3685,3546,3406,3266,3126,2985,2845,2704,2563
- DW 2421,2280,2138,1996,1854,1712,1570,1427,1285,1142,1000
- DW 857,714,571,428,285,142,0,-142,-285,-428,-571,-714,-857
- DW -1000,-1142,-1285,-1427,-1570,-1712,-1854,-1996,-2138
- DW -2280,-2421,-2563,-2704,-2845,-2985,-3126,-3266,-3406
- DW -3546,-3685,-3824,-3963,-4102,-4240,-4378,-4516,-4653
- DW -4790,-4926,-5062,-5198,-5334,-5469,-5603,-5737,-5871
- DW -6004,-6137,-6269,-6401,-6533,-6663,-6794,-6924,-7053
- DW -7182,-7310,-7438,-7565,-7691,-7817,-7943,-8067,-8191
- DW -8315,-8438,-8560,-8682,-8803,-8923,-9042,-9161,-9279
- DW -9397,-9514,-9630,-9745,-9860,-9973,-10086,-10199
- DW -10310,-10421,-10531,-10640,-10748,-10856,-10963
- DW -11068,-11173,-11278,-11381,-11483,-11585,-11685
- DW -11785,-11884,-11982,-12079,-12175,-12270,-12365
- DW -12458,-12550,-12642,-12732,-12822,-12910,-12998
- DW -13084,-13170,-13254,-13338,-13420,-13502,-13582
- DW -13662,-13740,-13818,-13894,-13969,-14043,-14116
- DW -14188,-14259,-14329,-14398,-14466,-14532,-14598
- DW -14662,-14725,-14787,-14848,-14908,-14967,-15025
- DW -15081,-15136,-15190,-15243,-15295,-15346,-15395
- DW -15444,-15491,-15537,-15582,-15625,-15668,-15709
- DW -15749,-15788,-15825,-15862,-15897,-15931,-15964
- DW -15995,-16025,-16055,-16082,-16109,-16135,-16159
- DW -16182,-16204,-16224,-16243,-16261,-16278,-16294
- DW -16308,-16321,-16333,-16344,-16353,-16361,-16368
- DW -16374,-16378,-16381,-16383,-16384,-16383,-16381
- DW -16378,-16374,-16368,-16361,-16353,-16344,-16333
- DW -16321,-16308,-16294,-16278,-16261,-16243,-16224
- DW -16204,-16182,-16159,-16135,-16109,-16082,-16055
- DW -16025,-15995,-15964,-15931,-15897,-15862,-15825
- DW -15788,-15749,-15709,-15668,-15625,-15582,-15537
- DW -15491,-15444,-15395,-15346,-15295,-15243,-15190
- DW -15136,-15081,-15025,-14967,-14908,-14848,-14787
- DW -14725,-14662,-14598,-14532,-14466,-14398,-14329
- DW -14259,-14188,-14116,-14043,-13969,-13894,-13818
- DW -13740,-13662,-13582,-13502,-13420,-13338,-13254
- DW -13170,-13084,-12998,-12910,-12822,-12732,-12642
- DW -12550,-12458,-12365,-12270,-12175,-12079,-11982
- DW -11884,-11785,-11685,-11585,-11483,-11381,-11278
- DW -11173,-11068,-10963,-10856,-10748,-10640,-10531
- DW -10421,-10310,-10199,-10086,-9973,-9860,-9745,-9630
- DW -9514,-9397,-9279,-9161,-9042,-8923,-8803,-8682,-8560
- DW -8438,-8315,-8192,-8067,-7943,-7817,-7691,-7565,-7438
- DW -7310,-7182,-7053,-6924,-6794,-6663,-6533,-6401,-6269
- DW -6137,-6004,-5871,-5737,-5603,-5469,-5334,-5198,-5062
- DW -4926,-4790,-4653,-4516,-4378,-4240,-4102,-3963,-3824
- DW -3685,-3546,-3406,-3266,-3126,-2985,-2845,-2704,-2563
- DW -2421,-2280,-2138,-1996,-1854,-1712,-1570,-1427,-1285
- DW -1142,-1000,-857,-714,-571,-428,-285,-142,0,142,285
- DW 428,571,714,857,1000,1142,1285,1427,1570,1712,1854
- DW 1996,2138,2280,2421,2563,2704,2845,2985,3126,3266,3406
- DW 3546,3685,3824,3963,4102,4240,4378,4516,4653,4790,4926
- DW 5062,5198,5334,5469,5603,5737,5871,6004,6137,6269,6401
- DW 6533,6663,6794,6924,7053,7182,7310,7438,7565,7691,7817
- DW 7943,8067,8192,8315,8438,8560,8682,8803,8923,9042,9161
- DW 9279,9397,9514,9630,9745,9860,9973,10086,10199,10310
- DW 10421,10531,10640,10748,10856,10963,11068,11173,11278
- DW 11381,11483,11585,11685,11785,11884,11982,12079,12175
- DW 12270,12365,12458,12550,12642,12732,12822,12910,12998
- DW 13084,13170,13254,13338,13420,13502,13582,13662,13740
- DW 13818,13894,13969,14043,14116,14188,14259,14329,14398
- DW 14466,14532,14598,14662,14725,14787,14848,14908,14967
- DW 15025,15081,15136,15190,15243,15295,15346,15395,15444
- DW 15491,15537,15582,15625,15668,15709,15749,15788,15825
- DW 15862,15897,15931,15964,15995,16025,16055,16082,16109
- DW 16135,16159,16182,16204,16224,16243,16261,16278,16294
- DW 16308,16321,16333,16344,16353,16361,16368,16374,16378
- DW 16381,16383
- V1_Y DW 0
- V1_X DW 0
- V2_Y DW 0
- V2_X DW 0
- V3_Y DW 0
- V3_X DW 0
- WV1_Y DW 0
- WV1_X DW 0
- WV2_Y DW 0
- WV2_X DW 0
- WV3_Y DW 0
- WV3_X DW 0
- POLYCOLOR DB 0
- DB 0
- TO_WV23_INT DW 0
- TO_WV23_REM DW 0
- TO_WV23_MREM DW 0
- TO_WV23_RA DW 0
-
- TO_WV2_Y DW 0
- PPLO DW 0
- EXCX DW 0
- EYEDISTANCE DW 0
- ORIGO_X DW 0
- ORIGO_Y DW 0
- ORIGO_Z DW 0
- PP DW 3C4H
- L_PLANES DB 00001111B
- DB 00001110B
- DB 00001100B
- DB 00001000B
- R_PLANES DB 0
- DB 00000001B
- DB 00000011B
- DB 00000111B
-
- .CODE
- .STARTUP
-
- MAKELINE320 MACRO
- PUSH AX
- PUSH DI
- MOV CX,AX
- MOV DI,BP
- CMP CX,DI
- JGE SHORT NOXCHGCAML320
- XCHG DI,CX
- NOXCHGCAML320: CMP CX,319
- JBE SHORT CXNG320
- JNG SHORT ENDML320
- MOV CX,319
- CXNG320: CMP DI,319
- JBE SHORT AXNG320
- JG SHORT ENDML320
- XOR DI,DI
- AXNG320: MOV BX,DI
- AND BX,3
- MOV AL,L_PLANES[BX]
- MOV BX,CX
- AND BX,3
- MOV AH,R_PLANES[BX]
- SHR CX,2
- SHR DI,2
- SUB CX,DI
- ADD DI,PPLO
- OUT DX,AL
- MOV AL,POLYCOLOR
- ;STOSB
- MOV AL,0FH
- OUT DX,AL
- MOV AL,POLYCOLOR
- ;REP STOSB
- MOV AL,AH
- OUT DX,AL
- MOV AL,POLYCOLOR
- ;STOSB
- ENDML320: POP DI
- POP AX
- ENDM
-
- PUTPOLY320: PUSHAD
- MOV ESI,DWORD PTR V1_Y
- MOV EDI,DWORD PTR V2_Y
- MOV EBP,DWORD PTR V3_Y
- CMP SI,DI
- JLE SHORT V1_TO_V2
- XCHG EDI,ESI
- V1_TO_V2: CMP SI,BP
- JLE SHORT V1_TO_V3
- XCHG ESI,EBP
- V1_TO_V3: CMP DI,BP
- JLE SHORT V2_TO_V3
- XCHG EDI,EBP
- V2_TO_V3: MOV DWORD PTR WV1_Y,ESI
- MOV DWORD PTR WV2_Y,EDI
- MOV DWORD PTR WV3_Y,EBP
- INC DI
- SUB DI,SI
- MOV TO_WV2_Y,DI
- MOV AX,SI
- MOV DX,AX
- SHL AX,4
- SHL DX,6
- ADD AX,DX
- MOV PPLO,AX
- MOV WORD PTR CS:TO_WV3_RA+1,1
- XOR AX,AX
- MOV DX,AX
- MOV WORD PTR CS:TO_WV3_MREM+2,1
- MOV BX,WV3_Y
- SUB BX,WV1_Y
- MOV EXCX,BX
- JE SHORT NO_OP_WV3
- MOV CX,WV3_X
- SUB CX,WV1_X
- MOV AX,CX
- MOV WORD PTR CS:TO_WV3_MREM+2,BX
- CWD
- IDIV BX
- TEST DH,128
- JE SHORT NO_OP_WV3
- MOV WORD PTR CS:TO_WV3_RA+1,-1
- NEG DX
- NO_OP_WV3: MOV WORD PTR CS:TO_WV3_INT+1,AX
- MOV WORD PTR CS:TO_WV3_REM+2,DX
- MOV TO_WV23_RA,1
- XOR AX,AX
- MOV DX,AX
- MOV TO_WV23_MREM,1
- MOV CX,WV3_X
- SUB CX,WV2_X
- MOV BX,WV3_Y
- SUB BX,WV2_Y
- JE SHORT NO_OP_WV23
- MOV AX,CX
- MOV TO_WV23_MREM,BX
- CWD
- IDIV BX
- TEST DH,128
- JE SHORT NO_OP_WV23
- MOV TO_WV23_RA,-1
- NEG DX
- NO_OP_WV23: MOV TO_WV23_INT,AX
- MOV TO_WV23_REM,DX
- MOV WORD PTR CS:TO_WV2_RA+2,1
- XOR AX,AX
- MOV DX,AX
- MOV WORD PTR CS:TO_WV2_MREM+2,1
- MOV CX,WV2_X
- SUB CX,WV1_X
- MOV BX,WV2_Y
- SUB BX,WV1_Y
- JE SHORT NO_OP_WV2
- MOV AX,CX
- MOV WORD PTR CS:TO_WV2_MREM+2,BX
- CWD
- IDIV BX
- TEST DH,128
- JE SHORT NO_OP_WV2
- MOV WORD PTR CS:TO_WV2_RA+2,-1
- NEG DX
- NO_OP_WV2: MOV WORD PTR CS:TO_WV2_INT+2,AX
- MOV WORD PTR CS:TO_WV2_REM+2,DX
- INC EXCX
- MOV SI,BP
- MOV DI,WORD PTR CS:TO_WV3_MREM+2
- NEG SI
- NEG DI
- MOV AL,POLYCOLOR
- MOV POLYCOLOR[1],AL
- MOV BP,WV1_X
- MOV AX,BP
- MOV DX,3C5H
- PUTPOLY_MCIK: DEC TO_WV2_Y
- JE CHG_WV23
- NO_CHG_WV23: CMP WV1_Y,199
- JA SHORT NOONSCREEN
- MAKELINE320
- NOONSCREEN: INC WV1_Y
- TO_WV3_INT: ADD AX,0FFFFH ;SELF-WRITING CODE. TO_WV3_INT
- TO_WV3_REM: ADD DI,0FFFFH ;-==- TO_WV3_REM
- JNC SHORT NOOVWV3
- TO_WV3_MREM: SUB DI,0FFFFH ;-==- TO_WV3_MREM
- TO_WV3_RA: ADD AX,0FFFFH ;-==- TO_WV3_RA
- TO_WV2_INT:
- NOOVWV3: ADD BP,0FFFFH ;-==- TO_WV2_INT
- TO_WV2_REM: ADD SI,0FFFFH ;-==- TO_WV2_REM
- JNC SHORT NOOVWV2
- TO_WV2_MREM: SUB SI,0FFFFH ;-==- TO_WV2_MREM
- TO_WV2_RA: ADD BP,0FFFFH ;-==- TO_WV2_RA
- NOOVWV2: ADD PPLO,80
- DEC EXCX
- JNE PUTPOLY_MCIK
- POPAD
- RET
- CHG_WV23: MOV SI,TO_WV23_INT
- MOV WORD PTR CS:TO_WV2_INT+2,SI
- MOV SI,TO_WV23_REM
- MOV WORD PTR CS:TO_WV2_REM+2,SI
- MOV SI,TO_WV23_RA
- MOV WORD PTR CS:TO_WV2_RA+2,SI
- MOV SI,TO_WV23_MREM
- MOV WORD PTR CS:TO_WV2_MREM+2,SI
- NEG SI
- MOV BP,WV2_X
- JMP NO_CHG_WV23
-
- PUTOBJ320CONV: PUSHA
- PUSH FS
- MOV FS,AX
- MOV CX,FS:[SI]
- ADD SI,2
- MOV DI,CX
- SHL DI,3
- ADD DI,SI
- ADD DI,2
- PUTO320CIK: MOV AX,FS:[SI]
- MOV POLYCOLOR,AL
- MOV AX,FS:[SI+2]
- MOV BP,AX
- ADD BP,AX
- ADD BP,AX
- SHL BP,1
- MOV AX,FS:[DI][BP]
- MOV BX,EYEDISTANCE
- IMUL BX
- ADD BX,FS:[DI][BP][4]
- ADD BX,ORIGO_Z
- IDIV BX
- ADD AX,ORIGO_X
- MOV V1_X,AX
- MOV AX,FS:[DI][BP][2]
- IMUL EYEDISTANCE
- IDIV BX
- NEG AX
- ADD AX,ORIGO_Y
- MOV V1_Y,AX
- MOV AX,FS:[SI+4]
- MOV BP,AX
- ADD BP,AX
- ADD BP,AX
- SHL BP,1
- MOV AX,FS:[DI][BP]
- MOV BX,EYEDISTANCE
- IMUL BX
- ADD BX,FS:[DI][BP][4]
- ADD BX,ORIGO_Z
- IDIV BX
- ADD AX,ORIGO_X
- MOV V2_X,AX
- MOV AX,FS:[DI][BP][2]
- IMUL EYEDISTANCE
- IDIV BX
- NEG AX
- ADD AX,ORIGO_Y
- MOV V2_Y,AX
- MOV AX,FS:[SI+6]
- MOV BP,AX
- ADD BP,AX
- ADD BP,AX
- SHL BP,1
- MOV AX,FS:[DI][BP]
- MOV BX,EYEDISTANCE
- IMUL BX
- ADD BX,FS:[DI][BP][4]
- ADD BX,ORIGO_Z
- IDIV BX
- ADD AX,ORIGO_X
- MOV V3_X,AX
- MOV AX,FS:[DI][BP][2]
- IMUL EYEDISTANCE
- IDIV BX
- NEG AX
- ADD AX,ORIGO_Y
- MOV V3_Y,AX
- CALL PUTPOLY320
- ADD SI,8
- DEC CX
- JNZ PUTO320CIK
- POP FS
- POPA
- RET
-
- ROTATEOBJECT: PUSHAD
- PUSH FS
- PUSH GS
- MOV FS,AX
- MOV GS,BX
- MOV CX,FS:[SI]
- MOV GS:[DI],CX
- ADD SI,2
- ADD DI,2
- ROTCONVCOCIK: MOV EAX,FS:[SI]
- MOV GS:[DI],EAX
- MOV EAX,FS:[SI+4]
- MOV GS:[DI+4],EAX
- ADD SI,8
- ADD DI,8
- DEC CX
- JNZ SHORT ROTCONVCOCIK
- MOV CX,FS:[SI]
- MOV GS:[DI],CX
- ADD SI,2
- ADD DI,2
- MOV AX,FS
- MOV BX,GS
- CALL ROTATEPOINTS
- POP GS
- POP FS
- POPAD
- RET
-
- RTIMEON: PUSH DX
- PUSH AX
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- MOV AL,63
- OUT DX,AL
- OUT DX,AL
- OUT DX,AL
- POP AX
- POP DX
- RET
-
- RTIMEOFF: PUSH DX
- PUSH AX
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- OUT DX,AL
- OUT DX,AL
- OUT DX,AL
- POP AX
- POP DX
- RET
-
- WAITVERTRETRACE:PUSH DX
- PUSH AX
- MOV DX,3DAH
- NOVRETRACE: IN AL,DX
- TEST AL,8
- JZ NOVRETRACE
- VRETRACE: IN AL,DX
- TEST AL,8
- JNZ VRETRACE
- POP AX
- POP DX
- RET
-
- RESETCOLORS: PUSH AX
- PUSH CX
- PUSH DX
- PUSH SI
- PUSH DS
- MOV CX,768
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- XOR SI,SI
- PUSH SEG PRESENT_COLORS
- POP DS
- RESETCOLORSCIK: OUT DX,AL
- MOV PRESENT_COLORS[SI],AL
- INC SI
- LOOP RESETCOLORSCIK
- POP DS
- POP SI
- POP DX
- POP CX
- POP AX
- RET
-
- FADEUPCOLORS: PUSHA
- PUSH DS
- PUSH FS
- PUSH SEG PRESENT_COLORS
- POP DS
- MOV FS,AX
- LEA DI,PRESENT_COLORS
- MOV CX,768
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- FADEUPCOLCIK: MOV AL,DS:[DI]
- CMP AL,FS:[SI]
- JZ NOCHANGECOLFU
- JA SUBALFU
- INC AL
- JMP NOCHANGECOLFU
- SUBALFU: DEC AL
- NOCHANGECOLFU: MOV DS:[DI],AL
- OUT DX,AL
- INC DI
- ADD SI,1
- JNC NOADDFSFUCOLORS
- MOV AX,FS
- ADD AX,1000H
- MOV FS,AX
- NOADDFSFUCOLORS:DEC CX
- JNZ FADEUPCOLCIK
- POP FS
- POP DS
- POPA
- RET
-
- FADEDWCOLORS: PUSHA
- PUSH DS
- PUSH SEG PRESENT_COLORS
- POP DS
- MOV CX,768
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- XOR DI,DI
- FADEDWCIK: MOV AL,PRESENT_COLORS[DI]
- OR AL,AL
- JZ NOSUBCOLORAL
- DEC AL
- NOSUBCOLORAL: MOV PRESENT_COLORS[DI],AL
- OUT DX,AL
- INC DI
- DEC CX
- JNZ FADEDWCIK
- POP DS
- POPA
- RET
-
- SETCOLORS: PUSHA
- PUSH FS
- PUSH DS
- PUSH SEG PRESENT_COLORS
- POP DS
- XOR DI,DI
- MOV CX,768
- MOV FS,AX
- MOV DX,3C8H
- XOR AL,AL
- OUT DX,AL
- INC DX
- SETCOLORSCIK: MOV AL,FS:[SI]
- OUT DX,AL
- MOV PRESENT_COLORS[DI],AL
- INC DI
- ADD SI,1
- JNC NOADDFSSCCIK
- MOV AX,FS
- ADD AX,1000H
- MOV FS,AX
- NOADDFSSCCIK: DEC CX
- JNZ SETCOLORSCIK
- POP DS
- POP FS
- POPA
- RET
-
- SETFCMODE: PUSHA
- MOV DX,03C4H
- MOV AL,4
- OUT DX,AL
- INC DX
- IN AL,DX
- AND AL,0F7H
- OR AL,4
- OUT DX,AL
- MOV DX,03CEH
- MOV AL,5
- OUT DX,AL
- INC DX
- IN AL,DX
- AND AL,0EFH
- OR AL,040H
- OUT DX,AL
- MOV DX,03CEH
- MOV AL,6
- OUT DX,AL
- INC DX
- IN AL,DX
- AND AL,0FDH
- OUT DX,AL
- MOV DX,03D4H
- MOV AL,014H
- OUT DX,AL
- INC DX
- IN AL,DX
- AND AL,0BFH
- OUT DX,AL
- MOV DX,03D4H
- MOV AL,017H
- OUT DX,AL
- INC DX
- IN AL,DX
- OR AL,040H
- OUT DX,AL
- POPA
- RET
-
- TURNOFFFCMODE: PUSHA
- MOV DX,03C4H
- MOV AL,4
- OUT DX,AL
- INC DX
- IN AL,DX
- OR AL,00001000B
- AND AL,11111101B
- OUT DX,AL
- MOV DX,03CEH
- MOV AL,5
- OUT DX,AL
- INC DX
- IN AL,DX
- OR AL,00010000B
- AND AL,10111111B
- OUT DX,AL
- MOV DX,03CEH
- MOV AL,6
- OUT DX,AL
- INC DX
- IN AL,DX
- OR AL,00000010B
- OUT DX,AL
- MOV DX,03D4H
- MOV AL,014H
- OUT DX,AL
- INC DX
- IN AL,DX
- OR AL,01000000B
- OUT DX,AL
- MOV DX,03D4H
- MOV AL,017H
- OUT DX,AL
- INC DX
- IN AL,DX
- AND AL,10111111B
- OUT DX,AL
- POPA
- RET
-
- OPENOVERLAY: PUSHA
- PUSH DS
- PUSH ES
- MOV AX,SEG OVERLAYMODULEBA
- MOV DS,AX
- MOV OVERLAYOPENED,0
- MOV OVERLAYOPENEDH,1
- MOV AX,CS
- SUB AX,10H
- MOV DS,AX
- MOV SI,2CH
- MOV AX,[SI]
- MOV DS,AX
- MOV ES,AX
- XOR DI,DI
- MOV AL,1
- MOV CX,0FFFH
- CLD
- REPNZ SCASB
- INC DI
- MOV DX,DI
- MOV AH,3DH
- MOV AL,01000010B
- INT 21H
- JC NOTOPENOKOV
- MOV BX,SEG OVERLAYMODULEBA
- MOV DS,BX
- MOV OVERLAYHANDLE,AX
- MOV OVERLAYOPENEDH,1
- MOV BX,AX
- MOV AH,42H
- MOV AL,2
- MOV CX, WORD PTR OVERLAYENDPOS[2]
- MOV DX, WORD PTR OVERLAYENDPOS[0]
- INT 21H
- JC NOTOPENOKOV
- MOV AH,3FH
- MOV CX,9
- MOV BX,OVERLAYHANDLE
- LEA DX,OVERLAYMODULEBA
- INT 21H
- JC NOTOPENOKOV
- CLD
- MOV AX,DS
- MOV ES,AX
- MOV CX,5
- LEA SI,OVERLAYBSIGN
- LEA DI,OVERLAYLSIGN
- REPZ CMPSB
- OR CX,CX
- JNZ SCFLAG
- CLC
- MOV OVERLAYOPENED,1
- NOTOPENOKOV: POP ES
- POP DS
- POPA
- RET
- SCFLAG: STC
- JMP NOTOPENOKOV
-
- LOADOVERLAYITEM:PUSHAD
- PUSH DS
- PUSH SEG OIID
- POP DS
- OR OVERLAYOPENED,0
- JNZ OPENEDOV
- STC
- JMP ENDLOADING
- OPENEDOV: MOV OIPID,BX
- MOV OISEG,AX
- MOV SI,BX
- MOV AX,4200H
- MOV BX,OVERLAYHANDLE
- MOV CX,WORD PTR OVERLAYMODULEBA[2]
- MOV DX,WORD PTR OVERLAYMODULEBA[0]
- INT 21H
- JC ENDLOADING
- NEXTITEM: MOV AH,3FH
- MOV BX,OVERLAYHANDLE
- MOV CX,12
- LEA DX,OIID
- INT 21H
- JC ENDLOADING
- OR OIID,0
- JNZ GOMORE
- STC
- JMP ENDLOADING
- GOMORE: CMP SI,OIUID
- JNZ NEXTITEM
- MOV AX,4200H
- MOV BX,OVERLAYHANDLE
- MOV CX,WORD PTR OIPOS[2]
- MOV DX,WORD PTR OIPOS[0]
- INT 21H
- JC ENDLOADING
- MOV ESI,OILENGTH
- MOV EDI,32000
- CMP ESI,32000
- JAE NONEWVALUEEDI
- MOV EDI,ESI
- NONEWVALUEEDI: XOR DX,DX
- RETRYLOADING: MOV AX,3F00H
- MOV BX,OVERLAYHANDLE
- MOV CX,DI
- PUSH DS
- PUSH OISEG
- POP DS
- INT 21H
- POP DS
- JC ENDLOADING
- SUB ESI,EDI
- OR ESI,ESI
- JNZ NOENDLOADING
- CLC
- JMP ENDLOADING
- NOENDLOADING: ADD DX,DI
- JNC NOADDSEG
- ADD OISEG,2000
- NOADDSEG: CMP ESI,32000
- JAE NONEWEDI
- MOV EDI,ESI
- NONEWEDI: JMP RETRYLOADING
- ENDLOADING: POP DS
- POPAD
- RET
-
- WRITOVERLAYITEM:PUSHAD
- PUSH DS
- PUSH SEG OIID
- POP DS
- OR OVERLAYOPENED,0
- JNZ OPENEDOV2
- STC
- JMP ENDLOADING2
- OPENEDOV2: MOV OIPID,BX
- MOV OISEG,AX
- MOV OIWLENGTH,ECX
- MOV SI,AX
- MOV AX,4200H
- MOV BX,OVERLAYHANDLE
- MOV CX,WORD PTR OVERLAYMODULEBA[2]
- MOV DX,WORD PTR OVERLAYMODULEBA[0]
- INT 21H
- JC ENDLOADING2
- NEXTITEM2: MOV AH,3FH
- MOV BX,OVERLAYHANDLE
- MOV CX,12
- LEA DX,OIID
- INT 21H
- JC ENDLOADING2
- OR OIID,0
- JNZ GOMORE2
- STC
- JMP ENDLOADING2
- GOMORE2: CMP SI,OIUID
- JNZ NEXTITEM2
- MOV AX,4200H
- MOV BX,OVERLAYHANDLE
- MOV CX,WORD PTR OIPOS[2]
- MOV DX,WORD PTR OIPOS[0]
- INT 21H
- JC ENDLOADING2
- MOV ESI,OIWLENGTH
- CMP ESI,OILENGTH
- JBE OVLENGTHOK
- MOV ESI,OILENGTH
- OVLENGTHOK: MOV EDI,32000
- CMP ESI,32000
- JAE NONEWVALUEEDI2
- MOV EDI,ESI
- NONEWVALUEEDI2: XOR DX,DX
- RETRYLOADING2: MOV AX,4000h
- MOV BX,OVERLAYHANDLE
- MOV CX,DI
- PUSH DS
- PUSH OISEG
- POP DS
- INT 21H
- POP DS
- JC ENDLOADING2
- SUB ESI,EDI
- OR ESI,ESI
- JNZ NOENDLOADING2
- CLC
- JMP ENDLOADING2
- NOENDLOADING2: ADD DX,DI
- JNC NOADDSEG2
- ADD OISEG,2000
- NOADDSEG2: CMP ESI,32000
- JAE NONEWEDI2
- MOV EDI,ESI
- NONEWEDI2: JMP RETRYLOADING2
- ENDLOADING2: POP DS
- POPAD
- RET
-
- CLOSEOVERLAY: PUSHA
- PUSH DS
- MOV AX,SEG OVERLAYMODULEBA
- MOV DS,AX
- CMP OVERLAYOPENEDH,1
- JNZ NOTOPENEDOV
- MOV AH,3EH
- MOV BX,OVERLAYHANDLE
- INT 21H
- NOTOPENEDOV: POP DS
- POPA
- RET
-
- CHECKMEMORY: PUSHA
- PUSH AX
- MOV AX,0A000H
- MOV BX,CS
- SUB AX,BX
- MOV BX,16
- MUL BX
- MOV BX,1024
- DIV BX
- POP BX
- CMP AX,BX
- JA MEMORYENOUGHF
- STC
- POPA
- RET
- MEMORYENOUGHF: CLC
- POPA
- RET
-
- TEST386: MOV AX,1110000000000000B
- PUSH AX
- POPF
- PUSHF
- POP AX
- TEST AX,1110000000000000B
- JZ NOT386
- RET
- NOT386: MOV AX,SEG TEXT386
- MOV DS,AX
- MOV AH,9
- LEA DX,TEXT386
- INT 21H
- JMP EXIT
- FATALEXIT: MOV AX,3
- INT 10H
- EXIT: MOV AH,4CH
- INT 21H
-
- RANDOM: PUSH BX
- PUSH DX
- RECALCRND: MOV AX,4E35H
- MUL PRESRNDNUM
- INC AX
- MOV PRESRNDNUM,AX
- MOV BX,RNDMAX
- MUL BX
- MOV BX,0FFFFH
- DIV BX
- POP DX
- POP BX
- RET
-
- SETTIMFUNCON: CLI
- PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- CMP AX,15
- JA ERRORNSTON
- PUSH AX
- ADD AX,AX
- MOV DI,AX
- MOV TIMINGS[DI],CX
- MOV PRESENTTIMINGS[DI],0
- MOV TIMINGFUNCS[DI],SI
- POP CX
- MOV AX,1
- SHL AX,CL
- OR TIMINGFUNCST,AX
- ERRORNSTON: POP DS
- POPA
- STI
- RET
-
- SETTIMFUNCOFF: CLI
- PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- CMP AX,15
- JA ERRORNSTOFF
- MOV DX,AX
- ADD AX,AX
- MOV SI,AX
- LEA CX,EMPTYTIMFUNC
- MOV TIMINGFUNCS[SI],CX
- MOV TIMINGS[SI],0
- MOV CX,DX
- MOV AX,1
- SHL AX,CL
- XOR AX,1111111111111111B
- AND TIMINGFUNCST,AX
- ERRORNSTOFF: POP DS
- POPA
- STI
- RET
-
- TIMINGON: PUSHA
- PUSH ES
- PUSH DS
- CLI
- XOR AX,AX
- MOV ES,AX
- MOV SI,8
- SHL SI,2
- MOV AX,ES:[SI]
- MOV PREVINT08H,AX
- MOV AX,ES:[SI+2]
- MOV PREVINT08H[2],AX
- MOV AX,CS
- MOV ES:[SI+2],AX
- LEA AX,NEWINT08H
- MOV ES:[SI],AX
- MOV AL,36H
- OUT 43H,AL
- MOV AX,16384
- OUT 40H,AL
- MOV AL,AH
- OUT 40H,AL
- MOV PRESTIMNUM,4
- MOV TIMINGSTATUS,1
- STI
- POP DS
- POP ES
- POPA
- EMPTYTIMFUNC: RET
-
- NEWINT08H: PUSHA
- PUSH DS
- ;DEC PRESTIMNUM
- ;JNZ NOWNOTCALLI8
- ;PUSHF
- ;CALL DWORD PTR DS:[PREVINT08H]
- ;MOV PRESTIMNUM,4
- NOWNOTCALLI8: ;MOV AX,DGROUP
- ;MOV DS,AX
- ;MOV BX,1
- ;XOR SI,SI
- RETRYSCTIMFCIK: ;TEST BX,TIMINGFUNCST
- ;JZ NOONTIMFUNC
- ;MOV AX,PRESENTTIMINGS[SI]
- ;INC AX
- ;CMP AX,TIMINGS[SI]
- ;JNZ NOCALLTIMFUNC
- ;CALL WORD PTR TIMINGFUNCS[SI]
- ;XOR AX,AX
- NOCALLTIMFUNC: ;MOV PRESENTTIMINGS[SI],AX
- NOONTIMFUNC: ;CMP BX,32768
- ;JZ ENDTIMINGFUNC
- ;SHL BX,1
- ;ADD SI,2
- ;JMP RETRYSCTIMFCIK
- ENDTIMINGFUNC: MOV AL,20H ; 8259A I/O PORT
- OUT 20H,AL ; SEND NONSPECIFIC EOI TO 8259A
- POP DS
- POPA
- IRET
-
- TIMINGOFF: PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- TEST TIMINGSTATUS,1
- JZ NOONTIMING
- CLI
- LDS DX,DWORD PTR PREVINT08H
- MOV AX,2508H
- INT 21H
- MOV TIMINGSTATUS,0
- MOV AL,36H
- OUT 43H,AL
- XOR AL,AL
- OUT 40H,AL
- OUT 40H,AL
- STI
- NOONTIMING: POP DS
- POPA
- RET
-
- SETROTATEANGLE: PUSHA
- MOV SI,720
- CMP AX,SI
- JB SHORT NOOFSRAAX
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRAAX
- ADD DX,720
- MOV AX,DX
- NOOFSRAAX: MOV PRESENTANGLE_X,AX
- MOV AX,BX
- CMP AX,SI
- JB SHORT NOOFSRABX
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRABX
- ADD DX,720
- MOV AX,DX
- NOOFSRABX: MOV PRESENTANGLE_Y,AX
- MOV AX,CX
- CMP AX,SI
- JB SHORT NOOFSRACX
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRACX
- ADD DX,720
- MOV AX,DX
- NOOFSRACX: MOV PRESENTANGLE_Z,AX
- POPA
- RET
-
- ADDROTATEANGLE: PUSHA
- ADD AX,PRESENTANGLE_X
- ADD BX,PRESENTANGLE_Y
- ADD CX,PRESENTANGLE_Z
- MOV SI,720
- CMP AX,SI
- JB SHORT NOOFSRAAX2
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRAAX2
- ADD DX,720
- MOV AX,DX
- NOOFSRAAX2: MOV PRESENTANGLE_X,AX
- MOV AX,BX
- CMP AX,SI
- JB SHORT NOOFSRABX2
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRABX2
- ADD DX,720
- MOV AX,DX
- NOOFSRABX2: MOV PRESENTANGLE_Y,AX
- MOV AX,CX
- CMP AX,SI
- JB SHORT NOOFSRACX2
- CWD
- IDIV SI
- TEST DH,10000000B
- JZ SHORT NOOFSRACX2
- ADD DX,720
- MOV AX,DX
- NOOFSRACX2: MOV PRESENTANGLE_Z,AX
- POPA
- RET
-
- ROTATEPOINTS: PUSHA
- PUSH DS
- PUSH FS
- PUSH GS
- PUSH SEG SINTABLE
- POP DS
- PUSH SI
- PUSH DI
- MOV FS,AX
- MOV GS,BX
- MOV BX,PRESENTANGLE_X
- ADD BX,BX
- MOV AX,SINTABLE[BX]
- MOV SINALFA,AX
- MOV AX,COSTABLE[BX]
- MOV COSALFA,AX
- MOV BX,PRESENTANGLE_Y
- ADD BX,BX
- MOV AX,SINTABLE[BX]
- MOV SINBETA,AX
- MOV AX,COSTABLE[BX]
- MOV COSBETA,AX
- MOV BX,PRESENTANGLE_Z
- ADD BX,BX
- MOV AX,SINTABLE[BX]
- MOV SINGAMMA,AX
- MOV AX,COSTABLE[BX]
- MOV COSGAMMA,AX
- MOV AX,COSBETA
- MOV BX,CX
- MOV CL,14
- IMUL COSGAMMA
- SHRD AX,DX,CL
- MOV CALC1,AX
- MOV AX,COSBETA
- IMUL SINGAMMA
- SHRD AX,DX,CL
- MOV CALC2,AX
- MOV AX,SINBETA
- MOV CALC3,AX
- MOV AX,COSALFA
- IMUL SINGAMMA
- SHRD AX,DX,CL
- MOV DI,AX
- MOV AX,SINALFA
- IMUL SINBETA
- SHRD AX,DX,CL
- IMUL COSGAMMA
- SHRD AX,DX,CL
- ADD DI,AX
- MOV CALC4,DI
- MOV AX,COSALFA
- IMUL COSGAMMA
- SHRD AX,DX,CL
- MOV DI,AX
- MOV AX,SINALFA
- IMUL SINBETA
- SHRD AX,DX,CL
- IMUL SINGAMMA
- SHRD AX,DX,CL
- SUB DI,AX
- MOV CALC5,DI
- MOV AX,SINALFA
- IMUL COSBETA
- SHRD AX,DX,CL
- MOV CALC6,AX
- MOV AX,SINALFA
- IMUL SINGAMMA
- SHRD AX,DX,CL
- MOV DI,AX
- MOV AX,COSALFA
- IMUL SINBETA
- SHRD AX,DX,CL
- IMUL COSGAMMA
- SHRD AX,DX,CL
- SUB DI,AX
- MOV CALC7,DI
- MOV AX,SINALFA
- IMUL COSGAMMA
- SHRD AX,DX,CL
- MOV DI,AX
- MOV AX,COSALFA
- IMUL SINBETA
- SHRD AX,DX,CL
- IMUL SINGAMMA
- SHRD AX,DX,CL
- ADD AX,DI
- MOV CALC8,AX
- MOV AX,COSALFA
- IMUL COSBETA
- SHRD AX,DX,CL
- MOV CALC9,AX
- POP DI
- POP SI
- ROTATEPOINTS_C: MOV AX,CALC1
- IMUL WORD PTR FS:[SI]
- SHRD AX,DX,CL
- MOV BP,AX
- MOV AX,CALC2
- IMUL WORD PTR FS:[SI+2]
- SHRD AX,DX,CL
- SUB BP,AX
- MOV AX,CALC3
- IMUL WORD PTR FS:[SI+4]
- SHRD AX,DX,CL
- ADD BP,AX
- MOV GS:[DI],BP
- MOV AX,CALC4
- IMUL WORD PTR FS:[SI]
- SHRD AX,DX,CL
- MOV BP,AX
- MOV AX,CALC5
- IMUL WORD PTR FS:[SI+2]
- SHRD AX,DX,CL
- ADD BP,AX
- MOV AX,CALC6
- IMUL WORD PTR FS:[SI+4]
- SHRD AX,DX,CL
- SUB BP,AX
- MOV GS:[DI+2],BP
- MOV AX,CALC7
- IMUL WORD PTR FS:[SI]
- SHRD AX,DX,CL
- MOV BP,AX
- MOV AX,CALC8
- IMUL WORD PTR FS:[SI+2]
- SHRD AX,DX,CL
- ADD BP,AX
- MOV AX,CALC9
- IMUL WORD PTR FS:[SI+4]
- SHRD AX,DX,CL
- ADD BP,AX
- MOV GS:[DI+4],BP
- ADD SI,6
- JNC SHORT NOADDFSROTCIK
- MOV AX,FS
- ADD AX,1000H
- MOV FS,AX
- NOADDFSROTCIK: ADD DI,6
- JNC SHORT NOADDGSROTCIK
- MOV AX,GS
- ADD AX,1000H
- MOV GS,AX
- NOADDGSROTCIK: DEC BX
- JNZ ROTATEPOINTS_C
- POP GS
- POP FS
- POP DS
- POPA
- RET
-
- END
-