0/5 (2 avis)
Vue 7 657 fois - Téléchargée 593 fois
Comment# Asmik.Asm 94/95 Comment# ;Jumps .586P ;.387 ;Locals @@ Vrais Equ 0 Faux Equ 255 Vector Struc ; 12 Octets de Vecteur; Vector_1 DD ? ; Vector_2 DD ? ; Vector_3 DD ? ; Vector EndS Matrice Struc ; 48 Octets de Matrice Matrice1_1 DD ? Matrice1_2 DD ? Matrice1_3 DD ? Matrice2_1 DD ? Matrice2_2 DD ? Matrice2_3 DD ? Matrice3_1 DD ? Matrice3_2 DD ? Matrice3_3 DD ? Matrice EndS ; Quelque Structure Lourde V3t Struc ; definition d'une coordonnee 12 Octets X DD 0 Y DD 0 Z DD 0 V3t Ends ; ; Definition d'un Pigment Ct Struc ; 12 Octets de pigment; R DD 0 ; 0.0 -> 1.0 G DD 0 B DD 0 Ct Ends RayT Struc ; Definition d'un rayon 24 Octets RP V3t <0,0,0> RN V3t <0,0,0> RayT EndS SphereT Struc ; definition d'une sphere M V3t <0,0,0> ; coordonnee centre Sqrr DD 0 ; Rayon Single SphereT EndS ; Definition d'une Surface SurfT Struc SOd Ct <0,0,0> SOe DD 0 ; Single SN DD 0 ; Single SRefl Dw 0 ; Boolean ; reflection STrans Dw 0 ; Boolean ; Transparence SSpecC Ct <0,0,0>; STransC Ct <0,0,0>; SColProc DW 0 ; Offset Procedure de Couleur STypProc DW 0 ; Offset Procedure de Typage SurfT Ends StartC Segment Para Public Use16 'CODE' Assume CS:StartC,DS:StartC,SS:StartC Org 100h StartHere: Jmp Demarre Db ' Pov2Com V1.0 ' Db ' B.Y.O 1995 Pigment ' ;Include Pigment.asm ; Liste des Pigments de pov pr?traduite ; Pigment Gray05 Dd 03D4CCCCDh,03D4CCCCDh,03D4CCCCDh; Gray10 Dd 03DCCCCCDh,03DCCCCCDh,03DCCCCCDh; Gray15 Dd 03E19999Ah,03E19999Ah,03E19999Ah; Gray20 Dd 03E4CCCCDh,03E4CCCCDh,03E4CCCCDh; Gray25 Dd 03E800000h,03E800000h,03E800000h; Gray30 Dd 03E99999Ah,03E99999Ah,03E99999Ah; Gray35 Dd 03EB33333h,03EB33333h,03EB33333h; Gray40 Dd 03ECCCCCDh,03ECCCCCDh,03ECCCCCDh; Gray45 Dd 03EE66666h,03EE66666h,03EE66666h; Gray50 Dd 03F000000h,03F000000h,03F000000h; Gray55 Dd 03F0CCCCDh,03F0CCCCDh,03F0CCCCDh; Gray60 Dd 03F19999Ah,03F19999Ah,03F19999Ah; Gray65 Dd 03F266666h,03F266666h,03F266666h; Gray70 Dd 03F333333h,03F333333h,03F333333h; Gray75 Dd 03F400000h,03F400000h,03F400000h; Gray80 Dd 03F4CCCCDh,03F4CCCCDh,03F4CCCCDh; Gray85 Dd 03F59999Ah,03F59999Ah,03F59999Ah; Gray90 Dd 03F666666h,03F666666h,03F666666h; Gray95 Dd 03F733333h,03F733333h,03F733333h; DimGray Dd 03EA8A8B1h,03EA8A8B1h,03EA8A8B1h; DimGrey Dd 03EA8A8B1h,03EA8A8B1h,03EA8A8B1h; Gray Dd 03F40C0BEh,03F40C0BEh,03F40C0BEh; Grey Dd 03F40C0BEh,03F40C0BEh,03F40C0BEh; LightGray Dd 03F28A8B1h,03F28A8B1h,03F28A8B1h; LightGrey Dd 03F28A8B1h,03F28A8B1h,03F28A8B1h; VLightGrey Dd 03F4CCCCDh,03F4CCCCDh,03F4CCCCDh; White Dd 03F800000h,03F800000h,03F800000h; Red Dd 03F800000h,000000000h,000000000h; Green Dd 000000000h,03F800000h,000000000h; Blue Dd 000000000h,000000000h,03F800000h; Yellow Dd 03F800000h,03F800000h,000000000h; Cyan Dd 000000000h,03F800000h,03F800000h; Magenta Dd 03F800000h,03F800000h,03F800000h; Black Dd 000000000h,000000000h,000000000h; Aquamarine Dd 03EE0E0EBh,03F5BDBE4h,03F13939Ah; BlueViolet Dd 03F1F9F02h,03EBEBEBEh,03F1F9F99h; Brown Dd 03F25A5A9h,03E28A8B1h,03E28A8B1h; CadetBlue Dd 03EBEBEBEh,03F1F9F99h,03F1F9F99h; Coral Dd 03F800000h,03EFEFEF8h,000000000h; CornflowerBlue Dd 03E848494h,03E848494h,03EDEDEDBh; DarkGreen Dd 03E3CBCCFh,03E9E9EA1h,03E3CBCCFh; DarkOliveGreen Dd 03E9E9EA1h,03E9E9EA1h,03E3CBCCFh; DarkOrchid Dd 03F19999Ah,03E48C8ACh,03F4CCCCDh; DarkSlateBlue Dd 03ED6D6DCh,03E0C8C93h,03F0E8E93h; DarkSlateGray Dd 03E3CBCCFh,03E9E9EA1h,03E9E9EA1h; DarkSlateGrey Dd 03E3CBCCFh,03E9E9EA1h,03E9E9EA1h; DarkTurquoise Dd 03EE0E0EBh,03F13939Ah,03F5BDBE4h; Firebrick Dd 03F0E8E93h,03E0C8C93h,03E0C8C93h; ForestGreen Dd 03E0C8C93h,03F0E8E93h,03E0C8C93h; Gold Dd 03F4CCCCDh,03EFEFEF8h,03E48C8ACh; Goldenrod Dd 03F5BDBE4h,03F5BDBE4h,03EE0E0EBh; GreenYellow Dd 03F13939Ah,03F5BDBE4h,03EE0E0EBh; IndianRed Dd 03E9E9EA1h,03E3CBCCFh,03E3CBCCFh; Khaki Dd 03F1F9F99h,03F1F9F99h,03EBEBEBEh; LightBlue Dd 03F3FBFC6h,03F58D8DCh,03F58D8DCh; LightSteelBlue Dd 03F0F8F8Ah,03F0F8F8Ah,03F3CBCBEh; LimeGreen Dd 03E48C8ACh,03F4CCCCDh,03E48C8ACh; Maroon Dd 03F0E8E93h,03E0C8C93h,03ED6D6DCh; MediumAquamarine Dd 03E48C8ACh,03F4CCCCDh,03F19999Ah; MediumBlue Dd 03E48C8ACh,03E48C8ACh,03F4CCCCDh; MediumForestGreen Dd 03ED6D6DCh,03F0E8E93h,03E0C8C93h; MediumGoldenrod Dd 03F6AEAEAh,03F6AEAEAh,03F2DADA7h; MediumOrchid Dd 03F13939Ah,03EE0E0EBh,03F5BDBE4h; MediumSeaGreen Dd 03E848494h,03EDEDEDBh,03E848494h; MediumSlateBlue Dd 03EFEFEF8h,03F800000h,000000000h; MediumSpringGreen Dd 03EFEFEF8h,03F800000h,000000000h; MediumTurquoise Dd 03EE0E0EBh,03F5BDBE4h,03F5BDBE4h; MediumVioletRed Dd 03F5BDBE4h,03EE0E0EBh,03F13939Ah; MidnightBlue Dd 03E3CBCCFh,03E3CBCCFh,03E9E9EA1h; Navy Dd 03E0C8C93h,03E0C8C93h,03F0E8E93h; NavyBlue Dd 03E0C8C93h,03E0C8C93h,03F0E8E93h; Orange Dd 03F800000h,03F000000h,000000000h; OrangeRed Dd 03F800000h,03EFEFEF8h,000000000h; Orchid Dd 03F5BDBE4h,03EE0E0EBh,03F5BDBE4h; PaleGreen Dd 03F0F8F8Ah,03F3CBCBEh,03F0F8F8Ah; Pink Dd 03F3CBCBEh,03F0F8F8Ah,03F0F8F8Ah; Plum Dd 03F6AEAEAh,03F2DADA7h,03F6AEAEAh; Salmon Dd 03EDEDEDBh,03E848494h,03E848494h; SeaGreen Dd 03E0C8C93h,03F0E8E93h,03ED6D6DCh; Sienna Dd 03F0E8E93h,03ED6D6DCh,03E0C8C93h; SkyBlue Dd 03E48C8ACh,03F19999Ah,03F4CCCCDh; SlateBlue Dd 000000000h,03EFEFEF8h,03F800000h; SpringGreen Dd 000000000h,03F800000h,03EFEFEF8h; SteelBlue Dd 03E0C8C93h,03ED6D6DCh,03F0E8E93h; Tan Dd 03F5BDBE4h,03F13939Ah,03EE0E0EBh; Thistle Dd 03F58D8DCh,03F3FBFC6h,03F58D8DCh; Turquoise Dd 03F2DADA7h,03F6AEAEAh,03F6AEAEAh; Violet Dd 03E9E9EA1h,03E3CBCCFh,03E9E9EA1h; VioletRed Dd 03F4CCCCDh,03E48C8ACh,03F19999Ah; Wheat Dd 03F58D8DCh,03F58D8DCh,03F3FBFC6h; YellowGreen Dd 03F19999Ah,03F4CCCCDh,03E48C8ACh; SummerSky Dd 03E6147AEh,03F30A3D7h,03F5EB852h; RichBlue Dd 03EB33333h,03EB33333h,03F2B851Fh; Brass Dd 03F35C28Fh,03F266666h,03E851EB8h; Copper Dd 03F3851ECh,03EE66666h,03E4CCCCDh; Bronze Dd 03F0CCCCDh,03EF0A3D7h,03E0F5C29h; Bronze2 Dd 03F266666h,03EFAE148h,03E75C28Fh; Silver Dd 03F666666h,03F68F5C3h,03F7AE148h; BrightGold Dd 03F59999Ah,03F59999Ah,03DCCCCCDh; OldGold Dd 03F4F5C29h,03F35C28Fh,03E6B851Fh; Feldspar Dd 03F51EB85h,03F11EB85h,03EEB851Fh; Quartz Dd 03F59999Ah,03F59999Ah,03F733333h; NeonPink Dd 03F800000h,03EDC28F6h,03F47AE14h; DarkPurple Dd 03F07AE14h,03DF5C28Fh,03EF0A3D7h; NeonBlue Dd 03E99999Ah,03E99999Ah,03F800000h; CoolCopper Dd 03F59999Ah,03F07AE14h,03DCCCCCDh; MandarinOrange Dd 03F63D70Ah,03EF0A3D7h,03E4CCCCDh; LightWood Dd 03F68F5C3h,03F428F5Ch,03F266666h; MediumWood Dd 03F266666h,03F000000h,03EC7AE14h; DarkWood Dd 03F051EB8h,03EBD70A4h,03E851EB8h; SpicyPink Dd 03F800000h,03DE147AEh,03F2E147Bh; SemiSweetChoc Dd 03ED70A3Dh,03E851EB8h,03E19999Ah; BakersChoc Dd 03EB851ECh,03E4CCCCDh,03DB851ECh; Flesh Dd 03F75C28Fh,03F4CCCCDh,03F30A3D7h; NewTan Dd 03F6B851Fh,03F47AE14h,03F1EB852h; NewMidnightBlue Dd 000000000h,000000000h,03F1C28F6h; VeryDarkBrown Dd 03EB33333h,03E23D70Ah,03E0F5C29h; DarkBrown Dd 03EB851ECh,03E800000h,03E4CCCCDh; DarkTan Dd 03F170A3Dh,03ED1EB85h,03E9EB852h; GreenCopper Dd 03EA3D70Ah,03EFAE148h,03EEB851Fh; DkGreenCopper Dd 03E947AE1h,03EEB851Fh,03EDC28F6h; DustyRose Dd 03F051EB8h,03EC7AE14h,03EC7AE14h; HuntersGreen Dd 03E051EB8h,03EBD70A4h,03E9EB852h; Scarlet Dd 03F0CCCCDh,03DB851ECh,03DB851ECh; ; Nom Associe au pigment _Gray05 Db 'Gray05',0 _Gray10 Db 'Gray10',0 _Gray15 Db 'Gray15',0 _Gray20 Db 'Gray20',0 _Gray25 Db 'Gray25',0 _Gray30 Db 'Gray30',0 _Gray35 Db 'Gray35',0 _Gray40 Db 'Gray40',0 _Gray45 Db 'Gray45',0 _Gray50 Db 'Gray50',0 _Gray55 Db 'Gray55',0 _Gray60 Db 'Gray60',0 _Gray65 Db 'Gray65',0 _Gray70 Db 'Gray70',0 _Gray75 Db 'Gray75',0 _Gray80 Db 'Gray80',0 _Gray85 Db 'Gray85',0 _Gray90 Db 'Gray90',0 _Gray95 Db 'Gray95',0 _DimGray Db 'DimGray',0 _DimGrey Db 'DimGrey',0 _Gray Db 'Gray',0 _Grey Db 'Grey',0 _LightGray Db 'LightGray',0 _LightGrey Db 'LightGrey',0 _VLightGrey Db 'VLightGrey',0 _White Db 'White',0 _Red Db 'Red',0 _Green Db 'Green',0 _Blue Db 'Blue',0 _Yellow Db 'Yellow',0 _Cyan Db 'Cyan',0 _Magenta Db 'Magenta',0 _Black Db 'Black',0 _Aquamarine Db 'Aquamarine',0 _BlueViolet Db 'BlueViolet',0 _Brown Db 'Brown',0 _CadetBlue Db 'CadetBlue',0 _Coral Db 'Coral',0 _CornflowerBlue Db 'CornflowerBlue',0 _DarkGreen Db 'DarkGreen',0 _DarkOliveGreen Db 'DarkOliveGreen',0 _DarkOrchid Db 'DarkOrchid',0 _DarkSlateBlue Db 'DarkSlateBlue',0 _DarkSlateGray Db 'DarkSlateGray',0 _DarkSlateGrey Db 'DarkSlateGrey',0 _DarkTurquoise Db 'DarkTurquoise',0 _Firebrick Db 'Firebrick',0 _ForestGreen Db 'ForestGreen',0 _Gold Db 'Gold',0 _Goldenrod Db 'Goldenrod',0 _GreenYellow Db 'GreenYellow',0 _IndianRed Db 'IndianRed',0 _Khaki Db 'Khaki',0 _LightBlue Db 'LightBlue',0 _LightSteelBlue Db 'LightSteelBlue',0 _LimeGreen Db 'LimeGreen',0 _Maroon Db 'Maroon',0 _MediumAquamarine Db 'MediumAquamarine',0 _MediumBlue Db 'MediumBlue',0 _MediumForestGreen Db 'MediumForestGreen',0 _MediumGoldenrod Db 'MediumGoldenrod',0 _MediumOrchid Db 'MediumOrchid',0 _MediumSeaGreen Db 'MediumSeaGreen',0 _MediumSlateBlue Db 'MediumSlateBlue',0 _MediumSpringGreen Db 'MediumSpringGreen',0 _MediumTurquoise Db 'MediumTurquoise',0 _MediumVioletRed Db 'MediumVioletRed',0 _MidnightBlue Db 'MidnightBlue',0 _Navy Db 'Navy',0 _NavyBlue Db 'NavyBlue',0 _Orange Db 'Orange',0 _OrangeRed Db 'OrangeRed',0 _Orchid Db 'Orchid',0 _PaleGreen Db 'PaleGreen',0 _Pink Db 'Pink',0 _Plum Db 'Plum',0 _Salmon Db 'Salmon',0 _SeaGreen Db 'SeaGreen',0 _Sienna Db 'Sienna',0 _SkyBlue Db 'SkyBlue',0 _SlateBlue Db 'SlateBlue',0 _SpringGreen Db 'SpringGreen',0 _SteelBlue Db 'SteelBlue',0 _Tan Db 'Tan',0 _Thistle Db 'Thistle',0 _Turquoise Db 'Turquoise',0 _Violet Db 'Violet',0 _VioletRed Db 'VioletRed',0 _Wheat Db 'Wheat',0 _YellowGreen Db 'YellowGreen',0 _SummerSky Db 'SummerSky',0 _RichBlue Db 'RichBlue',0 _Brass Db 'Brass',0 _Copper Db 'Copper',0 _Bronze Db 'Bronze',0 _Bronze2 Db 'Bronze2',0 _Silver Db 'Silver',0 _BrightGold Db 'BrightGold',0 _OldGold Db 'OldGold',0 _Feldspar Db 'Feldspar',0 _Quartz Db 'Quartz',0 _NeonPink Db 'NeonPink',0 _DarkPurple Db 'DarkPurple',0 _NeonBlue Db 'NeonBlue',0 _CoolCopper Db 'CoolCopper',0 _MandarinOrange Db 'MandarinOrange',0 _LightWood Db 'LightWood',0 _MediumWood Db 'MediumWood',0 _DarkWood Db 'DarkWood',0 _SpicyPink Db 'SpicyPink',0 _SemiSweetChoc Db 'SemiSweetChoc',0 _BakersChoc Db 'BakersChoc',0 _Flesh Db 'Flesh',0 _NewTan Db 'NewTan',0 _NewMidnightBlue Db 'NewMidnightBlue',0 _VeryDarkBrown Db 'VeryDarkBrown',0 _DarkBrown Db 'DarkBrown',0 _DarkTan Db 'DarkTan',0 _GreenCopper Db 'GreenCopper',0 _DkGreenCopper Db 'DkGreenCopper',0 _DustyRose Db 'DustyRose',0 _HuntersGreen Db 'HuntersGreen',0 _Scarlet Db 'Scarlet',0 ; Table des Couleurs PigmentTab: Dw Offset Gray05 , Offset _Gray05 Dw Offset Gray10 , Offset _Gray10 Dw Offset Gray15 , Offset _Gray15 Dw Offset Gray20 , Offset _Gray20 Dw Offset Gray25 , Offset _Gray25 Dw Offset Gray30 , Offset _Gray30 Dw Offset Gray35 , Offset _Gray35 Dw Offset Gray40 , Offset _Gray40 Dw Offset Gray45 , Offset _Gray45 Dw Offset Gray50 , Offset _Gray50 Dw Offset Gray55 , Offset _Gray55 Dw Offset Gray60 , Offset _Gray60 Dw Offset Gray65 , Offset _Gray65 Dw Offset Gray70 , Offset _Gray70 Dw Offset Gray75 , Offset _Gray75 Dw Offset Gray80 , Offset _Gray80 Dw Offset Gray85 , Offset _Gray85 Dw Offset Gray90 , Offset _Gray90 Dw Offset Gray95 , Offset _Gray95 Dw Offset DimGray , Offset _DimGray Dw Offset DimGrey , Offset _DimGrey Dw Offset Gray , Offset _Gray Dw Offset Grey , Offset _Grey Dw Offset LightGray , Offset _LightGray Dw Offset LightGrey , Offset _LightGrey Dw Offset VLightGrey , Offset _VLightGrey Dw Offset White , Offset _White Dw Offset Red , Offset _Red Dw Offset Green , Offset _Green Dw Offset Blue , Offset _Blue Dw Offset Yellow , Offset _Yellow Dw Offset Cyan , Offset _Cyan Dw Offset Magenta , Offset _Magenta Dw Offset Black , Offset _Black Dw Offset Aquamarine , Offset _Aquamarine Dw Offset BlueViolet , Offset _BlueViolet Dw Offset Brown , Offset _Brown Dw Offset CadetBlue , Offset _CadetBlue Dw Offset Coral , Offset _Coral Dw Offset CornflowerBlue , Offset _CornflowerBlue Dw Offset DarkGreen , Offset _DarkGreen Dw Offset DarkOliveGreen , Offset _DarkOliveGreen Dw Offset DarkOrchid , Offset _DarkOrchid Dw Offset DarkSlateBlue , Offset _DarkSlateBlue Dw Offset DarkSlateGray , Offset _DarkSlateGray Dw Offset DarkSlateGrey , Offset _DarkSlateGrey Dw Offset DarkTurquoise , Offset _DarkTurquoise Dw Offset Firebrick , Offset _Firebrick Dw Offset ForestGreen , Offset _ForestGreen Dw Offset Gold , Offset _Gold Dw Offset Goldenrod , Offset _Goldenrod Dw Offset GreenYellow , Offset _GreenYellow Dw Offset IndianRed , Offset _IndianRed Dw Offset Khaki , Offset _Khaki Dw Offset LightBlue , Offset _LightBlue Dw Offset LightSteelBlue , Offset _LightSteelBlue Dw Offset LimeGreen , Offset _LimeGreen Dw Offset Maroon , Offset _Maroon Dw Offset MediumAquamarine , Offset _MediumAquamarine Dw Offset MediumBlue , Offset _MediumBlue Dw Offset MediumForestGreen, Offset _MediumForestGreen Dw Offset MediumGoldenrod , Offset _MediumGoldenrod Dw Offset MediumOrchid , Offset _MediumOrchid Dw Offset MediumSeaGreen , Offset _MediumSeaGreen Dw Offset MediumSlateBlue , Offset _MediumSlateBlue Dw Offset MediumSpringGreen, Offset _MediumSpringGreen Dw Offset MediumTurquoise , Offset _MediumTurquoise Dw Offset MediumVioletRed , Offset _MediumVioletRed Dw Offset MidnightBlue , Offset _MidnightBlue Dw Offset Navy , Offset _Navy Dw Offset NavyBlue , Offset _NavyBlue Dw Offset Orange , Offset _Orange Dw Offset OrangeRed , Offset _OrangeRed Dw Offset Orchid , Offset _Orchid Dw Offset PaleGreen , Offset _PaleGreen Dw Offset Pink , Offset _Pink Dw Offset Plum , Offset _Plum Dw Offset Salmon , Offset _Salmon Dw Offset SeaGreen , Offset _SeaGreen Dw Offset Sienna , Offset _Sienna Dw Offset SkyBlue , Offset _SkyBlue Dw Offset SlateBlue , Offset _SlateBlue Dw Offset SpringGreen , Offset _SpringGreen Dw Offset SteelBlue , Offset _SteelBlue Dw Offset Tan , Offset _Tan Dw Offset Thistle , Offset _Thistle Dw Offset Turquoise , Offset _Turquoise Dw Offset Violet , Offset _Violet Dw Offset VioletRed , Offset _VioletRed Dw Offset Wheat , Offset _Wheat Dw Offset YellowGreen , Offset _YellowGreen Dw Offset SummerSky , Offset _SummerSky Dw Offset RichBlue , Offset _RichBlue Dw Offset Brass , Offset _Brass Dw Offset Copper , Offset _Copper Dw Offset Bronze , Offset _Bronze Dw Offset Bronze2 , Offset _Bronze2 Dw Offset Silver , Offset _Silver Dw Offset BrightGold , Offset _BrightGold Dw Offset OldGold , Offset _OldGold Dw Offset Feldspar , Offset _Feldspar Dw Offset Quartz , Offset _Quartz Dw Offset NeonPink , Offset _NeonPink Dw Offset DarkPurple , Offset _DarkPurple Dw Offset NeonBlue , Offset _NeonBlue Dw Offset CoolCopper , Offset _CoolCopper Dw Offset MandarinOrange , Offset _MandarinOrange Dw Offset LightWood , Offset _LightWood Dw Offset MediumWood , Offset _MediumWood Dw Offset DarkWood , Offset _DarkWood Dw Offset SpicyPink , Offset _SpicyPink Dw Offset SemiSweetChoc , Offset _SemiSweetChoc Dw Offset BakersChoc , Offset _BakersChoc Dw Offset Flesh , Offset _Flesh Dw Offset NewTan , Offset _NewTan Dw Offset NewMidnightBlue , Offset _NewMidnightBlue Dw Offset VeryDarkBrown , Offset _VeryDarkBrown Dw Offset DarkBrown , Offset _DarkBrown Dw Offset DarkTan , Offset _DarkTan Dw Offset GreenCopper , Offset _GreenCopper Dw Offset DkGreenCopper , Offset _DkGreenCopper Dw Offset DustyRose , Offset _DustyRose Dw Offset HuntersGreen , Offset _HuntersGreen Dw Offset Scarlet , Offset _Scarlet Dw -1 , -1 Align 16 ; les constantes de Mik.Pas GradBase DD 90 Xmax DD 159 ;319 Ymax DD 119 ;239 Xmax2 DD 159 ;319 Ymax2 DD 119 ;239 PicSizeWc DD 10.0 PixRat DD 1.0 Half1 DD 0.5 Quater DD 0.25 aQuater DD -2 Is1 DD 1.0 IsZero DD 0.0 Mul255 DD 255 Infinity DD 060AD78ECh ; 10E20 Epsilon DD 02EDBE6FFh ; 10E-10 Pow10S DD -10.0 MaxRekDep Equ 5 AttenEps DD 0.01 Abank_R DW 0 DestSeg DW 0A000h Xrotate DD 0.0 ; Rotation sur l'axe des z !! DD 0.0 DD 1.0 Eye DD 0.0 ; V3t.X DD -20.0 ; V3t.Y DD 0.1 ; V3t.Z LightV DD -20.0 ; V3t.X DD -20.0 ; V3t.Y DD 10.0 ; V3t.Z LightC DD 1.0 ; Ct.R DD 1.0 ; Ct.G DD 1.0 ; Ct.B AmbC DD 0.15 ; Ct.R DD 0.15 ; Ct.G DD 0.15 ; Ct.B ; Base a y = -1.0 pour rotation visuelle autour du point 0,0,0 ; Les Trois Spheres representant le Mickey K1 DD 0.0 ; SphereT.m.X DD -1.0 ; SphereT.m.Y DD 0.0 ; SphereT.m.Z DD 4.0 ; SphereT.Sqrr K2 DD -1.50 ; SphereT.m.X DD -1.00 ; SphereT.m.Y DD 1.50 ; SphereT.m.Z DD 1.00 ; SphereT.Sqrr K3 DD +1.50 ; SphereT.m.X DD -1.00 ; SphereT.m.Y DD 1.50 ; SphereT.m.Z DD 1.00 ; SphereT.Sqrr K4 DD 0.0 ; SphereT.m.X DD -2.625; SphereT.m.Y DD 0.0 ; SphereT.m.Z DD 0.25 ; SphereT.Sqrr ObnrMax Dw 4 ObnrIs Dw Offset K1 ; Equ 1 ; Quatre Sphere = un Mickey Dw Offset K2 ; Equ 2 ; Dw Offset K3 ; Equ 3 ; Dw Offset K4 ; Equ 4 ; K1Surf DD 1.0 ;Ct <1.0,1.0,1.0> DD 0.5 DD 1.0 DD 100.0 DD 1.0 Dw Faux Dw Faux DD 0.5 ;Ct < 0.5,0.5,0.5 > DD 0.5 DD 0.5 DD 1.0 ;Ct < 1.0,1.0,1.0 > DD 1.0 DD 1.0 Dw Offset EqOdProc Dw Offset EqNrmProc K2Surf DD 0.5 ;Ct <0.5,0.6,0.7> DD 0.6 DD 0.7 DD 100.0 DD 1.0 Dw Faux Dw Faux DD 0.5 ;Ct < 0.5,0.5,0.5 > DD 0.5 DD 0.5 DD 1.0 ;Ct < 1.0,1.0,1.0 > DD 1.0 DD 1.0 Dw Offset EqOdProc Dw Offset EqNrmProc K3Surf: ;Ct <0,0,0> DD 0.2 DD 0.3 DD 0.4 DD 100.0 DD 1.0 Dw Faux Dw Faux DD 0.5 ;Ct < 0.5,0.5,0.5 > DD 0.5 DD 0.5 DD 1.0 ;Ct < 1.0,1.0,1.0 > DD 1.0 DD 1.0 Dw Offset EqOdProc Dw Offset EqNrmProc K4Surf: ;Ct <1.0,1.0,1.0> DD 0.9 DD 0.8 DD 0.7 DD 100.0 DD 1.0 Dw Faux Dw Faux DD 0.5 ;Ct < 0.5,0.5,0.5 > DD 0.5 DD 0.5 DD 1.0 ;Ct < 1.0,1.0,1.0 > DD 1.0 DD 1.0 Dw Offset EqOdProc Dw Offset EqNrmProc SurfIs Dw Offset K1Surf Dw Offset K2Surf Dw Offset K3Surf Dw Offset K4Surf ; Les Data en valorisations au demarrage Ra RayT <> Vh V3t <> Vr V3t <> Hv V3t <> Nh V3t <> Cct Ct <> KeyStop Dw Faux ; Quelque Macros debilisante CoordCopy Macro De,Vers Mov Eax,Dword Ptr Cs:[De.X] Mov Dword Ptr Cs:[Vers.X],Eax Mov Eax,Dword Ptr Cs:[De.Y] Mov Dword Ptr Cs:[Vers.Y],Eax Mov Eax,Dword Ptr Cs:[De.Z] Mov Dword Ptr Cs:[Vers.Z],Eax EndM ColorCopy Macro De,Vers Mov Eax,Dword Ptr Cs:[De.R] Mov Dword Ptr Cs:[Vers.R],Eax Mov Eax,Dword Ptr Cs:[De.G] Mov Dword Ptr Cs:[Vers.G],Eax Mov Eax,Dword Ptr Cs:[De.B] Mov Dword Ptr Cs:[Vers.B],Eax EndM ; Additif pour avoir un rotation de vecteur ! ; Variable Rattache a DefineMatrix MatriceE Matrice <> Grad DD 0 GradSin DD 0 GradCos DD 0 GradCosNeg DD 0 Theta DD 0 DefineMatrix Proc Near Mov Dword Ptr Theta,Eax ; Calcul le Sinus & le Cosinus de Grad Finit Nop FLD Dword Ptr Theta FSinCos Fwait Nop FSTP DWORD Ptr GradCos ; Depile St(0) Dans GradCos FSTP DWORD Ptr GradSin ; Depile St(0) Dans GradSin ; Calcul 1-GradCos FLD Dword Ptr GradCos FLD1 FSub St(0),St(1) FST Dword Ptr GradCosNeg ; Stoque St(0) Fwait Nop FLD (Vector Ptr ES:[SI]).Vector_1 ; Charge Vecteur X FSQRT ; Calcul Racine Carre de Vecteur X FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos FLD Dword Ptr GradCos ; Charge GradCos FADD St(0),St(1) ; Addition St(0),St(1); FSTP (Matrice Ptr DS:[DI]).Matrice1_1 Fwait Nop Fld Dword Ptr GradCosNeg Fld (Vector Ptr ES:[SI]).Vector_2 FSQRT ; Calcul Racine Carre de Vecteur X FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos FLD Dword Ptr GradCos ; Charge GradCos FADD St(0),St(1) ; Addition St(0),St(1); FSTP (Matrice Ptr DS:[DI]).Matrice2_2 Fwait Nop Fld Dword Ptr GradCosNeg Fld (Vector Ptr ES:[SI]).Vector_3 FSQRT ; Calcul Racine Carre de Vecteur X FMUL St(0),ST(1) ; Multiplie sqrt(VecteurX) * 1-GradCos FLD Dword Ptr GradCos ; Charge GradCos FADD St(0),St(1) ; Addition St(0),St(1); FSTP (Matrice Ptr DS:[DI]).Matrice3_3 Fwait Nop Finit Nop FLD Dword Ptr GradSin FLD (Vector Ptr ES:[SI]).Vector_3 FMul St(0),St(1) FSTP (Matrice Ptr DS:[DI]).Matrice1_2 FLD (Vector Ptr ES:[SI]).Vector_2 FMul St(0),St(1) Fstp (Matrice Ptr DS:[DI]).Matrice1_3 FLD (Vector Ptr ES:[SI]).Vector_1 FMul St(0),St(1) Fstp (Matrice Ptr DS:[DI]).Matrice2_3 Fwait Nop Finit Nop FLD Dword Ptr GradCosNeg FLD (Vector Ptr ES:[SI]).Vector_1 Fmul St(0),St(1) FLD (Vector Ptr ES:[SI]).Vector_2 Fmul st(0),St(1) FLD (Matrice Ptr DS:[DI]).Matrice1_2 FLDZ FADD St(0),St(2) FSUB St(0),St(1) FSTP (Matrice Ptr DS:[DI]).Matrice2_1 FXCH St(1) FADD St(0),St(1) FSTP (Matrice Ptr DS:[DI]).Matrice1_2 FLD (Vector Ptr ES:[SI]).Vector_3 Fmul St(0),St(2) FldZ Fadd St(0),St(1) Fld (Matrice Ptr DS:[DI]).Matrice2_3 FXCH St(1) Fsub St(0),St(1) FSTP (Matrice Ptr DS:[DI]).Matrice3_1 ; Fadd St(0),St(1) FSTP (Matrice Ptr DS:[DI]).Matrice1_3 FLD (Matrice Ptr DS:[DI]).Matrice2_3 FLD (Vector Ptr ES:[SI]).Vector_2 Fmul St(0),St(5) Fld (Vector Ptr ES:[SI]).Vector_3 Fmul St(0),St(1) FldZ Fadd St(0),St(1) Fsub St(0),St(3) FSTP (Matrice Ptr DS:[DI]).Matrice3_2 ; Fadd St(0),St(2) FSTP (Matrice Ptr DS:[DI]).Matrice2_3 ; Finit Fwait Nop RetN DefineMatrix EndP NouvRot Vector <?> Rotation Proc Near Finit Nop FLD (Matrice Ptr DS:[DI]).Matrice1_1 FLD (Vector Ptr ES:[SI]).Vector_1 Fmul St(0),St(1) Fld (Matrice Ptr DS:[DI]).Matrice1_2 Fld (Vector Ptr ES:[SI]).Vector_2 Fmul St(0),St(1) Fadd St(0),St(2); Fld (Matrice Ptr DS:[DI]).Matrice1_3 Fld (Vector Ptr ES:[SI]).Vector_3 Fmul St(0),St(1) Fadd St(0),St(2); Fstp Dword Ptr NouvRot.Vector_1 Finit Nop FLD (Matrice Ptr DS:[DI]).Matrice2_1 FLD (Vector Ptr ES:[SI]).Vector_1 Fmul St(0),St(1) Fld (Matrice Ptr DS:[DI]).Matrice2_2 Fld (Vector Ptr ES:[SI]).Vector_2 Fmul St(0),St(1) Fadd St(0),St(2); Fld (Matrice Ptr DS:[DI]).Matrice2_3 Fld (Vector Ptr ES:[SI]).Vector_3 Fmul St(0),St(1) Fadd St(0),St(2); Fstp Dword Ptr NouvRot.Vector_2 Finit Nop FLD (Matrice Ptr DS:[DI]).Matrice3_1 FLD (Vector Ptr ES:[SI]).Vector_1 Fmul St(0),St(1) Fld (Matrice Ptr DS:[DI]).Matrice3_2 Fld (Vector Ptr ES:[SI]).Vector_2 Fmul St(0),St(1) Fadd St(0),St(2); Fld (Matrice Ptr DS:[DI]).Matrice3_3 Fld (Vector Ptr ES:[SI]).Vector_3 Fmul St(0),St(1) Fadd St(0),St(2); Fstp Dword Ptr NouvRot.Vector_3 Mov Eax,Dword Ptr NouvRot.Vector_1 Mov (Vector Ptr ES:[SI]).Vector_1,Eax Mov Eax,Dword Ptr NouvRot.Vector_2 Mov (Vector Ptr ES:[SI]).Vector_2,Eax Mov Eax,Dword Ptr NouvRot.Vector_3 Mov (Vector Ptr ES:[SI]).Vector_3,Eax RetN Rotation EndP CopyColor Proc Near Mov Cx,3 enHaut: Mov Eax,Dword Ptr Cs:[Si] Mov Dword Ptr Cs:[Di],Eax Add Di,4 Add Si,4 Dec Cx Jnz enHaut RetN CopyColor EndP ;þþ EqOdProc proc Near RetN EqOdProc Endp EqNrmProc proc Near Retn EqNrmProc Endp ;þþ Validation Align 16 Norm Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý) FMul St,St(0) ; FLD (V3t Ptr DS:[DI]).Y ; FMul St,St(0) ; FADD ; FLD (V3t Ptr DS:[DI]).Z ; FMul St,St(0) ; FADD FSQRT FSTP Dword Ptr CS:[BX] RetN Norm EndP ;þþ Validation Align 16 NormSphere Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie FLD (V3t Ptr DS:[DI]).X ; (xý+yý+zý) FMul St,St(0) ; FLD (V3t Ptr DS:[DI]).Y ; FMul St,St(0) ; FAdd ; FLD (V3t Ptr DS:[DI]).Z ; FMul St,St(0) ; FAdd ; FSTP Dword Ptr CS:[BX] ; RetN NormSphere EndP ;þþ Validation Align 16 NormCylY Proc ; DS:DI pointe sur V V3t ; ES:BX Pointe sur Single en Sortie FLD (V3t Ptr DS:[DI]).X ; (xý+zý) FMul St,St(0) ; FLD (V3t Ptr DS:[DI]).Z ; FMul St,St(0) ; FADD FSTP Dword Ptr CS:[BX] RetN NormCylY EndP ;þþ Validation Align 16 Norm_ Proc ; DS:DI pointe sur V V3t ; St(0) = Resultat FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý) FMul St,St(0) ; FLD (V3t Ptr DS:[DI]).Y ; FMul St,St(0) FADD FLD (V3t Ptr DS:[DI]).Z FMul St,St(0) FADD FSQRT RetN Norm_ EndP ;þþ Validation Align 16 NormSphere_ Proc ; DS:DI pointe sur V V3t ; St(0) = Resultat FLD (V3t Ptr DS:[DI]).X ; û(xý+yý+zý) FMul St,St(0) ; FLD (V3t Ptr DS:[DI]).Y ; FMul St,St(0) FADD FLD (V3t Ptr DS:[DI]).Z FMul St,St(0) FADD FSQRT RetN NormSphere_ EndP ;þþ Validation Align 16 Normalize Proc ; Assume DS:[DI] Pointe sur V3t Enter 4,0 Call Norm_ FST Dword Ptr Cs:[Bp-4] Call ErrEps FLD (V3t Ptr CS:[DI]).X FLD Dword Ptr Cs:[Bp-4] FDIV FSTP (V3t Ptr CS:[DI]).X FLD (V3t Ptr CS:[DI]).Y FLD Dword Ptr Cs:[Bp-4] FDIV FSTP (V3t Ptr CS:[DI]).Y FLD (V3t Ptr CS:[DI]).Z FLD Dword Ptr Cs:[Bp-4] FDIV FSTP (V3t Ptr CS:[DI]).Z Leave RetN Normalize EndP Even Vsum Proc Near ; Assume ES:[SI] Valeur en Sortie ; DS:DI a:V3t Ds:Bx b:V3t FLD (V3t Ptr CS:[DI]).X ; ( a+b ) FLD (V3t Ptr CS:[BX]).X ; FAdd ; Fstp (V3t Ptr CS:[SI]).X ; FLD (V3t Ptr CS:[DI]).Y FLD (V3t Ptr CS:[BX]).Y FAdd Fstp (V3t Ptr CS:[SI]).Y FLD (V3t Ptr CS:[DI]).Z FLD (V3t Ptr CS:[BX]).Z FAdd Fstp (V3t Ptr CS:[SI]).Z RetN Vsum EndP ; Retour de Procedure copro status normal Vdif Proc Near ; Assume ES:[SI] Valeur en Sortie ; DS:DI a:V3t Ds:Bx b:V3t FLD (V3t Ptr CS:[DI]).X ; ( a-b ) FLD (V3t Ptr CS:[BX]).X ; FSub ; Fstp (V3t Ptr CS:[SI]).X ; FLD (V3t Ptr CS:[DI]).Y FLD (V3t Ptr CS:[BX]).Y FSub Fstp (V3t Ptr CS:[SI]).Y FLD (V3t Ptr CS:[DI]).Z FLD (V3t Ptr CS:[BX]).Z FSub Fstp (V3t Ptr CS:[SI]).Z RetN Vdif EndP Comment# TraceVdif Proc Near FLD Dword Ptr Cs:[Eye].X ; ( a-b ) FLD Dword Ptr Cs:[Trace_p].X ; FSub ; Fstp Dword Ptr Cs:[Trace_Ve].X ; FLD Dword Ptr Cs:[Eye].Y FLD Dword Ptr Cs:[Trace_P].Y FSub Fstp Dword Ptr Cs:[Trace_Ve].Y FLD Dword Ptr Ds:[Eye].Z FLD (V3t Ptr DS:[Trace_p]).Z FSub Fstp Dword Ptr Es:[Trace_ve].Z RetN TraceVdif EndP Comment# GetNrmVdif Proc Near FLD (V3t Ptr DS:[DI]).X ; FLD (V3t Ptr DS:)[Trace_p].X ; ( a-b ) FSub ; Fstp (V3t Ptr ES:[Trace_n]).X ; FLD (V3t Ptr DS:[DI]).Y FLD (V3t Ptr DS:[Trace_p]).Y FSub Fstp (V3t Ptr ES:[Trace_n]).Y FLD (V3t Ptr DS:[DI]).Z FLD (V3t Ptr DS:[Trace_p]).Z FSub Fstp (V3t Ptr ES:[Trace_n]).Z RetN GetNrmVdif EndP Kmul Proc Near; Es:[Si] V3t En Modification ; Cs:Bx Offset Single ; DS:[Di] V3t En Multiplication FLD Dword Ptr Cs:[Bx] FLD (V3t Ptr DS:[DI]).X Fmul FSTP Dword Ptr Es:[Si].X FLD Dword Ptr Cs:[Bx] FLD (V3t Ptr DS:[DI]).Y Fmul FSTP Dword Ptr Es:[Si].Y FLD Dword Ptr Cs:[Bx] FLD (V3t Ptr DS:[DI]).Z Fmul FSTP Dword Ptr Es:[Si].Z RetN Kmul EndP Smul Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result Es:[Si] FLD (V3t Ptr DS:[DI]).X FLD (V3t Ptr DS:[BX]).X Fmul FLD (V3t Ptr DS:[DI]).Y FLD (V3t Ptr DS:[BX]).Y Fmul Fadd FLD (V3t Ptr DS:[DI]).Z FLD (V3t Ptr DS:[BX]).Z Fmul Fadd FSTP Dword Ptr ES:[SI] RetN Smul EndP Smul_ Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result St(0) FLD (V3t Ptr DS:[DI]).X FLD (V3t Ptr DS:[BX]).X Fmul FLD (V3t Ptr DS:[DI]).Y FLD (V3t Ptr DS:[BX]).Y Fmul Fadd FLD (V3t Ptr DS:[DI]).Z FLD (V3t Ptr DS:[BX]).Z Fmul Fadd RetN Smul_ EndP Smulxz_ Proc Near; Assume Ds:[DI] Equ A [Bx] Equ B result St(0) FLD (V3t Ptr DS:[DI]).X FLD (V3t Ptr DS:[BX]).X Fmul FLD (V3t Ptr DS:[DI]).Z FLD (V3t Ptr DS:[BX]).Z Fmul Fadd RetN Smulxz_ EndP ErrEps Proc Near ; Assume St(0) = single s Fabs Fld Dword Ptr Epsilon Fxch Fcompp Fwait Fstsw Ax Test Ah,1 Jne @@RunErrEps Clc RetN @@RunErrEps: Mov Sp,0FFFEh Mov Ax,03h ; Fin de Programme Erreur Epsilon Int 10h Int 20h ErrEps EndP OldCw DW 0 NewCw DW 0 ; utilise par Pow ExpX Proc Near ; St(0) = X Enter 4,0 fldl2e ; load log2(10) fmulp st(1),st(0) ; log2(10) * argument fld st(0) ; duplicate product fstcw Word Ptr Cs:[Bp-4] ;oldcw; get old control word fwait ; wait till it arrives mov ax,Word Ptr Cs:[Bp-4];oldcw; change rounding mode and ax,0f3ffh ; field to "round down" or ax,0400h mov Word Ptr Cs:[Bp-2],Ax ;newcw,ax fldcw Word Ptr Cs:[Bp-2];newcw; force rounding mode frndint ; get int part of product fldcw Word Ptr Cs:[Bp-4];oldcw; restore old rounding mode fld st(0) ; duplicate integer part fxch st(2) ; get original product fsubrp st(1),st(0) ; find fractional part fld1 fchs fxch st(1) ; scale fractional part fscale fstp st(1) ; discard coprocessor junk f2xm1 ; raise 2 to power-1 fld1 faddp st(1),st(0) ; correct for the -1 fmul st(0),st(0) ; square result fscale ; scale by int part fstp st(1) ; discard coprocessor junk Leave RetN ExpX EndP Pow Proc Near ; x = St(0) y= St(1) retour st(0) FldlN2 Fxch Fyl2X Fmul st(0),st(1) FSTP St(1) Fld Dword Ptr Pow10S FCOMP FWAIT FSTSW AX Test AH,1 Jne @@Suite Fstp St(0) FldZ RetN @@Suite: Call ExpX ; St(0) = X RetN Pow EndP SqrSolve3 Proc Near Fld St(0) Fmul St,St(0) ; sqr(p) Fild Dword Ptr Cs:[aQuater] Fxch Fscale Fstp St(1) ; Fmulp ;st(0) sqr(p)*0.25 ; Fxch st(2) Fsub St,St(2) Fstp St(2) ; q elimin? ! Fchs ; Ici on change le signe de p Fxch Ftst FSTSW AX SAHF JB @@LamInfinity ; St(0) = d ; st(1) = p Fsqrt ; st(0) = ûd Fld Dword Ptr Cs:[Half1] Fmul st(1) st(2) ; FTST ; On teste h et 0 FSTSW AX SAHF JB @@TryL1 FLD St(1) FLD St(1) Fsub Fld Dword Ptr Cs:[Epsilon] @@SolveEpsilonL2: FUCOM FSTSW AX SAHF JA @@TurnToL1 ; Epsilon le plus grand Fstp St(0); Fstp St(2); Fstp St(0); Jmp @@RealChoice @@TurnToL1: FSTP St(0) FSTP St(0) ; Jmp @@TryL1 @@TryL1: Fadd Fld Dword Ptr Cs:[Epsilon] ; Jmp @@SolveEpsilonL1 ; @@SolveEpsilonL1: FUCOM FSTSW AX SAHF JA @@LamInfinity ; Epsilon le plus grand Fstp St(0); Jmp @@RealChoice @@LamInfinity: Fstp St(0) Fstp St(0) FLD Dword Ptr Cs:[Infinity] @@RealChoice: Retn SqrSolve3 EndP Comment# ; Modifier pour ne pas avoir de passage de paramettre ! TraceRayToPoint Proc Near ;DI,r BX,l SI,p FLD Dword Ptr Cs:[Trace_RA.RN.X] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.X] FSTP DWord Ptr Cs:[Trace_P.X] FLD Dword Ptr Cs:[Trace_RA.RN.Y] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.Y] FSTP DWord Ptr Cs:[Trace_P.Y] FLD Dword Ptr Cs:[Trace_RA.RN.Z] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.Z] FSTP DWord Ptr Cs:[Trace_P.Z] RetN TraceRayToPoint EndP Comment# ReflV_W DD 0 Reflv_V DD 0,0,0 ; Equ V3t ReflV Proc Near Xchg Bx,Di ; Mov Bx, ; ve ; Valorise a l'inverse ; Mov Di, ; n ; Call Smul_ Fadd St,St(0) Xchg Bx,Di ; St(0) = W FSTP Dword Ptr Cs:[ReflV_W] Mov Ax,Di ; Ax = Ve Mov Cx,Si ; Cx = Vr Mov Di,Bx ; Ici di = n Mov Bx,Offset ReflV_W ; Mov Di,n Mov Si,Offset ReflV_V Call Kmul ; Mov Bx,Offset ReflV_V ; Mov Di,Ax ;ve Mov Bx,Ax Mov Di,Offset ReflV_V Mov Si,Cx ;vr Call Vdif Retn ReflV EndP Comment# TransV_P DD ? TransV_Q DD ? Proc TransV ; Ve = Di, n = Bx , Dx pos d1,d2 , Si : Vt FLD (V3t Ptr DS:[DI]).X FLD (V3t Ptr DS:[BX]).X Fmul FLD (V3t Ptr DS:[DI]).Y FLD (V3t Ptr DS:[BX]).Y Fmul Fadd FLD (V3t Ptr DS:[DI]).Z FLD (V3t Ptr DS:[BX]).Z Fmul Fadd Fabs Fld Fmul St,St(0) Fld1 Fsub St(0),St(1) Push Bx ; Car Modifie Mov Bx,Dx FLD Dword Ptr Ds:[Bx] Add Bx,4 FLD Dword Ptr Ds:[Bx] FDIV Pop Bx Fld Fmul St,St(0) Fmul st(0),st(2) Fld1 Fsub St(0),St(1) FTST FSTSW AX SAHF JP @@Erreur1 JA @@D_P0 ;> P.Z > 0.0 JB @@Suite ;> P.Z < 0.0 @@Erreur1: @@D_P0: FSQRT Fld St(1) Fmul st(0),St(3) Fsub st(0),st(1) FSTP Dword Ptr Cs:TransV_Q FSTP Dword Ptr Cs:TransV_P Mov Dx,Si Mov Si,Di Mov Cx,Bx Mov Bx,Offset TransV_P Call Kmul Mov Bx,Offset TransV_Q Xchg Si,CX Mov Di,Si Call Kmul Mov Di,Cx Mov BX,Si Mov Si,Dx Call Vsum ; Plus Rien en Pile Normalement Clc RetN @@Suite: Fstp St(0) Fstp St(0) Fstp St(0) STC RetN TransV EndP Comment# Align 16 LnX Proc Near ; St(0) = X FldlN2 Fxch Fyl2X ; St(0) = Ln(X) RetN LnX EndP Align 16 SphereInter Proc Near ; Pile Interne a SphereInter @@Si_SavDx Equ [Bp-2] @@Si_P Equ [Bp-6] @@Si_Q Equ [Bp-10] @@Si_L Equ [Bp-14] @@Si_PMmNrm Equ [Bp-18] @@Si_pMm Equ [Bp-30] ; Pile Externe a SphereInter @@Si_Obrn Equ [Bp+8];Bx = Trace.Obnr ; Pas le Mettre Ici En Fait ! @@Si_Lmin Equ [Bp+4];Si = Trace.Lmin ; @@Si_R Equ [Bp+6];Di = Trace.r ; Enter 36,0 Mov Word Ptr Cs:@@Si_SavDx,Dx Dec Dx Shl Dx,1 Add Dx,Offset ObnrIs ; vdif(r.p,Sphe.m,pMm); Mov Si,Bp Sub Si,30 ; Si Devient Si_pMm Mov Bx,Dx Mov Bx,Word Ptr Cs:[Bx] ; Bx Devient Sphere K1 ou autre Mov Di,Word Ptr Cs:@@Si_R.RP Call Vdif ; pMmNrm := Norm (pMm); Mov Bx,Bp Sub Bx,18 ; Bx devient pMmNrm Mov Di,Bp Sub Di,30 ; Di Devient pMm Call NormSphere ; p := 2* smul(pMm,r.n); Mov Di,Bp Sub Di,30 ; pMp Mov Bx,Word Ptr Cs:@@Si_R Add Bx,Rn Call Smul_ Fld St(0) Fadd Fstp Dword Ptr Cs:@@Si_P ; q := sqr(pMmNrm)-Sphe.sqrr; Fld Dword Ptr Cs:@@Si_pMmNrm ;Fmul st,st(0) Mov Bx,Dx Mov Bx,Word Ptr Cs:[Bx] Fld Dword Ptr Cs:[Bx.Sqrr] Fsub ;Fstp Dword Ptr Cs:@@Si_Q ; sqrSolve ( p,q,l); ;Fld Dword Ptr Cs:@@Si_Q Fld Dword Ptr Cs:@@Si_P Call SqrSolve3 Fst Dword Ptr Cs:@@Si_L Mov Di,Word Ptr Cs:@@Si_Lmin Fld Dword Ptr Cs:[Di] FUCOMPP FSTSW AX SAHF ; if l < lmin then JBE @@NoChange ; lmin := l; Mov Dx,Word Ptr Cs:@@Si_SavDx Mov Bx,Word Ptr Cs:@@Si_Obrn Mov Ax,Word Ptr Cs:[Bx] ;Test Ax,0 ;Je @@Normal ;Fld1 ;Fchs ;Fld Dword Ptr Cs:@@Si_L ;Fld Dword Ptr Cs:[Di] ;Faddp ;Fscale ;Fstp Dword Ptr Cs:[Di] ;Fstp St(0) ;Mov Word Ptr Cs:[Bx],Dx ;Jmp @@NoChange ;;Leave ;RetN @@Normal: Mov Eax,Dword Ptr Cs:@@Si_L Mov Dword Ptr Cs:[Di],Eax ; Obnr := test; Mov Dx,Word Ptr Cs:@@Si_SavDx Mov Bx,Word Ptr Cs:@@Si_Obrn Mov Word Ptr Cs:[Bx],Dx @@NoChange: Leave RetN SphereInter EndP Align 16 InterSect Proc Near ; Bx = Trace.Obnr ; Di = Trace.r ; Si = Trace.Lmin Enter 6,0 Mov Word Ptr Cs:[Bp-2],Bx Mov Word Ptr Cs:[Bp-4],Di Mov Word Ptr Cs:[Bp-6],Si ; Normalize(r.n); ; Add Di,12 ; Call Normalize ; ; Mov Si,Word Ptr Cs:[Bp-6] Mov Di,Word Ptr Cs:[Bp-4] Fld Dword Ptr Cs:[Infinity] Fstp Dword Ptr Cs:[Si] Mov Word Ptr Cs:[Bx],0 Comment# ; If r.n.y > 0 then FLD Dword Ptr Cs:[Di.Rn.Y] FTST FSTSW AX FSTP St(0) SAHF JA @@C1True Jmp @@C1False ; Begin @@C1True: ; if r.p.y > 0 then Fld Dword Ptr Cs:[Di.Rp.Y] FTST FSTSW AX FSTP St(0) SAHF JA @@C11True Jmp @@C11False @@C11True: ; Obnr := 5 Mov Word Ptr Cs:[Bx],5 ; Jmp @@AfterC Jmp @@IsObnr5 @@C11False: ; Obnr:=0; Mov Word Ptr Cs:[Bx],0 ; Jmp @@AfterC Jmp @@Continue5 ; End ; Else ; Begin @@C1False: ; If r.p.y < 0 then FLD Dword Ptr Cs:[Di.Rp.Y] FTST FSTSW AX FSTP St(0) SAHF JB @@C12True Jmp @@C12False @@C12True: ; Obnr := 0 Mov Word Ptr Cs:[Bx],0 ; Jmp @@AfterC Jmp @@Continue5 @@C12False: ; Obnr := 5; Mov Word Ptr Cs:[Bx],5 ; Jmp @@AfterC Jmp @@IsObnr5 @@AfterC: Cmp Word Ptr Cs:[Bx],5 Jne @@Continue5 ; if Obnr = 5 Then ; begin @@IsObnr5: ; lmin:=-r.p.y/r.n.y; FLD Dword Ptr Cs:[DI.Rp.Y] FCHS FLD Dword Ptr Cs:[Di.Rn.Y] FDIVP FST Dword Ptr Cs:[Si] ; Sauvegarde de Lmin FTST FSTSW AX FSTP St(0) SAHF ; if lmin<0 then JB @@Continue5 Jmp @@OkLmin @@Continue5: ; lmin:=Infinity; Mov Eax,Dword Ptr Cs:[Infinity] Mov Dword Ptr Cs:[Si],Eax @@OkLmin: Comment# ; Bp Contient les Parametres deja passe a Intersect Push Bx Push Di Push Si Mov Dx,4 ; Numero de Sphere a tester ! Call SphereInter Mov Dx,2 Call SphereInter Mov Dx,3 Call SphereInter Mov Dx,1 Call SphereInter Pop Si Pop Di Pop Bx ; Mov Bx,Ax Leave RetN ; Elimine 6 Octets de La Pile InterSect EndP ; ToRefl:=GetNrm(ObNr,p,ve,n); Align 16 GetMnrTable Dw Offset CaseK0 ; Fond Dw Offset CaseK1 ; Boule Dw Offset CaseK2 ; Dw Offset CaseK3 ; Dw Offset CaseK4 ; Dw Offset CaseK5 ; Sol Align 16 GetNrm Proc Near Mov Bx,Word Ptr Cs:[Trace_Obnr] Shl Bx,1 Add Bx,Offset GetMnrTable Mov Bx,Word Ptr Cs:[Bx] Call Bx Jmp AfterCaseK0 CaseK1: Mov Di,Offset K1 Call GetNrmVdif Mov Di,Bp Sub Di,42 Call Normalize RetN CaseK2: Mov Di,Offset K2 Call GetNrmVdif Mov Di,Bp Sub Di,42 Call Normalize RetN CaseK3: Mov Di,Offset K3 Call GetNrmVdif Mov Di,Bp Sub Di,42 Call Normalize RetN CaseK4: Mov Di,Offset K4 Call GetNrmVdif Mov Di,Bp Sub Di,42 Call Normalize RetN CaseK5: FLDZ FST Dword Ptr Cs:[Trace_N.X] FSTP Dword Ptr Cs:[Trace_N.Z] FLD1 FSTP Dword Ptr Cs:[Trace_N.Y] RetN CaseK0: RetN AfterCaseK0: ; Effectue Smul Ve,n resultat St(0) FLD Dword Ptr Cs:[Trace_Ve].X FLD Dword Ptr Cs:[Trace_n].X Fmul FLD Dword Ptr Cs:[Trace_Ve].Y FLD Dword Ptr Cs:[Trace_n].Y Fmul Fadd FLD Dword Ptr Cs:[Trace_ve].Z FLD Dword Ptr Cs:[Trace_n].Z Fmul Fadd Ftst FSTSW AX Fstp St(0) SAHF JP @@GetNrmC1 ;Erreur1 ; If Smul(ve,n) < 0 Then JAE @@GetNrmC1 ;>= 0.0 @@Erreur1: ; kmul(-1,n,n); { remplace par un Changement de signe ca } Fld Dword Ptr Cs:[Trace_n].x Fchs Fstp Dword Ptr Cs:[Trace_n].x Fld Dword Ptr Cs:[Trace_n].y Fchs Fstp Dword Ptr Cs:[Trace_n].y Fld Dword Ptr Cs:[Trace_n].z Fchs Fstp Dword Ptr Cs:[Trace_n].z Jmp @@GetNrmC2 @@GetNrmC1: ; Fstp St(0) @@GetNrmC2: ; nn:=n; Copy simple ; Elimine pas de reflextion ; appel de NrmProc paramettre p et n Mov Di,Bp ; Normalize(n) Sub Di,42 ; Call Normalize ; ; ?limine car pas de gestion reflexion ! ;Ax = Vrais si ; (sMul(ve,n)>0) and (smul(nn,n)>0); ;Ax = Faux sinon ; Retn GetNrm EndP Ins_Obnr Dw 0 Even Ins_R DD 0,0,0,0,0,0 Ins_Lmin DD 0.001 Ins_Dummy DD 0 Even Comment# Function InShadow(p:v3T):boolean; var r:rayT; ShdNr:integer; dummy:single; begin r.p:=p; r.n:=LightV; RayToPoint(r,0.001,r.p); intersect(r,Shdnr,dummy); InShadow:=Shdnr>1; end; Comment# InShadow Proc Near ; Mov Si,Offset Ins_R.RP ; Mov Cx,3 ; @@InS_Mov1: ; Mov Eax,Dword Ptr Cs:[Di] ; Mov Dword Ptr Cs:[Si],Eax ; Add Di,4 ; Add Si,4 ; Dec Cx ; Jnz @@InS_Mov1 ; Delocalise dans le specifique RayToPoint Mov Bx,Offset LightV Mov Si,Offset Ins_R.RN Mov Cx,3 @@InS_Mov2: Mov Eax,Dword Ptr Cs:[Bx] Mov Dword Ptr Cs:[Si],Eax Add Bx,4 Add Si,4 Dec Cx Jnz @@InS_Mov2 ; Equ RayToPoint Specifique FLD Dword Ptr Cs:[Ins_R.RN.X] Fmul Dword Ptr Cs:[Ins_LMin] ; Fadd Dword Ptr Cs:[Ins_R.RP.X] Fadd Dword Ptr Cs:[DI.X] FSTP DWord Ptr Cs:[Ins_R.RP.X] FLD Dword Ptr Cs:[Ins_R.RN.Y] Fmul Dword Ptr Cs:[Ins_Lmin] ; Fadd Dword Ptr Cs:[Ins_R.RP.Y] Fadd Dword Ptr Cs:[DI.Y] FSTP DWord Ptr Cs:[Ins_R.RP.Y] FLD Dword Ptr Cs:[Ins_R.RN.Z] Fmul Dword Ptr Cs:[Ins_Lmin] ; Fadd Dword Ptr Cs:[Ins_R.RP.Z] Fadd Dword Ptr Cs:[DI.Z] FSTP DWord Ptr Cs:[Ins_R.RP.Z] ; Faire Intersect(r,Shdnr,Dummy); Mov Word Ptr Cs:[Ins_Obnr],0 Mov Di,Offset Ins_R Mov Bx,Offset Ins_Obnr Mov Si,Offset Ins_Dummy Call InterSect Mov Bx,Offset Ins_Obnr RetN InShadow EndP ; Attention Ici Pour Beneficier de L'appel Direct au paramettre contenue ; dans Trace il Faut Recalcul l'ajout sur BP ; Apres Introduction dans la routine Light_Cd Equ [Bp-2] ; Position Light_Cs Equ [Bp-14] ; Position Light_W2 Equ [Bp-18] ; Position Light_Spec Equ [Bp-22] ; Position Light_W1 Equ [Bp-26] ; Position Align 16 Light Proc Near Enter 26,0 ; Ajout pour variable de Trace ! Mov Bx,Word Ptr Cs:[Trace_Obnr][134]; A voir ! Dec Bx Shl Bx,1 Add Bx,Offset SurfIs Mov Bx,Word Ptr Cs:[Bx] Mov Word Ptr Cs:[Light_Cd],Bx ; Position sur Surface! ; w1:=smul(Lightv,n); Mov Di,Offset LightV Mov Bx,Bp Add Bx,92;(-42)+134 Call Smul_ ; St(0) Equ W1 ; If (w1>0) FTST FSTSW AX FSTP Dword Ptr CS:[Light_W1] SAHF JP @@Erreur1 JB @@LightEndCase @@Erreur1: ; Call InShadow p sur pile !! ; Elimine sans Consequence ! ; And (not InShadow(p)) Then ; ; test (Not InShadow(p)) Vrais ; Begin Mov Di,Bp Add Di,-30+134 Call InShadow Cmp Bx,1 Jl @@LightEndCase Mov Di,Word Ptr Cs:[Light_Cd] ;c.r:=(LightC.r*w1+AmbC.r)*cd.r; FLD Dword Ptr Cs:[LightC.R] Fmul Dword Ptr Cs:[Light_W1] Fadd Dword Ptr Cs:[AmbC.R] Fmul Dword Ptr Cs:[Di.R] Fstp Dword Ptr Cs:[Cct.R] ;c.g:=(LightC.g*w1+AmbC.g)*cd.g; FLD Dword Ptr Cs:[LightC.G] Fmul Dword Ptr Cs:[Light_W1] Fadd Dword Ptr Cs:[AmbC.G] Fmul Dword Ptr Cs:[Di.G] Fstp Dword Ptr Cs:[Cct.G] ;c.b:=(LightC.b*w1+AmbC.b)*cd.b; FLD Dword Ptr Cs:[LightC.B] Fmul Dword Ptr Cs:[Light_W1] Fadd Dword Ptr Cs:[AmbC.B] Fmul Dword Ptr Cs:[Di.B] Fstp Dword Ptr Cs:[Cct.B] ; w2:=smul(Vr,Lightv); Mov Bx,Bp Add Bx,68;(-66)+134 ; Vr Mov Di,Offset Lightv Call Smul_ FTST FSTSW AX FSTP Dword Ptr CS:[Light_W2] SAHF ; JP @@LightEnd;Erreur2 ; If w2>0 Then JB @@LightEnd @@Erreur2: ; Pow Comment Ca Marche Huhu ; spec:=pow(w2,ObArr[ObNr].Oe); Mov Di,Word Ptr Cs:[Light_Cd] Fld Dword Ptr Cs:[Di].SurfT.SOe Fld Dword Ptr Cs:[Light_W2] Call Pow Fst Dword Ptr Cs:[Light_Spec] Ftst FSTSW AX FSTP St(0) SAHF JZ @@NoSpec ; si Spec = 0 pas besoin de calcul ; cs:=ObArr[ObNr].specC; Mov Di,Word Ptr Cs:[Light_Cd] ; c.r:=c.r+spec*cs.r; Fld Dword Ptr Cs:[Di].SurfT.SSpecC.R Fmul Dword Ptr Cs:[Light_Spec] Fadd Dword Ptr Cs:[Cct.R] Fstp Dword Ptr Cs:[Cct.R] ; c.g:=c.g+spec*cs.g; Fld Dword Ptr Cs:[Di].SurfT.SSpecC.G Fmul Dword Ptr Cs:[Light_Spec] Fadd Dword Ptr Cs:[Cct.G] Fstp Dword Ptr Cs:[Cct.G] ; c.b:=c.b+spec*cs.b; Fld Dword Ptr Cs:[Di].SurfT.SSpecC.B Fmul Dword Ptr Cs:[Light_Spec] Fadd Dword Ptr Cs:[Cct.B] Fstp Dword Ptr Cs:[Cct.B] @@NoSpec: Jmp @@LightEnd @@LightEndCase: Mov Di,Word Ptr Cs:[Light_Cd] ; c.r:=AmbC.r*cd.r; FLD Dword Ptr Cs:[AmbC.r] Fmul Dword Ptr Cs:[DI.r] Fstp Dword Ptr Cs:[Cct.R] ; c.g:=AmbC.g*cd.g; FLD Dword Ptr Cs:[AmbC.g] Fmul Dword Ptr Cs:[DI.g] Fstp Dword Ptr Cs:[Cct.G] ; c.b:=AmbC.b*cd.b; FLD Dword Ptr Cs:[AmbC.b] Fmul Dword Ptr Cs:[DI.b] Fstp Dword Ptr Cs:[Cct.b] @@LightEnd: Leave RetN Light EndP Align 16 Trace Proc Near ; Les Variables Transmise a Trace Trace_RekDep Equ [Bp+16] ; Word ; Correspond! Trace_R Equ [Bp+14] ; Word addresse de ra Trace_c Equ [Bp+12] ; Word Trace_N1 Equ [Bp+08] ; Dword Trace_Atten Equ [Bp+04] ; Dword ; Les Variables Interne a Trace_Obnr Equ [BP-2] Trace_Lmin Equ [BP-6] Trace_N2 Equ [BP-10] Trace_As Equ [BP-14] Trace_At Equ [BP-18] Trace_P Equ [BP-30] Trace_N Equ [BP-42] Trace_VE Equ [BP-54] Trace_VR Equ [BP-66] Trace_VT Equ [BP-78] Trace_CI Equ [BP-90] Trace_CS Equ [BP-102] Trace_ToRefl Equ [BP-104] Trace_ToTrans Equ [BP-106] Trace_Ra Equ [Bp-130] ; Zone de stockage Ra Enter 130,0 ; Une Zone de Data de 130 Octets Mov Si,Word Ptr Cs:[Trace_R]; Chargement d'un Rayon passe en paramettre Mov Di,Bp ; sur la pile interne a Proc_Trace Sub Di,130 ; Mov Cx,6 ; 6 Dword en Copie ! @@Duplique: Mov Eax,Dword Ptr Cs:[Si] Mov Dword Ptr Cs:[Di],Eax Add Si,4 Add Di,4 Dec Cx Jnz @@Duplique Mov Ax,Word Ptr Cs:[Trace_RekDep] Cmp Ax,Word Ptr Cs:[MaxRekDep] Jg @@TestAtten @@SetC: Mov Bx,Word Ptr Cs:[Trace_c] Mov Eax,Dword Ptr Cs:[IsZero] Mov Dword Ptr Cs:[Bx.R],Eax Mov Dword Ptr Cs:[Bx.G],Eax Mov Dword Ptr Cs:[Bx.B],Eax Jmp @@OutOfTrace @@TestAtten: FLD Dword Ptr Cs:Trace_Atten FLD Dword Ptr Cs:AttenEps FUCOMPP FSTSW AX SAHF JA @@SetC ; Subterfuge ; On Peu Elimine la passation de parametre vers Intersect ; A Condition de Permettre a Intersect de Taper dans la structure ; de pile de Trace !!! ;intersect(r,obNr,lMin); Mov Di,Bp Sub Di,130 ;Mov Di, Trace_Ra Mov Bx,Bp Sub Bx,2 ;Mov Bx, Trace_Obnr Mov Si,Bp Sub Si,6 ;Mov Si, Trace_Lmin Call Intersect Mov Bx,Cs:[Trace_Obnr] ; Recupere Bx Valorise par Intersect Cmp Bx,0 Je @@K0 ; Fld Dword Ptr Cs:[Trace_Lmin] ; Fstp St(0); ; RayToPoint(r,lMin,p); ; Call TraceRayToPoint ; Specifique ; remplace en Dur ; Les Parametres Sont Acquis !! FLD Dword Ptr Cs:[Trace_RA.RN.X] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.X] FSTP DWord Ptr Cs:[Trace_P.X] FLD Dword Ptr Cs:[Trace_RA.RN.Y] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.Y] FSTP DWord Ptr Cs:[Trace_P.Y] FLD Dword Ptr Cs:[Trace_RA.RN.Z] Fmul Dword Ptr Cs:[Trace_Lmin] Fadd Dword Ptr Cs:[Trace_RA.RP.Z] FSTP DWord Ptr Cs:[Trace_P.Z] ; vDif(eye,p,ve); ; Call TraceVdif ; Specifique ; Remplace en Dur ; Les Parametres Sont Acquis !! FLD Dword Ptr Cs:[Eye].X ; ( a-b ) FLD Dword Ptr Cs:[Trace_p].X ; FSub ; Fstp Dword Ptr Cs:[Trace_Ve].X ; FLD Dword Ptr Cs:[Eye].Y FLD Dword Ptr Cs:[Trace_P].Y FSub Fstp Dword Ptr Cs:[Trace_Ve].Y FLD Dword Ptr Ds:[Eye].Z FLD (V3t Ptr DS:[Trace_p]).Z FSub Fstp Dword Ptr Es:[Trace_ve].Z ; normalize(ve); Mov Di,Bp Sub Di,54 Call Normalize Mov Di,Bp Sub Di,30 ; ToRefl:=GetNrm(ObNr,p,ve,n); Call GetNrm ; ReflV(ve,n,vr); Mov Di,Bp ; ve;n Sub Di,54 Mov Bx,Bp ; n;Ve Sub Bx,42 Mov Si,Bp ; Vr Sub Si,66 Call ReflV ; Light(Obnr,p,n,ve,vr,c); Call Light Jmp @@OutOfTrace @@K0: Mov Si,Offset Black;MediumVioletRed Mov Di,Offset Cct Call CopyColor Jmp @@OutOfTrace @@LastChoice: @@OutOfTrace: Leave RetN 14 Trace EndP ; ce Pset Correspond a 16m couleur pour ma Tseng ! Even PsetX DD ? PsetY DD ? Bu DD 0 Gr DD 0 Rd DD 0 Even Pset Proc Near Push Es Push Word Ptr Cs:[DestSeg] Pop Es Mov Dword Ptr Cs:[PsetX],Ecx Mov Dword Ptr Cs:[PsetY],Ebx Mov Eax,Ecx Shl Ecx,1 Add Ecx,Eax Mov Eax,Ebx Mov Ebx,640*3 Mul Bx Add Ax,Cx Adc Dx,0 Mov Di,Ax Mov Ax,Dx Cmp Dx,Word Ptr Cs:[ABank_R] Je @@NextB Mov Word Ptr Cs:[Abank_R],Dx Mov Ah,Al Shl Ah,4 Or Al,Ah Mov Dx,3CDh Out Dx,Al @@NextB: Mov Al,Byte Ptr Cs:[Bu] StoSb Mov Ecx,Dword Ptr Cs:[PsetX] Mov Eax,Ecx Shl Ecx,1 Add Ecx,Eax Inc Ecx Mov Eax,Dword Ptr Cs:[PsetY] Mov Ebx,640*3 Mul Bx Add Ax,Cx Adc Dx,0 Mov Di,Ax Mov Ax,Dx Cmp Dx,Word Ptr Cs:[ABank_R] Je @@NextG Mov Word Ptr Cs:[Abank_R],Dx Mov Ah,Al Shl Ah,4 Or Al,Ah Mov Dx,3CDh Out Dx,Al @@NextG: Mov Al,Byte Ptr Cs:[Gr] StoSb Mov Ecx,Dword Ptr Cs:[PsetX] Mov Eax,Ecx Shl Ecx,1 Add Ecx,Eax Add Ecx,2 Mov Eax,Dword Ptr Cs:[PsetY] Mov Ebx,640*3 Mul Bx Add Ax,Cx Adc Dx,0 Mov Di,Ax Mov Ax,Dx Cmp Dx,Word Ptr Cs:[ABank_R] Je @@NextR Mov Word Ptr Cs:[Abank_R],Dx Mov Ah,Al Shl Ah,4 Or Al,Ah Mov Dx,3CDh Out Dx,Al @@NextR: Mov Al,Byte Ptr Cs:[Rd] StoSb Pop Es RetN Pset EndP Even Pset64K Proc Near Push Es Push Word Ptr Cs:[DestSeg] Pop Es Mov Dword Ptr Cs:[PsetX],Ecx Mov Dword Ptr Cs:[PsetY],Ebx Mov Eax,Ecx Add Ecx,Eax Mov Eax,Ebx Mov Ebx,640*2 Mul Bx Add Ax,Cx Adc Dx,0 Mov Di,Ax Mov Ax,Dx Cmp Dx,Word Ptr Cs:[ABank_R] Je @@NextB Mov Word Ptr Cs:[Abank_R],Dx ; Xor Dx,Dx ; Mov Ah,Al ; Shl Ah,4 ; Or Al,Ah ; Mov Dl,Al Mov Ax,4F05h Xor Bx,Bx Int 10h ; Mov Dx,3CDh ; Out Dx,Al @@NextB: Xor Ax,Ax Mov Al,Byte Ptr Cs:[Rd] Shr Al,3 Shl Ax,11 Mov Al,Byte Ptr Cs:[Bu] Shr Al,3 Xor Bx,Bx Mov Bl,Byte Ptr Cs:[Gr] Shr Bl,2 Shl Bx,5 Add Ax,Bx StoSw Pop Es RetN Pset64K EndP AddX DD 0 AddY DD 0 BaseX DD 0 BaseY DD 0 RunM_X DD 0 RunM_Y DD 0 H DD 0 V DD 0 HelpCompute1 DD 0 RunMickey1 Proc Near Fld Dword Ptr Cs:[PicSizeWc] ; Aide au calcul de h Fld Dword Ptr Cs:[PixRat] ; Fmul ; Fild Dword Ptr Cs:[Ymax] ; Fild Dword Ptr Cs:[Xmax] ; Valorisation de HelpCompute Fdiv ; Fmul Fstp Dword Ptr Cs:[HelpCompute1] Mov Eax,DWord Ptr Cs:[BaseY] Mov DWord Ptr Cs:[RunM_Y],Eax ;While ((Y <= Ymax) And (KeyStop=False)) Do @@W1Test: Mov Eax,DWord Ptr Cs:[Ymax2] Cmp Dword Ptr Cs:[RunM_Y],Eax Jle @@W1C0Vrais Jmp @@W1False @@W1C0Vrais: Cmp Word Ptr Cs:[KeyStop],Faux Je @@W1C1Vrais Jmp @@W1False @@W1C1Vrais: ; Remettre Ici Equ 0.21 ; h:=(-y/ymax+0.5)*ymax/xmax*PicSiZeWC*PixRat; FiLD Dword Ptr Cs:[RunM_Y] FCHS Fild Dword Ptr Cs:[Ymax] Fdiv Fld Dword Ptr Cs:Half1 Fadd Fld Dword Ptr Cs:HelpCompute1 Fmul Fstp Dword Ptr Cs:[h] ; kMUl(h,Vh,hv); Mov Bx,Offset h Mov Di,Offset Vh Mov Si,Offset Hv Call Kmul ; X:=BaseX; Mov Eax,Dword Ptr Cs:[BaseX] Mov Dword Ptr Cs:[RunM_X],EaX ;While ((X <= Xmax) And (KeyStop=False))Do @@W2Test: Mov Eax,Dword Ptr Cs:[Xmax2] Cmp Dword Ptr Cs:[RunM_X],Eax Jle @@W2C0Vrais Jmp @@W2False @@W2C0Vrais: Cmp Word Ptr Cs:[KeyStop],Faux Je @@W2C1Vrais Jmp @@W2False @@W2C1Vrais: ; v:=(x/xmax-0.5)*PicSizeWC; Fild Dword Ptr Cs:[RunM_X] Fild Dword Ptr Cs:[Xmax] FdivP St(1),St(0) Fld Dword Ptr Cs:[Half1] Fsubr Fld Dword Ptr Cs:[PicSizeWc] Fmul Fstp Dword Ptr Cs:[V] ; kMul(v,vr,nh); Mov Bx,Offset v Mov Di,Offset Vr Mov Si,Offset Nh Call Kmul ; vSum(hv,nh,nh); Mov Di,Offset Hv Mov Bx,Offset Nh Mov Si,Offset Nh Call Vsum ; Vdif(nh,eye,r.n); Mov Di,Offset Nh Mov Bx,Offset Eye Mov Si,Offset Ra.Rn Call Vdif ; Trace(r,0,1,1,c); Push Word Ptr 0000 ; Correspond a RekDep !! Push Offset Ra ; Trace doit faire une copie en pile Push Offset Cct ; Push Dword Ptr Cs:Is1 ; Push Dword Ptr Cs:Is1 ; Call Trace ; FLD Dword Ptr Cs:[Cct.R] ; þþþþþþ FLD1 ; þþþþ FUCOMPP ; þþ FSTSW AX ; þþ SAHF ; þþ La Chromatique Rouge est JA @@NoRChg ; þþ compare a 1.0 et est mise a 1.0 Mov Byte Ptr Cs:[Rd],255 ; þþ Arrondit Automatique Jmp @@DoGreen ; þþ Even ; þþ @@NoRChg: ; þþ FLD Dword Ptr Cs:[Cct.R] ; þþ Fild Dword Ptr Cs:[Mul255] ; þþ Fmul ; þþ Ici On Arrondie les Couleurs Fistp Dword Ptr Cs:[Rd] ; þþ Avant Mise en place du point @@DoGreen: ; þþ FLD Dword Ptr Cs:[Cct.G] ; þþ FLD1 ; þþ FUCOMPP ; þþ FSTSW AX ; þþ SAHF ; þþ La Chromatique Verte est JA @@NoGChg ; þþ compare a 1.0 et est mise a 1.0 Mov Byte Ptr Cs:[Gr],255 ; þþ Jmp @@DoBlue ; þþ Even ; þþ @@NoGChg: ; þþ FLD Dword Ptr Cs:[Cct.G] ; þþ Fild Dword Ptr Cs:[Mul255] ; þþ Fmul ; þþ Fistp Dword Ptr Cs:[Gr] ; þþ @@DoBlue: ; þþ FLD Dword Ptr Cs:[Cct.B] ; þþ FLD1 ; þþ FUCOMPP ; þþ FSTSW AX ; þþ La Chromatique Bleu est SAHF ; þþ compare a 1.0 et est mise a 1.0 JA @@NoBChg ; þþ Si et Seulement Si la Chromatique ; Mov Eax,Dword Ptr Cs:[Is1] ; þþ de d?part est superieure a 1.0 ; Mov Dword Ptr Cs:[C.B],Eax ; þþþþ Mov Byte Ptr Cs:[Bu],255 ; þþ Jmp @@DoPset ; þþ Even ; þþ @@NoBChg: ; þþ FLD Dword Ptr Cs:[Cct.B] ; þþ Fild Dword Ptr Cs:[Mul255] ; þþ Fmul ; þþþþ Fistp Dword Ptr Cs:[Bu] ; þþþþþþ @@DoPset: ; setzePixel(AddX+x,AddY+y,round(c.r*255),round(c.g*255) ,round(c.b*255) ); Mov Ecx,Dword Ptr Cs:[Addx] ; Positionnement du Demarrage Add Ecx,Dword Ptr Cs:[RunM_X] ; Premier Point Haut Gauche Mov Ebx,Dword Ptr Cs:[Addy] ; Add Ebx,Dword Ptr Cs:[RunM_Y] ; Call Pset64K In Al,60h ; Test Clavier pour Dec Al ; Interruption Jz @@StopIt ; et sortie dans l'espace Inc Dword Ptr Cs:[RunM_X] ; Ajoute 2 au tramage X Jmp @@W2Test @@W2False: Inc Dword Ptr Cs:[RunM_Y] ; Ajoute 2 au tramage Y Jmp @@W1Test @@W1False:; Fin du While @@StopIt: RetN RunMickey1 EndP Mov Word Ptr Cs:[Abank_R],65535 ; Generation d'un Mickey en Call RunMickey1 ; Lancement du remap en Question Demarre: ; Ici D?marre le programme ; Juste Pour Etre Tranquille Mov Ax,Cs Mov Ds,Ax Mov Es,Ax Finit ; Necessaire ; þþþþþþ ; þþþþþþþþþþþþ Valorisation de Demarrage ; þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ ; R.p := Eye; ; þþþþþþþ CoordCopy Eye Ra.Rp ; þþþþþ ; ErrEps(Eye.z); ; þþþ FLD Dword Ptr Cs:Ra.RP.z ; þþþ Call ErrEps ; þþþ ; Normalize(LightV) ; þþþ Mov Ax,Cs ; þþþ Mov Ds,Ax ; þþþ Mov Di,Offset LightV ; þþþ Call Normalize ; þþþ ;vh.x:=-x; ; þþþ FLD Dword Ptr Cs:[Eye.x] ; þþþ FCHS ; þþþ FSTP Dword Ptr Cs:[Vh.x] ; þþþ ;vh.y:=-y; ; þþþ FLD Dword Ptr Cs:[Eye.y] ; þþþ FCHS ; þþþ FSTP Dword Ptr Cs:[Vh.y] ; þþþ ;vh.z:=(sqr(x)+sqr(y)+sqr(z))/z; ; þþþ FLD Dword Ptr Cs:[Eye.x] ; þþþ FMul st,St(0) ; þþþ Fld Dword Ptr Cs:[Eye.y] ; þþþ FMul st,St(0) ; þþþ Fadd ; þþþ Fld Dword Ptr Cs:[Eye.z] ; þþþ FMul st,St(0) ; þþþ Fadd ; þþþ Fld Dword Ptr Cs:[Eye.z] ; þþþ Fdiv ; þþþ Fstp Dword Ptr Cs:[Vh.z] ; þþþ ;normalize(vh); ; þþþ Mov Ax,Cs ; þþþ Mov Ds,Ax ; þþþ Mov Di,Offset Vh ; þþþ Call Normalize ; þþþ ;if z<0 then ; þþþ Fld Dword Ptr Cs:[Eye.z] ; þþþ FTST ; Test St(0) & 0.0 ; þþþ FSTSW AX ; þþþ SAHF ; Valorise Flags ; þþþ JAE @@NoMul ; þþþ ;kMUl(-1,vh,vh); ; þþþ Int 20; ; þþþ Fld Dword Ptr Cs:[Vh.X] ; þþþ Fchs ; þþþ Fstp Dword Ptr Cs:[Vh.X] ; þþþ Fld Dword Ptr Cs:[Vh.Y] ; þþþ Fchs ; þþþ Fstp Dword Ptr Cs:[Vh.Y] ; þþþ Fld Dword Ptr Cs:[Vh.Z] ; þþþ Fchs ; þþþ Fstp Dword Ptr Cs:[Vh.Z] ; þþþ @@NoMul: ; þþþ ;vr.x:=vh.y*z-vh.z*y; ; þþþ Fld Dword Ptr Cs:[Vh.z] ; þþþ Fld Dword Ptr Cs:[Eye.y] ; þþþ Fmul ; þþþ Fld Dword Ptr Cs:[Vh.y] ; þþþ Fld Dword Ptr Cs:[Eye.z] ; þþþ Fmul ; þþþ Fsub ; þþþ Fstp Dword Ptr Cs:[Vr.x] ; þþþ ;vr.y:=vh.z*x-vh.x*z; ; þþþ Fld Dword Ptr Cs:[Vh.x] ; þþþ Fld Dword Ptr Cs:[Eye.z] ; þþþ Fmul ; þþþ Fld Dword Ptr Cs:[Vh.z] ; þþþ Fld Dword Ptr Cs:[Eye.x] ; þþþ Fmul ; þþþ Fsub ; þþþ Fstp Dword Ptr Cs:[Vr.y] ; þþþ ;vr.z:=vh.x*y-vh.y*x; ; þþþ Fld Dword Ptr Cs:[Vh.y] ; þþþ Fld Dword Ptr Cs:[Eye.x] ; þþþ Fmul ; þþþ Fld Dword Ptr Cs:[Vh.x] ; þþþ Fld Dword Ptr Cs:[Eye.y] ; þþþ Fmul ; þþþ Fsub ; þþþ Fstp Dword Ptr Cs:[Vr.z] ; þþþ Fstp St(0) ; þþþ ;normalize(vr); ; þþþ Mov Ax,Cs ; þþþ Mov Ds,Ax ; þþþ Mov Di,Offset Vr ; þþþþþ Call Normalize ; þþþþþþþ ; þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþ ; þþþþþþþþþþþþ Valorisation de Demarrage Termine ; þþþþþþ ; Fabrication d'un degre FLDPI FILD Dword Ptr GradBase Fdiv Fstp Dword Ptr Grad Mov Eax,Dword Ptr Grad ; Eax Definit le degre de modif Mov Si,Offset Xrotate ; le vecteur applique Mov Di,Offset MatriceE ; la Matrice genere Call DefineMatrix ; Mov Sp,16384;+1024;+512 ; Permet un Gain de Temps ! Mov Ax,4F02h ;þþþ Changement de mode video Mov Bx,0111h ;þþ 112 Mode 640*480 16m Pset <- Et4000W32p Int 10h ;þþþ 111 Mode 640*480 64k Pset64K <- Vesa Mov Si,Offset PaleGreen ; þþþþþþ Mov Di,Offset K1Surf ; þþþþ Call CopyColor ; þþ Valorisation des pigments Mov Si,Offset MediumVioletRed ; þþ pour chacune des spheres Mov Di,Offset K2Surf ; þþ composant le Mickey Call CopyColor ; þþ Mov Si,Offset MediumVioletRed ; þþ Mov Di,Offset K3Surf ; þþ Call CopyColor ; þþ Mov Si,Offset Red;MediumVioletRed ; þþ Mov Di,Offset K4Surf ; þþþþ Call CopyColor ; þþþþþþ Mov Dword Ptr Cs:[AddX] , 0 ; Centrage sur ecran Mov Dword Ptr Cs:[AddY] , 0 ; 640*480 Xor Ecx,Ecx Again: ; Attente touche escape Push Ecx Mov Dword Ptr Cs:[BaseX], 0 ; Base de Remap d'un Mickey Mov Dword Ptr Cs:[BaseY], 0 Mov Word Ptr Cs:[Abank_R],65535 ; Generation d'un Mickey en Call RunMickey1 ; Lancement du remap en Question Mov Di,Offset MatriceE ; On Effectue la rotation de chacun des points Mov Si,Offset K4 ; Call Rotation ; ; Mov Di,Offset MatriceE ; Mov Si,Offset K1 ; Call Rotation ; ; Mov Di,Offset MatriceE ; Mov Si,Offset K3 ; Call Rotation ; ; Mov Di,Offset MatriceE ; Mov Si,Offset K2 ; Call Rotation ; Add Word Ptr Cs:[AddX], 160 Cmp Word Ptr Cs:[AddX],640 Jl @@NoIncBase Mov Word Ptr Cs:[AddX],0 Add Word Ptr Cs:[AddY],120 Cmp Word Ptr Cs:[AddY],480 Jl @@NoIncBase Mov Word Ptr Cs:[AddX],0 Mov Word Ptr Cs:[AddY],0 @@NoIncBase: Pop Ecx ; inc Cx Cmp Cx,180 Jg CestFinit In Al,60h Dec Al Jnz Again CestFinit: Mov Ax,03h ; Retour en Mode Texte Int 10h Mov Sp,0FFFEh ; Validation Stack pour retour Int 20h StartC EndS End StartC ; Fin de Programme
16 août 2006 à 08:48
la source que j'ai déposé date de 94/95...
et les
Mov Ax,Cs
Mov Ds,Ax
sont certainement l'oeuvre d'un magnifique copié/coller
et cela ne doit pas être la seule parti ou il existe des petites coquille.
concernant le .586 le jeux d'instruction utilisé ne doit pas dépasser celui du .386
ce qui m'amuse personnellement c'est le coté Stachanoviste de mes sources d'il y a 10 ans. (voir mnemonique également)
15 août 2006 à 23:23
dommage que ce soit du 16 bits pour du 586p.
pourquoi surcharger tout tes acces memoire avec le segment cs ?
surtout que
Mov Ax,Cs
Mov Ds,Ax
Mov Es,Ax
se retrouve 3 a 4 fois dans le code.
@++
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.