Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int executeDeviceDiagnostic(WORD adr, int which){
- BYTE status;
- int time = 0;
- do{
- status = __inp(adr + ATA_STATUS);
- time++;
- } while ((status & (STATUS_BSY | STATUS_DRQ)) != 0);
- //Clear Dev bit
- BYTE device = __inp(adr + ATA_DEVICE);
- device &= (~DEVICE_DEV);
- __outp(adr + ATA_DEVICE, device);
- //Send command
- __outp(adr + ATA_COMMAND, ATA_EXEC_DEVICE_DIAG);
- Sleep(4);
- time = 0;
- do{
- status = __inp(adr + ATA_STATUS);
- time++;
- } while ((status & STATUS_BSY) != 0);
- BYTE code = __inp(adr + ATA_ERROR);
- if (which == 0){
- wsprintf(szBuffer[cLine], "PRIMARY DIAGNOSIS CODE: %02X", code);
- cLine++;
- }
- else{
- wsprintf(szBuffer[cLine], "SECONDARY DIAGNOSIS CODE: %02X", code);
- cLine++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement