Board logo

标题: Djgpp 里无法调用中断 int13 ah=48h 苦恼~! [打印本页]

作者: BSLTT     时间: 2005-12-26 23:26    标题: Djgpp 里无法调用中断 int13 ah=48h 苦恼~!

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");

}


高手显身吧~!快救救我~!
作者: darkradx     时间: 2005-12-28 08:32
BIOS issue
作者: BSLTT     时间: 2005-12-28 09:41
楼上的兄弟,能不能给一个明白的答案呀?(请不要吐水哎~!)谢谢~!
作者: darkradx     时间: 2005-12-28 21:52
try __dpmi_int
作者: BSLTT     时间: 2005-12-29 09:37
不知道是不是我笨, __dpmi_int(0x13,&r);

我怎么把sreg放进去呢????
作者: darkradx     时间: 2005-12-29 11:05
参数结构都不一样...
作者: BSLTT     时间: 2005-12-29 23:41
麻烦你看清楚我的问题!
作者: dos_jacky     时间: 2006-2-13 16:25
#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);
  }