devide: Do not assume little-endian
authorWill Sowerbutts <will@sowerbutts.com>
Thu, 8 Jan 2015 21:48:12 +0000 (21:48 +0000)
committerWill Sowerbutts <will@sowerbutts.com>
Fri, 9 Jan 2015 19:52:36 +0000 (19:52 +0000)
Kernel/dev/devide.c

index a72214a..33c62c8 100644 (file)
@@ -97,19 +97,18 @@ static bool devide_wait(uint8_t bits)
 
 static bool devide_transfer_sector(uint8_t drive, uint32_t lba, void *buffer, bool read_notwrite)
 {
-    /* FIXME: only safe for LE, and only sensible for Z80/Z180 */
-#if 0
-    ide_reg_lba_3 = ((lba >> 24) & 0xF) | ((drive == 0) ? 0xE0 : 0xF0); // select drive, start loading LBA
-    ide_reg_lba_2 = (lba >> 16);
-    ide_reg_lba_1 = (lba >> 8);
-    ide_reg_lba_0 = lba;
-#else 
+#if defined(__SDCC_z80) || defined(__SDCC_z180) || defined(__SDCC_gbz80) || defined(__SDCC_r2k) || defined(__SDCC_r3k)
     /* sdcc sadly unable to figure this out for itself yet */
     uint8_t *p = (uint8_t *)&lba;
     ide_reg_lba_3 = (p[3] & 0x0F) | ((drive == 0) ? 0xE0 : 0xF0); // select drive, start loading LBA
     ide_reg_lba_2 = p[2];
     ide_reg_lba_1 = p[1];
     ide_reg_lba_0 = p[0];
+#else
+    ide_reg_lba_3 = ((lba >> 24) & 0xF) | ((drive == 0) ? 0xE0 : 0xF0); // select drive, start loading LBA
+    ide_reg_lba_2 = (lba >> 16);
+    ide_reg_lba_1 = (lba >> 8);
+    ide_reg_lba_0 = lba;
 #endif
 
     if(!devide_wait(IDE_STATUS_READY))