freebsd-ports/emulators/pcemu/files/patch-ab
Joerg Wunsch 869622ad38 This is David Hedley's pcemu 8086 PC emulator.
Technically, i consider this an excellent work.

I've made some efforts to make it easier for people get it actually up
& running.  This would have required an image of a DOS boot floppy,
which we cannot provide.  Instead, i wrote a small bootstrap loader
(basically a small more(1) clone with builtin text) that can be
``booted'' from.  It instructs the user how to get the image of a
bootable DOS floppy, and where to find the various files.

(The bootstrap loader requires bcc to be recompiled, but i'm providing
a gzip'ed/uuencoded version in the files directory as well.)

The pkg directory is not yet done.  Will follow RSN. :)
1995-03-27 21:35:21 +00:00

80 lines
1.8 KiB
Plaintext

*** cpu.c.orig Wed Jun 22 16:24:50 1994
--- cpu.c Tue Jan 24 18:37:17 1995
***************
*** 1127,1132 ****
--- 1127,1133 ----
static INLINE2 void i_daa(void)
{
+ /* Opcode 0x27 */
if (AF || ((*bregs[AL] & 0xf) > 9))
{
*bregs[AL] += 6;
***************
*** 1300,1305 ****
--- 1301,1330 ----
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,4146 ****
{
fprintf(stderr,"Error: Unimplemented opcode %02X at cs:ip = %04X:%04X\n",
c_cs[ip-1],sregs[CS],ip-1);
! exit(1);
}
--- 4165,4171 ----
{
fprintf(stderr,"Error: Unimplemented opcode %02X at cs:ip = %04X:%04X\n",
c_cs[ip-1],sregs[CS],ip-1);
! /* exit(1); */
}
***************
*** 4218,4224 ****
case 0x2c: i_sub_ald8(); break;
case 0x2d: i_sub_axd16(); break;
case 0x2e: i_cs(); break;
! case 0x2f: i_notdone(); break;
case 0x30: i_xor_br8(); break;
case 0x31: i_xor_wr16(); break;
case 0x32: i_xor_r8b(); break;
--- 4243,4249 ----
case 0x2c: i_sub_ald8(); break;
case 0x2d: i_sub_axd16(); break;
case 0x2e: i_cs(); break;
! case 0x2f: i_das(); break;
case 0x30: i_xor_br8(); break;
case 0x31: i_xor_wr16(); break;
case 0x32: i_xor_r8b(); break;