------------------------------------------------------------------------- -- 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 program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program 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 General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program. If not, see . -- -- 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 500) of inst_t; -- Assembled from test.jsm constant imem_rom : imem_rom_t := ( "110000" & X"002", -- 0x000: JMP 0x002 "110000" & X"0EA", -- 0x001: JMP 0x0EA "000011" & X"000", -- 0x002: MOV R00, 0x00 "000011" & X"021", -- 0x003: MOV R01, 0x02 "001101" & X"040", -- 0x004: MOVC (0x04), R00 "001101" & X"051", -- 0x005: MOVC (0x05), R01 "000011" & X"000", -- 0x006: MOV R00, 0x00 "100100" & X"000", -- 0x007: XOUT (0x00), R00 "000011" & X"FF0", -- 0x008: MOV R00, 0xFF "100100" & X"110", -- 0x009: XOUT (0x11), R00 "000011" & X"3B0", -- 0x00A: MOV R00, 0x3B "100100" & X"120", -- 0x00B: XOUT (0x12), R00 "000011" & X"9C0", -- 0x00C: MOV R00, 0x9C "100100" & X"130", -- 0x00D: XOUT (0x13), R00 "000011" & X"010", -- 0x00E: MOV R00, 0x01 "100100" & X"140", -- 0x00F: XOUT (0x14), R00 "000011" & X"000", -- 0x010: MOV R00, 0x00 "001101" & X"080", -- 0x011: MOVC (0x08), R00 "001101" & X"090", -- 0x012: MOVC (0x09), R00 "000011" & X"000", -- 0x013: MOV R00, 0x00 "001101" & X"060", -- 0x014: MOVC (0x06), R00 "000011" & X"040", -- 0x015: MOV R00, 0x04 "001101" & X"070", -- 0x016: MOVC (0x07), R00 "000011" & X"0A0", -- 0x017: MOV R00, 0x0A "001101" & X"0A0", -- 0x018: MOVC (0x0A), R00 "000011" & X"0C0", -- 0x019: MOV R00, 0x0C "001101" & X"0B0", -- 0x01A: MOVC (0x0B), R00 "111011" & X"177", -- 0x01B: CALL 0x177 "000011" & X"010", -- 0x01C: MOV R00, 0x01 "111011" & X"194", -- 0x01D: CALL 0x194 "000011" & X"001", -- 0x01E: MOV R01, 0x00 "111011" & X"199", -- 0x01F: CALL 0x199 "000011" & X"C00", -- 0x020: MOV R00, 0xC0 "111011" & X"194", -- 0x021: CALL 0x194 "000011" & X"111", -- 0x022: MOV R01, 0x11 "111011" & X"199", -- 0x023: CALL 0x199 "111011" & X"142", -- 0x024: CALL 0x142 "101000" & X"A00", -- 0x025: XIN R00, (0xA0) "011001" & X"010", -- 0x026: AND R00, 0x01 "110001" & X"025", -- 0x027: JZ 0x025 "000011" & X"000", -- 0x028: MOV R00, 0x00 "000011" & X"801", -- 0x029: MOV R01, 0x80 "000011" & X"002", -- 0x02A: MOV R02, 0x00 "000011" & X"003", -- 0x02B: MOV R03, 0x00 "111011" & X"123", -- 0x02C: CALL 0x123 "001101" & X"000", -- 0x02D: MOVC (0x00), R00 "001101" & X"011", -- 0x02E: MOVC (0x01), R01 "001101" & X"022", -- 0x02F: MOVC (0x02), R02 "001101" & X"033", -- 0x030: MOVC (0x03), R03 "000011" & X"000", -- 0x031: MOV R00, 0x00 "000011" & X"A61", -- 0x032: MOV R01, 0xA6 "000011" & X"002", -- 0x033: MOV R02, 0x00 "000011" & X"003", -- 0x034: MOV R03, 0x00 "111011" & X"123", -- 0x035: CALL 0x123 "011001" & X"0F2", -- 0x036: AND R02, 0x0F "001111" & X"0F2", -- 0x037: CMP R02, 0x0F "111010" & X"031", -- 0x038: JNE 0x031 "000011" & X"09F", -- 0x039: MOV R15, 0x09 "000011" & X"A37", -- 0x03A: MOV R07, 0xA3 "000011" & X"B58", -- 0x03B: MOV R08, 0xB5 "000100" & X"070", -- 0x03C: MOVX R00, (R07) "010001" & X"017", -- 0x03D: INC R07 "000100" & X"071", -- 0x03E: MOVX R01, (R07) "010001" & X"017", -- 0x03F: INC R07 "000100" & X"082", -- 0x040: MOVX R02, (R08) "010001" & X"018", -- 0x041: INC R08 "000100" & X"083", -- 0x042: MOVX R03, (R08) "010001" & X"018", -- 0x043: INC R08 "111011" & X"123", -- 0x044: CALL 0x123 "010101" & X"01F", -- 0x045: DEC R15 "110010" & X"03C", -- 0x046: JNZ 0x03C "111011" & X"0A5", -- 0x047: CALL 0x0A5 "000011" & X"FF0", -- 0x048: MOV R00, 0xFF "100100" & X"0E0", -- 0x049: XOUT (0x0E), R00 "000011" & X"400", -- 0x04A: MOV R00, 0x40 "100100" & X"0D0", -- 0x04B: XOUT (0x0D), R00 "000011" & X"FF0", -- 0x04C: MOV R00, 0xFF "100100" & X"100", -- 0x04D: XOUT (0x10), R00 "000011" & X"400", -- 0x04E: MOV R00, 0x40 "100100" & X"0F0", -- 0x04F: XOUT (0x0F), R00 "000011" & X"070", -- 0x050: MOV R00, 0x07 "100110" & X"030", -- 0x051: COUT (0x03), R00 "001010" & X"080", -- 0x052: MOVC R00, (0x08) "001111" & X"000", -- 0x053: TST R00 "110010" & X"057", -- 0x054: JNZ 0x057 "000011" & X"001", -- 0x055: MOV R01, 0x00 "001101" & X"0C1", -- 0x056: MOVC (0x0C), R01 "011001" & X"100", -- 0x057: AND R00, 0x10 "110001" & X"091", -- 0x058: JZ 0x091 "001010" & X"080", -- 0x059: MOVC R00, (0x08) "001111" & X"140", -- 0x05A: CMP R00, 0x14 "111001" & X"063", -- 0x05B: JEQ 0x063 "001111" & X"110", -- 0x05C: CMP R00, 0x11 "111001" & X"07A", -- 0x05D: JEQ 0x07A "001010" & X"0C1", -- 0x05E: MOVC R01, (0x0C) "001111" & X"001", -- 0x05F: TST R01 "110010" & X"052", -- 0x060: JNZ 0x052 "111011" & X"0A5", -- 0x061: CALL 0x0A5 "110000" & X"052", -- 0x062: JMP 0x052 "001010" & X"0A0", -- 0x063: MOVC R00, (0x0A) "001111" & X"000", -- 0x064: CMP R00, 0x00 "111001" & X"052", -- 0x065: JEQ 0x052 "010101" & X"010", -- 0x066: DEC R00 "001101" & X"0A0", -- 0x067: MOVC (0x0A), R00 "111011" & X"0D6", -- 0x068: CALL 0x0D6 "000011" & X"800", -- 0x069: MOV R00, 0x80 "111011" & X"194", -- 0x06A: CALL 0x194 "000011" & X"921", -- 0x06B: MOV R01, 0x92 "111011" & X"199", -- 0x06C: CALL 0x199 "000011" & X"800", -- 0x06D: MOV R00, 0x80 "111011" & X"194", -- 0x06E: CALL 0x194 "000011" & X"881", -- 0x06F: MOV R01, 0x88 "111011" & X"199", -- 0x070: CALL 0x199 "000011" & X"1F0", -- 0x071: MOV R00, 0x1F "001010" & X"0A1", -- 0x072: MOVC R01, (0x0A) "010100" & X"010", -- 0x073: SUB R00, R01 "111011" & X"13D", -- 0x074: CALL 0x13D "111011" & X"149", -- 0x075: CALL 0x149 "111011" & X"149", -- 0x076: CALL 0x149 "000011" & X"010", -- 0x077: MOV R00, 0x01 "001101" & X"0C0", -- 0x078: MOVC (0x0C), R00 "110000" & X"052", -- 0x079: JMP 0x052 "001010" & X"0A0", -- 0x07A: MOVC R00, (0x0A) "001111" & X"1F0", -- 0x07B: CMP R00, 0x1F "111001" & X"052", -- 0x07C: JEQ 0x052 "010001" & X"010", -- 0x07D: INC R00 "001101" & X"0A0", -- 0x07E: MOVC (0x0A), R00 "111011" & X"0A5", -- 0x07F: CALL 0x0A5 "000011" & X"800", -- 0x080: MOV R00, 0x80 "111011" & X"194", -- 0x081: CALL 0x194 "000011" & X"921", -- 0x082: MOV R01, 0x92 "111011" & X"199", -- 0x083: CALL 0x199 "000011" & X"800", -- 0x084: MOV R00, 0x80 "111011" & X"194", -- 0x085: CALL 0x194 "000011" & X"881", -- 0x086: MOV R01, 0x88 "111011" & X"199", -- 0x087: CALL 0x199 "000011" & X"1F0", -- 0x088: MOV R00, 0x1F "001010" & X"0A1", -- 0x089: MOVC R01, (0x0A) "010100" & X"010", -- 0x08A: SUB R00, R01 "111011" & X"13D", -- 0x08B: CALL 0x13D "111011" & X"149", -- 0x08C: CALL 0x149 "111011" & X"149", -- 0x08D: CALL 0x149 "000011" & X"010", -- 0x08E: MOV R00, 0x01 "001101" & X"0C0", -- 0x08F: MOVC (0x0C), R00 "110000" & X"052", -- 0x090: JMP 0x052 "001010" & X"080", -- 0x091: MOVC R00, (0x08) "011001" & X"090", -- 0x092: AND R00, 0x09 "110001" & X"09B", -- 0x093: JZ 0x09B "000011" & X"011", -- 0x094: MOV R01, 0x01 "011001" & X"010", -- 0x095: AND R00, 0x01 "111010" & X"098", -- 0x096: JNE 0x098 "000011" & X"001", -- 0x097: MOV R01, 0x00 "100100" & X"021", -- 0x098: XOUT (0x02), R01 "111011" & X"0B3", -- 0x099: CALL 0x0B3 "110000" & X"052", -- 0x09A: JMP 0x052 "001010" & X"080", -- 0x09B: MOVC R00, (0x08) "011001" & X"060", -- 0x09C: AND R00, 0x06 "110001" & X"0A4", -- 0x09D: JZ 0x0A4 "000011" & X"011", -- 0x09E: MOV R01, 0x01 "011001" & X"040", -- 0x09F: AND R00, 0x04 "111010" & X"0A2", -- 0x0A0: JNE 0x0A2 "000011" & X"001", -- 0x0A1: MOV R01, 0x00 "100100" & X"021", -- 0x0A2: XOUT (0x02), R01 "111011" & X"0C5", -- 0x0A3: CALL 0x0C5 "110000" & X"052", -- 0x0A4: JMP 0x052 "000011" & X"000", -- 0x0A5: MOV R00, 0x00 "100100" & X"010", -- 0x0A6: XOUT (0x01), R00 "000011" & X"060", -- 0x0A7: MOV R00, 0x06 "100100" & X"000", -- 0x0A8: XOUT (0x00), R00 "111011" & X"0D6", -- 0x0A9: CALL 0x0D6 "000011" & X"800", -- 0x0AA: MOV R00, 0x80 "111011" & X"194", -- 0x0AB: CALL 0x194 "000011" & X"221", -- 0x0AC: MOV R01, 0x22 "111011" & X"199", -- 0x0AD: CALL 0x199 "000011" & X"C00", -- 0x0AE: MOV R00, 0xC0 "111011" & X"194", -- 0x0AF: CALL 0x194 "000011" & X"331", -- 0x0B0: MOV R01, 0x33 "111011" & X"199", -- 0x0B1: CALL 0x199 "111110" & X"000", -- 0x0B2: RET "000011" & X"010", -- 0x0B3: MOV R00, 0x01 "100100" & X"010", -- 0x0B4: XOUT (0x01), R00 "000011" & X"080", -- 0x0B5: MOV R00, 0x08 "100100" & X"000", -- 0x0B6: XOUT (0x00), R00 "111011" & X"0E0", -- 0x0B7: CALL 0x0E0 "000011" & X"800", -- 0x0B8: MOV R00, 0x80 "111011" & X"194", -- 0x0B9: CALL 0x194 "000011" & X"441", -- 0x0BA: MOV R01, 0x44 "111011" & X"199", -- 0x0BB: CALL 0x199 "000011" & X"661", -- 0x0BC: MOV R01, 0x66 "101000" & X"020", -- 0x0BD: XIN R00, (0x02) "011001" & X"010", -- 0x0BE: AND R00, 0x01 "110010" & X"0C1", -- 0x0BF: JNZ 0x0C1 "000011" & X"771", -- 0x0C0: MOV R01, 0x77 "000011" & X"C00", -- 0x0C1: MOV R00, 0xC0 "111011" & X"194", -- 0x0C2: CALL 0x194 "111011" & X"199", -- 0x0C3: CALL 0x199 "111110" & X"000", -- 0x0C4: RET "000011" & X"020", -- 0x0C5: MOV R00, 0x02 "100100" & X"010", -- 0x0C6: XOUT (0x01), R00 "000011" & X"010", -- 0x0C7: MOV R00, 0x01 "100100" & X"000", -- 0x0C8: XOUT (0x00), R00 "111011" & X"0E0", -- 0x0C9: CALL 0x0E0 "000011" & X"800", -- 0x0CA: MOV R00, 0x80 "111011" & X"194", -- 0x0CB: CALL 0x194 "000011" & X"551", -- 0x0CC: MOV R01, 0x55 "111011" & X"199", -- 0x0CD: CALL 0x199 "101000" & X"020", -- 0x0CE: XIN R00, (0x02) "011001" & X"010", -- 0x0CF: AND R00, 0x01 "110010" & X"0D2", -- 0x0D0: JNZ 0x0D2 "000011" & X"771", -- 0x0D1: MOV R01, 0x77 "000011" & X"C00", -- 0x0D2: MOV R00, 0xC0 "111011" & X"194", -- 0x0D3: CALL 0x194 "111011" & X"199", -- 0x0D4: CALL 0x199 "111110" & X"000", -- 0x0D5: RET "000011" & X"000", -- 0x0D6: MOV R00, 0x00 "000011" & X"181", -- 0x0D7: MOV R01, 0x18 "001010" & X"0A2", -- 0x0D8: MOVC R02, (0x0A) "001010" & X"0A3", -- 0x0D9: MOVC R03, (0x0A) "111011" & X"123", -- 0x0DA: CALL 0x123 "001101" & X"000", -- 0x0DB: MOVC (0x00), R00 "001101" & X"011", -- 0x0DC: MOVC (0x01), R01 "001101" & X"022", -- 0x0DD: MOVC (0x02), R02 "001101" & X"033", -- 0x0DE: MOVC (0x03), R03 "111110" & X"000", -- 0x0DF: RET "000011" & X"000", -- 0x0E0: MOV R00, 0x00 "000011" & X"181", -- 0x0E1: MOV R01, 0x18 "001010" & X"0B2", -- 0x0E2: MOVC R02, (0x0B) "001010" & X"0B3", -- 0x0E3: MOVC R03, (0x0B) "111011" & X"123", -- 0x0E4: CALL 0x123 "001101" & X"000", -- 0x0E5: MOVC (0x00), R00 "001101" & X"011", -- 0x0E6: MOVC (0x01), R01 "001101" & X"022", -- 0x0E7: MOVC (0x02), R02 "001101" & X"033", -- 0x0E8: MOVC (0x03), R03 "111110" & X"000", -- 0x0E9: RET "111100" & X"000", -- 0x0EA: PUSH R00 "111100" & X"001", -- 0x0EB: PUSH R01 "111100" & X"002", -- 0x0EC: PUSH R02 "111100" & X"003", -- 0x0ED: PUSH R03 "001010" & X"040", -- 0x0EE: MOVC R00, (0x04) "001010" & X"051", -- 0x0EF: MOVC R01, (0x05) "010101" & X"010", -- 0x0F0: DEC R00 "010111" & X"001", -- 0x0F1: SUBC R01, 0x00 "001101" & X"040", -- 0x0F2: MOVC (0x04), R00 "001101" & X"051", -- 0x0F3: MOVC (0x05), R01 "001111" & X"001", -- 0x0F4: TST R01 "110010" & X"108", -- 0x0F5: JNZ 0x108 "001111" & X"000", -- 0x0F6: TST R00 "110010" & X"108", -- 0x0F7: JNZ 0x108 "000011" & X"000", -- 0x0F8: MOV R00, 0x00 "000011" & X"021", -- 0x0F9: MOV R01, 0x02 "001101" & X"040", -- 0x0FA: MOVC (0x04), R00 "001101" & X"051", -- 0x0FB: MOVC (0x05), R01 "101000" & X"110", -- 0x0FC: XIN R00, (0x11) "101000" & X"121", -- 0x0FD: XIN R01, (0x12) "101000" & X"132", -- 0x0FE: XIN R02, (0x13) "101000" & X"143", -- 0x0FF: XIN R03, (0x14) "010001" & X"010", -- 0x100: INC R00 "010011" & X"001", -- 0x101: ADDC R01, 0x00 "010011" & X"002", -- 0x102: ADDC R02, 0x00 "010011" & X"003", -- 0x103: ADDC R03, 0x00 "100100" & X"110", -- 0x104: XOUT (0x11), R00 "100100" & X"121", -- 0x105: XOUT (0x12), R01 "100100" & X"132", -- 0x106: XOUT (0x13), R02 "100100" & X"143", -- 0x107: XOUT (0x14), R03 "101000" & X"800", -- 0x108: XIN R00, (0x80) "001010" & X"071", -- 0x109: MOVC R01, (0x07) "001010" & X"062", -- 0x10A: MOVC R02, (0x06) "001111" & X"001", -- 0x10B: TST R01 "110010" & X"10F", -- 0x10C: JNZ 0x10F "001111" & X"002", -- 0x10D: TST R02 "110001" & X"119", -- 0x10E: JZ 0x119 "010101" & X"012", -- 0x10F: DEC R02 "010111" & X"001", -- 0x110: SUBC R01, 0x00 "001101" & X"071", -- 0x111: MOVC (0x07), R01 "001101" & X"062", -- 0x112: MOVC (0x06), R02 "001010" & X"091", -- 0x113: MOVC R01, (0x09) "101000" & X"800", -- 0x114: XIN R00, (0x80) "001101" & X"090", -- 0x115: MOVC (0x09), R00 "001110" & X"010", -- 0x116: CMP R00, R01 "111001" & X"11E", -- 0x117: JEQ 0x11E "110000" & X"11A", -- 0x118: JMP 0x11A "001101" & X"080", -- 0x119: MOVC (0x08), R00 "000011" & X"041", -- 0x11A: MOV R01, 0x04 "001101" & X"071", -- 0x11B: MOVC (0x07), R01 "000011" & X"001", -- 0x11C: MOV R01, 0x00 "001101" & X"061", -- 0x11D: MOVC (0x06), R01 "111101" & X"003", -- 0x11E: POP R03 "111101" & X"002", -- 0x11F: POP R02 "111101" & X"001", -- 0x120: POP R01 "111101" & X"000", -- 0x121: POP R00 "111111" & X"000", -- 0x122: RETI "111011" & X"131", -- 0x123: CALL 0x131 "100100" & X"051", -- 0x124: XOUT (0x05), R01 "100100" & X"040", -- 0x125: XOUT (0x04), R00 "100100" & X"073", -- 0x126: XOUT (0x07), R03 "100100" & X"062", -- 0x127: XOUT (0x06), R02 "011001" & X"801", -- 0x128: AND R01, 0x80 "110010" & X"12B", -- 0x129: JNZ 0x12B "111110" & X"000", -- 0x12A: RET "111011" & X"137", -- 0x12B: CALL 0x137 "101000" & X"051", -- 0x12C: XIN R01, (0x05) "101000" & X"040", -- 0x12D: XIN R00, (0x04) "101000" & X"073", -- 0x12E: XIN R03, (0x07) "101000" & X"062", -- 0x12F: XIN R02, (0x06) "111110" & X"000", -- 0x130: RET "111100" & X"000", -- 0x131: PUSH R00 "101000" & X"A00", -- 0x132: XIN R00, (0xA0) "011001" & X"020", -- 0x133: AND R00, 0x02 "110001" & X"132", -- 0x134: JZ 0x132 "111101" & X"000", -- 0x135: POP R00 "111110" & X"000", -- 0x136: RET "111100" & X"000", -- 0x137: PUSH R00 "101000" & X"A00", -- 0x138: XIN R00, (0xA0) "011001" & X"040", -- 0x139: AND R00, 0x04 "110001" & X"138", -- 0x13A: JZ 0x138 "111101" & X"000", -- 0x13B: POP R00 "111110" & X"000", -- 0x13C: RET "111011" & X"1EE", -- 0x13D: CALL 0x1EE "111011" & X"1AB", -- 0x13E: CALL 0x1AB "000010" & X"010", -- 0x13F: MOV R00, R01 "111011" & X"1AB", -- 0x140: CALL 0x1AB "111110" & X"000", -- 0x141: RET "111100" & X"00F", -- 0x142: PUSH R15 "000011" & X"0AF", -- 0x143: MOV R15, 0x0A "111011" & X"149", -- 0x144: CALL 0x149 "010101" & X"01F", -- 0x145: DEC R15 "110010" & X"144", -- 0x146: JNZ 0x144 "111101" & X"00F", -- 0x147: POP R15 "111110" & X"000", -- 0x148: RET "111100" & X"00F", -- 0x149: PUSH R15 "000011" & X"0AF", -- 0x14A: MOV R15, 0x0A "111011" & X"150", -- 0x14B: CALL 0x150 "010101" & X"01F", -- 0x14C: DEC R15 "110010" & X"14B", -- 0x14D: JNZ 0x14B "111101" & X"00F", -- 0x14E: POP R15 "111110" & X"000", -- 0x14F: RET "111100" & X"00F", -- 0x150: PUSH R15 "000011" & X"0AF", -- 0x151: MOV R15, 0x0A "111011" & X"157", -- 0x152: CALL 0x157 "010101" & X"01F", -- 0x153: DEC R15 "110010" & X"152", -- 0x154: JNZ 0x152 "111101" & X"00F", -- 0x155: POP R15 "111110" & X"000", -- 0x156: RET "111100" & X"00F", -- 0x157: PUSH R15 "000011" & X"0AF", -- 0x158: MOV R15, 0x0A "111011" & X"15E", -- 0x159: CALL 0x15E "010101" & X"01F", -- 0x15A: DEC R15 "110010" & X"159", -- 0x15B: JNZ 0x159 "111101" & X"00F", -- 0x15C: POP R15 "111110" & X"000", -- 0x15D: RET "111100" & X"00F", -- 0x15E: PUSH R15 "000011" & X"0AF", -- 0x15F: MOV R15, 0x0A "111011" & X"165", -- 0x160: CALL 0x165 "010101" & X"01F", -- 0x161: DEC R15 "110010" & X"160", -- 0x162: JNZ 0x160 "111101" & X"00F", -- 0x163: POP R15 "111110" & X"000", -- 0x164: RET "111100" & X"00F", -- 0x165: PUSH R15 "000011" & X"63F", -- 0x166: MOV R15, 0x63 "000000" & X"000", -- 0x167: NOP "000000" & X"000", -- 0x168: NOP "000000" & X"000", -- 0x169: NOP "010101" & X"01F", -- 0x16A: DEC R15 "110010" & X"167", -- 0x16B: JNZ 0x167 "111101" & X"00F", -- 0x16C: POP R15 "111110" & X"000", -- 0x16D: RET "111100" & X"00F", -- 0x16E: PUSH R15 "000011" & X"09F", -- 0x16F: MOV R15, 0x09 "000000" & X"000", -- 0x170: NOP "000000" & X"000", -- 0x171: NOP "000000" & X"000", -- 0x172: NOP "010101" & X"01F", -- 0x173: DEC R15 "110010" & X"170", -- 0x174: JNZ 0x170 "111101" & X"00F", -- 0x175: POP R15 "111110" & X"000", -- 0x176: RET "000011" & X"002", -- 0x177: MOV R02, 0x00 "000011" & X"030", -- 0x178: MOV R00, 0x03 "111011" & X"1C3", -- 0x179: CALL 0x1C3 "111011" & X"150", -- 0x17A: CALL 0x150 "000011" & X"002", -- 0x17B: MOV R02, 0x00 "000011" & X"030", -- 0x17C: MOV R00, 0x03 "111011" & X"1C3", -- 0x17D: CALL 0x1C3 "111011" & X"150", -- 0x17E: CALL 0x150 "000011" & X"002", -- 0x17F: MOV R02, 0x00 "000011" & X"020", -- 0x180: MOV R00, 0x02 "111011" & X"1C3", -- 0x181: CALL 0x1C3 "111011" & X"157", -- 0x182: CALL 0x157 "000011" & X"280", -- 0x183: MOV R00, 0x28 "111011" & X"194", -- 0x184: CALL 0x194 "000011" & X"0C0", -- 0x185: MOV R00, 0x0C "111011" & X"194", -- 0x186: CALL 0x194 "000011" & X"060", -- 0x187: MOV R00, 0x06 "111011" & X"194", -- 0x188: CALL 0x194 "000011" & X"010", -- 0x189: MOV R00, 0x01 "111011" & X"194", -- 0x18A: CALL 0x194 "111110" & X"000", -- 0x18B: RET "111100" & X"000", -- 0x18C: PUSH R00 "111011" & X"1B7", -- 0x18D: CALL 0x1B7 "011001" & X"800", -- 0x18E: AND R00, 0x80 "110001" & X"192", -- 0x18F: JZ 0x192 "111011" & X"16E", -- 0x190: CALL 0x16E "110000" & X"18D", -- 0x191: JMP 0x18D "111101" & X"000", -- 0x192: POP R00 "111110" & X"000", -- 0x193: RET "111100" & X"002", -- 0x194: PUSH R02 "000011" & X"002", -- 0x195: MOV R02, 0x00 "111011" & X"1B0", -- 0x196: CALL 0x1B0 "111101" & X"002", -- 0x197: POP R02 "111110" & X"000", -- 0x198: RET "111100" & X"000", -- 0x199: PUSH R00 "000100" & X"010", -- 0x19A: MOVX R00, (R01) "010001" & X"011", -- 0x19B: INC R01 "001111" & X"000", -- 0x19C: TST R00 "110001" & X"1A0", -- 0x19D: JZ 0x1A0 "111011" & X"1AB", -- 0x19E: CALL 0x1AB "110000" & X"19A", -- 0x19F: JMP 0x19A "111101" & X"000", -- 0x1A0: POP R00 "111110" & X"000", -- 0x1A1: RET "111100" & X"000", -- 0x1A2: PUSH R00 "001001" & X"010", -- 0x1A3: MOVC R00, (R01) "010001" & X"011", -- 0x1A4: INC R01 "001111" & X"000", -- 0x1A5: TST R00 "110001" & X"1A9", -- 0x1A6: JZ 0x1A9 "111011" & X"1AB", -- 0x1A7: CALL 0x1AB "110000" & X"1A3", -- 0x1A8: JMP 0x1A3 "111101" & X"000", -- 0x1A9: POP R00 "111110" & X"000", -- 0x1AA: RET "111100" & X"002", -- 0x1AB: PUSH R02 "000011" & X"402", -- 0x1AC: MOV R02, 0x40 "111011" & X"1B0", -- 0x1AD: CALL 0x1B0 "111101" & X"002", -- 0x1AE: POP R02 "111110" & X"000", -- 0x1AF: RET "111011" & X"18C", -- 0x1B0: CALL 0x18C "111100" & X"000", -- 0x1B1: PUSH R00 "101010" & X"000", -- 0x1B2: SWAP R00 "111011" & X"1C3", -- 0x1B3: CALL 0x1C3 "111101" & X"000", -- 0x1B4: POP R00 "111011" & X"1C3", -- 0x1B5: CALL 0x1C3 "111110" & X"000", -- 0x1B6: RET "111100" & X"002", -- 0x1B7: PUSH R02 "000011" & X"002", -- 0x1B8: MOV R02, 0x00 "111011" & X"1BC", -- 0x1B9: CALL 0x1BC "111101" & X"002", -- 0x1BA: POP R02 "111110" & X"000", -- 0x1BB: RET "111011" & X"1D6", -- 0x1BC: CALL 0x1D6 "101010" & X"000", -- 0x1BD: SWAP R00 "111100" & X"000", -- 0x1BE: PUSH R00 "111011" & X"1D6", -- 0x1BF: CALL 0x1D6 "111101" & X"002", -- 0x1C0: POP R02 "011010" & X"020", -- 0x1C1: OR R00, R02 "111110" & X"000", -- 0x1C2: RET "111100" & X"001", -- 0x1C3: PUSH R01 "011001" & X"0F0", -- 0x1C4: AND R00, 0x0F "000010" & X"001", -- 0x1C5: MOV R01, R00 "011010" & X"021", -- 0x1C6: OR R01, R02 "100100" & X"081", -- 0x1C7: XOUT (0x08), R01 "111011" & X"16E", -- 0x1C8: CALL 0x16E "000010" & X"001", -- 0x1C9: MOV R01, R00 "011010" & X"021", -- 0x1CA: OR R01, R02 "011011" & X"801", -- 0x1CB: OR R01, 0x80 "100100" & X"081", -- 0x1CC: XOUT (0x08), R01 "111011" & X"16E", -- 0x1CD: CALL 0x16E "000010" & X"001", -- 0x1CE: MOV R01, R00 "011010" & X"021", -- 0x1CF: OR R01, R02 "100100" & X"081", -- 0x1D0: XOUT (0x08), R01 "111011" & X"16E", -- 0x1D1: CALL 0x16E "011011" & X"201", -- 0x1D2: OR R01, 0x20 "100100" & X"081", -- 0x1D3: XOUT (0x08), R01 "111101" & X"001", -- 0x1D4: POP R01 "111110" & X"000", -- 0x1D5: RET "111100" & X"001", -- 0x1D6: PUSH R01 "000011" & X"201", -- 0x1D7: MOV R01, 0x20 "011010" & X"021", -- 0x1D8: OR R01, R02 "100100" & X"081", -- 0x1D9: XOUT (0x08), R01 "111011" & X"16E", -- 0x1DA: CALL 0x16E "000011" & X"201", -- 0x1DB: MOV R01, 0x20 "011010" & X"021", -- 0x1DC: OR R01, R02 "011011" & X"801", -- 0x1DD: OR R01, 0x80 "100100" & X"081", -- 0x1DE: XOUT (0x08), R01 "111011" & X"16E", -- 0x1DF: CALL 0x16E "101000" & X"080", -- 0x1E0: XIN R00, (0x08) "011001" & X"0F0", -- 0x1E1: AND R00, 0x0F "000011" & X"201", -- 0x1E2: MOV R01, 0x20 "011010" & X"021", -- 0x1E3: OR R01, R02 "100100" & X"081", -- 0x1E4: XOUT (0x08), R01 "111011" & X"16E", -- 0x1E5: CALL 0x16E "111101" & X"001", -- 0x1E6: POP R01 "111110" & X"000", -- 0x1E7: RET "011001" & X"0F0", -- 0x1E8: AND R00, 0x0F "001111" & X"0A0", -- 0x1E9: CMP R00, 0x0A "110101" & X"1EC", -- 0x1EA: JLT 0x1EC "010001" & X"070", -- 0x1EB: ADD R00, 0x07 "010001" & X"300", -- 0x1EC: ADD R00, 0x30 "111110" & X"000", -- 0x1ED: RET "111100" & X"000", -- 0x1EE: PUSH R00 "111011" & X"1E8", -- 0x1EF: CALL 0x1E8 "000010" & X"001", -- 0x1F0: MOV R01, R00 "111101" & X"000", -- 0x1F1: POP R00 "101010" & X"000", -- 0x1F2: SWAP R00 "111011" & X"1E8", -- 0x1F3: CALL 0x1E8 "111110" & X"000" -- 0x1F4: 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;