IDC script to create PSP segment From: Paul Kraszewski <PKraszewski@BigFoot.com> I attach 2 IDC files, one for making PSP in EXE file and the other for making PSP in COM file. Thay may need remastering, as IDC documentation is rather poor, but really help to start off with the program. //========================================================================== // FIRST FILE //========================================================================== //------------------------------------------------------------------------- static CW(off,name,cmt) { auto x; x = [ 0x080, off ]; MakeWord(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CD(off,name,cmt) { auto x; x = [ 0x080, off ]; MakeDword(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CB(off,name,cmt) { auto x; x = [ 0x080, off ]; MakeByte(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CA(off,siz,name,cmt) { auto x; x = [ 0x080, off ]; MakeArray(x,siz); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CmtBdata() { CW(0x000, "PSP_Exit","Process exit entry point"); CW(0x002, "PSP_Memory","First free segment"); CB(0x004, "PSP_Reserved1","Reserved"); CA(0x005,0x005,"PSP_SysCall","System call entry point"); CD(0x00A, "PSP_Int22","Int 22 entry point"); CD(0x00E, "PSP_Int23","Int 23 entry point"); CD(0x012, "PSP_Int24","Int 24 entry point"); CA(0x016,0x016,"PSP_Reserved2","Reserved for DOS"); CW(0x02C, "PSP_Env","Environment segment"); CA(0x02E,0x02E,"PSP_Reserved3","Reserved for DOS"); CA(0x05C,0x010,"PSP_FCB1","FCB block of the first prog arg"); CA(0x06C,0x014,"PSP_FCB2","FCB block of the second prog arg"); CB(0x080, "PSP_ArgLen","Arguments length"); CA(0x081,0x07E,"PSP_Arguments","Arguments area"); } //------------------------------------------------------------------------- static main() { SegCreate(0x800,0x8FF,0x10,0,0,2); SegRename(0x800,"PSP_DATA"); SegClass(0x800,"PSPDATA"); CmtBdata(); SetReg(BeginEA(),"ds",0x10); // SegDefReg(BeginEA(),"ds",0x10); } //========================================================================== // SECOND FILE //========================================================================== //------------------------------------------------------------------------- static CW(off,name,cmt) { auto x; x = SegByName("seg000")+off; MakeWord(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CD(off,name,cmt) { auto x; x = SegByName("seg000")+off; MakeDword(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CB(off,name,cmt) { auto x; x = SegByName("seg000")+off; MakeByte(x); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CA(off,siz,name,cmt) { auto x; x = SegByName("seg000")+off; MakeArray(x,siz); MakeName(x,name); MakeRptCmt(x,cmt); } //------------------------------------------------------------------------- static CmtBdata() { CW(0x000, "PSP_Exit","Process exit entry point"); CW(0x002, "PSP_Memory","First free segment"); CB(0x004, "PSP_Reserved1","Reserved"); CA(0x005,0x005,"PSP_SysCall","System call entry point"); CD(0x00A, "PSP_Int22","Int 22 entry point"); CD(0x00E, "PSP_Int23","Int 23 entry point"); CD(0x012, "PSP_Int24","Int 24 entry point"); CA(0x016,0x016,"PSP_Reserved2","Reserved for DOS"); CW(0x02C, "PSP_Env","Environment segment"); CA(0x02E,0x02E,"PSP_Reserved3","Reserved for DOS"); CA(0x05C,0x010,"PSP_FCB1","FCB block of the first prog arg"); CA(0x06C,0x014,"PSP_FCB2","FCB block of the second prog arg"); CB(0x080, "PSP_ArgLen","Arguments length"); CA(0x081,0x07F,"PSP_Arguments","Arguments area"); } //------------------------------------------------------------------------- static main() { SegBounds(BeginEA(),SegStart(BeginEA())-0x100,SegEnd(BeginEA())); CmtBdata(); }