------------------------------------------------------------------------- -- Project: JCPU, a portable 8-bit RISC CPU written in VHDL -- This file: The ROM file for use in your VHDL design -- Copyright (C) 2007 J. Ahrensfeld -- This library is free software; you can redistribute it and/or -- modify it under the terms of the GNU Lesser General Public -- License as published by the Free Software Foundation; either -- version 2.1 of the License, or (at your option) any later version. -- This library is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- Lesser General Public License for more details. -- You should have received a copy of the GNU Lesser General Public -- License along with this library; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -- For questions and ideas, please contact the author at jens@jayfield.org ----------------------------------------------------------------------- LIBRARY ieee; use IEEE.STD_LOGIC_1164.ALL; USE ieee.numeric_std.ALL; library work; use work.cpu_pkg.all; -- JASM_ROM_INSERT_HERE ENTITY irom IS Port ( clk : in STD_LOGIC; ce : in STD_LOGIC; addr : in inst_addr_t; dout : out inst_t ); END irom; ARCHITECTURE test OF irom IS type imem_rom_t is array (0 to 503) of inst_t; -- Assembled from test.jsm constant imem_rom : imem_rom_t := ( "110000" & X"002", -- 0x000: JMP 0x002 "110000" & X"0B5", -- 0x001: JMP 0x0B5 "000011" & X"000", -- 0x002: MOV R00, 0x00 "000011" & X"001", -- 0x003: MOV R01, 0x00 "000011" & X"002", -- 0x004: MOV R02, 0x00 "000011" & X"003", -- 0x005: MOV R03, 0x00 "100100" & X"000", -- 0x006: XOUT (0x00), R00 "001101" & X"000", -- 0x007: MOVC (0x00), R00 "001101" & X"100", -- 0x008: MOVC (0x10), R00 "001101" & X"110", -- 0x009: MOVC (0x11), R00 "001101" & X"080", -- 0x00A: MOVC (0x08), R00 "001101" & X"090", -- 0x00B: MOVC (0x09), R00 "000011" & X"800", -- 0x00C: MOV R00, 0x80 "000011" & X"001", -- 0x00D: MOV R01, 0x00 "001101" & X"0E0", -- 0x00E: MOVC (0x0E), R00 "001101" & X"0F1", -- 0x00F: MOVC (0x0F), R01 "111011" & X"17A", -- 0x010: CALL 0x17A "111011" & X"0F3", -- 0x011: CALL 0x0F3 "000011" & X"010", -- 0x012: MOV R00, 0x01 "111011" & X"197", -- 0x013: CALL 0x197 "000011" & X"001", -- 0x014: MOV R01, 0x00 "111011" & X"19C", -- 0x015: CALL 0x19C "101000" & X"A00", -- 0x016: XIN R00, (0xA0) "011001" & X"010", -- 0x017: AND R00, 0x01 "110001" & X"016", -- 0x018: JZ 0x016 "101000" & X"A00", -- 0x019: XIN R00, (0xA0) "011001" & X"080", -- 0x01A: AND R00, 0x08 "110001" & X"019", -- 0x01B: JZ 0x019 "111011" & X"145", -- 0x01C: CALL 0x145 "000011" & X"000", -- 0x01D: MOV R00, 0x00 "000011" & X"801", -- 0x01E: MOV R01, 0x80 "000011" & X"002", -- 0x01F: MOV R02, 0x00 "000011" & X"003", -- 0x020: MOV R03, 0x00 "111011" & X"0D4", -- 0x021: CALL 0x0D4 "001101" & X"020", -- 0x022: MOVC (0x02), R00 "001101" & X"031", -- 0x023: MOVC (0x03), R01 "001101" & X"042", -- 0x024: MOVC (0x04), R02 "001101" & X"053", -- 0x025: MOVC (0x05), R03 "000011" & X"000", -- 0x026: MOV R00, 0x00 "000011" & X"A61", -- 0x027: MOV R01, 0xA6 "000011" & X"002", -- 0x028: MOV R02, 0x00 "000011" & X"003", -- 0x029: MOV R03, 0x00 "111011" & X"0D4", -- 0x02A: CALL 0x0D4 "011001" & X"0F2", -- 0x02B: AND R02, 0x0F "001111" & X"0F2", -- 0x02C: CMP R02, 0x0F "111010" & X"026", -- 0x02D: JNE 0x026 "000011" & X"09F", -- 0x02E: MOV R15, 0x09 "000011" & X"107", -- 0x02F: MOV R07, 0x10 "000011" & X"228", -- 0x030: MOV R08, 0x22 "000100" & X"070", -- 0x031: MOVX R00, (R07) "010001" & X"017", -- 0x032: INC R07 "000100" & X"071", -- 0x033: MOVX R01, (R07) "010001" & X"017", -- 0x034: INC R07 "000100" & X"082", -- 0x035: MOVX R02, (R08) "010001" & X"018", -- 0x036: INC R08 "000100" & X"083", -- 0x037: MOVX R03, (R08) "010001" & X"018", -- 0x038: INC R08 "111011" & X"0D4", -- 0x039: CALL 0x0D4 "010101" & X"01F", -- 0x03A: DEC R15 "110010" & X"031", -- 0x03B: JNZ 0x031 "000011" & X"010", -- 0x03C: MOV R00, 0x01 "111011" & X"197", -- 0x03D: CALL 0x197 "000011" & X"410", -- 0x03E: MOV R00, 0x41 "111011" & X"1AE", -- 0x03F: CALL 0x1AE "000011" & X"3A0", -- 0x040: MOV R00, 0x3A "111011" & X"1AE", -- 0x041: CALL 0x1AE "001010" & X"030", -- 0x042: MOVC R00, (0x03) "111011" & X"0EE", -- 0x043: CALL 0x0EE "001010" & X"020", -- 0x044: MOVC R00, (0x02) "111011" & X"0EE", -- 0x045: CALL 0x0EE "000011" & X"200", -- 0x046: MOV R00, 0x20 "111011" & X"1AE", -- 0x047: CALL 0x1AE "000011" & X"440", -- 0x048: MOV R00, 0x44 "111011" & X"1AE", -- 0x049: CALL 0x1AE "000011" & X"3A0", -- 0x04A: MOV R00, 0x3A "111011" & X"1AE", -- 0x04B: CALL 0x1AE "001010" & X"050", -- 0x04C: MOVC R00, (0x05) "111011" & X"0EE", -- 0x04D: CALL 0x0EE "001010" & X"040", -- 0x04E: MOVC R00, (0x04) "111011" & X"0EE", -- 0x04F: CALL 0x0EE "000011" & X"000", -- 0x050: MOV R00, 0x00 "100100" & X"010", -- 0x051: XOUT (0x01), R00 "000011" & X"400", -- 0x052: MOV R00, 0x40 "100100" & X"030", -- 0x053: XOUT (0x03), R00 "000011" & X"000", -- 0x054: MOV R00, 0x00 "100100" & X"020", -- 0x055: XOUT (0x02), R00 "000011" & X"FF0", -- 0x056: MOV R00, 0xFF "100100" & X"0E0", -- 0x057: XOUT (0x0E), R00 "000011" & X"400", -- 0x058: MOV R00, 0x40 "100100" & X"0D0", -- 0x059: XOUT (0x0D), R00 "000011" & X"FF0", -- 0x05A: MOV R00, 0xFF "100100" & X"100", -- 0x05B: XOUT (0x10), R00 "000011" & X"400", -- 0x05C: MOV R00, 0x40 "100100" & X"0F0", -- 0x05D: XOUT (0x0F), R00 "000011" & X"000", -- 0x05E: MOV R00, 0x00 "100100" & X"0A0", -- 0x05F: XOUT (0x0A), R00 "000011" & X"5C0", -- 0x060: MOV R00, 0x5C "100100" & X"090", -- 0x061: XOUT (0x09), R00 "000011" & X"000", -- 0x062: MOV R00, 0x00 "100100" & X"0C0", -- 0x063: XOUT (0x0C), R00 "000011" & X"5C0", -- 0x064: MOV R00, 0x5C "100100" & X"0B0", -- 0x065: XOUT (0x0B), R00 "101000" & X"000", -- 0x066: XIN R00, (0x00) "011011" & X"010", -- 0x067: OR R00, 0x01 "100100" & X"000", -- 0x068: XOUT (0x00), R00 "000011" & X"070", -- 0x069: MOV R00, 0x07 "100110" & X"030", -- 0x06A: COUT (0x03), R00 "101000" & X"810", -- 0x06B: XIN R00, (0x81) "001101" & X"010", -- 0x06C: MOVC (0x01), R00 "101000" & X"800", -- 0x06D: XIN R00, (0x80) "001101" & X"000", -- 0x06E: MOVC (0x00), R00 "001010" & X"010", -- 0x06F: MOVC R00, (0x01) "100100" & X"010", -- 0x070: XOUT (0x01), R00 "101000" & X"000", -- 0x071: XIN R00, (0x00) "011001" & X"080", -- 0x072: AND R00, 0x08 "110010" & X"06B", -- 0x073: JNZ 0x06B "000011" & X"C00", -- 0x074: MOV R00, 0xC0 "111011" & X"197", -- 0x075: CALL 0x197 "001010" & X"000", -- 0x076: MOVC R00, (0x00) "011001" & X"100", -- 0x077: AND R00, 0x10 "110010" & X"082", -- 0x078: JNZ 0x082 "101000" & X"820", -- 0x079: XIN R00, (0x82) "001101" & X"0A0", -- 0x07A: MOVC (0x0A), R00 "101000" & X"830", -- 0x07B: XIN R00, (0x83) "001101" & X"0B0", -- 0x07C: MOVC (0x0B), R00 "101000" & X"840", -- 0x07D: XIN R00, (0x84) "001101" & X"0C0", -- 0x07E: MOVC (0x0C), R00 "101000" & X"850", -- 0x07F: XIN R00, (0x85) "001101" & X"0D0", -- 0x080: MOVC (0x0D), R00 "110000" & X"08A", -- 0x081: JMP 0x08A "101000" & X"860", -- 0x082: XIN R00, (0x86) "001101" & X"0A0", -- 0x083: MOVC (0x0A), R00 "101000" & X"870", -- 0x084: XIN R00, (0x87) "001101" & X"0B0", -- 0x085: MOVC (0x0B), R00 "101000" & X"880", -- 0x086: XIN R00, (0x88) "001101" & X"0C0", -- 0x087: MOVC (0x0C), R00 "101000" & X"890", -- 0x088: XIN R00, (0x89) "001101" & X"0D0", -- 0x089: MOVC (0x0D), R00 "111011" & X"104", -- 0x08A: CALL 0x104 "000011" & X"4C0", -- 0x08B: MOV R00, 0x4C "111011" & X"1AE", -- 0x08C: CALL 0x1AE "000011" & X"3A0", -- 0x08D: MOV R00, 0x3A "111011" & X"1AE", -- 0x08E: CALL 0x1AE "001010" & X"0B0", -- 0x08F: MOVC R00, (0x0B) "111011" & X"0EE", -- 0x090: CALL 0x0EE "001010" & X"0A0", -- 0x091: MOVC R00, (0x0A) "111011" & X"0EE", -- 0x092: CALL 0x0EE "000011" & X"200", -- 0x093: MOV R00, 0x20 "111011" & X"1AE", -- 0x094: CALL 0x1AE "000011" & X"520", -- 0x095: MOV R00, 0x52 "111011" & X"1AE", -- 0x096: CALL 0x1AE "000011" & X"3A0", -- 0x097: MOV R00, 0x3A "111011" & X"1AE", -- 0x098: CALL 0x1AE "001010" & X"0D0", -- 0x099: MOVC R00, (0x0D) "111011" & X"0EE", -- 0x09A: CALL 0x0EE "001010" & X"0C0", -- 0x09B: MOVC R00, (0x0C) "111011" & X"0EE", -- 0x09C: CALL 0x0EE "001010" & X"000", -- 0x09D: MOVC R00, (0x00) "011001" & X"010", -- 0x09E: AND R00, 0x01 "110001" & X"0A6", -- 0x09F: JZ 0x0A6 "101000" & X"020", -- 0x0A0: XIN R00, (0x02) "101000" & X"031", -- 0x0A1: XIN R01, (0x03) "010101" & X"640", -- 0x0A2: SUB R00, 0x64 "110100" & X"0AF", -- 0x0A3: JNC 0x0AF "010101" & X"011", -- 0x0A4: DEC R01 "110000" & X"0AF", -- 0x0A5: JMP 0x0AF "001010" & X"000", -- 0x0A6: MOVC R00, (0x00) "011001" & X"040", -- 0x0A7: AND R00, 0x04 "110001" & X"0B4", -- 0x0A8: JZ 0x0B4 "101000" & X"020", -- 0x0A9: XIN R00, (0x02) "101000" & X"031", -- 0x0AA: XIN R01, (0x03) "010001" & X"640", -- 0x0AB: ADD R00, 0x64 "110100" & X"0AF", -- 0x0AC: JNC 0x0AF "010001" & X"011", -- 0x0AD: INC R01 "110000" & X"0AF", -- 0x0AE: JMP 0x0AF "100100" & X"031", -- 0x0AF: XOUT (0x03), R01 "100100" & X"020", -- 0x0B0: XOUT (0x02), R00 "101000" & X"000", -- 0x0B1: XIN R00, (0x00) "011001" & X"080", -- 0x0B2: AND R00, 0x08 "110001" & X"0B1", -- 0x0B3: JZ 0x0B1 "110000" & X"06B", -- 0x0B4: JMP 0x06B "111100" & X"000", -- 0x0B5: PUSH R00 "111100" & X"001", -- 0x0B6: PUSH R01 "001010" & X"100", -- 0x0B7: MOVC R00, (0x10) "001010" & X"111", -- 0x0B8: MOVC R01, (0x11) "010001" & X"010", -- 0x0B9: INC R00 "001111" & X"300", -- 0x0BA: CMP R00, 0x30 "110010" & X"0C6", -- 0x0BB: JNZ 0x0C6 "000011" & X"000", -- 0x0BC: MOV R00, 0x00 "111100" & X"000", -- 0x0BD: PUSH R00 "101000" & X"800", -- 0x0BE: XIN R00, (0x80) "001101" & X"000", -- 0x0BF: MOVC (0x00), R00 "111101" & X"000", -- 0x0C0: POP R00 "010001" & X"011", -- 0x0C1: INC R01 "001111" & X"641", -- 0x0C2: CMP R01, 0x64 "110010" & X"0C6", -- 0x0C3: JNZ 0x0C6 "111011" & X"0CB", -- 0x0C4: CALL 0x0CB "000011" & X"001", -- 0x0C5: MOV R01, 0x00 "001101" & X"100", -- 0x0C6: MOVC (0x10), R00 "001101" & X"111", -- 0x0C7: MOVC (0x11), R01 "111101" & X"001", -- 0x0C8: POP R01 "111101" & X"000", -- 0x0C9: POP R00 "111111" & X"000", -- 0x0CA: RETI "101000" & X"000", -- 0x0CB: XIN R00, (0x00) "000010" & X"001", -- 0x0CC: MOV R01, R00 "011001" & X"081", -- 0x0CD: AND R01, 0x08 "110010" & X"0D1", -- 0x0CE: JNZ 0x0D1 "011011" & X"080", -- 0x0CF: OR R00, 0x08 "110000" & X"0D2", -- 0x0D0: JMP 0x0D2 "011001" & X"F70", -- 0x0D1: AND R00, 0xF7 "100100" & X"000", -- 0x0D2: XOUT (0x00), R00 "111110" & X"000", -- 0x0D3: RET "111011" & X"0E2", -- 0x0D4: CALL 0x0E2 "100100" & X"051", -- 0x0D5: XOUT (0x05), R01 "100100" & X"040", -- 0x0D6: XOUT (0x04), R00 "100100" & X"073", -- 0x0D7: XOUT (0x07), R03 "100100" & X"062", -- 0x0D8: XOUT (0x06), R02 "011001" & X"801", -- 0x0D9: AND R01, 0x80 "110010" & X"0DC", -- 0x0DA: JNZ 0x0DC "111110" & X"000", -- 0x0DB: RET "111011" & X"0E8", -- 0x0DC: CALL 0x0E8 "101000" & X"051", -- 0x0DD: XIN R01, (0x05) "101000" & X"040", -- 0x0DE: XIN R00, (0x04) "101000" & X"073", -- 0x0DF: XIN R03, (0x07) "101000" & X"062", -- 0x0E0: XIN R02, (0x06) "111110" & X"000", -- 0x0E1: RET "111100" & X"000", -- 0x0E2: PUSH R00 "101000" & X"A00", -- 0x0E3: XIN R00, (0xA0) "011001" & X"020", -- 0x0E4: AND R00, 0x02 "110001" & X"0E3", -- 0x0E5: JZ 0x0E3 "111101" & X"000", -- 0x0E6: POP R00 "111110" & X"000", -- 0x0E7: RET "111100" & X"000", -- 0x0E8: PUSH R00 "101000" & X"A00", -- 0x0E9: XIN R00, (0xA0) "011001" & X"040", -- 0x0EA: AND R00, 0x04 "110001" & X"0E9", -- 0x0EB: JZ 0x0E9 "111101" & X"000", -- 0x0EC: POP R00 "111110" & X"000", -- 0x0ED: RET "111011" & X"1F1", -- 0x0EE: CALL 0x1F1 "111011" & X"1AE", -- 0x0EF: CALL 0x1AE "000010" & X"010", -- 0x0F0: MOV R00, R01 "111011" & X"1AE", -- 0x0F1: CALL 0x1AE "111110" & X"000", -- 0x0F2: RET "000011" & X"400", -- 0x0F3: MOV R00, 0x40 "111011" & X"197", -- 0x0F4: CALL 0x197 "000011" & X"E01", -- 0x0F5: MOV R01, 0xE0 "000011" & X"06F", -- 0x0F6: MOV R15, 0x06 "000011" & X"07E", -- 0x0F7: MOV R14, 0x07 "000010" & X"010", -- 0x0F8: MOV R00, R01 "111011" & X"1AE", -- 0x0F9: CALL 0x1AE "010101" & X"01E", -- 0x0FA: DEC R14 "110010" & X"0F8", -- 0x0FB: JNZ 0x0F8 "000011" & X"000", -- 0x0FC: MOV R00, 0x00 "111011" & X"1AE", -- 0x0FD: CALL 0x1AE "000011" & X"010", -- 0x0FE: MOV R00, 0x01 "011111" & X"000", -- 0x0FF: SHR R00 "100011" & X"001", -- 0x100: RORC R01 "010101" & X"01F", -- 0x101: DEC R15 "110010" & X"0F7", -- 0x102: JNZ 0x0F7 "111110" & X"000", -- 0x103: RET "111100" & X"000", -- 0x104: PUSH R00 "111100" & X"001", -- 0x105: PUSH R01 "111100" & X"00F", -- 0x106: PUSH R15 "001010" & X"0E0", -- 0x107: MOVC R00, (0x0E) "001010" & X"0F1", -- 0x108: MOVC R01, (0x0F) "010101" & X"010", -- 0x109: DEC R00 "010111" & X"001", -- 0x10A: SUBC R01, 0x00 "001101" & X"0E0", -- 0x10B: MOVC (0x0E), R00 "001101" & X"0F1", -- 0x10C: MOVC (0x0F), R01 "001111" & X"001", -- 0x10D: TST R01 "110001" & X"110", -- 0x10E: JZ 0x110 "110000" & X"141", -- 0x10F: JMP 0x141 "001111" & X"000", -- 0x110: TST R00 "110001" & X"113", -- 0x111: JZ 0x113 "110000" & X"141", -- 0x112: JMP 0x141 "000011" & X"800", -- 0x113: MOV R00, 0x80 "000011" & X"001", -- 0x114: MOV R01, 0x00 "001101" & X"0E0", -- 0x115: MOVC (0x0E), R00 "001101" & X"0F1", -- 0x116: MOVC (0x0F), R01 "000011" & X"0BF", -- 0x117: MOV R15, 0x0B "000011" & X"000", -- 0x118: MOV R00, 0x00 "001010" & X"0B1", -- 0x119: MOVC R01, (0x0B) "001111" & X"801", -- 0x11A: CMP R01, 0x80 "111000" & X"122", -- 0x11B: JGE 0x122 "001010" & X"0B1", -- 0x11C: MOVC R01, (0x0B) "001010" & X"0A0", -- 0x11D: MOVC R00, (0x0A) "011111" & X"001", -- 0x11E: SHR R01 "100011" & X"000", -- 0x11F: RORC R00 "010101" & X"01F", -- 0x120: DEC R15 "110010" & X"11E", -- 0x121: JNZ 0x11E "001101" & X"060", -- 0x122: MOVC (0x06), R00 "000011" & X"0BF", -- 0x123: MOV R15, 0x0B "000011" & X"000", -- 0x124: MOV R00, 0x00 "001010" & X"0D1", -- 0x125: MOVC R01, (0x0D) "001111" & X"801", -- 0x126: CMP R01, 0x80 "111000" & X"12E", -- 0x127: JGE 0x12E "001010" & X"0C0", -- 0x128: MOVC R00, (0x0C) "001010" & X"0D1", -- 0x129: MOVC R01, (0x0D) "011111" & X"001", -- 0x12A: SHR R01 "100011" & X"000", -- 0x12B: RORC R00 "010101" & X"01F", -- 0x12C: DEC R15 "110010" & X"12A", -- 0x12D: JNZ 0x12A "001101" & X"070", -- 0x12E: MOVC (0x07), R00 "001010" & X"060", -- 0x12F: MOVC R00, (0x06) "001010" & X"081", -- 0x130: MOVC R01, (0x08) "001111" & X"001", -- 0x131: TST R01 "110001" & X"134", -- 0x132: JZ 0x134 "010101" & X"011", -- 0x133: DEC R01 "001110" & X"010", -- 0x134: CMP R00, R01 "110101" & X"137", -- 0x135: JLT 0x137 "000010" & X"001", -- 0x136: MOV R01, R00 "001101" & X"081", -- 0x137: MOVC (0x08), R01 "001010" & X"070", -- 0x138: MOVC R00, (0x07) "001010" & X"091", -- 0x139: MOVC R01, (0x09) "001111" & X"001", -- 0x13A: TST R01 "110001" & X"13D", -- 0x13B: JZ 0x13D "010101" & X"011", -- 0x13C: DEC R01 "001110" & X"010", -- 0x13D: CMP R00, R01 "110101" & X"140", -- 0x13E: JLT 0x140 "000010" & X"001", -- 0x13F: MOV R01, R00 "001101" & X"091", -- 0x140: MOVC (0x09), R01 "111101" & X"00F", -- 0x141: POP R15 "111101" & X"001", -- 0x142: POP R01 "111101" & X"000", -- 0x143: POP R00 "111110" & X"000", -- 0x144: RET "111100" & X"00F", -- 0x145: PUSH R15 "000011" & X"0AF", -- 0x146: MOV R15, 0x0A "111011" & X"14C", -- 0x147: CALL 0x14C "010101" & X"01F", -- 0x148: DEC R15 "110010" & X"147", -- 0x149: JNZ 0x147 "111101" & X"00F", -- 0x14A: POP R15 "111110" & X"000", -- 0x14B: RET "111100" & X"00F", -- 0x14C: PUSH R15 "000011" & X"0AF", -- 0x14D: MOV R15, 0x0A "111011" & X"153", -- 0x14E: CALL 0x153 "010101" & X"01F", -- 0x14F: DEC R15 "110010" & X"14E", -- 0x150: JNZ 0x14E "111101" & X"00F", -- 0x151: POP R15 "111110" & X"000", -- 0x152: RET "111100" & X"00F", -- 0x153: PUSH R15 "000011" & X"0AF", -- 0x154: MOV R15, 0x0A "111011" & X"15A", -- 0x155: CALL 0x15A "010101" & X"01F", -- 0x156: DEC R15 "110010" & X"155", -- 0x157: JNZ 0x155 "111101" & X"00F", -- 0x158: POP R15 "111110" & X"000", -- 0x159: RET "111100" & X"00F", -- 0x15A: PUSH R15 "000011" & X"0AF", -- 0x15B: MOV R15, 0x0A "111011" & X"161", -- 0x15C: CALL 0x161 "010101" & X"01F", -- 0x15D: DEC R15 "110010" & X"15C", -- 0x15E: JNZ 0x15C "111101" & X"00F", -- 0x15F: POP R15 "111110" & X"000", -- 0x160: RET "111100" & X"00F", -- 0x161: PUSH R15 "000011" & X"0AF", -- 0x162: MOV R15, 0x0A "111011" & X"168", -- 0x163: CALL 0x168 "010101" & X"01F", -- 0x164: DEC R15 "110010" & X"163", -- 0x165: JNZ 0x163 "111101" & X"00F", -- 0x166: POP R15 "111110" & X"000", -- 0x167: RET "111100" & X"00F", -- 0x168: PUSH R15 "000011" & X"63F", -- 0x169: MOV R15, 0x63 "000000" & X"000", -- 0x16A: NOP "000000" & X"000", -- 0x16B: NOP "000000" & X"000", -- 0x16C: NOP "010101" & X"01F", -- 0x16D: DEC R15 "110010" & X"16A", -- 0x16E: JNZ 0x16A "111101" & X"00F", -- 0x16F: POP R15 "111110" & X"000", -- 0x170: RET "111100" & X"00F", -- 0x171: PUSH R15 "000011" & X"09F", -- 0x172: MOV R15, 0x09 "000000" & X"000", -- 0x173: NOP "000000" & X"000", -- 0x174: NOP "000000" & X"000", -- 0x175: NOP "010101" & X"01F", -- 0x176: DEC R15 "110010" & X"173", -- 0x177: JNZ 0x173 "111101" & X"00F", -- 0x178: POP R15 "111110" & X"000", -- 0x179: RET "000011" & X"002", -- 0x17A: MOV R02, 0x00 "000011" & X"030", -- 0x17B: MOV R00, 0x03 "111011" & X"1C6", -- 0x17C: CALL 0x1C6 "111011" & X"153", -- 0x17D: CALL 0x153 "000011" & X"002", -- 0x17E: MOV R02, 0x00 "000011" & X"030", -- 0x17F: MOV R00, 0x03 "111011" & X"1C6", -- 0x180: CALL 0x1C6 "111011" & X"153", -- 0x181: CALL 0x153 "000011" & X"002", -- 0x182: MOV R02, 0x00 "000011" & X"020", -- 0x183: MOV R00, 0x02 "111011" & X"1C6", -- 0x184: CALL 0x1C6 "111011" & X"15A", -- 0x185: CALL 0x15A "000011" & X"280", -- 0x186: MOV R00, 0x28 "111011" & X"197", -- 0x187: CALL 0x197 "000011" & X"0C0", -- 0x188: MOV R00, 0x0C "111011" & X"197", -- 0x189: CALL 0x197 "000011" & X"060", -- 0x18A: MOV R00, 0x06 "111011" & X"197", -- 0x18B: CALL 0x197 "000011" & X"010", -- 0x18C: MOV R00, 0x01 "111011" & X"197", -- 0x18D: CALL 0x197 "111110" & X"000", -- 0x18E: RET "111100" & X"000", -- 0x18F: PUSH R00 "111011" & X"1BA", -- 0x190: CALL 0x1BA "011001" & X"800", -- 0x191: AND R00, 0x80 "110001" & X"195", -- 0x192: JZ 0x195 "111011" & X"171", -- 0x193: CALL 0x171 "110000" & X"190", -- 0x194: JMP 0x190 "111101" & X"000", -- 0x195: POP R00 "111110" & X"000", -- 0x196: RET "111100" & X"002", -- 0x197: PUSH R02 "000011" & X"002", -- 0x198: MOV R02, 0x00 "111011" & X"1B3", -- 0x199: CALL 0x1B3 "111101" & X"002", -- 0x19A: POP R02 "111110" & X"000", -- 0x19B: RET "111100" & X"000", -- 0x19C: PUSH R00 "000100" & X"010", -- 0x19D: MOVX R00, (R01) "010001" & X"011", -- 0x19E: INC R01 "001111" & X"000", -- 0x19F: TST R00 "110001" & X"1A3", -- 0x1A0: JZ 0x1A3 "111011" & X"1AE", -- 0x1A1: CALL 0x1AE "110000" & X"19D", -- 0x1A2: JMP 0x19D "111101" & X"000", -- 0x1A3: POP R00 "111110" & X"000", -- 0x1A4: RET "111100" & X"000", -- 0x1A5: PUSH R00 "001001" & X"010", -- 0x1A6: MOVC R00, (R01) "010001" & X"011", -- 0x1A7: INC R01 "001111" & X"000", -- 0x1A8: TST R00 "110001" & X"1AC", -- 0x1A9: JZ 0x1AC "111011" & X"1AE", -- 0x1AA: CALL 0x1AE "110000" & X"1A6", -- 0x1AB: JMP 0x1A6 "111101" & X"000", -- 0x1AC: POP R00 "111110" & X"000", -- 0x1AD: RET "111100" & X"002", -- 0x1AE: PUSH R02 "000011" & X"402", -- 0x1AF: MOV R02, 0x40 "111011" & X"1B3", -- 0x1B0: CALL 0x1B3 "111101" & X"002", -- 0x1B1: POP R02 "111110" & X"000", -- 0x1B2: RET "111011" & X"18F", -- 0x1B3: CALL 0x18F "111100" & X"000", -- 0x1B4: PUSH R00 "101010" & X"000", -- 0x1B5: SWAP R00 "111011" & X"1C6", -- 0x1B6: CALL 0x1C6 "111101" & X"000", -- 0x1B7: POP R00 "111011" & X"1C6", -- 0x1B8: CALL 0x1C6 "111110" & X"000", -- 0x1B9: RET "111100" & X"002", -- 0x1BA: PUSH R02 "000011" & X"002", -- 0x1BB: MOV R02, 0x00 "111011" & X"1BF", -- 0x1BC: CALL 0x1BF "111101" & X"002", -- 0x1BD: POP R02 "111110" & X"000", -- 0x1BE: RET "111011" & X"1D9", -- 0x1BF: CALL 0x1D9 "101010" & X"000", -- 0x1C0: SWAP R00 "111100" & X"000", -- 0x1C1: PUSH R00 "111011" & X"1D9", -- 0x1C2: CALL 0x1D9 "111101" & X"002", -- 0x1C3: POP R02 "011010" & X"020", -- 0x1C4: OR R00, R02 "111110" & X"000", -- 0x1C5: RET "111100" & X"001", -- 0x1C6: PUSH R01 "011001" & X"0F0", -- 0x1C7: AND R00, 0x0F "000010" & X"001", -- 0x1C8: MOV R01, R00 "011010" & X"021", -- 0x1C9: OR R01, R02 "100100" & X"081", -- 0x1CA: XOUT (0x08), R01 "111011" & X"171", -- 0x1CB: CALL 0x171 "000010" & X"001", -- 0x1CC: MOV R01, R00 "011010" & X"021", -- 0x1CD: OR R01, R02 "011011" & X"801", -- 0x1CE: OR R01, 0x80 "100100" & X"081", -- 0x1CF: XOUT (0x08), R01 "111011" & X"171", -- 0x1D0: CALL 0x171 "000010" & X"001", -- 0x1D1: MOV R01, R00 "011010" & X"021", -- 0x1D2: OR R01, R02 "100100" & X"081", -- 0x1D3: XOUT (0x08), R01 "111011" & X"171", -- 0x1D4: CALL 0x171 "011011" & X"201", -- 0x1D5: OR R01, 0x20 "100100" & X"081", -- 0x1D6: XOUT (0x08), R01 "111101" & X"001", -- 0x1D7: POP R01 "111110" & X"000", -- 0x1D8: RET "111100" & X"001", -- 0x1D9: PUSH R01 "000011" & X"201", -- 0x1DA: MOV R01, 0x20 "011010" & X"021", -- 0x1DB: OR R01, R02 "100100" & X"081", -- 0x1DC: XOUT (0x08), R01 "111011" & X"171", -- 0x1DD: CALL 0x171 "000011" & X"201", -- 0x1DE: MOV R01, 0x20 "011010" & X"021", -- 0x1DF: OR R01, R02 "011011" & X"801", -- 0x1E0: OR R01, 0x80 "100100" & X"081", -- 0x1E1: XOUT (0x08), R01 "111011" & X"171", -- 0x1E2: CALL 0x171 "101000" & X"080", -- 0x1E3: XIN R00, (0x08) "011001" & X"0F0", -- 0x1E4: AND R00, 0x0F "000011" & X"201", -- 0x1E5: MOV R01, 0x20 "011010" & X"021", -- 0x1E6: OR R01, R02 "100100" & X"081", -- 0x1E7: XOUT (0x08), R01 "111011" & X"171", -- 0x1E8: CALL 0x171 "111101" & X"001", -- 0x1E9: POP R01 "111110" & X"000", -- 0x1EA: RET "011001" & X"0F0", -- 0x1EB: AND R00, 0x0F "001111" & X"0A0", -- 0x1EC: CMP R00, 0x0A "110101" & X"1EF", -- 0x1ED: JLT 0x1EF "010001" & X"070", -- 0x1EE: ADD R00, 0x07 "010001" & X"300", -- 0x1EF: ADD R00, 0x30 "111110" & X"000", -- 0x1F0: RET "111100" & X"000", -- 0x1F1: PUSH R00 "111011" & X"1EB", -- 0x1F2: CALL 0x1EB "000010" & X"001", -- 0x1F3: MOV R01, R00 "111101" & X"000", -- 0x1F4: POP R00 "101010" & X"000", -- 0x1F5: SWAP R00 "111011" & X"1EB", -- 0x1F6: CALL 0x1EB "111110" & X"000" -- 0x1F7: RET ); begin PROM_READ: process(clk, ce) begin if rising_edge(clk) and ce = '1' then dout <= imem_rom(to_integer(addr)); end if; end process; end test;