------------------------------------------------------------------------- -- Project: JCPU, a portable 8-bit RISC CPU written in VHDL -- This file: loadable ROM -- 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 UNISIM; use UNISIM.VComponents.all; library work; use work.cpu_pkg.all; ENTITY irom IS Port ( clk : in STD_LOGIC; ce : in STD_LOGIC; addr : in inst_addr_t; dout : out inst_t ); END irom; ARCHITECTURE loadable OF irom IS -- JASM_ROM_INSERT_HERE -- Assembled from counter.jsm type imem_rom_t is array (0 to 1023) of inst_t; signal imem_rom : imem_rom_t := ( "110000" & X"3FF", -- 0x000: JMP 0x3FF "111100" & X"000", -- 0x001: PUSH R00 "111100" & X"001", -- 0x002: PUSH R01 "111100" & X"002", -- 0x003: PUSH R02 "111100" & X"003", -- 0x004: PUSH R03 "111100" & X"004", -- 0x005: PUSH R04 "111100" & X"005", -- 0x006: PUSH R05 "111100" & X"006", -- 0x007: PUSH R06 "111100" & X"007", -- 0x008: PUSH R07 "111100" & X"008", -- 0x009: PUSH R08 "111100" & X"009", -- 0x00A: PUSH R09 "111100" & X"00A", -- 0x00B: PUSH R10 "111100" & X"00B", -- 0x00C: PUSH R11 "111100" & X"00C", -- 0x00D: PUSH R12 "111100" & X"00D", -- 0x00E: PUSH R13 "111100" & X"00E", -- 0x00F: PUSH R14 "111100" & X"00F", -- 0x010: PUSH R15 "101000" & X"060", -- 0x011: XIN R00, (0x06) "011001" & X"100", -- 0x012: AND R00, 0x10 "110001" & X"020", -- 0x013: JZ 0x020 "101000" & X"020", -- 0x014: XIN R00, (0x02) "001111" & X"0D0", -- 0x015: CMP R00, 0x0D "111001" & X"01B", -- 0x016: JEQ 0x01B "001010" & X"1E1", -- 0x017: MOVC R01, (0x1E) "001011" & X"010", -- 0x018: MOVC (R00), R01 "001111" & X"1D1", -- 0x019: CMP R01, 0x1D "110101" & X"01E", -- 0x01A: JLT 0x01E "000011" & X"0E1", -- 0x01B: MOV R01, 0x0E "010101" & X"011", -- 0x01C: DEC R01 "001101" & X"1F1", -- 0x01D: MOVC (0x1F), R01 "010001" & X"011", -- 0x01E: INC R01 "001101" & X"1E1", -- 0x01F: MOVC (0x1E), R01 "111011" & X"098", -- 0x020: CALL 0x098 "111101" & X"00F", -- 0x021: POP R15 "111101" & X"00E", -- 0x022: POP R14 "111101" & X"00D", -- 0x023: POP R13 "111101" & X"00C", -- 0x024: POP R12 "111101" & X"00B", -- 0x025: POP R11 "111101" & X"00A", -- 0x026: POP R10 "111101" & X"009", -- 0x027: POP R09 "111101" & X"008", -- 0x028: POP R08 "111101" & X"007", -- 0x029: POP R07 "111101" & X"006", -- 0x02A: POP R06 "111101" & X"005", -- 0x02B: POP R05 "111101" & X"004", -- 0x02C: POP R04 "111101" & X"003", -- 0x02D: POP R03 "111101" & X"002", -- 0x02E: POP R02 "111101" & X"001", -- 0x02F: POP R01 "111101" & X"000", -- 0x030: POP R00 "111111" & X"000", -- 0x031: RETI "111011" & X"092", -- 0x032: CALL 0x092 "111011" & X"0C8", -- 0x033: CALL 0x0C8 "000011" & X"000", -- 0x034: MOV R00, 0x00 "001101" & X"0C0", -- 0x035: MOVC (0x0C), R00 "100100" & X"010", -- 0x036: XOUT (0x01), R00 "001101" & X"1F0", -- 0x037: MOVC (0x1F), R00 "101000" & X"001", -- 0x038: XIN R01, (0x00) "011011" & X"801", -- 0x039: OR R01, 0x80 "001101" & X"0D1", -- 0x03A: MOVC (0x0D), R01 "000011" & X"0E0", -- 0x03B: MOV R00, 0x0E "001101" & X"1E0", -- 0x03C: MOVC (0x1E), R00 "000011" & X"040", -- 0x03D: MOV R00, 0x04 "100101" & X"020", -- 0x03E: XOUT (R00), 0x02 "100101" & X"030", -- 0x03F: XOUT (R00), 0x03 "000011" & X"640", -- 0x040: MOV R00, 0x64 "001101" & X"0C0", -- 0x041: MOVC (0x0C), R00 "000011" & X"030", -- 0x042: MOV R00, 0x03 "100110" & X"030", -- 0x043: COUT (0x03), R00 "000011" & X"010", -- 0x044: MOV R00, 0x01 "111011" & X"0E5", -- 0x045: CALL 0x0E5 "000011" & X"001", -- 0x046: MOV R01, 0x00 "111011" & X"0EA", -- 0x047: CALL 0x0EA "101001" & X"000", -- 0x048: CIN R00, (0x00) "010001" & X"300", -- 0x049: ADD R00, 0x30 "111011" & X"0FC", -- 0x04A: CALL 0x0FC "000011" & X"000", -- 0x04B: MOV R00, 0x00 "100110" & X"010", -- 0x04C: COUT (0x01), R00 "000011" & X"001", -- 0x04D: MOV R01, 0x00 "001101" & X"201", -- 0x04E: MOVC (0x20), R01 "000011" & X"010", -- 0x04F: MOV R00, 0x01 "100110" & X"010", -- 0x050: COUT (0x01), R00 "000011" & X"AA1", -- 0x051: MOV R01, 0xAA "001101" & X"201", -- 0x052: MOVC (0x20), R01 "000011" & X"000", -- 0x053: MOV R00, 0x00 "100110" & X"010", -- 0x054: COUT (0x01), R00 "001010" & X"200", -- 0x055: MOVC R00, (0x20) "001111" & X"AA0", -- 0x056: CMP R00, 0xAA "111001" & X"05D", -- 0x057: JEQ 0x05D "000011" & X"010", -- 0x058: MOV R00, 0x01 "100110" & X"010", -- 0x059: COUT (0x01), R00 "001010" & X"200", -- 0x05A: MOVC R00, (0x20) "001111" & X"AA0", -- 0x05B: CMP R00, 0xAA "111001" & X"05E", -- 0x05C: JEQ 0x05E "110000" & X"05D", -- 0x05D: JMP 0x05D "000011" & X"000", -- 0x05E: MOV R00, 0x00 "100110" & X"010", -- 0x05F: COUT (0x01), R00 "000001" & X"000", -- 0x060: HALT "001010" & X"0C0", -- 0x061: MOVC R00, (0x0C) "010101" & X"010", -- 0x062: DEC R00 "001101" & X"0C0", -- 0x063: MOVC (0x0C), R00 "110010" & X"060", -- 0x064: JNZ 0x060 "000011" & X"647", -- 0x065: MOV R07, 0x64 "001010" & X"041", -- 0x066: MOVC R01, (0x04) "001010" & X"052", -- 0x067: MOVC R02, (0x05) "101010" & X"001", -- 0x068: SWAP R01 "011100" & X"021", -- 0x069: XOR R01, R02 "011001" & X"021", -- 0x06A: AND R01, 0x02 "110010" & X"06F", -- 0x06B: JNZ 0x06F "010101" & X"017", -- 0x06C: DEC R07 "000011" & X"2D0", -- 0x06D: MOV R00, 0x2D "110000" & X"071", -- 0x06E: JMP 0x071 "010001" & X"017", -- 0x06F: INC R07 "000011" & X"2B0", -- 0x070: MOV R00, 0x2B "001101" & X"0C7", -- 0x071: MOVC (0x0C), R07 "111011" & X"0BA", -- 0x072: CALL 0x0BA "001010" & X"0D0", -- 0x073: MOVC R00, (0x0D) "100000" & X"000", -- 0x074: ROL R00 "001101" & X"0D0", -- 0x075: MOVC (0x0D), R00 "100100" & X"010", -- 0x076: XOUT (0x01), R00 "001010" & X"1F0", -- 0x077: MOVC R00, (0x1F) "000011" & X"001", -- 0x078: MOV R01, 0x00 "001101" & X"1F1", -- 0x079: MOVC (0x1F), R01 "001111" & X"000", -- 0x07A: TST R00 "110001" & X"082", -- 0x07B: JZ 0x082 "000011" & X"0E1", -- 0x07C: MOV R01, 0x0E "001001" & X"010", -- 0x07D: MOVC R00, (R01) "111011" & X"0FC", -- 0x07E: CALL 0x0FC "010001" & X"011", -- 0x07F: INC R01 "001111" & X"1D1", -- 0x080: CMP R01, 0x1D "110111" & X"07D", -- 0x081: JLE 0x07D "111011" & X"0A2", -- 0x082: CALL 0x0A2 "000011" & X"C00", -- 0x083: MOV R00, 0xC0 "111011" & X"0E5", -- 0x084: CALL 0x0E5 "000011" & X"0B1", -- 0x085: MOV R01, 0x0B "001001" & X"010", -- 0x086: MOVC R00, (R01) "111011" & X"0BA", -- 0x087: CALL 0x0BA "111011" & X"0FC", -- 0x088: CALL 0x0FC "001111" & X"041", -- 0x089: CMP R01, 0x04 "111001" & X"08D", -- 0x08A: JEQ 0x08D "010101" & X"011", -- 0x08B: DEC R01 "110000" & X"086", -- 0x08C: JMP 0x086 "000011" & X"0D0", -- 0x08D: MOV R00, 0x0D "111011" & X"0BA", -- 0x08E: CALL 0x0BA "000011" & X"0A0", -- 0x08F: MOV R00, 0x0A "111011" & X"0BA", -- 0x090: CALL 0x0BA "110000" & X"060", -- 0x091: JMP 0x060 "000011" & X"000", -- 0x092: MOV R00, 0x00 "001101" & X"000", -- 0x093: MOVC (0x00), R00 "001101" & X"010", -- 0x094: MOVC (0x01), R00 "001101" & X"020", -- 0x095: MOVC (0x02), R00 "001101" & X"030", -- 0x096: MOVC (0x03), R00 "111110" & X"000", -- 0x097: RET "000011" & X"000", -- 0x098: MOV R00, 0x00 "001001" & X"001", -- 0x099: MOVC R01, (R00) "010001" & X"011", -- 0x09A: INC R01 "001011" & X"001", -- 0x09B: MOVC (R01), R00 "110100" & X"0A1", -- 0x09C: JNC 0x0A1 "001111" & X"030", -- 0x09D: CMP R00, 0x03 "111001" & X"0A1", -- 0x09E: JEQ 0x0A1 "010001" & X"010", -- 0x09F: INC R00 "110000" & X"099", -- 0x0A0: JMP 0x099 "111110" & X"000", -- 0x0A1: RET "000011" & X"042", -- 0x0A2: MOV R02, 0x04 "000011" & X"000", -- 0x0A3: MOV R00, 0x00 "001001" & X"001", -- 0x0A4: MOVC R01, (R00) "011001" & X"0F1", -- 0x0A5: AND R01, 0x0F "001111" & X"0A1", -- 0x0A6: CMP R01, 0x0A "110101" & X"0A9", -- 0x0A7: JLT 0x0A9 "010001" & X"071", -- 0x0A8: ADD R01, 0x07 "010001" & X"301", -- 0x0A9: ADD R01, 0x30 "001011" & X"021", -- 0x0AA: MOVC (R01), R02 "010001" & X"012", -- 0x0AB: INC R02 "001001" & X"001", -- 0x0AC: MOVC R01, (R00) "101010" & X"001", -- 0x0AD: SWAP R01 "011001" & X"0F1", -- 0x0AE: AND R01, 0x0F "001111" & X"0A1", -- 0x0AF: CMP R01, 0x0A "110101" & X"0B2", -- 0x0B0: JLT 0x0B2 "010001" & X"071", -- 0x0B1: ADD R01, 0x07 "010001" & X"301", -- 0x0B2: ADD R01, 0x30 "001011" & X"021", -- 0x0B3: MOVC (R01), R02 "001111" & X"030", -- 0x0B4: CMP R00, 0x03 "111001" & X"0B9", -- 0x0B5: JEQ 0x0B9 "010001" & X"010", -- 0x0B6: INC R00 "010001" & X"012", -- 0x0B7: INC R02 "110000" & X"0A4", -- 0x0B8: JMP 0x0A4 "111110" & X"000", -- 0x0B9: RET "111100" & X"001", -- 0x0BA: PUSH R01 "101000" & X"061", -- 0x0BB: XIN R01, (0x06) "011001" & X"021", -- 0x0BC: AND R01, 0x02 "110010" & X"0BB", -- 0x0BD: JNZ 0x0BB "100100" & X"020", -- 0x0BE: XOUT (0x02), R00 "111101" & X"001", -- 0x0BF: POP R01 "111110" & X"000", -- 0x0C0: RET "111100" & X"001", -- 0x0C1: PUSH R01 "101000" & X"061", -- 0x0C2: XIN R01, (0x06) "011001" & X"101", -- 0x0C3: AND R01, 0x10 "110010" & X"0C2", -- 0x0C4: JNZ 0x0C2 "101000" & X"020", -- 0x0C5: XIN R00, (0x02) "111101" & X"001", -- 0x0C6: POP R01 "111110" & X"000", -- 0x0C7: RET "000011" & X"002", -- 0x0C8: MOV R02, 0x00 "000011" & X"030", -- 0x0C9: MOV R00, 0x03 "111011" & X"114", -- 0x0CA: CALL 0x114 "111011" & X"147", -- 0x0CB: CALL 0x147 "000011" & X"002", -- 0x0CC: MOV R02, 0x00 "000011" & X"030", -- 0x0CD: MOV R00, 0x03 "111011" & X"114", -- 0x0CE: CALL 0x114 "111011" & X"147", -- 0x0CF: CALL 0x147 "000011" & X"002", -- 0x0D0: MOV R02, 0x00 "000011" & X"020", -- 0x0D1: MOV R00, 0x02 "111011" & X"114", -- 0x0D2: CALL 0x114 "111011" & X"14E", -- 0x0D3: CALL 0x14E "000011" & X"280", -- 0x0D4: MOV R00, 0x28 "111011" & X"0E5", -- 0x0D5: CALL 0x0E5 "000011" & X"0C0", -- 0x0D6: MOV R00, 0x0C "111011" & X"0E5", -- 0x0D7: CALL 0x0E5 "000011" & X"060", -- 0x0D8: MOV R00, 0x06 "111011" & X"0E5", -- 0x0D9: CALL 0x0E5 "000011" & X"010", -- 0x0DA: MOV R00, 0x01 "111011" & X"0E5", -- 0x0DB: CALL 0x0E5 "111110" & X"000", -- 0x0DC: RET "111100" & X"000", -- 0x0DD: PUSH R00 "111011" & X"108", -- 0x0DE: CALL 0x108 "011001" & X"800", -- 0x0DF: AND R00, 0x80 "110001" & X"0E3", -- 0x0E0: JZ 0x0E3 "111011" & X"165", -- 0x0E1: CALL 0x165 "110000" & X"0DE", -- 0x0E2: JMP 0x0DE "111101" & X"000", -- 0x0E3: POP R00 "111110" & X"000", -- 0x0E4: RET "111100" & X"002", -- 0x0E5: PUSH R02 "000011" & X"002", -- 0x0E6: MOV R02, 0x00 "111011" & X"101", -- 0x0E7: CALL 0x101 "111101" & X"002", -- 0x0E8: POP R02 "111110" & X"000", -- 0x0E9: RET "111100" & X"000", -- 0x0EA: PUSH R00 "000100" & X"010", -- 0x0EB: MOVX R00, (R01) "010001" & X"011", -- 0x0EC: INC R01 "001111" & X"000", -- 0x0ED: TST R00 "110001" & X"0F1", -- 0x0EE: JZ 0x0F1 "111011" & X"0FC", -- 0x0EF: CALL 0x0FC "110000" & X"0EB", -- 0x0F0: JMP 0x0EB "111101" & X"000", -- 0x0F1: POP R00 "111110" & X"000", -- 0x0F2: RET "111100" & X"000", -- 0x0F3: PUSH R00 "001001" & X"010", -- 0x0F4: MOVC R00, (R01) "010001" & X"011", -- 0x0F5: INC R01 "001111" & X"000", -- 0x0F6: TST R00 "110001" & X"0FA", -- 0x0F7: JZ 0x0FA "111011" & X"0FC", -- 0x0F8: CALL 0x0FC "110000" & X"0F4", -- 0x0F9: JMP 0x0F4 "111101" & X"000", -- 0x0FA: POP R00 "111110" & X"000", -- 0x0FB: RET "111100" & X"002", -- 0x0FC: PUSH R02 "000011" & X"402", -- 0x0FD: MOV R02, 0x40 "111011" & X"101", -- 0x0FE: CALL 0x101 "111101" & X"002", -- 0x0FF: POP R02 "111110" & X"000", -- 0x100: RET "111011" & X"0DD", -- 0x101: CALL 0x0DD "111100" & X"000", -- 0x102: PUSH R00 "101010" & X"000", -- 0x103: SWAP R00 "111011" & X"114", -- 0x104: CALL 0x114 "111101" & X"000", -- 0x105: POP R00 "111011" & X"114", -- 0x106: CALL 0x114 "111110" & X"000", -- 0x107: RET "111100" & X"002", -- 0x108: PUSH R02 "000011" & X"002", -- 0x109: MOV R02, 0x00 "111011" & X"10D", -- 0x10A: CALL 0x10D "111101" & X"002", -- 0x10B: POP R02 "111110" & X"000", -- 0x10C: RET "111011" & X"127", -- 0x10D: CALL 0x127 "101010" & X"000", -- 0x10E: SWAP R00 "111100" & X"000", -- 0x10F: PUSH R00 "111011" & X"127", -- 0x110: CALL 0x127 "111101" & X"002", -- 0x111: POP R02 "011010" & X"020", -- 0x112: OR R00, R02 "111110" & X"000", -- 0x113: RET "111100" & X"001", -- 0x114: PUSH R01 "011001" & X"0F0", -- 0x115: AND R00, 0x0F "000010" & X"001", -- 0x116: MOV R01, R00 "011010" & X"021", -- 0x117: OR R01, R02 "100100" & X"031", -- 0x118: XOUT (0x03), R01 "111011" & X"165", -- 0x119: CALL 0x165 "000010" & X"001", -- 0x11A: MOV R01, R00 "011010" & X"021", -- 0x11B: OR R01, R02 "011011" & X"801", -- 0x11C: OR R01, 0x80 "100100" & X"031", -- 0x11D: XOUT (0x03), R01 "111011" & X"165", -- 0x11E: CALL 0x165 "000010" & X"001", -- 0x11F: MOV R01, R00 "011010" & X"021", -- 0x120: OR R01, R02 "100100" & X"031", -- 0x121: XOUT (0x03), R01 "111011" & X"165", -- 0x122: CALL 0x165 "011011" & X"201", -- 0x123: OR R01, 0x20 "100100" & X"031", -- 0x124: XOUT (0x03), R01 "111101" & X"001", -- 0x125: POP R01 "111110" & X"000", -- 0x126: RET "111100" & X"001", -- 0x127: PUSH R01 "000011" & X"201", -- 0x128: MOV R01, 0x20 "011010" & X"021", -- 0x129: OR R01, R02 "100100" & X"031", -- 0x12A: XOUT (0x03), R01 "111011" & X"165", -- 0x12B: CALL 0x165 "000011" & X"201", -- 0x12C: MOV R01, 0x20 "011010" & X"021", -- 0x12D: OR R01, R02 "011011" & X"801", -- 0x12E: OR R01, 0x80 "100100" & X"031", -- 0x12F: XOUT (0x03), R01 "111011" & X"165", -- 0x130: CALL 0x165 "101000" & X"030", -- 0x131: XIN R00, (0x03) "011001" & X"0F0", -- 0x132: AND R00, 0x0F "000011" & X"201", -- 0x133: MOV R01, 0x20 "011010" & X"021", -- 0x134: OR R01, R02 "100100" & X"031", -- 0x135: XOUT (0x03), R01 "111011" & X"165", -- 0x136: CALL 0x165 "111101" & X"001", -- 0x137: POP R01 "111110" & X"000", -- 0x138: RET "111100" & X"00F", -- 0x139: PUSH R15 "000011" & X"0AF", -- 0x13A: MOV R15, 0x0A "111011" & X"140", -- 0x13B: CALL 0x140 "010101" & X"01F", -- 0x13C: DEC R15 "110010" & X"13B", -- 0x13D: JNZ 0x13B "111101" & X"00F", -- 0x13E: POP R15 "111110" & X"000", -- 0x13F: RET "111100" & X"00F", -- 0x140: PUSH R15 "000011" & X"0AF", -- 0x141: MOV R15, 0x0A "111011" & X"147", -- 0x142: CALL 0x147 "010101" & X"01F", -- 0x143: DEC R15 "110010" & X"142", -- 0x144: JNZ 0x142 "111101" & X"00F", -- 0x145: POP R15 "111110" & X"000", -- 0x146: RET "111100" & X"00F", -- 0x147: PUSH R15 "000011" & X"0AF", -- 0x148: MOV R15, 0x0A "111011" & X"14E", -- 0x149: CALL 0x14E "010101" & X"01F", -- 0x14A: DEC R15 "110010" & X"149", -- 0x14B: JNZ 0x149 "111101" & X"00F", -- 0x14C: POP R15 "111110" & X"000", -- 0x14D: RET "111100" & X"00F", -- 0x14E: PUSH R15 "000011" & X"0AF", -- 0x14F: MOV R15, 0x0A "111011" & X"155", -- 0x150: CALL 0x155 "010101" & X"01F", -- 0x151: DEC R15 "110010" & X"150", -- 0x152: JNZ 0x150 "111101" & X"00F", -- 0x153: POP R15 "111110" & X"000", -- 0x154: RET "111100" & X"00F", -- 0x155: PUSH R15 "000011" & X"0AF", -- 0x156: MOV R15, 0x0A "111011" & X"15C", -- 0x157: CALL 0x15C "010101" & X"01F", -- 0x158: DEC R15 "110010" & X"157", -- 0x159: JNZ 0x157 "111101" & X"00F", -- 0x15A: POP R15 "111110" & X"000", -- 0x15B: RET "111100" & X"00F", -- 0x15C: PUSH R15 "000011" & X"63F", -- 0x15D: MOV R15, 0x63 "000000" & X"000", -- 0x15E: NOP "000000" & X"000", -- 0x15F: NOP "000000" & X"000", -- 0x160: NOP "010101" & X"01F", -- 0x161: DEC R15 "110010" & X"15E", -- 0x162: JNZ 0x15E "111101" & X"00F", -- 0x163: POP R15 "111110" & X"000", -- 0x164: RET "111100" & X"00F", -- 0x165: PUSH R15 "000011" & X"09F", -- 0x166: MOV R15, 0x09 "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 "000000" & X"000", -- 0x16E: "000000" & X"000", -- 0x16F: "000000" & X"000", -- 0x170: "000000" & X"000", -- 0x171: "000000" & X"000", -- 0x172: "000000" & X"000", -- 0x173: "000000" & X"000", -- 0x174: "000000" & X"000", -- 0x175: "000000" & X"000", -- 0x176: "000000" & X"000", -- 0x177: "000000" & X"000", -- 0x178: "000000" & X"000", -- 0x179: "000000" & X"000", -- 0x17A: "000000" & X"000", -- 0x17B: "000000" & X"000", -- 0x17C: "000000" & X"000", -- 0x17D: "000000" & X"000", -- 0x17E: "000000" & X"000", -- 0x17F: "000000" & X"000", -- 0x180: "000000" & X"000", -- 0x181: "000000" & X"000", -- 0x182: "000000" & X"000", -- 0x183: "000000" & X"000", -- 0x184: "000000" & X"000", -- 0x185: "000000" & X"000", -- 0x186: "000000" & X"000", -- 0x187: "000000" & X"000", -- 0x188: "000000" & X"000", -- 0x189: "000000" & X"000", -- 0x18A: "000000" & X"000", -- 0x18B: "000000" & X"000", -- 0x18C: "000000" & X"000", -- 0x18D: "000000" & X"000", -- 0x18E: "000000" & X"000", -- 0x18F: "000000" & X"000", -- 0x190: "000000" & X"000", -- 0x191: "000000" & X"000", -- 0x192: "000000" & X"000", -- 0x193: "000000" & X"000", -- 0x194: "000000" & X"000", -- 0x195: "000000" & X"000", -- 0x196: "000000" & X"000", -- 0x197: "000000" & X"000", -- 0x198: "000000" & X"000", -- 0x199: "000000" & X"000", -- 0x19A: "000000" & X"000", -- 0x19B: "000000" & X"000", -- 0x19C: "000000" & X"000", -- 0x19D: "000000" & X"000", -- 0x19E: "000000" & X"000", -- 0x19F: "000000" & X"000", -- 0x1A0: "000000" & X"000", -- 0x1A1: "000000" & X"000", -- 0x1A2: "000000" & X"000", -- 0x1A3: "000000" & X"000", -- 0x1A4: "000000" & X"000", -- 0x1A5: "000000" & X"000", -- 0x1A6: "000000" & X"000", -- 0x1A7: "000000" & X"000", -- 0x1A8: "000000" & X"000", -- 0x1A9: "000000" & X"000", -- 0x1AA: "000000" & X"000", -- 0x1AB: "000000" & X"000", -- 0x1AC: "000000" & X"000", -- 0x1AD: "000000" & X"000", -- 0x1AE: "000000" & X"000", -- 0x1AF: "000000" & X"000", -- 0x1B0: "000000" & X"000", -- 0x1B1: "000000" & X"000", -- 0x1B2: "000000" & X"000", -- 0x1B3: "000000" & X"000", -- 0x1B4: "000000" & X"000", -- 0x1B5: "000000" & X"000", -- 0x1B6: "000000" & X"000", -- 0x1B7: "000000" & X"000", -- 0x1B8: "000000" & X"000", -- 0x1B9: "000000" & X"000", -- 0x1BA: "000000" & X"000", -- 0x1BB: "000000" & X"000", -- 0x1BC: "000000" & X"000", -- 0x1BD: "000000" & X"000", -- 0x1BE: "000000" & X"000", -- 0x1BF: "000000" & X"000", -- 0x1C0: "000000" & X"000", -- 0x1C1: "000000" & X"000", -- 0x1C2: "000000" & X"000", -- 0x1C3: "000000" & X"000", -- 0x1C4: "000000" & X"000", -- 0x1C5: "000000" & X"000", -- 0x1C6: "000000" & X"000", -- 0x1C7: "000000" & X"000", -- 0x1C8: "000000" & X"000", -- 0x1C9: "000000" & X"000", -- 0x1CA: "000000" & X"000", -- 0x1CB: "000000" & X"000", -- 0x1CC: "000000" & X"000", -- 0x1CD: "000000" & X"000", -- 0x1CE: "000000" & X"000", -- 0x1CF: "000000" & X"000", -- 0x1D0: "000000" & X"000", -- 0x1D1: "000000" & X"000", -- 0x1D2: "000000" & X"000", -- 0x1D3: "000000" & X"000", -- 0x1D4: "000000" & X"000", -- 0x1D5: "000000" & X"000", -- 0x1D6: "000000" & X"000", -- 0x1D7: "000000" & X"000", -- 0x1D8: "000000" & X"000", -- 0x1D9: "000000" & X"000", -- 0x1DA: "000000" & X"000", -- 0x1DB: "000000" & X"000", -- 0x1DC: "000000" & X"000", -- 0x1DD: "000000" & X"000", -- 0x1DE: "000000" & X"000", -- 0x1DF: "000000" & X"000", -- 0x1E0: "000000" & X"000", -- 0x1E1: "000000" & X"000", -- 0x1E2: "000000" & X"000", -- 0x1E3: "000000" & X"000", -- 0x1E4: "000000" & X"000", -- 0x1E5: "000000" & X"000", -- 0x1E6: "000000" & X"000", -- 0x1E7: "000000" & X"000", -- 0x1E8: "000000" & X"000", -- 0x1E9: "000000" & X"000", -- 0x1EA: "000000" & X"000", -- 0x1EB: "000000" & X"000", -- 0x1EC: "000000" & X"000", -- 0x1ED: "000000" & X"000", -- 0x1EE: "000000" & X"000", -- 0x1EF: "000000" & X"000", -- 0x1F0: "000000" & X"000", -- 0x1F1: "000000" & X"000", -- 0x1F2: "000000" & X"000", -- 0x1F3: "000000" & X"000", -- 0x1F4: "000000" & X"000", -- 0x1F5: "000000" & X"000", -- 0x1F6: "000000" & X"000", -- 0x1F7: "000000" & X"000", -- 0x1F8: "000000" & X"000", -- 0x1F9: "000000" & X"000", -- 0x1FA: "000000" & X"000", -- 0x1FB: "000000" & X"000", -- 0x1FC: "000000" & X"000", -- 0x1FD: "000000" & X"000", -- 0x1FE: "000000" & X"000", -- 0x1FF: "000000" & X"000", -- 0x200: "000000" & X"000", -- 0x201: "000000" & X"000", -- 0x202: "000000" & X"000", -- 0x203: "000000" & X"000", -- 0x204: "000000" & X"000", -- 0x205: "000000" & X"000", -- 0x206: "000000" & X"000", -- 0x207: "000000" & X"000", -- 0x208: "000000" & X"000", -- 0x209: "000000" & X"000", -- 0x20A: "000000" & X"000", -- 0x20B: "000000" & X"000", -- 0x20C: "000000" & X"000", -- 0x20D: "000000" & X"000", -- 0x20E: "000000" & X"000", -- 0x20F: "000000" & X"000", -- 0x210: "000000" & X"000", -- 0x211: "000000" & X"000", -- 0x212: "000000" & X"000", -- 0x213: "000000" & X"000", -- 0x214: "000000" & X"000", -- 0x215: "000000" & X"000", -- 0x216: "000000" & X"000", -- 0x217: "000000" & X"000", -- 0x218: "000000" & X"000", -- 0x219: "000000" & X"000", -- 0x21A: "000000" & X"000", -- 0x21B: "000000" & X"000", -- 0x21C: "000000" & X"000", -- 0x21D: "000000" & X"000", -- 0x21E: "000000" & X"000", -- 0x21F: "000000" & X"000", -- 0x220: "000000" & X"000", -- 0x221: "000000" & X"000", -- 0x222: "000000" & X"000", -- 0x223: "000000" & X"000", -- 0x224: "000000" & X"000", -- 0x225: "000000" & X"000", -- 0x226: "000000" & X"000", -- 0x227: "000000" & X"000", -- 0x228: "000000" & X"000", -- 0x229: "000000" & X"000", -- 0x22A: "000000" & X"000", -- 0x22B: "000000" & X"000", -- 0x22C: "000000" & X"000", -- 0x22D: "000000" & X"000", -- 0x22E: "000000" & X"000", -- 0x22F: "000000" & X"000", -- 0x230: "000000" & X"000", -- 0x231: "000000" & X"000", -- 0x232: "000000" & X"000", -- 0x233: "000000" & X"000", -- 0x234: "000000" & X"000", -- 0x235: "000000" & X"000", -- 0x236: "000000" & X"000", -- 0x237: "000000" & X"000", -- 0x238: "000000" & X"000", -- 0x239: "000000" & X"000", -- 0x23A: "000000" & X"000", -- 0x23B: "000000" & X"000", -- 0x23C: "000000" & X"000", -- 0x23D: "000000" & X"000", -- 0x23E: "000000" & X"000", -- 0x23F: "000000" & X"000", -- 0x240: "000000" & X"000", -- 0x241: "000000" & X"000", -- 0x242: "000000" & X"000", -- 0x243: "000000" & X"000", -- 0x244: "000000" & X"000", -- 0x245: "000000" & X"000", -- 0x246: "000000" & X"000", -- 0x247: "000000" & X"000", -- 0x248: "000000" & X"000", -- 0x249: "000000" & X"000", -- 0x24A: "000000" & X"000", -- 0x24B: "000000" & X"000", -- 0x24C: "000000" & X"000", -- 0x24D: "000000" & X"000", -- 0x24E: "000000" & X"000", -- 0x24F: "000000" & X"000", -- 0x250: "000000" & X"000", -- 0x251: "000000" & X"000", -- 0x252: "000000" & X"000", -- 0x253: "000000" & X"000", -- 0x254: "000000" & X"000", -- 0x255: "000000" & X"000", -- 0x256: "000000" & X"000", -- 0x257: "000000" & X"000", -- 0x258: "000000" & X"000", -- 0x259: "000000" & X"000", -- 0x25A: "000000" & X"000", -- 0x25B: "000000" & X"000", -- 0x25C: "000000" & X"000", -- 0x25D: "000000" & X"000", -- 0x25E: "000000" & X"000", -- 0x25F: "000000" & X"000", -- 0x260: "000000" & X"000", -- 0x261: "000000" & X"000", -- 0x262: "000000" & X"000", -- 0x263: "000000" & X"000", -- 0x264: "000000" & X"000", -- 0x265: "000000" & X"000", -- 0x266: "000000" & X"000", -- 0x267: "000000" & X"000", -- 0x268: "000000" & X"000", -- 0x269: "000000" & X"000", -- 0x26A: "000000" & X"000", -- 0x26B: "000000" & X"000", -- 0x26C: "000000" & X"000", -- 0x26D: "000000" & X"000", -- 0x26E: "000000" & X"000", -- 0x26F: "000000" & X"000", -- 0x270: "000000" & X"000", -- 0x271: "000000" & X"000", -- 0x272: "000000" & X"000", -- 0x273: "000000" & X"000", -- 0x274: "000000" & X"000", -- 0x275: "000000" & X"000", -- 0x276: "000000" & X"000", -- 0x277: "000000" & X"000", -- 0x278: "000000" & X"000", -- 0x279: "000000" & X"000", -- 0x27A: "000000" & X"000", -- 0x27B: "000000" & X"000", -- 0x27C: "000000" & X"000", -- 0x27D: "000000" & X"000", -- 0x27E: "000000" & X"000", -- 0x27F: "000000" & X"000", -- 0x280: "000000" & X"000", -- 0x281: "000000" & X"000", -- 0x282: "000000" & X"000", -- 0x283: "000000" & X"000", -- 0x284: "000000" & X"000", -- 0x285: "000000" & X"000", -- 0x286: "000000" & X"000", -- 0x287: "000000" & X"000", -- 0x288: "000000" & X"000", -- 0x289: "000000" & X"000", -- 0x28A: "000000" & X"000", -- 0x28B: "000000" & X"000", -- 0x28C: "000000" & X"000", -- 0x28D: "000000" & X"000", -- 0x28E: "000000" & X"000", -- 0x28F: "000000" & X"000", -- 0x290: "000000" & X"000", -- 0x291: "000000" & X"000", -- 0x292: "000000" & X"000", -- 0x293: "000000" & X"000", -- 0x294: "000000" & X"000", -- 0x295: "000000" & X"000", -- 0x296: "000000" & X"000", -- 0x297: "000000" & X"000", -- 0x298: "000000" & X"000", -- 0x299: "000000" & X"000", -- 0x29A: "000000" & X"000", -- 0x29B: "000000" & X"000", -- 0x29C: "000000" & X"000", -- 0x29D: "000000" & X"000", -- 0x29E: "000000" & X"000", -- 0x29F: "000000" & X"000", -- 0x2A0: "000000" & X"000", -- 0x2A1: "000000" & X"000", -- 0x2A2: "000000" & X"000", -- 0x2A3: "000000" & X"000", -- 0x2A4: "000000" & X"000", -- 0x2A5: "000000" & X"000", -- 0x2A6: "000000" & X"000", -- 0x2A7: "000000" & X"000", -- 0x2A8: "000000" & X"000", -- 0x2A9: "000000" & X"000", -- 0x2AA: "000000" & X"000", -- 0x2AB: "000000" & X"000", -- 0x2AC: "000000" & X"000", -- 0x2AD: "000000" & X"000", -- 0x2AE: "000000" & X"000", -- 0x2AF: "000000" & X"000", -- 0x2B0: "000000" & X"000", -- 0x2B1: "000000" & X"000", -- 0x2B2: "000000" & X"000", -- 0x2B3: "000000" & X"000", -- 0x2B4: "000000" & X"000", -- 0x2B5: "000000" & X"000", -- 0x2B6: "000000" & X"000", -- 0x2B7: "000000" & X"000", -- 0x2B8: "000000" & X"000", -- 0x2B9: "000000" & X"000", -- 0x2BA: "000000" & X"000", -- 0x2BB: "000000" & X"000", -- 0x2BC: "000000" & X"000", -- 0x2BD: "000000" & X"000", -- 0x2BE: "000000" & X"000", -- 0x2BF: "000000" & X"000", -- 0x2C0: "000000" & X"000", -- 0x2C1: "000000" & X"000", -- 0x2C2: "000000" & X"000", -- 0x2C3: "000000" & X"000", -- 0x2C4: "000000" & X"000", -- 0x2C5: "000000" & X"000", -- 0x2C6: "000000" & X"000", -- 0x2C7: "000000" & X"000", -- 0x2C8: "000000" & X"000", -- 0x2C9: "000000" & X"000", -- 0x2CA: "000000" & X"000", -- 0x2CB: "000000" & X"000", -- 0x2CC: "000000" & X"000", -- 0x2CD: "000000" & X"000", -- 0x2CE: "000000" & X"000", -- 0x2CF: "000000" & X"000", -- 0x2D0: "000000" & X"000", -- 0x2D1: "000000" & X"000", -- 0x2D2: "000000" & X"000", -- 0x2D3: "000000" & X"000", -- 0x2D4: "000000" & X"000", -- 0x2D5: "000000" & X"000", -- 0x2D6: "000000" & X"000", -- 0x2D7: "000000" & X"000", -- 0x2D8: "000000" & X"000", -- 0x2D9: "000000" & X"000", -- 0x2DA: "000000" & X"000", -- 0x2DB: "000000" & X"000", -- 0x2DC: "000000" & X"000", -- 0x2DD: "000000" & X"000", -- 0x2DE: "000000" & X"000", -- 0x2DF: "000000" & X"000", -- 0x2E0: "000000" & X"000", -- 0x2E1: "000000" & X"000", -- 0x2E2: "000000" & X"000", -- 0x2E3: "000000" & X"000", -- 0x2E4: "000000" & X"000", -- 0x2E5: "000000" & X"000", -- 0x2E6: "000000" & X"000", -- 0x2E7: "000000" & X"000", -- 0x2E8: "000000" & X"000", -- 0x2E9: "000000" & X"000", -- 0x2EA: "000000" & X"000", -- 0x2EB: "000000" & X"000", -- 0x2EC: "000000" & X"000", -- 0x2ED: "000000" & X"000", -- 0x2EE: "000000" & X"000", -- 0x2EF: "000000" & X"000", -- 0x2F0: "000000" & X"000", -- 0x2F1: "000000" & X"000", -- 0x2F2: "000000" & X"000", -- 0x2F3: "000000" & X"000", -- 0x2F4: "000000" & X"000", -- 0x2F5: "000000" & X"000", -- 0x2F6: "000000" & X"000", -- 0x2F7: "000000" & X"000", -- 0x2F8: "000000" & X"000", -- 0x2F9: "000000" & X"000", -- 0x2FA: "000000" & X"000", -- 0x2FB: "000000" & X"000", -- 0x2FC: "000000" & X"000", -- 0x2FD: "000000" & X"000", -- 0x2FE: "000000" & X"000", -- 0x2FF: "000000" & X"000", -- 0x300: "000000" & X"000", -- 0x301: "000000" & X"000", -- 0x302: "000000" & X"000", -- 0x303: "000000" & X"000", -- 0x304: "000000" & X"000", -- 0x305: "000000" & X"000", -- 0x306: "000000" & X"000", -- 0x307: "000000" & X"000", -- 0x308: "000000" & X"000", -- 0x309: "000000" & X"000", -- 0x30A: "000000" & X"000", -- 0x30B: "000000" & X"000", -- 0x30C: "000000" & X"000", -- 0x30D: "000000" & X"000", -- 0x30E: "000000" & X"000", -- 0x30F: "000000" & X"000", -- 0x310: "000000" & X"000", -- 0x311: "000000" & X"000", -- 0x312: "000000" & X"000", -- 0x313: "000000" & X"000", -- 0x314: "000000" & X"000", -- 0x315: "000000" & X"000", -- 0x316: "000000" & X"000", -- 0x317: "000000" & X"000", -- 0x318: "000000" & X"000", -- 0x319: "000000" & X"000", -- 0x31A: "000000" & X"000", -- 0x31B: "000000" & X"000", -- 0x31C: "000000" & X"000", -- 0x31D: "000000" & X"000", -- 0x31E: "000000" & X"000", -- 0x31F: "000000" & X"000", -- 0x320: "000000" & X"000", -- 0x321: "000000" & X"000", -- 0x322: "000000" & X"000", -- 0x323: "000000" & X"000", -- 0x324: "000000" & X"000", -- 0x325: "000000" & X"000", -- 0x326: "000000" & X"000", -- 0x327: "000000" & X"000", -- 0x328: "000000" & X"000", -- 0x329: "000000" & X"000", -- 0x32A: "000000" & X"000", -- 0x32B: "000000" & X"000", -- 0x32C: "000000" & X"000", -- 0x32D: "000000" & X"000", -- 0x32E: "000000" & X"000", -- 0x32F: "000000" & X"000", -- 0x330: "000000" & X"000", -- 0x331: "000000" & X"000", -- 0x332: "000000" & X"000", -- 0x333: "000000" & X"000", -- 0x334: "000000" & X"000", -- 0x335: "000000" & X"000", -- 0x336: "000000" & X"000", -- 0x337: "000000" & X"000", -- 0x338: "000000" & X"000", -- 0x339: "000000" & X"000", -- 0x33A: "000000" & X"000", -- 0x33B: "000000" & X"000", -- 0x33C: "000000" & X"000", -- 0x33D: "000000" & X"000", -- 0x33E: "000000" & X"000", -- 0x33F: "000000" & X"000", -- 0x340: "000000" & X"000", -- 0x341: "000000" & X"000", -- 0x342: "000000" & X"000", -- 0x343: "000000" & X"000", -- 0x344: "000000" & X"000", -- 0x345: "000000" & X"000", -- 0x346: "000000" & X"000", -- 0x347: "000000" & X"000", -- 0x348: "000000" & X"000", -- 0x349: "000000" & X"000", -- 0x34A: "000000" & X"000", -- 0x34B: "000000" & X"000", -- 0x34C: "000000" & X"000", -- 0x34D: "000000" & X"000", -- 0x34E: "000000" & X"000", -- 0x34F: "000000" & X"000", -- 0x350: "000000" & X"000", -- 0x351: "000000" & X"000", -- 0x352: "000000" & X"000", -- 0x353: "000000" & X"000", -- 0x354: "000000" & X"000", -- 0x355: "000000" & X"000", -- 0x356: "000000" & X"000", -- 0x357: "000000" & X"000", -- 0x358: "000000" & X"000", -- 0x359: "000000" & X"000", -- 0x35A: "000000" & X"000", -- 0x35B: "000000" & X"000", -- 0x35C: "000000" & X"000", -- 0x35D: "000000" & X"000", -- 0x35E: "000000" & X"000", -- 0x35F: "000000" & X"000", -- 0x360: "000000" & X"000", -- 0x361: "000000" & X"000", -- 0x362: "000000" & X"000", -- 0x363: "000000" & X"000", -- 0x364: "000000" & X"000", -- 0x365: "000000" & X"000", -- 0x366: "000000" & X"000", -- 0x367: "000000" & X"000", -- 0x368: "000000" & X"000", -- 0x369: "000000" & X"000", -- 0x36A: "000000" & X"000", -- 0x36B: "000000" & X"000", -- 0x36C: "000000" & X"000", -- 0x36D: "000000" & X"000", -- 0x36E: "000000" & X"000", -- 0x36F: "000000" & X"000", -- 0x370: "000000" & X"000", -- 0x371: "000000" & X"000", -- 0x372: "000000" & X"000", -- 0x373: "000000" & X"000", -- 0x374: "000000" & X"000", -- 0x375: "000000" & X"000", -- 0x376: "000000" & X"000", -- 0x377: "000000" & X"000", -- 0x378: "000000" & X"000", -- 0x379: "000000" & X"000", -- 0x37A: "000000" & X"000", -- 0x37B: "000000" & X"000", -- 0x37C: "000000" & X"000", -- 0x37D: "000000" & X"000", -- 0x37E: "000000" & X"000", -- 0x37F: "000000" & X"000", -- 0x380: "000000" & X"000", -- 0x381: "000000" & X"000", -- 0x382: "000000" & X"000", -- 0x383: "000000" & X"000", -- 0x384: "000000" & X"000", -- 0x385: "000000" & X"000", -- 0x386: "000000" & X"000", -- 0x387: "000000" & X"000", -- 0x388: "000000" & X"000", -- 0x389: "000000" & X"000", -- 0x38A: "000000" & X"000", -- 0x38B: "000000" & X"000", -- 0x38C: "000000" & X"000", -- 0x38D: "000000" & X"000", -- 0x38E: "000000" & X"000", -- 0x38F: "000000" & X"000", -- 0x390: "000000" & X"000", -- 0x391: "000000" & X"000", -- 0x392: "000000" & X"000", -- 0x393: "000000" & X"000", -- 0x394: "000000" & X"000", -- 0x395: "000000" & X"000", -- 0x396: "000000" & X"000", -- 0x397: "000000" & X"000", -- 0x398: "000000" & X"000", -- 0x399: "000000" & X"000", -- 0x39A: "000000" & X"000", -- 0x39B: "000000" & X"000", -- 0x39C: "000000" & X"000", -- 0x39D: "000000" & X"000", -- 0x39E: "000000" & X"000", -- 0x39F: "000000" & X"000", -- 0x3A0: "000000" & X"000", -- 0x3A1: "000000" & X"000", -- 0x3A2: "000000" & X"000", -- 0x3A3: "000000" & X"000", -- 0x3A4: "000000" & X"000", -- 0x3A5: "000000" & X"000", -- 0x3A6: "000000" & X"000", -- 0x3A7: "000000" & X"000", -- 0x3A8: "000000" & X"000", -- 0x3A9: "000000" & X"000", -- 0x3AA: "000000" & X"000", -- 0x3AB: "000000" & X"000", -- 0x3AC: "000000" & X"000", -- 0x3AD: "000000" & X"000", -- 0x3AE: "000000" & X"000", -- 0x3AF: "000000" & X"000", -- 0x3B0: "000000" & X"000", -- 0x3B1: "000000" & X"000", -- 0x3B2: "000000" & X"000", -- 0x3B3: "000000" & X"000", -- 0x3B4: "000000" & X"000", -- 0x3B5: "000000" & X"000", -- 0x3B6: "000000" & X"000", -- 0x3B7: "000000" & X"000", -- 0x3B8: "000000" & X"000", -- 0x3B9: "000000" & X"000", -- 0x3BA: "000000" & X"000", -- 0x3BB: "000000" & X"000", -- 0x3BC: "000000" & X"000", -- 0x3BD: "000000" & X"000", -- 0x3BE: "000000" & X"000", -- 0x3BF: "000000" & X"000", -- 0x3C0: "000000" & X"000", -- 0x3C1: "000000" & X"000", -- 0x3C2: "000000" & X"000", -- 0x3C3: "000000" & X"000", -- 0x3C4: "000000" & X"000", -- 0x3C5: "000000" & X"000", -- 0x3C6: "000000" & X"000", -- 0x3C7: "000000" & X"000", -- 0x3C8: "000000" & X"000", -- 0x3C9: "000000" & X"000", -- 0x3CA: "000000" & X"000", -- 0x3CB: "000000" & X"000", -- 0x3CC: "000000" & X"000", -- 0x3CD: "000000" & X"000", -- 0x3CE: "000000" & X"000", -- 0x3CF: "000000" & X"000", -- 0x3D0: "000000" & X"000", -- 0x3D1: "000000" & X"000", -- 0x3D2: "000000" & X"000", -- 0x3D3: "000000" & X"000", -- 0x3D4: "000000" & X"000", -- 0x3D5: "000000" & X"000", -- 0x3D6: "000000" & X"000", -- 0x3D7: "000000" & X"000", -- 0x3D8: "000000" & X"000", -- 0x3D9: "000000" & X"000", -- 0x3DA: "000000" & X"000", -- 0x3DB: "000000" & X"000", -- 0x3DC: "000000" & X"000", -- 0x3DD: "000000" & X"000", -- 0x3DE: "000000" & X"000", -- 0x3DF: "000000" & X"000", -- 0x3E0: "000000" & X"000", -- 0x3E1: "000000" & X"000", -- 0x3E2: "000000" & X"000", -- 0x3E3: "000000" & X"000", -- 0x3E4: "000000" & X"000", -- 0x3E5: "000000" & X"000", -- 0x3E6: "000000" & X"000", -- 0x3E7: "000000" & X"000", -- 0x3E8: "000000" & X"000", -- 0x3E9: "000000" & X"000", -- 0x3EA: "000000" & X"000", -- 0x3EB: "000000" & X"000", -- 0x3EC: "000000" & X"000", -- 0x3ED: "000000" & X"000", -- 0x3EE: "000000" & X"000", -- 0x3EF: "000000" & X"000", -- 0x3F0: "000000" & X"000", -- 0x3F1: "000000" & X"000", -- 0x3F2: "000000" & X"000", -- 0x3F3: "000000" & X"000", -- 0x3F4: "000000" & X"000", -- 0x3F5: "000000" & X"000", -- 0x3F6: "000000" & X"000", -- 0x3F7: "000000" & X"000", -- 0x3F8: "000000" & X"000", -- 0x3F9: "000000" & X"000", -- 0x3FA: "000000" & X"000", -- 0x3FB: "000000" & X"000", -- 0x3FC: "000000" & X"000", -- 0x3FD: "000000" & X"000", -- 0x3FE: "110000" & X"032" -- 0x3FF: JMP 0x032 ); signal jtag_ld_clk : STD_LOGIC; signal jtag_ld_we : STD_LOGIC; signal jtag_ld_addr : inst_addr_t; signal jtag_ld_dout : inst_t; signal jtag_ld_din : inst_t; signal bs_rst, bs_sel, bs_shift, bs_tdi, bs_tdo : std_logic; signal bs_capture, bs_clk0, bs_clk1, bs_update0, bs_update1 : std_logic; signal user_regi, user_rego : unsigned (31 downto 0); constant id : unsigned (31 downto 0) := X"BABE" & X"BEEF"; begin -------------------------------------------------------------------------- -- Virtex-4: JTAG Loader -------------------------------------------------------------------------- i00_BUFG : BUFG port map ( O => bs_clk1, I => bs_clk0 ); i01_BUFG : BUFG port map ( O => bs_update1, I => bs_update0 ); BSCAN_VIRTEX4_inst1 : BSCAN_VIRTEX4 generic map ( JTAG_CHAIN => 1 -- Value to set BSCAN site of device. Possible values: (1,2,3 or 4) ) port map ( CAPTURE => bs_capture, -- CAPTURE output from TAP controller DRCK => bs_clk0, -- Data register output for USER functions RESET => bs_rst, -- Reset output from TAP controller SEL => bs_sel, -- USER active output SHIFT => bs_shift, -- SHIFT output from TAP controller TDI => bs_tdi, -- TDI output from TAP controller UPDATE => bs_update0, -- UPDATE output from TAP controller TDO => bs_tdo -- Data input for USER function ); jtag_ld_addr <= user_regi(user_regi'left downto user_regi'left-inst_addr_t'length+1); jtag_ld_din <= user_regi(inst_t'length-1 downto 0); jtag_ld_clk <= bs_update1; jtag_ld_we <= bs_sel; sipo: process (bs_rst, bs_clk1, bs_tdi, bs_shift) begin if bs_rst = '1' then user_regi <= (others => '0'); elsif rising_edge(bs_clk1) then if bs_shift = '1' then user_regi <= bs_tdi & user_regi(user_regi'left downto 1); end if; end if; end process; piso: process (bs_rst, bs_clk1, bs_shift, user_rego) begin bs_tdo <= user_rego(0); if bs_rst = '1' then user_rego <= (others => '0'); elsif rising_edge(bs_clk1) then if bs_shift = '1' then user_rego <= user_rego(0) & user_rego(user_rego'left downto 1); else user_rego <= (user_rego'left downto inst_t'length => '0') & jtag_ld_dout; -- user_rego <= id; end if; end if; end process; -------------------------------------------------------------------------- -- ROM Read/Write -------------------------------------------------------------------------- PROM_READ: process(clk, ce) begin if rising_edge(clk) and ce = '1' then dout <= imem_rom(to_integer(addr)); end if; end process; PROM_WRITE: process(jtag_ld_clk, jtag_ld_we) begin if rising_edge(jtag_ld_clk) then if jtag_ld_we = '1' then imem_rom(to_integer(jtag_ld_addr)) <= jtag_ld_din; else jtag_ld_dout <= imem_rom(to_integer(jtag_ld_addr)); end if; end if; end process; -------------------------------------------------------------------------- end loadable;