PCPROG.3

26 Jul 1993 - 22 Apr 1994

Messages - ms.dos

ms.dos.105 rakicm,
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.106 nkbog, -> #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.107 mjova, -> #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.108 nkbog, -> #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.109 dejanr,
========== 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.110 rakicm, -> #106, nkbog
To je tacno ono sto mi je trebalo. hvala. mladen.
ms.dos.111 bulaja, -> #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.112 mjova, -> #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.113 niklaus,
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.114 mjova, -> #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.115 djelovic, -> #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.116 mjova, -> #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.117 bulaja, -> #112, mjova
│ja jesam ;), odavno. └─── cutis, a? :)
ms.dos.118 niklaus,
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.119 zormi, -> #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.120 mstanic, -> #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.121 niklaus, -> #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.122 mjova, -> #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.123 dmiladinovic, -> #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.124 saricl, -> #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.126 mstanic, -> #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.127 mstanic, -> #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.128 zormi, -> #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.129 mjova, -> #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.130 mstanic, -> #127, mstanic
>> Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo Da se ispravim: Nije Therefxx već dosref31 u direktorijumu INFO.
ms.dos.132 niklaus, -> #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.131 niklaus, -> #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.133 mstanic, -> #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.135 kale, -> #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.136 zormi, -> #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.137 zormi, -> #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.138 mstanic, -> #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.139 mstanic, -> #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.140 niklaus, -> #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.141 niklaus, -> #129, mjova
(:> da IDE ne ide ;) preko DMA...). voleo bih da razjasnim te detalje. I mi bi volEli. (: (:niklaus:)
ms.dos.142 zormi, -> #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.144 mstanic, -> #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.143 mstanic, -> #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.145 saricl, -> #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.146 saricl, -> #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.148 v.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.150 mstanic, -> #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.151 zormi, -> #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.152 saricl, -> #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.153 mstanic, -> #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.154 mstanic, -> #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.155 vita, -> #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.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. ž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.158 niklaus, -> #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.157 niklaus, -> #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.160 niklaus, -> #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.159 niklaus, -> #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.168 boris, -> #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.169 klisa, -> #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.170 zormi, -> #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.171 dejanr, -> #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.172 mstanic, -> #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.174 spantic, -> #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.175 niklaus, -> #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.176 peacock, -> #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.177 maksa, -> #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.178 niklaus, -> #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.179 niklaus, -> #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.180 marzi,
!!! 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.181 peca.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.183 rakicm,
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.184 djelovic, -> #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.185 mdimitrijevic, -> #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.186 saricl, -> #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.187 bojans,
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.188 djelovic, -> #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.189 bojans, -> #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.190 maksa, -> #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.zip
ms.dos.192 mstanic, -> #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.193 vitez.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.194 dr.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.zip
ms.dos.195 snemcev, -> #194, dr.grba
>> Radi mališa, sve zvoni. Pojma nemam odakle mi (: Uvrediću se! ;)
ms.dos.197 dr.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.198 dejanr,
========== 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.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 ? Unapred hvala !
ms.dos.200 djelovic, -> #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.201 mjova, -> #199, drdjokic
> U jednom od brojeva racunara sam procitao kako se > softwerski resetuje PC. jmp far 0f000:fff0h
ms.dos.202 markom, -> #200, djelovic
■■■ Bilo je priče o tome ovde i ranije, potraži malo. Pointer ... Marko
ms.dos.203 isekulovic, -> #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.204 drdjokic, -> #203, isekulovic
Kako softverski da resetujem racunar iz DOS bat fajla ili iz programa u CLIPPERU 5.01
ms.dos.205 arazumenic, -> #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.206 dvidovic, -> #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.com
ms.dos.207 ficus, -> #206, dvidovic
ima 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.208 dsisic, -> #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