Populate registers table

This commit is contained in:
Werner
2023-06-08 18:58:06 -03:00
parent 4e372fcc08
commit 1bcedba0bd

View File

@ -28,7 +28,7 @@ export default function Home() {
for (let i = 0; i < program.length; i++) { for (let i = 0; i < program.length; i++) {
instructions[i] = { instructions[i] = {
posicao: 0, posicao: i + 1,
instrucao: program[i], instrucao: program[i],
...baseI, ...baseI,
}; };
@ -144,11 +144,17 @@ export default function Home() {
} }
]; ];
let [clock, setClock] = useState(0); let registers = [];
for (let i = 0; i < 10; i++) {
registers[i] = null;
}
let [clock, setClock] = useState(1);
let [instructionStatus, setInstructionStatus] = useState(instructions); let [instructionStatus, setInstructionStatus] = useState(instructions);
let [functionalUnits, setFunctionalUnits] = useState(fUnites); let [functionalUnits, setFunctionalUnits] = useState(fUnites);
let [memoryUnits, setMmoryUnits] = useState(mUnites); let [memoryUnits, setMmoryUnits] = useState(mUnites);
let [registerStatus, setRegisterStatus] = useState([]); let [registerStatus, setRegisterStatus] = useState(registers);
function fetchInstruction() { function fetchInstruction() {
for (let i = 0; i < instructionStatus.length; i++) { for (let i = 0; i < instructionStatus.length; i++) {
@ -257,13 +263,13 @@ export default function Home() {
let reg_k_inst; let reg_k_inst;
if ((instrucao.operacao === 'BNEZ') || (instrucao.operacao === 'BEQ')) { if ((instrucao.operacao === 'BNEZ') || (instrucao.operacao === 'BEQ')) {
reg_j = registerStatus[instrucao.registradorR]; reg_j = registerStatus[instrucao.registradorR.replace('R','').replace('F','')];
reg_k = registerStatus[instrucao.registradorS]; reg_k = registerStatus[instrucao.registradorS.replace('R','').replace('F','')];
reg_j_inst = instrucao.registradorR; reg_j_inst = instrucao.registradorR;
reg_k_inst = instrucao.registradorS; reg_k_inst = instrucao.registradorS;
} else { } else {
reg_j = registerStatus[instrucao.registradorS]; reg_j = registerStatus[instrucao.registradorS.replace('R','').replace('F','')];
reg_k = registerStatus[instrucao.registradorT]; reg_k = registerStatus[instrucao.registradorT.replace('R','').replace('F','')];
reg_j_inst = instrucao.registradorS; reg_j_inst = instrucao.registradorS;
reg_k_inst = instrucao.registradorT; reg_k_inst = instrucao.registradorT;
} }
@ -305,7 +311,7 @@ export default function Home() {
uf.qj = null; uf.qj = null;
if (instrucao.operacao === 'SD') { if (instrucao.operacao === 'SD') {
let UFQueTemQueEsperar = registerStatus[instrucao.registradorR]; let UFQueTemQueEsperar = registerStatus[instrucao.registradorR.replace('R','').replace('F','')];
if ((UFQueTemQueEsperar in functionalUnits) || (UFQueTemQueEsperar in memoryUnits)) { if ((UFQueTemQueEsperar in functionalUnits) || (UFQueTemQueEsperar in memoryUnits)) {
uf.qi = UFQueTemQueEsperar; uf.qi = UFQueTemQueEsperar;
@ -315,7 +321,7 @@ export default function Home() {
} }
} }
let UFintQueTemQueEsperar = registerStatus[instrucao.registradorT]; let UFintQueTemQueEsperar = registerStatus[instrucao.registradorT.replace('R','').replace('F','')];
if ((UFintQueTemQueEsperar in functionalUnits) || (UFintQueTemQueEsperar in memoryUnits)) { if ((UFintQueTemQueEsperar in functionalUnits) || (UFintQueTemQueEsperar in memoryUnits)) {
uf.qj = UFintQueTemQueEsperar; uf.qj = UFintQueTemQueEsperar;
@ -326,7 +332,7 @@ export default function Home() {
} }
function writeRegister(instrucao, ufNome) { function writeRegister(instrucao, ufNome) {
registerStatus[instrucao.registradorR] = ufNome; registerStatus[instrucao.registradorR.replace('R','').replace('F','')] = ufNome;
setRegisterStatus(registerStatus); setRegisterStatus(registerStatus);
} }
@ -453,10 +459,10 @@ export default function Home() {
if (ufMem.tempo === -1) { if (ufMem.tempo === -1) {
ufMem.estadoInstrucao.write = clock; ufMem.estadoInstrucao.write = clock;
let valorReg = registerStatus[ufMem.instrucao.registradorR]; let valorReg = registerStatus[ufMem.instrucao.registradorR.replace('R','').replace('F','')];
if (valorReg === ufMem.nome) { if (valorReg === ufMem.nome) {
registerStatus[ufMem.instrucao.registradorR] = 'VAL(' + ufMem.nome + ')'; registerStatus[ufMem.instrucao.registradorR.replace('R','').replace('F','')] = 'VAL(' + ufMem.nome + ')';
} }
releaseWaitingUnity(ufMem); releaseWaitingUnity(ufMem);
@ -471,10 +477,10 @@ export default function Home() {
if (uf.ocupado && uf.tempo === -1) { if (uf.ocupado && uf.tempo === -1) {
uf.estadoInstrucao.write = clock; uf.estadoInstrucao.write = clock;
let valorReg = registerStatus[uf.instrucao.registradorR]; let valorReg = registerStatus[uf.instrucao.registradorR.replace('R','').replace('F','')];
if (valorReg === uf.nome) { if (valorReg === uf.nome) {
registerStatus[uf.instrucao.registradorR] = 'VAL(' + uf.nome + ')'; registerStatus[uf.instrucao.registradorR.replace('R','').replace('F','')] = 'VAL(' + uf.nome + ')';
} }
releaseWaitingUnity(uf); releaseWaitingUnity(uf);
@ -664,7 +670,6 @@ export default function Home() {
<Table bordered hover> <Table bordered hover>
<thead> <thead>
<tr> <tr>
<th>Field</th>
<th>F0</th> <th>F0</th>
<th>F1</th> <th>F1</th>
<th>F2</th> <th>F2</th>
@ -675,37 +680,13 @@ export default function Home() {
<th>F7</th> <th>F7</th>
<th>F8</th> <th>F8</th>
<th>F9</th> <th>F9</th>
<th>F10</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td>Reorder #</td> {registerStatus.map((val, idx) => (
<td></td> <td>{val}</td>
<td></td> ))}
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Busy</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr> </tr>
</tbody> </tbody>
</Table> </Table>