Beispiel #1
0
void vm_xgetchxy(char x, char y, char *attr, char *ch)
{
    unsigned long address;
    address = vm_screenaddress(x, y);
    *ch = (char)_farpeekb(_go32_conventional_mem_selector(), address);
    *attr = (char)_farpeekb(_go32_conventional_mem_selector(), address + 1L);
}
Beispiel #2
0
unsigned long
msdosUSleep (unsigned long microseconds) {
  unsigned long ticks;

  if (!isBackgrounded) {
    usleep(microseconds);
    return microseconds;
  }

  saveState(&mainState);
  restoreState(&interruptState);

  /* clock ticks to wait */
  ticks = (microseconds * MSDOS_PIT_FREQUENCY) / UINT64_C(1000000);

  /* we're starting in the middle of a timer period */
  {
    int wasEnabled = disable();

    elapsedTickIncrement = getTicksTillNextTimerInterrupt();
    elapsedTickCount = 0;

    if (wasEnabled) enable();
  }

  while (elapsedTickCount < ticks) {
    /* wait for next interrupt */
    if (!setjmp(mainContext)) longjmp(interruptContext, 1);
    /* interrupt returned */
  }

  /* wait for Dos to be free */
  setjmp(mainContext);

  /* critical sections of DOS are never reentrant */
  if (_farpeekb(_dos_ds, criticalOffset)
  /* DOS is busy but not idle */
   || (!inIdleInterrupt && _farpeekb(_dos_ds, inDosFlagPointer)))
    longjmp(interruptContext, 1);

  saveState(&interruptState);
  restoreState(&mainState);

  return (elapsedTickCount * UINT64_C(1000000)) / MSDOS_PIT_FREQUENCY;
}
Beispiel #3
0
unsigned long
tsr_usleep(unsigned long usec) {
  unsigned long count;
  int intsWereEnabled;

  if (!backgrounded) {
    usleep(usec);
    return usec;
  }

  saveState(&mainState);
  restoreState(&intState);

  /* clock ticks to wait */
  count = (usec * PIT_FREQ) / UINT64_C(1000000);

  /* we're starting in the middle of a timer period */
  intsWereEnabled = disable();
  toBeElapsedTicks = countToNextTimerInt();
  elapsedTicks = 0;
  if (intsWereEnabled)
    enable();

  while (elapsedTicks < count) {
    /* wait for next interrupt */
    if (!setjmp(mainCtx))
      longjmp(intCtx, 1);
    /* interrupt returned */
  }

  /* wait for Dos to be free */
  setjmp(mainCtx);

  /* critical sections of DOS are never reentrant */
  if (_farpeekb(_dos_ds, criticalOffset)
  /* DOS is busy but not idle */
   || (!inIdle && _farpeekb(_dos_ds, inDosOffset)))
    longjmp(intCtx, 1);

  saveState(&intState);
  restoreState(&mainState);

  return (elapsedTicks * UINT64_C(1000000)) / PIT_FREQ;
}
void key_delete(void)
{
        if (keyboard_handler_replaced) {
                int kflags;
                _go32_dpmi_set_protected_mode_interrupt_vector(0x9, &old_key_handler);
                /*set the original keyboard LED settings*/
                kflags=_farpeekb(_dos_ds,0x417);
                outportb(0x60,0xed);
                asm("nop; nop");
                outportb(0x60,((kflags>>4)&0x7));
        }
}
Beispiel #5
0
/**
 * drawText
 * Draws the specified string at the specified position in the specified color
 * using text blitting.
 **/
