From 5f29c7c3ebf050004d52f5078013f6f254bb7c15 Mon Sep 17 00:00:00 2001 From: n loewen Date: Wed, 23 Aug 2023 15:30:06 +0100 Subject: [PATCH] cpu - Change flags from NZOC to ONZC --- cpu.js | 24 ++++++++++++------------ readme.md | 26 +++++++++++++------------- test-programs/keypad.asm | 2 +- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/cpu.js b/cpu.js index 91a9d60..d79f5f8 100644 --- a/cpu.js +++ b/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(); diff --git a/readme.md b/readme.md index ab1a725..a41b7c3 100644 --- a/readme.md +++ b/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 ``` diff --git a/test-programs/keypad.asm b/test-programs/keypad.asm index 79b9cbe..91e7350 100644 --- a/test-programs/keypad.asm +++ b/test-programs/keypad.asm @@ -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