Bug fixes related to floppy drive

This commit is contained in:
simon 2017-11-14 20:58:07 -05:00
parent cfb8050cee
commit 8701007ad9
4 changed files with 44 additions and 33 deletions

View File

@ -23,8 +23,6 @@ public class CubotFloppyDrive extends CpuHardware {
public CubotFloppyDrive(Cubot cubot) { public CubotFloppyDrive(Cubot cubot) {
this.cubot = cubot; this.cubot = cubot;
this.floppyDisk = new FloppyDisk();//todo remove
} }
@Override @Override
@ -44,12 +42,14 @@ public class CubotFloppyDrive extends CpuHardware {
if (floppyDisk == null) { if (floppyDisk == null) {
getCpu().getRegisterSet().getRegister("B").setValue(0); getCpu().getRegisterSet().getRegister("B").setValue(0);
} else { } else {
getCpu().getRegisterSet().getRegister("B").setValue(1); if (cubot.spendEnergy(1)) {
getCpu().getRegisterSet().getRegister("B").setValue(1);
int x = getCpu().getRegisterSet().getRegister("X").getValue(); int x = getCpu().getRegisterSet().getRegister("X").getValue();
int y = getCpu().getRegisterSet().getRegister("Y").getValue(); int y = getCpu().getRegisterSet().getRegister("Y").getValue();
floppyDisk.readSector(x, cubot.getParent().getCpu().getMemory(), y); floppyDisk.readSector(x, cubot.getParent().getCpu().getMemory(), y);
}
} }
@ -57,12 +57,14 @@ public class CubotFloppyDrive extends CpuHardware {
if (floppyDisk == null) { if (floppyDisk == null) {
getCpu().getRegisterSet().getRegister("B").setValue(0); getCpu().getRegisterSet().getRegister("B").setValue(0);
} else { } else {
getCpu().getRegisterSet().getRegister("B").setValue(1); if (cubot.spendEnergy(1)) {
getCpu().getRegisterSet().getRegister("B").setValue(1);
int x = getCpu().getRegisterSet().getRegister("X").getValue(); int x = getCpu().getRegisterSet().getRegister("X").getValue();
int y = getCpu().getRegisterSet().getRegister("Y").getValue(); int y = getCpu().getRegisterSet().getRegister("Y").getValue();
floppyDisk.writeSector(x, cubot.getParent().getCpu().getMemory(), y); floppyDisk.writeSector(x, cubot.getParent().getCpu().getMemory(), y);
}
} }
} }

View File

@ -3,7 +3,6 @@ package net.simon987.cubotplugin;
import net.simon987.server.assembly.Memory; import net.simon987.server.assembly.Memory;
import net.simon987.server.io.JSONSerialisable; import net.simon987.server.io.JSONSerialisable;
import net.simon987.server.logging.LogManager;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
/** /**
@ -39,19 +38,21 @@ public class FloppyDisk implements JSONSerialisable {
*/ */
public boolean readSector(int sector, Memory cpuMemory, int ramAddress) { public boolean readSector(int sector, Memory cpuMemory, int ramAddress) {
cpuMemory.write(ramAddress, memory.getBytes(), sector * 512, 1024); if (sector <= 1440) {
cpuMemory.write(ramAddress, memory.getBytes(), sector * 1024, 1024);
LogManager.LOGGER.fine("Read 512 words from floppy sector:" + sector + " to memory addr:" + ramAddress); //Calculate seek time
int deltaTrack = (sector / 80) - rwHeadTrack;
//Calculate seek time if (deltaTrack != 0) {
int deltaTrack = (sector / 80) - rwHeadTrack; rwHeadTrack = (sector / 80);
return false;
if (deltaTrack != 0) { } else {
rwHeadTrack = (sector / 80); return true;
return false; }
} else {
return true;
} }
return false;
} }
/** /**
@ -64,18 +65,20 @@ public class FloppyDisk implements JSONSerialisable {
*/ */
public boolean writeSector(int sector, Memory cpuMemory, int ramAddress) { public boolean writeSector(int sector, Memory cpuMemory, int ramAddress) {
memory.write(sector * 512, cpuMemory.getBytes(), ramAddress * 2, 1024); if (sector <= 1440) {
memory.write(sector * 512, cpuMemory.getBytes(), ramAddress * 2, 1024);
LogManager.LOGGER.fine("Wrote 512 words to floppy sector:" + sector + " from memory addr:" + ramAddress); //Calculate seek time
int deltaTrack = (sector / 80) - rwHeadTrack;
//Calculate seek time if (deltaTrack != 0) {
int deltaTrack = (sector / 80) - rwHeadTrack; rwHeadTrack = (sector / 80);
return false;
if (deltaTrack != 0) { } else {
rwHeadTrack = (sector / 80); return true;
return false; }
} else { } else {
return true; return false;
} }
} }

View File

@ -108,8 +108,14 @@ public class GameServer implements Runnable {
for (User user : users_) { for (User user : users_) {
if(user.getCpu() != null){ if(user.getCpu() != null){
user.getCpu().reset(); try {
user.getCpu().execute(); user.getCpu().reset();
user.getCpu().execute();
} catch (Exception e) {
LogManager.LOGGER.severe("Error executing " + user.getUsername() + "'s code");
e.printStackTrace();
}
} }
} }

View File

@ -60,7 +60,7 @@ public class Memory implements Target, JSONSerialisable {
offset = (char)offset * 2; offset = (char)offset * 2;
if (offset + count > this.bytes.length || count < 0 || offset < 0) { if (offset + count > this.bytes.length || count < 0 || offset < 0 || srcOffset >= bytes.length) {
return false; return false;
} }