home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / cyberdan / intrance / pattvect / vector.asm < prev    next >
Encoding:
Assembly Source File  |  1995-03-09  |  12.2 KB  |  385 lines

  1. P386N
  2.  
  3. ASSUME CS:_CODE,DS:_DATA;,SS:_STACK
  4.  
  5. SEGMENT _DATA WORD PUBLiC 'DATA' USE32
  6. ENDS _DATA
  7.                 EXTRN LOADOVERLAYhivo:FAR
  8.         public pattvect
  9.         public palonly
  10.         public points,wordsin,wp
  11. SEGMENT _CODE   PARA    PUBLiC  'CODE' USE16
  12.  
  13. ;----------------------------------------------------------------------------
  14.                 EXTRN PLAYINGPATTERN:WORD
  15.                 EXTRN PATTERNROW:WORD
  16. pattvect:       MOV     DX,0
  17.                 MOV     DS,CS:WORDSIN
  18.                 MOV     AX,12
  19.                 CALL    LOADOVERLAYHIVO
  20.                 MOV     SI,0
  21.                 MOV     DI,0
  22.                 MOV     AX,0A000H
  23.                 MOV     ES,AX
  24.  
  25.                 MOV     CX,200
  26. LOGOKIRAK:      PUSH    CX
  27.                 MOV     CX,30
  28.                 REP     MOVSW
  29.                 MOVSB
  30.                 ADD     DI,320-61
  31.                 POP     CX
  32.                 LOOP    LOGOKIRAK
  33.  
  34.                 CALL    REGBEALLiT
  35.                 CALL    SiNTABLATOLT
  36.                 CALL    CLEAN
  37.                 CALL    COUNT_VERTiCES
  38.                 MOV     Si,ROTDEGX
  39.                 MOV     AX,FS:[Si]
  40.                 MOV     SiNX,AX
  41.                 MOV     AX,FS:[360+Si]
  42.                 MOV     COSX,AX
  43.                 MOV     Si,ROTDEGY
  44.                 MOV     AX,FS:[Si]
  45.                 MOV     SiNY,AX
  46.                 MOV     AX,FS:[360+Si]
  47.                 MOV     COSY,AX
  48.                 CALL    LEKEPZES
  49.                 JMP     VEGE
  50. ;----------------------------------------------------------------------------
  51. REGBEALLiT:     MOV     AX,CS
  52.                 MOV     DS,AX
  53.                 MOV     ES,AX
  54.                 MOV     AX,[WORDSiN]
  55.                 MOV     FS,AX
  56.                 MOV     AX,[POiNTS]
  57.                 MOV     GS,AX
  58.                 RET
  59. SiNTABLATOLT:   MOV     DX,0
  60.                 PUSH    DS WORDSiN
  61.                 POP     DS
  62.                 MOV     AX,2
  63.                 CALL    LOADOVERLAYhivo
  64.                 POP     DS
  65.                 RET
  66. ;----------------------------------------------------------------------------
  67. COUNT_VERTiCES: LEA     Si,[OBJECT_VERTiCES]
  68. C_2:            LODSW
  69.                 iNC     [VERTiCESNUM]
  70.                 CMP     AX,8000H
  71.                 JNE     C_2
  72.                 DEC     [VERTiCESNUM]
  73.                 MOV     AX,[VERTiCESNUM]
  74.                 MOV     BX,3
  75.                 DiV     BX
  76.                 MOV     [VERTiCESNUM],AX
  77.                 RET
  78. ;----------------------------------------------------------------------------
  79. LEKEPZES:       MOV     Si,ROTDEGX                ;X
  80.                 MOV     AX,FS:[Si]
  81.                 MOV     SiNX,AX
  82.                 MOV     AX,FS:[360+Si]
  83.                 MOV     COSX,AX
  84.                 MOV     Si,ROTDEGY                ;Y
  85.                 MOV     AX,FS:[Si]
  86.                 MOV     SiNY,AX
  87.                 MOV     AX,FS:[360+Si]
  88.                 MOV     COSY,AX
  89.                 ;CALL    RASTERWAiT
  90.                 CALL    FORGAT
  91.                 CALL    KiRAK
  92.                 CALL    DiSP
  93.                 ADD     ROTDEGX,8
  94.                 CMP     ROTDEGX,1440
  95.                 JB      OKDEGX
  96.                 MOV     ROTDEGX,0
  97. OKDEGX:         ADD     ROTDEGY,8
  98.                 CMP     ROTDEGY,1440
  99.                 JB      OKDEGY
  100.                 MOV     ROTDEGY,0
  101. OKDEGY:         JMP     LEKEPZES
  102.                 RET
  103. ;----------------------------------------------------------------------------
  104. ATRAK:          MOV     Si,0
  105.                 MOV     Di,500
  106.                 PUSH    ES DS GS GS
  107.                 POP     ES DS
  108.                 MOV     CX,[VERTiCESNUM]
  109.                 ADD     CX,1
  110.                 REPNZ   MOVSW
  111.                 POP     DS ES
  112.                 RET
  113. ;----------------------------------------------------------------------------
  114. FORGAT:         LEA     Si,[OBJECT_VERTiCES]
  115.                 MOV     Di,0                 ;POiNTS=GS
  116.  
  117. NEMUT:          MOV     AX,[Si]              ;FORGATáS X KöRüL
  118.                 CMP     AX,8000H
  119.                 JNE     FOLYT
  120.                 JMP     NOFOLYT
  121.  
  122. FOLYT:          MOV     X1,AX                ;X1 <- X0
  123.                 MOV     AX,[Si+2]
  124.                 iMUL    COSX
  125.                 MOV     BX,AX
  126.                 MOV     AX,[Si+4]
  127.                 iMUL    SiNX
  128.                 SUB     BX,AX                ;Y1 <- (Y0*COSA)-(Z0*SiNA)
  129.                 SAR     BX,7
  130.                 MOV     Y1,BX
  131.                 MOV     AX,[Si+2]
  132.                 iMUL    SiNX
  133.                 MOV     BX,AX
  134.                 MOV     AX,[Si+4]
  135.                 iMUL    COSX
  136.                 ADD     AX,BX                ;Z1 <- (Y0*SiNA)+(Z0*COSA)
  137.                 SAR     AX,7
  138.                 MOV     Z1,AX
  139.  
  140.                 MOV     AX,X1                ;FORGATáS Y KöRüL
  141.                 iMUL    COSY
  142.                 MOV     BX,AX
  143.                 MOV     AX,Z1
  144.                 iMUL    SiNY
  145.                 ADD     BX,AX                ;X2 <- (X1*COSB)+(Z1*SiNB)
  146.                 SAR     BX,7
  147.                 MOV     X3,BX
  148.                 MOV     AX,Y1
  149.                 MOV     Y3,AX                ;Y2 <- Y1
  150.                 MOV     AX,X1
  151.                 NEG     AX
  152.                 iMUL    SiNY
  153.                 MOV     BX,AX
  154.                 MOV     AX,Z1
  155.                 iMUL    COSY
  156.                 ADD     AX,BX                ;Z2 <- (-X1*SiNB)+(Z1*COSB)
  157.                 SAR     AX,7
  158.                 MOV     Z3,AX
  159.                 ;CALL    STOREZS              ;LETAROLNi A Z-KET A RENDEZESHEZ
  160.  
  161.                 MOV     AX,X3                ;3D-2D LEKéPZéS
  162.                 iMUL    SZEMTAV
  163.                 MOV     CX,SZEMTAV
  164.                 SUB     CX,Z3
  165.                 iDiV    CX
  166.                 iMUL    ZOOMMUL
  167.                 iDiV    ZOOMDiV
  168.                 MOV     X4,AX                ;X = ((X3*TORZ)/(TORZ-Z3))+160
  169.                 MOV     AX,Y3
  170.                 iMUL    SZEMTAV
  171.                 iDiV    CX
  172.                 iMUL    ZOOMMUL
  173.                 iDiV    ZOOMDiV
  174.                 SUB     AX,100
  175.                 MOV     Y4,AX                ;Y = ((Y3*TORZ)/(TORZ-Z3))+100;
  176.                 MOV     AX,320
  177.                 MUL     Y4                   ;CREATE SCREEN OFFSET
  178.                 ADD     AX,X4
  179.                 SUB     AX,100
  180.                 MOV     GS:[Di],AX
  181.                 ADD     Di,2
  182.                 ADD     Si,6
  183.                 JMP     NEMUT
  184. NOFOLYT:        MOV     AX,8000H
  185.                 MOV     GS:[Di],AX
  186.                 RET
  187. ;-----------------------------------------------------KiiRAS------------------
  188. KiRAK:          LEA     Si,[OBJECT_LiNES]
  189.                 MOV     Di,0
  190. UJFACE:         LODSW
  191.                 CMP     AX,8000H
  192.                 JE      LASTFACE
  193.                 SHL     AX,1
  194.                 MOV     Di,AX
  195.                 MOV     AX,GS:[Di]
  196.                 MOV     BX,320
  197.                 MOV     DX,0
  198.                 DiV     BX
  199.                 MOV     Y1,AX
  200.                 MOV     X1,DX
  201.                 LODSW
  202.                 CMP     AX,8000H
  203.                 JE      LASTFACE
  204.                 SHL     AX,1
  205.                 MOV     Di,AX
  206.                 MOV     AX,GS:[Di]
  207.                 MOV     BX,320
  208.                 MOV     DX,0
  209.                 DiV     BX
  210.                 MOV     Y2,AX
  211.                 MOV     X2,DX
  212.                 LODSW
  213.                 MOV     [SZiN],AL
  214.                 CALL    LiNE
  215.                 JMP     UJFACE
  216. LASTFACE:       RET
  217. ;-----------------------------------------------------------------------------
  218. RASTERWAiT:     PUSH    DX AX
  219.                 MOV     DX,03DAH
  220. RAST1:          iN      AL,DX
  221.                 TEST    AL,8
  222.                 JZ      RAST1
  223.                 POP     AX DX
  224.                 RET
  225. ViDEOMOD:       MOV     AX,13H
  226.                 iNT     10H
  227.                 RET
  228. VEGE:           retf
  229. ;-----------------------------------------------------------------------------
  230.  
  231. KEZD            DW      80+(200*320)+40
  232. MOVTBLPTR       DW      0
  233. MOVTBLPTR2      DW      0
  234. HAROMHUSZ       DW      320
  235. BENTSOR         DW      1
  236.  
  237. DiSP:           PUSHA
  238.                 PUSH    DS ES
  239.                 MOV     ES,CS:[WP]
  240.                 CALL    SMOOTH
  241.                 MOV     AX,0A000H
  242.                 MOV     ES,AX
  243.                 MOV     DS,CS:[WP]
  244.                 MOV     Di,CS:[KEZD]
  245.  
  246.                 MOV     Si,80+24*320
  247.                 MOV     CX,CS:[BENTSOR]
  248. DiSP1:          PUSH    CX
  249.                 MOV     CX,160/4
  250.                 REP     MOVSD
  251.                 ADD     Si,160
  252.                 ADD     Di,160
  253.                 POP     CX
  254.                 LOOP    DiSP1
  255.  
  256.                 MOV     BX,CS:[MOVTBLPTR]
  257.                 MOV     AX,WORD PTR CS:[MOVETABLE+BX]
  258.                 CMP     AX,8000H
  259.                 JE      DiSP2
  260.                 SUB     CS:[BENTSOR],AX
  261.                 MOV     BX,AX
  262.                 SHL     AX,8
  263.                 SHL     BX,6
  264.                 ADD     AX,BX
  265.                 ADD     CS:[KEZD],AX
  266.                 iNC     CS:[MOVTBLPTR]
  267.                 iNC     CS:[MOVTBLPTR]
  268. DiSP2:          POP     ES DS
  269.                 POPA
  270.  
  271.                 CMP     CS:[PLAYINGPATTERN],7
  272.                 JE      DISPIKE
  273.                 CMP     CS:[PLAYINGPATTERN],6
  274.                 JB      DISP3
  275.                 CMP     CS:[PATTERNROW],61
  276.                 JB      DUDU1
  277.                 MOV     CS:[ZOOMMUL],50
  278.                 JMP     DISP3
  279. DUDU1:          CMP     CS:[PATTERNROW],57
  280.                 JB      DUDU2
  281.                 MOV     CS:[ZOOMMUL],110
  282.                 JMP     DISP3
  283. DUDU2:          CMP     CS:[PATTERNROW],53
  284.                 JB      DUDU3
  285.                 MOV     CS:[ZOOMMUL],170
  286.                 JMP     DISP3
  287. DUDU3:          CMP     CS:[PATTERNROW],49
  288.                 JB      DUDU4
  289.                 MOV     CS:[ZOOMMUL],230
  290.                 JMP     DISP3
  291. DUDU4:          MOV     CS:[ZOOMMUL],300
  292.                 JMP     DISP3
  293.  
  294.  
  295. DISPIKE:
  296.                 PUSHA
  297.                 MOV     BX,CS:[MOVTBLPTR2]
  298.                 MOV     AX,WORD PTR CS:[MOVETABLE2+BX]
  299.                 CMP     AX,8000H
  300.                 JE      DiSP4
  301.                 SUB     CS:[BENTSOR],AX
  302.                 MOV     BX,AX
  303.                 SHL     AX,8
  304.                 SHL     BX,6
  305.                 ADD     AX,BX
  306.                 ADD     CS:[KEZD],AX
  307.                 iNC     CS:[MOVTBLPTR2]
  308.                 iNC     CS:[MOVTBLPTR2]
  309.                 POPA
  310.                 JMP     DISP3
  311. DISP4:          POPA
  312.         POP     EAX                   ;SIMULATE 2*'ret'
  313.         RETF
  314. DISP3:          RET
  315.  
  316. CLEAN:          PUSHA
  317.                 PUSH    ES
  318.                 MOV     ES,CS:[WP]
  319.                 MOV     CX,16000+320
  320.                 MOV     Di,0
  321.                 MOV     EAX,02020202H
  322.                 REP     STOSD
  323.                 POP     ES
  324.                 POPA
  325.                 RET
  326.  
  327. FiLLSCREEN:     PUSHA
  328.                 PUSH    ES
  329.                 MOV     AX,0A000H
  330.                 MOV     ES,AX
  331.                 MOV     CX,200
  332.                 MOV     EAX,01010101H
  333.                 MOV     Di,80
  334. FiLLS1:         PUSH    CX
  335.                 MOV     CX,60
  336.                 REP     STOSD
  337.                 ADD     Di,80
  338.                 POP     CX
  339.                 LOOP    FiLLS1
  340.                 POP     ES
  341.                 POPA
  342.                 RET
  343. PALONLY:    CALL    PALETTA
  344.         RETF
  345.  
  346. WP              DW      0
  347. SZEMTAV         DW      300
  348. X1              DW      0
  349. Y1              DW      0
  350. Z1              DW      0
  351. X2              DW      0
  352. Y2              DW      0
  353. Z2              DW      0
  354. X3              DW      0
  355. Y3              DW      0
  356. Z3              DW      0
  357. X4              DW      0
  358. Y4              DW      0
  359. ROTDEGX         DW      0
  360. ROTDEGY         DW      0
  361. ROTDEGZ         DW      0
  362. SiNX            DW      0
  363. COSX            DW      0
  364. SiNY            DW      0
  365. COSY            DW      0
  366. SiNZ            DW      0
  367. COSZ            DW      0
  368. ZOOMMUL         DW      300
  369. ZOOMDiV         DW      800
  370. TEMPTAV         DW      0
  371. POiNTS          DW      0
  372. POiNTS2         DW      0
  373. WORDSiN         DW      0
  374. KOCZKA_VERTiCES DW      0
  375. KOCZKA_FACES    DW      0
  376. VERTiCESNUM     DW      0
  377.  
  378. iNCLUDE         OBJECT.iNC
  379. iNCLUDE         LiNE_Y.iNC
  380. iNCLUDE         SMOOTH.ASM
  381. iNCLUDE         MOVETBL.iNC
  382.  
  383. ENDS    _CODE
  384. END
  385.