中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » Djgpp 里无法调用中断 int13 ah=48h 苦恼~!
作者:
标题: Djgpp 里无法调用中断 int13 ah=48h 苦恼~! 上一主题 | 下一主题
BSLTT
初级用户





积分 59
发帖 18
注册 2005-12-25
状态 离线
『楼 主』:  Djgpp 里无法调用中断 int13 ah=48h 苦恼~! 使用 LLM 解释/回答一下

Djgpp 里无法调用中断 int13 ah=48h 苦恼~!

//#define _BORLAND_DOS_REGS
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <sys/segments.h>
#include <go32.h>
#include <sys/movedata.h>

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;

int main()
{
union REGS regs;
struct SREGS sregs;

struct{
WORD size;
WORD inforflags;
DWORD cylns;
DWORD heads;
DWORD sects;
DWORD tslow;
DWORD tshi;
WORD bps;
}package;

regs.h.ah=0x48;
regs.h.dl=0x80;

//--- TC ---// TC用下面这两行传入段地址和偏移量就没有问题
//sregs.ds = FP_SEG(&package);
//regs.x.si = FP_OFF(&package);

//--- DJGPP ---// 可在DJGPP里我就不知道怎么输入这个量了~!
sregs.ds = _my_ds();
regs.x.si = _my_ds();

printf("ds=%x si=%x \n",sregs.ds,regs.x.si);

printf("package= %x \n",&package);

int386x(0x13,&regs,&regs,&sregs);
printf("%d \n",regs.h.ah);

printf("cyliners = %ld\n",package.cylns);
printf("heads = %ld \n",package.heads);
printf("sect/cyln = %ld \n",package.sects);
printf("Lsectors = %ld\n",package.tslow);
printf("Hsectors = %ld\n",package.tshi);
printf("bytes = %ld\n",package.bps);
printf("gb = %.f GB\n",(double)(package.tslow*512.0/pow(10,9)));
printf("-------------------------- \n \n \n");

}


高手显身吧~!快救救我~!


2005-12-26 23:26
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
darkradx
高级用户





积分 972
发帖 420
注册 2004-5-16
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

BIOS issue




平生进退如飙风
2005-12-28 08:32
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
BSLTT
初级用户





积分 59
发帖 18
注册 2005-12-25
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下

楼上的兄弟,能不能给一个明白的答案呀?(请不要吐水哎~!)谢谢~!


2005-12-28 09:41
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
darkradx
高级用户





积分 972
发帖 420
注册 2004-5-16
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

try __dpmi_int




平生进退如飙风
2005-12-28 21:52
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
BSLTT
初级用户





积分 59
发帖 18
注册 2005-12-25
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

不知道是不是我笨, __dpmi_int(0x13,&r);

我怎么把sreg放进去呢????


2005-12-29 09:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
darkradx
高级用户





积分 972
发帖 420
注册 2004-5-16
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

参数结构都不一样...




平生进退如飙风
2005-12-29 11:05
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
BSLTT
初级用户





积分 59
发帖 18
注册 2005-12-25
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

麻烦你看清楚我的问题!


2005-12-29 23:41
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dos_jacky
初级用户




积分 124
发帖 10
注册 2004-10-9
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

#include <sys/nearptr.h>
#include <crt0.h>

void * MK_FP (unsigned short seg, unsigned short ofs)
{
if ( !(_crt0_startup_flags & _CRT0_FLAG_NEARPTR) )
if (!__djgpp_nearptr_enable ())
return (void *)0;
return (void *) (seg*16 + ofs + __djgpp_conventional_base);
}


2006-2-13 16:25
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: