From 7c15adc305f8ea973bb1750b9d8e4d57a2c3b559 Mon Sep 17 00:00:00 2001 From: Speedy_Lex <78314533+speedy-lex@users.noreply.github.com> Date: Wed, 2 Jul 2025 01:25:41 +0200 Subject: [PATCH] fix byte indexing for drives --- src/components/drive.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/components/drive.c b/src/components/drive.c index a089182..c4652a2 100644 --- a/src/components/drive.c +++ b/src/components/drive.c @@ -73,11 +73,10 @@ void nn_drive_writeSector(nn_drive *drive, void *_, nn_component *component, nn_ } } void nn_drive_readByte(nn_drive *drive, void *_, nn_component *component, nn_computer *computer) { - // TODO: calculate the right index aaaaargh nn_value offsetValue = nn_getArgument(computer, 0); - size_t disk_offset = nn_toInt(offsetValue); + size_t disk_offset = nn_toInt(offsetValue) - 1; size_t sector_size = drive->getSectorSize(component, drive->userdata); - int sector = disk_offset / sector_size; + int sector = (disk_offset / sector_size) + 1; size_t sector_offset = disk_offset % sector_size; char buf[sector_size]; @@ -86,13 +85,12 @@ void nn_drive_readByte(nn_drive *drive, void *_, nn_component *component, nn_com nn_return(computer, nn_values_integer(buf[sector_offset])); } void nn_drive_writeByte(nn_drive *drive, void *_, nn_component *component, nn_computer *computer) { - // TODO: calculate the right index aaaaargh nn_value offsetValue = nn_getArgument(computer, 0); nn_value writeValue = nn_getArgument(computer, 1); - size_t disk_offset = nn_toInt(offsetValue); + size_t disk_offset = nn_toInt(offsetValue) - 1; char write = nn_toInt(writeValue); size_t sector_size = drive->getSectorSize(component, drive->userdata); - int sector = disk_offset / sector_size; + int sector = (disk_offset / sector_size) + 1; size_t sector_offset = disk_offset % sector_size; char buf[sector_size];