Files
vhdl/projects/cpu/src/systest/sdr_test_irom.vhdl
T
jens ea60299d26 - added
git-svn-id: http://moon:8086/svn/vhdl/trunk@1414 cc03376c-175c-47c8-b038-4cd826a8556b
2021-03-21 10:47:01 +00:00

406 lines
16 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 sdr_test OF irom IS
type imem_rom_t is array (0 to 342) of inst_t;
-- Assembled from sdr_test.jsm
constant imem_rom : imem_rom_t :=
(
"110000" & X"002", -- 0x000: JMP 0x002
"111111" & X"000", -- 0x001: RETI
"111011" & X"0B1", -- 0x002: CALL 0x0B1
"000011" & X"000", -- 0x003: MOV R00, 0x00
"100100" & X"010", -- 0x004: XOUT (0x01), R00
"000011" & X"010", -- 0x005: MOV R00, 0x01
"111011" & X"0CE", -- 0x006: CALL 0x0CE
"101000" & X"070", -- 0x007: XIN R00, (0x07)
"100100" & X"010", -- 0x008: XOUT (0x01), R00
"011001" & X"800", -- 0x009: AND R00, 0x80
"110010" & X"007", -- 0x00A: JNZ 0x007
"000011" & X"001", -- 0x00B: MOV R01, 0x00
"111011" & X"0D3", -- 0x00C: CALL 0x0D3
"101000" & X"040", -- 0x00D: XIN R00, (0x04)
"011011" & X"100", -- 0x00E: OR R00, 0x10
"100100" & X"040", -- 0x00F: XOUT (0x04), R00
"111011" & X"129", -- 0x010: CALL 0x129
"011011" & X"200", -- 0x011: OR R00, 0x20
"100100" & X"040", -- 0x012: XOUT (0x04), R00
"111011" & X"129", -- 0x013: CALL 0x129
"011001" & X"EF0", -- 0x014: AND R00, 0xEF
"100100" & X"040", -- 0x015: XOUT (0x04), R00
"111011" & X"129", -- 0x016: CALL 0x129
"011001" & X"CF0", -- 0x017: AND R00, 0xCF
"100100" & X"040", -- 0x018: XOUT (0x04), R00
"110000" & X"01A", -- 0x019: JMP 0x01A
"000011" & X"010", -- 0x01A: MOV R00, 0x01
"111011" & X"0CE", -- 0x01B: CALL 0x0CE
"000011" & X"0B1", -- 0x01C: MOV R01, 0x0B
"111011" & X"0D3", -- 0x01D: CALL 0x0D3
"111011" & X"07F", -- 0x01E: CALL 0x07F
"000011" & X"800", -- 0x01F: MOV R00, 0x80
"000011" & X"08F", -- 0x020: MOV R15, 0x08
"000111" & X"000", -- 0x021: MOVX (R00), 0x00
"010001" & X"010", -- 0x022: INC R00
"010101" & X"01F", -- 0x023: DEC R15
"110010" & X"021", -- 0x024: JNZ 0x021
"101000" & X"0A0", -- 0x025: XIN R00, (0x0A)
"001111" & X"FF0", -- 0x026: CMP R00, 0xFF
"111001" & X"031", -- 0x027: JEQ 0x031
"101000" & X"070", -- 0x028: XIN R00, (0x07)
"100100" & X"010", -- 0x029: XOUT (0x01), R00
"011001" & X"020", -- 0x02A: AND R00, 0x02
"110010" & X"028", -- 0x02B: JNZ 0x028
"000011" & X"070", -- 0x02C: MOV R00, 0x07
"100101" & X"020", -- 0x02D: XOUT (R00), 0x02
"000011" & X"020", -- 0x02E: MOV R00, 0x02
"111011" & X"086", -- 0x02F: CALL 0x086
"110000" & X"025", -- 0x030: JMP 0x025
"111011" & X"096", -- 0x031: CALL 0x096
"111011" & X"122", -- 0x032: CALL 0x122
"000011" & X"010", -- 0x033: MOV R00, 0x01
"111011" & X"0CE", -- 0x034: CALL 0x0CE
"000011" & X"1A1", -- 0x035: MOV R01, 0x1A
"111011" & X"0D3", -- 0x036: CALL 0x0D3
"111011" & X"07F", -- 0x037: CALL 0x07F
"000011" & X"000", -- 0x038: MOV R00, 0x00
"001101" & X"000", -- 0x039: MOVC (0x00), R00
"101000" & X"0A0", -- 0x03A: XIN R00, (0x0A)
"001111" & X"FF0", -- 0x03B: CMP R00, 0xFF
"111001" & X"051", -- 0x03C: JEQ 0x051
"001010" & X"001", -- 0x03D: MOVC R01, (0x00)
"000011" & X"800", -- 0x03E: MOV R00, 0x80
"000011" & X"08F", -- 0x03F: MOV R15, 0x08
"000110" & X"001", -- 0x040: MOVX (R01), R00
"010001" & X"010", -- 0x041: INC R00
"010001" & X"011", -- 0x042: INC R01
"010101" & X"01F", -- 0x043: DEC R15
"110010" & X"040", -- 0x044: JNZ 0x040
"101000" & X"070", -- 0x045: XIN R00, (0x07)
"100100" & X"010", -- 0x046: XOUT (0x01), R00
"011001" & X"020", -- 0x047: AND R00, 0x02
"110010" & X"045", -- 0x048: JNZ 0x045
"000011" & X"070", -- 0x049: MOV R00, 0x07
"100101" & X"020", -- 0x04A: XOUT (R00), 0x02
"000011" & X"020", -- 0x04B: MOV R00, 0x02
"111011" & X"086", -- 0x04C: CALL 0x086
"001010" & X"000", -- 0x04D: MOVC R00, (0x00)
"010001" & X"010", -- 0x04E: INC R00
"001101" & X"000", -- 0x04F: MOVC (0x00), R00
"110000" & X"03A", -- 0x050: JMP 0x03A
"111011" & X"096", -- 0x051: CALL 0x096
"111011" & X"122", -- 0x052: CALL 0x122
"000011" & X"010", -- 0x053: MOV R00, 0x01
"111011" & X"0CE", -- 0x054: CALL 0x0CE
"000011" & X"281", -- 0x055: MOV R01, 0x28
"111011" & X"0D3", -- 0x056: CALL 0x0D3
"111011" & X"07F", -- 0x057: CALL 0x07F
"000011" & X"000", -- 0x058: MOV R00, 0x00
"001101" & X"000", -- 0x059: MOVC (0x00), R00
"101000" & X"0A0", -- 0x05A: XIN R00, (0x0A)
"001111" & X"FF0", -- 0x05B: CMP R00, 0xFF
"111001" & X"073", -- 0x05C: JEQ 0x073
"000011" & X"070", -- 0x05D: MOV R00, 0x07
"100101" & X"010", -- 0x05E: XOUT (R00), 0x01
"101000" & X"070", -- 0x05F: XIN R00, (0x07)
"100100" & X"010", -- 0x060: XOUT (0x01), R00
"011001" & X"010", -- 0x061: AND R00, 0x01
"110010" & X"05F", -- 0x062: JNZ 0x05F
"001010" & X"001", -- 0x063: MOVC R01, (0x00)
"000011" & X"800", -- 0x064: MOV R00, 0x80
"000011" & X"08F", -- 0x065: MOV R15, 0x08
"000100" & X"002", -- 0x066: MOVX R02, (R00)
"001110" & X"012", -- 0x067: CMP R02, R01
"111010" & X"078", -- 0x068: JNE 0x078
"010001" & X"010", -- 0x069: INC R00
"010001" & X"011", -- 0x06A: INC R01
"010101" & X"01F", -- 0x06B: DEC R15
"110010" & X"066", -- 0x06C: JNZ 0x066
"000011" & X"020", -- 0x06D: MOV R00, 0x02
"111011" & X"086", -- 0x06E: CALL 0x086
"001010" & X"000", -- 0x06F: MOVC R00, (0x00)
"010001" & X"010", -- 0x070: INC R00
"001101" & X"000", -- 0x071: MOVC (0x00), R00
"110000" & X"05A", -- 0x072: JMP 0x05A
"000011" & X"C00", -- 0x073: MOV R00, 0xC0
"111011" & X"0CE", -- 0x074: CALL 0x0CE
"000011" & X"361", -- 0x075: MOV R01, 0x36
"111011" & X"0D3", -- 0x076: CALL 0x0D3
"110000" & X"07D", -- 0x077: JMP 0x07D
"000011" & X"C00", -- 0x078: MOV R00, 0xC0
"111011" & X"0CE", -- 0x079: CALL 0x0CE
"000011" & X"401", -- 0x07A: MOV R01, 0x40
"111011" & X"0D3", -- 0x07B: CALL 0x0D3
"110000" & X"07D", -- 0x07C: JMP 0x07D
"111011" & X"122", -- 0x07D: CALL 0x122
"110000" & X"01A", -- 0x07E: JMP 0x01A
"111100" & X"000", -- 0x07F: PUSH R00
"000011" & X"000", -- 0x080: MOV R00, 0x00
"100100" & X"080", -- 0x081: XOUT (0x08), R00
"100100" & X"090", -- 0x082: XOUT (0x09), R00
"100100" & X"0A0", -- 0x083: XOUT (0x0A), R00
"111101" & X"000", -- 0x084: POP R00
"111110" & X"000", -- 0x085: RET
"111100" & X"001", -- 0x086: PUSH R01
"111100" & X"002", -- 0x087: PUSH R02
"111100" & X"003", -- 0x088: PUSH R03
"101000" & X"081", -- 0x089: XIN R01, (0x08)
"101000" & X"092", -- 0x08A: XIN R02, (0x09)
"101000" & X"0A3", -- 0x08B: XIN R03, (0x0A)
"010000" & X"001", -- 0x08C: ADD R01, R00
"010011" & X"002", -- 0x08D: ADDC R02, 0x00
"010011" & X"003", -- 0x08E: ADDC R03, 0x00
"100100" & X"081", -- 0x08F: XOUT (0x08), R01
"100100" & X"092", -- 0x090: XOUT (0x09), R02
"100100" & X"0A3", -- 0x091: XOUT (0x0A), R03
"111101" & X"003", -- 0x092: POP R03
"111101" & X"002", -- 0x093: POP R02
"111101" & X"001", -- 0x094: POP R01
"111110" & X"000", -- 0x095: RET
"000011" & X"C00", -- 0x096: MOV R00, 0xC0
"111011" & X"0CE", -- 0x097: CALL 0x0CE
"101000" & X"0A0", -- 0x098: XIN R00, (0x0A)
"111011" & X"09F", -- 0x099: CALL 0x09F
"101000" & X"090", -- 0x09A: XIN R00, (0x09)
"111011" & X"09F", -- 0x09B: CALL 0x09F
"101000" & X"080", -- 0x09C: XIN R00, (0x08)
"111011" & X"09F", -- 0x09D: CALL 0x09F
"111110" & X"000", -- 0x09E: RET
"111011" & X"0AA", -- 0x09F: CALL 0x0AA
"111011" & X"0E5", -- 0x0A0: CALL 0x0E5
"000010" & X"010", -- 0x0A1: MOV R00, R01
"111011" & X"0E5", -- 0x0A2: CALL 0x0E5
"111110" & X"000", -- 0x0A3: RET
"011001" & X"0F0", -- 0x0A4: AND R00, 0x0F
"001111" & X"0A0", -- 0x0A5: CMP R00, 0x0A
"110101" & X"0A8", -- 0x0A6: JLT 0x0A8
"010001" & X"070", -- 0x0A7: ADD R00, 0x07
"010001" & X"300", -- 0x0A8: ADD R00, 0x30
"111110" & X"000", -- 0x0A9: RET
"111100" & X"000", -- 0x0AA: PUSH R00
"111011" & X"0A4", -- 0x0AB: CALL 0x0A4
"000010" & X"001", -- 0x0AC: MOV R01, R00
"111101" & X"000", -- 0x0AD: POP R00
"101010" & X"000", -- 0x0AE: SWAP R00
"111011" & X"0A4", -- 0x0AF: CALL 0x0A4
"111110" & X"000", -- 0x0B0: RET
"000011" & X"002", -- 0x0B1: MOV R02, 0x00
"000011" & X"030", -- 0x0B2: MOV R00, 0x03
"111011" & X"0FD", -- 0x0B3: CALL 0x0FD
"111011" & X"130", -- 0x0B4: CALL 0x130
"000011" & X"002", -- 0x0B5: MOV R02, 0x00
"000011" & X"030", -- 0x0B6: MOV R00, 0x03
"111011" & X"0FD", -- 0x0B7: CALL 0x0FD
"111011" & X"130", -- 0x0B8: CALL 0x130
"000011" & X"002", -- 0x0B9: MOV R02, 0x00
"000011" & X"020", -- 0x0BA: MOV R00, 0x02
"111011" & X"0FD", -- 0x0BB: CALL 0x0FD
"111011" & X"137", -- 0x0BC: CALL 0x137
"000011" & X"280", -- 0x0BD: MOV R00, 0x28
"111011" & X"0CE", -- 0x0BE: CALL 0x0CE
"000011" & X"0C0", -- 0x0BF: MOV R00, 0x0C
"111011" & X"0CE", -- 0x0C0: CALL 0x0CE
"000011" & X"060", -- 0x0C1: MOV R00, 0x06
"111011" & X"0CE", -- 0x0C2: CALL 0x0CE
"000011" & X"010", -- 0x0C3: MOV R00, 0x01
"111011" & X"0CE", -- 0x0C4: CALL 0x0CE
"111110" & X"000", -- 0x0C5: RET
"111100" & X"000", -- 0x0C6: PUSH R00
"111011" & X"0F1", -- 0x0C7: CALL 0x0F1
"011001" & X"800", -- 0x0C8: AND R00, 0x80
"110001" & X"0CC", -- 0x0C9: JZ 0x0CC
"111011" & X"14E", -- 0x0CA: CALL 0x14E
"110000" & X"0C7", -- 0x0CB: JMP 0x0C7
"111101" & X"000", -- 0x0CC: POP R00
"111110" & X"000", -- 0x0CD: RET
"111100" & X"002", -- 0x0CE: PUSH R02
"000011" & X"002", -- 0x0CF: MOV R02, 0x00
"111011" & X"0EA", -- 0x0D0: CALL 0x0EA
"111101" & X"002", -- 0x0D1: POP R02
"111110" & X"000", -- 0x0D2: RET
"111100" & X"000", -- 0x0D3: PUSH R00
"000100" & X"010", -- 0x0D4: MOVX R00, (R01)
"010001" & X"011", -- 0x0D5: INC R01
"001111" & X"000", -- 0x0D6: TST R00
"110001" & X"0DA", -- 0x0D7: JZ 0x0DA
"111011" & X"0E5", -- 0x0D8: CALL 0x0E5
"110000" & X"0D4", -- 0x0D9: JMP 0x0D4
"111101" & X"000", -- 0x0DA: POP R00
"111110" & X"000", -- 0x0DB: RET
"111100" & X"000", -- 0x0DC: PUSH R00
"001001" & X"010", -- 0x0DD: MOVC R00, (R01)
"010001" & X"011", -- 0x0DE: INC R01
"001111" & X"000", -- 0x0DF: TST R00
"110001" & X"0E3", -- 0x0E0: JZ 0x0E3
"111011" & X"0E5", -- 0x0E1: CALL 0x0E5
"110000" & X"0DD", -- 0x0E2: JMP 0x0DD
"111101" & X"000", -- 0x0E3: POP R00
"111110" & X"000", -- 0x0E4: RET
"111100" & X"002", -- 0x0E5: PUSH R02
"000011" & X"402", -- 0x0E6: MOV R02, 0x40
"111011" & X"0EA", -- 0x0E7: CALL 0x0EA
"111101" & X"002", -- 0x0E8: POP R02
"111110" & X"000", -- 0x0E9: RET
"111011" & X"0C6", -- 0x0EA: CALL 0x0C6
"111100" & X"000", -- 0x0EB: PUSH R00
"101010" & X"000", -- 0x0EC: SWAP R00
"111011" & X"0FD", -- 0x0ED: CALL 0x0FD
"111101" & X"000", -- 0x0EE: POP R00
"111011" & X"0FD", -- 0x0EF: CALL 0x0FD
"111110" & X"000", -- 0x0F0: RET
"111100" & X"002", -- 0x0F1: PUSH R02
"000011" & X"002", -- 0x0F2: MOV R02, 0x00
"111011" & X"0F6", -- 0x0F3: CALL 0x0F6
"111101" & X"002", -- 0x0F4: POP R02
"111110" & X"000", -- 0x0F5: RET
"111011" & X"110", -- 0x0F6: CALL 0x110
"101010" & X"000", -- 0x0F7: SWAP R00
"111100" & X"000", -- 0x0F8: PUSH R00
"111011" & X"110", -- 0x0F9: CALL 0x110
"111101" & X"002", -- 0x0FA: POP R02
"011010" & X"020", -- 0x0FB: OR R00, R02
"111110" & X"000", -- 0x0FC: RET
"111100" & X"001", -- 0x0FD: PUSH R01
"011001" & X"0F0", -- 0x0FE: AND R00, 0x0F
"000010" & X"001", -- 0x0FF: MOV R01, R00
"011010" & X"021", -- 0x100: OR R01, R02
"100100" & X"031", -- 0x101: XOUT (0x03), R01
"111011" & X"14E", -- 0x102: CALL 0x14E
"000010" & X"001", -- 0x103: MOV R01, R00
"011010" & X"021", -- 0x104: OR R01, R02
"011011" & X"801", -- 0x105: OR R01, 0x80
"100100" & X"031", -- 0x106: XOUT (0x03), R01
"111011" & X"14E", -- 0x107: CALL 0x14E
"000010" & X"001", -- 0x108: MOV R01, R00
"011010" & X"021", -- 0x109: OR R01, R02
"100100" & X"031", -- 0x10A: XOUT (0x03), R01
"111011" & X"14E", -- 0x10B: CALL 0x14E
"011011" & X"201", -- 0x10C: OR R01, 0x20
"100100" & X"031", -- 0x10D: XOUT (0x03), R01
"111101" & X"001", -- 0x10E: POP R01
"111110" & X"000", -- 0x10F: RET
"111100" & X"001", -- 0x110: PUSH R01
"000011" & X"201", -- 0x111: MOV R01, 0x20
"011010" & X"021", -- 0x112: OR R01, R02
"100100" & X"031", -- 0x113: XOUT (0x03), R01
"111011" & X"14E", -- 0x114: CALL 0x14E
"000011" & X"201", -- 0x115: MOV R01, 0x20
"011010" & X"021", -- 0x116: OR R01, R02
"011011" & X"801", -- 0x117: OR R01, 0x80
"100100" & X"031", -- 0x118: XOUT (0x03), R01
"111011" & X"14E", -- 0x119: CALL 0x14E
"101000" & X"030", -- 0x11A: XIN R00, (0x03)
"011001" & X"0F0", -- 0x11B: AND R00, 0x0F
"000011" & X"201", -- 0x11C: MOV R01, 0x20
"011010" & X"021", -- 0x11D: OR R01, R02
"100100" & X"031", -- 0x11E: XOUT (0x03), R01
"111011" & X"14E", -- 0x11F: CALL 0x14E
"111101" & X"001", -- 0x120: POP R01
"111110" & X"000", -- 0x121: RET
"111100" & X"00F", -- 0x122: PUSH R15
"000011" & X"0AF", -- 0x123: MOV R15, 0x0A
"111011" & X"129", -- 0x124: CALL 0x129
"010101" & X"01F", -- 0x125: DEC R15
"110010" & X"124", -- 0x126: JNZ 0x124
"111101" & X"00F", -- 0x127: POP R15
"111110" & X"000", -- 0x128: RET
"111100" & X"00F", -- 0x129: PUSH R15
"000011" & X"0AF", -- 0x12A: MOV R15, 0x0A
"111011" & X"130", -- 0x12B: CALL 0x130
"010101" & X"01F", -- 0x12C: DEC R15
"110010" & X"12B", -- 0x12D: JNZ 0x12B
"111101" & X"00F", -- 0x12E: POP R15
"111110" & X"000", -- 0x12F: RET
"111100" & X"00F", -- 0x130: PUSH R15
"000011" & X"0AF", -- 0x131: MOV R15, 0x0A
"111011" & X"137", -- 0x132: CALL 0x137
"010101" & X"01F", -- 0x133: DEC R15
"110010" & X"132", -- 0x134: JNZ 0x132
"111101" & X"00F", -- 0x135: POP R15
"111110" & X"000", -- 0x136: RET
"111100" & X"00F", -- 0x137: PUSH R15
"000011" & X"0AF", -- 0x138: MOV R15, 0x0A
"111011" & X"13E", -- 0x139: CALL 0x13E
"010101" & X"01F", -- 0x13A: DEC R15
"110010" & X"139", -- 0x13B: JNZ 0x139
"111101" & X"00F", -- 0x13C: POP R15
"111110" & X"000", -- 0x13D: RET
"111100" & X"00F", -- 0x13E: PUSH R15
"000011" & X"0AF", -- 0x13F: MOV R15, 0x0A
"111011" & X"145", -- 0x140: CALL 0x145
"010101" & X"01F", -- 0x141: DEC R15
"110010" & X"140", -- 0x142: JNZ 0x140
"111101" & X"00F", -- 0x143: POP R15
"111110" & X"000", -- 0x144: RET
"111100" & X"00F", -- 0x145: PUSH R15
"000011" & X"63F", -- 0x146: MOV R15, 0x63
"000000" & X"000", -- 0x147: NOP
"000000" & X"000", -- 0x148: NOP
"000000" & X"000", -- 0x149: NOP
"010101" & X"01F", -- 0x14A: DEC R15
"110010" & X"147", -- 0x14B: JNZ 0x147
"111101" & X"00F", -- 0x14C: POP R15
"111110" & X"000", -- 0x14D: RET
"111100" & X"00F", -- 0x14E: PUSH R15
"000011" & X"09F", -- 0x14F: MOV R15, 0x09
"000000" & X"000", -- 0x150: NOP
"000000" & X"000", -- 0x151: NOP
"000000" & X"000", -- 0x152: NOP
"010101" & X"01F", -- 0x153: DEC R15
"110010" & X"150", -- 0x154: JNZ 0x150
"111101" & X"00F", -- 0x155: POP R15
"111110" & X"000" -- 0x156: 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 sdr_test;