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
|
// 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();
|
||||||
|
|
|
||||||
26
readme.md
26
readme.md
|
|
@ -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
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue