Files
vhdl/projects/messe_demo/src/test_irom.vhdl
T
jens 73cfd45401 - added
git-svn-id: http://moon:8086/svn/vhdl/trunk@1423 cc03376c-175c-47c8-b038-4cd826a8556b
2021-03-21 11:31:55 +00:00

563 lines
23 KiB
VHDL

-------------------------------------------------------------------------
-- 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 <http://www.gnu.org/licenses/>.
--
-- 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;