From 365071072b1d415b7ba5ffd8779de45f7e102bae Mon Sep 17 00:00:00 2001 From: Redo Date: Sat, 20 Jan 2024 03:12:26 -0600 Subject: [PATCH] fix carry and shifts in hardware, misc --- assembler-8608.lua | 2 +- emulator/8608emulator.c | 6 +++--- emulator/8608emulator.dll | Bin 164507 -> 164507 bytes emulator/8608emulator.lua | 6 +++--- emulator/instructions_gen.c | 12 ++++++------ instructionList.txt | 4 ++-- readme.txt | 2 +- rom-8608-defs.lua | 26 +++++++++++++------------- 8 files changed, 29 insertions(+), 29 deletions(-) diff --git a/assembler-8608.lua b/assembler-8608.lua index 010d48d..5824191 100644 --- a/assembler-8608.lua +++ b/assembler-8608.lua @@ -706,7 +706,7 @@ if HasTs or (not AsmIncluded) then ts.eval [[ function AssembleBuildFile(%fn, %romsize, %offset, %len) { luacall("AssembleBuildFile", strReplace(%fn, "$", "Add-ons/_misc/rom/8608programs/"), %romsize, %offset, %len); } ]] - AssembleBuildFile(arg[1] or "../8608programs/test.asm", "16 16 8", "0", "256") + if not HasTs then AssembleBuildFile(arg[1] or "../8608programs/test.asm", "16 16 8", "0", "256") end end return { diff --git a/emulator/8608emulator.c b/emulator/8608emulator.c index c51e5e9..d0ecf2b 100644 --- a/emulator/8608emulator.c +++ b/emulator/8608emulator.c @@ -40,9 +40,9 @@ #define pushretaddr2 writememory(cpu->s++, lobyte((cpu->i-1)%65536)); #define lni cpu->instr = readmemory(cpu->i++); cpu->cycle = 0; #define ldi cpu->instr = readmemory(cpu->i); cpu->cycle = 0; -#define addf(x,y) { x=(x+y); cpu->cf=x>=256; x&=0xFF; setzf(x); } -#define subf(x,y) addf(x,-y); -#define cmpf(x,y) { int t=x-y; cpu->cf=(t<0); setzf(t); } +#define addf(x,y) { x=(x+y)&0x1FF; cpu->cf=x>=256; x&=0xFF; setzf(x); } +#define subf(x,y) addf(x,(-y)&0xFF); +#define cmpf(x,y) { int t=x+((-y)&0xFF); cpu->cf=t>=256; t&=0xFF; setzf(t); } #define rol(x,y) x=(x<>(8-y)); #define ror(x,y) x=(x>>y)|(x<<(8-y)); #define sra(x,y) x=(x>>y); diff --git a/emulator/8608emulator.dll b/emulator/8608emulator.dll index e04d18ef438b87f419fc86222aaab3bd11476992..38a38150f2b6c1ee13edbb1c4b8e5ccbe554cb48 100644 GIT binary patch delta 22903 zcmb81349dg`N!v-B#>Y*8z7tkmH-mvS`ZMGW5eY_PzUh9dqJRzR#${-ExHSWHAd`0 zC`0QN&?>eb%Ne}d1yQ!fwgW|rN^3-`(OSDAMLhHWK0CA7nQHrQ`Fx)Kp7;Cy=AG+( z-NmHm;MUdZrhJuOSJdW*`tp*x6>UDy zA1tZ6zU>7)PCHR)AB=5jX;}~t)t1#nloqOOzX)mWS=ZFIvpTWvv$m)9Skt0uQ)`-s z?GM#_-n^u}l0wZJQkY#gxo~Lb5cR7jw%mSP{lMQ^)wk}h!a(S7vC>v1t7`TvzU1~V z)sh{}RbOPoql^#Rn;U*b|kBIH5b;Xs@t1X-P;}R=pJ{fo4>QV?jI+#+xo*3Oua{K zRpGarsVdC2Q@3kY$1buPPdmB#Q%ZVI(zFFbN_wy0tTe5*D*rp0%g;9V@9f^zTkVzK zYP~WqbJpK=%H{Fes>(cj|E~I~*4DngbL^S3ciVHP-sifqt*>?XBEMU0mG9s0w(hCU zUAO+Y>(u>TSlO;b**3789y=szz*HjI9VS$`iT}%10 zA=O1jso|8%Nd=>-Eb7j|z|rQAl2b0tSwSa;dP z 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 delta 22840 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 RuV-=Qo_)=qOx4#8`d@Y`S^WS2 diff --git a/emulator/8608emulator.lua b/emulator/8608emulator.lua index e8bd716..8e60bc6 100644 --- a/emulator/8608emulator.lua +++ b/emulator/8608emulator.lua @@ -369,7 +369,7 @@ local function RedrawKeyInfo(x, y, uk, run) lg.setColor(0,0,0) lg.rectangle("fill",x,y,768,12) lg.setColor(1,1,1) - printHighlight("[ESC] Toggle keyboard", 0, lk.isDown("escape"), x, y) + printHighlight("[F4] Toggle keyboard", 0, lk.isDown("f4"), x, y) lg.setColor(1,1,1) if uk then printHighlight("Keystrokes passed to device", 23, false, x, y) @@ -656,7 +656,7 @@ function love.draw() end function love.keypressed(k) - if k=="escape" then + if k=="f4" then UseKeyboard = not UseKeyboard else if UseKeyboard then @@ -674,5 +674,5 @@ function love.keypressed(k) end end function love.keyreleased(k) - if k~="escape" and UseKeyboard then KeyboardOnKey(Keyboard, k, false, CPU, Memory) end + if k~="f4" and UseKeyboard then KeyboardOnKey(Keyboard, k, false, CPU, Memory) end end diff --git a/emulator/instructions_gen.c b/emulator/instructions_gen.c index 974f61e..b87367a 100644 --- a/emulator/instructions_gen.c +++ b/emulator/instructions_gen.c @@ -63,19 +63,19 @@ void cpu_instr_46_1(struct CPU* const cpu, struct Memory* const mem) { loadstack void cpu_instr_46_2(struct CPU* const cpu, struct Memory* const mem) { tst(cpu->u); lni; } void cpu_instr_47_0(struct CPU* const cpu, struct Memory* const mem) { cpu->a=sra(cpu->a,cpu->c); setzf(cpu->a); lni; } void cpu_instr_48_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_48_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->nz ) { jmprelt } else { lni } } +void cpu_instr_48_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->nz ) { jmprelt } else { lni } } void cpu_instr_49_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } void cpu_instr_49_1(struct CPU* const cpu, struct Memory* const mem) { jmprelt } void cpu_instr_50_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_50_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->nz ) { jmprelt } else { lni } } +void cpu_instr_50_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->nz ) { jmprelt } else { lni } } void cpu_instr_51_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_51_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->cf ) { jmprelt } else { lni } } +void cpu_instr_51_1(struct CPU* const cpu, struct Memory* const mem) { if(!cpu->cf ) { jmprelt } else { lni } } void cpu_instr_52_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_52_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->cf ) { jmprelt } else { lni } } +void cpu_instr_52_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->cf ) { jmprelt } else { lni } } void cpu_instr_53_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_53_1(struct CPU* const cpu, struct Memory* const mem) { if(cpu->nz && (!cpu->cf)) { jmprelt } else { lni } } +void cpu_instr_53_1(struct CPU* const cpu, struct Memory* const mem) { if( cpu->nz && cpu->cf ) { jmprelt } else { lni } } void cpu_instr_54_0(struct CPU* const cpu, struct Memory* const mem) { loadimmedt cpu->cycle++; } -void cpu_instr_54_1(struct CPU* const cpu, struct Memory* const mem) { if((!cpu->nz) || cpu->cf) { jmprelt } else { lni } } +void cpu_instr_54_1(struct CPU* const cpu, struct Memory* const mem) { if((!cpu->nz) || (!cpu->cf)) { jmprelt } else { lni } } void cpu_instr_55_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=lobyte(cpu->p); lni; } void cpu_instr_56_0(struct CPU* const cpu, struct Memory* const mem) { cpu->c=hibyte(cpu->p); lni; } void cpu_instr_57_0(struct CPU* const cpu, struct Memory* const mem) { cpu->b=lobyte(cpu->q); lni; } diff --git a/instructionList.txt b/instructionList.txt index a752f9d..0cddae1 100644 --- a/instructionList.txt +++ b/instructionList.txt @@ -131,8 +131,8 @@ jnz imm8 30 2 I+=imm8 if !Zero jpz imm8 32 2 I+=imm8 if Zero jge imm8 33 2 I+=imm8 if !Carry jlt imm8 34 2 I+=imm8 if Carry -jgt imm8 35 2 I+=imm8 if !Zero & Carry -jle imm8 36 2 I+=imm8 if Zero | !Carry +jgt imm8 35 2 I+=imm8 if !Zero & !Carry +jle imm8 36 2 I+=imm8 if Zero | Carry Stack (S): psh a 40 2 *(S++)=A diff --git a/readme.txt b/readme.txt index b3a071c..0ad4517 100644 --- a/readme.txt +++ b/readme.txt @@ -9,7 +9,7 @@ How to use the assembler: 3. In BL console, luaexec("your_path/assembler-8608.lua"); 4. To assemble a program, place a 1x1f ghost brick on the top-left corner of the ROM, face forward, and in BL console do - AssembleFile("other_path/filename.asm", "RomX RomY RomZ"); where RomX is the width of the ROM, RomY is the depth front to back, and RomZ is the height in bits, i.e. "16 16 8" + AssembleBuildFile("other_path/filename.asm", "RomX RomY RomZ"); where RomX is the width of the ROM, RomY is the depth front to back, and RomZ is the height in bits, i.e. "16 16 8" You can also run the assembler from the command line to get a memory dump and disassembly in stdout, if you have lua installed: luajit "your_path/assembler-8608.lua" "other_path/filename.asm" diff --git a/rom-8608-defs.lua b/rom-8608-defs.lua index 4d7daa7..9309b7b 100644 --- a/rom-8608-defs.lua +++ b/rom-8608-defs.lua @@ -114,11 +114,11 @@ operations = { aluOpInc = {"aluOpAdd","aluCinOn"}, aluOpDec = {"aluOpAdd","aluRInv"}, aluOpMov = {"aluAdd","aluSaveNZ"}, - aluOpShl = {"aluShift" ,"aluSaveNZ"}, - aluOpShr = {"aluShift","aluShiftRight" ,"aluSaveNZ"}, - aluOpRol = {"aluShift", "aluShiftRoll" ,"aluSaveNZ"}, - aluOpRor = {"aluShift","aluShiftRight","aluShiftRoll" ,"aluSaveNZ"}, - aluOpSra = {"aluShift","aluShiftRight", "aluShiftArith","aluSaveNZ"}, + aluOpShl = {"aluRun", "aluShift" ,"aluSaveNZ"}, + aluOpShr = {"aluRun", "aluShift","aluShiftRight" ,"aluSaveNZ"}, + aluOpRol = {"aluRun", "aluShift", "aluShiftRoll" ,"aluSaveNZ"}, + aluOpRor = {"aluRun", "aluShift","aluShiftRight","aluShiftRoll" ,"aluSaveNZ"}, + aluOpSra = {"aluRun", "aluShift","aluShiftRight", "aluShiftArith","aluSaveNZ"}, clearRegs = { "aluSaveA","aluSaveB","aluSaveC","aluSaveU","aluSaveT", @@ -137,8 +137,8 @@ instructions = { { mnem="brk" , opcode=0xF3, {"instrSwapIV","adwInc","intFlgVal","intFlgClk"}, desc="Trigger interrupt", ccode={"cpu.ifg=1; int t=cpu.i; cpu.i=cpu.v; cpu.v=t; lni;"} }, { mnem="irt" , opcode=0xF4, {"instrSwapIV","adwInc","intFlgClk"}, desc="Return from interrupt", ccode={"cpu.ifg=0; int t=cpu.i; cpu.i=cpu.v; cpu.v=t; lni;"} }, { mnem="nop" , opcode=0xFF, {"instrNext"}, desc="Do nothing", ccode={"lni;"}, }, - { mnem="ien" , opcode=0xF5, {"instrNext"}, desc="Enbale interrupts", ccode={"cpu.ien=1; lni;"}, }, - { mnem="idi" , opcode=0xF6, {"instrNext"}, desc="Disable interrupts", ccode={"cpu.ien=0; lni;"}, }, + { mnem="ien" , opcode=0xF5, {"instrNext"}, desc="Enbale interrupts", ccode={"cpu.ien=1; lni;"}, }, -- todo + { mnem="idi" , opcode=0xF6, {"instrNext"}, desc="Disable interrupts", ccode={"cpu.ien=0; lni;"}, }, -- todo { category = "16-bit Inc/Dec", catlet="I" }, { mnem="inc p" , opcode=0x12, {"adwlP","adwInc","adwSaveP","instrNext"}, desc="P++", ccode={"cpu.p++; lni;"} }, @@ -258,12 +258,12 @@ instructions = { { mnem="jss q" , opcode=0xE5, {"pushRetAddr1","instrSub1"}, {"pushRetAddr2","instrSub2"}, {"jmpAbsQ"}, desc="I=Q, *(S++++)=I-1", ccode={"pushretaddr1","pushretaddr2","jmpabsq"} }, { mnem="rts" , opcode=0xE1, {"pop161","instrSub1"}, {"pop162","instrSub2"}, {"jmpAbsUT","adrInc"}, desc="I=*(----S)+1", ccode={"pop161","pop162","jmpabsutplus1"} }, { mnem="jpr imm8" , opcode=0x31, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub1"}, {"jmpRelT"}, desc="I+=imm8", ccode={"loadimmedt","jmprelt"} }, - { mnem="jnz imm8" , opcode=0x30, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NZ" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Zero" , ccode={"loadimmedt","if( cpu.nz ) { jmprelt } else { lni }"} }, - { mnem="jpz imm8" , opcode=0x32, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" , ccode={"loadimmedt","if(!cpu.nz ) { jmprelt } else { lni }"} }, - { mnem="jge imm8" , opcode=0x33, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" , ccode={"loadimmedt","if(!cpu.cf ) { jmprelt } else { lni }"} }, - { mnem="jlt imm8" , opcode=0x34, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" , ccode={"loadimmedt","if( cpu.cf ) { jmprelt } else { lni }"} }, - { mnem="jgt imm8" , opcode=0x35, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero & Carry", ccode={"loadimmedt","if(cpu.nz && (!cpu.cf)) { jmprelt } else { lni }"} }, - { mnem="jle imm8" , opcode=0x36, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero | !Carry", ccode={"loadimmedt","if((!cpu.nz) || cpu.cf) { jmprelt } else { lni }"} }, + { mnem="jnz imm8" , opcode=0x30, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NZ" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Zero" , ccode={"loadimmedt","if( cpu.nz ) { jmprelt } else { lni }"} }, + { mnem="jpz imm8" , opcode=0x32, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0Z" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero" , ccode={"loadimmedt","if(!cpu.nz ) { jmprelt } else { lni }"} }, + { mnem="jlt imm8" , opcode=0x33, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if !Carry" , ccode={"loadimmedt","if(!cpu.cf ) { jmprelt } else { lni }"} }, + { mnem="jge imm8" , opcode=0x34, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0C" }, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Carry" , ccode={"loadimmedt","if( cpu.cf ) { jmprelt } else { lni }"} }, + { mnem="jgt imm8" , opcode=0x35, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"jmpRelT"}, {"instrNext"}, desc="I+=imm8 if !Zero & Carry", ccode={"loadimmedt","if( cpu.nz && cpu.cf ) { jmprelt } else { lni }"} }, + { mnem="jle imm8" , opcode=0x36, jmp=true, rel=true, ncycles=2, {"loadImmed","memSaveT","instrSub23Cond","instrNext0NC","instrNext0Z"}, {}, {"instrNext"}, {"jmpRelT"}, desc="I+=imm8 if Zero | !Carry", ccode={"loadimmedt","if((!cpu.nz) || (!cpu.cf)) { jmprelt } else { lni }"} }, { category = "Stack", catlet="S" }, { mnem="psh a" , opcode=0x40, {"pushReg","alurA","instrSub1"}, {"instrNext"}, desc="*(S++)=A", ccode={"pushbyte(cpu.a);","lni;"} },