093
12.08.2007, 22:08 Uhr
FanDjango
|
Weil mein am CP/M System angeschlossenes VT100 Programm laufend abstürzt, bin ich gerade dabei zu versuchen mit einem 2KRAM, einem CharGen EPROM (auch 2K) und einem XILINX XC9572 und einem ATMEGA32 ein Terminal zu bauen, das VGA Ausgang hat, PS/2 KBD Eingang hat und mit auf die Z80 Platine passt. Also ein wenig abgelenkt vom Wesentlichen. Ich sehe schon Linien und Quadrate auf dem Monitor - gewählt habe ich die Auflösung des alten IBM MGA, 720 x 400 (350 war es eigentlich). Gibt 25x80 bei 9x16 char matrix. Der LCD Schirm erkennt es leidlich, man kann es gut einstellen, allerdings muss man es bei meinem Teil manuell machen.
Dann passt aber keine CF Schnittstelle mehr drauf. Und ein BUS-System welcher Art und mehrere Platinen steckbar will ich auch nicht. Hmpf. Das wird eng.
Das von www.tvterminal.de gekaufte Ding hat leider nur 50 Spalten pro Zeile, das ist sehr mau bei CP/M, noch nicht einmal DIR *.* sieht so doll aus. Also ich zieh das durch - nicht jeder hat so ne dolle GRIP am Bus. 4 Chips - oder ich investiere in so einen neumodischen Spartan oder sowas, aber 3.3 oder 2.5 Volt? eeek? Kommt nicht in die Tüte...
Hier die VHDL Datei so wie sie bis jetzt aussieht:
Quellcode: | library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity clocks is Port ( clk30_in : in STD_LOGIC; pix7 : in STD_LOGIC; pix6 : in STD_LOGIC; pix5 : in STD_LOGIC; pix4 : in STD_LOGIC; pix3 : in STD_LOGIC; pix2 : in STD_LOGIC; pix1 : in STD_LOGIC; pix0 : in STD_LOGIC; vid_out :out STD_LOGIC; hb_out : out STD_LOGIC; hs_out : out STD_LOGIC; vs_out : out STD_LOGIC); end clocks;
architecture Behavioral of clocks is
signal horizontal_counter : STD_LOGIC_VECTOR (9 downto 0) := "0000000000"; -- 0..959 signal vertical_counter : STD_LOGIC_VECTOR (9 downto 0) := "0000000000"; -- 0..433 signal hb : STD_LOGIC := '0'; signal vb : STD_LOGIC := '0'; signal gen : STD_LOGIC_VECTOR (3 downto 0);
begin process (clk30_in) begin if Rising_Edge(clk30_in) then horizontal_counter <= horizontal_counter + "0000000001";
if horizontal_counter = "0001110000" then -- 70h 112 hs_out <= '1'; end if; if horizontal_counter = "0010110000" then -- B0h 112+64 hb <= '1'; hb_out <= '1'; end if; if horizontal_counter = "1110000000" then -- 380h 960-64 hb <= '0'; hb_out <= '0'; end if; if horizontal_counter = "1111000000" then -- 3C0h 960 horizontal_counter <= "0000000000"; vertical_counter <= vertical_counter + "0000000001"; hs_out <= '0'; end if;
if vertical_counter = "0000010000" then -- 10h 16 vs_out <= '1'; end if; if vertical_counter = "0000010100" then -- 14h 16+4 vb <= '1'; end if; if vertical_counter = "0110100011" then -- 1A3h 434-15 vb <= '0'; end if; if vertical_counter = "0110110010" then -- 1B2h 434 vertical_counter <= "0000000000"; vs_out <= '0'; end if; if vb = '1' and hb = '1' then gen <= gen + "0001"; if gen = "1001" then gen <= "0000"; end if; case gen is when "0000" => vid_out <= pix0; when "0001" => vid_out <= pix1; when "0010" => vid_out <= pix2; when "0011" => vid_out <= pix3; when "0100" => vid_out <= pix4; when "0101" => vid_out <= pix5; when "0110" => vid_out <= pix6; when "0111" => vid_out <= pix7; when "1000" => vid_out <= pix7; when others => vid_out <= '0'; end case; else vid_out <= '0'; end if; end if; end process;
end Behavioral;
|
Naja, es fehlt noch Adressbus rein, Logik rauszus für Austastlücke Vertikal, so daß Memory Zugriffe keine Spuren hinterlassen, etc. Der Testweise verwendete XC9636 ist voll. Also XC9572 als nächstes.
Bei der Gelegenheit habe ich gesehen, das es bei www.opencores.org einen Core names T80 gibt, der einen in VHDL kodierten Z80 in einen XILINX Spartan "neiklatscht". Läuft dann mit 25-35 MHz. Nächste Jahr mal probieren... vielleicht. In den XC9572, der größte noch 5V Baustein, geht aber nicht viel rein.
Altera mit seinem EPM7128S... wäre noch ein Quäntchen höher.
Reicht aber immer noch nicht für eine Z80.
Mit einem VIRTEX von XILINX könnte ich in den MGA Video Adapter das RAM und das CHARGEN ROM gleich mit rein tun, inklusive VT100 Befehlssatz. Habt Ihr mal gecheckt was ein VIRTEX Chip kostet? Da fädelt man ja lieber.
Jetzt geht's erst mal ein Paar Tage in Urlaub.
Grüße, Mike -- Ich löte noch.... Dieser Post wurde am 12.08.2007 um 22:17 Uhr von FanDjango editiert. |