git-svn-id: http://moon:8086/svn/vhdl/trunk@1411 cc03376c-175c-47c8-b038-4cd826a8556b
567 lines
23 KiB
VHDL
567 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 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;
|
|
|