ms.dos.1djelovic,
Zna li neko kako da ubrzam timer tick interapt tako da mi se
izvršava 25 puta u sekundi a ne 18.2?
ms.dos.2bole,
A zna li neko kako da usporim isti taj interapt? recimo da se izvrsava 1 put u
secundi!
ms.dos.3todorp,
> Zna li neko kako da ubrzam timer tick interapt tako da mi se
> izvrsava 25 puta u sekundi a ne 18.2?
Zna :) Pogledaj PC.PROG.2 cccc poruku 246 u kojoj je akojovic to objasnio.
Pozdrav od Todora.
ms.dos.4pedjak,
> Zna li neko kako da ubrzam timer tick interapt tako da mi se
> izvršava 25 puta u sekundi a ne 18.2?
Uh, to sam i ja pitao pre dosta vremena. Može, pogledaj u
PC.PROG.2:cccc , tu stvar je detaljno objasnio robert.
ms.dos.5robert,
>> PC.PROG.2:cccc , tu stvar je detaljno objasnio robert.
Bogme, ja to nisam nikad objašnjavao... mora da je neka greška :).
žisto da se neko ne prevari da traži poruku pod mojim username-om :).
Inače, ne ljutim se :)).
ms.dos.6iradovic,
MOZE
William J. Claff: Writing Assembly Language Interrupt Routines
BYTE, 1986 Extra Edition - Inside the IBM PCs, str. 249-262
Ako ovo nije dovoljno mail me za kopiju!
ms.dos.7pedjak,
> Bogme, ja to nisam nikad objašnjavao... mora da je neka greška :).
> žisto da se neko ne prevari da traži poruku pod mojim username-om
> :). Inače, ne ljutim se :)).
Uh, uh ;) mora da sam nešto pobrkao. A ko je objasnio, pa da i ja
potražim ?
ms.dos.8dejanr,
Download-ovana je iz sveta nova verzija liste svih interaptova, INTER36. Biće u
direktorijumo ovi' dana - ovo obaveštenje samo da je neko ne bi bez potrebe još
jednom "skidao".
ms.dos.9dejanr,
Evo jedne zanimljive diskusije sa BIX-a koja se bavi značajnim problemima
vezanim za komandu SHARE. Nešto od toga smo ovde već pominjali - može li se
nekako "resetovati" SHARE?
Savetujem da download-ujete i pročitate, nećete zažaliti!
share.zipms.dos.10dejanr,
==========
ibm.dos/secrets.4 #110, from wlmoore, 913 chars, Sun Jul 25 18:21:45 1993
----------
TITLE: Called from a batch file!
This is under MS-DOS6 and might be different for previous versions, I
haven't checked yet. Offset 0x0315 from the resident portion of command.com
( 0x0325 from MCB ) is a word pointer to the segment of the currently
executing batch file or 0 if none executing.
Try the following out. Create a batch file with the first line calling your
favorite memory mapper. MCB owner for batch stubs is the shell that called
them so it should be easy to find.
Second line is a call to debug. Enter "d <MCB Owner>:0315". There's your
segment for the batch file.
Since offset 3 of a batch stub contains the segment of any calling batch
file, the trace back is easy! What version started allowing calls from batch
files, v3.3? With any luck, this will be consistent all the way back. I
wonder how DR-DOS & 4dos/ndos work? Guess things are going to be busy here
for a bit. Later!
Wayne
==========
ibm.dos/secrets.4 #128, from wlmoore, 2302 chars, Sun Aug 1 11:33:07 1993
Comment(s).
----------
TITLE: Shagging batch files.
Since my last post about the Batch_Seg word pointer to the segment of the
current batch file I have learned a few things.
1: Immediately following the Batch_Seg word is the command line (case
preserved) for the "set comspec" command, or the generic comspec if none
is issued. This is true for MSDOS v 5 & 6. I haven't tried any other
versions yet.
2: At offset 0x42 from this Batch_Seg word is a word pointer to the
Batch_Seg word as an offset from the resident command.com MCB.
(Batch_Seg_Word_Pointer)
3: The offset to the Batch_Seg word ( from MCB ) in MSDOS v5 is 0x0262,
and for MSDOS v6 is 0x0325.
What I haven't found yet, is a pointer to the Batch_Seg_Word_Pointer. It
doesn't make any sense for this to be something in the transient portion of
command.com. I thought there might be a pointer in the DOS Swappable Data
Area, but I haven't been able to find one. So I'm left thinking that
possibly:
1: There's an internal DOS function that returns a pointer to the
Batch_Seg_Word_Pointer. This would be sweet if true.
2: The method I'm using is complicating the hunt. Currently I'm running
from a batch file that calls my memory mapper to get the relative
segments, then calls debug. So today I'm modifying my mapper to allow a
popup window for memory dumping.
3: There is no internal function, just a simple compare/branch whose
location is version specific so that the only feasible ways of
determining if we're being called from a batch file are to:
a: Shag down the MCBs and if we find a batch stub belonging to the
current command shell, open the batch file and read up to the
files' offset in bytes to see if we're being called.
b: Get the Batch_Seg offsets for all versions of MSDOS and create
our own version specific tables for this.
4: My search is too simplistic in that I'm looking for a direct pointer
to the Batch_Seg_Word_Pointer instead a summation from some start of the
resident data area + the offset to the pointer.
I'm wide open to any suggestions on where to go with the hunt. Insights,
speculations, flaws in my thinking,,, anything, is welcome. Comments anyone?
Wayne
==========
ibm.dos/secrets.4 #129, from roedy, 433 chars, Sun Aug 1 14:48:59 1993
Comment to 128. Comment(s). More refs to 128.
----------
The other complication is 4DOS. I asked Andrew Shulman about
this who called me where problem a while back and his opinion was
it was intractable. However, for many applications, insisting on
DOS 5.0 or DOS 6.0 is not unreasonable. For example, some
inhouse code for a company could make that assumption, or I could
-- tell all my clients for whom I write custom code, that they
need upgrade if they want the latest goodies.
-30-
==========
ibm.dos/secrets.4 #130, from roedy, 234 chars, Sun Aug 1 14:49:00 1993
Comment to 128. More refs to 128.
----------
DDION sent me some code called IS_BAT. It is a little utility
that figures out if it is running on the command line on in a BAT
file. It has no purpose other than to let you use the technique
in your own code. Check your mail.
-30-
==========
ibm.dos/secrets.4 #131, from roedy, 278 chars, Sun Aug 1 16:06:22 1993
Comment to 129. More refs to 129.
----------
"about this who called me where problem"
Roedy, either you have been coding too much Forth, or you need
some sleep, or you have been hanging out too much with people
just learning English.
I think you meant to say "I asked Andrew Shulman about this
problem a while back"
-30-
==========
ibm.dos/secrets.4 #132, from tfrost, 181 chars, Sun Aug 1 17:03:19 1993
Comment to 128. Comment(s). More refs to 128.
----------
>Shagging batch files
What does the verb "to shag" mean in the USA? In England, its only
use for the last couple of centuries has been as a synonym for the
four-letter "f" word.
==========
ibm.dos/secrets.4 #133, from j_vanderbilt, 304 chars, Sun Aug 1 18:47:59 1993
Comment to 128. Comment(s).
----------
You may find that after a certain point there is no separate pointer to
to the pointer you want - it's just in the one or two spots of code that
use the variable. In that case it would be reasonable for it to be in the
transient part of COMMAND. There seems to be a good bit of ad hoc code
in there.
==========
ibm.dos/secrets.4 #134, from dave2, 73 chars, Sun Aug 1 20:13:58 1993
Comment to 132. Comment(s). More refs to 132.
----------
In the USA "to shag" use usually used as "to leave some place rapidly."
==========
ibm.dos/secrets.4 #135, from wlmoore, 1220 chars, Sun Aug 1 20:49:08 1993
Comment to 129.
----------
Yeup! I was waiting till I had finalized on some method for MS-DOS before
taking a look at what 4DOS does. I know I haven't mentioned DR-DOS in this
yet, but I have looked at it, it's hairy! I've been hoping to find a
realistic solution to MS-DOS first, its approach to shelling is rather
simplistic making it easy to track changes. Then applying what I've learned
to DR-DOS, hopefully making it easier.
Unlike MS-DOS, DR-DOS keeps a 512 byte resident stub low which has offset
pointers to the HMA (assuming UMBs HMAs & DR-DOS 6 here, I haven't played
with any other configuration yet). The pointer to the Batch_Seg is in the HMA
at offset 0x02c? (don't have my notes right now). But their methods on
calling and shelling differ and I haven't had the time yet to track things
down.
While I'm hoping for an elegant answer, realistically I think it's going to
come down to following the MCB and comparing batch stub owners to the
current shell. Even here there are problems with DR-DOS since a batch file
running under a shell has the shell as its MCB owner, yet the parent psp of
an executing program is the primary shell.
Oh well, it may not be worth the effort after all, but it sure is
interesting!
Wayne
==========
ibm.dos/secrets.4 #137, from mkropp, 464 chars, Sun Aug 1 21:19:12 1993
Comment to 134.
----------
[From dave2 #134]
It also means "pick up".
This also goes back to something I said somewhere on BIX about using
commonly understood terms. BIX is a global community and many members may
not understand idioms. I'd rather see precise, if dry, technical talk that
can be more easily understood by more BIXen without having to know the
context, story, etc. Things like shag, cherry-pit, fluff, etc. do not mean
much to many people without prior knowledge.
--Mike
==========
ibm.dos/secrets.4 #138, from wlmoore, 61 chars, Sun Aug 1 22:09:53 1993
Comment to 133.
----------
That would really stop this tract cold wouldn't it!
Wayne
==========
ibm.dos/secrets.4 #139, from karenk, 303 chars, Sun Aug 1 23:02:31 1993
Comment to 132. More refs to 132.
----------
> "What does the verb "to shag" mean in the USA?"
tr. v. shagged., shagging., shags. 1. To make shaggy; roughen. 2. a.
To chase and bring back; fetch. b. BASEBALL To chase and catch (fly
balls) in practice. [ME *shagge < OE sceagga, matted hair.]
I think meaning 2a was the one intended.
Karen
==========
ibm.dos/secrets.4 #140, from gmussar, 83 chars, Mon Aug 2 10:24:12 1993
Comment to 132.
----------
[Reply to tfrost #132]
I guess that gives "shag carpet" a whole new meaning.
Gary
ms.dos.11akojovic,
O tome sam pisao PC.PROG.2 u temi cccc. Pogledaj pa ako treba neko
dodatno objašnjenje traži.
Koja
ms.dos.12mirkot,
Ovde prilazem mali batch program koji moze da sluzi umesto
NORTON-ovog NCD. Ulazni argumenti su ime diska i deo imena
direktorijuma na koji zelite da predjete. Ukoliko izostavite ime
diska podrazumeva se tekuci. Nisam siguran da li program radi sa
verzijama DOS-a ispod 5.0, zboga parametara DIR komande.
Ja sam program nazvao CCD zbog blizine tastera na tastaturi. NEOPHODNO
je da u istom (ili nekom drugom) direktorijumu imate fajl CCD.$$$
koji sadrzi samo tri znaka: slova CD i jedan razmak (space).
@echo off
copy c:\bat\ccd.$$$ c:\bat\$.bat > nul
if %2. == . goto 1_parametar
%1
shift
:1_parametar
dir \ /a:d /s /b | find /i "%1" >> c:\bat\$.bat
call c:\bat\$.bat
del c:\bat\$.bat
cls
Mirko
ms.dos.13bulaja,
**** new file ****
R:\IBMPC\INFO\*.*
----------------------
dvint36 zip 92533 Interrupt List DESQview / QEMM API poziva
inter36a a01 166567 MSDOS Interrupt List 36, podaci o svim interaptima #1/7
inter36a a02 165789 MSDOS Interrupt List 36, podaci o svim interaptima #2/7
inter36b a01 169567 MSDOS Interrupt List 36, podaci o svim interaptima #3/7
inter36b a02 168004 MSDOS Interrupt List 36, podaci o svim interaptima #4/7
inter36c zip 114507 MSDOS Interrupt List 36, podaci o svim interaptima #5/7
inter36d a01 105567 MSDOS Interrupt List 36, podaci o svim interaptima #6/7
inter36d a02 103670 MSDOS Interrupt List 36, podaci o svim interaptima #7/7
ms.dos.14mirkot,
Cesto se u batch programima koristi komanda ECHO. da bi se ispisala
jedna prazna linija. Potpuno ravnopravno se mogu koristiti i:
ECHO+
ECHO[
ECHO]
ECHO\
ECHO:
ECHO;
ECHO"
ECHO/
ECHO <Alt-255>
Isto vazi i za ispitivanje postojanja argumenata pozvanog batch
programa:
IF %1+ == + ECHO Nema argumenata
... itd. kao u gornjem primeru.
Cak funkcionise i:
IF %1<Alt-255> == <Alt-255> ECHO Nema argumenata
tako da se u samom listingu ne vidi nista.
ms.dos.15ssokorac,
─┼┤ IF %1<Alt-255> == <Alt-255> ECHO Nema argumenata
Funkcioniše bilo koji kod, jer šta on radi? Doda %1 na prvi kod, a kako
je %1 ništa ostaje samo taj kod koji je, naravno, jednak samom sebi.
ms.dos.16vitez.koja,
#=> ECHO <Alt-255>
Aman ;) funkcionise i "ECHO.", što je i zvanicna kombinacija za ispisivanje
praznog reda (zašto zvanična ? zato što sam je našao u dve naše knjige o DOSu,
a šta su te knjige doli prepisani helpovi i uputstva;).
ms.dos.17aspasic,
HI :) E, mom ortaku se dešavaju čudne stvari sa compom pa me zamolio da
pitam sledeće:
Naime desi mu se da mu comp prijavi ono "Internal stack overflow".
To se svima bar jednom desilo. Onda resetuješ makinu i to je to! :)
E, a kad on posle overflow-a resetuje makinu, ona mu uništi FAT tabelu !!!!
Ako neko zna šta je neka lupi reply ili nek' mi pošalje mail. Hvala.
ASP
ms.dos.18vitez.koja,
žudne stvari+FAT => virus :(
ms.dos.19aspasic,
### žudne stvari+FAT => virus :(
Ma nije virus, provereno :(
ASP
ms.dos.20mjova,
da li je kopija FATa uvek u memoriji?
ms.dos.21ilazarevic,
Pretraživao sam ovu i PC.PROG.2 konferenciju ne bih li našao nešto u
direktnom pisanju na ekran, bez poziva DOS-a. Nisam uspeo da nađem - je l'
može jedan pointer?
ms.dos.22dejanr,
>> Pretraživao sam ovu i PC.PROG.2 konferenciju ne bih li našao nešto u
>> direktnom pisanju na ekran, bez poziva DOS-a. Nisam uspeo da nađem - je l'
>> može jedan pointer?
Da li te zanima pisanje preko BIOS-a ili direktno u video memoriju? Da li
te zanima tekst ili grafika? Ako je grafika, onda za koju karticu?
ms.dos.23ilazarevic,
> Da li te zanima pisanje preko BIOS-a ili direktno u video memoriju? Da li
Direktno u video memoriju, u text modu, za Herkules. Elem, u međuvremenu mi
je djelovic rekao na koju adresu da upisujem. Ostaje mi još jedan problem:
kako da upišem znak? Jedini prihvatljiv način je da upisujem ASCII kod, ali
onda mi se ne ispiše ništa...
ms.dos.24dejanr,
>> Direktno u video memoriju, u text modu, za Herkules. Elem, u međuvremenu
>> mi je djelovic rekao na koju adresu da upisujem. Ostaje mi još jedan
>> problem: kako da upišem znak? Jedini prihvatljiv način je da upisujem
>> ASCII kod, ali onda mi se ne ispiše ništa...
Treba da upisuješ ASCII znak, ali na svako drugo mesto! Svako prvo je
atribut tog znaka, da li je bold, podvučen, inverzan... Malo sam pozaboravljao
koji je bit za šta odgovoran što se atributa tiče, ali može da se prelista
neka knjiga ako treba.
ms.dos.25djelovic,
> Treba da upisuješ ASCII znak, ali na svako drugo mesto! Svako prvo je
> atribut tog znaka, da li je bold, podvučen, inverzan...
Mislim da je obrnuto: prvo idu slova pa onda atributi?
ms.dos.26ilazarevic,
>> Treba da upisuješ ASCII znak, ali na svako drugo mesto! Svako prvo je
>> atribut tog znaka, da li je bold, podvučen, inverzan...
>
> Mislim da je obrnuto: prvo idu slova pa onda atributi?
Hmmm :) Ja sam probao da pišem sam znak, ali na svako prvo mesto, i događa se
greška. To je izgledalo ovako (izvinite na juskiju):
MemŠ$B800:$0000Ć:='A';
Ovo neće da radi, prijavljuje Type mismatch.
ms.dos.28ssokorac,
─┼┤ MemŠ$B800:$0000Ć:='A';
─┼┤ Ovo neće da radi, prijavljuje Type mismatch.
Pa, ne možeš da mu šalješ char na mesto bytea :).
Dakle, od B000:0000 ideš sledećih 4000 bajtova po ekranu, u paru po dva
bajta. 16 bitova:
x xxx xxxx xxxxxxxx
- --- ---- --------
b b f ASCII
l k r kod
i g g karaktera
n r r
k o o
u u
n n
d d
Primer: MEMW Š$b000:0Ć:=(WHITE SHL 4 + BLACK) SHL 8 + ORD('A')
Ispisuje crno na belom A.
P.S. B800:0 je za VGA/EGA, hercules kreće od B000:0.
ms.dos.30v.nesic,
> MemŠ$B800:$0000Ć:='A';
>
> Ovo neće da radi, prijavljuje Type mismatch.
Mem[$B000:$0000]:=ord('A')
Ovo hoće da radi, ne prijavljuje Type mismatch.
ms.dos.31isekulovic,
>> Da li te zanima pisanje preko BIOS-a ili direktno u video memoriju? Da
>> li te zanima tekst ili grafika? Ako je grafika, onda za koju karticu?
Ja sam samostalno uspeo da provalim na hercu kako da gadjam grafiku
direktno u memoriju, ali bi me veoma interesovalo isto to za ega/vga, u
literaturi sam pronašao da se video memorija nalazi izmedju A000 i C000
ali tu ima mesta samo za jednu stranu 640x350x16.
ms.dos.32peca.st,
!-> koji je bit za šta odgovoran što se
!-> atributa tiče, ali može da se prelista
!-> neka knjiga ako treba.
Prva četiri bita - boja ispisa,
sledeća tri - boja pozadine (nema svetlih nijansi, samo 8 boja)
i blink on/off.
Peđa.
ms.dos.33maksa,
Turbo Pascal - Kompletan vodič
O'Brien
Procedure FastWrite(x,y : Byte;
Var s : string
fg,bg : Byte) ;
Var
w : word;
i,ColAtr : Byte;
Begin
ColAtr := (bg Shl 4) + fg; (* Kreira bajt atributa *)
w := ((y-1)*80 + (x-1))*2; (* Izračunava pomeraj *)
For i := 1 To Length(s) Do
Begin
MemWŠVS:wĆ := ColAtr Shl 8) + Ord(sŠiĆ);
Inc(w,2);
End;
End;
Izvini zbog yuscii-a.
ms.dos.35milos,
>> video memorija
Dekiper je o tome pisao u conf. Izašlo i u računarima, a ovde izgleda nema ko
da
čita.
Evo , prepisujem:
Var
Adresa:Word;
Begin
If MemŠ0:$0449Ć=7 then Adresa:=$B000 else Adresa:=$B800;
MemWŠAdresa:0Ć=Word('C')+($70 Shl 4);
End.
I ovde umesto Word('C') upiši npr. Word('A') kao što tebi treba, a ovo $70 Shl
4 predstavlja šemu koja je u stvari onaj drugi bajt (bajt pozadine), jer kao
što vidite, koristi se MemW koji traži 2 bajta iliti Word. Dakle Word('A') +
($70 Shl 4) će "taman" popuniti ova dva bajta i stvar je rešena. Ali da znaš da
ne smeš prema tome da upisuješ u svaki, nego u svaki drugi bajt ;))
Interesantno
je, mada nisam imao vremena za tako nešto, malo čeprkati sa ovim $70, menjati
vrednost i videti šta će se desiti. Svaka promena ove vrednosti će rezultovati
promenom kombinacije forground/background. Ovo ($70) će dati belo na crnom, a
neke druge vrednosti, nešto drugo.
ms.dos.36eagle,
> x xxx xxxx xxxxxxxx
> - --- ---- --------
> b b f ASCII
> l k r kod
> i g g karaktera
> n r r
> k o o
Ovako je po defaultu, a mogu se odrediti i cela
4 bita za pozadinu (standardna tri plus blink-bit).
ms.dos.37eagle,
> Evo , prepisujem:
> Begin
> If MemŠ0:$0449Ć=7 then Adresa:=$B000 else Adresa:=$B800;
> MemWŠAdresa:0Ć=Word('C')+($70 Shl 4);
> End.
Ono u Računarima niš' ne valja. Bolje bi bilo da stoji ($07 Shl 8). U gornjem
primeru je rezultat isti, međutim nemoguće je promeniti atribut tako da se
dobije bilo koja druga pozadina sem crne, zato što ispada da se gornja 4 bita
koriste kao foreground, a donja 4 bita se mešaju sa karakterom.
> Interesantno
> je, mada nisam imao vremena za tako nešto, malo čeprkati sa
> ovim $70, menjati vrednost i videti šta će se desiti. Svaka
Veoma interesantno, nikad ne znaš šta će ispasti ;)
> Ovo ($70) će dati belo na crnom, a
Nije belo nego svetlo-sivo.
ms.dos.38pedjak,
> MemŠ$B800:$0000Ć:='A';
> Ovo neće da radi, prijavljuje Type mismatch.
Naravno da je Type mismatch, kad se u memoriju upisuju bajtovi.
Dakle MemŠ$b800;$0000Ć:=ord('A') i sve će biti ok.
ms.dos.39ssokorac,
─┼┤ Ovako je po defaultu, a mogu se odrediti i cela
─┼┤ 4 bita za pozadinu (standardna tri plus blink-bit).
Umesto blinkovanja dobijaš još 8 boja? Kako?
ms.dos.40milos,
Da li neko zna kako je moguće napisati jednu funkcijicu koja bi detektovala
pritisak samo Alt ili Ctrl tastera, nešto slično kao onome u DesQview-u.
ms.dos.41eagle,
> ─┼┤ Ovako je po defaultu, a mogu se odrediti i cela
> ─┼┤ 4 bita za pozadinu (standardna tri plus blink-bit).
> Umesto blinkovanja dobijaš još 8 boja? Kako?
Prosto, preko 10h prekida. Na primer ovako:
procedure blink(x:boolean);assembler;
asm
mov ah,10h
mov al,03h
mov bl,byte(x)
int 10h
end;
Sa blink(false) sprečavaš blinkanje, iliti dobijaš 16 boja za pozadinu, a sa
blink(true) vraćaš na staro. Treba napomenuti da se ovo posle svake promene
video-moda vraća na default, a što se TP-a tiče , procedura textbackground
pretvara sve ulazne vrednosti u 0..7, što znači da se ovakvi atributi moraju
upisivati direktno u promenljivu textattr.
ms.dos.42niklaus,
> ─┼┤ Ovako je po defaultu, a mogu se odrediti i cela
> ─┼┤ 4 bita za pozadinu (standardna tri plus blink-bit).
>
> Umesto blinkovanja dobijaš još 8 boja? Kako?
I ne samo to. Jako je zanimljiv fazon sa menjanjem RGB parametara
(verovatno preko VGA registara, samo kojih?) svakog atributa u text-modu.
Svi ste sigurno videli uvodnu sekvencu igre
GODS - kada sadržaj DOS text okruženja Fade-Out -ne.
Jaaako lepo! (((:
(:niklaus:)
ms.dos.43niklaus,
> Da li neko zna kako je moguće napisati jednu funkcijicu koja bi
> detektovala pritisak samo Alt ili Ctrl tastera, nešto slično kao
> onome u DesQview-u.
Najbolje ti je da prebaciš keyboard-interrupt vekror na
svoju proceduricu, a ona bi bila kao nešto što imaš ovde na SEZAMu
( R:ĐIBMPCĐPASCALĐTPFAST40.??? ).
Verovatno nećeš ukapirati ovaj pseudo-jezik (odn. klasični
programerski žargon), ali napregni sive ćelijice. (;
(;niklaus;)
P.S. Naravno, šta ti nije jasno - pitaj!
ms.dos.44eagle,
> I ne samo to. Jako je zanimljiv fazon sa menjanjem RGB
> parametara (verovatno preko VGA registara, samo kojih?) svakog
> atributa u text-modu.
Može i preko Biosa, postoji čitav niz funkcija za rad sa kolor registrima.
ms.dos.45drpr,
-> Može i preko Biosa, postoji čitav niz funkcija za rad sa
-> kolor registrima.
Ajd nas uputi gdi da tražimo pa da se i sami sa time zanimamo
:)
cope
ms.dos.46ilazarevic,
> MemŠ$B000:$0000Ć:=ord('A')
>
> Ovo hoće da radi, ne prijavljuje Type mismatch.
Hoće, ali ne ispisuje znak :)
ms.dos.47eagle,
> -> Može i preko Biosa, postoji čitav niz funkcija za rad sa
> -> kolor registrima.
> Ajd nas uputi gdi da tražimo pa da se i sami sa time zanimamo
Ja sam to pronašao u knjizi PC/Rom Bios, a inače ima u svakoj interrupt
listi. Ako hoćeš, mogu da ovde prepišem tih šest-sedam funkcija.
ms.dos.48v.nesic,
>> MemŠ$B000:$0000Ć:=ord('A')
>>
>> Ovo hoće da radi, ne prijavljuje Type mismatch.
>
> Hoće, ali ne ispisuje znak :)
Probaj B800:0000 ako koristiš kolor karticu :)
ms.dos.49niklaus,
>> I ne samo to. Jako je zanimljiv fazon sa menjanjem RGB
>> parametara (verovatno preko VGA registara, samo kojih?) svakog
>> atributa u text-modu.
>
> Može i preko Biosa, postoji čitav niz funkcija za rad sa kolor
> registrima.
Koji pozivi? Baži to ovde - za sve nas. (:
(:niklaus:)
ms.dos.50robert,
>> I ne samo to. Jako je zanimljiv fazon sa menjanjem RGB parametara
Neko je već kačio mali demo program u ovoj konf. (ali ne i ovoj
temi) koji radi zatamnjivanje i ponovno osvetljavanje ekrana. Prekopaj
malo ako te zanima.
ms.dos.51eagle,
> > Može i preko Biosa, postoji čitav niz funkcija za rad sa
> > kolor registrima.
> Koji pozivi? Baži to ovde - za sve nas. (:
Evo ovako:
žitanje kolor registara
┌─────────────────────────┐
│ ah = 10h │
│ al = 15h │
│ bx = kolor registar │
│ int 10h │
├─────────────────────────┤
│ ch = vrednost zelene │
│ cl = vrednost plave │
│ dh = vrednost crvene │
└─────────────────────────┘
Postavljanje kolor registara
┌─────────────────────────────┐
│ ah = 10h │
│ al = 10h │
│ bx = kolor registar │
│ ch = vrednost zelene │
│ cl = vrednost plave │
│ dh = vrednost crvene │
│ int 10h │
└─────────────────────────────┘
Postavljanje bloka u kolor registrima
┌──────────────────────────────────────┐
│ ah = 10h │
│ al = 12h │
│ bx = prvi kolor registar │
│ cx = broj kolor registara │
│ es:dx = seg:ofs kolor tabele │
│ int 10h │
└──────────────────────────────────────┘
Ima tu još par funkcija za straničenje kolor registara,
ali mi se čini da nema neke koristi od njih.
E sad, u knjizi piše da zbir zelene, crvene i plave vrednosti
u dekadnom obliku treba da iznosi 100, tj. da njihove vrednosti
predstavljaju procente. U stvarnosti nije tako, već se jednostavno
iz svake vrednosti uzima prvih 6 bitova (znači da je najveća vrednost 3Fh)
i od njih se pravi boja po principu "što više crvene to crvenija boja".
Kolor tabela u poslednjoj funkciji bi trebala biti matrica
x * 3 bajta , pri čemu se ovo x unosi u CX.
ms.dos.52drpr,
-> listi. Ako hoćeš, mogu da ovde prepišem tih šest-sedam
-> funkcija.
Ma samo uputi koji su interapti koje adrese itd.. ne moraš da
pišeš.
cope
ms.dos.53vvelisavljev,
Zanima me kako se ponaša computer kada napišeš FORMAT C:.
Da li će pitati nešto u stilu "Are you shure?"?
Ovo mi je vrlo važno a nemam nameru da startujem FORMAT na svom
HDD-u da bi proverio.
ms.dos.54peca.st,
!-> Da li će pitati nešto u stilu "Are you
!-> shure?"?
Pa neće pitati ništa u stilu "Are you shure?"
ali u stilu "Are you sure?" hoće.
;)
Peđa.
ms.dos.55spantic,
> Da li će pitati nešto u stilu "Are you shure?"?
To beše ono svojevremeno neko sa SEZAMa demonstrirao?
Po priči ispada da počne samo procente da broji. Ja posle
nisam probao :)
ms.dos.56magician,
=> To beše ono svojevremeno neko sa SEZAMa demonstrirao?
=> Po priči ispada da počne samo procente da broji. Ja posle
=> nisam probao :)
Ja sam se mogao zakleti da si ti bio taj koji je pričao kako je hteo
nekome da pokaže da 'format' prvo pita 'da li si siguran' i....
Posle si morao da radiš unformat. :)
Ako nisi ti, onda je sigurno neki drugi Pantić :)
ms.dos.57debelijencija,
!=?> Zanima me kako se ponaša computer kada napišeš FORMAT C:.
!=?> Da li će pitati nešto u stilu "Are you shure?"?
Koliko se ja sećam:
WARNING!!
ALL DATA ON NON-REMOVABLE DISK C: WILL BE LOST!
CONTINUE (Y/N)?
ms.dos.58drassa,
>> Da li će pitati nešto u stilu "Are you shure?"?
Će da pita... Nego šta!
Samo shure = sure :)
Bye, Drassa
ms.dos.59bearboy,
> Zanima me kako se ponaša computer kada napišeš FORMAT C:.
>
> Da li će pitati nešto u stilu "Are you shure?"?
Hoće, barem MS-DOS 6 hoće.
ms.dos.60ndragan,
/ Ovo mi je vrlo važno a nemam nameru da startujem FORMAT na svom
Možda bi moglo da se proba sa RAM diskom? Ako već može da se kešira,
pade mi na um i ovo: šta bi se u tom slučaju desilo sa kešerovim
baferima?
ms.dos.61ilazarevic,
> Da li će pitati nešto u stilu "Are you shure?"?
Reći će nešto kao: "Svi podaci biće izgubljeni. Da li želiš da nastaviš?"
ms.dos.62viktor,
A, ovaj put me neces na to upecati ... ;)))
ms.dos.63spantic,
> Ja sam se mogao zakleti da si ti bio taj koji je pričao kako je hteo
> nekome da pokaže da 'format' prvo pita 'da li si siguran' i....
> Posle si morao da radiš unformat. :)
Jok ja, mislim da je to bio Dzak :) Nemam ja ništa s tim :))
ms.dos.64mickeyl,
=> Hoće, barem MS-DOS 6 hoće.
'Oće svaki.
ms.dos.65ndragan,
/ A, ovaj put me neces na to upecati ... ;)))
Nije bila pecaljka, nego obična mentalna vežba. Pretpostavljam da bi se
formatirali kešerovi baferi (pod dodatnom pretpostavkom da je upis
odložen), a kešer onda ne bi prijavljivao loše klastere dok se
formatiranje ne završi, a onda... more, moraću da probam sa nekom manjom
particijom na nekom levom disku (kod korisnika).
Kad smo kod pecanja, ovde je sad glavna provala da karaši idu ko ludi na
stiropor, probali ljudi i stvarno ide. Ona druga provala da smuđevi idu
na pertinaks je ipak samo provala.
ms.dos.66oduz,
>**> Kad smo kod pecanja, ovde je sad glavna provala da karaši
>**> idu ko ludi na stiropor, probali ljudi i stvarno ide. Ona
>**> druga provala da smuđevi idu
Jos malo ce i ljudi na stiropor....
Ogi
ms.dos.67vvelisavljev,
> Nije bila pecaljka, nego obična mentalna vežba.
> Pretpostavljam da bi se
Kad napišem Format E: (ramdrive) dos napiše da se ta particija ne
može formatirati.
ms.dos.68kriss,
Evo možda dosadnog pitanja, ali mnogo toga se uči :)
žemu 'služe' .BIN datoteke? I uopšte, kakva im je struktura? (Jel
mogu da se prevedu u nešto izvršno)
ms.dos.69niklaus,
(:> Kad napišem Format E: (ramdrive) dos napiše da se ta
(:> particija ne može formatirati.
Rupa na saksiji. (;
Kao ono:
"Keyboard not present!
Press <F1> to continue!" ((:
(:niklaus:)
ms.dos.70snemcev,
>> "Keyboard not present!
>> Press <F1> to continue!" ((:
Ovo i nije toliko blesavo kao što na prvi pogled izgleda. Da bi
pritisnuo F1 moraš priključiti tastaturu, a time automatski i otklanjaš
uzrok problema.
ms.dos.71mjova,
> "Keyboard not present!
> Press <F1> to continue!" ((:
ne shvatam. ako tastatura nije prisutna, šta bi trebalo da se desi?
meni je ovo logično. "dalje ne idem bez tastature, kad je montiraš daj
mi F1" - sasvim logično, zar ne?
ms.dos.72.bale.,
> žemu 'služe' .BIN datoteke? I uopšte, kakva im je struktura? (Jel
> mogu da se prevedu u nešto izvršno)
Trebalo bi da struktura bude ista kao .COM, pošto exe2bin od .exe pravi
.bin, a kad se to preimenuje u .com, gde, radi! :)
ms.dos.73kriss,
*> Trebalo bi da struktura bude ista kao .COM, pošto exe2bin od
*> .exe pravi .bin, a kad se to preimenuje u .com, gde, radi! :)
???
Nije mi jasno. Znači obična BIN=COM ?
ms.dos.74ndragan,
/ Kad napišem Format E: (ramdrive) dos napiše da se ta particija ne
/ može formatirati.
Svašta će da urade, samo zato što ne znaju da napišu rutinu koja bi
obradila loše klastere u istom :)
ms.dos.75isekulovic,
>> Trebalo bi da struktura bude ista kao .COM, pošto exe2bin od .exe
>> pravi .bin, a kad se to preimenuje u .com, gde, radi! :)
Preimenuj .exe u .com, i gle čuda radi! :)
ms.dos.76.bale.,
> Nije mi jasno. Znači obična BIN=COM ?
Pa zavisi, možeš i tekst fajl da nazoveš .bin :)
ms.dos.77.bale.,
> Preimenuj .exe u .com, i gle čuda radi! :)
Da, ali i dalje kao .exe :)
ms.dos.78mjova,
> Preimenuj .exe u .com, i gle čuda radi! :)
to nije nikakvo čudo. servis za učitavanje i izvršavanje programa se
oslanja na prva dva slova kojima počinje SAMO exe datoteka. ako su ta
slova MZ onda se učitava EXE, što znači da se vodi računa o
segmentima i obavlja se podešavanje koda (u memoriji). na taj način se
omogućava izvršavanje programa u bilo kom segmentu!
strukture com i exe se razlikuju, nije im jedina razlika tip. rezlike
su značajne jer je .com 'slika' koda kakav mora biti u memoriji, uvek
se učitava na org 100h i ne može biti duži od jednog segmenta (u
normalni uslovima). exe ima zaglavlje, tabelu za relokaciju, i brdo
informacija pored samog koda. exe ne može da radi nikako drugačije no
da se potera dosov 'loader', dok se com može relativno lako
startovati: alocira se 64k, u taj prostor se učita ceo fajl (od 100h)
i jednostavno skoči na 100h.
ms.dos.79ndragan,
/ Nije mi jasno. Znači obična BIN=COM ?
Ima različit ofset. .com ima ORG 100, tako da se pri učitavanju relocira
256 bajta višlje, a ta rupa služi da se u nju strpa pcb (program control
block) i ostali zaostaci iz CP/Ma. .bin valjda nema tu relokaciju, i
zgodan je što se onda može direktno učitati u memoriju i pozvati kao
potprogram (PRINT USR 51000 :). Ovo u zagradi je zezalica, ali ta
tehnika upravo pali kad se, recimo, asemblerska rutina učitava i/ili
poziva iz foksa ili bejzika.
ms.dos.80niklaus,
(:>>> "Keyboard not present!
(:>>> Press <F1> to continue!" ((:
(:>
(:> Ovo i nije toliko blesavo kao što na prvi pogled izgleda. Da
(:> bi pritisnuo F1 moraš priključiti tastaturu, a time
(:> automatski i otklanjaš uzrok problema.
Pa recimo, primer: Crkne kabl tastature, ili nešto od vitalne
elektronike u samoj njoj.
Tu je najveći problem, što se nakon (eventualnog) pritiskanja
<F1> kompjuter reboot-uje. Odnosno, kako pristupiti promptu? (recimo
u AUTOEXEC-u se nalazi i komanda NC ili WIN ili neka druga aplikacija
koju je moguće koristiti bez tastature - mišem)
(:niklaus:)
ms.dos.81janko,
> (:>>> "Keyboard not present!
> (:>>> Press <F1> to continue!" ((:
Svojevremeno sam se iskidao od smeha na izmišljenu:
Press any key to continue or any other key to quit.
A ovo je, izgleda, stvarna poruka. Maštovito. :)
Evo još jedne stvarne poruke. To se događalo na računaru Mek
PowerBook. (jes' da nije ms.dos, ali, da se vidi, da i tuđa
žena nije uvek lepa :) ). Instalira se program. (Američki, za
podršku faks modema, koji je ugrađen u računar na kome se događa
priča). Instaler završi instalaciju i kaže "Program je uspešno
instaliran."
Zatim, pri butovanju, program označi samog sebe da se nije
butovao, i da poruku "Nisam mogao da se učitam, jer ovo nije
PowerBook kompjuter." Kako biste se osećali, kada čitate tu
poruku na ekranu u čijem ćošku je ugravirano "PowerBook,"
na računaru u koji je ugrađen hardver specijalizovan za PowerBook,
i to hardver iste firme koja je napisala program (dobijen uz
hardver, za podršku tom hardveru) koji daje ovako genijalnu
poruku? :))
Štos je bio u tome da je program pravljen pre nego što je
napravljen baš taj model PowerBook-a, pa pošto je program malo
prljavo bio pisan... moralo se doći do novije verzije.
ms.dos.82snemcev,
>> Tu je najveći problem, što se nakon (eventualnog) pritiskanja
>> <F1> kompjuter reboot-uje. Odnosno, kako pristupiti promptu? (recimo
>> u AUTOEXEC-u se nalazi i komanda NC ili WIN ili neka druga aplikacija
>> koju je moguće koristiti bez tastature - mišem)
To uopšte nije problem. Svaki noviji BIOS dopušta da se isključi
testiranje ta(ra)stature prilikom podizanja sistema.
Pitanje je samo ko će se setiti da isključi proveru pre nego što mu
crkne tastatura. ;)) Mada, ako koristi samo programe za koje ne treba
tastatura (o, zar i to postoji?), onda je vrlo verovatno da je provera
već odavno isključena.
ms.dos.83eotek,
> block) i ostali zaostaci iz CP/Ma. .bin valjda nema tu relokaciju,
i
> zgodan je sto se onda moze direktno ucitati u memoriju i pozvati
kao
> potprogram (PRINT USR 51000 :). Ovo u zagradi je zezalica, ali ta
mozda nema sa ovim veze, ali mi treba pomoc !! :
u TP 5.5 postoji jedno programce zove se binobj.exe koje
fino radi sa fontovima (prebaci ih u .obj, pa se font ulinkuje).
e sad, to bih isto ali da radi u C (imam 6.0), ali
ne znam kako da font ubacim u exe fajl, dakle da ne mora da
se ucitava sa diska, iz posebnog .fon fajla.
sigurno ima efikasnog leka, koji li je ?
eotek (moze i ma se)
ms.dos.84cnenad,
Napravio sam ovaj mali BAT fajl kojim zelim sebi olaksati posao prilikom
arhiviranja ali nikako nisam uspeo da ga nateram da kad pored prve komande
za PKZIP pored %1 koji je ime arhive u tekucem direktorijumu izvrsi arhiviranje
odredjenih datoteka a ne svih, a dodao sam jos %2.%3 gde bi to bilo normalno
ime.ext ili dzoker znaci ? i * ali nece da radi. U stvari radi samo ako se
ubaci *.* ali ne i nesto drugo. Moze li se to doterati ili da zaboravim na
to ? BTW razmisljam jos da doteram i ubacim parametre ispred sa kojima bih
odredjivao gde ce se arhiva napraviti ali mi se cini previse komplikovanim
jer se parametri ubacuju redom kao na primer
pkzip -! -ex -%1 -%2 -%3 %4 %5.%6
gde bih povremeno ubacivao odredjene prekidace kad mi zatrebaju ali
normalno ako necu neke prekidace ili samo jedan (od u ovom primeru moguca 3)
onda ce drugi parametar pogresno protumaciti (a on bi bio ime arhive) i ne
bi se napravila arhiva.
Evo BAT-a !
@ECHO OFF
PKZIP -! -EX %1
PKZIP -! %1 -Z < C:\COMMENT.TXT
PKUNZIP -T %1
@ECHO ON
ms.dos.85dr.grba,
>> pkzip -! -ex -%1 -%2 -%3 %4 %5.%6
Sasvim je dovoljno i ovako (pisano za doskey) :
doskey u=pkunzip $1 $2 $3 $4 $5 $6
doskey z=pkzip $1 $2 $3 $4 $5 $6
Šest mesta za argumente - teško da bi mi ikada atrebalo više...
A što se tiče kompleksnije .BAT datoteke - pa, bože moj, zašto da ne?...
ms.dos.86cnenad,
ŁŁŁ doskey u=pkunzip $1 $2 $3 $4 $5 $6
ŁŁŁ doskey z=pkzip $1 $2 $3 $4 $5 $6
ŁŁŁ
ŁŁŁ Sest mesta za argumente - tesko da bi mi ikada atrebalo
ŁŁŁ vise...
Da li se ponasaju onako kako bih ja hteo i kako sam naveo u prethodnoj
poruci ?
ms.dos.87v.nesic,
> Sasvim je dovoljno i ovako (pisano za doskey) :
>
> doskey u=pkunzip $1 $2 $3 $4 $5 $6
> doskey z=pkzip $1 $2 $3 $4 $5 $6
Umesto $1 ... $6 stavi jedno $* koje prenosi SVE parametre.
ms.dos.88dr.grba,
>> Da li se ponasaju onako kako bih ja hteo i kako sam naveo u
>> prethodnoj poruci ?
Da. Na primer :
z a:qwerty -ex -m *.txt *.doc -xqwerty.txt
Ako si baš navalio na više argumenata, onda ni razlika između z i pkzip
ne igra neku ulogu...
ms.dos.89dr.grba,
>> Umesto $1 ... $6 stavi jedno $* koje prenosi SVE parametre.
E, pa lepo, ovo je još bolje. Nisam znao za ovo. Hvala.
ms.dos.90cnenad,
ŁŁŁ Ako si bas navalio na vise argumenata, onda ni razlika izmedu
ŁŁŁ z i pkzip
Da, ali ubacim na primer osnovne kao sto su -! -EX -U/F i onda opciono
-rp i mozda jos recimo -$[d:]. Hvala !
ms.dos.91vision,
Video ja one vase diskusije oko prikazivanju karaktera direktno u video
memoriji, i zatim primetio da ste spomenuli i kako se moze dobiti jos 8
boja ako se blinkovanje ukine (poruka 41 'eagle'). Sve radi OK ali samo
za EGA i navise, za HERCULES nece. Bas sam primetio da to je ipak moguce
i uHERCULESU, tu 'foru' upotrebljava Central Point Software (kod CPAV-a,
PCShell-a,...). Ako neko zna kako da se to resi i u HERCULES-u, molim da
posalje resenje ovde.
PS. Thanks.
ms.dos.93drpr,
Nisam znao da li je ovo najpogodnija tema za pitanje koje sledi
ali se nadam da ću naići na odgovor:
čelim da uradim program za komunikaciju sa paralelnim portom,
nije u pitanju printer već neki uređaj kojem ću ja slati neke
kodove ali ću najčešće primati znake sa porta. Potražio sam
malko u Helppc šta ima o tome ali mi baš nije sve načisto pa
molim nekog da mi pomogne oko ovoga da napiše par reči kako ta
komunikacija ide o čemu se vodi računa, koje su adrese itd...
U napred hvala,
Cope
ms.dos.94dtadic,
>> čelim da uradim program za komunikaciju sa paralelnim portom,
>> nije u pitanju printer već neki uređaj kojem ću ja slati neke
>> kodove ali ću najčešće primati znake sa porta. Potražio sam
>> malko u Helppc šta ima o tome ali mi baš nije sve načisto pa
>> molim nekog da mi pomogne oko ovoga da napiše par reči kako ta
>> komunikacija ide o čemu se vodi računa, koje su adrese itd...
Svaki paralelni port ima 3 registra:
8-bitni izlazni registar (za LPT1 adresa 3BC)
5-bitni ulazni registar (za LPT1 adresa 3BD)
5-bitni izlazni registar (za LPT1 adresa 3BE)
Promenu logičkih nivoa na pinovima na konektoru vršiš upisom vrednosti
na odgovarajuću adresu. Na primer, ako hoćes da ti na pinu 2 bude '1',
a pinovima 3-9 '0' u Pascalu je dovoljno da napišeš Port[$3BC] := 1.
žitanje radiš slično. Obrati pažnju da se radi o jednosmernim portovima
tj. signale iz tvog uređaja možeš da dovodiš samo na 5 pinova koji su
vezani za registar na adresi 3BD.
Nivoi su TTL, a raspored izvoda i adresa za LPT2 i LPT3 imaš u HelpPC-u.
Ako te još nešto zanima - pitaj.
DT
ms.dos.95drpr,
-> 8-bitni izlazni registar (za LPT1 adresa 3BC)
-> 5-bitni ulazni registar (za LPT1 adresa 3BD)
-> 5-bitni izlazni registar (za LPT1 adresa 3BE)
Evo ovako da idemo po redu:
Parallel Printer Port
Port 3BC printer data output (readable)
Ovde nisam želeo da prepišem sve jer su svi data za slanje:
Port 3BD printer status register (Parallel Printer Port)
│7│6│5│4│3│2│1│0│ ports 279, 379, 3BD
│ │ │ │ │ │ │ └──── 1 = time-out
│ │ │ │ │ └─┴───── unused
│ │ │ │ └──────── 1 = error, pin 15
│ │ │ └───────── 1 = on-line, pin 13
│ │ └────────── 1 = out of paper, pin 12
│ └─────────── 0 = Acknowledge, pin 10
└──────────── 0 = busy, pin 11
E sad ti si mi rekao da je ovo ulazni registar znači sve
podatke koje dobijam sa paralelnog porta stizaće ovde? Pitanje
je da li nekako mogu da organizujem da "kontinualno" kupim
podatke sa tog porta (interrupt 17h?). Mislim želim da se
okačim o neki interrupt i da skidam podatke kao u seriskoj
komunikaciju. I zanima me da li su ovi podatci za pinove
napisani samo za printer (out of paper....) a ako nakacim nesto
drugo onda postaje ulazni registar? Toliko od mene za sad i u
napred hvala
cope
ms.dos.96dtadic,
>> Port 3BD printer status register (Parallel Printer Port)
...........................................................
>> E sad ti si mi rekao da je ovo ulazni registar znači sve
>> podatke koje dobijam sa paralelnog porta stizaće ovde?
Da. Moći ćeš da očitaš stanje na pinovima na centronix konektoru (10-15).
>> Pitanje je da li nekako mogu da organizujem da "kontinualno" kupim
>> podatke sa tog porta (interrupt 17h?). Mislim želim da se okačim o neki
>> interrupt i da skidam podatke kao u seriskoj komunikaciju.
Nema potrebe da koristiš interapt 17h - istu stvar možeš da ostvariš direktnim
čitanjem porta na adresi 3BD. Nemam iskustva sa kačenjem na interapt, ali
evo onoga što znam: LPT-u 1 je dodeljen IRQ7. Međutim, u interapt listi
piše da njegova upotreba zavisi od proizvođača hardvera. Nekad se aktivira
na promenu signala error (pin15), nekad na promenu on-line (pin13), a
nekad se uopšte ne aktivira.
>> I zanima me da li su ovi podatci za pinove
>> napisani samo za printer (out of paper....) a ako nakacim nesto
>> drugo onda postaje ulazni registar?
To je ulazni registar, bez obzira šta je na njega vezano.
DT
ms.dos.97bulaja,
**** new file ****
R:\IBMPC\INFO\inter*.*
----------------------
inter37 a01 174390 MSDOS Interrupt List 37, podaci o svim interaptima #1/6
inter37 a02 174383 MSDOS Interrupt List 37, podaci o svim interaptima #2/6
inter37 a03 174330 MSDOS Interrupt List 37, podaci o svim interaptima #3/6
inter37 a04 174384 MSDOS Interrupt List 37, podaci o svim interaptima #4/6
inter37 a05 174400 MSDOS Interrupt List 37, podaci o svim interaptima #5/6
inter37 a06 162368 MSDOS Interrupt List 37, podaci o svim interaptima #6/6
<Thanks to drakce & Imtel BBS>
ms.dos.98d.petrovic,
Ă> v42bis... kod sezama promenim samo %c i ukinem kompresiju...
Nema potrebe.
ms.dos.99d.petrovic,
Ă> , zasto se ta▀da startuje interni zmodem u telemate-u. i moram da
Ă> pritiskam ctrl-x da se prekine
Isključi Auto-DL
ms.dos.100drpr,
Haj,
imam jedno pitanje. Zanima me da mi neko objasni na kojoj
adresi i koliko memorije zauzima upisivanje slike u video
memoriju recimo u modu 800x600 u 256 boja? Hteo bi da skinem to
u neki fajl i da posle koristim u programu, zanima me o čemu
treba voditi računa itd... Gledao sam tekst u računarima
(seize) ali mi nije baš pomoglo. Zanima me što i mnogi programi
sličene namene skidaju paletu itd. Znači ukratko o VGA karti .
U napred hvala,
Cope
ms.dos.101janko,
> imam jedno pitanje. Zanima me da mi neko objasni na
> kojoj adresi i koliko memorije zauzima upisivanje
> slike u video memoriju recimo u modu 800x600 u 256 boja?
256 boja staje u jedan bajt. 800x600=480000 bajtova.
Početna adresa video memorije na EGA i VGA kartama je a000,
u jednom trenutku možeš da vidiš samo 64K, a kontrolnim
registrima biraš način rada sa tih 64K.
ms.dos.102spantic,
Uz poruku je primer programiranja na BC++ modula za skrin sejver za Windows
3.1
spheres.zipms.dos.103dejanr,
==========
ibm.dos/secrets.4 #381, from egdavis, 1188 chars, Sun Oct 31 11:52:55 1993
Comment to 375.
----------
> I wonder if Andrew et al are working on an Undocumented OS/2? This could
From: Andrew Schulman <76320.302@CompuServe.COM>
Title: If you could post the following:
I have just finished the 2nd edition of Undocumented DOS; it went to
the printer last week, and should be available in bookstores in the
U.S. in mid-December. This is almost a total rewrite of the book, and
has several new chapters, including one on "Other DOSes." This
includes an in-depth discussion of the DOS box in OS/2 (mostly 2.0,
though some 2.1). I wasn't aware of this PSP thing you mention, but
there's plenty on the SDA and other emulated DOS structures. I had
some help with IBM with this section, so it should be reasonably
accurate, even though I am barely knowledgable about OS/2 2.x.
As for "Undocumented OS/2," I occassionally get requests for this, but
I don't believe such a book would sell more than maybe 10,000 copies.
Doing one of these Undocumented books is so much work, it's not really
worth it if you're not going to sell at least 40,000 copies I think.
This is also why I don't plan on "Undocumented NT," even though there
is also a lot of material there.
Regards,
Andrew
ms.dos.104mjova,
ima li šanse da se program pri učitavanju u memoriju postavi na kraj
memorije? dakle, nekako umesto FIRST FIT treba da default bude LAST
FIT?
ne dolazi u obzir pravljenje loadera jer to treba da se ugradi u jedan
takav...
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,
> 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,
> 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,
> 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,
To je tacno ono sto mi je trebalo.
hvala.
mladen.
ms.dos.111bulaja,
│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,
> 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,
> 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,
> 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,
> 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,
│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,
* 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,
>> 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,
(:> 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,
> 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,
>> Da li DMA radi sa video memorijom (trebalo bi)?
Trebalo bi, al nije.
Komunikacija racunar-video kartica ide preko dogovaranja
procesora.
ms.dos.124saricl,
> 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,
>> 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,
>> 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,
*>> 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,
> 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,
>> Sezam-u) Therefxx (xx=neki broj). Mislim da je tamo
Da se ispravim:
Nije Therefxx već dosref31 u direktorijumu INFO.
ms.dos.131niklaus,
(:> 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.132niklaus,
(:> 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.133mstanic,
>> 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.,
> 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,
>> 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,
*>> 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,
* 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,
>> 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,
>>>> 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,
(:> 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,
(:> da IDE ne ide ;) preko DMA...). voleo bih da razjasnim te detalje.
I mi bi volEli. (:
(:niklaus:)
ms.dos.142zormi,
*>> 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.143mstanic,
>> 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.144mstanic,
>> 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.145saricl,
> 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,
> 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.,
>>>>> 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,
> 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.,
> 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,
>> 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,
*>> 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,
> 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,
>>> 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,
>> 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,
> 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.157niklaus,
(:> 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.158niklaus,
(:>>> 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.159niklaus,
(:> 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.160niklaus,
(:> * 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.161.bale.,
> 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.,
> 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.,
> 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.,
> 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.,
> Mislim da postoji i DMA kanal
> Memory-to-memory!
Pa to je jednostavnije od memory-IO, zar ne?
ms.dos.166.bale.,
> 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.,
> 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,
> 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,
>> 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,
* 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,
>> 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,
>> 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.,
ŮŢ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,
> 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,
(:> 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,
>**< 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,
>> 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,
(:>> 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,
(:>> 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,
!-> 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,
> 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,
Mislim da je to moguce. Pogledaj u PROGRAM direktorijumu fajl 80x0393.ZIP
i datoteku H2NAME.ASM u njemu.
Pozdrav,
Marjan Dimitrijevic
ms.dos.186saricl,
> 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,
> 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,
>> 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,
>> ž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,
>> 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,
#=> ž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,
>> ž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,
>> Radi mališa, sve zvoni. Pojma nemam odakle mi (:
Uvrediću se! ;)
ms.dos.197dr.grba,
>> >> 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,
> 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,
> U jednom od brojeva racunara sam procitao kako se
> softwerski resetuje PC.
jmp far 0f000:fff0h
ms.dos.202markom,
■■■ Bilo je priče o tome ovde i ranije, potraži malo.
Pointer ...
Marko
ms.dos.203isekulovic,
>> 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,
Kako softverski da resetujem racunar iz DOS bat fajla ili iz programa u
CLIPPERU 5.01
ms.dos.205arazumenic,
-> 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,
> 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,
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.208dsisic,
> 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
ms.dos.209dragisha,
-> > U jednom od brojeva racunara sam procitao kako se
-> > softwerski resetuje PC.
->
-> jmp far 0f000:fff0h
Jel' neko probao ovo u DOS prozoru pod Windows? Vrlo nedosljedno od malog
mekog.
--
[Pick, scrape, roll into a ball, and flick.]
ms.dos.210cnenad,
ŁŁŁ Iz dosa, na dva načina. Prvi je da počneš da koristiš 4dos. On
Ima četiri načina. Pored dva koja si naveo, ostaje još NDOS u kome isto kuca
REBOOT a može i preko BE REBOOT.
ms.dos.211milan,
A propos DOS-a 6.2. Postoji Step Up sa DOS-a 6.0 na 6.2
(bio je valjda i ovde na SEZAM-u). Fajlovi na njemu nose datum
30 sept 1993. Međutim fajlovi na instalacionim disketlama DOS-a
6.2 nose datum 27. sept 1993 (nigde ne piše da je beta pa valjda
i nije). No to nije bitno, bitno je da se osnovni fajlovi
(io.sys, msdos.sys i commamd.com) razlikuju!
Zna li neko u čemu je stvar?
Pl poz M
ms.dos.212drakce,
│ Postoji Step Up sa DOS-a 6.0 na 6.2 (bio je valjda i ovde na SEZAM-u).
│ Fajlovi na njemu nose datum 30 sept 1993. Međutim fajlovi na instalacionim
│ disketlama DOS-a 6.2 nose datum 27. sept 1993 (nigde ne piše da je beta pa
└────────
Vrlo važno, tri dana gore-dole ;). Instalirao sam taj od 27. septembra i
nisam imao problema (osim onog sa FORMAT /U, al' to je druga priča).
Jedan od mogućih scenariJa bi bio: DOS 6.2 završen 27. septembra i
pušten u promet. Trebalo im tri dana da dovrše upgrade verziju. Fajlovi
se razlikuju u dužini, jer su hteli da upgrade bude što manji, kako bi
se mogao modemom prenositi. Zato su radili "patch"-eve starih fajlova i
postigli funkcionalnu jednakost (šta god to značilo), a nisu marili da
se baš u bajt poklope.
Eto, to mi se javlja. Da li me čujete? :)
ms.dos.213milan,
> Eto, to mi se javlja. Da li me čujete? :)
Da!
Pl poz M
P.S. A propos, pade mi na pamet da taj vrač-pogađač tako i
postiže svoj uspeh. Šta god da prethodno lupi on na kraju kaže:
"Da li me čujete?". črtva, kud' će šta će, kaže: "Da!" i tako
ispada da je on u pravu. :))))))
ms.dos.214markom,
■■■ Ima četiri načina. Pored dva koja si naveo, ostaje još NDOS u
■■■ kome isto kuca REBOOT a može i preko BE REBOOT.
Aj' sad može i iz programa reboot.exe, a i iz mase debuggera. U onom dosovom
'debuggeru' se to valjda radi sa g FFFF:0000, ali nisam siguran :))
Marko
ms.dos.215andrejt,
QUOTE>>'debuggeru' se to valjda radi sa g FFFF:0000, ali nisam siguran :))
Da bese u Racunarima (a to je valjda preuzeto sa SEZAMa ;) ).
(echo g = ffff : 0000 | debug > nul)
(Ne znam dal' je neko spomenuo al' to je isto sto i valjda JMP FFFF0
u bilo kom asmu)
ms.dos.216markom,
■■■ (Ne znam dal' je neko spomenuo al' to je isto sto i valjda
■■■ JMP FFFF0 u bilo kom asmu)
Ajmi napišite program koji će to da radi!! Ja se ubi od pokušavanja, al' neće!
Marko
ms.dos.217mjova,
> -> jmp far 0f000:fff0h
> Jel' neko probao ovo u DOS prozoru pod Windows? Vrlo
> nedosljedno od malog mekog.
lično ne koristim win, ali mislim da nije dovoljno skočiti samo na
datu lokaciju. to je bio samo hint, a zapravo potpun odgovor bi bio
ovakoav:
ms.dos.218markom,
■■■ lično ne koristim win, ali mislim da nije dovoljno skočiti
■■■ samo na datu lokaciju. to je bio samo hint, a zapravo potpun
■■■ odgovor bi bio ovakoav:
■■■
■■■
Kakav ?????
Marko
ms.dos.219mjova,
> ovakoav:
;))
ovakav:
mov ax, 40h
mov ds, ax
mov ax, 1234h
mov ds:72h, ax
jmp far 0f000h:fff0h
dakle, treba malo džarati. ovako nešto piše u tech ref 4.0:
0:0472 2 1234H means Ctrl-Alt-Del reboot is in progress. BIOS checks
this to avoid doing a "cold boot" with the time-consuming POST
4321H means reset, preserving memory
5678H, 9abcH, and abcdH (are internal PC Convertible codes)
dalje, zar ovakav tag-line na moju poruku? a? ;)
> [Pick, scrape, roll into a ball, and flick.]
ms.dos.220bigbrada,
!##! datu lokaciju. to je bio samo hint, a zapravo potpun odgovor
!##! bi bio ovakoav:
Dobar odgovor nema šta ;)
ms.dos.221bearboy,
> lično ne koristim win, ali mislim da nije dovoljno skočiti samo
> na datu lokaciju. to je bio samo hint, a zapravo potpun odgovor
> bi bio ovakoav:
>
>
Prilično traljav odgovor, ako smem da primetim ;)
ms.dos.222markom,
■■■ mov ax, 40h
■■■ mov ds, ax
■■■ mov ax, 1234h
■■■ mov ds:72h, ax
■■■ jmp far 0f000h:fff0h
----------------------------
Moj program:
■■■ .model small
■■■ .code
■■■ mov ax, 40h
■■■ mov ds, ax
■■■ mov ax, 1234h
■■■ mov ds:72h, ax
■■■ jmp far 0f000h:ffff0h
■■■ end
----------------------------
Evo šta mi reče TASM:
---------------------
■■■ Assembling file: asm.ASM
■■■ **Error** asm.ASM(7) Illegal immediate
■■■ Error messages: 1
■■■ Warning messages: None
■■■ Passes: 1
■■■ Remaining memory: 443k
Aj' mi sad recite gde sam pogrešio ...
Marko
ms.dos.223mivel,
++ jmp far 0f000h:0fff0h
Dobra zamena:
mov ax,-1
push ax
inc ax
push ax
retf
ms.dos.224mjova,
da li je u pitanju lenjost ili nešto drugo? danas ljudi očekuju
potpuno sažvakan i trenutno upotrebljiv odgovor - u protivnom
odustaju. ;)
.model tiny
.code
org 100h
reboot proc far
start: mov ax, 40h
mov ds, ax
mov ax, 1234h
mov ds:72h, ax
jmp far ptr rom_init
reboot endp
ROM_SEG segment at 0f000h
org 0fff0h
rom_init label
ends
end start
ms.dos.225kriss,
˙˙ ■■■ jmp far 0f000h:ffff0h
+++++
˙˙ Aj' mi sad recite gde sam pogrešio ...
Nešto mi je veliki ovaj brojčić za 16 bita. ;) Možda je trebalo nulu
na početak?
ms.dos.226markom,
■■■ da li je u pitanju lenjost ili nešto drugo? danas ljudi
■■■ očekuju potpuno sažvakan i trenutno upotrebljiv odgovor - u
■■■ protivnom odustaju. ;)
Definitivno je u pitanju lenjost :)) ali dok ima tako dobrih & vrednih kao ti,
mi lenji nismo u opasnosti :))))
Hvala za primer, nadam se da radi :)
Marko
ms.dos.227mjova,
> Definitivno je u pitanju lenjost :)) ali dok ima tako
> dobrih & vrednih kao ti, mi lenji nismo u opasnosti :))))
traćiti tuđe povorenje i vreme povlači za sobom izvesne konsekvence.
ms.dos.228dragisha,
-> dalje, zar ovakav tag-line na moju poruku? a? ;)
->
-> > [Pick, scrape, roll into a ball, and flick.]
THor, sram da ga je i stid!! :))
Radim isto što i ti, ali Windows se zaledi kad se ovo proba. Moraću da
probam 4Dos reboot u DOS prozoru, da vidim jel' pametniji:).
--
[" If All Fails, READ THE DOCS ! "]
ms.dos.229niklaus,
(:> Hvala za primer, nadam se da radi :)
Ex, baš si lenj. (: Probaj ga, složi utiske, pa se (eventualno) požali
ili pohvali mjovu uz preporuku programčeta ostalima...
(: Sean :)
ms.dos.230mstanic,
>> ■■■ jmp far 0f000h:fff0h
^^^^ original
>> ■■■ jmp far 0f000h:ffff0h
^^^^^ jedan f viška
>> ■■■ **Error** asm.ASM(7) Illegal immediate
Za ono što si napisao potrebno je 20 bita, moguće je
samo 16.
>> Aj' mi sad recite gde sam pogrešio ...
Verovatno si prevideo.
ms.dos.231markom,
■■■ Ex, baš si lenj. (: Probaj ga, složi utiske, pa se
■■■ (eventualno) požali ili pohvali mjovu uz preporuku
■■■ programčeta ostalima...
Programče radi :) Mogu da kažem da mi uopšte nešto onakvo nije padalo na pamet
i pored svih pokušaja, a bilo ih je ihaaa.
Na žalost onaj primer je za mene relativno neupotrbljiv jer ne može da se lin-
kuje sa Pascalom :(( Ne može da se linkuje jerbo TP ne podržava skokove u dru-
gi kodni segment :((
Marko
ms.dos.232dcolak,
│ kuje sa Pascalom :(( Ne može da se linkuje jerbo TP ne podržava skokove u
│ dru- gi kodni segment :((
Da li je neko pomislio o prelasku na Amigu?
Sledge DAMMIR!
ms.dos.233kriss,
˙˙ Na žalost onaj primer je za mene relativno neupotrbljiv jer ne
˙˙ može da se lin- kuje sa Pascalom :(( Ne može da se linkuje
˙˙ jerbo TP ne podržava skokove u dru-
A jel si probao da ga prvo TASM-uješ, pa da obj ulinkuješ?
ms.dos.234markom,
■■■ A jel si probao da ga prvo TASM-uješ, pa da obj ulinkuješ?
Naravno.
Marko
ms.dos.236niklaus,
(:> Na žalost onaj primer je za mene relativno neupotrbljiv jer ne može da
(:> se lin- kuje sa Pascalom :(( Ne može da se linkuje jerbo TP ne podržava
(:> skokove u dru- gi kodni segment :((
A šta kaže BP.EXE, Target Platform: Protected Mode Application?
(: Sean :)
ms.dos.237markom,
*** A šta kaže BP.EXE, Target Platform: Protected Mode
*** Application?
Nemam BP, koristim TP, pogledaću taĘno pa ću proslediti ...
Marko
ms.dos.238nikac,
>■>> ■■■ jmp far 0f000h:fff0h
>■ žžžž original
>■>> ■■■ jmp far 0f000h:ffff0h
>■ žžžžž jedan f viška
>■>> ■■■ **Error** asm.ASM(7) Illegal immediate
>■
>■ Za ono što si napisao potrebno je 20 bita, moguće je
>■ samo 16.
Da ali isto prijavljuje i za jmp far 0f000h:0ffffh
A ako stavis jmp far ptr 0f000h:0ffffh onda se buni
"Near call or jump to different CS" oli nesto tako...
Za sada radi jedino ono sto je poslao mjova a poneki put prodje i
sledece:
mov ax,0f000h
mov es,ax
jmp es:0ffffh
Zna li neko u cemu je stos? Napominjem da _cesto_ radi ali poneki put ne?!
ms.dos.239ficus,
:) Ne bih da se pravim pametan, ali mi je malo bez veze to
:) linkovanje u clipper.lib, jer bolje je da sve svoje modulcice
U pravu si jednostavno to mi prvo pade na pamet
:) Sa druge strane, nista lakse od ukljucivanja te biblioteke
:) u EXE modul :) ... bla bla truc truc
Slazem se ali eto reko pade mi na pamet ja napisah uostalom moj
prvi prg koj je bio vezivan sa clipperom (asm+cliper) je bio
tako ubacen jednostavno uradis jednom i vise ne razmisljas do
prvog update-a. A da sa neke strane nije prakticno nije.
ms.dos.240goranr,
// Kako softverski da resetujem racunar iz DOS bat fajla ili iz programa u
// CLIPPERU 5.01
Imaš u Cliptool biblioteci na sezamu...
ÔOPAH
ms.dos.241ficus,
:) Na zalost onaj primer je za mene relativno neupotrbljiv jer ne moze da se
:) lin- kuje sa Pascalom :(( Ne moze da se linkuje jerbo TP ne podrzava
:) skokove u dru- gi kodni segment :((
trebalo bi da podrzava jer postoji far modifikator koj se pise iza funkcija
cim postoji tako nesto logicno je....
nazalost ja nemam asm tako da nisam uspeo nista a basm(integrisani asm)
ne sljaka bas kako ocu evo saveta:
postoji jedna davno zaboravljena naredba turbo pascala i zove se inline
drugim recima prevedi prg u obicnom asm-u zatim izvuci opcode i ostlo
sto uz to ide i to bi trebalo da radi.
Jos jedan praktican savet predji na c on sasvim lepo radi sto se tice takvih
vezivanja i slicnog.
ms.dos.242ficus,
U vezi reseta iz tp-a problem je definitivno resen:
procedure res;
begin
inline($9A/$F0/$FF/$00/$F0);
END;
ovo pisem online ali je procedura testirana u tp 7.0 i radi
ovo je ustvari far jmp na f000:fff0 ali preveden u masinski jezik
trebalo je malo prekopati po knjigama za op-code zato nisam poslo prosli put
ms.dos.243markom,
*** Jos jedan praktican savet predji na c on sasvim lepo radi sto
*** se tice takvih vezivanja i slicnog.
Znam da C sve to lepo radi, ali i tu imam problema. Vidi temu:cccc ...
Marko
ms.dos.244ialeksic,
pitanja :
1. ansi.sys drajveri raznih proizvodjaca super VGA kartica
(npr. TRIDENT, REALTEK,...) za rad sa rezolucijom vecom od 80x25
ne podrzavaju kombinaciju CTRL-TAB koja je zgodna u 4dos-u,na primer.
DOS-ov ansi.sys ne podrzava VGA rezime rada iznad 80x25 u karakter modu.
Ima li spasa?
2. Hot-key kombinacja SHIFT-F1 za aktiviranje Norton Guide-a radi normalno
sa superVGA drajverima npr.tansi.sys ali sa standardnim DOS ANSI.SYS
drajverom aktivira se na ekranu tek kad se posle uobicajene SHIFT-F1
kombinacije pritisne jos neka dirka sa tastature !?
ms.dos.245dens,
>> DOS-ov ansi.sys ne podrzava VGA rezime rada iznad 80x25 u karakter modu.
>> Ima li spasa?
Uzmi NNANSI. Mnogo je brži i naravno ne brlja u "advanced" text modovima.
Ako ga ne nađeš, poslaću ti ga na mail.
ms.dos.246dragisha,
-> 1. ansi.sys drajveri raznih proizvodjaca super VGA kartica
-> (npr. TRIDENT, REALTEK,...) za rad sa rezolucijom vecom od 80x25
-> ne podrzavaju kombinaciju CTRL-TAB koja je zgodna u 4dos-u,na primer.
-> DOS-ov ansi.sys ne podrzava VGA rezime rada iznad 80x25 u karakter modu.
-> Ima li spasa?
Ja koristim 132*34 (vrapci već pričaju:) na Trident i to BEZ ansi.sys.
Radi i sa ANSI, ali je problem u onome preko 25og reda.
DENS mi je poslao nnansi i on ne brlja preko 25og reda, ali kad uradim
cls kursor se izgubi. Zaključio sam da je to zbog toga što u nestandardnim
modovima cls radi nuliranje video memorije, a u standardnim punjenje
blankovima i odgovarajućim atributom. Ovo se i vidi kad poslije cls (ne
vidi se kursor) kucaš neki znak (i dalje se ne vidi) pa backspace (e sad se
vidi kursor na mjestu gdje je bio znak).
Imam i ANSI.COM i sa njim mi se dešava isto.
Interesantno je da DOS mode komanda priznaje samo DOSov ANSI kad probaš
MODE CON: lines=43.
--
[A dry sense of humor is better than slobbering everywhere]
ms.dos.247mjova,
> 1. ansi.sys drajveri raznih proizvodjaca super VGA
> kartica
uzmi nansi sa sezama. nisam video bolji ansi veznik.
ms.dos.248dens,
>> DENS mi je poslao nnansi i on ne brlja preko 25og reda, ali kad uradim
>> cls kursor se izgubi. Zaključio sam da je to zbog toga što u nestandardnim
Kako se to izgubi kursor? Kod mene (takođe Trident) radi OK.
ms.dos.249dragisha,
-> >> DENS mi je poslao nnansi i on ne brlja preko 25og reda, ali kad
-> uradim >> cls kursor se izgubi. Zaključio sam da je to zbog toga što u
-> nestandardnim
-> Kako se to izgubi kursor? Kod mene (takođe Trident) radi OK.
boot. Radi! Sve je ok dok ne dođe ispis do dna ekrana, tj dok ne mrdne
malo gore ili dok ne uradim cls. Onda se vidi na cmd liniji samo dok ne
počnem da kucam (onda nestane). Ponovo se vidi kad uradim BS, na mjestu
gdje sam ubio karakter.
--
[If you can read this, thank your teacher.]
ms.dos.250dens,
>> uzmi nansi sa sezama. nisam video bolji ansi veznik.
Poslao sam mu nnansi.sys koji je (navodno) nastao iz pomenutog nansi-ja.
Probaj...
ms.dos.251ialeksic,
>> Uzmi NNANSI. Mnogo je brzi...
Dobro, ali da bih ga prilagodio svojoj kartici (Trident) treba ponovo
prevesti source. Ja medjutim nisam u posedu TASM/TLINK vec kad koristim
MASM/LINK. Pa da bi se to prevelo treba menjati source, itd. malo je to
"tres complique". Moze li se doci do TASM/TLINK kombinacije?
ms.dos.252dens,
>> "tres complique". Moze li se doci do TASM/TLINK kombinacije?
Verovatno može ;) Pogledaću...
ms.dos.253ialeksic,
Ipak sam izmenio source i spremio NNANSI drajver sa MASM/LINK kombinacijom.
Saljem ovako izmenjen source ako jos nekom bude zatrebalo.
Za .SYS verziju treba:
MASM nnansi /DTSR=0
LINK nnansi
EXE2BIN nnansi.exe nnansi.sys
a za .COM:
MASM nnansi /DTSR=1
LINK nnansi
EXE2BIN nnansi.exe nnansi.com
nnansi.arjms.dos.254zzivotic,
Izgleda da DOS funkcija FIND FIRST (4Eh) vraća status da fajl postoji i ako
se navede neki od postojećih karakter device drajvera. Recimo FIND
FIRST("con") vraća da je sve ok i da postoji fajl sa tim imenom, a atribut mu
je postavljen na (nedokumentovanu?) vrednost 40h. Jel ovo oduvek ovako bilo
ili je to neki novitet DOS 6.x?
Pozdrav, zz
ms.dos.255todorp,
> FIRST("con") vraca da je sve ok i da postoji fajl sa tim imenom, a
> atribut mu je postavljen na (nedokumentovanu?) vrednost 40h. Jel ovo
> oduvek ovako bilo ili je to neki novitet DOS 6.x?
E svasta, probao ja na DOS-u 5.0 i na Compaq-ovom 3.31 i opet je 40h (7-mi bit
je setovan). A nigde se po dokumentaciji ne pominje. Velju 7 i 8 bit reserved
for future use. U svakom slucaju trebalo bi da je ovo siguran (?) nacin za
proveru da li je nesto file ili neki device.
Pozdrav od Todora
ms.dos.256dr.grba,
DOS program PRINT radi tako što na kraju štampe svake datoteke
prosledi FORM FEED štampaču.
Ima li neki haker koji bi mogao da nađe način da se ovo isključi?
ms.dos.257janko,
> Ima li neki haker koji bi mogao da nađe način da se ovo
> isključi?
Ima, naravno. :)) Malo disasembliranja i krpi se stvar, ali, ko će da to
radi za svaku bogovetnu verziju DOS-a?
Lakše je jednostavno ne generisati POSLEDNJI FF u datoteci koja će se
štampati. Onda PRINT-ov radi što treba.
Drugi štos je -- slanje dva zaredom FF-a štampaču može da se izbegne
pisanjem rezidentnog programčića, koji ne bi puštao drugi od dva.
Meni nikad nije zasmetalo što PRINT to radi, što radi -- uvek mi je BAŠ
TO i trebalo.
ms.dos.258markom,
*** Ima li neki haker koji bi mogao da nađe način da se ovo isključi?
Trebalo bi da ima neki svič, ili možda nema ?
ms.dos.259mbole,
Kad ste već kod print-a, jel moguće nekako ga naterati da štampa binarni
file, tj da se ne zaustavi kad naiđe na Ctrl-Z.
ms.dos.260dr.grba,
>> *** Ima li neki haker koji bi mogao da nađe način da se ovo
>> isključi?
>>
>> Trebalo bi da ima neki svič, ili možda nema ?
Nema.
ms.dos.261mirche,
> file, tj da se ne zaustavi kad naiđe na Ctrl-Z.
Za print ne verujem al' probaj: COPY xx.yyy /B lpt1
ms.dos.262mbole,
> Za print ne verujem al' probaj: COPY xx.yyy /B lpt1
Da samo ovo ne štampa u pozadini dok ja radim nešto drugo.
ms.dos.263vega,
Imam 286 sa 640 K RAM-a (jer mi je riknuo neki cip pa je otisla EXTENDED
memorija). Kako da iz nekog svog programa pristupim neiskoriscenoj memoriji u
delu od A0000 do FFFFF, tj. onoj memoriji koju MFT prijavljuje kao unused?
Pozdrav,
>>> VEGA <<<
ms.dos.264markom,
*** Da samo ovo ne štampa u pozadini dok ja radim nešto drugo.
Pa DOS nije ni predviđen za MTasking ... :)
ms.dos.265cnenad,
ŁŁŁ *** Da samo ovo ne štampa u pozadini dok ja radim nešto drugo.
ŁŁŁ
ŁŁŁ Pa DOS nije ni predviđen za MTasking ... :)
:)))))
ms.dos.266mmitrovic,
čŠĐŠč 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. (;
Pošto ste toliko zainteresovani za DMA ja sam malo kopao po svojoj
dokum. i našao sam isečak (Mark, Cut, Paste) iz jednog starog e-magazina
za asm programere. Nije baš sve crno belo al' baca novo svetlo na stvar.
BTW, ako ste zainteresovani za taj časopis imam brojeve 2,3,5,12/89, pa
mi sendnite mail. Ako bude bilo zainteresovanih okačiću ih u asm.
Daklem, sledi "čaršavčić":
DMA Transfers for FAST Memory Moves
If you ever have the need for super fast moves of blocks of memory and you
can put up with a lot of restrictions in order to gain the speed there is a
method in the PC environment to move bytes at the rate of one every 3 clock
cycles. Compare that to the clocks for a rep movsb and then say that isn't
fast. This isn't for every programmer and it certainly isn't for every time
you need to move a few bytes.
The DMA chip is a four channel device. Channel 0 is reserved for
refresh of memory that requires at least 256 consecutive bytes be read some-
where in memory at intervals less than about 4ms. The other three channels
are available for such things as transferring information to and from the
disk drives or the ports. Interesting trivia so far, but not very useful in
moving memory around. It gets worse. The 8259 DMA doesn't know anything about
segments. It only knows a 64k universe. This is where the Page registers come
in. The page registers decide which page (on 64k boundaries) the 8259 will
look at for any operation. There are not, as you might guess, 4 page
registers,but only 2 plus a default. If it is not channel 1 or 2 then it uses
the default register programmed as channel 3.
A careful reading of the data sheet of the 8259 discloses that it is
capable of doing a memory to memory transfer but only between channels 0 and
1. That is why this method is a little tricky to use. In order to set up your
own parameters you have to disable the timer from asking for a DMA from chan-
nel 0 every x milliseconds and reconfigure the 8259 and assume the respon-
sibility for doing the memory refresh. It actually sounds worse than it is.
The configuring and re configuring of the 8259 doesn't take all that long, so
the time is made up after only moving a few tens of bytes, and if you move at
least 256 CONSECUTIVE bytes the memory refresh requirement is met for another
2 or 3 milliseconds. The page registers are taken care of by setting channels
1 and 3 to the same value.
Given below is an example of a program I wrote just to test the
idea. A lot of the setup is too complex to explain in this short article, but
if you are interested in checking it all out you will need a data sheet on
the 8259. This worked nicely on my machine and should on most compatibles
just the way it is. With the not-so-compatible it may very well not. I hope
this listing is well enough commented so you can figure it out and make use of
it sometime.
DMA SOURCE
PAGE 60,132
TITLE DMA MEMORY TO MEMORY
DMA EQU 0
STACK SEGMENT PUBLIC 'STACK'
DB 32 DUP('STACK')
STACK ENDS
DATA SEGMENT PUBLIC 'DATA'
SOURCE DW 08000H
TARGET DW 09000H
NUMBER DW 800H
INCDEC DB 0
PAGER DB 0BH ;PAGE (O TO F)
FILL DB 0 ;2 IF A FILL OP
DATA ENDS
ASSUME CS:CODE,DS:DATA,ES:DATA
CODE SEGMENT PUBLIC 'CODE'
START:
MOV AX,DATA
MOV DS,AX
MOV AX,0B800H
MOV ES,AX
PAGE:
MOV AL,PAGER ;PAGE TO OPERATE IN
OUT 83H,AL
UNDMA:
OUT 0DH,AL ;MASTER RESET OF DMA
MOV DX,03D8H
MOV AL,1
OUT DX,AL
MOV AX,SOURCE ;WHERE IS IT COMING FROM
OUT 0H,AL
MOV AL,AH
OUT 0H,AL
MOV AX,TARGET ;WHERE TO PUT IT
OUT 2H,AL
MOV AL,AH
OUT 2H,AL
MOV AX,NUMBER ;HOW MANY
OUT 3H,AL
MOV AL,AH
OUT 3H,AL
MOV AL,009H ;ENABLE M TO M,COMPRESSED
OR AL,FILL ;WILL BE 2 IF FILL OP
OUT 8H,AL
MOV AL,088H ;BLOCK MODE, INC, READ
OR AL,INCDEC ;WILL BE 20H IF DEC
OUT 0BH,AL
MOV AL,85H ;BLOCK MODE, INC, WRITE
OR AL,INCDEC ;WILL BE 20H IF DEC
OUT 0BH,AL
MOV AL,4 ;THIS IS THE REQUEST
OUT 9,AL ;DO IT
MOV AL,9
OUT DX,AL
RESET: OUT 0DH,AL ;THIS IS A MASTER RESET
OUT 0CH,AL ;RESET F/L F/F
MOV AL,01
OUT 0,AL
OUT 0,AL
REINIT:
MOV AL,0
OUT 83H,AL ;MOVES REFRESH TO BASE PAGE
MOV AL,0FFH
OUT 1,AL
PUSH AX
OUT 1,AL
OUT 0BH,AL
INC AL ;MODE CHAN3
OUT 0BH,AL
PUSH AX
POP AX
POP AX
POP AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
ms.dos.267kriss,
Da li neko zna gde se nalazi (sad ću da lupim) bit koji kontroliše
blink efekat na ekranu? Izgleda da mi je to malo čudo (re)setovano,
tako da tekst koji treba da blinkuje ne blinkuje, nego se vidi
inverzno.
P.S. Zaboravih, probao sam INT 10h, funkcija 10h, AL=3 (tad bi trebao
da se pojavi blink, ali pored piše i EGA, tako da je na VGA ostalo bez
efekta :( ).
ms.dos.268peca.st,
!-> Da li neko zna gde se nalazi (sad ću da lupim) bit koji kontroliše
!-> blink efekat na ekranu? Izgleda da mi je to malo čudo
!-> (re)setovano, tako da tekst koji treba da blinkuje ne blinkuje,
!-> nego se vidi inverzno.
Pa za svaki znak na ekranu imaš dva bajta. Jedan je atribut
a drugi je ascii kod. Prva četiri bita atributa su boja znaka,
sledeća tri boja pozadine (znači imaš 8 boja za pozadinu, a ne 16)
i zadnji je onaj koji tebi treba - blink. Postoji način da se
ovaj bit ukine pa da onda imaš svih 16 boja za pozadinu.
Video memorija za tekst mod počinje od b800:0000. Imaš 80*25*2 = 4000
bajtova, prvo ide ascii kod pa onda atribut.
Ovo je iz glave, nadam se da nisam nešto pobrkao. :)
Peđa.
ms.dos.269kriss,
˙˙ Pa za svaki znak na ekranu imaš dva bajta. Jedan je atribut
˙˙ a drugi je ascii kod. Prva četiri bita atributa su boja znaka,
Jest.
˙˙ sledeća tri boja pozadine (znači imaš 8 boja za pozadinu, a ne
˙˙ 16) i zadnji je onaj koji tebi treba - blink. Postoji način da
˙˙ se ovaj bit ukine pa da onda imaš svih 16 boja za pozadinu.
Au. Znači moram da protrčim kroz celu video-memoriju i da setujem svaki
bit posebno. :( Mada, ipak mislim da neću ništa da uradim. Od kako sam
instalirao 4dos, imam dotičnu pojavu. :(
˙˙ Video memorija za tekst mod počinje od b800:0000. Imaš 80*25*2
˙˙ = 4000 bajtova, prvo ide ascii kod pa onda atribut.
OK sad će da napišem nešto što preleće preko i setuje sve živo, pa ću
da javim da li radi. ;)
˙˙ Ovo je iz glave, nadam se da nisam nešto pobrkao. :)
Jao ako jesi :))))
P.S. Probao - ne radi. Evo ga source, zanima me da li je greška tu ili
kod nekog drugog. :((
.model tiny
.code
org 0100h
start:
xor bx,bx
xor si,si
mov ax,0b800h
mov ds,ax
mov cx,2000
lp: inc si ; znači preskačem ascii, setujem
; zadnji bit atributa.
or byte ptr ds:[bx + si],080h
inc si ;
loop lp
mov ah,04ch
int 21h
end start
ms.dos.270dzakic,
> Au. Znači moram da protrčim kroz celu video-memoriju i da setujem
> svaki bit posebno. :( Mada, ipak mislim da neću ništa da uradim.
> Od kako sam instalirao 4dos, imam dotičnu pojavu. :(
Tek sad pročitah poruku... Ono što tebi treba je "BrightBG = No"
u 4dos.ini-ju. Mislim da je to default, ali ti je neko za odgovor
podmetnuo Yes :)