cpu - Change flags from NZOC to ONZC
This commit is contained in:
parent
e1cc491e28
commit
5f29c7c3eb
24
cpu.js
24
cpu.js
|
|
@ -19,7 +19,7 @@ const CPU = {
|
|||
// Core state
|
||||
running: false,
|
||||
IP: INITIAL_IP_ADDRESS,
|
||||
FLAGS: 0, // A bit field! 0000 = NZOC
|
||||
FLAGS: 0, // A bit field! 0000 = ONZC
|
||||
Acc: 0,
|
||||
memory: null,
|
||||
|
||||
|
|
@ -29,13 +29,13 @@ const CPU = {
|
|||
CPU.memory = new Uint8Array(256);
|
||||
CPU.memory.set(data, 0);
|
||||
},
|
||||
setFlagNegative: () => { CPU.FLAGS |= 8 },
|
||||
setFlagZero: () => { CPU.FLAGS |= 4 },
|
||||
setFlagOverflow: () => { CPU.FLAGS |= 2 },
|
||||
setFlagOverflow: () => { CPU.FLAGS |= 4 },
|
||||
setFlagNegative: () => { CPU.FLAGS |= 4 },
|
||||
setFlagZero: () => { CPU.FLAGS |= 2 },
|
||||
setFlagCarry: () => { CPU.FLAGS |= 1 },
|
||||
unsetFlagNegative: () => { CPU.FLAGS &= ~8 },
|
||||
unsetFlagZero: () => { CPU.FLAGS &= ~4 },
|
||||
unsetFlagOverflow: () => { CPU.FLAGS &= ~2 },
|
||||
unsetFlagOverflow: () => { CPU.FLAGS &= ~8 },
|
||||
unsetFlagNegative: () => { CPU.FLAGS &= ~4 },
|
||||
unsetFlagZero: () => { CPU.FLAGS &= ~2 },
|
||||
unsetFlagCarry: () => { CPU.FLAGS &= ~1 },
|
||||
updateFlagZero: () => {
|
||||
if (CPU.Acc === 0) {
|
||||
|
|
@ -107,7 +107,7 @@ const Instructions = {
|
|||
// Calculate overflow flag status
|
||||
let bitSixCarry = 0;
|
||||
if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; }
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 1)
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
|
||||
if (overflow) {
|
||||
CPU.setFlagOverflow();
|
||||
} else {
|
||||
|
|
@ -132,7 +132,7 @@ const Instructions = {
|
|||
// Calculate overflow flag status
|
||||
let bitSixCarry = 0;
|
||||
if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; }
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 1)
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
|
||||
if (overflow) {
|
||||
CPU.setFlagOverflow();
|
||||
} else {
|
||||
|
|
@ -157,7 +157,7 @@ const Instructions = {
|
|||
// Calculate overflow flag status
|
||||
let bitSixCarry = 0;
|
||||
if ((CPU.Acc & 64) && (lit & 64)) { bitSixCarry = 1; }
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 1)
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
|
||||
if (overflow) {
|
||||
CPU.setFlagOverflow();
|
||||
} else {
|
||||
|
|
@ -182,7 +182,7 @@ const Instructions = {
|
|||
// Calculate overflow flag status
|
||||
let bitSixCarry = 0;
|
||||
if ((CPU.Acc & 64) && (addr & 64)) { bitSixCarry = 1; }
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 1)
|
||||
let overflow = bitSixCarry ^ (CPU.FLAGS & 8);
|
||||
if (overflow) {
|
||||
CPU.setFlagOverflow();
|
||||
} else {
|
||||
|
|
@ -384,7 +384,7 @@ function logCPUState(debug = false) {
|
|||
console.log('Mnemonic:', CPU.currentInstruction.mnemonic);
|
||||
console.log(`Machine: $${num2hex(CPU.currentInstruction.opcode)} $${num2hex(CPU.currentInstruction.operand)}`);
|
||||
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();
|
||||
console.groupEnd();
|
||||
|
|
|
|||
26
readme.md
26
readme.md
|
|
@ -37,13 +37,13 @@ With single stepping + verbose debugging output:
|
|||
|
||||
- `A` - accumulator
|
||||
- `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:
|
||||
- N = 3
|
||||
Z = 2
|
||||
O = 1
|
||||
- O = 3
|
||||
N = 2
|
||||
Z = 1
|
||||
C = 0
|
||||
- (bitwise, `0000 = NZOC`)
|
||||
- (bitwise, `0000 = ONZC`)
|
||||
|
||||
|
||||
## Instruction set
|
||||
|
|
@ -85,21 +85,21 @@ NOP +2
|
|||
|
||||
STO w +2
|
||||
LDA r NZ +2
|
||||
ADD NZOC +2
|
||||
SUB NZOC +2
|
||||
ADD ONZC +2
|
||||
SUB ONZC +2
|
||||
HOP +2/+4
|
||||
JMP arg
|
||||
FTG NZOC +2
|
||||
FHP NZOC +2/+4
|
||||
FTG ONZC +2
|
||||
FHP ONZC +2/+4
|
||||
|
||||
STO r,w +2
|
||||
LDA r,r NZ +2
|
||||
ADD r NZOC +2
|
||||
SUB r NZOC +2
|
||||
ADD r ONZC +2
|
||||
SUB r ONZC +2
|
||||
HOP r +2/+4
|
||||
JMP r arg
|
||||
FTG r NZOC +2
|
||||
FHP r NZOC +2/+4
|
||||
FTG r ONZC +2
|
||||
FHP r ONZC +2/+4
|
||||
```
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
#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
|
||||
#loopIter $FF ; address of loop iterator
|
||||
#iterPx $03 ; where to display iterator
|
||||
|
|
|
|||
Loading…
Reference in New Issue