From: "Angelene and Klaus Thane" Newsgroups: comp.os.msdos.djgpp References: Subject: It works, it works....THANK YOU!!!!(One ity, bity question more, multiple choice) Lines: 129 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.00.2615.200 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200 Message-ID: <%CAe4.19283$Ak.294380@news1.mia> Date: Tue, 11 Jan 2000 01:05:08 -0600 NNTP-Posting-Host: 216.76.248.157 X-Trace: news1.mia 947574331 216.76.248.157 (Tue, 11 Jan 2000 02:05:31 EST) NNTP-Posting-Date: Tue, 11 Jan 2000 02:05:31 EST To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com #include #include #include #include #include #include #include int main (void) { __dpmi_regs regs; int DosMem01, DosMem02, DosBufferSlct01, DosBufferSlct02; short CallSize=0x001A; unsigned short BytesPerSector; FILE *fp; if ((fp=fopen("output.txt", "w"))==NULL) { fprintf(stderr, "unable to open file for writing"); return 1; } clrscr(); fprintf(fp, "Output.txt \n" "Allocating %d paragraphs of DOS memory\n", ((CallSize+15) >> 4)); fprintf(stdout, "Output.txt \n" "Allocating %d paragraphs of DOS memory\n", ((CallSize+15) >> 4)); getch(); DosMem01= __dpmi_allocate_dos_memory(((CallSize+15)>>4), &DosBufferSlct01); fprintf(fp, "%x is the segment, making ", DosMem01); fprintf(stdout, "%x is the segment, making ", DosMem01); DosMem01=DosMem01 << 4; fprintf(fp, "%x the linear address\n", DosMem01); fprintf(stdout, "%x the linear address\n", DosMem01); getch(); dosmemput(&CallSize, 2, DosMem01); regs.h.ah=0x48; regs.h.dl=0x80; regs.x.ds = DosMem01 / 0x10; regs.x.si = DosMem01 % 0x10; __dpmi_int(0x13, ®s); if (regs.x.flags & 1) { fprintf(stderr, "int call failure"); exit(1); } dosmemget(DosMem01 + 0x18, 2, &BytesPerSector); fprintf(fp, "There are %d bytes per sector", BytesPerSector); fprintf(stdout, "There are %d bytes per sector", BytesPerSector); fflush(stdout); fflush(fp); fclose(fp); getch(); return 0; } ===================================================================== Output.txt Allocating 2 paragraphs of DOS memory 1819 is the segment, making 18190 the linear address There are 512 bytes per sector ===================================================================== I have completely dumped the idea of using the __tb since it is only guaranteed to be 2K; I'll need a little more. Which brings me to my next question! (short answer, I swear) Considering this function: Extended int13 read Inp.: AH = 42h DL = drive number DS:SI -> disk address packet (see #0182) Return: CF clear if successful AH = 00h CF set on error AH = error code (see #0144) disk address packet's block count field set to number of blocks successfully transferred Table 0182 Format of disk address packet: Offset Size Description 00h BYTE 10h (size of packet) 01h BYTE reserved (0) 02h WORD number of blocks to transfer (max 007Fh for Phoenix EDD) 04h DWORD -> transfer buffer 08h QWORD starting absolute block number (for non-LBA devices, compute as (Cylinder*NumHeads + SelectedHead) * SectorPerTrack + SelectedSector - 1 Copied from Ralf Brown's Interrupt List 04h DWORD -> transfer buffer is a _________? a. A linear address in the format of an unsigned integer b. An address in the format segment:offset (segment=04h 05h; offset=06h 07h) c. An address in the format segment:offset (offset=05h 04h; segment=07h 06h) d. None of the above While it seems to me 'b' might be the right answer, I really have not idea. TIA KT