home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 October / VPR9710A.ISO / BENCH / DJ1SRC_K / 105 / UTILS.C < prev    next >
C/C++ Source or Header  |  1997-05-02  |  3KB  |  129 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. /* 1997/05/01 modified by Kimio Itoh(kitoh@nn.iij4u.or.jp) 
  15.    for reduce binary size and for dead code elimination.
  16.  */
  17.  
  18. /* History:130,1 */
  19.  
  20. #include "build.h"
  21.  
  22. extern jmp_buf back_to_debugger;
  23. extern int can_longjmp;
  24.  
  25. extern int exception_handler(void);
  26. extern void go32(void);
  27. extern word32 __pascal ptr2linear(void far * ptr);
  28.  
  29. extern _do_memset32();
  30. extern _do_memmov32();
  31. extern _do_save_npx();
  32. extern _do_load_npx();
  33.  
  34. NPX npx;
  35.  
  36. extern int was_exception;
  37.  
  38. TSS *utils_tss = &o_tss;
  39.  
  40. static void go_til_done(void)
  41. {
  42.     while (1) {
  43.         go32();
  44.         if (was_exception) {
  45.             if (exception_handler())
  46.                 if (can_longjmp)
  47.                     longjmp(back_to_debugger, 1);
  48.                 else
  49.                     return;
  50.         } else
  51.             return;
  52.     }
  53. }
  54.  
  55. void __pascal zero32(word32 vaddr)
  56. {
  57.     TSS *old_ptr;
  58.     old_ptr = tss_ptr;
  59.     tss_ptr = utils_tss;
  60.     utils_tss->tss_eip = (word16) _do_memset32;
  61.     utils_tss->tss_eax = 0;
  62.     utils_tss->tss_ecx = 4096;
  63.     utils_tss->tss_es = g_core * 8;
  64.     utils_tss->tss_edi = vaddr;
  65.     go_til_done();
  66.     tss_ptr = old_ptr;
  67. }
  68.  
  69. void __pascal memput(word32 vaddr, void far * ptr, word16 len)
  70. {
  71.     TSS *old_ptr;
  72.     old_ptr = tss_ptr;
  73.     tss_ptr = utils_tss;
  74.     utils_tss->tss_eip = (word16) _do_memmov32;
  75.     utils_tss->tss_ecx = len;
  76.     utils_tss->tss_es = utils_tss->tss_ds = g_core * 8;
  77.     utils_tss->tss_edi = vaddr;
  78.     utils_tss->tss_esi = ptr2linear(ptr);
  79.     go_til_done();
  80.     tss_ptr = old_ptr;
  81. }
  82.  
  83. void __pascal memget(word32 vaddr, void far * ptr, word16 len)
  84. {
  85.     TSS *old_ptr;
  86.     old_ptr = tss_ptr;
  87.     tss_ptr = utils_tss;
  88.     utils_tss->tss_eip = (word16) _do_memmov32;
  89.     utils_tss->tss_ecx = len;
  90.     utils_tss->tss_es = utils_tss->tss_ds = g_core * 8;
  91.     utils_tss->tss_edi = ptr2linear(ptr);
  92.     utils_tss->tss_esi = vaddr;
  93.     go_til_done();
  94.     tss_ptr = old_ptr;
  95. }
  96.  
  97. word8 __pascal peek8(word32 vaddr)
  98. {
  99.     word8 rv;
  100.     memget(vaddr, &rv, 1);
  101.     return rv;
  102. }
  103.  
  104. #if DEBUGGER
  105. word32 __pascal peek32(word32 vaddr)
  106. {
  107.     word32 rv;
  108.     memget(vaddr, &rv, 4);
  109.     return rv;
  110. }
  111.  
  112. void __pascal poke32(word32 vaddr, word32 v)
  113. {
  114.     memput(vaddr, &v, 4);
  115. }
  116.  
  117. void save_npx(void)
  118. {
  119.     TSS *old_ptr;
  120.     old_ptr = tss_ptr;
  121.     tss_ptr = utils_tss;
  122.     utils_tss->tss_eip = (word16) _do_save_npx;
  123.     utils_tss->tss_ds = utils_tss->tss_es = g_rdata * 8;
  124.     go_til_done();
  125.     tss_ptr = old_ptr;
  126. }
  127.  
  128. #endif
  129.