2013-09-26 17:14:40 +02:00

71 lines
1.7 KiB
Plaintext

$NetBSD: patch-ab,v 1.3 2004/07/09 12:45:23 wiz Exp $
--- cpu.c.orig 1994-06-22 16:24:50.000000000 +0200
+++ cpu.c
@@ -253,7 +253,7 @@ static INLINE2 void i_ ## name ## _axd16
#define JumpCond(name, cond) \
-static INLINE2 void i_j ## name ## (void) \
+static INLINE2 void i_j ## name (void) \
{ \
register int tmp = (int)((INT8)GetMemInc(c_cs,ip)); \
if (cond) ip = (WORD)(ip+tmp); \
@@ -1127,6 +1127,7 @@ static INLINE2 void i_es(void)
static INLINE2 void i_daa(void)
{
+ /* Opcode 0x27 */
if (AF || ((*bregs[AL] & 0xf) > 9))
{
*bregs[AL] += 6;
@@ -1300,6 +1301,30 @@ static INLINE2 void i_cs(void)
c_ss = SegToMemPtr(SS);
}
+static INLINE2 void i_das(void)
+{
+ /* Opcode 0x2f */
+ if (AF || ((*bregs[AL] & 0xf) > 9))
+ {
+ *bregs[AL] -= 6;
+ AF = 1;
+ }
+ else
+ AF = 0;
+
+ if (CF || (*bregs[AL] > 0x9f))
+ {
+ *bregs[AL] -= 0x60;
+ CF = 1;
+ }
+ else
+ CF = 0;
+
+ SetPF(*bregs[AL]);
+ SetSFB(*bregs[AL]);
+ SetZFB(*bregs[AL]);
+}
+
/* most XOR instructions go here */
@@ -4140,7 +4165,7 @@ static INLINE2 void i_notdone(void)
{
fprintf(stderr,"Error: Unimplemented opcode %02X at cs:ip = %04X:%04X\n",
c_cs[ip-1],sregs[CS],ip-1);
- exit(1);
+/* exit(1); */
}
@@ -4218,7 +4243,7 @@ void execute(void)
case 0x2c: i_sub_ald8(); break;
case 0x2d: i_sub_axd16(); break;
case 0x2e: i_cs(); break;
- case 0x2f: i_notdone(); break;
+ case 0x2f: i_das(); break;
case 0x30: i_xor_br8(); break;
case 0x31: i_xor_wr16(); break;
case 0x32: i_xor_r8b(); break;