cpu - Change flags from NZOC to ONZC

This commit is contained in:
n loewen 2023-08-23 15:30:06 +01:00
parent e1cc491e28
commit 5f29c7c3eb
3 changed files with 26 additions and 26 deletions

24
cpu.js
View File

@ -19,7 +19,7 @@ const CPU = {
// Core state // Core state
running: false, running: false,
IP: INITIAL_IP_ADDRESS, IP: INITIAL_IP_ADDRESS,
FLAGS: 0, // A bit field! 0000 = NZOC FLAGS: 0, // A bit field! 0000 = ONZC
Acc: 0, Acc: 0,
memory: null, memory: null,
@ -29,13 +29,13 @@ const CPU = {
CPU.memory = new Uint8Array(256); CPU.memory = new Uint8Array(256);
CPU.memory.set(data, 0); CPU.memory.set(data, 0);
}, },
setFlagNegative: () => { CPU.FLAGS |= 8 }, setFlagOverflow: () => { CPU.FLAGS |= 4 },
setFlagZero: () => { CPU.FLAGS |= 4 }, setFlagNegative: () => { CPU.FLAGS |= 4 },
setFlagOverflow: () => { CPU.FLAGS |= 2 }, setFlagZero: () => { CPU.FLAGS |= 2 },
setFlagCarry: () => { CPU.FLAGS |= 1 }, setFlagCarry: () => { CPU.FLAGS |= 1 },
unsetFlagNegative: () => { CPU.FLAGS &= ~8 }, unsetFlagOverflow: () => { CPU.FLAGS &= ~8 },
unsetFlagZero: () => { CPU.FLAGS &= ~4 }, unsetFlagNegative: () => { CPU.FLAGS &= ~4 },
unsetFlagOverflow: () => { CPU.FLAGS &= ~2 }, unsetFlagZero: () => { CPU.FLAGS &= ~2 },
unsetFlagCarry: () => { CPU.FLAGS &= ~1 }, unsetFlagCarry: () => { CPU.FLAGS &= ~1 },
updateFlagZero: () => { updateFlagZero: () => {
if (CPU.Acc === 0) { if (CPU.Acc === 0) {
@ -107,7 +107,7 @@ const Instructions = {
// Calculate overflow flag status // Calculate overflow flag status
let bitSixCarry = 0; let bitSixCarry = 0;
if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; } if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; }
let overflow = bitSixCarry ^ (CPU.FLAGS & 1) let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
if (overflow) { if (overflow) {
CPU.setFlagOverflow(); CPU.setFlagOverflow();
} else { } else {
@ -132,7 +132,7 @@ const Instructions = {
// Calculate overflow flag status // Calculate overflow flag status
let bitSixCarry = 0; let bitSixCarry = 0;
if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; } if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; }
let overflow = bitSixCarry ^ (CPU.FLAGS & 1) let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
if (overflow) { if (overflow) {
CPU.setFlagOverflow(); CPU.setFlagOverflow();
} else { } else {
@ -157,7 +157,7 @@ const Instructions = {
// Calculate overflow flag status // Calculate overflow flag status
let bitSixCarry = 0; let bitSixCarry = 0;
if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; } if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; }
let overflow = bitSixCarry ^ (CPU.FLAGS & 1) let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
if (overflow) { if (overflow) {
CPU.setFlagOverflow(); CPU.setFlagOverflow();
} else { } else {
@ -182,7 +182,7 @@ const Instructions = {
// Calculate overflow flag status // Calculate overflow flag status
let bitSixCarry = 0; let bitSixCarry = 0;
if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; } if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; }
let overflow = bitSixCarry ^ (CPU.FLAGS & 1) let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
if (overflow) { if (overflow) {
CPU.setFlagOverflow(); CPU.setFlagOverflow();
} else { } else {
@ -384,7 +384,7 @@ function logCPUState(debug = false) {
console.log('Mnemonic:', CPU.currentInstruction.mnemonic); console.log('Mnemonic:', CPU.currentInstruction.mnemonic);
console.log(`Machine: $${num2hex(CPU.currentInstruction.opcode)} $${num2hex(CPU.currentInstruction.operand)}`); console.log(`Machine: $${num2hex(CPU.currentInstruction.opcode)} $${num2hex(CPU.currentInstruction.operand)}`);
console.log(); console.log();
console.log(`IP: $${num2hex(CPU.IP)} Acc: $${num2hex(CPU.Acc)} NZOC: ${num2bin_4bit(CPU.FLAGS)}`); console.log(`IP: $${num2hex(CPU.IP)} Acc: $${num2hex(CPU.Acc)} ONZC: ${num2bin_4bit(CPU.FLAGS)}`);
console.log(`KEY: $${num2hex(CPU.memory[KEYPAD_ADDR])}  ${CPU.running ? "running" : "halted" }`); console.log(`KEY: $${num2hex(CPU.memory[KEYPAD_ADDR])}  ${CPU.running ? "running" : "halted" }`);
console.log(); console.log();
console.groupEnd(); console.groupEnd();

View File

@ -37,13 +37,13 @@ With single stepping + verbose debugging output:
- `A` - accumulator - `A` - accumulator
- `IP` - instruction pointer (aka program counter) - `IP` - instruction pointer (aka program counter)
- `FLAGS` - flags: **N**egative, **Z**ero, **O**verflow, **C**arry - `FLAGS` - flags: **O**verflow, **N**egative, **Z**ero, **C**arry
- in machine language, each flag is given a number: - in machine language, each flag is given a number:
- N = 3 - O = 3
Z = 2 N = 2
O = 1 Z = 1
C = 0 C = 0
- (bitwise, `0000 = NZOC`) - (bitwise, `0000 = ONZC`)
## Instruction set ## Instruction set
@ -85,21 +85,21 @@ NOP +2
STO w +2 STO w +2
LDA r NZ +2 LDA r NZ +2
ADD NZOC +2 ADD ONZC +2
SUB NZOC +2 SUB ONZC +2
HOP +2/+4 HOP +2/+4
JMP arg JMP arg
FTG NZOC +2 FTG ONZC +2
FHP NZOC +2/+4 FHP ONZC +2/+4
STO r,w +2 STO r,w +2
LDA r,r NZ +2 LDA r,r NZ +2
ADD r NZOC +2 ADD r ONZC +2
SUB r NZOC +2 SUB r ONZC +2
HOP r +2/+4 HOP r +2/+4
JMP r arg JMP r arg
FTG r NZOC +2 FTG r ONZC +2
FHP r NZOC +2/+4 FHP r ONZC +2/+4
``` ```

View File

@ -7,7 +7,7 @@
#LOOPCOUNT $80 #LOOPCOUNT $80
#Z 2 ; the zero flag is #2 #Z 1 ; the zero flag is #1
#keypad $20 ; magic memory location containing latest key pressed #keypad $20 ; magic memory location containing latest key pressed
#loopIter $FF ; address of loop iterator #loopIter $FF ; address of loop iterator
#iterPx $03 ; where to display iterator #iterPx $03 ; where to display iterator