| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- /*
- ** Command & Conquer Red Alert(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***************************************************************************
- ** C O N F I D E N T I A L --- W E S T W O O D A S S O C I A T E S **
- ***************************************************************************
- * *
- * Project Name : LIBRARY *
- * *
- * File Name : VIDEO.C *
- * *
- * Programmer : David Dettmer *
- * *
- * Last Update : January 12, 1995 [PWG] *
- * *
- *-------------------------------------------------------------------------*
- * Functions: *
- * Find_Video_Mode -- Converts a dos video mode to a WWLIB video mode *
- * Get_Video_Mode -- Returns the current video mode. *
- * Set_Video_Mode -- Sets the requested video mode *
- * Set_Lores_Function_Pointers -- Sets up the lowres function pointers *
- * Set_HiRes_Function_Pointers -- Sets the HiRes function pointers *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include <dos.h>
- #include "iostream.h"
- #include "video.h"
- #include "descmgmt.h"
- #include "mcgaprim.h"
- #include "gbuffer.h"
- #include "vbuffer.h"
- #include "wwmem.h"
- #include "playcd.h"
- /***************************************************************************
- * VESA_INFO -- Debug routine which displays vesa info to stdout *
- * *
- * INPUT: none *
- * *
- * OUTPUT: none *
- * *
- * WARNINGS: *
- * *
- * *
- * HISTORY: *
- * 11/22/1994 PWG : Created. *
- *=========================================================================*/
- void Vesa_Info(int vesa_mode)
- {
- UINT paras;
- USHORT longest ;
- union REGS regs;
- struct SREGS sregs;
- SEGSEL VInfoSel ;
- VesaInfoType * VInfo ;
- SEGSEL ModeInfoSel ;
- VesaModeInfoType * ModeInfo ;
- unsigned temp ;
- short * ptr ;
- char buff [ 256 ] ;
- short mode_table [][4] = { { 0x100 , 640 , 400 , 256 },
- { 0x101 , 640 , 480 , 256 },
- { 0x103 , 800 , 600 , 256 },
- } ;
- cout << "\n\nWWESTWOOD STUDIOS. Vesa Driver attributes.\n" ;
- // verifie that this is a standard VESA MODE
- if ( (vesa_mode < VESA_640X400_256) || ( vesa_mode > VESA_TEXT_132X60 )) {
- cout << "this is not a standard VESA mode\n" ;
- return ;
- }
- // Compute size of VesaInfo structure in paragraphs
- paras = ( sizeof(VesaInfoType) + 15 ) >> 4 ;
-
- // Alloc real-mode memory for VESA structure.
- if ( DPMI_real_alloc ( paras , & VInfoSel , & longest ) ) return ;
- VInfo = ( VesaInfoType * ) ( VInfoSel . seg << 4 ) ;
- // Compute size of VesaModeInfo structure in paragraphs
- paras = ( sizeof(VesaModeInfoType) + 15 ) >> 4 ;
- //Alloc real-mode memory for VesaModeInfoType structure.
- if ( DPMI_real_alloc ( paras , & ModeInfoSel , & longest ) )
- {
- DPMI_real_free ( VInfoSel ) ;
- return ;
- }
- ModeInfo = ( VesaModeInfoType * ) ( ModeInfoSel . seg << 4 ) ;
- // Get Read Vesa Driver Vesa
- regs . x . eax = 0x4f00 ;
- regs . x . edi = 0 ;
- sregs . es = VInfoSel . seg ;
- DPMI_real_intr ( 0x10 , & regs , & sregs );
- regs . x . eax &= 0xffff ;
- if ( regs . x . eax != 0x004F) {
- cout << "\nNot Vesa Driver Present\n" ;
- DPMI_real_free ( ModeInfoSel ) ;
- DPMI_real_free ( VInfoSel ) ;
- return ;
- }
- temp = ( unsigned ) VInfo->AvailModes ;
- ptr = ( short * ) ( ( ( temp & 0xffff0000 ) >> 12 ) + ( temp & 0xffff ) ) ;
- cout << "Available Video Modes\n" ;
- for ( ; * ptr != -1 ; ptr ++ )
- for ( temp = 0 ; temp < 3 ; temp ++ )
- if ( * ptr == mode_table [ temp ] [ 0 ] ) {
- sprintf ( buff , "%d\t%d x %d x %d\n" ,
- mode_table [ temp ] [ 0 ],
- mode_table [ temp ] [ 1 ],
- mode_table [ temp ] [ 2 ],
- mode_table [ temp ] [ 3 ] ) ;
- cout << buff ;
- }
- // Get Info for this particular graphic mode
- regs . x . eax = 0x4F01;
- regs . x . ecx = vesa_mode;
- regs . x . edi = 0 ;
- sregs . es = ModeInfoSel . seg ;
- DPMI_real_intr ( 0x10 , & regs , & sregs );
- regs . x . eax &= 0xffff ;
- if ( regs . x . eax != 0x004F) {
- cout << "\nGraphic mode " << vesa_mode << " is not supported by this video card\n" ;
- DPMI_real_free ( ModeInfoSel ) ;
- DPMI_real_free ( VInfoSel ) ;
- return ;
- }
- cout << "\nMode attributes\n" ;
- temp = ( unsigned ) ModeInfo->Attributes ;
- if ( temp & 0x01 ) cout << "\tMode supported in hardware\n" ;
- else cout << "\tMode is not supported in hardware\n" ;
- if ( temp & 0x20 ) cout << "\tMode is not VGA Windowed memory compatible\n" ;
- else cout << "\tMode is VGA Windowed memory compatible\n" ;
- cout << "Window A attributes\n" ;
- temp = ( unsigned ) ModeInfo->WinA_Attributes; ;
- if ( temp & 0x02 ) cout << "\tWindow A is Readable\n" ;
- else cout << "\tWindow A is not Readable\n" ;
- if ( temp & 0x04 ) cout << "\tWindow A is Writeable\n" ;
- else cout << "\tWindow A is not Writeable\n" ;
- sprintf ( buff , "%P\n" , ModeInfo->WinA_Segment ) ;
- cout << "\tWindow A segment address 0x" << buff + 4 ;
- cout << "Window B attributes\n" ;
- temp = ( unsigned ) ModeInfo->WinB_Attributes; ;
- if ( temp & 0x02 ) cout << "\tWindow B is Readable\n" ;
- else cout << "\tWindow B is not Readable\n" ;
- if ( temp & 0x04 ) cout << "\tWindow B is Writeable\n" ;
- else cout << "\tWindow B is not Writeable\n" ;
- sprintf ( buff , "%P\n" , ModeInfo->WinB_Segment ) ;
- cout << "\tWindow B segment address 0x" << buff + 4 ;
- cout << "Window shared attributes\n" ;
- cout << "\tWindow Granularity (KB) :" << ModeInfo->WinGranularity << "\n" ;
- cout << "\tWindow Size (KB) : " << ModeInfo->WinSize << "\n";
- cout << "\tNumber of Banks : " << (long)ModeInfo->NumBanks << "\n";
- cout << "\tBytes per ScanLine : " << (long)ModeInfo->BytesPerScanline << "\n";
- cout << "\tXResolution : " << (long)ModeInfo->XRes << "\n";
- cout << "\tYResolution : " << (long)ModeInfo->YRes << "\n";
- cout << "\tX Char Size : " << (long)ModeInfo->XCharSize << "\n";
- cout << "\tY Char Size : " << (long)ModeInfo->YCharSize << "\n";
- cout << "\tMemory Model : " << (long)ModeInfo->MemoryModel << "\n";
- cout << "\tNumber of planes : " << (long)ModeInfo->NumPlanes << "\n" ;
- cout << "\tBits per pixels : " << (long)ModeInfo->BitsPerPixel << "\n" ;
- /*
- cout << "Bttributes: " << (long)ModeInfo.Bttributes << "\n"
- << "Win B Bttributes: " << (long)ModeInfo.WinB_Bttributes << "\n"
- << "Win B Bttributes: " << (long)ModeInfo.WinB_Bttributes << "\n"
- << "Win Granularity " << (long)ModeInfo.WinGranularity << "\n"
- << "Win Size: " << (long)ModeInfo.WinSize << "\n"
- << "Win B Segment: " << hex << (unsigned short)ModeInfo.WinB_Segment << "\n"
- << "Win B Segment: " << (unsigned short)ModeInfo.WinB_Segment << "\n"
- << "Bytes per scan line: " << dec << (unsigned short)ModeInfo.BytesPerScanline << "\n"
- << "X resolution: " << (long)ModeInfo.XRes << "\n"
- << "Y resolution: " << (long)ModeInfo.YRes << "\n"
- << "X Char Size: " << (long)ModeInfo.XCharSize << "\n"
- << "Y Char Size: " << (long)ModeInfo.YCharSize << "\n"
- << "Number of planes: " << (long)ModeInfo.NumPlanes << "\n"
- << "Bits per pixels: " << (long)ModeInfo.BitsPerPixel << "\n"
- << "Number of Banks: " << (long)ModeInfo.NumBanks << "\n"
- << "Memory Model: " << (long)ModeInfo.MemoryModel << "\n"
- << "Bank Size: " << (long)ModeInfo.BankSize << "\n";
- */
- DPMI_real_free ( ModeInfoSel ) ;
- DPMI_real_free ( VInfoSel ) ;
- }
|