DOSRUN.CPP
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. #include "ray.h"
  2. #include "globals.h"
  3. #ifdef OS_DOS
  4. #include "asm.h"
  5. #include "gamerun.h"
  6. #include "scrcntl.h"
  7. #include "palette.h"
  8. #include <conio.h>
  9. #include <i86.h>
  10. #include <dos.h>
  11. #define VGA_WIDTH 320
  12. #define VGA_HEIGHT 200
  13. #define SVGA_WIDTH 640
  14. #define SVGA_HEIGHT 480
  15. union REGS tempregs; // required for int386 calls. Have no other use
  16. void SetCursorXY(unsigned char column, unsigned char row)
  17. {
  18.    tempregs.h.ah=2;
  19.    tempregs.h.bl=0;
  20.    tempregs.h.dl=column;
  21.    tempregs.h.dh=row;
  22.    int386(0x10, &tempregs, &tempregs);
  23. }
  24. // VGA status stuff
  25. #define VGA_INPUT_STATUS_1   0x3DA // vga status reg 1, bit 3 is the vsync
  26.                                    // when 1 - retrace in progress
  27.                                    // when 0 - no retrace
  28. #define VGA_VSYNC_MASK       0x08  // masks off unwanted bits of status reg
  29. void Wait_For_Vsync(void)
  30. {
  31. // this function waits for the start of a vertical retrace, if a vertical
  32. // retrace is in progress then it waits until the next one
  33. while(!inp(VGA_INPUT_STATUS_1) & VGA_VSYNC_MASK)
  34.      {
  35.      // do nothing, vga is in retrace
  36.      } // end while
  37. // now wait for vysnc and exit
  38. while((inp(VGA_INPUT_STATUS_1) & VGA_VSYNC_MASK))
  39.      {
  40.      // do nothing, wait for start of retrace
  41.      } // end while
  42. // at this point a vertical retrace is occuring, so return back to caller
  43. } // Wait_For_Vsync
  44. void Dos_Copy_Buff() {
  45.    Wait_For_Vsync();
  46.    copyBuff();
  47. }
  48. void Dos_Init() {
  49.    Init_Screen(VGA_WIDTH, VGA_HEIGHT);
  50.    Global_Initialize();
  51.    Activate_Graphics();
  52.    Activate_Palette(TRUE);
  53. }
  54. void Dos_Run() {
  55. Init_Main_Cycle();
  56. while (!Main_Cycle_Done())
  57.    Do_Main_Cycle();
  58. }
  59. void Dos_Close() {
  60.    Global_Close();
  61. }
  62. void main() {
  63.    Dos_Init();
  64.    Dos_Run();
  65.    Dos_Close();
  66. }
  67. #endif