And for the fun the scheduler ROM of the VIC-II :
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY video_vicII_rom_sched IS
PORT(
-- ROM clock
clock : IN STD_LOGIC;
-- ROM address
addr : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
-- ROM read enable
rdena : IN STD_LOGIC;
-- ROM data
dout : OUT STD_LOGIC_VECTOR(29 DOWNTO 0)
);
END video_vicII_rom_sched;
ARCHITECTURE rtl of video_vicII_rom_sched IS
TYPE ROM_type IS ARRAY(0 TO 255) OF STD_LOGIC_VECTOR(29 DOWNTO 0);
CONSTANT sched_rom : ROM_type :=
(
------------------------------------
-- NTSC chip (65 cycles per line) --
------------------------------------
-- cycle: access: hcount:
"001110010111111110000000000100", -- 13/14 VIC 000 \
"001110010111111110000000000000", -- 13/14 CPU 004 | Refresh
"001110000111111110000000000100", -- 15 VIC 008 /
"001110000111111110000000000001", -- 15 CPU 00C \
"001110000111111110000000000010", -- 16 VIC 010 |
"001110000111111110000000000001", -- 16 CPU 014 |
"001110000111111110000000000010", -- 17 VIC 018 |
"001110000111111110000000000001", -- 17 CPU 01C |
"001110000111111110000000000010", -- 18 VIC 020 |
"001110000111111110000000000001", -- 18 CPU 024 |
"001110000111111110000000000010", -- 19 VIC 028 |
"001110000111111110000000000001", -- 19 CPU 02C |
"001110000111111110000000000010", -- 20 VIC 030 |
"001110000111111110000000000001", -- 20 CPU 034 |
"001110000111111110000000000010", -- 21 VIC 038 |
"001110000111111110000000000001", -- 21 CPU 03C |
"001110000111111110000000000010", -- 22 VIC 040 |
"001110000111111110000000000001", -- 22 CPU 044 |
"001110000111111110000000000010", -- 23 VIC 048 |
"001110000111111110000000000001", -- 23 CPU 04C |
"001110000111111110000000000010", -- 24 VIC 050 |
"001110000111111110000000000001", -- 24 CPU 054 |
"001110000111111110000000000010", -- 25 VIC 058 |
"001110000111111110000000000001", -- 25 CPU 05C |
"001110000111111110000000000010", -- 26 VIC 060 |
"001110000111111110000000000001", -- 26 CPU 064 |
"001110000111111110000000000010", -- 27 VIC 068 |
"001110000111111110000000000001", -- 27 CPU 06C |
"001110000111111110000000000010", -- 28 VIC 070 |
"001110000111111110000000000001", -- 28 CPU 074 |
"001110000111111110000000000010", -- 29 VIC 078 |
"001110000111111110000000000001", -- 29 CPU 07C |
"011110000111111110000000000010", -- 30 VIC 080 |
"011110000111111110000000000001", -- 30 CPU 084 |
"011110000111111110000000000010", -- 31 VIC 088 |
"011110000111111110000000000001", -- 31 CPU 08C |
"011110000111111110000000000010", -- 32 VIC 090 |
"011110000111111110000000000001", -- 32 CPU 094 |
"011111000111111110000000000010", -- 33 VIC 098 |
"011110000111111110000000000001", -- 33 CPU 09C |
"011110000111111110000000000010", -- 34 VIC 0A0 |
"000110000111111110000000000001", -- 34 CPU 0A4 | 40 characters fetch
"000110000111111110000000000010", -- 35 VIC 0A8 |
"000110000111111110000000000001", -- 35 CPU 0AC |
"000110000111111110000000000010", -- 36 VIC 0B0 |
"001110000111111110000000000001", -- 36 CPU 0B4 |
"001110000111111110000000000010", -- 37 VIC 0B8 |
"001110000111111110000000000001", -- 37 CPU 0BC |
"001110000111111110000000000010", -- 38 VIC 0C0 |
"001110000111111110000000000001", -- 38 CPU 0C4 |
"001110000111111110000000000010", -- 39 VIC 0C8 |
"001110000111111110000000000001", -- 39 CPU 0CC |
"001110000111111110000000000010", -- 40 VIC 0D0 |
"001110000111111110000000000001", -- 40 CPU 0D4 |
"001110000111111110000000000010", -- 41 VIC 0D8 |
"001110000111111110000000000001", -- 41 CPU 0DC |
"001110000111111110000000000010", -- 42 VIC 0E0 |
"001110000111111110000000000001", -- 42 CPU 0E4 |
"001110000111111110000000000010", -- 43 VIC 0E8 |
"001110000111111110000000000001", -- 43 CPU 0EC |
"001110000111111110000000000010", -- 44 VIC 0F0 |
"001110000111111110000000000001", -- 44 CPU 0F4 |
"001110000111111110000000000010", -- 45 VIC 0F8 |
"001110000111111110000000000001", -- 45 CPU 0FC |
"001110000111111110000000000010", -- 46 VIC 100 |
"001110000111111110000000000001", -- 46 CPU 104 |
"001110000111111110000000000010", -- 47 VIC 108 |
"001110000111111110000000000001", -- 47 CPU 10C |
"001110000111111110000000000010", -- 48 VIC 110 |
"001110000111111110000000000001", -- 48 CPU 114 |
"001110000111111110000000000010", -- 49 VIC 118 |
"001110000111111110000000000001", -- 49 CPU 11C |
"001110000111111110000000000010", -- 50 VIC 120 |
"001110000111111110000000000001", -- 50 CPU 124 |
"001110000111111110000000000010", -- 51 VIC 128 |
"001110000111111110000000000001", -- 51 CPU 12C |
"001110000111111110000000000010", -- 52 VIC 130 |
"001110000111111110000000000001", -- 52 CPU 134 |
"001110000111111110000000000010", -- 53 VIC 138 |
"001110000111111110000000000001", -- 53 CPU 13C |
"001110000111111110000000000010", -- 54 VIC 140 |
"001110000111111110000000000001", -- 54 CPU 144 |
"001110000111111110000000010010", -- 55 VIC 148 /
"001110000111111111000000010000", -- 55 CPU 14C \
"001110000111111111000000011000", -- 56 VIC 150 |
"001110000111111111000000010000", -- 56 CPU 154 |
"001110000111111101000000001000", -- 57 VIC 158 |
"001110000111111101000000000000", -- 57 CPU 15C | Idle cycles
"001110000111111101000000001000", -- 58 VIC 160 |
"001110000111111101000000000000", -- 58 CPU 164 |
"001110000111111001000000001000", -- 59 VIC 168 |
"001110000111111001000000000000", -- 59 CPU 16C /
"001110001111111001000000100000", -- 60 VIC 170 \
"001110000111111001000001000000", -- 60 CPU 174 | Sprite #0 fetch
"001110000111110001000010000000", -- 61 VIC 178 |
"001110000111110001000100000000", -- 61 CPU 17C /
"001110000111110011001000100000", -- 62 VIC 180 \
"001110000111110011001001000000", -- 62 CPU 184 | Sprite #1 fetch
"011110000111100011001010000000", -- 63 VIC 188 |
"011110000111100011001100000000", -- 63 CPU 18C /
"011110000111100111010000100000", -- 64 VIC 190 \
"011100000111100111010001000000", -- 64 CPU 194 | Sprite #2 fetch
"011100000111000111010010000000", -- 65 VIC 198 |
"011100100111000111010100000000", -- 65 CPU 19C /
"011100000111001111011000100000", -- 01 VIC 1A0 \
"011100000111001111011001000000", -- 01 CPU 1A4 | Sprite #3 fetch
"000000000110001111011010000000", -- 02 VIC 1A8 |
"000000000110001111011100000000", -- 02 CPU 1AC /
"000000000110011111100000100000", -- 03 VIC 1B0 \
"000000000110011111100001000000", -- 03 CPU 1B4 | Sprite #4 fetch
"001000000100011111100010000000", -- 04 VIC 1B8 |
"001000000100011111100100000000", -- 04 CPU 1BC /
"001000000100111111101000100000", -- 05 VIC 1C0 \
"001000000100111111101001000000", -- 05 CPU 1C4 | Sprite #5 fetch
"001100000000111111101010000000", -- 06 VIC 1C8 |
"001100000000111111101100000000", -- 06 CPU 1CC /
"101100000001111111110000100000", -- 07 VIC 1D0 \
"101100000001111111110001000000", -- 07 CPU 1D4 | Sprite #6 fetch
"101100000001111111110010000000", -- 08 VIC 1D8 |
"101100000001111111110100000000", -- 08 CPU 1DC /
"101100000011111111111000100000", -- 09 VIC 1E0 \
"001100000011111111111001000000", -- 09 CPU 1E4 | Sprite #7 fetch
"001100000011111111111010000000", -- 10 VIC 1E8 |
"001110000011111111111100000000", -- 10 CPU 1EC /
"001110000111111111000000000100", -- 11 VIC 1F0 \
"001110000111111111000000000000", -- 11 CPU 1F4 |
"001110000111111110000000000100", -- 12 VIC 1F8 | Refresh
"001110000111111110000000000000", -- 12 CPU 1FC /
------------------------------------
-- PAL chip (63 cycles per line) --
------------------------------------
<...>
);
BEGIN
PROCESS(clock, addr, rdena)
BEGIN
IF (rising_edge(clock)) AND (rdena = '1') THEN
dout <= sched_rom(conv_integer(addr));
END IF;
END PROCESS;
END rtl;
I "stole" it from this excellent document :
http://www.filegate.net/cbm/6-tech/pal_time.txt I am a bad guy :-D