home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Crawly Crypt Collection 1
/
crawlyvol1.bin
/
bbs
/
bt_hsmod
/
hsmoda04
/
scc_x.txt
< prev
next >
Wrap
Text File
|
1994-05-06
|
20KB
|
480 lines
SCC.PRG, ESCC.PRG, ST_ESCC.PRG
------------------------------
(Note for the English reading people: The English version is appended on
the German, look for it!)
Dies sind Treiber für die mit einem SCC oder ESCC (z.B. Z8530, Am85C30,
Z85230) ausgestatteten seriellen Schnittstellen der Ataris und für die
Zusatzhardware ST_ESCC. Sie funktionieren zusammen mit DRVIN.PRG oder
einem gleichwertigen Ersatz. Einführende Bemerkungen finden sich in
1_README.TXT.
Allgemeines
-----------
Als "ESCC" betrachte _ich_ nur den Z85230 und den Am85C230A. Diese
besitzen nebem dem auf 8 Byte vergrößerten EmpfangsFIFO auch einen
mindestens 4 Byte großen SendeFIFO. Ein ESCC beinhaltet alle Funktionen
eines SCC.
Die Konfigurationsmöglichkeiten der einzelnen *SCC*.PRG unterscheiden sich
etwas.
Taktrate und Baudraten
----------------------
Ein SCC kann für die Baudratenerzeugung verschiedene Taktquellen
verwenden. Die meistbenutzte Taktquelle ist sein Systemtakt PCLK. Dieser
Takt PCLK beträgt bei einem normalen (so wie von Atari geliefert) MegaSTE,
TT und Falcon 8MHz (=8000000Hz). Das ist zwar eine schöne Zahl, die aber
zur Erzeugung der hohen Standardbaudraten wenig geeignet ist. Die hohen
Baudraten im MegaSTE/TT/Falcon werden aus anderen Taktquellen erzeugt.
Meine Hardware ST_ESCC wird immer mit 14745600Hz getaktet.
Man kann einen MegaSTE, TT oder Falcon mit einem Quarzoszillator und etwas
Draht auf PCLK=14745600Hz umbauen (Vorschlag von Franz Sirl). Wenn man nur
die 115200Bd und 57600Bd auf MODEM2 haben will, bietet sich ein
einfacherer Umbau nur mit Draht an. (### Nein, ich kann das jetzt hier
nicht beschreiben. Bei Interesse in späteren Versionen.###)
Da also zwei verschiedene Taktraten üblich sind, ist der im Computer
vorhandene PCLK in den Treibern einstellbar.
Bei einem PCLK von 8MHz sind folgende Rsconf-Baudraten möglich:
(neue - alte)
SERIAL2:
115200 - 150
57600 - 134
38400 - 110
MODEM2:
38400 - 110
153600 - 75
76800 - 50
Bei MegaSTE und Falcon (nicht beim TT) sind zusätzlich auf MODEM2:
115200 - 150
57600 - 134
Bei PCLK = 14745600Hz sind bei MODEM2 und SERIAL2 möglich:
neue Rate alte Rate
115200 150
57600 134
38400 110
153600 75
76800 50
Wenn man die GEMDOS-Fcntl TIOC?BAUD benutzt, hat man ohnehin kein Problem,
dort erfährt man, welche Baudraten möglich sind im Klartext als
"Bit pro Sekunde".
ST_ESCC enthält immer einen ESCC. MegaSTE/TT/Falcon enthalten nur einen
ESCC, wenn den jemand extra gewechselt hat. Der Treiber für den SCC läuft
auch mit dem ESCC-Schaltkreis, umgekehrt nicht.
SCC und ESCC
------------
Zur Erinnerung nochmal: Als "ESCC" betrachte _ich_ nur den Z85230 und den
Am85C230A. Bei ST_ESCC wird immer ein ESCC eingesetzt. In
MegaSTE/TT/Falcon befindet sich im Originalzustand nur ein SCC. Zur
Entlastung der CPU und zur Verbesserung der Datensicherheit (geringere
Wahrscheinlichkeit von Zeichenverlusten beim Empfang) kann man einen ESCC
im PLCC-Gehäuse einsetzen. SCC und ESCC sind pinkompatibel genug.
SCC.PRG
-------
Der Treiber für MODEM2 und SERIAL2 des MegaSTE und TT sowie für die
einzige durch Atari herausgeführte RS232-Schnittstelle des Falcon
(beschriftet mit MODEM), wegen ihrer Verwandschaften hier ebenfalls MODEM2
genannt.
Beim MegaSTE und TT wird momentan NICHT zwischen den Alternativen SERIAL2
und LAN umgeschaltet sondern einfach davon ausgegangen, daß SERIAL2
eingestellt ist (ist wohl nach Reset der Fall). Wenn man von Hand das
Soundchipbit auf LAN umschaltet, sollte man für SERIAL2 auf "kein
Handshake" schalten, da ich für die LAN-Schnittstelle noch nichts getan
habe.
Beim Falcon ist die zweite serielle Schnittstelle nicht umschaltbar,
sondern fest auf LAN gelegt (auf dem Gerät als "LAN" beschriftet). Sie
wird von diesem Treiber aber als SERIAL2 betrachtet und müßte "ohne
Handshake" nutzbar sein. Es gilt das Gleiche wie für MegaSTE/TT: Ich habe
mich mit dieser Schnittstelle und speziell deren Handshakeleitungen noch
nicht näher befaßt.
Beim TT (und Falcon, falls man dem einen Beschleuniger mit FastRAM
spendiert hat) darf SCC.PRG _keinesfalls_ ins FastRAM, da es sonst mit zu
schnellen Zugriffen auf den SCC Probleme geben kann. Diese Probleme
könnten sich in Zeichenverlusten, unsinnigem Verhalten oder Bomben äußern.
ESCC.PRG
--------
Siehe SCC.PRG. Dieser Treiber ist nur für die Nutzer, die sich einen
Z85230 oder Am85C230A eingebaut haben. Der SCC-Treiber funktioniert
ebenfalls mit dem ESCC, nutzt die ESCC-Vorteile aber nicht aus. Der
ESCC-Treiber ist für den SCC sehr ungeeignet!
ST_ESCC.PRG
-----------
Der Treiber nur für (ich komm mir langsam wie in einer Dauerwerbesendung
vor) die von mir entwickelte Hardware ST_ESCC, die zwei zusätzliche
schnelle serielle Schnittstellen in ST/STE/MegaST realisiert. 115200Bd
problemlos mit einem 8MHz/68000 unter TOS, das ist doch was.
Die Konfiguration
-----------------
Die Konfiguration erfolgt durch das SETTER.TTP. Zur Bedienung siehe
SETTER.TXT.
PCLK
Hier wird eingestellt, ob der SCC-Takt PCLK 8MHz ("Nein") oder 14745600Hz
("Ja") ist. Bei nicht umgebauten Ataris müssen Sie mit "Nein" antworten.
Bei ST_ESCC.PRG wird die Frage nicht gestellt.
M2TT
Wenn Sie einen nicht umgebauten (also originalen) TT benutzen, antworten
Sie mit "Ja". Dann sind auf MODEM2 leider keine 57600Bd und 115200Bd
verfügbar. Wenn man dan Draht-Umbau gemacht hat, sollte man mit "Nein"
antworten, genau wie die MegaSTE- und Falcon-User. Bei ST_ESCC.PRG wird
diese Frage nicht gestellt. Wenn Sie bei PCLK die 14745600Hz angegeben
haben, ist die Antwort auf diese Frage bedeutungslos.
USE4C
Diese Frage erscheint nur bei ESCC.PRG und ST_ESCC.PRG. Soll ein
Empfangsinterrupt erst nach 4 empfangenen Zeichen erfolgen? Ich nenne
diesen Modus, der erst nach 4 Zeichen einen Interrupt auslöst, 4ZI. 4ZI
entlastet bei "RTS/CTS"- und "ohne"- Handshake die CPU wesentlich. Bei
"XON/XOFF"-Handshake ist er automatisch ausgeschaltet, der Aufwand an
Sonderbehandlungen hätte den Nutzen überstiegen. Neben den Vorteilen
verkürzt 4ZI aber die freie Länge des EmpfangsFIFOs von 8 auf 4 Zeichen.
Nach einer Interruptmeldung des ESCC an die CPU können vor einer Reaktion
der CPU nur noch 4 statt 8 Zeichen verlustfrei empfangen werden.
Normalerweise schaltet man 4ZI an, antwortet also mit "Ja", da 4 freie
Zeichen ausreichen und der Gewinn an CPU-Zeit durch die auf 1/4
reduzierten Empfangsinterrupts wesentlich ist. Wenn man unsaubere
Programme hat, muß man 4ZI wahrscheinlich immer ausschalten, also hier mit
"Nein" antworten. Diese unsauberen Programme äußern sich durch
verschiedene Verzögerungen: im Terminalmode kommen erst dann Zeichen auf
den Bildschirm, wenn es 4 Zeichen sind. Unsaubere Übertragungsprotokolle
hängen einige Zeit (oder ewig) fest, besonders am Anfang oder Ende.
DTRM2:
Das DTR(Data Terminal Ready)-Signal der Schnittstelle MODEM2 wird beim
Start dieses Treibers einmalig auf den hier angegebenen Wert gesetzt. Eine
Aktivierung mit "Ja" entspricht der Arbeitsweise des TOS, eine
Deaktivierung mit "Nein" verhindert das "ungefragte" Abheben eines
entsprechend konfigurierten Modems.
DTRS2:
Wie DTRM2, aber für Schnittstelle SERIAL2.
RBLM2:
Wenn man hiermit nichts anzufangen weiß, einfach 256 einstellen. Hier wird
die Empfangspufferlänge der MODEM2-Schnittstelle in Byte eingestellt. Sie
darf maximal 65534 und minimal 16 betragen. Werte außerhalb dieses
Bereiches werden auf den Standardwert von 256 gesetzt. Die Länge wird auf
eine gerade Zahl abgerundet. Die Wassermarken werden generell auf 1/4 (low
water mark) und 3/4 (high water mark) gesetzt.
TBLM2:
Wie RBLM2, aber diesmal die Sendepufferlänge.
RBLS2:
Wie RBLM2, aber diesmal für Schnittstelle SERIAL2.
TBLS2:
Wie RBLM2, aber diesmal die Senderpufferlänge für Schnittstelle SERIAL2.
Für Programmierer: Der IOREC
----------------------------
Finger weg von der Bestimmung der lesbaren Byteanzahl über den IOREC! Das
geht bei eingeschaltetem 4-Zeichen-Interrupt des ESCC und ST_ESCC voll
daneben. Immerhin bringt dieser Interruptmodus eine wesentliche
Systementlastung. Stattdessen FIONREAD oder gleich Fread benutzen,
funktionieren bei diesen Treibern beide richtig. Bconstat funktioniert
ebenfalls.
Wenn der Cookie RSVF und in der RSVF-Liste die benutzte Schnittstelle da
ist, darf man sich darauf verlassen, daß FIONREAD funktioniert. Das kann
der MiNT-User zwar sabotieren, aber dann ist er selbst schuld.
Solange die Fcntl-Funktion zur Veränderung der Puffergröße nicht
implementiert ist, ist es auf jeden Fall legal, die Puffergröße und die
Wassermarken in der IOREC-Struktur zu ändern. Dabei, und nur dabei, sehe
ich es als legal und erforderlich an, ebenfalls die Schreib- und
Lesezeiger gemeinsam auf Null zu setzen. Schließlich erwartet man in
diesem Umstellungsmoment keinen Datenübertragungen mehr.
Es ist denkbar, daß irgendwann die IOREC-Benutzung entfällt und durch eine
sinnvollere Datenstruktur ersetzt wird. Nur ein Beispiel: rückwärts
laufende Zeiger würden etwas Zeit einsparen. Aus Kompatibilitätsgründen
wird wohl eine tote IOREC-Struktur zurückbleiben. Wer aber wirklich sauber
programmieren will, sollte den Rückgabewert der XBIOS-Funktion IOREC
testen (oder den Wert des Zeigers in der MAPTAB, wenn man so direkt
reinfingert). Ist dieser Wert 0 oder ungerade, gibt es bestimmt keinen
IOREC.
Für Programmierer: Unterstützte Funktionen
------------------------------------------
Alle Treiber unterstützen inzwischen die TIOCCTL(MAP/GET/SET)-Funktionen
aus dem SERSOFST.TXT, wenn auch noch nicht für alle Leitungen und noch
ohne Callbacks. Aber das läßt sich problemlos per TIOCCTLMAP erfragen.
Welche Fcntl sonst noch unterstützt werden, läßt sich ebenfalls durch
Aufruf feststellen.
Versionen
---------
Wenn nicht extra vermerkt, gelten die Daten für alle *SCC*.PRG.
1993-11-25
jetzt auch 115200/57600 auf MODEM2 bei MegaSTE/Falcon
ST_ESCC hat nichts sinnvolles zum Konfigurieren, entsprechend dämlich die
Meldung
1993-12-01
TIOCM_RNG auf MODEM2 bei TT/Falcon/ST_ESCC, TIOCM_RNG auf SERIAL2 für
ST_ESCC, kleine Verzögerung für Siegfried Hartmanns TT an einer Stelle
eingebaut
1993-12-27
Fcntl TIONOTSEND implementiert, bei ESCC und ST_ESCC ist
4-Zeichen-Interrupt abschaltbar
1994-01-01
TIOCM_DSR in den TIOCCTL* vorhanden, Fcntl TIOCFLUSH implementiert,
DTR-Signal durch Nutzer voreinstellbar, Puffergrößen durch Nutzer
einstellbar
1994-03-27
Fcntl TIOCFLUSH Nr.1,2,3 gehen jetzt endlich
1994-04-07
Empfangspuffer High-Water-Mark richtig initialisiert
Harun Scheutzow
(Harun_Scheutzow@b.maus.de)
SCC.PRG, ESCC.PRG, ST_ESCC.PRG
------------------------------
(The most important parts translated from German to English on 1994-01-09
by Harun Scheutzow. I have no time for translating all. If anybody
translates the remaining parts, I'm very interested in getting the result
for including it in the next version of this package. My native language
is German, I think a person whos native language is English would do a
much better translation. Thanks! (Send only mails smaller than 16kbyte to
my email address.))
These are drivers for the serial interfaces realized by a SCC or ESCC (eg
IC Z8530, Am85C30, Z85230). They work together with DRVIN.PRG or an
equivalent replacement. 1_README.TXT contains an introduction.
The general
-----------
I call only the Z85230 and the Am85C230A an "ESCC". These ICs have an 8
byte receiver FIFO and a transmitter FIFO not smaller than 4 byte. An ESCC
contains all functions of the SCC.
The configuration possibilities of the *SCC*.PRG differ a little bit.
Clock rate and baud rate
------------------------
A SCC can use different clock sources for the generation of baud rates.
The mostly used clock source is its system clock PCLK. This PCLK is 8MHz
(8000000Hz) in a normal (as delivered by Atari) MegaSTE, TT and Falcon.
That is a nice number, but unsiutable for generation of the high standard
baud rates. The high baud rates in MegaSTE/TT/Falcon are generated from
other sources. My hardware ST_ESCC is clocked by 14745600Hz.
It is possible to modify the MegaSTE/TT/Falcon with a quarz oscillator and
a bit wire to PCLK=14745600Hz (proposal of Franz Sirl). If only 115200Bd
and 57600Bd on MODEM2 is needed, a more simple modification with one wire
is possible. (## No time for description. If there is much interest, in a
next version. ##)
Because two different clock rates exist the PCLK is adjustable in the
drivers.
With a PCLK of 8Mhz are the following Rsconf-baud rates possible:
(old - new)
SERIAL2:
115200 - 150
57600 - 134
38400 - 110
MODEM2:
38400 - 110
153600 - 75
76800 - 50
On MegaSTE and Falcon (not on TT) additionally on MODEM2:
115200 - 150
57600 - 134
With PCLK = 14745600Hz are possible on MODEM2 and SERIAL2:
old rate new rate
115200 150
57600 134
38400 110
153600 75
76800 50
If the GEMDOS-Fcntl TIOC?BAUD is used there is no problem at all because
it provides the possible baud rates as "bit per second".
ST_ESCC contains ever an ESCC. MegaSTE/TT/Falcon contain only an ESCC if
somebody changed this IC. The driver for SCC runs on the ESCC too, but the
ESCC driver will not correctly run on a SCC.
SCC and ESCC
------------
Remenber: I call only the Z85230 and the Am85C230A an "ESCC". ST_ESCC
contains ever an ESCC. In the MegaSTE/TT/Falcon there is a SCC in the
original state. To decrease the CPU load and to improve the data safety it
is possible to insert an ESCC with PLCC-package. SCC and ESCC are
pin-compatible enough.
SCC.PRG
-------
This is the driver for MODEM2 and SERIAL2 of MegaSTE and TT and for the
only RS232 interface of the Falcon (signed with MODEM) drawn out by Atari.
This "MODEM2 of the Falcon is called MODEM2 in this text because of its
similarity.
On the MegaSTE and TT there will NOT be switched between the alternatives
SERIAL2 and LAN. It is expected that SERIAL2 is setted (so as after a
reset). If the soundchipbit is switched "manually" to LAN, on SERIAL2
should be switched to "no handshake" because I have done nothing special
for the LAN interface.
On the Falcon the second serial interface is not switchable, it is fast
directed to LAN (signed with LAN on the Falcon). This interface is called
SERIAL2 by this driver. It should be usable ab bit with "no handshake"
equal to the MegaSTE/TT. I didn't deal with this interface and its
handshake signals.
On the TT (and Falcon, if equipped with a speeder with FastRAM) *SCC*.PRG
must not be loaded in the FastRAM. Otherwise problems (bombs, lost of
characters, spurios behavior) could occur caused by a too fast access to
the SCC.
ESCC.PRG
--------
See SCC.PRG. This driver is only for computers with a Z85230 or Am85C230.
The SCC-drivers works with an ESCC too, but don't use the advantages of
the ESCC. The ESCC-driver is very unsuitable for a SCC!
ST_ESCC.PRG
-----------
This driver is dedicated to my self developed hardware ST_ESCC which
provides to additional fast serial interfaces on ST/STE/MegaST. 115200Bd
run without problems on an 8MHz/68000 machine under TOS.
Configuration
-------------
The configuration is done by using SETTER.TTP.
Because the explainations in the drivers are German I added an
abbreviation.
PCLK
Here you can set the SCC-clock PCLK to the value in your computer. Answer
"No" for normal (unmodified) Ataris which have an 8MHz PCLK. Answer "Yes"
for 14745600Hz PCLK. ST_ESCC.PRG doesn't ask this.
M2TT
If you use an original (unmodified) TT, answer "Yes". On this machine are
57600 and 115200Bd on MODEM2 impossible. Answer "No" if you use a MegaSTE
or Falcon. If your SCC is clocked by a PLCK of 14745600Hz this answer has
no effect.
USE4C
This question appears only in the ESCC.PRG and ST_ESCC.PRG. Shall the
receiver interrupt take place after four received characters? I call this
mode which signals an interrupt after 4 characters 4ZI. 4ZI decreases the
CPU load in the "RTS/CTS"- and "without"- handshake modes radically.
"XON/XOFF"-handshake switches 4ZI automatically off because the number of
necessary special actions would be greater than the use.
(-- something untranslated --)
Normally you should switch 4ZI on, answer with "Yes", because 4 free
characters are sufficient and the profit by the reduced CPU load (the
number of receiver interrupts is reduced to 1/4) is important. If you use
unclean programs you should switch off 4ZI by answering "No". The programs
show their uncleannes by delays: if you type in the terminal mode an the
characters appear only if you typed 4 characters or more, unclean transfer
protocols will hang some time (or for ever) mostly at the beginning or the
end of transfer.
DTRM2
The DTR(data terminal ready)-signal of the MODEM2 interface is set at the
start of this driver on time to the value given here. Yes corresponds to
on and is equivalent to the behavior of TOS, No corresponds to off and
prevents most modems from going off hook before a communication program
has been started.
DTRS2:
The same as DTRM2 but for interface SERIAL2.
RBLM2:
Use 256 as a default. Here the receiver buffer length in byte of the
MODEM2 interface can be set. It may be in the range of 65534 (maximum) to
16 (minimum). Values out of this range are set to the default of 256. The
water marks are set to 1/4 (low water mark) and 3/4 (high water mark).
TBLM2:
As RBLM2, but for the transmitter buffer length.
RBLS2:
As RBLM2, but for the interface SERIAL2.
TBLS2:
As RBLM2, but for the transmitter buffer length of interface SERIAL2.
For programmers: The IOREC
--------------------------
Hands off from computing the readable number of bytes by the IOREC! This
method will fail if 4ZI is switched on in ESCC and ST_ESCC. Use the
function Fcntl FIONREAD or Fread, both work correctly in this drivers.
Bconstat works correctly too.
If the cookie RSVF exist and the RSVF-list contains the interface you can
rely on the correctness of FIONREAD. The MiNT-user may destroy this, but
he is responsible for that.
If the functions for modification of buffer length are not implemented, it
is legal to change the buffer address, largeness and water marks in the
IOREC. In this case, and only in this case, I see it as legal and
necessary to reset the read and write pointer in the IOREC to zero.
It is possible, that in the future the IOREC is no longer used. Because of
compatibility reasons a dead IOREC may remain. Who wants to program really
clean should examine the return value of the XBIOS-function IOREC (or the
pointer in the MAPTAB if you grab so direct in the memory). Is this value
zero or odd there is no IOREC.
For programmers: Supported functions
------------------------------------
All drivers support the TIOCCTL(MAP/GET/SET)-functions as described in
SERSOFST.TXT. May bee they don't support all signals and lines but that
can be requested by TIOCCTLMAP. Which Fcntls are supported a program
should determine by calling this functions.
Versions
--------
See German part.