Files
2024-02-19 00:25:23 -05:00

127 lines
2.7 KiB
C++
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <bios.h>
// <20>®¬¥à ä®à¬ â¨à㥬®© ¤®à®¦ª¨
#define TRK 20
// Š®¤ à §¬¥à  ᥪâ®à  - 512 ¡ ©â
#define SEC_SIZE 2
typedef struct _DPT_
{
unsigned char srt_hut;
unsigned char dma_hlt;
unsigned char motor_w;
unsigned char sec_size;
unsigned char eot;
unsigned char gap_rw;
unsigned char dtl;
unsigned char gap_f;
unsigned char fill_char;
unsigned char hst;
unsigned char mot_start;
} DPT;
DPT far *get_dpt(void);
union REGS inregs, outregs;
char diskbuf[512];
int main(void)
{
struct diskinfo_t di;
unsigned status;
unsigned char old_sec_size,
old_fill_char, old_eot;
int i, j;
DPT far *dpt_ptr;
printf("\n<EFBFBD>ணࠬ¬  ã­¨ç⮦¨â ᮤ¥à¦¨¬®¥"
"\n20-© ¤®à®¦ª¨ ¤¨áª  €:."
"\n†¥« ¥â¥ ¯à®¤®«¦¨âì? (Y,N)\n");
i = getch();
if((i != 'y') && (i != 'Y'))
return(-1);
// <20>®«ãç ¥¬  ¤à¥á â ¡«¨æë ¯ à ¬¥â஢ ¤¨áª¥âë
dpt_ptr = get_dpt();
// ‘®å࠭塞 áâ àë¥ §­ ç¥­¨ï ¨§ â ¡«¨æë ¯ à ¬¥â஢
old_sec_size = dpt_ptr->sec_size;
old_fill_char = dpt_ptr->fill_char;
old_eot = dpt_ptr->eot;
// “áâ ­ ¢«¨¢ ¥¬ ¢ â ¡«¨æ¥ ¯ à ¬¥â஢ ¤¨áª¥âë
// ª®¤ à §¬¥à  ᥪâ®à , ᨬ¢®« § ¯®«­¥­¨ï ¯à¨
// ä®à¬ â¨à®¢ ­¨¨, ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  ¤®à®¦ª¥
dpt_ptr->sec_size = SEC_SIZE;
dpt_ptr->fill_char = 0xf6;
dpt_ptr->eot = 18;
// “áâ ­ ¢«¨¢ ¥¬ ⨯ ¤¨áª 
inregs.h.ah = 0x17;
inregs.h.al = 3;
inregs.h.dl = 0;
int86(0x13, &inregs, &outregs);
// “áâ ­ ¢«¨¢ ¥¬ á।㠤«ï ä®à¬ â¨à®¢ ­¨ï
inregs.h.ah = 0x18;
inregs.h.ch = TRK;
inregs.h.cl = dpt_ptr->eot;
inregs.h.dl = 0;
int86(0x13, &inregs, &outregs);
// <20>®¤£®â ¢«¨¢ ¥¬ ¯ à ¬¥âàë
// ¤«ï ä㭪樨 ä®à¬ â¨à®¢ ­¨ï
di.drive = 0;
di.head = 0;
di.track = TRK;
di.sector = 1;
di.nsectors = 18;
di.buffer = diskbuf;
// <20>®¤£®â ¢«¨¢ ¥¬ ¡ãä¥à ä®à¬ â  ¤«ï 18 ᥪâ®à®¢
// ˆá¯®«ì§ã¥¬ ®¡à â­ë© ¯®à冷ª à á¯®«®¦¥­¨ï ᥪâ®à®¢
// ­  ¤®à®¦ª¥
for(i=0, j=18; j>0; i += 4, j--)
{
diskbuf[i] = TRK;
diskbuf[i+1] = 0;
diskbuf[i+2] = j;
diskbuf[i+3] = SEC_SIZE;
}
// ‚ë§ë¢ ¥¬ äã­ªæ¨î ä®à¬ â¨à®¢ ­¨ï ¤®à®¦ª¨
status = _bios_disk(_DISK_FORMAT, &di) >> 8;
printf("\n”®à¬ â¨à®¢ ­¨¥ § ¢¥à訫®áì á ª®¤®¬: %d",
status);
// ‚®ááâ ­ ¢«¨¢ ¥¬ áâ àë¥ §­ ç¥­¨ï ¢
// â ¡«¨æ¥ ¯ à ¬¥â஢ ¤¨áª¥âë
dpt_ptr->sec_size = old_sec_size;
dpt_ptr->fill_char = old_fill_char;
dpt_ptr->eot = old_eot;
return(0);
}
/**
* get_dpt
*
* ‚ëç¨á«¨âì  ¤à¥á â ¡«¨æë ¯ à ¬¥â஢ ¤¨áª¥âë
*
* ”ã­ªæ¨ï ¢®§¢à é ¥â 㪠§ â¥«ì ­  â ¡«¨æã
* ¯ à ¬¥â஢ ¤¨áª¥âë
*
**/
DPT far *get_dpt(void)
{
void far * far *ptr;
ptr = (void far * far *)MK_FP(0x0, 0x78);
return(DPT far*)(*ptr);
}