Na dzień dzisiejszy wygląda to tak.
Generator sygnału VGA 1024x768@60Hz
Generator znaków (czcionka 8bit atari), znaki są wrzucona z bitmapy znalezionej w sieci, bitmapa rozdzielczość 128x128, znaki 8x16.
Jedynie co trzeba zrobić przy podmiance znaków to, skonwertować do BMP 1 bit, hexeditorem wywalić nagłówki i odwrócić kolejność lini. Pliki BMP zapisywane są od dołu.
Dołożona jest pamięć RAM 4kB na bufor znaków, wykorzystane jest tylko 3200 komórek pamięci, reszta do wykorzystania jako rejestry konfiguracyjne: kolor tła, kolor ramki, kolor czcionki, współrzędne kursora, kształt kursora, itp...
Do zrobienia jest, kursor, obsługa klawiatury USB/PS2, interfejs stacji fdd3000 i logika terminala.
Interfejs VGA wygląda tak:
ENTITY VGA is
port(
DATA: IN STD_LOGIC_VECTOR(7 downto 0);
ADDR: IN STD_LOGIC_VECTOR(12 downto 0);
WE: IN STD_LOGIC;
R: OUT STD_LOGIC;
G: OUT STD_LOGIC;
B: OUT STD_LOGIC;
VSYNC: OUT STD_LOGIC;
HSYNC: OUT STD_LOGIC;
CLK: IN STD_LOGIC;
RST: IN STD_LOGIC
);
end VGA;
czyli:
DATA 8 bitów
ADDR 12 bitów
EN 1 bit enable
tymi wejściami zapisujemy bezpośrednio w pamięci tekst do wyświetlenia, oraz do rejestrów konfiguracyjnych.
R,G,B,VSYNC,HSYNC - wyjście VGA, Na płytce mam tylko 3 bitowe VGA, można uzyskać tylko 8 kolorów. Optymalne było by 4 bitowe - 16 kolorów.
CLK - wejście zegara, w moim przypadku 10MHz, układ ma PLL który generuje potrzebną częstotliwość.
Układ jest zajęty w 14%, w przypadku najsłabszego MAX10 będzie to około 65-70%, w razie czego kod można zsyntezować na innym środowisku pod inny układ, np. XILINX-a.