Ich bastele an einem Z280 ECB Bus System mit CP/M herum und ich tue das weil es mir Spaß macht. Ich hoffe damit erklärt zu haben warum ich nicht einfach $xyz nehme statt mit so einem veralteten Prozessor... Ich verwende sonst auch aktuelle Prozessoren..ist hier aber nicht das Thema. Ich möchte an den Z280 ein Ethernet Interface anhängen, gerne einen WIZnet5500 beispielsweise und ich könnte dafür gut ein Master-SPI Interface am Z280 gebrauchen. Gibt es einen Chip von der Stange der an einer Seite ein paar Busregister und auf der anderen Seite ein SPI Interface hat? Ich weiß, das ich einfach einen Atmel (oder was auch immer) programmieren kann und den verwenden, will ich aber so nicht. Ich weiß auch das ich mir mit VHDL ein paar Zeilen zusammenschreiben und ein CPLD dafür benutzen kann..kann ich aber (derzeit) nicht. Also nochmal, Ist Jemandem ein existierende fertiger Chip bekannt? Gruß, Holm
Bevor Du jetzt irgendeinen Vintage Chip von der Resterampe findest wäre doch ein programmierter ATMEGA328 o.ä. nicht so schlecht. Den gibt es stilecht in DIP, funktioniert mit 5V und geht auch ohne externen Quarz. Vielleicht kann man sogar einen alten Chip nachbilden?
Ich hätte zu Ende lesen sollen, ja, das hast du explizit ausgeschlossen, also sorry für den Beitrag.
Kann man machen. Man könnte aber auch einen LAN Chip mit 8bit Interface nehmen, oder? https://wiznet.tistory.com/entry/Ethernet-Interfaces Aber sich suche trotzdem noch weiter.
der TP3465 von National bzw. TI könnte brauchbar sein: https://www.mouser.com/datasheet/2/405/tp3465-449702.pdf Der Z80 wird zwar nicht aufgeführt, sollte sich aber über ein paar Logik-Gatter anbinden lassen.
Warum nicht WIZNET W5300 der hat gleich ein Paralell-Interface ?
Ich finde es leider nicht mehr, kann mich aber erinnern, als ich auf der suche nach der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259, 8284, 8288 usw. war von einem Hersteller die Rede, der diese auch baut, jedoch mit erweiterten Funktionen.
Mikki M. schrieb: > Warum nicht WIZNET W5300 der hat gleich ein Paralell-Interface ? Halte ich für den besten Vorschlag. Man gewinnt bei Parallel gegenüber SPI einiges an Geschwindigkeit. Der Urvater der Wiznet Familie, der W5100 ist auch dafür geeignet.
Mikki M. schrieb: > Warum nicht WIZNET W5300 Weil's den nicht als Arduino-Breakout-Board gibt...? Gruss Chregu
Christian M. schrieb: > Weil's den nicht als Arduino-Breakout-Board gibt...? Vielleicht weniger bekannt, aber es gibt die W5xxx Ethernet Module auch mit Parallel-Interface. So zum Beispiel: https://www.mouser.de/ProductDetail/WIZnet/WIZ810MJ?qs=sGAEpiMZZMu3sxpa5v1qrsjreC02GGxCI3OsNkRXFNA%3D
Sorry Chergu: Holzweg. Auch die ECB-Bus Karte mit dem SPI Interface gibts nicht als Arduino-Brakout Board. Aber trotzdem danke fürs "für dämlich halten". @Beobachter: Nein, isses nicht. Es gibt da noch einige andere Sachen mit SPI die ich gerne angesteuert hätte, z.B. eine Platine mit Samsung VFD die ich mal hier vorgestellt hatte. So ziemlich jede halbwegs aktuelle Peripherie kommt mit SPI oder I2C. Ja, es geht auch Software mit Bitbang, allerdings kann ich dann die im Z280 enthaltenen DMA Kanäle nicht verwenden. @pumuggl: 83C92A, ja hübsch, allerdings muß ich da mit dem gesamten TCP/IP Stack selber kämpfen, da kann ich auch den Am7990 (Lance) verbasteln. @Martin: DANKE!!, das Ding paßt wie die Faust aufs Auge. Mit Deiner Antwort hat sich der Post gelohnt. @Harald, ja, wer lesen kann ist klar im Vorteil. Abgesehen davon ist der Z280 ein 16 Bit Mikroprozessor mit MMU und getrenntem I/D Space mit bis zu 16Mbyte Adreßraum der immerhin mit 12,5Mhz (offziell) dahin kriecht. Kann das ein Atmega328? Nicht zuletzt UZI280 ( http://oldcomputers-ddns.org/public/pub/rechner/zilog/z280/uzi280/uzi280.html ) macht das System interessant. Der Z280 sollte ursprünglich mal als Z800 auf die Welt kommen. Danke an Alle, speziell an Martin. Gruß, Holm
...der TP3465 ist ziemlich schwer zu bekommen, ich habe mal eine Anfrage bei S-H-Halbleiter angeworfen, die haben den scheinbar da.. Beim Suchen bin ich aber auf diverse Verilog und VHDL Implementationen gestoßen, u.A. bei Lattice aber auch bei Digikey: https://www.digikey.com/eewiki/pages/viewpage.action?pageId=409609 ------------------------------------------------------------------------ -------- -- -- FileName: spi_master.vhd -- Dependencies: none -- Design Software: Quartus II Version 9.0 Build 132 SJ Full Version -- -- HDL CODE IS PROVIDED "AS IS." DIGI-KEY EXPRESSLY DISCLAIMS ANY -- WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A -- PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL DIGI-KEY -- BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL -- DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF -- PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS -- BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), -- ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS. -- -- Version History -- Version 1.0 7/23/2010 Scott Larson -- Initial Public Release -- Version 1.1 4/11/2013 Scott Larson -- Corrected ModelSim simulation error (explicitly reset clk_toggles signal) -- ------------------------------------------------------------------------ -------- LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; ENTITY spi_master IS GENERIC( slaves : INTEGER := 4; --number of spi slaves d_width : INTEGER := 2); --data bus width PORT( clock : IN STD_LOGIC; --system clock reset_n : IN STD_LOGIC; --asynchronous reset enable : IN STD_LOGIC; --initiate transaction cpol : IN STD_LOGIC; --spi clock polarity cpha : IN STD_LOGIC; --spi clock phase cont : IN STD_LOGIC; --continuous mode command clk_div : IN INTEGER; --system clock cycles per 1/2 period of sclk addr : IN INTEGER; --address of slave tx_data : IN STD_LOGIC_VECTOR(d_width-1 DOWNTO 0); --data to transmit miso : IN STD_LOGIC; --master in, slave out sclk : BUFFER STD_LOGIC; --spi clock ss_n : BUFFER STD_LOGIC_VECTOR(slaves-1 DOWNTO 0); --slave select mosi : OUT STD_LOGIC; --master out, slave in busy : OUT STD_LOGIC; --busy / data ready signal rx_data : OUT STD_LOGIC_VECTOR(d_width-1 DOWNTO 0)); --data received END spi_master; ARCHITECTURE logic OF spi_master IS TYPE machine IS(ready, execute); --state machine data type SIGNAL state : machine; --current state SIGNAL slave : INTEGER; --slave selected for current transaction SIGNAL clk_ratio : INTEGER; --current clk_div SIGNAL count : INTEGER; --counter to trigger sclk from system clock SIGNAL clk_toggles : INTEGER RANGE 0 TO d_width*2 + 1; --count spi clock toggles SIGNAL assert_data : STD_LOGIC; --'1' is tx sclk toggle, '0' is rx sclk toggle SIGNAL continue : STD_LOGIC; --flag to continue transaction SIGNAL rx_buffer : STD_LOGIC_VECTOR(d_width-1 DOWNTO 0); --receive data buffer SIGNAL tx_buffer : STD_LOGIC_VECTOR(d_width-1 DOWNTO 0); --transmit data buffer SIGNAL last_bit_rx : INTEGER RANGE 0 TO d_width*2; --last rx data bit location BEGIN PROCESS(clock, reset_n) BEGIN IF(reset_n = '0') THEN --reset system busy <= '1'; --set busy signal ss_n <= (OTHERS => '1'); --deassert all slave select lines mosi <= 'Z'; --set master out to high impedance rx_data <= (OTHERS => '0'); --clear receive data port state <= ready; --go to ready state when reset is exited ELSIF(clock'EVENT AND clock = '1') THEN CASE state IS --state machine WHEN ready => busy <= '0'; --clock out not busy signal ss_n <= (OTHERS => '1'); --set all slave select outputs high mosi <= 'Z'; --set mosi output high impedance continue <= '0'; --clear continue flag --user input to initiate transaction IF(enable = '1') THEN busy <= '1'; --set busy signal IF(addr < slaves) THEN --check for valid slave address slave <= addr; --clock in current slave selection if valid ELSE slave <= 0; --set to first slave if not valid END IF; IF(clk_div = 0) THEN --check for valid spi speed clk_ratio <= 1; --set to maximum speed if zero count <= 1; --initiate system-to-spi clock counter ELSE clk_ratio <= clk_div; --set to input selection if valid count <= clk_div; --initiate system-to-spi clock counter END IF; sclk <= cpol; --set spi clock polarity assert_data <= NOT cpha; --set spi clock phase tx_buffer <= tx_data; --clock in data for transmit into buffer clk_toggles <= 0; --initiate clock toggle counter last_bit_rx <= d_width*2 + conv_integer(cpha) - 1; --set last rx data bit state <= execute; --proceed to execute state ELSE state <= ready; --remain in ready state END IF; WHEN execute => busy <= '1'; --set busy signal ss_n(slave) <= '0'; --set proper slave select output --system clock to sclk ratio is met IF(count = clk_ratio) THEN count <= 1; --reset system-to-spi clock counter assert_data <= NOT assert_data; --switch transmit/receive indicator IF(clk_toggles = d_width*2 + 1) THEN clk_toggles <= 0; --reset spi clock toggles counter ELSE clk_toggles <= clk_toggles + 1; --increment spi clock toggles counter END IF; --spi clock toggle needed IF(clk_toggles <= d_width*2 AND ss_n(slave) = '0') THEN sclk <= NOT sclk; --toggle spi clock END IF; --receive spi clock toggle IF(assert_data = '0' AND clk_toggles < last_bit_rx + 1 AND ss_n(slave) = '0') THEN rx_buffer <= rx_buffer(d_width-2 DOWNTO 0) & miso; --shift in received bit END IF; --transmit spi clock toggle IF(assert_data = '1' AND clk_toggles < last_bit_rx) THEN mosi <= tx_buffer(d_width-1); --clock out data bit tx_buffer <= tx_buffer(d_width-2 DOWNTO 0) & '0'; --shift data transmit buffer END IF; --last data receive, but continue IF(clk_toggles = last_bit_rx AND cont = '1') THEN tx_buffer <= tx_data; --reload transmit buffer clk_toggles <= last_bit_rx - d_width*2 + 1; --reset spi clock toggle counter continue <= '1'; --set continue flag END IF; --normal end of transaction, but continue IF(continue = '1') THEN continue <= '0'; --clear continue flag busy <= '0'; --clock out signal that first receive data is ready rx_data <= rx_buffer; --clock out received data to output port END IF; --end of transaction IF((clk_toggles = d_width*2 + 1) AND cont = '0') THEN busy <= '0'; --clock out not busy signal ss_n <= (OTHERS => '1'); --set all slave selects high mosi <= 'Z'; --set mosi output high impedance rx_data <= rx_buffer; --clock out received data to output port state <= ready; --return to ready state ELSE --not end of transaction state <= execute; --remain in execute state END IF; ELSE --system clock to sclk ratio not met count <= count + 1; --increment counter state <= execute; --remain in execute state END IF; END CASE; END IF; END PROCESS; END logic; ...bekommt man das in ein EPM7032 oder 7064 ..70128 gegossen? Ich habe einige ältere CPLDs (passend zu 5V) da, müßte mal genauer nachsehen.. Gruß, Holm
holm schrieb: > Der Z280 sollte ursprünglich mal als > Z800 auf die Welt kommen. holm schrieb: > Der Z280 sollte ursprünglich mal als > Z800 auf die Welt kommen. Nicht als Z8000? Die DDR hatte ihn jedenfalls als U8000 im Programm.
Stilecht wäre ein CS8900 (parallel auf Ethernet). Der passt vom Bus Interface zum Z80. Man kann auch eine alte 8-Bit ISA Ethernetkarte plündern und auf ECB-Bus setzen. Warum der Umweg über SPI?
Der 74HC299 kann seriell-parallel und zurück. Du brauchst aber noch ne Ablaufsteuerung und Takt (4-Bit Zähler + einige Gatter).
Route_66 H. schrieb: > holm schrieb: >> Der Z280 sollte ursprünglich mal als >> Z800 auf die Welt kommen. > > holm schrieb: >> Der Z280 sollte ursprünglich mal als >> Z800 auf die Welt kommen. > > Nicht als Z8000? > Die DDR hatte ihn jedenfalls als U8000 im Programm. Nein, als Z800 genauso wie ich es schrieb. Eine DDR U8000 Maschine (EAW P8000 steht neben mir) Gruß, Holm
Für Ethernet auf 8051 hatten wir einen Chip von Cirrus verwendet. Der paßte ideal, da er auch einen ALE-Pin hatte für memory mapped.
Georg G. schrieb: > Stilecht wäre ein CS8900 (parallel auf Ethernet). Der passt vom > Bus > Interface zum Z80. > Man kann auch eine alte 8-Bit ISA Ethernetkarte plündern und auf ECB-Bus > setzen. > Warum der Umweg über SPI? Ich habe aber gar keinen Z80! ...auch wenn der Z280 rückwärtskompatibel zum Z80 ist. Warum nur schreibe ich länglich was ich möchte? Ich schrieb doch auch das ich mit der SPI noch andere Sachen vor habe. Die 128MB Flash Disk in dem Computer ist auch nicht stilecht. Ich habe hier mehrere alte Rechner, angefangen vom DDR Bürocomputer A5120 und dessen Derivate, über PC1715, diverse PDP11 wie auch eine russische Elektronika E60 und auch eine VAX4300 (läuft Alles). Darf ich mir bitte einen Rechner mit dem Z280 zum spielen so bauen wie ich mir das vorstelle? Gruß, Holm
@Peda..das dürfte der von Georg G. erwähnte CS8900 gewesen sein und der "Inhalt" einer SPI Schnittstelle ist mir im Wesentlichen bekannt. Ich wollte aber einen simpel zu handhabenden Peripheriechip..kein Kuchenblech aus einzelnen TTL. In der russischen Elektronika E60 ( ~LSI11) besteht die serielle Console Schnittstelle aus einzelnen TTL ICs, das enthält nur die Synchronisationslogik für den Asynchrontrnasfer zusätzlich...ja, das geht...auch, will ich aber nicht. Gruß, Holm
holm schrieb: > ...bekommt man das in ein EPM7032 oder 7064 ..70128 gegossen? Kenne die Altera Dinger nicht (soweit ich mich erinnere waren die im Fitting immer sehr störrisch), aber in ein XILINX XCR3128 (also 128 Makrozellen) passt das locker rein. Bei 64 Makrozellen könnte es knapp werden.
Ich habe in einer VM ein XP mit Altere MAX+II 10.2 Baseline und ich habe ein Altera Quartus 13.0sp1 (32bit) auf dem Rechner die erst mal nicht nach einer Erneuerung einer Lizenz rufen.. Mit dem Baseline bin ich auf die Schnelle nicht klar gekommen, das Ding will unbedingt mit einem Schematic Entry anfangen..es gibt aber da irgendwelche VHDL Plugins..offensichtlich muß ich aber Ein- und Ausgänge im Schematic Entry definieren ..hmm.. Ich habe nun mal das Quartus angeworfen MAX700S ausgewählt, das vhdl file gelade nund den Compiler angeworfen, erst hat er gemeckert das er 88 Register nicht in 64 Makrozellen unterbringen kann..verstehe ich. Ich habe dann ein EPM7128 mit PLCC84 ausgewählt aber ihm reichen da die 68 IO Pins nicht. Selbst mit einem QFP100 reichen die 86 nicht ...aber so viele wollt eich da gar nicht anschließen. Mal überschlagen: 8Bits für Daten, 3 Bits für Register, von mir aus noch 8 Bits für Steuersignale, 4 für CHIP Select Ausgänge und MISO,MOSI, SCK..sind in etwa 26 Pins die ich wirklich haben möchte. Ich halte deshalb 86 für etwas reichlich. Wenn nun Jemand mit 0 Ahnung wie ich in das VHDL File guckt, fällt da auf: slaves : INTEGER := 4; --number of spi slaves d_width : INTEGER := 2); --data bus width aber auch clk_div : IN INTEGER; --system clock cycles per 1/2 period of sclk addr : IN INTEGER; --address of slave ...wer erzählt hier wieviel Bit Interger ich da haben will? Wahrscheinlich Niemand. Ist das die Ursache für den wahnsinnigen IO-Bedarf? Ich habe ja Ein- und Ausgänge bisher nirgends definiert.. Was bedeutet d_with : INTEGER := 2; ? Theoretisch würde ich das für einen 2Bit Integer halten wollen... Gruß, Holm
Hallo Holm, bitte gerne. Bei meinem 68000 Rechner hatte ich mir das Dogma auferlegt, keine FPGAs oder CPLDs zu verbauen. Naja, machte das Ganze nicht einfacher. Man muss halt zusehen, wo man die ICs herbekommt. Ich habe mir damals ein paar wenige Chips von www.utsource gekauft. Dort gibt's auch Chips, die schon abkündigt sind. z.B. auch den besagten TP3465. Bei dem Preis geht man auch kein großes Risiko ein. Sorry, ich dachte, Mouser hat die auch noch verfügbar. Scheinbar gibt's nur noch das Datenblatt. Gruß, Martin
Ja utsource hat die Dinger schon noch, $3,81 für Einzelstücke, hatte ich schon nachgesehen. Bei utsource hatte ich gestern erst bestellt ... :-| Bei Mouser war ich auch schon zu dem Null-Ergebnis gekommen. Ich habe eine von Tillman Reh designte CPU-280, das Ding steckt sowieso voller GALs ..was nichts anderes als kleine CPLDs sind, in so fern ist mir das eigentlich egal. Es kann nur passiere ndas das 2 oder 3 Leute mal nachbauen wollen was ich da mache, aber viele Leute klappen schon nach hinten um wenn da ein 0805 Widerstand auf der Platine sitzt...was mich hier aber nicht weiter stören würde. Das System als Solches läuft, derzeit mit 9,8304 Mhz und 4,915s Busclock weil ich keine ausreichend schnellen RAMs habe..genau die (4MB) sind auch Bestandteil der utsource Bestellung, dann läufts mit 12,5 respektive 6,25Mhz.. Ich habe eine alte Conitec GRIP4 für Display und Tastatur, schon da fallen Nachbauten wegen Verfügbarkeit aus. Ich möchte aber Netzwerk, ftp hauptsächlich, und ein paar GPIOs sowie halt ne SPI. Das von Dir ausgebuddelte Ding tut scheinbar Alles was ich mir wünsche, aber wenn ich eines der VHDL Designs in ein altes CPLD bekomme schadet das auch nicht, ich habe die CPLDs ja mal zum basteln angeschafft. Ein modernes FPGA zu benutzen ist Blödsinn, da paßt der ganze Rechner rein. Zeug wie ISPLSI1016,1032, EPM 3032,3064,7064,7160,XC9572 und -XL,sowie ATF1508 mit von 44 bis zu 100 Pins treiben sich hier herum, das muß sich doch da einfüllen lassen.. (Manche Chips sind so alt das die noch nicht mal JTAG kennen, aber man hat ja auch alte Programmer :-) ) Am meisten geht mir dabei die Lizenzpolitik aller Hersteller auf den Beutel die da der Meinung sind Ihre Software müsse jetzt veraltet sein, beim gleichzeitigen Fallenlassen der Unterstützung für alte OS und Devices. Man wird guasi gezwungen Lizenzen "irgendwo" aufzutreiben und Jahre zurück zu drehen. Danke ihr Idioten fürs ständige ärgern von Hobbyisten und fürs verschwenden von Resourcen! Ne vernünftige Hobbyist-License täte es auch! ..es würde mich aber ärgern ein 84poliges PLCC Teil dafür einsetzen zu müssen..ich werde mich wohl mal um ein VHDL Tutorial kümmern müssen. Gruß, Holm
holm schrieb: > wollte aber einen simpel zu handhabenden Peripheriechip..kein > Kuchenblech aus einzelnen TTL. Das wird kein Kuchenblech, sondern vielleicht 3..4 Logik-ICs. Kannst aber auch einen ATF16V8 für die Logik nehmen. Oder einen ATF750 (20 FFs), der dann gleich den 74HC299 ersetzt. Die ATF gibt es noch im DIP und sind 5V. Man braucht allerdings einen Programmer, z.B. GALEP. Die Gleichungen schreibt man mit WINCUPL, ist leicht zu erlernen. https://www.mouser.de/ProductDetail/Microchip-Technology-Atmel/ATF750CL-15PU?qs=sGAEpiMZZMuJNuO2s1hGZJOLqYzZpioSWz8WRO6seeU%3D
Peda der ATF16V8 ist ein GAL16V8..Gals sind mir nicht neu und ich habe nicht nur Wincupl irgendwo auf den Rechnern sondern auch mehrere GALEPs, einen ALL07 und anderes. Auch das "Atmel" aka Microchip die Dinger immer noch baut ist mir bekannt. Nichts desto trotz möchte ich stark bezweifeln das Du eine SPI Master Schnittstelle in einen 16V8 bekommst. Der Aufwand den Implementationen im Web da treiben ist viel höher, auch unser Lothar hat Derartiges auf seiner Webseite (was ich allerdings wegen seiner schrägen Ansichten zu Meinungsfreiheit und Moderation hier nicht benutzen werde). Gruß, Holm
holm schrieb: > Nichts desto trotz möchte ich stark bezweifeln das Du eine SPI Master > Schnittstelle in einen 16V8 bekommst. Das Schieben macht ja der 74HC299. Ein 3 Bit Zähler, bleiben noch 5 Macrozellen für die Ablaufsteuerung, das reicht dicke. Das /WR lädt das Register und startet den Zähler, nach 8 Takten (4MHz) stoppt er wieder. Man könnte auf ner 2 Adresse das Busy-Bit lesen, oder einfach die 8 Takte abwarten.
Ok, Du willst die Schieberegister extern anknoten... Ich hätte aber gerne eine vollständige SPI, d.h. Empfang eines Bytes wärend eines gesendet wird, Puffer sind hier auch keine schlechte Sache..deswegen ja die Idee das in ein etwas höher integriertes GAL zu verpflanzen und die SR gleich mit darin unterzubringen.. Gruß, Holm
pegel schrieb: > Ich finde es leider nicht mehr, kann mich aber erinnern, als ich > auf der > suche nach der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259, > 8284, 8288 usw. war von einem Hersteller die Rede, der diese auch baut, > jedoch mit erweiterten Funktionen. z.B.: Z84C4008 Der kann zumindest schonmal einen Syncron Modus. Das Interface ist halt Z80 Kompatibel mit 8Bit Datenbus, aber das sollte der Z280 eigentlich auch können. Und er ist immerhin noch lieferbar : https://www.mouser.de/ProductDetail/ZiLOG/Z84C4008PEG?qs=1C6%2FyOstnVsXfBMunrj5eg==
Du könntest einen Peripherial Interface Controller (PIC) verwenden. Das wäre sogar noch authentisch, denn die Dinger hat General Instruments Ende der 70'er für Peripheriesteuerungsaufgaben entwickelt. Der PIC16F74 hat genau dafür einen PSP Parallel Slave Port mit D0..D7, RD, WR und CS, und damit bindest Du das Teil an den Z80-Bus an. Ok, wenn Du ganz authentisch sein wolltest, würdest Du einen EPROM-basierten PIC16C74 (der ist aus der Zeit) nehmen, aber ich denke, die Zeit mit UV-Löschlampen etc ist auch bei Dir vorbei. Alternativen aus der Zeit waren 8042, 8048 und ähnliche, die es dann in die Tastaturcontroller der PCs schafften. fchk
Anbei mal ne einfache Schaltung mit 3 Logic-ICs. Bei /WR = 0 wird mit der nächsten CLK-Flanke IC4 mit den Daten geladen und der IC2 mit 1000b. IC2 zählt somit 8 weitere Takte und sperrt sich dann wieder. Dabei schiebt IC4 die Daten raus bzw. rein und geht danach in Hold. Mit /RD = 0 kann dann gelesen werden. In /RD, /WR müssen noch der Adreßdekoder und /MREQ, /M1 verknüpft werden.
>...der ganzen 82xx Serie von Intel war, 8237, 8254 ,8255, 8259, > 8284, 8288 usw. war von einem Hersteller... NEC hat diese Intel-Chips auch gebaut, später auch in CMOS-Ausführung, unter völlig anderen Typbezeichnungen.
:
Bearbeitet durch User
@peda: Du bist clever :-) Ich werde das bestimmt mal testen. @Christoph: Ich weiß das, nur macht keiner der Chips (DMA,PIT,PPI,INT-Contr,Clock-Gen,Status-Dec) das was ich gerne hätte. Auch die Russen haben die Dinger gebaut, beim 8237 bin ich mir da nicht sicher aber die 8257 gabs auf jeden Fall, dito mit 8254, den 8253A gabs auch. ..nur geht das völlig am Thema vorbei. Gruß, Holm
Falls du noch einen Z80-STI (MK3801) in deiner Z80-Sammlung hast, lässt sich damit vermutlich mit geringem Aufwand ein SPI-Master emulieren.
..nein, davon hab ich nur einen und der steckt auf einer Conitec GRIP-4 die ich gerade repariert habe, für die mir Conitec (danach) die Unterlagen geschickt hat, und mit deren Scan ich gerade befaßt bin... Gruß, Holm
Anbei noch ein SPI-Slave in CUPL auf dem ATF750. Man sieht da schön das Schieberegister mit parallel laden. Das kann man als Vorlage für einen SPI-Master verwenden. Das 8Bit-Ausgangslatch braucht man ja nicht, d.h. die 8 Macrozellen sind frei verfügbar für den 3Bit-Zähler und anderes.
In grauer Vorzeit habe ich im ATV750 eine Statemachine mit >64 states untergebracht, und das alles in CUPL unter DOS. Dilbert und seine Kollegen schwelgen auch in Erinnerungen... https://dilbert.com/strip/1990-12-14 http://www.w-uh.com/posts/101220-you_had_zeros.html
:
Bearbeitet durch User
Dilbert hilft mir hier nicht wirklich, aber ich kann ja zumindest die Steckverbinder mit Vaseline behandeln. Danke Peda, ich werde mal experimentieren und wahrscheinlich diesen Thread wieder ausgraben wenn ich konkrete Ergebnisse habe Gruß, Holm
Es war für mich damals Mitte der 90er das Problem, auf einer kleinen VME-Bus-Platine ein PLL-IC seriell anzusteuern. Da waren auch 74xx299 beteiligt, das ATV750 hat damit die Daten parallel vom VME-Bus übernommen und als SPI rausgeschoben. Derweil wurde der VME-Bus mit einem Busy-Signal angehalten.
Eberhard H. schrieb: > Falls du noch einen Z80-STI (MK3801) in deiner Z80-Sammlung hast, > lässt > sich damit vermutlich mit geringem Aufwand ein SPI-Master emulieren. Indessen sind mir 2 STI zugelaufen..auch wenn ich sicherlich mit einem Altera 70xx Dingens als erstes experimentieren werde und mir dazu pedas Geschichte näher ansehe (momentan warte ich erst mal auf die bestellten Platinen von JLCPCB, generische Prototypenkarte), mal spaßeshalber die Frage hier was Du damit vor hattest Eberhard? Im Prinzip ist da wohl ne halbe Z80 SIO drin (kann synchron und asnychron, wobei ich gelesen habe das sie die Synchron Bytes unterdrücken kann).... Was ich beim Lesen des Datenblattes auch mitbekommen habe ist, das der bekannte MC68901 ne für MC68k aufgebohrte/angepaßte STI ist..wußte ich bisher nicht. Gruß, Holm
Stimmt, der MK68901 ist ein 68K-Derivat des MK3801, ergänzt um DTACK und einen Oszillator für Quarzbetrieb. Später wurde er auch von Motorola, ST, Hitachi und Toshiba gebaut, sogar in HCMOS. 68901/68HC901 lassen sich ersatzweise per umschaltbarem Bus-Interface auch an den Z80 und andere CPUs anschließen. Je nach Geschwindigkeitsversion (2,5 MHz bis 8 MHz) sollte man mit dem USART von 3801/68901/68HC901 im SYNC-Mode und einigen I/O-Pins (desselben Bausteins) für das SPI-Handshaking mit wenig Softwareaufwand eine akzeptabel schnelle SPI-Schnittstelle emulieren* können, sicher nicht so schnell wie per FPGA/CPLD, dafür mit dem Z80-STI authentischer in einem Z80-System. Am Rande sei noch ein exotischer Vorgänger des MK3801 erwähnt, nämlich der MK3886 = Z80-COMBO (2,5 MHz und 4 MHz), dessen USART sogar mit bis zu 16 Bit Länge betrieben werden konnte. Allerdings fehlten ihm die I/O-Pins fürs Handshaking. Dafür besaß er noch 256 Byte SRAM, wovon 64 Byte per Batterie gepuffert werden konnten. * Mit einem der Z80-SIO ist das vermutlich nicht so einfach möglich (wenn überhaupt).
Na Handshake in dem Sinne brauchts bei SPI nicht, nur ein Chip Select Signal das auch aus einem anderen Peripherie-Chip kommen kann. Auch die Z80-Sio hat "frei programmierbare" IOs (weiß jetzt nicht mehr welche, CTS? RTS? DTR? steht im DB) Im Prinzip müßte das jeder UART können der auch den Sendetakt mit ausgibt und die gleichzeitig senden und Empfangen kann (sollte gegeben sein). Störend in Erscheinung treten da Start-, Paritäts- und Stopbits, das müßte man sich konkret mal ansehen (ggf. Gatter hinter TxD). Das Hauptproblem ist da wohl das das langsam wird, ne SIO kann wohl maximal 38k4 asynchron, andere Chips mit integriertem Baudratengenerator sind evtl. da schneller aber eine SPI wird gerne mit 2 Mhz oder mehr betrieben. Ich habe an ein (kommerzielles) Projekt eine 16550 kompatible Uart SC16IS740/750/760 über SPI angebunden (an einen XMega). Das wäre bei üblichen UART Geschwindigkeiten Unfug. Gruß, Holm
Nochmal wegen "Authentizität" des Systems.. darum gehts mir hier gar nicht. Ich habe eine Z280 am Wickel, also einen Nachfolger wie auch die Z180 (bis zu 33Mhz) oder eZ80 (50Mhz, was angeblich der Performance eines Z80 mit 150Mhz entspricht) es sind. Schon ab Z80 waren GALs auf den Boards nicht unüblich und ich habe mir die 96poligen DIN41612 Steckverbinder gerade aus Controllerboards eines Reel-to-Reel Streamers ausgelötet (weil ichs kann, ich habe eine DDR Minischwall Lötanlage) bei dem auch Altera CPLDs verbaut sind. Das ist also Alles irgendwie "authentisch". Das wird ein Maschinchen nur für mich zum spielen, ich bin da nur mir selbst verantwortlich... Gruß, Holm
Ich habe jetzt mal probiert Pedas Vorschlag in ein CPLD zu füllen (Altera EPM3032ALC44). Das Ganze mit Schematic Entry da ich für VHDL momentan noch zu doof bin. Unklar ist mir das Bauteil tribuf aus Alteras Bibliothek, ist das so gemeint das der Ausgang Tristate wird, wenn der Eingang TRI High ist? Einen 74LS125 kennt die Bibliothek leider nicht, dann hätte ich gewußt was ich vor mir habe. Das CPLD ist gerammelt voll, 32 von 32 Makrozellen benutzt, 2 Pins noch frei. Altera MAXII insistiert darauf die Schaltung als JPG exportieren zu müssen. Gruß, Holm
Anmerkung: Der BusClock des Z280 ist 6,144Mhz, deswegen teile ich den Takt erst noch durch 4. Gruß, Holm
Hallo Holm, ich verwende- da ich tausende davon noch auf Lager habe- die Lattice ISPLSI2032 mit 5V, deren -immer noch freie, aber auch jährlich neu zu beantragende- Oberfläche kommt-soweit ich das bislang erkennen konnte- NUR mit generischen Blöcken, d.h. überhaupt keine 74xxx 1:1 Äquivalente, dafür aber eine an die interne CPLD-Struktur angepasste Logik. Ich gehe mal davon aus, wenn Du Deine Lösung mithilfe solch generischer Blöcke umzeichnest (die manchmal in der Tat etwas gewöhnungsbedürftig sind und die Beschreibung auch bei Lattice alles Andere als ausführlich, aber dazu kann man ja simulieren, gell ;o, dann würde das auch bei Altera mit deutlich weniger Ressourcen gehen, oder eben mehr "Luxus" mit reinpassen. Bevor ich nun mit Anfragen überschüttet werde: NEIN, ich bin nicht am AB-Verkauf der Bausteine interessiert! Habe das gerade ausprobiert, bekomme ich LOCKER in ein 2032 rein, selbst mit Double-Buffering (d.h. Empfang eines 2.Bytes möglich, während das erste noch nicht abgeholt ist, ähnlich dem, wie es in den Microchip PICs auch gehandhabt wird... Nen noch tieferer FIFO und/oder auch in Schreibrichtung erfordert dann natürlich ein größeres CPLD... Empfang während Senden hingegen ist kein Problem, das gibt ja das Schieberegister selbst her. Interessanter wäre schon eine Konfigurationsmöglichkeit ähnlich der PIC-SPI Lösung, welche die 4 Möglichkeiten hinsichtlich Ruhepegel von CLK und Übernahme-Flanke noch berücksichtigt, sonst kann es sein, dass just genau DER SPI/Microwire-Chip, den Du dann mal ansteuern willst just das ANDERE Format nur unterstützt. Manche Implementierungen erlauben sogar die Umkehr der Schieberichtung, denn auch da gibt es wohl unterschiedliche Implementierungen gerade in der Frühzeit der seriellen Ansteuerungen -lange bevor man das SPI oder Microwire nannte... Ich "male" bei CPLDs auch auf Schematic-Entry-Level, ist für CPLD meist sinnvoller als VHDL, bei FPGAs jedoch Unfug (ausser fürs Top-Level...) WinCUPL habe ich auch noch, da auch noch einige GALs vorrätig, aber das ist schon sehr grenzwertiges Gefummle... Tendiere persönlich aber eher zu den oben schon genannten PIC-Lösungen, die ja namensgebend für diese Controller wurden, denn zum Einen gibt es die "noch" und hoffentlich auch noch länger (bislang war Microchip ja mit der einzige Chiplieferant, der konsequent NICHTS abgekündigt hat ohne nen 1:1 Ersatz dafür zu haben, aber mit den ganzen Zukäufen der letzten Jahre ändert sich das auch gerade massiv...), zum Anderen programmiere ich eben seit Urzeiten Prozessoren und Controller, während ich HW im Geiste eher aus TTL zusammen setze, was aber halt schnell dann wirklich in Richtung Kuchenblech gehen würde, oder aber Features später schmerzlich abgehen und dann meist auch nicht mehr ins gewählte CPLD reinpassen (und das nächstgrößere schweineteuer ist, oder nur mit deutlich mehr Pins erhältlich ist, und/oder nur für 3V3 wenn überhaupt etc) zurück zum PIC: Der PSP=Parallel-Slave-Port ist da nur ein Anfang, es gibt auch Parallel-Master-Ports mit bis zu 2 Adressleitungen, d.h. 4 Register im direkten Zugriff. Das sollte fürs SPI oder auch I2C genügen. Witzigerweise sind die "16-bit" PIC 24/33 Bausteine auch in sehr kleinen Gehäusen und für meist sogar weniger Geld verfügbar, wie die uralten PIC 16F, bei doch deutlich mehr Leistung, was sogar eine Programmierung in C ermöglicht, während man beim 16F doch gut daran tut, das in Assembler hin zu fummeln... Allerdings würde ich mir von Microchip auch eine Variante mit 4 oder 5 Adressleitungen wünschen, da viele, eigentlich einfach via SW zu emulierende Chips, wie die ganze Peripherie der 65x/68x Serie, aber sicher auch entspr. Teile aus 808x und Z80, die Videochips und DMA-Controller mal generell ausgenommen, eben 16 oder max. 32 Register haben. Ohne genug Register und mit PSP kommt man aber um Assembler nicht rum, da man dann "sofort" auf eingehende Daten reagieren muss und Lesezugriffe sind noch kritischer, da ist dann auch eine 2 MHz 65/68xx CPU dann schon wieder grenzwertig schnell, für nen 12 MHz Z280 wäre das sicher nix, es sei denn, man kann mit Waitstates arbeiten und der Bus (ohne mich da jetzt einzulesen...) unterstützt das auch... Wenn es mit der angebotenen Registeranzahl von 1-4 geht, ist ein PIC mit 32 oder mehr MHz und Port-Change-Interrupt aber sicher schneller als es für eine min. dem Original entsprechende Umsetzung von PIO oder SPI erforderlich wäre, von UARTs und anderen noch "langsameren" Dingen wie I2C ganz zu schweigen... Ist weit Off-Topic, aber ich wundere mich immer wieder, wie schnell Leute nach CPLDs schreien oder BitBanging via Assembler machen, anstelle mal die Konfigurationsmöglichkeiten der UARTs & Co. in den div. PIC (oder auch anderen Controllerfamilien) durchzulesen. Damit geht fast Alles auf High-Level und in C! Viel Spass weiterhin!
Hallo Rob, ja auch Lattice Kram liegt hier herum, irgendwelche 1016 aber auch größere, allerdings wollte die Lattice Lizenz gerade nicht mehr als ich anfangen wollte zu spielen, ergo flog der Kram wieder in die Schachtel, die wollten also nicht verwendet werden. Das ich überhaupt mit dem CPLD angefangen habe lag an pedas Vorschlag mit 3 oder 4 Teilen eine SPI Schnittstelle zu basteln..allerdings wars mir zum probehalber zusammen löten schon wieder zu viel :-) Hätte peda das nicht vorgeschlagen hätte ich den TP3465 ausprobiert der ja zu diesem Zweck gemacht wurde und auch flexibler ist. Der wäre für erträgliches Geld noch aufzutreiben gewesen..aber ich wollte es halt mal probieren. Lothars FPGA Impelmentierung geht sicher auch und unterstützt wohl alle 4 Modi, allerdings wollte ich das aus politischen Gründen nicht..Fachlich brillant, aber menschlich ein hochnäsiges...lassen wir das. Die clockphase läßt sich bei meiner Lösung immerhin programmieren, mit der Lage siehts trübe aus weil ja mit einem SR gelesen und geschrieben wird, das kann man nicht trennen. Über double buffering habe ich mir noch keine Gedanken gemacht, vorher würde ich wohl noch eine Interruptfähigkeit implementieren. In einen EPM3032 paßte der Kram nicht mehr, im EPM7064 ist aber noch Platz. Quartus bietet sowohl die 74xx "Blöcke" als auch anonyme Blöcke an, wobei der Kram auch noch optimiert wird, d.h. der riesige 74154 ist bei weitem nicht so fett wie es den Anschein hat, weil er eben nicht voll belegt ist. Manchmal sind diese Blöcke in einer HDL geschrieben (wohl meist Verilog), manchmal sind sie selber ein "Schematic", die Grenzen sind bei Quartus also fließend und nichts von Beiden ist besser. Ich habe prinzipiell kein Problem damit Mikrorechner als Peripherie einzusetzen, mir ist auch bewußt das das Feature "paralleles Busregister" gerade bei PICs existiert..allerdings erinnere ich mich nur sehr ungern an einen Auftrag einer Peripherieentwicklung mit PIC16F577 (oder so)..diese Bankingeschichte muß man nicht wirklich haben, jedenfalls nicht auch noch für die Register ein und der selben Peripherie im Chip. Ich habe den Auftrag erfolgreich abgeschlossen..damit ist es erst mal gut. Erfahrungen habe ich sonst noch mit 12C508..vergiß es. Andere Controller Hersteller haben es offensichtlich nicht nötig solche Busregister zu implementieren, weiß der Teufel warum. Ich hätte also einen ausreichend schnellen Chip verwenden müssen..was für mich heißt irgend einen ARM..aber dann wird das ganze Design ganz einfach Unfug, der ARM kann den Z280 gleich mit emulieren.. Eine Suche bei gockel nach "Z80 CP/M ESP8266" förderte auch prompt einen CP/M Emulator auf dem ESP32 Prozessor zu Tage.... Ansonsten ist das mit Deiner Verwunderung gar nicht selten. Gerade wenn man mit ollen Z80 spielt stößt man ständig auf Designs bei denen irgend ein AVR als "remote iüber USB programmierbarer EPROM" verwursted wird. Schnulli! Sowas ist weder "retro" noch sinnvoll. Gruß, Holm
..hier so ziemlich die letzte Version die ich auch auf der Platine habe und die auch anstandslos funktioniert. Gruß, Holm
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.