[Dosemu-cvs] SF.net SVN: dosemu: [1638] trunk/src/emu-i386/simx86/codegen-sim.c
Brought to you by:
bartoldeman
From: <bar...@us...> - 2006-10-28 12:38:14
|
Revision: 1638 http://svn.sourceforge.net/dosemu/?rev=1638&view=rev Author: bartoldeman Date: 2006-10-28 05:38:08 -0700 (Sat, 28 Oct 2006) Log Message: ----------- Correct DAA & DAS in simulator. Modified Paths: -------------- trunk/src/emu-i386/simx86/codegen-sim.c Modified: trunk/src/emu-i386/simx86/codegen-sim.c =================================================================== --- trunk/src/emu-i386/simx86/codegen-sim.c 2006-10-28 10:05:35 UTC (rev 1637) +++ trunk/src/emu-i386/simx86/codegen-sim.c 2006-10-28 12:38:08 UTC (rev 1638) @@ -1756,18 +1756,23 @@ // get n bytes from parameter stack unsigned char op = Offs_From_Arg(); switch (op) { - case DAA: + case DAA: { + char cy = 0; + unsigned char altmp = DR1.b.bl; FlagSync_AP(); if (((DR1.b.bl & 0x0f) > 9 ) || (IS_AF_SET)) { DR1.b.bl += 6; - RFL.S1 |= 8; RFL.S2 |= 8; // SET_AF + cy = (CPUBYTE(Ofs_FLAGS)&1) || (altmp > 0xf9); + RFL.S1 |= 8; RFL.S2 |= 8; // SET_AF (8+8 gives AF) } else { RFL.S1 &= 0xf7; RFL.S2 &= 0xf7; // CLR_AF } - if ((DR1.b.bl > 0x9f) || (IS_CF_SET)) { + if ((altmp > 0x99) || (IS_CF_SET)) { DR1.b.bl += 0x60; - SET_CF(1); - } /*else CLEAR_CF;*/ + cy = 1; + } + SET_CF(cy); + } break; case DAS: { char cy = 0; @@ -1775,7 +1780,7 @@ FlagSync_AP(); if (((altmp & 0x0f) > 9) || (IS_AF_SET)) { DR1.b.bl -= 6; - cy = (CPUBYTE(Ofs_FLAGS)&1) || (DR1.b.bl < 6); + cy = (CPUBYTE(Ofs_FLAGS)&1) || (altmp < 6); RFL.S1 |= 8; RFL.S2 |= 8; // SET_AF } else { RFL.S1 &= 0xf7; RFL.S2 &= 0xf7; // CLR_AF This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |