1 |
2 |
dilbert57 |
-- FILE NAME: bootrom.vhdl
|
2 |
|
|
-- ENTITY NAME: boot_rom
|
3 |
|
|
-- ARCHITECTURE NAME: behave
|
4 |
|
|
-- REVISION: A
|
5 |
|
|
--
|
6 |
|
|
-- DESCRIPTION: 64 byte x 8 bit ROM to down a Monitor
|
7 |
|
|
-- program on reset
|
8 |
|
|
--
|
9 |
|
|
--Written by John Kent for the micro8 processor
|
10 |
|
|
|
11 |
|
|
library ieee;
|
12 |
|
|
use ieee.std_logic_1164.all;
|
13 |
|
|
use ieee.std_logic_arith.all;
|
14 |
|
|
use ieee.std_logic_unsigned.all;
|
15 |
|
|
|
16 |
|
|
library work;
|
17 |
|
|
-- use work.memory.all;
|
18 |
|
|
|
19 |
|
|
entity boot_rom is
|
20 |
|
|
port (
|
21 |
|
|
addr : in std_logic_vector(5 downto 0);
|
22 |
|
|
data : out std_logic_vector(7 downto 0)
|
23 |
|
|
);
|
24 |
|
|
end entity boot_rom;
|
25 |
|
|
|
26 |
|
|
architecture basic of boot_rom is
|
27 |
|
|
constant width : integer := 8;
|
28 |
|
|
constant memsize : integer := 64;
|
29 |
|
|
|
30 |
|
|
type rom_array is array(0 to memsize-1) of std_logic_vector(width-1 downto 0);
|
31 |
|
|
|
32 |
|
|
constant rom_data : rom_array :=
|
33 |
|
|
( "10011100", -- $FFC0 - 9C RESET RSP
|
34 |
|
|
"10100110", "00010001", -- $FFC1 - A6 11 LDA #$11
|
35 |
|
|
"10110111", "00010000", -- $FFC3 - B7 10 STA ACIACS
|
36 |
|
|
"10101110", "00000000", -- $FFC5 - AE 00 LDX #$00
|
37 |
|
|
"11010110", "11111111", "11100010", -- $FFC7 - D6 FFE2 LOOP0 LDA $FFE0,X
|
38 |
|
|
"00100111", "00001000", -- $FFCA - 27 08 BEQ INPUT
|
39 |
|
|
"00000011", "00010000", "11111101", -- $FFCC - 03 10 FD LOOP1 BRCLR 1,$10,LOOP1
|
40 |
|
|
"10110111", "00010001", -- $FFCF - B7 11 STA ACIADA
|
41 |
|
|
"01011100", -- $FFD1 - 5C INCX
|
42 |
|
|
"00100000", "11110011", -- $FFD3 - 20 F3 BRA LOOP0
|
43 |
|
|
"00000001", "00010000", "11111101", -- $FFD5 - 01 10 FD INPUT BRCLR 0,$10,INPUT
|
44 |
|
|
"10110110", "00010001", -- $FFD7 - B6 11 LDA ACIADA
|
45 |
|
|
"11001101", "11111111", "11011111", -- $FFD9 - CD FFDF JSR SUBR
|
46 |
|
|
"11001100", "11111111", "11000000", -- $FFDC - CC FFC0 JMP RESET
|
47 |
|
|
"10110111", "00010001", -- $FFDF - B7 11 SUBR STA ACIADA
|
48 |
|
|
"10000001", -- $FFE1 - 81 RTS
|
49 |
|
|
"01001000", "01100101", "01101100", -- $FFE2 - 48 65 6c MSG FCC "Hel"
|
50 |
|
|
"01101100", "01101111", "00100000", -- $FFE5 - 6c 6f 20 FCC "lo "
|
51 |
|
|
"01010111", "01101111", "01110010", -- $FFE8 - 57 6f 72 FCC "Wor"
|
52 |
|
|
"01101100", "01100100", -- $FFEB - 6c 64 FCC "ld"
|
53 |
|
|
"00001010", "00001101", "00000000", -- $FFED - 0a 0d 00 FCB LF,CR,NULL
|
54 |
|
|
"11111111", "11000000", -- $FFF0 - FF C0 FDB RESET
|
55 |
|
|
"11111111", "11000000", -- $FFF2 - FF C0 FDB RESET
|
56 |
|
|
"11111111", "11000000", -- $FFF4 - FF C0 FDB RESET
|
57 |
|
|
"11111111", "11000000", -- $FFF6 - FF C0 FDB RESET
|
58 |
|
|
"11111111", "11000000", -- $FFF8 - FF C0 FDB RESET
|
59 |
|
|
"11111111", "11000000", -- $FFFA - FF C0 FDB RESET
|
60 |
|
|
"11111111", "11000000", -- $FFFC - FF C0 FDB RESET
|
61 |
|
|
"11111111", "11000000" -- $FFFE - FF C0 FDB RESET
|
62 |
|
|
);
|
63 |
|
|
begin
|
64 |
|
|
data <= rom_data(conv_integer(addr));
|
65 |
|
|
end architecture basic;
|
66 |
|
|
|
67 |
|
|
|