Date: Mon, 26 Feb 1996 13:21:41 -0500 From: dj (DJ Delorie) Message-Id: <199602261821.NAA16654@delorie.com> To: oandico@eee.upd.edu.ph CC: djgpp@delorie.com In-reply-to: (message from Orlando Andico on Mon, 26 Feb 1996 13:55:52 -0800 (GMT)) Subject: Re: DOSemu > Since DOSemu has a DPMI mode, is it possible to run DJGPP under Linux? > has anyone tried this? I've done lots of djgpp development in dosemu. You need this patch: Xref: news-dnh.mv.net comp.os.linux.announce:1659 Path: news-dnh.mv.net!mv!news.sprintlink.net!howland.reston.ans.net!newsfeed.internetmci.com!chi-news.cic.net!nntp.coast.net!news00.sunet.se!sunic!news99.sunet.se!news.funet.fi!news.helsinki.fi!usenet From: Michael Leodolter Newsgroups: comp.os.linux.announce Subject: DPMI Patch against plain 0.60.4 Followup-To: comp.os.linux.development.system Date: Mon, 11 Dec 95 23:25:03 GMT Organization: Vienna University, Austria Lines: 120 Approved: linux-announce@news.ornl.gov (Lars Wirzenius) Message-ID: NNTP-Posting-Host: kruuna.helsinki.fi Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit -----BEGIN PGP SIGNED MESSAGE----- Hi all DOSEMU-Users/Developers, with the following patch it is possible to run PM make/compiler compinations. I tried it with DJ200 make on a dir with 15 obj-files, and it works fine. - ----- cut here ----- *** dpmi/dpmi.c.orig Sat Nov 4 18:46:44 1995 - --- dpmi/dpmi.c Wed Dec 6 11:33:33 1995 *************** *** 190,195 **** - --- 190,205 ---- #define vm86_regs sigcontext #endif unsigned long RealModeContext; + /* + * With this stack nested PM programs like DJ200's make/compiler work fine + * (maybe Borkland's protected mode make/compiler too). + * For do_int31 + * 0x0300: Simulate Real Mode Interrupt + * 0x0301: Call Real Mode Procedure With Far Return Frame + * 0x0302: Call Real Mode Procedure With Iret Frame + */ + unsigned long RealModeContext_Stack[DPMI_max_rec_rm_func]; + unsigned long RealModeContext_Running = 0; static INTDESC Interrupt_Table[0x100]; static INTDESC Exception_Table[0x20]; *************** *** 982,987 **** - --- 992,1013 ---- /*2ch*/ *++lp = 0xffffffff; } + static inline void save_rm_context() + { + if (RealModeContext_Running >= DPMI_max_rec_rm_func) { + error("DPMI: RealModeContext_Running = 0x%4x\n",RealModeContext_Running++); + return; + } + RealModeContext_Stack[RealModeContext_Running++] = RealModeContext; + } + + static inline void restore_rm_context() + { + if (RealModeContext_Running-- > DPMI_max_rec_rm_func) + return; + RealModeContext = RealModeContext_Stack[RealModeContext_Running]; + } + static inline void save_rm_regs() { if (DPMI_rm_procedure_running >= DPMI_max_rec_rm_func) { *************** *** 1231,1236 **** - --- 1257,1263 ---- case 0x0301: /* Call Real Mode Procedure With Far Return Frame */ case 0x0302: /* Call Real Mode Procedure With Iret Frame */ save_rm_regs(); + save_rm_context(); RealModeContext = GetSegmentBaseAddress(_es) + (DPMIclient_is_32 ? _edi : _LWORD(edi)); { struct RealModeCallStructure *rmreg = (struct RealModeCallStructure *) RealModeContext; *************** *** 2088,2094 **** my_sp = LWORD(esp); NOCARRY; ! save_rm_regs(); REG(cs) = DPMI_SEG; REG(eip) = DPMI_OFF + HLT_OFF(DPMI_return_from_dos); - --- 2115,2123 ---- my_sp = LWORD(esp); NOCARRY; ! if(!in_dpmi) { /* Don't eat rm regs if already in dpmi */ ! save_rm_regs(); ! } REG(cs) = DPMI_SEG; REG(eip) = DPMI_OFF + HLT_OFF(DPMI_return_from_dos); *************** *** 2944,2949 **** - --- 2973,2979 ---- } else if (lina == (unsigned char *) (DPMI_ADD + HLT_OFF(DPMI_return_from_realmode))) { struct RealModeCallStructure *rmreg = (struct RealModeCallStructure *) RealModeContext; + restore_rm_context(); D_printf("DPMI: Return from Real Mode Procedure\n"); #ifdef SHOWREGS - ----- cut here ----- - ------------------------------------------------------- - - Michael Leodolter Brain Research Lab (BRL) - - - Inst. of Psychologie Univ. of Vienna - - - EMail: - - - or - - - Tel: <+43-222-40103-2436> Fax: <+43-222-406 64 22> - - -------------------------------------------------------- -----BEGIN PGP SIGNATURE----- Version: 2.6.2i iQCVAwUBMMy5Y4QRll5MupLRAQEdswQAs1iQy4Zm481Cje1jnKdDkkEZ0nZ5qtmU d/7WXJmhjNoJuKQRsTmUYM2YRMN5jQ5i09LqRmrFVTUmIXh8zTfEbVCn+ZTuZzuS UyfkrSNgFlGUnnqyL7jL8aA3a/ZwQ58lVy+2pBeUEO8mThM2SArbnoKBJ/JmUNJS 7Z10KvM89U8= =uBl9 -----END PGP SIGNATURE----- -- This article has been digitally signed by the moderator, using PGP. Finger wirzeniu@kruuna.helsinki.fi for PGP key needed for validating signature. Send submissions for comp.os.linux.announce to: linux-announce@news.ornl.gov PLEASE remember a short description of the software and the LOCATION.