Hi!

- optimize for .callerARG1.

--- Begin Message ---
diff -ruNp old/kernel/inthndlr.c new/kernel/inthndlr.c
--- old/kernel/inthndlr.c       2004-05-31 07:29:14.000000000 +0000
+++ new/kernel/inthndlr.c       2004-05-31 07:36:16.000000000 +0000
@@ -1642,7 +1642,7 @@ struct int2f12regs {
   UWORD di, si, bp;
   xreg b, d, c, a;
   UWORD ip, cs, flags;
-  UWORD callerARG1;             /* used if called from INT2F/12 */
+  xreg callerARG1;             /* used if called from INT2F/12 */
 };
 
 /* WARNING: modifications in `r' are used outside of int2F_12_handler()
@@ -1683,11 +1683,11 @@ VOID ASMCFUNC int2F_12_handler(struct in
       break;
 
     case 0x06:                 /* invoke critical error */
-
       /* code, drive number, error, device header */
-      r.AL = CriticalError(r.callerARG1 >> 8,
-                           (r.callerARG1 & (EFLG_CHAR << 8)) ? 0 :
-                           r.callerARG1 & 0xff, r.DI, MK_FP(r.BP, r.SI));
+      r.AL = CriticalError(r.callerARG1.b.h,
+                           (r.callerARG1.b.h & EFLG_CHAR)
+                               ? 0 : r.callerARG1.b.l,
+                          r.DI, MK_FP(r.BP, r.SI));
       break;
 
     case 0x08:                 /* decrease SFT reference count */
@@ -1746,18 +1746,18 @@ VOID ASMCFUNC int2F_12_handler(struct in
     }
 
     case 0x12:                 /* get length of asciiz string */
-
       r.CX = fstrlen(MK_FP(r.ES, r.DI)) + 1;
-
       break;
 
-    case 0x13:
-      /* uppercase character */  
+    case 0x13:         /* uppercase character */
+    {
       /* for now, ASCII only because nls.c cannot handle DS!=SS */
-      r.AL = (unsigned char)r.callerARG1;
-      if (r.AL >= 'a' && r.AL <= 'z')
-        r.AL -= 'a' - 'A';
+      unsigned char ch = r.callerARG1.b.l;
+      if (ch >= (UBYTE)'a' && ch <= (UBYTE)'z')
+        ch -= (UBYTE)('a' - 'A');
+      r.AL = ch;
       break;
+    }
 
     case 0x16:
       /* get address of system file table entry - used by NET.EXE
@@ -1793,10 +1793,9 @@ VOID ASMCFUNC int2F_12_handler(struct in
                                    ;
                                    ; probable use: get sizeof(CDSentry)
                                  */
-      {
-        struct cds FAR *cdsp = get_cds(r.callerARG1 & 0xff);
-
-        if (cdsp == NULL)
+    {
+        const struct cds FAR *cdsp;
+        if ((cdsp = get_cds(r.callerARG1.b.l)) == NULL)
         {
           r.FLAGS |= FLG_CARRY;
           break;
@@ -1805,7 +1804,7 @@ VOID ASMCFUNC int2F_12_handler(struct in
         r.SI = FP_OFF(cdsp);
         r.FLAGS &= ~FLG_CARRY;
         break;
-      }
+    }
 
     case 0x18:                 /* get caller's registers */
 

--- End Message ---

Reply via email to