📄 ouput.c
字号:
#ifdef debug
tx_string(debugport,"\r\n\0");
tx_string(debugport,"FAT info:\r\n\0");
sprintf(&text[0],"Boot Track Name = %s\r\n\0",&Boot.name[0]);
tx_string(debugport,&text[0]);
sprintf(&text[0],"Byte per Sector = %d\r\n\0",(unsigned int)Boot.BytesPerSec);
tx_string(debugport,&text[0]);
sprintf(&text[0],"Sector per Cluster = %d\r\n\0",(unsigned char)Boot.SecPerClust);
tx_string(debugport,&text[0]);
sprintf(&text[0],"First Partition Start LBA = %ld\r\n\0",Part.StartLBA);
tx_string(debugport,&text[0]);
sprintf(&text[0],"First Partition Size (in sector) = %ld\r\n\0",Part.Size);
tx_string(debugport,&text[0]);
sprintf(&text[0],"First DATA Sector = %ld\r\n\0",FirstDataSector);
tx_string(debugport,&text[0]);
#endif
#ifdef debug
sprintf(&text[0],"Name = %s\r\n\0",&File.Name[0]);
tx_string(debugport,&text[0]);
sprintf(&text[0],"Start Cluster = %ld\r\n\0",File.FirstClust);
tx_string(debugport,&text[0]);
sprintf(&text[0],"File Size = %ld\r\n\0",File.FileSize);
tx_string(debugport,&text[0]);
sprintf(&text[0],"\r\n\0");
tx_string(debugport,&text[0]);
#endif
//******************************************************************
//* READ A SECTOR
//* device = 0x00 or 0x01
//*
//******************************************************************
void ata_read_sector(unsigned char device, unsigned long lbasector, unsigned int *ptr)
{
unsigned int i;
lbasector &= 0x0FFFFFFF;
switch (device)
{
case 0x00:
ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
break;
case 0x01:
ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xF0);
break;
default:
ata_write_byte(ATA_IO_DEVICE_HEAD,lbasector >> 24 | 0xE0);
break;
}
while(busy);
ata_write_byte(ATA_IO_CYL_H,lbasector >> 16);
while(busy);
ata_write_byte(ATA_IO_CYL_L,lbasector >> 8);
while(busy);
ata_write_byte(ATA_IO_SECTORNUM,lbasector);
while(busy);
ata_write_byte(ATA_IO_SECTORCNT,0x01);
while(busy);
ata_write_byte(ATA_IO_CMD,CMD_READ_SECTORS);
while(busy);
while(!drq);
for (i=0;i<256;++i)
{
*ptr++ = ata_read_word(ATA_IO_DATA);
while(busy);
}
}
//******************************************************************
//* IDENTIFY ATA DEVICE
//* This routine assumes Drive 0 is the target drive.
//*
//******************************************************************
void ata_identify(void)
{
unsigned int word_read,i;
unsigned char buffer[50];
unsigned char data_H,data_L;
ata_write_byte(ATA_IO_CMD,CMD_IDENTIFY_DEVICE);
delay_us(1);
while(busy);
while(!drq);
word_read = ata_read_word(ATA_IO_DATA);
if(word_read & 0x8000) tx_string(debugport,"ATAPI Device Detected\r\n\0");
else tx_string(debugport,"ATA Device Detected\r\n\0");
if(word_read & 0x0080) tx_string(debugport,"Removable Media Device Detected\r\n\0");
if(word_read & 0x0040) tx_string(debugport,"Nonremovable Media Device Detected\r\n\0");
word_read = ata_read_word(ATA_IO_DATA);
sprintf(&buffer[0],"Number of Cylinders = %u\r\n\0",word_read);
tx_string(debugport,&buffer[0]);
for (i=0;i<2;++i) word_read = ata_read_word(ATA_IO_DATA);
sprintf(&buffer[0],"Number of Logical Heads = %u\r\n\0",word_read);
tx_string(debugport,&buffer[0]);
for (i=0;i<3;++i) word_read = ata_read_word(ATA_IO_DATA);
sprintf(&buffer[0],"Number of Logical Sectors per Track = %u\r\n\0",word_read);
tx_string(debugport,&buffer[0]);
for (i=0;i<3;++i) word_read = ata_read_word(ATA_IO_DATA);
sprintf(&buffer[0],"Serial Number = \0");
tx_string(debugport,&buffer[0]);
for (i=0;i<10;++i)
{
word_read = ata_read_word(ATA_IO_DATA);
data_H = word_read >> 8;
data_L = word_read & 0x00FF;
sprintf(&buffer[0],"%c%c\0",data_H,data_L);
tx_string(debugport,&buffer[0]);
}
sprintf(&buffer[0],"\r\n\0");
tx_string(debugport,&buffer[0]);
for(i=0;i<7;++i) word_read = ata_read_word(ATA_IO_DATA);
sprintf(&buffer[0],"Model Number = \0");
tx_string(debugport,&buffer[0]);
for (i=0;i<20;++i)
{
word_read = ata_read_word(ATA_IO_DATA);
data_H = word_read >> 8;
data_L = word_read & 0x00FF;
sprintf(&buffer[0],"%c%c\0",data_H,data_L);
tx_string(debugport,&buffer[0]);
}
tx_string(debugport,"\r\n\0");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -