📄 cpu86instr.vhd
字号:
-- IDIV regfield=111-----------------------------------------------------------------------------constant F6INSTR : std_logic_vector(7 downto 0) := X"F6"; -- Byteconstant F7INSTR : std_logic_vector(7 downto 0) := X"F7"; -- Word------------------------------------------------------------------------------- Carry Flag CLC/CMC/STC -----------------------------------------------------------------------------constant CLC : std_logic_vector(7 downto 0) := X"F8"; constant CMC : std_logic_vector(7 downto 0) := X"F5"; constant STC : std_logic_vector(7 downto 0) := X"F9"; constant CLD : std_logic_vector(7 downto 0) := X"FC"; constant STDx : std_logic_vector(7 downto 0) := X"FD"; -- Strange Problem, were is STD defined?constant CLI : std_logic_vector(7 downto 0) := X"FA"; constant STI : std_logic_vector(7 downto 0) := X"FB"; ------------------------------------------------------------------------------- 8080 Instruction LAHF/SAHF -----------------------------------------------------------------------------constant LAHF : std_logic_vector(7 downto 0) := X"9F"; constant SAHF : std_logic_vector(7 downto 0) := X"9E"; ------------------------------------------------------------------------------- Conditional Jumps Jxxx -----------------------------------------------------------------------------constant JZ : std_logic_vector(7 downto 0) := X"74"; constant JL : std_logic_vector(7 downto 0) := X"7C"; constant JLE : std_logic_vector(7 downto 0) := X"7E"; constant JB : std_logic_vector(7 downto 0) := X"72"; constant JBE : std_logic_vector(7 downto 0) := X"76"; constant JP : std_logic_vector(7 downto 0) := X"7A"; constant JO : std_logic_vector(7 downto 0) := X"70"; constant JS : std_logic_vector(7 downto 0) := X"78"; constant JNE : std_logic_vector(7 downto 0) := X"75"; constant JNL : std_logic_vector(7 downto 0) := X"7D"; constant JNLE : std_logic_vector(7 downto 0) := X"7F"; constant JNB : std_logic_vector(7 downto 0) := X"73"; constant JNBE : std_logic_vector(7 downto 0) := X"77"; constant JNP : std_logic_vector(7 downto 0) := X"7B"; constant JNO : std_logic_vector(7 downto 0) := X"71"; constant JNS : std_logic_vector(7 downto 0) := X"79"; constant JMPS : std_logic_vector(7 downto 0) := X"EB"; -- Short Jump within segment , SignExt DISPLconstant JMP : std_logic_vector(7 downto 0) := X"E9"; -- Long Jump within segment, No SignExt DISPLconstant JMPDIS : std_logic_vector(7 downto 0) := X"EA"; -- Jump Inter Segment (CS:IP given)------------------------------------------------------------------------------- Push/Pop Flags -----------------------------------------------------------------------------constant PUSHF : std_logic_vector(7 downto 0) := X"9C"; constant POPF : std_logic_vector(7 downto 0) := X"9D"; ------------------------------------------------------------------------------- PUSH Register -----------------------------------------------------------------------------constant PUSHAX : std_logic_vector(7 downto 0) := X"50"; constant PUSHCX : std_logic_vector(7 downto 0) := X"51"; constant PUSHDX : std_logic_vector(7 downto 0) := X"52"; constant PUSHBX : std_logic_vector(7 downto 0) := X"53"; constant PUSHSP : std_logic_vector(7 downto 0) := X"54"; constant PUSHBP : std_logic_vector(7 downto 0) := X"55"; constant PUSHSI : std_logic_vector(7 downto 0) := X"56"; constant PUSHDI : std_logic_vector(7 downto 0) := X"57"; constant PUSHES : std_logic_vector(7 downto 0) := X"06"; constant PUSHCS : std_logic_vector(7 downto 0) := X"0E"; constant PUSHSS : std_logic_vector(7 downto 0) := X"16"; constant PUSHDS : std_logic_vector(7 downto 0) := X"1E"; ------------------------------------------------------------------------------- Pop Register -----------------------------------------------------------------------------constant POPAX : std_logic_vector(7 downto 0) := X"58"; constant POPCX : std_logic_vector(7 downto 0) := X"59"; constant POPDX : std_logic_vector(7 downto 0) := X"5A"; constant POPBX : std_logic_vector(7 downto 0) := X"5B"; constant POPSP : std_logic_vector(7 downto 0) := X"5C"; constant POPBP : std_logic_vector(7 downto 0) := X"5D"; constant POPSI : std_logic_vector(7 downto 0) := X"5E"; constant POPDI : std_logic_vector(7 downto 0) := X"5F"; constant POPES : std_logic_vector(7 downto 0) := X"07"; --constant POPCS : std_logic_vector(7 downto 0) := X"1F"; -- Illegalconstant POPSS : std_logic_vector(7 downto 0) := X"17"; constant POPDS : std_logic_vector(7 downto 0) := X"1F";
constant POPRM : std_logic_vector(7 downto 0) := X"8F"; ------------------------------------------------------------------------------- Exchange Register -----------------------------------------------------------------------------constant XCHGW : std_logic_vector(7 downto 0) := X"86"; constant XCHGB : std_logic_vector(7 downto 0) := X"87"; constant XCHGAX : std_logic_vector(7 downto 0) := X"90"; constant XCHGCX : std_logic_vector(7 downto 0) := X"91"; constant XCHGDX : std_logic_vector(7 downto 0) := X"92"; constant XCHGBX : std_logic_vector(7 downto 0) := X"93"; constant XCHGSP : std_logic_vector(7 downto 0) := X"94"; constant XCHGBP : std_logic_vector(7 downto 0) := X"95"; constant XCHGSI : std_logic_vector(7 downto 0) := X"96"; constant XCHGDI : std_logic_vector(7 downto 0) := X"97"; ------------------------------------------------------------------------------- Load Effective Address -----------------------------------------------------------------------------constant LEA : std_logic_vector(7 downto 0) := X"8D"; constant LDS : std_logic_vector(7 downto 0) := X"C5"; constant LES : std_logic_vector(7 downto 0) := X"C4"; ------------------------------------------------------------------------------- Convert Instructions -----------------------------------------------------------------------------constant CBW : std_logic_vector(7 downto 0) := X"98"; constant CWD : std_logic_vector(7 downto 0) := X"99"; constant AAS : std_logic_vector(7 downto 0) := X"3F"; constant DAS : std_logic_vector(7 downto 0) := X"2F"; constant AAA : std_logic_vector(7 downto 0) := X"37"; constant DAA : std_logic_vector(7 downto 0) := X"27"; constant AAM : std_logic_vector(7 downto 0) := X"D4"; constant AAD : std_logic_vector(7 downto 0) := X"D5"; constant XLAT : std_logic_vector(7 downto 0) := X"D7"; ------------------------------------------------------------------------------- Misc Instructions -----------------------------------------------------------------------------constant NOP : std_logic_vector(7 downto 0) := X"90"; -- No Operationconstant LOCKBUS : std_logic_vector(7 downto 0) := X"F0"; -- Assert /LOCK signalconstant WAITx : std_logic_vector(7 downto 0) := X"9B"; -- WAIT is not implemented, result in NOPconstant HLT : std_logic_vector(7 downto 0) := X"F4"; -- Halt Instruction, wait NMI, INTR, Reset------------------------------------------------------------------------------- Loop Instructions -----------------------------------------------------------------------------constant LOOPCX : std_logic_vector(7 downto 0) := X"E2"; constant LOOPZ : std_logic_vector(7 downto 0) := X"E1"; constant LOOPNZ : std_logic_vector(7 downto 0) := X"E0"; constant JCXZ : std_logic_vector(7 downto 0) := X"E3"; ------------------------------------------------------------------------------- CALL Instructions -----------------------------------------------------------------------------constant CALL : std_logic_vector(7 downto 0) := X"E8"; -- Direct within Segment constant CALLDIS : std_logic_vector(7 downto 0) := X"9A"; -- Direct Inter Segment ------------------------------------------------------------------------------- RET Instructions -----------------------------------------------------------------------------constant RET : std_logic_vector(7 downto 0) := X"C3"; -- Within Segment constant RETDIS : std_logic_vector(7 downto 0) := X"CB"; -- Direct Inter Segment constant RETO : std_logic_vector(7 downto 0) := X"C2"; -- Within Segment + Offsetconstant RETDISO : std_logic_vector(7 downto 0) := X"CA"; -- Direct Inter Segment +Offset ------------------------------------------------------------------------------- INT Instructions -----------------------------------------------------------------------------constant INT : std_logic_vector(7 downto 0) := X"CD"; -- type=second byte constant INT3 : std_logic_vector(7 downto 0) := X"CC"; -- type=3 constant INTO : std_logic_vector(7 downto 0) := X"CE"; -- type=4 constant IRET : std_logic_vector(7 downto 0) := X"CF"; -- Interrupt Return ------------------------------------------------------------------------------- String/Repeat Instructions -----------------------------------------------------------------------------constant MOVSB : std_logic_vector(7 downto 0) := X"A4"; constant MOVSW : std_logic_vector(7 downto 0) := X"A5"; constant CMPSB : std_logic_vector(7 downto 0) := X"A6"; constant CMPSW : std_logic_vector(7 downto 0) := X"A7"; constant SCASB : std_logic_vector(7 downto 0) := X"AE"; constant SCASW : std_logic_vector(7 downto 0) := X"AF"; constant LODSB : std_logic_vector(7 downto 0) := X"AC"; constant LODSW : std_logic_vector(7 downto 0) := X"AD"; constant STOSB : std_logic_vector(7 downto 0) := X"AA"; constant STOSW : std_logic_vector(7 downto 0) := X"AB"; constant REPNE : std_logic_vector(7 downto 0) := X"F2"; -- stop if zf=1constant REPE : std_logic_vector(7 downto 0) := X"F3"; -- stop if zf/=1 ------------------------------------------------------------------------------- Shift/Rotate Instructions -- Operation define in MODRM REG bits-- Note REG=110 is undefined -----------------------------------------------------------------------------constant SHFTROT0 : std_logic_vector(7 downto 0) := X"D0"; constant SHFTROT1 : std_logic_vector(7 downto 0) := X"D1"; constant SHFTROT2 : std_logic_vector(7 downto 0) := X"D2"; constant SHFTROT3 : std_logic_vector(7 downto 0) := X"D3"; ------------------------------------------------------------------------------- FF/FE Instructions. Use regfiled to decode operation -- INC reg=000 (FF/FE)-- DEC reg=001 (FF/FE)-- CALL reg=010 (FF) Indirect within segment-- CALL reg=011 (FF) Indirect Intersegment-- JMP reg=100 (FF) Indirect within segment-- JMP reg=101 (FF) Indirect Intersegment-- PUSH reg=110 (FF)-----------------------------------------------------------------------------constant FEINSTR : std_logic_vector(7 downto 0) := X"FE"; constant FFINSTR : std_logic_vector(7 downto 0) := X"FF"; END cpu86instr;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -