add directory study
This commit is contained in:
167
study/hardware/Floppy/floppy/FMT256.CPP
Normal file
167
study/hardware/Floppy/floppy/FMT256.CPP
Normal file
@@ -0,0 +1,167 @@
|
||||
#include <stdio.h>
|
||||
#include <conio.h>
|
||||
#include <dos.h>
|
||||
#include <stdlib.h>
|
||||
#include <bios.h>
|
||||
#include <string.h>
|
||||
|
||||
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);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ଠ<EFBFBD><E0ACA0><EFBFBD>㥬<EFBFBD><E3A5AC> <20><><EFBFBD><E0AEA6>
|
||||
#define TRK 20
|
||||
|
||||
// <20><><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD> - 256 <20><><EFBFBD><EFBFBD>
|
||||
#define SEC_SIZE 1
|
||||
|
||||
union REGS inregs, outregs;
|
||||
char diskbuf[512];
|
||||
char diskbuf1[512];
|
||||
char buf[80];
|
||||
|
||||
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>ணࠬ<EFBFBD><EFBFBD> 㭨<>⮦<EFBFBD><E2AEA6> ᮤ<>ন<EFBFBD><E0A6A8><EFBFBD>"
|
||||
"\n20-<2D> <20><><EFBFBD><E0AEA6> <20><>᪠ <20>:."
|
||||
"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>த<EFBFBD><E0AEA4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? (Y,N)\n");
|
||||
i = getch();
|
||||
if((i != 'y') && (i != 'Y'))
|
||||
return(-1);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>砥<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
dpt_ptr = get_dpt();
|
||||
|
||||
// <20><><EFBFBD>࠭塞 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC>
|
||||
old_sec_size = dpt_ptr->sec_size;
|
||||
old_fill_char = dpt_ptr->fill_char;
|
||||
old_eot = dpt_ptr->eot;
|
||||
|
||||
// <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
// <20><><EFBFBD> ࠧ<><E0A0A7><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD><EFBFBD>, ᨬ<><E1A8AC><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
|
||||
// <20><>ଠ<EFBFBD><E0ACA0><EFBFBD><E0AEA2><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ ᥪ<><E1A5AA> <20><> <20><><EFBFBD><E0AEA6>
|
||||
dpt_ptr->sec_size = SEC_SIZE;
|
||||
dpt_ptr->fill_char = 0x77;
|
||||
dpt_ptr->eot = 18;
|
||||
|
||||
// <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ⨯ <20><>᪠
|
||||
inregs.h.ah = 0x17;
|
||||
inregs.h.al = 3;
|
||||
inregs.h.dl = 0;
|
||||
int86(0x13, &inregs, &outregs);
|
||||
|
||||
// <20><>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>।<EFBFBD> <20><><EFBFBD> <20><>ଠ<EFBFBD><E0ACA0><EFBFBD><E0AEA2><EFBFBD><EFBFBD>
|
||||
inregs.h.ah = 0x18;
|
||||
inregs.h.ch = TRK;
|
||||
inregs.h.cl = dpt_ptr->eot;
|
||||
inregs.h.dl = 0;
|
||||
int86(0x13, &inregs, &outregs);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD> <20>㭪樨 <20><>ଠ<EFBFBD><E0ACA0><EFBFBD><E0AEA2><EFBFBD><EFBFBD>
|
||||
di.drive = 0;
|
||||
di.head = 0;
|
||||
di.track = TRK;
|
||||
di.sector = 1;
|
||||
di.nsectors = 18;
|
||||
di.buffer = diskbuf;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>⠢<EFBFBD><E2A0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><>ଠ<EFBFBD><E0ACA0> <20><><EFBFBD> 18 ᥪ<><E1A5AA>
|
||||
for(i=0, j=1; j<19; i += 4, j++)
|
||||
{
|
||||
diskbuf[i] = TRK;
|
||||
diskbuf[i+1] = 0;
|
||||
diskbuf[i+2] = j;
|
||||
diskbuf[i+3] = SEC_SIZE;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD>뢠<EFBFBD><EBA2A0> <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><>ଠ<EFBFBD><E0ACA0><EFBFBD><E0AEA2><EFBFBD><EFBFBD> <20><><EFBFBD><E0AEA6>
|
||||
status = _bios_disk(_DISK_FORMAT, &di) >> 8;
|
||||
printf("\n<EFBFBD><EFBFBD>ଠ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>訫<EFBFBD><E8A8AB><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>: %d",
|
||||
status);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>뢠<EFBFBD><EBA2A0> <20><><EFBFBD><EFBFBD>ଠ<EFBFBD><E0ACA0><EFBFBD> <20> <20><><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD>
|
||||
printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "
|
||||
"<EFBFBD> <20><><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD>,"
|
||||
"\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ப<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ॢ<EFBFBD><E0A5A2><EFBFBD><EFBFBD><EFBFBD> 80 <20><><EFBFBD>⮢"
|
||||
"\n->");
|
||||
|
||||
gets(buf);
|
||||
strcpy(diskbuf,buf);
|
||||
|
||||
di.drive = 0;
|
||||
di.head = 0;
|
||||
di.track = 20;
|
||||
di.sector = 1;
|
||||
di.nsectors = 1;
|
||||
di.buffer = diskbuf;
|
||||
|
||||
status = _bios_disk(_DISK_WRITE, &di) >> 8;
|
||||
|
||||
if(status)
|
||||
{
|
||||
printf("\n<EFBFBD>訡<EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᥪ<><E1A5AA><EFBFBD>: %d",
|
||||
status);
|
||||
return(-1);
|
||||
}
|
||||
|
||||
di.drive = 0;
|
||||
di.head = 0;
|
||||
di.track = 20;
|
||||
di.sector = 1;
|
||||
di.nsectors = 1;
|
||||
di.buffer = diskbuf1;
|
||||
|
||||
for(i = 0; i < 3; i++)
|
||||
{
|
||||
status = _bios_disk(_DISK_READ, &di) >> 8;
|
||||
if(!status) break;
|
||||
}
|
||||
|
||||
printf("\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠭<EFBFBD> <20><> <20><><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD>⭮<EFBFBD><E2ADAE> ᥪ<><E1A5AA><EFBFBD><EFBFBD>:\n%s\n",
|
||||
diskbuf1);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20>
|
||||
// ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
dpt_ptr->sec_size = old_sec_size;
|
||||
dpt_ptr->fill_char = old_fill_char;
|
||||
dpt_ptr->eot = old_eot;
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* get_dpt
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD> ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
*
|
||||
* <20>㭪<EFBFBD><E3ADAA><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>頥<EFBFBD> 㪠<><E3AAA0>⥫<EFBFBD> <20><> ⠡<><E2A0A1><EFBFBD><EFBFBD>
|
||||
* <20><>ࠬ<EFBFBD><E0A0AC> <20><>᪥<EFBFBD><E1AAA5>
|
||||
*
|
||||
**/
|
||||
DPT far *get_dpt(void)
|
||||
{
|
||||
void far * far *ptr;
|
||||
ptr = (void far * far *)MK_FP(0x0, 0x78);
|
||||
return(DPT far*)(*ptr);
|
||||
}
|
||||
Reference in New Issue
Block a user