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 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.
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?
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
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
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.
@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
..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.
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
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