📄 bootrom.vhdl
字号:
-- FILE NAME: bootrom.vhdl
-- ENTITY NAME: boot_rom
-- ARCHITECTURE NAME: behave
-- REVISION: A
--
-- DESCRIPTION: 128 byte x 8 bit ROM
-- to boot a Monitor program on reset
--
--Written by John Kent for the mc6809 processor
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
library work;
-- use work.memory.all;
entity boot_rom is
port (
addr : in std_logic_vector(6 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity boot_rom;
architecture basic of boot_rom is
constant width : integer := 8;
constant memsize : integer := 128;
type rom_array is array(0 to memsize-1) of std_logic_vector(width-1 downto 0);
constant rom_data : rom_array :=
(
"00010000", -- LDS #$F7FE
"11001110",
"11110111",
"11111110",
"10001110", -- LDX #$FF97
"11111111",
"10010111",
"00010000", -- LDY #$F000
"10001110",
"11110000",
"00000000",
"11000110", -- LDB #$61
"01100001",
"10100110", -- LDA ,X+ *** MOVELP
"10000000",
"10100111", -- STA ,Y+
"10100000",
"01011010", -- DECB
"00100110", -- BNE MOVELP
"11111001",
"01111110", -- JMP $F000
"11110000",
"00000000",
"10000110", -- LDA #$E0
"11100000",
"00011111", -- TFR A,DPR
"10001011",
"10001101", -- BSR WAITRDY
"01001001",
"10000110", -- LDA #$E0
"11100000",
"10010111", -- STA <$E016
"00010110",
"10001101", -- BSR WAITRDY
"01000011",
"10000110", -- LDA #$01
"00000001",
"10010111", -- STA <$E011
"00010001",
"10000110", -- LDA #$EF
"11101111",
"10010111", -- STA <$E017
"00010111",
"10001101", -- BSR WAITRDY
"00111001",
"00010000", -- LDY #$F800
"10001110",
"11111000",
"00000000",
"11000110", -- LDB #$7C
"01111100",
"10000110", -- LDA #$01 *** RDLP1
"00000001",
"10010111", -- STA <$E012
"00010010",
"11010111", -- STB <$E013
"00010011",
"10000110", -- LDA #$F4
"11110100",
"10010111", -- STA <$E014
"00010100",
"01001111", -- CLRA
"10010111", -- STA <$E015
"00010101",
"10001110", -- LDX #512
"00000010",
"00000000",
"10000110", -- LDA #$20
"00100000",
"10010111", -- STA <$E017
"00010111",
"10001101", -- BSR WAITRDY
"00011101",
"10001101", -- BSR WAITDRQ *** RDLP2
"00100110",
"10010110", -- LDA <$E010
"00010000",
"10100111", -- STA ,Y+
"10100000",
"00110000", -- LEAX -1,X
"00011111",
"10001100", -- CMPX #$0000
"00000000",
"00000000",
"00100110", -- BNE RDLP2
"11110011",
"10001101", -- BSR WAITRDY
"00001110",
"01011100", -- INCB
"11000001", -- CMPB #$80
"10000000",
"00100110", -- BNE RDLP1
"11010110",
"00001111", -- CLR <$E030
"00110000",
"01001111", -- CLRA
"00011111", -- TFR A,DPR
"10001011",
"01101110", -- JMP [$FFFE]
"10011111",
"11111111",
"11111110",
"10010110", -- LDA <$E017 *** WAITRDY
"00010111",
"00101011", -- BMI WAITRDY
"11111100",
"10010110", -- LDA <$E017
"00010111",
"10000101", -- BITA #$40
"01000000",
"00100111", -- BNE WAITRQY
"11110110",
"00111001", -- RTS
"10010110", -- LDA <$E017 *** WAITDRQ
"00010111",
"10000101", -- BITA #$08
"00001000",
"00100111", -- BEQ WAITDRQ
"11111010",
"00111001", -- RTS
"11111111", -- FDB $F800
"10000000",
"11111111", -- FDB $F800
"10000000",
"11111111", -- FDB $F800
"10000000",
"11111111", -- FDB $F800
"10000000"
);
begin
data <= rom_data(conv_integer(addr));
end architecture basic;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -