From 345f9d522d73452c429b168c182344868f42508c Mon Sep 17 00:00:00 2001 From: mooz Date: Sun, 18 Nov 2018 00:10:32 +0100 Subject: [PATCH] Added the last opcodes of 0x70xx. --- l7801.lua | 25 +++++++-- samples/scv_test.l65 | 107 ++++++++++++++++++++++++++++++++++++- uPD7801.lua | 124 +++++-------------------------------------- 3 files changed, 140 insertions(+), 116 deletions(-) diff --git a/l7801.lua b/l7801.lua index 823f3ed..a7f086e 100644 --- a/l7801.lua +++ b/l7801.lua @@ -54,6 +54,9 @@ local Keywords_7801 = { 'ona','offa', 'anaw','xraw','oraw','addncw','gtaw','subnbw','ltaw','addw','onaw','adcw','offaw','subw','neaw','sbbw','eqaw', 'sspd','lspd','sbcd','lbcd','sded','lded','shld','lhld', + 'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax', + 'anaxi','xraxi','oraxi','addncxi','gtaxi','subnbxi','ltaxi','addxi','onaxi','adcxi','offaxi','subxi','neaxi','sbbxi','eqaxi', + 'anaxd','xraxd','oraxd','addncxd','gtaxd','subnbxd','ltaxd','addxd','onaxd','adcxd','offaxd','subxd','neaxd','sbbxd','eqaxd', } local Registers_7801 = { a=8,b=8,c=8,d=8,e=8,h=8,l=8,v=8, @@ -114,6 +117,9 @@ local opcode_regb = lookupify{ local opcode_reg_ind = lookupify{ 'ldax','ldaxd','ldaxi', 'stax','staxd','staxi', + 'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax', + 'anaxi','xraxi','oraxi','addncxi','gtaxi','subnbxi','ltaxi','addxi','onaxi','adcxi','offaxi','subxi','neaxi','sbbxi','eqaxi', + 'anaxd','xraxd','oraxd','addncxd','gtaxd','subnbxd','ltaxd','addxd','onaxd','adcxd','offaxd','subxd','neaxd','sbbxd','eqaxd', } local opcode_reg_ind_ex = lookupify{ 'mvix' @@ -140,9 +146,22 @@ local opcode_reg_list = { 'bit0','bit1','bit2','bit3','bit4','bit5','bit6','bit7', 'anaw','xraw','oraw','addncw','gtaw','subnbw','ltaw','addw','onaw','adcw','offaw','subw','neaw','sbbw','eqaw', }, - bc = lookupify{'ldax','lxi','mvix','pop','push','stax'}, - de = lookupify{'ldax','ldaxd','ldaxi','lxi','mvix','pop','push','stax','staxd','staxi'}, - hl = lookupify{'dcx','inx','ldax','ldaxd','ldaxi','lxi','mvix','pop','push','stax','staxd','staxi'}, + bc = lookupify{ + 'ldax','lxi','mvix','pop','push','stax', + 'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax', + }, + de = lookupify{ + 'ldax','ldaxd','ldaxi','lxi','mvix','pop','push','stax','staxd','staxi', + 'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax', + 'anaxi','xraxi','oraxi','addncxi','gtaxi','subnbxi','ltaxi','addxi','onaxi','adcxi','offaxi','subxi','neaxi','sbbxi','eqaxi', + 'anaxd','xraxd','oraxd','addncxd','gtaxd','subnbxd','ltaxd','addxd','onaxd','adcxd','offaxd','subxd','neaxd','sbbxd','eqaxd', + }, + hl = lookupify{ + 'dcx','inx','ldax','ldaxd','ldaxi','lxi','mvix','pop','push','stax','staxd','staxi', + 'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax', + 'anaxi','xraxi','oraxi','addncxi','gtaxi','subnbxi','ltaxi','addxi','onaxi','adcxi','offaxi','subxi','neaxi','sbbxi','eqaxi', + 'anaxd','xraxd','oraxd','addncxd','gtaxd','subnbxd','ltaxd','addxd','onaxd','adcxd','offaxd','subxd','neaxd','sbbxd','eqaxd', + }, sp = lookupify{'dcx','inx','lxi'}, va = lookupify{'pop','push'}, pa = lookupify{'ani','xri','ori','adinc','gti','suinb','lti','adi','oni','aci','offi','sui','nei','sbi','eqi'}, diff --git a/samples/scv_test.l65 b/samples/scv_test.l65 index 435b27a..dab312e 100644 --- a/samples/scv_test.l65 +++ b/samples/scv_test.l65 @@ -629,5 +629,110 @@ section{"rom", org=0x8000} mov e,(0x0ff0) mov h,(0x0fff) mov l,(0xf000) - + anax (bc) + xrax (bc) + orax (bc) + addncx (bc) + gtax (bc) + subnbx (bc) + ltax (bc) + addx (bc) + onax (bc) + adcx (bc) + offax (bc) + subx (bc) + neax (bc) + sbbx (bc) + eqax (bc) + anax (de) + xrax (de) + orax (de) + addncx (de) + gtax (de) + subnbx (de) + ltax (de) + addx (de) + onax (de) + adcx (de) + offax (de) + subx (de) + neax (de) + sbbx (de) + eqax (de) + anax (hl) + xrax (hl) + orax (hl) + addncx (hl) + gtax (hl) + subnbx (hl) + ltax (hl) + addx (hl) + onax (hl) + adcx (hl) + offax (hl) + subx (hl) + neax (hl) + sbbx (hl) + eqax (hl) + anaxi (de) + xraxi (de) + oraxi (de) + addncxi (de) + gtaxi (de) + subnbxi (de) + ltaxi (de) + addxi (de) + onaxi (de) + adcxi (de) + offaxi (de) + subxi (de) + neaxi (de) + sbbxi (de) + eqaxi (de) + anaxi (hl) + xraxi (hl) + oraxi (hl) + addncxi (hl) + gtaxi (hl) + subnbxi (hl) + ltaxi (hl) + addxi (hl) + onaxi (hl) + adcxi (hl) + offaxi (hl) + subxi (hl) + neaxi (hl) + sbbxi (hl) + eqaxi (hl) + anaxd (de) + xraxd (de) + oraxd (de) + addncxd (de) + gtaxd (de) + subnbxd (de) + ltaxd (de) + addxd (de) + onaxd (de) + adcxd (de) + offaxd (de) + subxd (de) + neaxd (de) + sbbxd (de) + eqaxd (de) + anaxd (hl) + xraxd (hl) + oraxd (hl) + addncxd (hl) + gtaxd (hl) + subnbxd (hl) + ltaxd (hl) + addxd (hl) + onaxd (hl) + adcxd (hl) + offaxd (hl) + subxd (hl) + neaxd (hl) + sbbxd (hl) + eqaxd (hl) + writebin(filename .. '.bin') diff --git a/uPD7801.lua b/uPD7801.lua index b19bdc5..e02c77d 100644 --- a/uPD7801.lua +++ b/uPD7801.lua @@ -623,116 +623,16 @@ for k,v in pairs(op70r8ind) do end end -return M +k = 0x89 +local op70names = {'anax','xrax','orax','addncx','gtax','subnbx','ltax','addx','onax','adcx','offax','subx','neax','sbbx','eqax'} +local op70suffixes = {'bc','de','hl','ide','ihl','dde','dhl'} +for i,o in ipairs(op70names) do + for j,s in ipairs(op70suffixes) do + local l = 0x00 + k + (j-1) + (8 * (i-1)) + M[o .. s] = function() + table.insert(M.section_current.instructions, { size=2, cycles=11, bin={ 0x70, l } }) + end + end +end ---[[ [todo] - -16 bits instructions: - 0x70xx - 11 - case 0x89: my_stprintf_s(buffer, buffer_len, _T("anax b")); break; - case 0x8a: my_stprintf_s(buffer, buffer_len, _T("anax d")); break; - case 0x8b: my_stprintf_s(buffer, buffer_len, _T("anax h")); break; - case 0x8c: my_stprintf_s(buffer, buffer_len, _T("anax d+")); break; - case 0x8d: my_stprintf_s(buffer, buffer_len, _T("anax h+")); break; - case 0x8e: my_stprintf_s(buffer, buffer_len, _T("anax d-")); break; - case 0x8f: my_stprintf_s(buffer, buffer_len, _T("anax h-")); break; - case 0x91: my_stprintf_s(buffer, buffer_len, _T("xrax b")); break; - case 0x92: my_stprintf_s(buffer, buffer_len, _T("xrax d")); break; - case 0x93: my_stprintf_s(buffer, buffer_len, _T("xrax h")); break; - case 0x94: my_stprintf_s(buffer, buffer_len, _T("xrax d+")); break; - case 0x95: my_stprintf_s(buffer, buffer_len, _T("xrax h+")); break; - case 0x96: my_stprintf_s(buffer, buffer_len, _T("xrax d-")); break; - case 0x97: my_stprintf_s(buffer, buffer_len, _T("xrax h-")); break; - case 0x99: my_stprintf_s(buffer, buffer_len, _T("orax b")); break; - case 0x9a: my_stprintf_s(buffer, buffer_len, _T("orax d")); break; - case 0x9b: my_stprintf_s(buffer, buffer_len, _T("orax h")); break; - case 0x9c: my_stprintf_s(buffer, buffer_len, _T("orax d+")); break; - case 0x9d: my_stprintf_s(buffer, buffer_len, _T("orax h+")); break; - case 0x9e: my_stprintf_s(buffer, buffer_len, _T("orax d-")); break; - case 0x9f: my_stprintf_s(buffer, buffer_len, _T("orax h-")); break; - case 0xa1: my_stprintf_s(buffer, buffer_len, _T("addncx b")); break; - case 0xa2: my_stprintf_s(buffer, buffer_len, _T("addncx d")); break; - case 0xa3: my_stprintf_s(buffer, buffer_len, _T("addncx h")); break; - case 0xa4: my_stprintf_s(buffer, buffer_len, _T("addncx d+")); break; - case 0xa5: my_stprintf_s(buffer, buffer_len, _T("addncx h+")); break; - case 0xa6: my_stprintf_s(buffer, buffer_len, _T("addncx d-")); break; - case 0xa7: my_stprintf_s(buffer, buffer_len, _T("addncx h-")); break; - case 0xa9: my_stprintf_s(buffer, buffer_len, _T("gtax b")); break; - case 0xaa: my_stprintf_s(buffer, buffer_len, _T("gtax d")); break; - case 0xab: my_stprintf_s(buffer, buffer_len, _T("gtax h")); break; - case 0xac: my_stprintf_s(buffer, buffer_len, _T("gtax d+")); break; - case 0xad: my_stprintf_s(buffer, buffer_len, _T("gtax h+")); break; - case 0xae: my_stprintf_s(buffer, buffer_len, _T("gtax d-")); break; - case 0xaf: my_stprintf_s(buffer, buffer_len, _T("gtax h-")); break; - case 0xb1: my_stprintf_s(buffer, buffer_len, _T("subnbx b")); break; - case 0xb2: my_stprintf_s(buffer, buffer_len, _T("subnbx d")); break; - case 0xb3: my_stprintf_s(buffer, buffer_len, _T("subnbx h")); break; - case 0xb4: my_stprintf_s(buffer, buffer_len, _T("subnbx d+")); break; - case 0xb5: my_stprintf_s(buffer, buffer_len, _T("subnbx h+")); break; - case 0xb6: my_stprintf_s(buffer, buffer_len, _T("subnbx d-")); break; - case 0xb7: my_stprintf_s(buffer, buffer_len, _T("subnbx h-")); break; - case 0xb9: my_stprintf_s(buffer, buffer_len, _T("ltax b")); break; - case 0xba: my_stprintf_s(buffer, buffer_len, _T("ltax d")); break; - case 0xbb: my_stprintf_s(buffer, buffer_len, _T("ltax h")); break; - case 0xbc: my_stprintf_s(buffer, buffer_len, _T("ltax d+")); break; - case 0xbd: my_stprintf_s(buffer, buffer_len, _T("ltax h+")); break; - case 0xbe: my_stprintf_s(buffer, buffer_len, _T("ltax d-")); break; - case 0xbf: my_stprintf_s(buffer, buffer_len, _T("ltax h-")); break; - case 0xc1: my_stprintf_s(buffer, buffer_len, _T("addx b")); break; - case 0xc2: my_stprintf_s(buffer, buffer_len, _T("addx d")); break; - case 0xc3: my_stprintf_s(buffer, buffer_len, _T("addx h")); break; - case 0xc4: my_stprintf_s(buffer, buffer_len, _T("addx d+")); break; - case 0xc5: my_stprintf_s(buffer, buffer_len, _T("addx h+")); break; - case 0xc6: my_stprintf_s(buffer, buffer_len, _T("addx d-")); break; - case 0xc7: my_stprintf_s(buffer, buffer_len, _T("addx h-")); break; - case 0xc9: my_stprintf_s(buffer, buffer_len, _T("onax b")); break; - case 0xca: my_stprintf_s(buffer, buffer_len, _T("onax d")); break; - case 0xcb: my_stprintf_s(buffer, buffer_len, _T("onax h")); break; - case 0xcc: my_stprintf_s(buffer, buffer_len, _T("onax d+")); break; - case 0xcd: my_stprintf_s(buffer, buffer_len, _T("onax h+")); break; - case 0xce: my_stprintf_s(buffer, buffer_len, _T("onax d-")); break; - case 0xcf: my_stprintf_s(buffer, buffer_len, _T("onax h-")); break; - case 0xd1: my_stprintf_s(buffer, buffer_len, _T("adcx b")); break; - case 0xd2: my_stprintf_s(buffer, buffer_len, _T("adcx d")); break; - case 0xd3: my_stprintf_s(buffer, buffer_len, _T("adcx h")); break; - case 0xd4: my_stprintf_s(buffer, buffer_len, _T("adcx d+")); break; - case 0xd5: my_stprintf_s(buffer, buffer_len, _T("adcx h+")); break; - case 0xd6: my_stprintf_s(buffer, buffer_len, _T("adcx d-")); break; - case 0xd7: my_stprintf_s(buffer, buffer_len, _T("adcx h-")); break; - case 0xd9: my_stprintf_s(buffer, buffer_len, _T("offax b")); break; - case 0xda: my_stprintf_s(buffer, buffer_len, _T("offax d")); break; - case 0xdb: my_stprintf_s(buffer, buffer_len, _T("offax h")); break; - case 0xdc: my_stprintf_s(buffer, buffer_len, _T("offax d+")); break; - case 0xdd: my_stprintf_s(buffer, buffer_len, _T("offax h+")); break; - case 0xde: my_stprintf_s(buffer, buffer_len, _T("offax d-")); break; - case 0xdf: my_stprintf_s(buffer, buffer_len, _T("offax h-")); break; - case 0xe1: my_stprintf_s(buffer, buffer_len, _T("subx b")); break; - case 0xe2: my_stprintf_s(buffer, buffer_len, _T("subx d")); break; - case 0xe3: my_stprintf_s(buffer, buffer_len, _T("subx h")); break; - case 0xe4: my_stprintf_s(buffer, buffer_len, _T("subx d+")); break; - case 0xe5: my_stprintf_s(buffer, buffer_len, _T("subx h+")); break; - case 0xe6: my_stprintf_s(buffer, buffer_len, _T("subx d-")); break; - case 0xe7: my_stprintf_s(buffer, buffer_len, _T("subx h-")); break; - case 0xe9: my_stprintf_s(buffer, buffer_len, _T("neax b")); break; - case 0xea: my_stprintf_s(buffer, buffer_len, _T("neax d")); break; - case 0xeb: my_stprintf_s(buffer, buffer_len, _T("neax h")); break; - case 0xec: my_stprintf_s(buffer, buffer_len, _T("neax d+")); break; - case 0xed: my_stprintf_s(buffer, buffer_len, _T("neax h+")); break; - case 0xee: my_stprintf_s(buffer, buffer_len, _T("neax d-")); break; - case 0xef: my_stprintf_s(buffer, buffer_len, _T("neax h-")); break; - case 0xf1: my_stprintf_s(buffer, buffer_len, _T("sbbx b")); break; - case 0xf2: my_stprintf_s(buffer, buffer_len, _T("sbbx d")); break; - case 0xf3: my_stprintf_s(buffer, buffer_len, _T("sbbx h")); break; - case 0xf4: my_stprintf_s(buffer, buffer_len, _T("sbbx d+")); break; - case 0xf5: my_stprintf_s(buffer, buffer_len, _T("sbbx h+")); break; - case 0xf6: my_stprintf_s(buffer, buffer_len, _T("sbbx d-")); break; - case 0xf7: my_stprintf_s(buffer, buffer_len, _T("sbbx h-")); break; - case 0xf9: my_stprintf_s(buffer, buffer_len, _T("eqax b")); break; - case 0xfa: my_stprintf_s(buffer, buffer_len, _T("eqax d")); break; - case 0xfb: my_stprintf_s(buffer, buffer_len, _T("eqax h")); break; - case 0xfc: my_stprintf_s(buffer, buffer_len, _T("eqax d+")); break; - case 0xfd: my_stprintf_s(buffer, buffer_len, _T("eqax h+")); break; - case 0xfe: my_stprintf_s(buffer, buffer_len, _T("eqax d-")); break; - case 0xff: my_stprintf_s(buffer, buffer_len, _T("eqax h-")); break; -]]-- +return M