void drawText(int x, int y, char text[], char color, int font) {
    // defines segment for text
    int mytext = __dpmi_allocate_ldt_descriptors(1);
    __dpmi_set_segment_base_address(mytext, 0xffa6e);
    __dpmi_set_segment_limit(mytext, 8*128);
    char row;
    int i,j,k;
    for (i=0; text[i]!=0; i++) { //iterates through string
		for (j=0; j<8; j++) { //iterates through rows
			//gets jth row of char
			row = _farpeekb(mytext, text[i]*8+j);
			for (k=0; k<8; k++) { //iterates through pixels
				// decides if pixel should be drawn at position
				if (row & 0x80) {
					drawScaledPixel(x+(k+8*i)*font,y+j*font,font,color);
				}
				row <<= 1; //shifts bits to left by one
			}
		}
	}
}
Beispiel #6
0
int Main(int argc, char **argv)
{
  if(argc > 1 && festring(argv[1]) == "--version")
  {
    std::cout << "Iter Vehemens ad Necem version " << IVAN_VERSION << std::endl;
    return 0;
  }

#ifdef __DJGPP__

  /* Saves numlock state and toggles it off */

  char ShiftByteState = _farpeekb(_dos_ds, 0x417);
  _farpokeb(_dos_ds, 0x417, 0);

#endif /* __DJGPP__ */

  femath::SetSeed(time(0));
  game::InitGlobalValueMap();
  scriptsystem::Initialize();
  databasesystem::Initialize();
  game::InitLuxTable();
  ivanconfig::Initialize();
  igraph::Init();
  game::CreateBusyAnimationCache();
  globalwindowhandler::SetQuitMessageHandler(game::HandleQuitMessage);
  msgsystem::Init();
  protosystem::Initialize();
  igraph::LoadMenu();

  for(;;)
  {
    int Select = iosystem::Menu(igraph::GetMenuGraphic(),
				v2(RES.X / 2, RES.Y / 2 - 20),
				CONST_S("\r"),
				CONST_S("Start Game\rContinue Game\r"
					"Configuration\rHighscores\r"
					"Quit\r"),
				LIGHT_GRAY,
				CONST_S("Released under the GNU\r"
					"General Public License\r"
					"More info: see COPYING\r"),
				CONST_S("IVAN v" IVAN_VERSION "\r"));

    switch(Select)
    {
     case 0:
      if(game::Init())
      {
	igraph::UnLoadMenu();

	game::Run();
	game::DeInit();
	igraph::LoadMenu();
      }

      break;
     case 1:
      {
	festring LoadName = iosystem::ContinueMenu(WHITE, LIGHT_GRAY, game::GetSaveDir());

	if(LoadName.GetSize())
	{
	  LoadName.Resize(LoadName.GetSize() - 4);

	  if(game::Init(LoadName))
	  {
	    igraph::UnLoadMenu();
	    game::Run();
	    game::DeInit();
	    igraph::LoadMenu();
	  }
	}

	break;
      }
     case 2:
      ivanconfig::Show();
      break;
     case 3:
      {
	highscore HScore;
	HScore.Draw();
	break;
      }
     case 4:

#ifdef __DJGPP__

      /* Loads numlock state */

      _farpokeb(_dos_ds, 0x417, ShiftByteState);

#endif

      return 0;
    }
  }
}
Beispiel #7
0
unsigned char vga_readb(unsigned addr)
{
	return _farpeekb(_dos_ds, addr);
}
Beispiel #8
0
char vm_wherey(void)
{
    return (char)(_farpeekb(_go32_conventional_mem_selector(), 0x0451) + 1);
}
Beispiel #9
0
char vm_getscreenheight(void)
{
    return (char)(_farpeekb(_go32_conventional_mem_selector(), 0x0484) + 1);
}
Beispiel #10
0
char vm_getscreenwidth(void)
{
    return (char)_farpeekb(_go32_conventional_mem_selector(), 0x044a);
}
Beispiel #11
0
static char vm_getscreenmode(void)
{
    return (char)_farpeekb(_go32_conventional_mem_selector(), 0x0449);
}
Beispiel #12
0
char vm_getattrxy(char x, char y)
{
    unsigned long address;
    address = vm_screenaddress(x, y);
    return (char)_farpeekb(_go32_conventional_mem_selector(), address + 1L);
}