ms.dos.105rakicm,
u vreme Windows-a i ostalih grafickih programa,
jedno bezvezno pitanje:
kako se programira onaj 9 bit kod menjanja
fontova u cistom DOS-u
hvala.
mladen.
ms.dos.106nkbog,
-> #105, rakicm> kako se programira onaj 9 bit kod menjanja
> fontova u cistom DOS-u
Ako mislis na 9x16 fontove za VGA kartice, onda nikako ;). Taj bit se
implicitno podržava i to na sledeći način:
kodovi 0-191 : 9 kolona su sve nule
kodovi 192-223:9 kolona je duplirana osma (ISTO KAO SUSEDNA)
kodovi 224-255:9 kolonu čine nule (kao 0-191).
Ukratko, mogu se defnisati sva slova tako da imaju punu širinu 8, a preostala
9. kolana služi za razdvajanje slova (pogledaj npr. ALL4YU ćirilicu). Na
žalost, ne mogućnošću definisanja 9 kolone se gotovo onemogućava pravljenje
korisničkih znakova za crteže na ekranu. Oni fazoni u Nortonu i PC Tools se
izvode preko grupe znakova 192-223.
NB.
ms.dos.107mjova,
-> #106, nkbog> Ukratko, mogu se defnisati sva slova tako da imaju punu
> širinu 8, a preostala 9. kolana služi za razdvajanje slova
> (pogledaj npr. ALL4YU ćirilicu). Na
mislim da može programiranjem VGA karte da se napravi da su svi
znakovi širine 8 bitova, ali tako da ne postoji onaj koji razdvaja dva
susedna znaka. ne zanima me preterano, ali kad budem imao vreman možda
ću se ovim pozabaviti.
ms.dos.108nkbog,
-> #107, mjova> mislim da može programiranjem VGA karte da se napravi da su svi
> znakovi širine 8 bitova, ali tako da ne postoji onaj koji razdvaja
> dva susedna znaka.
Ima jedan trivijalan: prebaci se kartica u grafički mod ;). Šalu na
stranu, sigurno ima i drugi način.
NB.
ms.dos.109dejanr,
==========
ibm.at/software #3516, from tmoran, 249 chars, Sun Dec 12 22:42:40 1993
Comment(s).
----------
TITLE: >mouse presence
What's a safe, reliable way to test for the presence of a mouse?
I've been looking for a non-IRET at the address pointed to by the
int 33 vector, but that gets clumsier from protected mode and I
wonder if it even is reliable.
==========
ibm.at/software #3517, from barryn, 609 chars, Sun Dec 12 22:56:03 1993
Comment to 3516. More refs to 3516.
----------
>...test for mouse presence...
I use the following code (intended for the Borland compiler):
/*-----------------------------------------------------*/
void mouse_init(void)
{
void far * far *iv;
iv = MK_FP(0x0000, 0x00CC);
if (FP_SEG(*iv) == 0x0000)
{
mouse_exists = FALSE;
num_buttons = 0;
}
else
{
_AX = 0;
geninterrupt(0x33);
mouse_exists = _AX;
num_buttons = _BX;
}
}
/*-----------------------------------------------------*/
ms.dos.110rakicm,
-> #106, nkbogTo je tacno ono sto mi je trebalo.
hvala.
mladen.
ms.dos.111bulaja,
-> #107, mjova│mislim da može programiranjem VGA karte da se napravi da su svi
│znakovi širine 8 bitova, ali tako da ne postoji onaj koji razdvaja
│dva susedna znaka.
└───
Može - imas u VgaMax mali utility Vga90 koji radi baš to - ukida 9.
bit i tako dobijaš 90 znakova u redu umesto 80. Nažalost nisam još
provalio kako se to radi :).
ms.dos.112mjova,
-> #111, bulaja> bit i tako dobijaš 90 znakova u redu umesto 80. Nažalost
> nisam još provalio kako se to radi :).
ja jesam ;), odavno.
ms.dos.113niklaus,
Da li je ikako moguće da se miš inicijalizuje (i koristi) bez pre-
thodnog učitavanja drajvera?
Pošto je u pitanju neka užasno low-level tehnika (portovi), zamolio bih
nekog od stručnijih da mi pojasni, šta drajver zapravo radi i da li je neopho-
dan. Dok ovo pišem, već postajem svestan da nije, tako da moje pitanje zapravo
glasi: Šta je sve potrebno uraditi da bi se "instalirao" interapt 33h?
Better yet - postoji već li neka biblioteka, koja radi sa mišem na "go-
loj" konfiguraciji? C, Pascal... more, može i asembler...
(:niklaus:)
ms.dos.114mjova,
-> #111, bulaja> bit i tako dobijaš 90 znakova u redu umesto 80. Nažalost
> nisam još provalio kako se to radi :).
ja jesam ;), odavno.
ms.dos.115djelovic,
-> #113, niklaus> Pošto je u pitanju neka užasno low-level tehnika (portovi), zamolio bih
> nekog od stručnijih da mi pojasni, šta drajver zapravo radi i da li je
> neopho- dan. Dok ovo pišem, već postajem svestan da nije, tako da moje
> pitanje zapravo glasi: Šta je sve potrebno uraditi da bi se "instalirao"
> interapt 33h?
Ne verujem da iko zna. BTW, uđi u Telemate (ili šta već koristiš) i prebaci
port na onaj na kome se nalazi miš. Kako pomeraš miša, tako će ti se nešto
ispisivati na ekranu. Pretpostavljam da je to - to, samo treba to čudo
dešifrovati.
Takođe, mjova je napravio neku C++ klasu za očitavanje miša (imaš je u
RSOFT direktorijumu) koja (mislim) zamenjuje deo drajvera njegovom interapt
funkcijom. Pogledaj da li odatle možeš nešto da izbunariš.
> Better yet - postoji već li neka biblioteka, koja radi sa mišem na "go-
> loj" konfiguraciji? C, Pascal... more, može i asembler...
Ne.
ms.dos.116mjova,
-> #113, niklaus> Better yet - postoji već li neka biblioteka, koja radi sa
> mišem na "go- loj" konfiguraciji? C, Pascal... more, može
> i asembler...
nisam video tako nešto, ali nije problem da se dobavi. uzmeš
najjednostavniji veznik za pacova i proteraš ga kroz sourcer. u svakom
slučaju moraš obezbediti sve funkcije koje su potrebne (piše o njima u
svakom helpu).
generalno stvari stoje ovako: okačiš se ;) na neki int vezan za COM x
(8 + IRQ n => COM1,3= INT 0Ch; COM2,4= INT 0Bh). kad se generiše int
onda se nešto desilo pacovu i treba pročitati sa porta (to već ne
znam napamet, ima ih više) šta se na njemu (njima) nalazi. e, onda to
treba protumačiti itd.
slično je kao i sa tastaturom, samo je ona bolje dokumentovana.
pozdrav, mjova.
ms.dos.117bulaja,
-> #112, mjova│ja jesam ;), odavno.
└───
cutis, a? :)
ms.dos.118niklaus,
Da li neko može da mi razotrije (za mene) misteriju o DMA kanalima?
OK, ponešto znam - Direct Memory Addressing, radi bez korišćenja proce-
sora, itd. itd.
Da li DMA radi sa video memorijom (trebalo bi)?
Ovo "bez trošenja proc. vremena" - znači li to da je moguće šarati po
ekranu, dok se obrađuju podaci, koji se bacaju na ekran?
Koriste li ih često multi-tasking OSovi ili samo za rad sa pojedinim
uređajima (:xe, koji primer - skeneri)?
Ma uopšte, koliko je tačno ovo Što sam naveo?
(:niklaus:)
ms.dos.119zormi,
-> #118, niklaus* Da li neko može da mi razotrije (za mene) misteriju o DMA kanalima?
Ukratko, DMA omogućava prenos podataka od memorije do periferije ili nazad
bez posredovanja procesora (posao obavlja DMA kontroler). Medjutim, pošto
se prenos obavlja preko memorijskog bus-a on je za procesor zauzet i za to
vreme CPU može da radi samo nešto interno. Problem je što postoji premalo
DMA kanala pa je teško ugurati sve uredjaje, a takodje je DMA protokol
zastareo pa je spor, tako da programirani IO koji koristi procesor uglavnom
radi brže. Zato se recimo ne koristi opcija DMA prenosa za IDE hardove iako
postoji.
ms.dos.120mstanic,
-> #119, zormi>> DMA kanala pa je teško ugurati sve uredjaje, a takodje je
>> DMA protokol zastareo pa je spor, tako da programirani IO
>> koji koristi procesor uglavnom radi brže. Zato se recimo
>> ne koristi opcija DMA prenosa za IDE hardove iako
Ja ne bih tvrdio ovo gore.
Po meni je DMA najbrži način za prenos određenog bloka
podataka. Nije važno da li je "memory-to-memory" ili
"memory-to-I/O".
Zaista bih molio (ovo kažem bez ikakve pretencioznosti) za
objašnjenje koji je brži način.
ms.dos.121niklaus,
-> #119, zormi(:> vreme CPU može da radi samo nešto interno. Problem je što postoji
(:> premalo DMA kanala pa je teško ugurati sve uredjaje, a takodje je
(:> DMA protokol zastareo pa je spor, tako da programirani IO koji
(:> koristi procesor uglavnom radi brže. Zato se recimo ne koristi
(:> opcija DMA prenosa za IDE hardove iako postoji.
Ma zadovoljan sam i kontrolom jednog uređaja preko DMA kanala. (:
DMA protokol? Neki standard ili uobičajena metoda programiranja DMAa?
Šta se sve podrazumeva pod uređajima? Video adapter? Miš? Budilnik? (:
(:niklaus:)
ms.dos.122mjova,
-> #120, mstanic> Po meni je DMA najbrži način za prenos određenog bloka
> podataka. Nije važno da li je "memory-to-memory" ili
> "memory-to-I/O".
nisam baš preterano upućen u HW, ali ipak mi se čini da je zormi u
pravu. DMA jeste direktan pristup memoriji (u većim blokovima), ali je
zastareo. ova druga činjenica sigurno ide u prilog lošijem kvalitetu.
ms.dos.123dmiladinovic,
-> #118, niklaus>> Da li DMA radi sa video memorijom (trebalo bi)?
Trebalo bi, al nije.
Komunikacija racunar-video kartica ide preko dogovaranja
procesora.
ms.dos.124saricl,
-> #118, niklaus> Da li neko moze da mi razotrije (za mene) misteriju o DMA kanalima?
Soft strana toga mi bas nije poznata,ali sa hard strane stvari stoje
ovako:
Periferija(periferija=bilo sta eventualno i program) salje zahtev za
DMA po prijemu tog zahteva procesor ZAVRSAVA SA TEKUCOM INSTRUKCIJOM
i salje potvrdu prekida (DMA ACKNOWLDAGE DACK) I PRELAZI U TRI-STATE
znaci odspaja sve svoje pinove logicki od magistrala i PERIFERIJA
preuzima kontrolu nad magistralama.
P.S.-Ako ovo nije dovoljno jasno postavi konkretnije pitanje,bice mi
zadovoljstvo da ti pomognem.
SARICL.
ms.dos.126mstanic,
-> #122, mjova>> pravu. DMA jeste direktan pristup memoriji (u većim
>> blokovima), ali je zastareo. ova druga činjenica sigurno
>> ide u prilog lošijem kvalitetu.
Možeš li da nam kažeš koji je to noviji i efikasniji (brži)
metod za obavljanje poslova za koje je DMA namenjen.
Neću da tvrdim da ne postoji, ali ja zaista ne znam za
bolji i bilo bi vrlo lepo da saznam nešto više, a verujem
da ni ostali koji prate konferenciju nemaju ništa protiv
toga.
ms.dos.127mstanic,
-> #121, niklaus>> kanala. (: DMA protokol? Neki standard ili uobičajena
>> metoda programiranja DMAa? Šta se sve podrazumeva pod
>> uređajima? Video adapter? Miš? Budilnik? (:
DMA (Direct Memory Access)
Its basic function of managing CPU-independent transfers
between two ports is augmented by an array of features that
optimize transfer speed and control with litlle or no
external logic in systems.
Transfers can be done between any two ports (source and
destination), including memory-to-I/O, I/O-to-memory,
memory-to-memory and I/O-to-I/O. Dual port addresses are
automatically generated for each transaction and may be
either fixed or incrementing/decrementing.
During a transfer, the DMA assumes control of the system
address and data buses. Byte by byte, data is read from one
addressable port and written to the other addressable port.
The ports may be programmed to be either system main
memory or peripheral I/O devices. Thus, a block of data
may be written from one peripheral to another, from one
area of main memory to another, or from a peripheral to
main memory and vice versa.
┌────────┐ ┌─────────┐
│ DMA │ │ I/O │
│ │ │ │
│ │ │ │
┌────────┐ │ ┌─┼───(3)──┼──> │
│ MEMORY │ │ │ │ │ │
│ <──┼──(1)────┼─┐ │ │ └─────────┘
│ │ │ │ │ │ ┌─────────┐
│ │ │ │ │ │ │ I/O │
│ │ │ │ │ │ │ │
│ <──┼─────────┼─┘ └─┼────────┼──> │
│ │ │ │ │ │
│ <──┼───(2)───┼────────┼────────┼──> │
└────────┘ └────────┘ └─────────┘
1. transfer memory-to-memory
2. transfer memory-to-I/O and/or vice versa
3. transfer I/O-to-I/O
Modes of operation
* Byte-at-a-time: (or cycle-stealing) data operations are
performed one byte at a time. Between each byte operation
the system buses are released to the CPU. The buses are
requested again for each suceeding byte operation.
* Burst: data operations continue untila port's Ready line
(DREQ) to the DMA goes inactive. The DMA then stops and
releases the system buses after completing its current
byte operation.
* Continuous: data operations continue until the end of the
programmed block of data is reached before the system buses
are released. If a port's Ready line (DREQ) goes inactive
before this occurs, the DMA simply pauses until the Ready
line comes active again.
In all modes, once a byte of data is read into the DMA,
the operation on the byte will be completed in an orderly
fashion, regardless of the state of other signal's
(including a port's Ready line).
To je malo teorije. (Izvinite što nije prevedeno).
E sad, kako to radi na PC-ju ima malo više da se piše i
ja bih te uputio da pročitaš onu dokumentaciju (ima na
Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo
detaljnije opisano ali ne garantujem.
ms.dos.128zormi,
-> #120, mstanic*>> DMA kanala pa je teško ugurati sve uredjaje, a takodje je
*>> DMA protokol zastareo pa je spor, tako da programirani IO
*
* Ja ne bih tvrdio ovo gore.
* Po meni je DMA najbrži način za prenos određenog bloka
* podataka. Nije važno da li je "memory-to-memory" ili
* "memory-to-I/O".
U teoriji da. Medjutim u praksi baš ne blistaju prema rezultatima koje
ja imam. DMA je definisan još na XT-u i po tom standardu prenos se
obavlja na 4.77 MHz 8-bitno. Noviji DMA kontroleri (recimo 82380 ovako
napamet) za koje imam tehničku dokumentaciju, namenjeni 386+ pločama,
imaju nekoliko modova uključujući 32-bitni burst prenos u master modu,
8 DMA kanala i upravljaju magistralom potpuno "pin-to-pin" kompatibilno
kao da to radi CPU. Npr. mogu da prenesu i do 20-30 MB/s.
Problem je verovatno u tome što periferijski uredjaji zbog kompatibilnosti
ne mogu da ih potpuno iskoriste, pogotovu preko ISA bus-a, pa se veće
performanse i sigurnija kompatibilnost postižu standardnim programiranim
IO mehanizmom (uredjaj pošalje interrupt, CPU obavi posao koristeći svoju
brzinu pristupa memoriji, cache-u i bus-u), pogotovu kada se ide na novije
bus-eve (EISA burst mode, VESA Local Bus, PCI Local Bus...).
ms.dos.129mjova,
-> #126, mstanic> Možeš li da nam kažeš koji je to noviji i efikasniji
> (brži) metod za obavljanje poslova za koje je DMA
> namenjen.
koliko mi se čini, taj princip se koristi samo prilikom
komunikacije sa flopi diskovima (možda i sa HD, ali ako zormi kaže
da IDE ne ide ;) preko DMA...). voleo bih da razjasnim te detalje.
ms.dos.130mstanic,
-> #127, mstanic>> Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo
Da se ispravim:
Nije Therefxx već dosref31 u direktorijumu INFO.
ms.dos.132niklaus,
-> #124, saricl(:> Periferija(periferija=bilo sta eventualno i program) salje zahtev
(:> za DMA po prijemu tog zahteva procesor ZAVRSAVA SA TEKUCOM
(:> INSTRUKCIJOM i salje potvrdu prekida (DMA ACKNOWLDAGE DACK) I
(:> PRELAZI U TRI-STATE znaci odspaja sve svoje pinove logicki od
(:> magistrala i PERIFERIJA preuzima kontrolu nad magistralama.
Dakle, kažeš da periferija na dalje (od trenutka "odsecanja nogu") radi
sama. Baš sama? Većina periferija koje znam, u sebi nema dovoljno logike ni
da pređe ulicu (prim. nik. magistralu). (;
Proces prepuštanja periferije same sebi započinje slanjem specijalne
instrukcije od strane procesora. Kako se izlazi iz DMA "moda". Valjda je pot-
rebno da procesor ponovo šalje novu specijalnu naredbu perif. uređaju. Kako
da to izvede, kad je uređaj "gluv"? Ili je "nagluv"? (:
(:> P.S.-Ako ovo nije dovoljno jasno postavi konkretnije pitanje,bice
(:> mi zadovoljstvo da ti pomognem.
Neizmerno mi je drago što to čujem. ((:
(:niklaus:)
ms.dos.131niklaus,
-> #126, mstanic(:> Neću da tvrdim da ne postoji, ali ja zaista ne znam za
(:> bolji i bilo bi vrlo lepo da saznam nešto više, a verujem
(:> da ni ostali koji prate konferenciju nemaju ništa protiv
(:> toga.
Apsolutno ne. A uopšte se ne bi bunio kad bi nam predočio tehnike prog-
ramiranja DMA kanala. Ti si, čini se, zadovoljan rezultatima.
Osećam da bih bio i ja. (:
(:niklaus:)
ms.dos.133mstanic,
-> #128, zormi>> rezultatima koje ja imam. DMA je definisan još na XT-u i
DMA je postojao mnogo pre PC-ja. Naravno, sa pojavom
mikroprocesora koji su imali instrukcije tipa LDIR (stari
Z80) potreba za takvim uređajima je malo smanjena ali nikako
nije nestala. Zapravo, ako znate kako rade instrukcije tog
tipa (LDIR, LDDR, INIR itd) odmah ćete znati kako rade DMA
kontroleri. Naravno, hardver je brži od softvera.
>> po tom standardu prenos se obavlja na 4.77 MHz 8-bitno.
XT je (čini mi se) radio baš na toj frekvenciji i imao je
8-bitnu magistralu podataka.
>> Noviji DMA kontroleri (recimo 82380 ovako napamet) za
>> koje imam tehničku dokumentaciju, namenjeni 386+ pločama,
>> imaju nekoliko modova uključujući 32-bitni burst prenos u
Noviji mikroprocesori imaju "u sebi" (rogobatnog li izraza)
ugrađene DMA kontrolere. (Z280)
>> master modu, 8 DMA kanala i upravljaju magistralom
>> potpuno "pin-to-pin" kompatibilno kao da to radi CPU.
Tako radi svaki DMA kontroler.
>> Npr. mogu da prenesu i do 20-30 MB/s.
82380 prenosi do 32MB/s.
>> Problem je verovatno u tome što periferijski uredjaji
>> zbog kompatibilnosti ne mogu da ih potpuno iskoriste,
>> pogotovu preko ISA bus-a, pa se veće performanse i
>> sigurnija kompatibilnost postižu standardnim
>> programiranim IO mehanizmom (uredjaj pošalje interrupt,
>> CPU obavi posao koristeći svoju brzinu pristupa memoriji,
>> cache-u i bus-u), pogotovu kada se ide na novije bus-eve
Prilikom svakog interapta CPU "gura" na stek sve i svašta,
pa zatim postavlja u svoje registre neke adrese i podatke,
pa zatim nešto "radi" sa svim tim podacima, pa zatim vraća
sadržaj sačuvanih registara sa steka (najčešće i najbrže)
što sve čini jedan takav proces prilično sporim. Ne pomaže
tu mnogo keš, jer najčešće baš na obradama interapta dolazi
do "promašaja keša". (Još jedan rogobatniji izraz, ali
mislim da razumete).
Ako procesor prenosi blok podataka iz radne memorije u
(recimo) video-memoriju, najbrži način je da se upotrebi
instrukcija koja se ponavlja (REPNZ na primer). Naravno,
i u ovom slučaju je DMA brži ali samo malo. Međutim, u
igru ulaze asinhroni događaji (serijska komunikacija, disk
i ostalo) koji moraju procesoru na naki način da najave
svoj zahtev za određenim prenosom podataka. E onda u igru
ulazi gorepomenuta igra sa stekom i prekidima.
Kad se koristi DMA situacija je drugačija. Uređaj prekine
procesor na početku procesa i onda on (procesor)
inicijalizuje DMA kontroler i prepusti mu, recimo transfer
bloka podataka. DMA kontroler (ako je serijska komunikacija
u pitanju) po prijemu jednog bajta u serijskom uređaju
prekida rad mikroprocesora samo za jedan "mašinski ciklus"
prenosi taj bajt i čeka prijem sledećeg. Igra oko steka
ovde otpada. Tek po prijemu celog bloka podataka DMA još
jednom prekida procesor da mu javi da je posao gotov.
Dakle, imamo dva puta "igre sa stekom" za recimo, blok
podataka od jednog kilobajta, što je zanemarivo ako znamo
da za prenos tog istog bloka "preko interapta" imamo istu
igru preko hiljadu puta.
Sve to važi za disk podsistem, samo što je mehanizam nešto
složeniji.
>> (EISA burst mode, VESA Local Bus, PCI Local Bus...).
Problem nije u DMA uređaju već u sabirnici. DMA radi brže
na EISA sabirnici nego na ISA (kao uostalom i svi ostali
uređaji). DMA, obično radi onoliko brzo koliko mu to
sabirnica dopušta, tj. kolika je propusna moć sabirnice.
Pri tom tip sabirnice nema značaja.
ms.dos.134.bale.,
-> #132, niklaus> Dakle, kažeš da periferija na dalje (od trenutka "odsecanja nogu")
> radi sama. Baš sama? Većina periferija koje znam, u sebi nema dovoljno
> logike ni da pređe ulicu (prim. nik. magistralu). (;
Pa verovatno je mislio na DMA, ne na periferiju. DMA se isprogramira da
prebacuje iz memorije/registra za podatke kontrolera periferije u
memoriju/registar za podatke kontrolera periferije.
> Proces prepuštanja periferije same sebi započinje slanjem specijalne
> instrukcije od strane procesora. Kako se izlazi iz DMA "moda". Valjda
> je pot- rebno da procesor ponovo šalje novu specijalnu naredbu perif.
> uređaju. Kako da to izvede, kad je uređaj "gluv"? Ili je "nagluv"? (:
U obićnom modu, tj. non-burst, DMA traži od procesora memorijski ciklus
preko DMAREQ pina, a procesor mu daje na znanje da je odgovor potvrdan
(ako njemu neće biti potrebna magistrala) preko DMAGNT pina. Kad se
ciklus završi, DMA mora ponovo da traži.
Za burst mod, kada se prenosi odjednom ceo blok podataka, DMA postaje,
zajedno sa procesorom, _bus master_. Tada treba da postoji (mada zavisi
od implementacije...) _bus controller_ koji bus master-ima dodeljuje bus
kad ga ovi zatraže. Tako DMA zatraži bus, dobije ga, prebaci blok i
vrati bus kontroleru. Za to vreme je procesor morao da čeka ako je hteo
da se obrati memoriji... Tako je bar teorijski :) (ovo sam napričao po
sećanju, ali ako treba, pronaći ću negde i literaturu...)
ms.dos.135kale,
-> #132, niklaus
>> Proces prepuštanja periferije same sebi započinje slanjem specijalne
>> instrukcije od strane procesora. Kako se izlazi iz DMA "moda". Valjda je
>> potrebno da procesor ponovo šalje novu specijalnu naredbu perif. uređaju.
>> Kako da to izvede, kad je uređaj "gluv"? Ili je "nagluv"? (:
Ako je gluv, nije nem. ;) Dakle, pošto uređaj završi domaći koji mu je
procesor zadao, on cimne istog za rukav putem interapta. Onda procesor lepo
počne da izvršava programče za obradu aktiviranog interapta. Negde pri
početku tog programčeta (posle čuvanja registara) se nalazi ispitivanje koji
uređaj je izazvao interapt (ako više uređaja koristi jedan interapt) i kad se
nađe koji je, onda se ispituje zašto (ako postoji više mogućih razloga). Ova
testiranja se tipično vrše čitanjem statusnih registara uređaja (ima i drugih
rešenja).
ms.dos.136zormi,
-> #133, mstanic*>> rezultatima koje ja imam. DMA je definisan još na XT-u i
*
* DMA je postojao mnogo pre PC-ja.
Naravno, nije izmišljen na PC-u, nego je još tada upotrebljen za njega
pa je morala biti zadržana kompatibilnost do danas.
*>> po tom standardu prenos se obavlja na 4.77 MHz 8-bitno.
*
* XT je (čini mi se) radio baš na toj frekvenciji i imao je
* 8-bitnu magistralu podataka.
Da.
*>> Noviji DMA kontroleri (recimo 82380 ovako napamet) za
*>> koje imam tehničku dokumentaciju, namenjeni 386+ pločama,
*>> imaju nekoliko modova uključujući 32-bitni burst prenos u
*
* Noviji mikroprocesori imaju "u sebi" (rogobatnog li izraza)
* ugrađene DMA kontrolere. (Z280)
E, ako se dobro sećam DMA je zajedno sa interrupt kontrolerom, cache
kontrolerom i sl. izdvojen, obično u onaj jedan "ceo PC u chip-u".
*>> master modu, 8 DMA kanala i upravljaju magistralom
*>> potpuno "pin-to-pin" kompatibilno kao da to radi CPU.
*
* Tako radi svaki DMA kontroler.
Da ako je prilagodjen konkretnom modelu procesora.
*>> Npr. mogu da prenesu i do 20-30 MB/s.
*
* 82380 prenosi do 32MB/s.
Na 20 MHz prenosi max. 25.2 MB/s, dakle zavisi od radne frekvencije.
žinjenica je ipak da DMA koriste samo neki "gluplji" uredjaji kao što su
floppy (uvek), audio kartice (često) i LAN adapteri (retko), dok hardovi
i grafičke kartice nikad iako prenose velike količine podataka.
ms.dos.137zormi,
-> #132, niklaus* Proces prepuštanja periferije same sebi započinje slanjem specijalne
* instrukcije od strane procesora. Kako se izlazi iz DMA "moda". Valjda je
* pot- rebno da procesor ponovo šalje novu specijalnu naredbu perif. uređaju.
* Kako da to izvede, kad je uređaj "gluv"? Ili je "nagluv"? (:
Ima više modova DMA i u svakom se specificira način izlaska. Npr. može da
izadje posle svakog prenetog byte-a, posle prenetog bloka, posle prenetih
svih podataka u zadatom opsegu adresa... itd. Onda vrati magistralu CPU-u
i čeka sledeći posao.
ms.dos.138mstanic,
-> #131, niklaus>> Apsolutno ne. A uopšte se ne bi bunio kad bi nam predočio
>> tehnike prog- ramiranja DMA kanala.
Pa vidi, ja zaista na PC-ju nisam programirao DMA i zato ne
znam kako tačno radi na PC-ju. (PC ne upotrebljavam ni za
kakav ozbiljan posao).
Imam neki članak o tome ali je, nažalost, na nemačkom. To
mogu pročitati (još nekako) ali da prevedem, nažalost ne
mogu.
So, ako znaš nemački javi pa ću se potruditi ili još bolje
ako možemo da se dogovorimo oko fotokopiranja.
ms.dos.139mstanic,
-> #130, mstanic>>>> Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo
>> Da se ispravim:
>> Nije Therefxx već dosref31 u direktorijumu INFO.
Stalno se ispravljam. Nema ništa o programiranju DMA u
fajlovima dosref22, dosref31 niti u helppc. Nažalost.
ms.dos.140niklaus,
-> #130, mstanic(:> Da se ispravim:
(:> Nije Therefxx već dosref31 u direktorijumu INFO.
A ja se taman začudio šta ću sa silnim suvoparnim oznakama (GSB?) kontrol-
era, flopija i sl. kerefeka... (:
Hajd' sad da probamo i DOSREF...
(:niklaus:)
ms.dos.141niklaus,
-> #129, mjova(:> da IDE ne ide ;) preko DMA...). voleo bih da razjasnim te detalje.
I mi bi volEli. (:
(:niklaus:)
ms.dos.142zormi,
-> #138, mstanic*>> Apsolutno ne. A uopšte se ne bi bunio kad bi nam predočio
*>> tehnike programiranja DMA kanala.
*
* Pa vidi, ja zaista na PC-ju nisam programirao DMA i zato ne
* znam kako tačno radi na PC-ju.
To pomalo zavisi od arhitekture MBD-a i konkretnog modela DMA kontrolera,
(tako npr. Norton Backup prvo testira da li DMA uopšte radi, pa ga tek
onda koristi za prenos) ali ovako uopšteno na primeru PC AT-a sa dva
Intel 8237A-5 DMA chip-a:
- prvi ima 4 DMA kanala (0-3), pri čemu mogu da prenose 8-bita od memorije
do IO i nazad, a 8 ili 16 bita iz memorije u memoriju u blokovima do 64k.
Najčešće je slobodan kanal 3 (za audio kartice i sl), na kanalu 2 je
floppy, a 1 (uvek) i 0 (često) se koriste za druge sistemske potrebe.
- drugi DMA chip se vezuje preko svog kanala 4 kaskadno preko prvog, a
ostaju kanali 5, 6 i 7 za upotrebu i oni su 16-bitni. Blok je do 128k.
E sad, kako se programiraju? Mogu ovako na brzinu da dam samo par detalja
kako bi stekli utisak, a ako neko ima vremena da napiše tekst (članak)
o programiranju DMA...
DMA kanalima se upravlja preko registara DMA kontrolera, a njima se obraća
preko IO adresa. Adrese Page registara su:
Page registar I/O adresa
--------------------------
DMA channel 0 0087h
DMA channel 1 0083h
DMA channel 2 0081h
DMA channel 3 0082h
DMA channel 5 008Bh (kanal 4 je zauzet)
DMA channel 6 0089h
DMA channel 7 008Ah
Refresh 008Fh
A komandnim kodovima se zadaju parametri prenosa:
Hex adresa Komandni kod
---------------------------
0C0 bazna i tekuća adresa za kanal 0
0C2 bazni i tekući brojač
0C4/C6 isto za kanal 1
....itd do kanala 7
ODO registar čitanje statusa/upis komande
0D2 registar za zahtev za upis
....itd (ima toga dosta)
postoje tu i neka ograničenja u vezi parnosti adresa itd. Početna stanja
registara mora da postavi BIOS pri podizanju računara, čak i ako se ne
koriste... itd.
Time sam se bavio dosta davno (u vreme kada se u Jugi još radio razvoj a
ne samo šrafcigerisanje), pa se dosta toga i pozaboravljalo. Tako, moj prvi
zadatak kada sam se zaposlio beše da sklepam jedan MBD sa NEC V20 i
napišem BIOS za njega ;). Eh, srećna vremena...
ms.dos.144mstanic,
-> #132, niklaus>> sama. Baš sama? Većina periferija koje znam, u sebi nema
>> dovoljno logike ni da pređe ulicu (prim. nik.
Periferija sve češće u sebi ima mikroprocesor i ne da ne
zna da pređe ulicu nego može da vozi i autobus pun putnika
(j****e).
ms.dos.143mstanic,
-> #136, zormi>> E, ako se dobro sećam DMA je zajedno sa interrupt
>> kontrolerom, cache kontrolerom i sl. izdvojen, obično u
>> onaj jedan "ceo PC u chip-u".
Da, to je čest slučaj. 82380 je primer te koncepcije.
Međutim, neki konstruktori (iz njima znanih razloga) sve
integrišu u jedan čip (DMA, interapt kontroler, keš +
kontroler, MMU, tajmere itd, i naravno, mikroprocesor).
Primeri su dobro poznati V50 (PC kompatibilan) i manje
poznati Z280 (Zilog).
>>* 82380 prenosi do 32MB/s.
>> Na 20 MHz prenosi max. 25.2 MB/s, dakle zavisi od radne
>> frekvencije.
Na 16MHz prenosi max. 32MB/s. (Po Intelovoj dokumentaciji).
>> žinjenica je ipak da DMA koriste samo neki "gluplji"
>> uredjaji kao što su floppy (uvek), audio kartice (često)
>> i LAN adapteri (retko), dok hardovi i grafičke kartice
>> nikad iako prenose velike količine podataka.
Ovde si dobro uočio koji tipovi "periferija" koriste DMA
a koji ne, samo mi se čini da nisi dobro uočio razloge
zašto je tako. Video (grafički) uređaji ne koriste DMA zbog
toga što se javlja potreba da se istovremeno sa prenosom
vrši i intenzivna obrada istih podataka. A ako formiraju
sliku u nekoj neaktivnoj strani video memorije pa je u
jednom trenutku podmetnu "video čipu" mnogo je efikasnije
imati nekoliko "banki" video memorije ili koristiti MMU.
Dobro je da si pomenuo da audio kartice koriste često DMA
za prenos podataka. Postoje dobri razlozi za to. Pre svega
potrebno je u tačnim vremenskim intervalima prenositi bajt
po bajt iz memorije u, recimo, D/A konvertor uz često vrlo
intenzivnu obradu video memorije (znači generisanje lepih
slika). U tom slučaju se procesor zapošljava za "izradu"
slika a DMA u pozadini (uz vrlo malo oduzimanje vremena
procesoru), prilično precizno generiše zvuk. To se zove
dobra raspodela posla.
Dobrih razloga da diskovi koriste DMA ima, ali zavise od
samog kontrolera na disku (tj. kako je on konstruisan).
Ajde, molim te napiši (ako ti nije teško) šta si mislio pod
pojmom "programirani IO". (Nisam ni zloban, ni zajedljiv,
več bih voleo da razumem na čega tačno misliš).
Nadam se da nisam previše udavio.
ms.dos.145saricl,
-> #128, zormi> ja imam. DMA je definisan jos na XT-u i po tom standardu prenos se
> obavlja na 4.77 MHz 8-bitno. Noviji DMA kontroleri (recimo 82380 ovako
Upravo to nije spor DMA vec magistrala.
ms.dos.146saricl,
-> #132, niklaus> sama. Bas sama? Vecina periferija koje znam, u sebi nema dovoljno logike ni
> da prede ulicu (prim. nik. magistralu). (;
> instrukcije od strane procesora. Kako se izlazi iz DMA "moda". Valjda je
> pot- rebno da procesor ponovo salje novu specijalnu naredbu perif. uredaju.
> Kako da to izvede, kad je uredaj "gluv"? Ili je "nagluv"? (:
> Neizmerno mi je drago sto to cujem. ((:
Dakle opet sa hardverske strane.DMA i nije zamisljen da ga koristi
"jdnobajtni bafer" ili nesto slicno za takvu kolicinu podataka
nevredi se petljati i komplikovati periferije.Za to su izmisljeni interapti.
Inace i DMA ti je jedna vrsta interapta samo sto procesor na nju drugacije
odgovara.Pretpostavka Br.1. DMA koristis pri prenosu povecih mem. blokova
izmedju procesora u viseprocesorskim sistemima.Pri tome nije bitno
dali je to sistem dva RISC procesora ili 80386 i video procesora na
graf.karti.DMA zahtev upucuje nesto sto ima VECI PRIORITET OD SAMOG
PROCESORA U NJEGOVOM SOPSTVENOM SISTEMU,ODNOSNO SISTEM VISE HIJERARHIJE.
(Izrazi mozda bas nisu najsrecnije odabrani i predstavljaju
slobodnu i "slikovitu" interpretaciju zarad lakseg razumevanja op.aut.)
DMA predstavlja potpuno predavanje sistema na upravljanje onom ko je
trazio zahtev.(Ovo nije uvek dosledno ispostovano)
Postoji pin koji govori o postojanju,i aktivnosti DMA prenosa.
Dakle DMA na hardverskom nivou nesalje instrukcije i ne zapocinje
procesor vec periferija.Do zabune je doslo zato sto na PC racunarima
imas mogucnost sofware slanja zahteva za DMA isto kao i za interapt.
Ovi signali su pre svega hardverske prirode,a svaka njihova
emulacija od strane sofvera ti uskracuje po neku privilegiju,jer
bi u protivnom mogao sa par instrukcija bukvalno da spalis procesor.
P.S.-Ako ti nesto nije jasno pitaj konkretno:))))
SARICL.
ms.dos.147.bale.,
-> #139, mstanic>>>>> Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo
>>> Da se ispravim:
>>> Nije Therefxx već dosref31 u direktorijumu INFO.
>
> Stalno se ispravljam. Nema ništa o programiranju DMA u
> fajlovima dosref22, dosref31 niti u helppc. Nažalost.
Ima li ovde nekog ko je trenutno na IV godini ETF/RTI da prepiše
koji programčić i specifikaciju onog Intel-ovog DMA kontrolera za
cenjenu masu?
ms.dos.148v.nesic,
-> #146, saricl> bi u protivnom mogao sa par instrukcija bukvalno da spalis procesor.
>
> P.S.-Ako ti nesto nije jasno pitaj konkretno:))))
Kako bi se to uradilo?
P.S. Pitam ozbiljno, ne zezam se.
ms.dos.149.bale.,
-> #143, mstanic> Ajde, molim te napiši (ako ti nije teško) šta si mislio pod
> pojmom "programirani IO". (Nisam ni zloban, ni zajedljiv,
> več bih voleo da razumem na čega tačno misliš).
Postoje tri načina, odnosno nivoa, IO programiranja:
- programirani, gde u nekoj petlji stalno ispituješ statusne
registre periferije i prenosiš podatke
- interrupt driven, kada imaš potprogram koji inicijalizuje
periferiju za prenos i interrupt rutinu koja prenosi bajt
po bajt (ili reč po reč) prilikom svakog interrupt-a i na
kraju obavesti da je završila; za to vreme se u foreground-u
izvršava glavni program
- DMA IO, kada se DMA isprogramira da prenese blok podataka u
nekom od mogućih modova i ne "troši" ni interrupt-e ni CPU.
ms.dos.150mstanic,
-> #142, zormi>> zadatak kada sam se zaposlio beše da sklepam jedan MBD sa
>> NEC V20 i napišem BIOS za njega ;). Eh, srećna vremena...
Eh, da. Ima li još nade.
ms.dos.151zormi,
-> #143, mstanic*>> Na 20 MHz prenosi max. 25.2 MB/s, dakle zavisi od radne
*>> frekvencije.
*
* Na 16MHz prenosi max. 32MB/s. (Po Intelovoj dokumentaciji).
Nemam pri ruci, ali isti izvor kaže ono gore. Možda se tvoj podatak
odnosi na memory-to-memory, a onaj gore važi za "sve smerove". Ako je
neko dokon može da proba i javi nam koje je ubrzanje i transfer rate
sa DMA dobio. Ostajem pri mišljenju da se sa hardom uz DMA ne može
dobiti ni blizu modernih 1500-2000 kB/s na ISA bus-u.
Ova diskusija se odužila iako je trebalo da bude kratak odgovor na
konkretno pitanje "šta je to DMA", a ističe mi i pretplata.
ms.dos.152saricl,
-> #148, v.nesic> P.S. Pitam ozbiljno, ne zezam se.
Pa recimo,periferija zatrazi zahtev za DMA a ti procesoru
"kazes" da ga ignorise i radi svoj posao.Tada se desava sledeca
stvar:i procesor i periferija pokusavaju da zvrljaju istovremeno
po istim magistralama.Prezivi onaj ko ima jaci izlazni stepen
(bafer) (TTL:LS,s,CMOS,open col i sl).Ovo je naravno samo teoretski posto nisam
probao jos ni jedan d spalim.Skupi procesori i sl.:(((
Ovo je princip.Detalje ti nemogu dati jer neznam.
Ako te nesto vise zanima pitaj nekog ko je STVARNO strucnjak za
Comodore.To zato sto je nesto slicno bilo moguce uraditi na
C-128.Ovo je provereno video sam rezultat,ali opet neznam
koje su instrukcije bile u pitanju.
Ako nadjes odgovor na ovo pitanje nesto slicno verovatno
moze i na PC.
Pozdrav od SARICL.
ms.dos.153mstanic,
-> #149, .bale.>>> pojmom "programirani IO". (Nisam ni zloban, ni
>>> zajedljiv,
>> Postoje tri načina, odnosno nivoa, IO programiranja:
>> - programirani, gde u nekoj petlji stalno ispituješ
>> statusne
>> - interrupt driven, kada imaš potprogram koji
>> inicijalizuje
>> - DMA IO, kada se DMA isprogramira da prenese blok
>> podataka u
Ako sam dobro razumeo šta si rekao gore, onda ne postoji
nikakav poseban "programirani IO", već je u pitanju najobičniji
ulaz/izlaz. Mada, sve je pod kontrolom nekog programa.
Kakav bi bio "neprogramirani IO" ?
OK. Sad vidim da je u pitanju samo terminološka zbrka.
ms.dos.154mstanic,
-> #147, .bale.>> Ima li ovde nekog ko je trenutno na IV godini ETF/RTI da
>> prepiše koji programčić i specifikaciju onog Intel-ovog
>> DMA kontrolera za cenjenu masu?
Zašto mora biti na ETF/RTI i još na IV godini ?
I na koji si kontroler mislio ?
ms.dos.155vita,
-> #119, zormi> Ukratko, DMA omogućava prenos podataka od memorije do
> periferije ili nazad bez posredovanja procesora (posao obavlja
> DMA kontroler). Medjutim, pošto se prenos obavlja preko
> memorijskog bus-a on je za procesor zauzet i za to
Mislim da postoji i DMA kanal
Memory-to-memory!
Ako ovo radi , a ja mislim da radi, neka neko proba nesto vise da sazna.
(frka mi u skoli :( )
Vita
ms.dos.156dejanr,
Problem (? možda su tako hteli da bude ;) primećen na DOS-u 6.2
(mislim da komercijalni DOS 6.2 na 3 diskete po 1.44 mega, datiran
27. septembra 1993):
Izgleda da su nešto brljali po funkcijama za formatiranje diska.
Uzmite disketu od 1.2 megabajta koja je, programom FDFORM, "nabudžena"
na 1.44 megabajta. Probajte da je formatirate na 1.2 mega, sa
format a: /u. Neće - javi 'Parameters not supported by drive' ili tako
nešto. žak i ako uzmete FORMAT.COM iz DOS-a 5.0, i dalje se disketa
ne može formatirati na 1.2, znači nije stvar u tom programu nego u
samom DOS-u. Ako uzmete neki PCTOOLS ili tako nešto, formatiranje naravno
uspeva, jer se tu poziva direktno BIOS.
Ovo je potvrđeno na nekoliko računara.
Drugi problem se javlja na dva računara, a na tri se ne javlja, dakle
ne mora biti isključivo krivica DOS-a. Kada se formatira disketa 3.5
inča, 1.44 megabajta (dakle, najnormalnija situacija), na njoj ostane
jedan lost cluster. Posle to CHKDSK B: sredi, i disketa je sasvim
normalna. Zanimljivo je da se i na ta dva računara problem ne javlja
ako se isključi QEMM 7.01. Nisam stigao da probam upgrade na QEMM 7.03.
Sve konfiguracije su testirane "kontra" virusa i nema ih (?).
ms.dos.158niklaus,
-> #139, mstanic(:>>> Nije Therefxx već dosref31 u direktorijumu INFO.
(:>
(:> Stalno se ispravljam. Nema ništa o programiranju DMA u
(:> fajlovima dosref22, dosref31 niti u helppc. Nažalost.
Zna li onda iko gde se može takvo što naći (programiranje DMA kanala
ili barem programerski orijentisan opis dotičnih)? Ako nije PD/SW -> javite
mi na mail.
Hvala
(:niklaus:)
ms.dos.157niklaus,
-> #136, zormi(:> Na 20 MHz prenosi max. 25.2 MB/s, dakle zavisi od radne
(:> frekvencije.
(:>
(:> žinjenica je ipak da DMA koriste samo neki "gluplji" uredjaji kao
(:> što su floppy (uvek), audio kartice (često) i LAN adapteri
(:> (retko), dok hardovi i grafičke kartice nikad iako prenose velike
(:> količine podataka.
Koji je razlog tome? Cifra brzina protoka mi se dopada (25.2MB/s). (:
Bacite pogled na sledeće (rezultat programa iz WatcomC paketa):
┌────
│ Protected Mode and Extended Memory Performance Measurement -- 3.95
│ Copyright 1988, 1989, 1990 by Rational Systems, Inc.
│
│ DOS memory Extended memory CPU is 24.9 MHz 80386.
│ ---------- ---------------
│ 640 0 K bytes configured (according to BIOS).
│ 640 3328 K bytes physically present (SETUP).
│ 626 1808 K bytes available for DOS/16M programs.
│ (DOS/16M memory range 1272K to 3080K)
│ 5.4 (5.0) 5.4 (5.0) MB/sec word transfer rate (wait states).
│ 10.7 (5.5) 10.8 (5.0) MB/sec 32-bit transfer rate (wait states).
│ 11.8 (0.0) 11.9 (0.0) MB/sec word transfer rate ŠStatic ColumnĆ.
│ 23.7 (0.0) 23.5 (0.0) MB/sec 32-bit transfer rate ŠStatic ColumnĆ.
│
│ Overall cpu and memory performance (non-floating point) for typical
│ DOS programs is 4.19 ˝ 0.59 times an 8MHz IBM PC/AT.
│
│ Protected/Real switch rate = 5575/sec (179 Šsec/switch, 92 up + 87 down),
│ using DOS/16M switch mode 11 (VCPI).
│
└───
Na 32-bitnom transferu memory-memory dobija se brzina taman oko one,
koju spominje zormi. Zar su DMA kanali toliki brzi? (:
(:niklaus:)
ms.dos.160niklaus,
-> #137, zormi(:> * Kako se izlazi iz DMA "moda"?
(:> Ima više modova DMA i u svakom se specificira način izlaska. Npr.
(:> može da izadje posle svakog prenetog byte-a, posle prenetog bloka,
(:> posle prenetih svih podataka u zadatom opsegu adresa... itd. Onda
(:> vrati magistralu CPU-u i čeka sledeći posao.
Da rezimiramo - iz DMA "moda" (DMAovog burst prenosa) se izlazi po
'request'-u samog DMAa.
I dalje ostaje pitanje adresiranja (uopšteno - 'opštenja' (: sa DMA
kanalima)... pa da se pređe na programiranje...
(:niklaus:)
ms.dos.159niklaus,
-> #134, .bale.(:> da se obrati memoriji... Tako je bar teorijski :) (ovo sam
(:> napričao po sećanju, ali ako treba, pronaći ću negde i
(:> literaturu...)
Poželjniji je '01' zapis. (:
(:niklaus:)
ms.dos.161.bale.,
-> #153, mstanic> Kakav bi bio "neprogramirani IO" ?
> OK. Sad vidim da je u pitanju samo terminološka zbrka.
Pa, programirani je onaj kada se glavni program (uslovno rečeno, uvek
ima neki uslov :) bavi kontrolom i komunikacijom sa periferijama.
"Neprogramiranih" ima dva: interrupt driven, kada glavni program
inicijalizuje proces komunikacije a interrupt rutina ga obavlja, i
DMA, kada glavni program inicijalizuje DMA, a DMA ne troši ni
interrupt-e nego samo slobodne memorijske cikluse, što se tiče onoga
što glavni program može da "oseti" (što će reći, ne oseća ništa).
Nije zbrka, ako nije jasna podela, ja ću ponovo :)
ms.dos.162.bale.,
-> #157, niklaus> Na 32-bitnom transferu memory-memory dobija se brzina taman oko one,
> koju spominje zormi. Zar su DMA kanali toliki brzi? (:
>
> (:niklaus:)
Koliko sam video, još uvek fali objašnjenje zašto su sporiji. Postoje,
valjda i 32-bitni DMA, ali hajde, recimo da ih na PC-ju ne koriste (?).
I, ako ćemo PoŠTeNo, molim da se testiranje izvrši unutar petlje u
kojoj se CPU ne obraća memoriji.
ms.dos.163.bale.,
-> #154, mstanic> Zašto mora biti na ETF/RTI i još na IV godini ?
> I na koji si kontroler mislio ?
Tada se predaje predmet Projektovanje mikroprocesorskih sistema i
proučava Intel 8237 DMA Controller.
ms.dos.164.bale.,
-> #158, niklaus> Zna li onda iko gde se može takvo što naći (programiranje DMA kanala
> ili barem programerski orijentisan opis dotičnih)? Ako nije PD/SW ->
> javite mi na mail.
Ma, ima toga... U onom TECH Help! mislim da je dat opis svih registara,
a neka neko sa IV godine RTI prekuca koji listić iz materijala za vežbe.
ms.dos.165.bale.,
-> #155, vita> Mislim da postoji i DMA kanal
> Memory-to-memory!
Pa to je jednostavnije od memory-IO, zar ne?
ms.dos.166.bale.,
-> #159, niklaus> Poželjniji je '01' zapis. (:
Kao što rekoh, studenti u akciju :) Ja sam svoje beleške odavno
pobacao, potražiću tek kad me ubedite da niko nema.
ms.dos.167.bale.,
-> #160, niklaus> I dalje ostaje pitanje adresiranja (uopšteno - 'opštenja' (: sa DMA
> kanalima)... pa da se pređe na programiranje...
Ma i to je boza :) (uopšteno, naravno :), programira se kao i svaka
druga periferija, preko kontrolnih, statusnih i data registara...
ms.dos.168boris,
-> #152, saricl> Comodore.To zato sto je nesto slicno bilo moguce uraditi na
> C-128.Ovo je provereno video sam rezultat,ali opet neznam
> koje su instrukcije bile u pitanju.
> Ako nadjes odgovor na ovo pitanje nesto slicno verovatno
> moze i na PC.
Koliko sam ja upoznat,na intelovoj familiji, DMA pre nego što krene da
radi posao traži dozvolu od procesora za oslobađanje magistrale (BUS
REQUEST) i sačeka odgovor (BUS GRANT), tako da se ne može desiti sudar
na magistrali jer ovaj čeka dozvolu.
Boris
ms.dos.169klisa,
-> #156, dejanr>> ne mora biti isključivo krivica DOS-a. Kada se formatira disketa
>> 3.5 inča, 1.44 megabajta (dakle, najnormalnija situacija), na njoj
>> ostane jedan lost cluster. Posle to CHKDSK B: sredi, i disketa je
>> sasvim normalna. Zanimljivo je da se i na ta dva računara problem
>> ne javlja ako se isključi QEMM 7.01. Nisam stigao da probam upgrade
>> na QEMM 7.03.
Da, ovo je bio slučaj sa kombinacijom QEMM v7.01 i, bar u mom slučaju,
drajverima DOSDATA.SYS i DOSUP.SYS. Kada sam uklonio pomenute drajvere,
sve je radilo OK. Aktuelna verzija QEMM-a nema te probleme.
ms.dos.170zormi,
-> #156, dejanr* Problem (? možda su tako hteli da bude ;) primećen na DOS-u 6.2
* (mislim da komercijalni DOS 6.2 na 3 diskete po 1.44 mega, datiran
* 27. septembra 1993):
*
* Izgleda da su nešto brljali po funkcijama za formatiranje diska.
* Uzmite disketu od 1.2 megabajta koja je, programom FDFORM, "nabudžena"
* na 1.44 megabajta. Probajte da je formatirate na 1.2 mega, sa
* format a: /u. Neće - javi 'Parameters not supported by drive' ili tako
* nešto.
Isključi AUTOMOUNT opciju iz DBLSPACE-a (tools, options...),
pa probaj ponovo.
Izgleda da postoji krupan bug u MS DOS 6.2 jer se sa uključenim
AUTOMOUNT-om na nekim računarima uopšte ne može formatirati nova
blank disketa koja ranije nije formatirana (?!).
ms.dos.171dejanr,
-> #170, zormi>> Isključi AUTOMOUNT opciju iz DBLSPACE-a (tools, options...),
>> pa probaj ponovo.
Hvala za "bajt lične prirode", ali ni na jednom od tih računara uopšte
se ne koristi DBLSPACE.
Danas ću probati da na jednom od njih uradim upgrade QEMM-a na 7.03,
pa ću javiti da li je problem iščezao.
ms.dos.172mstanic,
-> #161, .bale.>> Pa, programirani je onaj kada se glavni program (uslovno
>> rečeno, uvek ima neki uslov :) bavi kontrolom i
>> komunikacijom sa periferijama. "Neprogramiranih" ima dva:
>> interrupt driven, kada glavni program inicijalizuje
>> proces komunikacije a interrupt rutina ga obavlja, i DMA,
>> kada glavni program inicijalizuje DMA, a DMA ne troši ni
Sad mi je jasno na čega ste mislili, ali to sve ima svoja
imena (pooling, interrupt-driven ..), pa ih možda ne bi
bilo loše i koristiti.
Ok. Hvala na objašnjenju.
ms.dos.173.bale.,
-> #172, mstanicŮŢimena (pooling, interrupt-driven ..), pa ih možda ne bi
Pa polling nije baš jednak pojam programiranom IO. Koristi se u mnogim
stvarima, pa i u interrupt driven IO :)
Regards from .bale. !
#:*)+-<
ms.dos.174spantic,
-> #156, dejanr> Problem (? možda su tako hteli da bude ;) primećen na DOS-u 6.2
Taj problem se meni javlja i na običnom DOS 6.0, komercijalnom naravno.
ms.dos.175niklaus,
-> #151, zormi(:> Ova diskusija se odužila iako je trebalo da bude kratak odgovor na
(:> konkretno pitanje "šta je to DMA", a ističe mi i pretplata.
I ne samo to, mi jadničci ("programeri") tražimo od nekoga ko se time
baktao u nekoj od svojih pro.faza (:nema veze sa mejozom), da nam pošalje pri-
merčić funkcionalne sadržine.
Dakle, apelujem na znalce. (:
(:niklaus:)
ms.dos.176peacock,
-> #156, dejanr>**< Drugi problem se javlja na dva računara, a na tri se ne
>**< javlja, dakle ne mora biti isključivo krivica DOS-a.
>**< Kada se formatira disketa 3.5 inča, 1.44 megabajta
>**< (dakle, najnormalnija situacija), na njoj ostane jedan
>**< lost cluster. Posle to CHKDSK B: sredi, i disketa je
>**< sasvim normalna. Zanimljivo je da se i na ta dva
>**< računara problem ne javlja ako se isključi QEMM 7.01.
>**< Nisam stigao da probam upgrade na QEMM 7.03.
Ovo se dešavalo na nekoliko računara dok je bio DOS
datiran 22. februar. Nisam istraživao uzroke, mada je
moguće da je bilo pod QEMM-om 7.01. Uvek je ostajao
jedan loš cluster i bilo mi je čudno da tako važna
stvar OS-a ne radi kako treba. Da li sam onda dobio
veryiju od 10. marta ili je radjen upgrade QEMM-a,
problemi su nestali.
Meni se dešava da diskete od 3.5 inča ne mogu da
formatiram na 720K ako su prethodno normalno
formatirane iz DOS-a.
ms.dos.177maksa,
-> #176, peacock>> Meni se dešava da diskete od 3.5 inča ne mogu da
>> formatiram na 720K ako su prethodno normalno
>> formatirane iz DOS-a.
Meni se dešava da virgo intacta diskete (DD, 720K)
neće da formatira sa čistim FORMAT (bez svičeva) nego
prijavljuje loše sektore, i sl. Diskete su Verbatim,
i zamalo da bacim par komada dok se nisam setio da
forsiram sa /F:720 ... i sve ok. Svašta ...
ms.dos.178niklaus,
-> #167, .bale.(:>> I dalje ostaje pitanje adresiranja (uopšteno - 'opštenja' (: sa
(:>> DMA kanalima)... pa da se pređe na programiranje...
(:>
(:> Ma i to je boza :) (uopšteno, naravno :), programira se kao i
(:> svaka druga periferija, preko kontrolnih, statusnih i data
(:> registara...
Neću se smiriti dok ne vidim primerčić (ili mi neko ne približi mat-
eriju, tako da dalje mogu sam) koji radi bolje nego bilo koja druga metoda...
Tek toliko da se zna. (;
(:niklaus:)
ms.dos.179niklaus,
-> #162, .bale.(:>> Na 32-bitnom transferu memory-memory dobija se brzina taman oko
(:>> one, koju spominje zormi. Zar su DMA kanali toliki brzi? (:
(:> I, ako ćemo PoŠTeNo, molim da se testiranje izvrši unutar petlje u
(:> kojoj se CPU ne obraća memoriji.
Ja sam svoj deo posla obavio. (:
Sada nek se aktivira neko ko zna sa DMAičićima.
(:niklaus:)
ms.dos.180marzi,
!!! PAčNJA !!!
Hitno potreban UPGRADE za DBLSPACE sa DOS 6.0 verzije iz
marta na ovu novu 'original'.
Sve korisne informacije hitno slati u MAIL
Pozdrav,
Marko.
ms.dos.181peca.st,
-> #180, marzi!-> Hitno potreban UPGRADE za DBLSPACE sa DOS 6.0 verzije iz
U zaglavlju poruke mi velikim slovima piše PC.PROG.
Potrudite se molim te da sledeći put piše PC.OS
Peđa.
ms.dos.183rakicm,
Javila mi se potreba da iz file handle-a dodjem do imena datoteke koja je
vezana za taj handle. Iz SFT (sistem file table) nije moguce doci do toga
(tamo postoje FCB imena datoteka i koliko file handle-ova trenutno koris-
ti datoteku ali ne i koji handle-ovi je koriste)
Najblize resenju mi izgleda struktura PSP-a gde stoji
.
.
.
PSP+32h handle array size
PSP+34h handle array pointer
.
.
.
E sad, handle array size je u stvari maksimalan broj istovremeno otvorenih
datoteka, a handle array pointer mi uvek (kod mene) ima vrednost 0000:02C0
na kojoj adresi nema ni pomena o opisima datoteka (pojma nemam sta je).
Zna li neko nesto o ovome?
hvala. Mladen.
ms.dos.184djelovic,
-> #183, rakicm> Javila mi se potreba da iz file handle-a dodjem do imena datoteke koja je
> vezana za taj handle.
Mislim da je to nemoguće. Ono što bi mogao jeste da okačiš neku svoju
funkciju na vektor za otvaranje datoteka, pa da pamtiš "saobraćaj" koji tuda
ide.
ms.dos.185mdimitrijevic,
-> #183, rakicm
Mislim da je to moguce. Pogledaj u PROGRAM direktorijumu fajl 80x0393.ZIP
i datoteku H2NAME.ASM u njemu.
Pozdrav,
Marjan Dimitrijevic
ms.dos.186saricl,
-> #168, boris> REQUEST) i saceka odgovor (BUS GRANT), tako da se ne moze desiti sudar
> na magistrali jer ovaj ceka dozvolu.
Ovo mi nije bilo poznato.Hvala na korisnoj informaciji.
ms.dos.187bojans,
Imam dva pitanja u vezi sa DOS device driverima.
1) Šta se dešava nakon učitavanja device drivera u memoriju? Da
li DOS dostavlja potrebne podatke interrupt rutini tako da ona obavi
funkciju 0, tj, inicijalizaciju?
2) Na koji način se device driveri mogu trace-ovati u nekom
debugeru, s obzirom da se ne učitavaju od adrese 100h već od 0
(ako sam dobro shvatio)?
ms.dos.188djelovic,
-> #187, bojans> 1) Sta se desava nakon ucitavanja device drivera u memoriju? Da
> li DOS dostavlja potrebne podatke interrupt rutini tako da ona obavi
> funkciju 0, tj, inicijalizaciju?
ZZ je svojevremeno pisao o tome u "Računarima". Prema tome - RIND u ruke pa
traži. Takođe, ne bi bilo loše da pogledaš i u intr*.zip fajlovima u INFO diru,
mislim da i tamo ima nešto na tu temu.
ms.dos.189bojans,
-> #188, djelovic>> ZZ je svojevremeno pisao o tome u "Računarima". Prema tome -
>> RIND u ruke pa traži.
Naravno da sam pročitao dotične tekstove, ali ono što sam pitao
nije eksplicitno objašnjeno.
Međutim, više me interesuje odgovor na pitanje br. 2 tj. kako
da u nekom debugeru analiziram device driver step-by-step,
odnosno da li postoji debuger koji ovo omogućava?
žini mi se da si baš ti svojevremeno pominjao neki program
koji omogućava učitavanje .sys fajlova iz komandne linije. Gde
se može naći taj programčić?
ms.dos.190maksa,
-> #189, bojans>> žini mi se da si baš ti svojevremeno pominjao neki program
>> koji omogućava učitavanje .sys fajlova iz komandne linije. Gde
>> se može naći taj programčić?
Evo ga, mada ja s njim nisam uspeo ništa da uradim, sem da
zaglavim mašinu, mada se istini za volju nisam preterano
zamajavao.
čelim ti više sreće. :)
idrv01.zipms.dos.192mstanic,
-> #189, bojans>> Međutim, više me interesuje odgovor na pitanje br. 2 tj.
>> kako da u nekom debugeru analiziram device driver
>> step-by-step, odnosno da li postoji debuger koji ovo
>> omogućava?
Pa to bi trebalo da može svaki dibager, zar ne?
Nisam probao sa .sys drajverima, ali probaj pa da vidimo
(ako ne ide) šta da radimo.
ms.dos.193vitez.koja,
-> #189, bojans#=> žini mi se da si baš ti svojevremeno pominjao neki
#=> program koji omogućava učitavanje .sys fajlova iz
#=> komandne linije. Gde se može naći taj programčić?
Imaš u desqviewu DEVICE.COM - ime sve govori. Probao sam sa ansi drajverom -
radi :)
ms.dos.194dr.grba,
-> #189, bojans>> žini mi se da si baš ti svojevremeno pominjao neki program
>> koji omogućava učitavanje .sys fajlova iz komandne linije. Gde
>> se može naći taj programčić?
Eve ti gu (:
Radi mališa, sve zvoni. Pojma nemam odakle mi (:
drvinst.zipms.dos.195snemcev,
-> #194, dr.grba>> Radi mališa, sve zvoni. Pojma nemam odakle mi (:
Uvrediću se! ;)
ms.dos.197dr.grba,
-> #195, snemcev>> >> Radi mališa, sve zvoni. Pojma nemam odakle mi (:
>>
>> Uvrediću se! ;)
Ne, program nije od tebe. Skinuo sam ga sa nekog BBS-a, verovatno
sa Rhinocerosa...
P.S. Jel' vam program dobar?
ms.dos.198dejanr,
==========
ibm.dos/long.messages #419, from wlmoore, 8591 chars, Fri Dec 31 20:25:58 1993
----------
TITLE: Detecting Batch Files
/*
What I'm attempting here is to establish whether a program has
been called from within a batch file. This is pesudo code, and I'm
presenting it this way to allow easy digestion by everyone, and so
maybe open up a discussion on the topic.
The method I'm presenting here is this.
1: Determine how many command shells are present.
2: How many batch files are present and who do they
belong to.
3: Which command shell I belong to.
What it provides is a chance to identify the entire calling sequence
of a program at the expense of being very version specific. Less version
specific options are given at some points.
AUTHOR: Wayne L. Moore wlmoore@bix.com
Enduring tempory exile in Omaha, NE :-)
<OK to Post>
If anyone is following this, the current alpha of my memory mapper
provides descriptive dumps of psp's and batch stubs. If you want to play
with it, let me know.
READY! SHOOT!! AIM!!!
*/
/*
Magic numbers indicating offset in resident command area which contain
the segment of an existing/running batch file. These offsets are from the
psp so to obtain we'll use ( mcb_seg + 1 ):( magic_num )
*/
#define MSDOS_V50_BAT 0x0252 // These can be done away with
#define MSDOS_V60_BAT 0x0315
#define MSDOS_V62_BAT 0x031A
#define DOS60_XSEG 0x05E3 // segment of the current executable
#define DOS62_XSEG 0x05EA // is located at this offset in DOS v6.x.
// I'm not using these here, but they provide
// a possible method of cross-checking that
// may be useful later.
#define BATCH_ID 0x0100
#define BAT_CALLER_PSP 0x0003
#define BAT_CHARS_READ 0x0008
#define BAT_TRUENAME 0x0020
#define PARENT_PSP 0x0016
#define PSP_ARG_TOTAL 0x0080
#define PSP_ARG_LINE 0x0081
/* For this method assume the following struct is used in a doubly-linked */
/* list and that relevant pointers and records are maintained/created in */
/* code not presented here. Global cs_struct_ptr will be used as variable.*/
/* If you're not comfortable with linked lists you can get away with */
/* arrays of structures. Just take precautions for the bizarre, and if */
/* encountered, put the bugger out of his misery and yours. :-) */
typedef struct {
word psp;
batch_struct *next, *prev;
} batch_struct;
typedef struct {
word psp;
word batch_seg;
word am_temp;
batch_struct *b_file_psp;
command_shell_struct *next, *prev;
} command_shell_struct;
/*
Make sure we're working with the MS-DOS versions we want. No lower life
forms are allowed, including DR-DOS (Ouch, I Heard that!!), NDos, 4Dos
OS/2 (huh? <groan> here it comes!) or any other thing.
*/
word get_os()
begin
word result= 0;
if( os_version == anything other than MS-DOS v5 or 6 )
return result;
else
if( os_version == v5 )
return MSDOS_V5_BAT;
else
return MSDOS_V6x_BAT;
/* Another more general method would be to get the primary shell */
/* segment, then do a string search for the COMSPEC variable. */
/* The offset minus 2 is the "magic" number we need. */
end
/* Get segment of primary shell from ES returned from Int 2fh/122eh */
word get_error_table()
begin
return es from Int 2fh/122eh
end
void get_list_of_lists( var seg, var off )
begin
seg= es from Int21h/52h
off= bx "" ""
end
/* Find the psp of my parent shell by tracing up the psp chain until */
/* the current psp == word at offset 0x16 of the current psp. */
word get_parent_shell()
begin
word cur_psp, tmp_psp, old_psp;
cur_psp= my_psp;
old_psp= 0;
while( cur_psp != old_psp )
begin
old_psp= cur_psp;
cur_psp= WORD_AT( cur_psp, PARENT_PSP );
end
return cur_psp
end
/* Put information about the current working environment into some globals */
void get_working info()
begin
primary_shell= get_error_table();
parent_shell= get_parent_shell();
am_i_shelled= primary_shell != parent_shell;
end
/* About the only special condition I can think of that we have to contend */
/* with is where we have the line "command /c <filename>" within a batch. */
/* We'll exploit the behavior of the psp with regard to the command shell. */
/* To determine this, we'll examine the command line arguments offset in */
/* the psp of the _parent_ command shell. If we find something like: */
/* " /c <filename>", and the first FCB field contains a "C" and the second */
/* FCB field is null, then we've got an occurance. */
word have_command_call( word seg )
word result= 0;
begin
if(( BYTE_AT( seg, PSP_ARG_TOTAL ) != 0 ) and (( the 1st FCB is "C" ) and
( the 2nd FCB is null )))
begin
if( the first non-white chars at [seg, PSP_ARG_LINE] equate to /c )
result= 1;
end
return result;
end
/* Trace down the mcb chain locating shells and gathering pertinent info */
/* A more generic alternative would be to search for batch file signatures */
/* verify that they belong to a command shell and then get the info needed */
/* I went this route just to shorten things up a bit here. What we end up */
/* either way is a command shell heirarchy presented as a negotiable list */
void gather_shell_info( word seg, off )
begin
word cur_mcb= WORD_AT( seg, off );
while( BYTE_AT( cur_mcb, 0 ) != 'Z' )
begin
if(( WORD_AT( cur_mcb + 1, PARENT_PSP ) == ( cur_mcb + 1 )) and
( this isn't our primary shell ))
begin
/* We have a command shell, get info */
cs_struct_ptr->psp= cur_mcb + 1;
cs_struct_ptr->batch_seg= WORD_AT( cur_mcb + 1, magic_bat_offset );
if( have_command_call( cs_struct_ptr->prev->psp ))
cs_struct_ptr->am_temp= TRUE;
/* update pointers */
end
end
end
/* Now we find existing batch stub information by traversing the MCB */
/* chain again and attaching stub information to the proper command */
/* shell structure. */
void gather_batch_info( word seg, off )
begin
word cur_mcb= WORD_AT( seg, off );
while( BYTE_AT( cur_mcb, 0 ) != 'Z' )
begin
if(( WORD_AT( cur_mcb + 1, 0 ) == ( BATCH_ID )) and
( WORD_AT( cur_mcb, 3 ) == ( One of our command shells )))
begin
/* Attach batch record in calling order to the proper command */
/* shell record. When we get done we should have something */
/* like:
<Primary shell command rec>--<batch rec>...
|
<1st child command rec>...
.
.
.
<nth child command rec>--<batch rec>...<current batch rec>
*/
end
end
end
char *batch_name( word seg )
begin
/* Return the fully qualified batch file name located at the offset */
/* contained in BAT_TRUENAME eg: seg:BAT_TRUENAME. You can perform */
/* a far-near copy with sprintf(<char array>,"%Fs",MK_FP(seg,off)) */
end
char *get_batch_line( char *bat_file, word chars_to_read )
begin
/* read lines from the batch file until the number of characters */
/* read is equal to the value chars_to_read. return the last line */
/* to the caller. Note: CR/LF count toward chars_to_read. */
end
/* When we get here, we have a fully formed record structure containing */
/* all the information we need to determine our calling environment. */
int i_am_batched()
begin
/* traverse the shell struct linked-list until the command shell psp */
/* is equal to my parent_shell. Examine the batch_psp variable for */
/* non-zero and do what you need to. Return TRUE for batch else FALSE*/
end
void main()
begin
if(( magic_bat_offset= get_os()) != 0 )
begin
get_working_info();
get_list_of_lists( first_seg, first_off );
/* allocate new shell_struct */
cs_struct_ptr->psp= primary_shell;
cs_struct_ptr->batch_seg= WORD_AT( primary_shell, magic_bat_offset );
/* update pointers */
gather_shell_info( first_seg, first_off - 2 );
gather_batch_info( first_seg, first_off - 2 );
if( i_am_batched())
do what you need to do
end
end
Wayne
ms.dos.199drdjokic,
U jednom od brojeva racunara sam procitao kako se softwerski resetuje PC.
Sada taj clanak nikako ne mogu da pronadjem. Da li neko moze da pomogne ?
Unapred hvala !
ms.dos.200djelovic,
-> #199, drdjokic> U jednom od brojeva racunara sam procitao kako se softwerski resetuje P
> Sada taj clanak nikako ne mogu da pronadjem. Da li neko moze da pomogne ?
Bilo je priče o tome ovde i ranije, potraži malo.
ms.dos.201mjova,
-> #199, drdjokic> U jednom od brojeva racunara sam procitao kako se
> softwerski resetuje PC.
jmp far 0f000:fff0h
ms.dos.202markom,
-> #200, djelovic■■■ Bilo je priče o tome ovde i ranije, potraži malo.
Pointer ...
Marko
ms.dos.203isekulovic,
-> #199, drdjokic>> U jednom od brojeva racunara sam procitao kako se softwerski resetuje
>> PC. Sada taj clanak nikako ne mogu da pronadjem. Da li neko moze da
>> pomogne ?
BLP R55 ili ako ti je lakše pc.soft 9.229
ms.dos.204drdjokic,
-> #203, isekulovic Kako softverski da resetujem racunar iz DOS bat fajla ili iz programa u
CLIPPERU 5.01
ms.dos.205arazumenic,
-> #204, drdjokic-> Kako softverski da resetujem racunar iz DOS bat fajla ili iz programa u
-> CLIPPERU 5.01
Za clipper imaš biblioteku NANFOR i u njoj funkciju ft_reboot().
Saša
ms.dos.206dvidovic,
-> #204, drdjokic> Kako softverski da resetujem racunar iz DOS bat fajla ili iz
> programa u CLIPPERU 5.01
Iz dosa, na dva načina. Prvi je da počneš da koristiš 4dos. On
ima komandu reboot i može da uradi hard ili soft reset. Drugi je
da skineš ovo programče, zakačeno uz poruku. A što se Clipper-a
tiče, ne znam.
reboot.comms.dos.207ficus,
-> #206, dvidovicima komandu reboot i moze da uradi hard ili soft reset. Drugi je
da skines ovo programce, zakaceno uz poruku. A sto se Clipper-a
tice, ne znam.
-----------------------------------------------------
Za kliper ima Ft_reboot() - nanforum ili moz da pise svoju
funkciju u asm-u koja pociva bese ffff:0000 kolko se secam
ako gresim onda je f000:0000 ali sam skoro 100% siguran da je ono prvo
i onda samo tu funkcijicu ulinkuje u clipper.lib i ko da je clipper komanda
savet - nemoj da koristis tako nesto u clipper-u jer isti kreira temp fajlove
za svapovanje memorije a i niko ti ne garantuje da ce sve datoteke biti
zatvorene dakle napisi jos jednu funk. koja udari close all pa onda je vec
sigurnije.
ms.dos.208dsisic,
-> #207, ficus> i onda samo tu funkcijicu ulinkuje u clipper.lib i ko da je
> clipper komanda
Ne bih da se pravim pametan, ali mi je malo bez veze to
linkovanje u clipper.lib, jer bolje je da sve svoje modulcice
stavis u sopstvenu biblioteku rutina koje ce biti van GorePomenute
biblioteke ako nista drugo, a ono zbog toga sto ce ti naici
patch za CA CLIPPER 5.xx koji ti nece prihvatiti LIB po kome
si dzarao pa ces imati male komplikacije.
Na kraju krajeva zasto clipper.lib, a ne dbfntx, terminal, extend... :)
Sa druge strane, nista lakse od ukljucivanja te biblioteke
u EXE modul :) ... bla bla truc truc