home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / djsrc106.arj / UTILS.C < prev    next >
C/C++ Source or Header  |  1992-04-13  |  3KB  |  161 lines

  1. /* This is file UTILS.C */
  2. /*
  3. ** Copyright (C) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954
  4. **
  5. ** This file is distributed under the terms listed in the document
  6. ** "copying.dj", available from DJ Delorie at the address above.
  7. ** A copy of "copying.dj" should accompany this file; if not, a copy
  8. ** should be available from where this file was obtained.  This file
  9. ** may not be distributed without a verbatim copy of "copying.dj".
  10. **
  11. ** This file is distributed WITHOUT ANY WARRANTY; without even the implied
  12. ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  13. */
  14.  
  15. /* History:130,1 */
  16.  
  17. #include <dos.h>
  18. #include <setjmp.h>
  19.  
  20. #include "build.h"
  21. #include "types.h"
  22. #include "tss.h"
  23. #include "gdt.h"
  24. #include "utils.h"
  25. #include "npx.h"
  26.  
  27. extern jmp_buf back_to_debugger;
  28. extern int can_longjmp;
  29.  
  30. extern near _do_memset32();
  31. extern near _do_memmov32();
  32. extern near _do_save_npx();
  33. extern near _do_load_npx();
  34.  
  35. NPX npx;
  36.  
  37. extern int was_exception;
  38.  
  39. TSS *utils_tss = &o_tss;
  40.  
  41. go_til_done()
  42. {
  43.   while(1)
  44.   {
  45.     go32();
  46.     if (was_exception)
  47.     {
  48.       if (exception_handler())
  49.         if (can_longjmp)
  50.           longjmp(back_to_debugger, 1);
  51.         else
  52.           return;
  53.     }
  54.     else
  55.       return;
  56.   }
  57. }
  58.  
  59. zero32(word32 vaddr)
  60. {
  61.   TSS *old_ptr;
  62.   old_ptr = tss_ptr;
  63.   tss_ptr = utils_tss;
  64.   utils_tss->tss_eip = (word16)_do_memset32;
  65.   utils_tss->tss_eax = 0;
  66.   utils_tss->tss_ecx = 4096;
  67.   utils_tss->tss_es = g_core*8;
  68.   utils_tss->tss_edi = vaddr;
  69.   go_til_done();
  70.   tss_ptr = old_ptr;
  71. }
  72.  
  73. memput(word32 vaddr, void far *ptr, word16 len)
  74. {
  75.   TSS *old_ptr;
  76.   old_ptr = tss_ptr;
  77.   tss_ptr = utils_tss;
  78.   utils_tss->tss_eip = (word16)_do_memmov32;
  79.   utils_tss->tss_ecx = len;
  80.   utils_tss->tss_es = g_core*8;
  81.   utils_tss->tss_edi = vaddr;
  82.   utils_tss->tss_ds = g_core*8;
  83.   utils_tss->tss_esi = (word32)FP_SEG(ptr)*16 + (word32)FP_OFF(ptr);
  84.   go_til_done();
  85.   tss_ptr = old_ptr;
  86. }
  87.  
  88. memget(word32 vaddr, void far *ptr, word16 len)
  89. {
  90.   TSS *old_ptr;
  91.   old_ptr = tss_ptr;
  92.   tss_ptr = utils_tss;
  93.   utils_tss->tss_eip = (word16)_do_memmov32;
  94.   utils_tss->tss_ecx = len;
  95.   utils_tss->tss_es = g_core*8;
  96.   utils_tss->tss_edi = (word32)FP_SEG(ptr)*16 + (word32)FP_OFF(ptr);
  97.   utils_tss->tss_ds = g_core*8;
  98.   utils_tss->tss_esi = vaddr;
  99.   go_til_done();
  100.   tss_ptr = old_ptr;
  101. }
  102.  
  103. word32 peek32(word32 vaddr)
  104. {
  105.   word32 rv;
  106.   memget(vaddr, &rv, 4);
  107.   return rv;
  108. }
  109.  
  110. word16 peek16(word32 vaddr)
  111. {
  112.   word16 rv=0;
  113.   memget(vaddr, &rv, 2);
  114.   return rv;
  115. }
  116.  
  117. word8 peek8(word32 vaddr)
  118. {
  119.   word8 rv=0;
  120.   memget(vaddr, &rv, 1);
  121.   return rv;
  122. }
  123.  
  124. poke32(word32 vaddr, word32 v)
  125. {
  126.   memput(vaddr, &v, 4);
  127. }
  128.  
  129. poke16(word32 vaddr, word16 v)
  130. {
  131.   memput(vaddr, &v, 2);
  132. }
  133.  
  134. poke8(word32 vaddr, word8 v)
  135. {
  136.   memput(vaddr, &v, 1);
  137. }
  138.  
  139. save_npx()
  140. {
  141.   TSS *old_ptr;
  142.   old_ptr = tss_ptr;
  143.   tss_ptr = utils_tss;
  144.   utils_tss->tss_eip = (word16)_do_save_npx;
  145.   utils_tss->tss_ds = g_rdata*8;
  146.   utils_tss->tss_es = g_rdata*8;
  147.   go_til_done();
  148.   tss_ptr = old_ptr;
  149. }
  150.  
  151. load_npx()
  152. {
  153.   TSS *old_ptr;
  154.   old_ptr = tss_ptr;
  155.   tss_ptr = utils_tss;
  156.   utils_tss->tss_eip = (word16)_do_load_npx;
  157.   utils_tss->tss_ds = g_rdata*8;
  158.   utils_tss->tss_es = g_rdata*8;
  159.   go_til_done();
  160.   tss_ptr = old_ptr;
  161. }