IOPorts interactive
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package fabrik.simulator.pic16f84;
|
||||
|
||||
import com.gluonhq.charm.glisten.control.ToggleButtonGroup;
|
||||
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
|
||||
@ -62,8 +63,8 @@ public class Controller_Frontend {
|
||||
DataRegister.increasePC();
|
||||
Table.refresh();
|
||||
Stage stage = (Stage) stepintoButton.getScene().getWindow();
|
||||
IOPorts.refreshUI(getTRISbuttons(), getPORTbuttons());
|
||||
CreateWindow.refreshTable(stage);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -95,53 +96,105 @@ public class Controller_Frontend {
|
||||
content.append(line).append("\n");
|
||||
}
|
||||
lstContentLabel.setText(content.toString());
|
||||
|
||||
|
||||
|
||||
} catch (IOException e) {
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA0;
|
||||
private ToggleButtonGroup bgTRISA0;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA1;
|
||||
private ToggleButtonGroup bgTRISA1;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA2;
|
||||
private ToggleButtonGroup bgTRISA2;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA3;
|
||||
private ToggleButtonGroup bgTRISA3;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA4;
|
||||
private ToggleButtonGroup bgTRISA4;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA5;
|
||||
private ToggleButtonGroup bgTRISA5;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA6;
|
||||
private ToggleButtonGroup bgTRISA6;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgA7;
|
||||
private ToggleButtonGroup bgTRISA7;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB0;
|
||||
private ToggleButtonGroup bgTRISB0;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB1;
|
||||
private ToggleButtonGroup bgTRISB1;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB2;
|
||||
private ToggleButtonGroup bgTRISB2;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB3;
|
||||
private ToggleButtonGroup bgTRISB3;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB4;
|
||||
private ToggleButtonGroup bgTRISB4;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB5;
|
||||
private ToggleButtonGroup bgTRISB5;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB6;
|
||||
private ToggleButtonGroup bgTRISB6;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgB7;
|
||||
private ToggleButtonGroup bgTRISB7;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA0;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA1;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA2;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA3;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA4;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA5;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA6;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTA7;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB0;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB1;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB2;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB3;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB4;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB5;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB6;
|
||||
@FXML
|
||||
private ToggleButtonGroup bgPORTB7;
|
||||
|
||||
private static ToggleButtonGroup[] allTRISbuttons;
|
||||
private static ToggleButtonGroup[] allPORTbuttons;
|
||||
|
||||
public void initialize() {
|
||||
ToggleButtonGroup [] allButtons = {bgA0, bgA1, bgA2, bgA3, bgA4, bgA5, bgA6, bgA7, bgB0, bgB1, bgB2, bgB3, bgB4, bgB5, bgB6, bgB7};
|
||||
ToggleButtonGroup [] allTRISButtons = {bgTRISA0, bgTRISA1, bgTRISA2, bgTRISA3, bgTRISA4, bgTRISA5, bgTRISA6, bgTRISA7, bgTRISB0, bgTRISB1, bgTRISB2, bgTRISB3, bgTRISB4, bgTRISB5, bgTRISB6, bgTRISB7};
|
||||
ToggleButtonGroup [] allPORTButtons = {bgPORTA0, bgPORTA1, bgPORTA2, bgPORTA3, bgPORTA4, bgPORTA5, bgPORTA6, bgPORTA7, bgPORTB0, bgPORTB1, bgPORTB2, bgPORTB3, bgPORTB4, bgPORTB5, bgPORTB6, bgPORTB7};
|
||||
for (int i = 0; i<16; i++) {
|
||||
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allButtons[i]);
|
||||
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allTRISButtons[i]);
|
||||
ToggleButtonGroupExt.get().addAlwaysOneSelectedSupport(allPORTButtons[i]);
|
||||
}
|
||||
setTRISbuttons(allTRISButtons);
|
||||
setPORTbuttons(allPORTButtons);
|
||||
}
|
||||
|
||||
private static void setTRISbuttons(ToggleButtonGroup[] allButtons) {
|
||||
allTRISbuttons = allButtons;
|
||||
}
|
||||
|
||||
public static ToggleButtonGroup [] getTRISbuttons() {
|
||||
return allTRISbuttons;
|
||||
}
|
||||
|
||||
private static void setPORTbuttons(ToggleButtonGroup[] allButtons) {
|
||||
allPORTbuttons = allButtons;
|
||||
}
|
||||
|
||||
public static ToggleButtonGroup [] getPORTbuttons() {
|
||||
return allPORTbuttons;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -22,7 +22,6 @@ public class CreateWindow extends Application {
|
||||
public void start(Stage primaryStage) throws IOException{
|
||||
DataRegister.initDataRegister();
|
||||
table = Table.refresh();
|
||||
|
||||
FXMLLoader codewindow = new FXMLLoader(CreateWindow.class.getResource("frontend.fxml"));
|
||||
Parent code = codewindow.load();
|
||||
|
||||
|
||||
@ -34,7 +34,7 @@ public class DataRegister {
|
||||
dataRegister[0x81] = 0b11111111;
|
||||
dataRegister[0x80 + PCL] = dataRegister[PCL];
|
||||
dataRegister[0x80 + STATUS] = dataRegister[STATUS];
|
||||
dataRegister[TRISA] = 0b11111000;
|
||||
dataRegister[TRISA] = 0b11111111;
|
||||
dataRegister[TRISB] = 0b11111111;
|
||||
dataRegister[0x80 + PCLATH] = dataRegister[PCLATH];
|
||||
dataRegister[0x80 + INTCON] = dataRegister[INTCON];
|
||||
@ -139,6 +139,14 @@ public class DataRegister {
|
||||
}
|
||||
}
|
||||
|
||||
public static void setDirectBit (int fileAddress, int bit, int value){
|
||||
if (getDirectBit(fileAddress, bit) == 0 && value == 1){
|
||||
dataRegister[fileAddress] += (int) Math.pow(2, bit);
|
||||
} else if (getDirectBit(fileAddress, bit) == 1 && value == 0){
|
||||
dataRegister[fileAddress] -= (int) Math.pow(2, bit);
|
||||
}
|
||||
}
|
||||
|
||||
private static int programCounter = 0;
|
||||
|
||||
private static void writeToPCL(){
|
||||
|
||||
@ -1,5 +1,12 @@
|
||||
package fabrik.simulator.pic16f84;
|
||||
|
||||
import com.gluonhq.charm.glisten.control.ToggleButtonGroup;
|
||||
import javafx.collections.ObservableList;
|
||||
import javafx.scene.control.ToggleButton;
|
||||
import javafx.stage.Stage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class IOPorts {
|
||||
private static final int A = 0;
|
||||
private static final int B = 1;
|
||||
@ -8,7 +15,7 @@ public class IOPorts {
|
||||
private static final int TRISA = 0x85;
|
||||
private static final int TRISB = 0x86;
|
||||
|
||||
private static int [] trisLatch = new int[2];
|
||||
private static int [] trisLatch = {0xFF, 0xFF};
|
||||
private static int [] dataLatch = new int[2];
|
||||
|
||||
public static void setBit (int address, int bit){
|
||||
@ -46,7 +53,86 @@ public class IOPorts {
|
||||
}
|
||||
|
||||
private static void refreshPorts() {
|
||||
System.out.println("PORTA: " + DataRegister.getDirectRegister(PORTA) + "; DATALATCHA: " + dataLatch[A] + "; TRISA: " + trisLatch[A]);
|
||||
System.out.println("PORTB: " + DataRegister.getDirectRegister(PORTB) + "; DATALATCHB: " + dataLatch[B] + "; TRISB: " + trisLatch[B]);
|
||||
DataRegister.setDirectRegister(PORTA, ((~((~dataLatch[A])&0xFF | trisLatch[A])) | (trisLatch[A] & DataRegister.getDirectRegister(PORTA))) & 0x1F);
|
||||
DataRegister.setDirectRegister(PORTB, ((~((~dataLatch[B])&0xFF | trisLatch[B])) | (trisLatch[B] & DataRegister.getDirectRegister(PORTB))) & 0xFF);
|
||||
DataRegister.setDirectRegister(TRISA, trisLatch[A]);
|
||||
DataRegister.setDirectRegister(TRISB, trisLatch[B]);
|
||||
ToggleButtonGroup[] buttons = Controller_Frontend.getPORTbuttons();
|
||||
for (int i = 0; i < buttons.length; i++){
|
||||
int port = (i < 8) ? PORTA : PORTB;
|
||||
int bit = i % 8;
|
||||
boolean value = ((DataRegister.getDirectRegister(port) >> bit) & 1) == 1;
|
||||
buttons[i].getToggles().get(0).setSelected(!value);
|
||||
buttons[i].getToggles().get(1).setSelected(value);
|
||||
}
|
||||
}
|
||||
|
||||
public static void refreshUI(ToggleButtonGroup[] buttonsTRIS, ToggleButtonGroup[] buttonsPORT) {
|
||||
for (int i = 0; i< buttonsTRIS.length; i++){
|
||||
int tris = (i < 8) ? trisLatch[A] : trisLatch[B];
|
||||
boolean val = isInput(tris, i%8);
|
||||
buttonsPORT[i].setDisable(!val);
|
||||
buttonsTRIS[i].getToggles().get(0).setSelected(val);
|
||||
buttonsTRIS[i].getToggles().get(1).setSelected(!val);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isInput(int i, int bit) {
|
||||
return (i >> bit & 1) == 1;
|
||||
}
|
||||
|
||||
public static void setTRISfromUI(ToggleButtonGroup parent) throws IOException {
|
||||
int [] params = getToggleParams(parent);
|
||||
int tris = params[0];
|
||||
int bit = params[1];
|
||||
int value = params[2];
|
||||
ToggleButtonGroup [] buttonsPORT = Controller_Frontend.getPORTbuttons();
|
||||
if (value == 1){
|
||||
setBit(tris, bit);
|
||||
buttonsPORT[(tris-TRISA)*8 + bit].setDisable(false);
|
||||
}
|
||||
else{
|
||||
clearBit(tris, bit);
|
||||
buttonsPORT[(tris-TRISA)*8 + bit].setDisable(true);
|
||||
}
|
||||
refreshPorts();
|
||||
refreshTable(parent);
|
||||
}
|
||||
|
||||
public static void setPORTfromUI(ToggleButtonGroup parent) throws IOException {
|
||||
int [] params = getToggleParams(parent);
|
||||
int port = params[0];
|
||||
int bit = params[1];
|
||||
int value = params [2];
|
||||
value = (value == 1) ? 0 : 1;
|
||||
DataRegister.setDirectBit(port, bit, value);
|
||||
refreshPorts();
|
||||
refreshTable(parent);
|
||||
}
|
||||
|
||||
private static void refreshTable(ToggleButtonGroup parent) throws IOException {
|
||||
Stage stage = (Stage) parent.getScene().getWindow();
|
||||
Table.refresh();
|
||||
CreateWindow.refreshTable(stage);
|
||||
}
|
||||
|
||||
private static int[] getToggleParams(ToggleButtonGroup parent) {
|
||||
String group = parent.getId();
|
||||
ObservableList<ToggleButton> toggles = parent.getToggles();
|
||||
int fileAddress;
|
||||
if (group.contains("TRIS"))
|
||||
if (group.contains("A"))
|
||||
fileAddress = TRISA;
|
||||
else
|
||||
fileAddress = TRISB;
|
||||
else
|
||||
if (group.contains("A"))
|
||||
fileAddress = PORTA;
|
||||
else
|
||||
fileAddress = PORTB;
|
||||
char index =group.charAt(group.length()-1);
|
||||
int bit = Integer.parseInt(String.valueOf(index));
|
||||
int value = (toggles.get(0).isSelected()) ? 1 : 0;
|
||||
return new int[]{fileAddress, bit, value};
|
||||
}
|
||||
}
|
||||
|
||||
@ -7,6 +7,8 @@ import javafx.scene.control.Toggle;
|
||||
import javafx.scene.control.ToggleButton;
|
||||
import javafx.scene.input.MouseEvent;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class ToggleButtonGroupExt {
|
||||
private static ToggleButtonGroupExt me;
|
||||
|
||||
@ -40,6 +42,21 @@ public class ToggleButtonGroupExt {
|
||||
|
||||
public EventHandler<MouseEvent> consumeMouseEventfilter = (MouseEvent mouseEvent) -> {
|
||||
if (((Toggle) mouseEvent.getSource()).isSelected()) {
|
||||
ToggleButtonGroup parent = (ToggleButtonGroup) ((ToggleButton) mouseEvent.getSource()).getParent();
|
||||
if (parent.getId().contains("TRIS")) {
|
||||
try {
|
||||
IOPorts.setTRISfromUI(parent);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
else {
|
||||
try {
|
||||
IOPorts.setPORTfromUI(parent);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
mouseEvent.consume();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user