MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / ide_write_sectors

Function ide_write_sectors

src/ide.cpp:1095–1132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1093}
1094
1095static void ide_write_sectors (struct ide_hdf *ide, int flags)
1096{
1097 unsigned int cyl, head, sec, nsec;
1098 uae_u64 lba;
1099 int multi = flags & 1;
1100
1101 ide->lba48cmd = (flags & 2) != 0;
1102 if (multi && (ide->multiple_mode == 0 || ide->ata_level < 0)) {
1103 ide_fail (ide);
1104 return;
1105 }
1106 check_maxtransfer (ide, 1);
1107 gui_flicker_led (LED_HD, ide->uae_unitnum, 2);
1108 nsec = get_nsec (ide);
1109 get_lbachs (ide, &lba, &cyl, &head, &sec);
1110 if (lba >= ide->max_lba) {
1111 ide_data_ready (ide);
1112 ide_fail_err (ide, IDE_ERR_IDNF);
1113 return;
1114 }
1115 if (IDE_LOG > 0)
1116 write_log (_T("IDE%d write off=%d, sec=%d (%d) %s\n"), ide->num, (uae_u32)lba, nsec, ide->multiple_mode, getidemode(ide));
1117 if (nsec > ide->max_lba - lba)
1118 nsec = (unsigned int)(ide->max_lba - lba);
1119 if (nsec <= 0) {
1120 ide_data_ready (ide);
1121 ide_fail_err (ide, IDE_ERR_IDNF);
1122 return;
1123 }
1124 ide->data_multi = multi ? ide->multiple_mode : 1;
1125 ide->data_offset = 0;
1126 ide->data_size = nsec * ide->blocksize;
1127 ide->direction = 1;
1128 ide->buffer_offset = 0;
1129 // write start: set DRQ and clear BSY. No interrupt.
1130 ide->regs.ide_status |= IDE_STATUS_DRQ;
1131 ide->regs.ide_status &= ~IDE_STATUS_BSY;
1132}
1133
1134static void ide_format_track(struct ide_hdf *ide)
1135{

Callers 1

ide_do_commandFunction · 0.85

Calls 9

ide_failFunction · 0.85
check_maxtransferFunction · 0.85
get_nsecFunction · 0.85
get_lbachsFunction · 0.85
ide_data_readyFunction · 0.85
ide_fail_errFunction · 0.85
getidemodeFunction · 0.85
write_logFunction · 0.70
gui_flicker_ledFunction · 0.50

Tested by

no test coverage detected