Autor: Gregorio Kus (Grego_at_RMnet.IT)
Data: Wed 14 Feb 1996 - 22:54:56 MET
On Wed, 14 Feb 1996 19:28:09 +0100 Maciej Lempkowski wrote:
> Hm, moze by sprobowac z portami szeregowymi, wstawic jeszcze
>jedna karte z 2 com-ami, i majac 4 com-y polaczyc dwa ze soba, co prawda
>bylyby to tylko dwa polaczenia ale warto spobowac (ktos mi ostatnio
>opowiadal ze spial com1 i com2 kablem a nastepnie odpalil pod WfW gierke
>RETALIATOR (chyba sie to tak pisze) x2 i mial polaczenie i mogl grac na
>jednym komputerze :)
On Wed, 14 Feb 1996 17:07:05 +0100 Jarek Lis wrote:
>Gregorio Kus (Grego_at_RMnet.IT) wrote:
>: Po ciezkiej, dlugiej i wyczerpujacej walce - zrezygnowalem (zmusilo mnie)
>: z idei zostawienia programow tak ja sa - tzn. zapewnienia im komunikacji
>: przez porty szeregowe.
>Ja bym tam jeszcze powalczyl. Na pewno sie nie da?
>Niewatpliwie bedzie najprosciej..
------------------------------------------------------------------------------
Cztery porty to ja mam [nawet 5!](2 z MB - jeden wylaczony, jeden w modemie
[wewnetrzny] i dwa z Multi I/O kupionej specjalnie ze wzgledu na porty)
i co z tego? 2 porty zajete - mysza i modem. Zostaja 2. Niepisany standard
(standardowe sa tylko 2 - COM1 i COM2) przyjmuje ze adresy bazowe portow sa:
2E8, 2F8, 3E8, 3F8. Ubiedzilem sie niesamowicie z konfiguracja, bo
przeciez Sound Blaster, CD (nie EIDE wiec - przerwanie), a jak wiecie zadna
karta nie pozwala na wybor przerwan od 0 do 15, tylko ma jakies 2, 3, max 4
wybrane zgodnie z jakas pokretna logika (po cholere np. umieszczac wsrod
przerwan do wyboru [WYBORU ??!!!] ktores z przerwan zarezerwowanych
"na sztywno" w architekturze IBM PC??
Uruchamiam COM4 i co sie okazuje? Moj system zaczyna
przezywac jakies dziwne odloty - zawieszenia, zmiany trybow video (na te
nieobslugiwane przez moj monitor) etc. Po dlugim sledztwie (przyznaje -
nie przyszlo mi to do glowy) znajduje przyczyne: te GL/UPY z ulubionego
przez Karpia [;-)] ASUSa umiescily jeden z portow sterujacych karta video
(ASUS PCI -V264CT, asusowska wersja ATI Mach64) pod adresem 2E8!!!
I w dodatku driver OS/2 do tej karty pracuje sobie spokojnie jako
"non system resource manager avare", wiec kernel OSa nie protestuje ze dwa
urzadzenia maja dostep do tego samego portu (driver ATI Mach 64 jest
driverem Ring 0 wiec "moze wszystko").
Karte oczywiscie mozna zmienic, ale ... po prostu nie w tej chwili -
przeinwestowalem sie straszliwie w ostatnich 2 miesiacach i musze najpierw
wyjsc z dlugow zanim pomysle o zakupach. A robie na kontrakcie a nie na
pensji miesiecznej.
Oczywiscie i z tym mozna sobie poradzic: moge napisac driver do DOS'a
ktory przykryje wszystkie 4 COMy i bedzie dzialal w nastepujacy sposob:
przy wysylaniu bajtu X na port N wysle 2 byte'y: N i X na COM1,
przerwanie obslugujace COM1 odbierze je i w zaleznosci od wartosci N
uruchomi odpowiednie COMn z punktu widzenia programu. Troche to zawile
napisalem ale chyba idea jest jasna: na jednym COMie fizycznym (COM1)
uruchamiam 4 COMy virtualne. Nie jest to jednak takie proste, zauwazmy
bowiem ze nie jedna~ a 4 VDM (Virtual DOS Machine) mam uruchomic rownoczesnie.
Przerwanie (sprzetowe) odbierze tylko jedna z nich. Musi ona wiec odebrane
dane wyslac znow, na ten sam port!, aby pozostale VDM mogly je odebrac.
(W oryginale jeden z komputerow spelnia role mastera i przepytuje pozostale
dzieki czemu nigdy nie ma sytuacji ze dwa komputery nadaja na tej samej linii
rownoczesnie. Zaden z komputerow nie obsluguje wiecej niz dwie linie,
ale output z jednego wchodzi np. jako input do trzech komputerow - czyli
sa polaczone rownolegle na linii szeregowej [hl/e hl/e]).
Idzmy dalej: jest mozliwe ze to przerwanie trafi znow do tej samej VDM -
musi ona wiedziec ze ten byte juz odebrala i ze nie powinna wystawiac
go ponownie dla programu, ale odeslac go musi. Trzeba wiec w kazdym z tych
pierwszych byte'ow oprocz numeru "portu virtualnego" wstawiac 4 bity - flagi
ktore mowia czy dana VDM juz odebrala ten byte czy nie. Ostatni VDM, kiedy
juz wszystkie flagi sa wyzerowane nie odsyla wiecej tego byte'u do COM1.
Niech mi ktos teraz sprobuje odpowiedziec na nastepujace pytanie: Ile razy
dany bajt przeleci przez porty zanim odbiora go wszystkie VDM? Co ciekawe -
mniejsza szybkosc transmisji spowoduje rowniez ze dany byte mniej razy
przeleci przez porty czyli zmniejszajac szybkosc transmisji fizycznych
wcale nie musimy zmniejszac szybkosci transmisji wirtualnych. Dalej:
przy pewnych szybkosciach moze nastapic synchronizacja time sharing'u
z przesylaniami co spowoduje ze jakis bajt bedzie stale trafial (niekoniecznie
w nieskonczonosc - wystarczy ze "przez zbyt dlugi czas") do tych samych VDM
(ktore go juz odebraly) podczas gdy jakas inna bedzie sobie czekac i czekac.
Nie wspominam juz o takich drobnostkach jak sharing tego jedynego fizycznego
portu szeregoewgo przez 4 VDMy.
Mysle ze to wyjasnia dlaczego zrezygnowalem z idei uzycia prawdziwych
portow szeregowych.
Wracamy do punktu wyjscia - jakich mechanizmow SYSTEMOWYCH mozna uzyc
pod OS/2 zeby zapewnic interprocess communications miedzy sesjami DOSa ???
(z ewentualnym uzyciem sesji OS/2 jako arbitra, servera, czy czegos w tym
rodzaju)
Pozdrawiam
Grego
-- /------------------------------------------------------------------ Gregorio Kus Grego_at_RMnet.it Grego_at_cyberspace.org ROMA, Italy http://www.RMnet.it/~grego Grego_at_FreeNet.hut.fi
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 12:39:03 MET DST