From 0df220ca673f5f562d875daa456578f1b1487ff1 Mon Sep 17 00:00:00 2001 From: Will Sowerbutts Date: Thu, 8 Jan 2015 21:48:12 +0000 Subject: [PATCH] devide: Do not assume little-endian --- Kernel/dev/devide.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Kernel/dev/devide.c b/Kernel/dev/devide.c index a72214a8..33c62c86 100644 --- a/Kernel/dev/devide.c +++ b/Kernel/dev/devide.c @@ -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)) -- 2.34.1