PCPROG.1

20 Sep 1991 - 03 Dec 1992

Topics

  1. ms.dos (235)
  2. cccc (0)
  3. asembler (321)
  4. pascal (896)
  5. clipper (1059)
  6. zastita (239)
  7. basic (178)
  8. baze.podataka (116)
  9. novi.fajlovi (66)
  10. algoritmi (52)
  11. razno (707)
  12. van.teme (126)
  13. unknown (986)

Messages - asembler

asembler.206 dragisha, -> #201, asrdjan
ű> javlja poruke 'no stack segment' i 'program has no starting ű> adress'.Reč je o Prvo je warning i dejanr ti je rekao u čemu je fol, a što se drugog tiče pogledaj da li neki end ima labelu početka kao parametar. Bez toga linker ne zna odakle kreće tvoj program i zbog toga ne može da napravi ispravan EXE Header. dragisha
asembler.207 asrdjan,
Pošto vidim da nisam još dobio rešenje u veyi programa sa kojim sam imao problema,ja ovde dajem taj program,a vi pogledajte šta nije u redu. ML u MASM 6.0 mi prilikom prevođenja javlja poruke 'no stack segment' i 'program has no starting adress'.Ako neko zna šta je u pitanju neka se javi na mail ili u konf. .MODEL small,pascal,os_dos .DATA .CODE ORG 100h push ax push dx push di mov al,0b6h out 43h,al mov dx,0014h mov ax,4f38h div di out 42h,al mov al,ah out 42h,al in al,61h mov ah,al or al,3 out 61h,al mov al,ah out 61h,al pop di pop dx pop ax END ..SOR 2.30 EXEC ZFED8348 CONF JOIN PC.PROG CONF REPLY pascal Kako da u TP 6.0 saznam da li na direktorijumu postoji neki fajl npr blabla.txt i kako da smestim naziv tog fajla u promenljivu.
asembler.208 obren, -> #207, asrdjan
> Pošto vidim da nisam još dobio rešenje u veyi programa sa kojim sam > imao problema,ja ovde dajem taj program,a vi pogledajte šta nije u > redu. ML u MASM 6.0 mi prilikom prevođenja javlja poruke 'no stack > segment' i 'program has no starting adress'. žini mi se da je onaj primer bio samo fragment, ili listing koji guta A86 (jedan PD asembler). 'No stack segment' nije greška ako hoćeš da program prebaciš u .COM, a znači da nisi definisao segment u svom programu koji će služiti za potrebe steka. 'No starting address' je zato što nisi stavio posle END labelu od koje počinje program, pa linker ne zna šta da stavi u .EXE heder kao ulaznu tačku. Znači pre prve instrukcije programa, stavi recimo 'begin:' a umesto samo 'END' stavi 'END begin' i trebalo bi da ga lepo prevede, a da li će da radi zavisi od toga ima li grešaka. Pozdrav, Dragan
asembler.209 natila,
Posto sam tek sad poceo da ucim asembler, u vremenima kad se time nisam bavio obrisao sam EXE2BIN a sad mi treba. Jel' bi neka dobra dusa to poslala? A oma i da pitam nesto: Koko se menjaju Sign, Carry i Overflow flegovi? Moja (jedina) knjiga o asembleru to prilicno (za mene) nesshvatljivo objasnjava :( Hvala unapred! Nemeth Attila P.s. Umalo da zaboravim, jel' zna nako neki mali recimo rezidentni kalkulator koji ima mogucnost pretvaranja binarnih brojeva u decimalne ili hexadecimalne i obrnuto?
asembler.210 dzakic, -> #209, natila
>> A oma i da pitam nesto: Koko se menjaju Sign, Carry i Overflow >> flegovi? Moja (jedina) knjiga o asembleru to prilicno (za Flegove postavljaju aritmetičke i logičke operacije. Ti recimo sabereš akumulator sa nekim brojem i po završetku operacije se flegovi postave u skladu sa dobijenim rezultatom. Overflow se setuje ako je došlo do prekoračenja, znači akumulator premašio dozvoljenu vrednost i dobijeni rezultat nije tačan. Carry se postavlja u operacijama šiftovanja i rotiranja, Sign kad je rezultat negativan, Zero kad je nula i sl. Kad se naredba završi, flegovi ostanu tako postavljeni, pa sledećom naredbom možeš da ispitaš njihovo stanje i izvršiš odgovarajuće grananje. Uslovni skokovi su recimo JZ (Jump if Zero), JNZ (Jump if Not Zero), JC, JNC, JS, JNS, itd. Ako si mislio na 'ručno' postavljanje, postoje naredbe koje setuju i resetuju carry flag: STC i CLC (SeT i CLear Carry). Druge postavljaš tako što žrtvuješ akumulator pa uradiš recimo xor ax, ax da bu postavio zero dovodeći nulu u akumulator i sličnim egzibicijama. Hope this helps
asembler.211 obren,
Zna li neko kako može da se dođe do definicije aktivnog fonta kod EGA/VGA?
asembler.212 ppekovic, -> #211, obren
>> Zna li neko kako može da se dođe do definicije aktivnog >> fonta kod EGA/VGA? Satrtuj program sysid (ima ga ovde na sezamu) i videćeš adrese svih fontova. A ako baš voliš programiranje, e onda pozovi INT 10H sa: AH = 11H AL = 30H BH = font code 00H current Int 1FH contents 01H current Int 43H contents 02H ROM 8x14 (EGA,VGA) 03H ROM 8x8 04H ROM 8x8 (chars 80H-FFH) 05H ROM 9x14 (EGA,VGA) 06H ROM 8x16 (MCGA,VGA) 07H ROM 9x16 (VGA) Vraca: CX = points(bytes per char) DL = rows(char rows on screen-1) ES:BP segment:offset of font table Paya
asembler.213 obren, -> #212, ppekovic
> Satrtuj program sysid (ima ga ovde na sezamu) i videćeš adrese svih > fontova. A ako baš voliš programiranje, e onda pozovi INT 10H sa: > > AH = 11H > AL = 30H > BH = font code > 00H current Int 1FH contents > 01H current Int 43H contents > 02H ROM 8x14 (EGA,VGA) > 03H ROM 8x8 > 04H ROM 8x8 (chars 80H-FFH) > 05H ROM 9x14 (EGA,VGA) > 06H ROM 8x16 (MCGA,VGA) > 07H ROM 9x16 (VGA) Ma znam ja za ovo, ali ne treba mi ROM font, već FONT KOJI JE TRENUTNO AKTIVAN, što može biti i ROM ali i neki "user defined". Nigde nisam našao kako doći do njega. Izgleda da nema odgovarajući prekid za to.
asembler.214 natila, -> #210, dzakic
> Flegove postavljaju aritmeticke i logicke operacije. Ti recimŰ > saberes akumulator sa nekim brojem i po zavrsetku operacije se > flegovi postave u skladu sa dobijenim rezultatom. E TO me zanima. Kako se tacno postavljaju. Sta treba da se desi da bi se neki od flegova setovao ili ne? > Overflow se > setuje ako je doslo do prekoracenja, znaci akumulator premasio > dozvoljenu vrednost i dobijeni rezultat nije tacan. Carry se > postavlja u operacijama siftovanja i rotiranja, Sign kad je > rezultat negativan, Zero kad je nula i sl. Cek' da pokusam da objasnim kako sam ja shvatio (ono sto mislim da sam shvatio :) a ti me ispravi. Recimo da se brojevi smestaju na 7 bita a 8. bit je predznak. 1. slucaj: ako saberemo dva relativno mala broja (ciji rezultat moze da stane na 7 bita i ciji rezultat nije 0) onda 8. bit tacno pokazuje predznak rezultata, Carry, Overflow i Zero su 0 dok Sign je 0 ako je rezultat pozitivan a 1 ako je rezultat negativan. 2. slucaj: ako saberemo dva veca broja (ciji rezultat staje na 8 bita) onda 8. bit ne pokazuje tacan predznak rezultata pa ni Sign jer su ta dva bita (8. bit i Sign) uvek isti. U tom slucaju se predznak nalazi u Carry-ju (znaci moze biti i 0 i 1 u zavisnosti dali smo sabrali pozitivne ili negativne brojeve) a i Overflow je setovan posto j█╩šý doslo do prekoracenja sa 8. bita na Carry. I ovde vazi da je Zero 0 akšŻ│ je rezultat razlicit od nule. 3. slucaj: a sta se desava kada saberemo dva veeelika broja ciji rezultat staje samo na svih 8 bita + Carry (jer kolko sam ja shvatio Carry se prakticno ponasa kao 9. bit)? Knjiga kaze jos i nesto poput: Overflow vam je u stvari jednak Carry XOR Sign (ili nesto poput ovoga). Sta mu to dodje? Nemeth Attila P.s. Jos uvek trazim EXE2BIN.COM (ili mu je nastavak EXE, ne secam se vise :)
asembler.215 ppekovic, -> #213, obren
>> Ma znam ja za ovo, ali ne treba mi ROM font, već FONT KOJI JE TRENUTNO >> AKTIVAN, što može biti i ROM ali i neki "user defined". Nigde nisam našao >> kako doći do njega. Izgleda da nema odgovarajući prekid za to. A da, zaboravio sam da napišem upravo ono što je tebi trebalo, naime ako staviš u BH vrednost 10H i pozoveš INT 10H sa 30H u AL, dobićeš sledeće: CX - broj zauzetih bajtova po jednom karakteru. DL - broj vrsti za prikazivanje znakova na ekranu ES:BP - segment i offset adresa karakter tabele aktivnog fonta. Paya
asembler.216 ppekovic, -> #214, natila
>> P.s. Jos uvek trazim EXE2BIN.COM (ili mu je nastavak EXE, ne >> secam se vise :) EXE2BIN je deo komercijalnog paketa pa mu stoga i nije mesto u konferenciji. Paya
asembler.217 obren, -> #215, ppekovic
> A da, zaboravio sam da napišem upravo ono što je tebi trebalo, > naime ako staviš u BH vrednost 10H i pozoveš INT 10H sa 30H u AL, > dobićeš sledeće: > > CX - broj zauzetih bajtova po jednom karakteru. > DL - broj vrsti za prikazivanje znakova na ekranu > ES:BP - segment i offset adresa karakter tabele aktivnog > fonta. Kod mene to ne radi - vrati mi pointer na običan ROM 8x16! :((( Probao sam i druge vrednosti u BH, ali ne pali - ili ROM font ili đubre. Ne znam da li je to do BIOS-a ili do grafičke karte? Morao sam ipak da zaposlim i sourcer nad jednim (najkraćim ;)) Nortonovim programom. Koliko sam video, INT 10h se koristi za menjanje fonta (kod onog iscrtavanja strelice u text modu), ali nemam pojma kako dođu do bit-mape aktivnog fonta? Verovatno direktnim pristupom kartici? Ne verujem da drajver za miša zna one štosove sa strelicom u tekst modu. Pogledaću još malo, možda i provalim... P.S. Hvala na trudu u svakom slučaju!
asembler.218 dzakic, -> #214, natila
>> Recimo da se brojevi smestaju na 7 bita a 8. bit je predznak. Ne možemo to da pretpostavimo jer se zna kako se predstavljaju negativni brojevi. U jednom bajtu (dakle 8 bita) može se nalaziti nepredznačan ili predznačan (signed) broj. Nepredznačni su ti jasni, od 0 do 255. Ako bajt tretiramo kao označen broj to se radi u tzv. potpunom komplementu dvojke. Na taj način je sa FF hex označen broj -1, sa FE broj -2 itd... To znači da pozitivnih brojeva ima 127, sa nulom 128. A da negativnih ima tačno 128. Pazi tabelu: bajt vrednost 00000000 0 00000001 1 00000010 2 ... 01111110 126 01111111 127 10000000 -128 10000001 -127 10000010 -126 ... 11111110 -2 11111111 -1 Broj negiraš tako što sve bitove 'invertuješ' i rezultat uvećaš za jedan. Iz ovoga se takođe vidi da se znak može pročitati iz sedmog bita (najviši, broji se od 0). Obrati pažnju da ćeš sabiranjem -5 i 10 dobiti tačan rezultat, 5. Dakle, sabiraš 11111011 (-5) + 00001010 (10) C=1 = 00000101 ( 5) Keri jeste 1, ali je prekoračenje 0 jer smo dobili ispravan rezultat. Pazi kako ja pamtim kad je došlo do prekoračenja: - Kad sabiram pozitivan i negativan broj, NE MOčE da dođe do prekoračenja, overflow je uvek 0 - Kad sabiram pozitivan i pozitivan, ili negativan i negativan, MOčE doći do prekoračenja i rezultat mora biti istog znaka kao i zabirci. Ako nije, nastalo je prekoračenje. Ovo 'sabiram' mi ostalo sa ispita, to inače radi procesor upravo onim 'carry xor sign'. Sad, ako su tebi brojevi koje sabiraš nepredznačni, dakle sve pozitivni, pa ih uzimaš u opsegu 0..255, onda ti je prekoračenje zapravo carry i samo te on zanima. Overflow gledaš ako su brojevi predznačni. Postoje i naredbe ADC i SBC koje sabiraju dva registra zajedno sa kerijem. Recimo, sabiraš dva 32-bitna broja, DX:AX i CX:BX. Kažeš: ADD AX,BX ADC DX,CX i u DX:AX imaš rezultat. >> 3. slucaj: a sta se desava kada saberemo dva veeelika broja ciji >> rezultat staje samo na svih 8 bita + Carry (jer kolko sam ja >> shvatio Carry se prakticno ponasa kao 9. bit)? Tačno. Ideš redom, sabiraš bit po bit, i ono što pretekne na kraju (što si 'upamtio'), to je keri. Eto, nadam se da je jasnije. Nisam tu narednih par dana, ako još nešto nije jasno, pojasnićemo kad se vratim. Pozdrav, Zak
asembler.219 natila, -> #218, dzakic
Hvala. Mislim da sam shvatio. Jel smem da te gnjavim ako mi jos nesto zatreba? Nemeth Attila
asembler.220 ddjj, -> #159, amilanov
==> Inače OBJ2ASM, uradi stvar, uglavnom ko što treba. ==> Pretvori .obj u .asm. žini se da OBJ2ASM ima bug. Lepo se od OBJ dobije ASM ali ... U asemblerskom programu je sve u redu osim sto kod svih CALL instrukcija u kojima se pozivaju drugi OBJ moduli (iz iste biblioteke) uvek stoji adresa modula koji se disasemblira (ili možda bolje objtoasseblira) kao da se poziva rekurzivno, a nema veze od rekurzije - proverio Turbo Disassemblerom. Dali je možda problem u tome što sam obj-ecte dobio tlibom vadeći ih jedan po jedan iz biblioteke (LIB za Turbo C 2.0).
asembler.221 mivel, -> #218, dzakic
Ispravka: instrukcije su ADC (Add With Carry) i SBB (Subtract With Borrow). SBC je ispravno na prastarom Z80 (oMKvovo mi "bode oci", jer i sam cesto po inerciji kodiram pogresno SBC!).
asembler.222 dzakic, -> #219, natila
> Jel smem da te gnjavim ako mi jos nesto zatreba? Ti iznesi problem, naći će se već neko ko će da odgovori. Ne mogu ti obećati da ću uvek imati vremena da se ovako raspišem, ali sam u principu raspoložen da pomognem.
asembler.223 dzakic, -> #221, mivel
> Ispravka: instrukcije su ADC (Add With Carry) i SBB (Subtract Naravno, ostalo od Z80. :)
asembler.224 mdimitrijevic,
Hi! Da li bi neko mogao da mi napise brzu move naredbu. Koja premesta jedan blok memorije na drugo mesto. Trebalo bi da mogu da zadam OFF:SEG pocetka i OFF:SEG kraja i duzinu. Ako neko ima nesto slicno ili ako moze da napise bio bih veoma zahvalan. Pozdrav, Marjan Dimitrijevic
asembler.225 drpr,
Ajd pošto mi niko u pascal topiku nije odgovorio ja reko da pitam asembleraše :)) Elem da li postoji još neki interapt se time koji se pojavljuje u nekom intervalu vremena.Hoću pomoću njega da merimi neko interno vreme koje mi je potrebno u programu . Hvala u napred cope
asembler.226 natila, -> #222, dzakic
Hvala. Mozes li mi preporuciti neku dobru knjigu na ovu temu (ali koja moze da se nabavi i kod nas)? Nemeth Attila
asembler.227 dzakic, -> #224, mdimitrijevic
>> Da li bi neko mogao da mi napise brzu move naredbu. Najbrži način da se premesti blok bajtova je: MOV DS,source segment MOV SI,source offset MOV ES,destination segment MOV DI,destination offset MOV CX,len REP MOVSB Ako ti treba neki inter segmentarni ;) move, to bi se izvelo nekakvim žongliranjem sa pomenutom kombinacijom naredbi. Ako nisi zadovoljan brzinom, onda CX podeli sa dva, pa koristi MOVSW koja kopira cele reči, ali tada dužina ne može biti neparan broj.
asembler.228 dzakic, -> #225, drpr
>> Elem da li postoji još neki interapt se time koji se pojavljuje >> u nekom intervalu vremena.Hoću pomoću njega da merimi neko >> interno vreme koje mi je potrebno u programu . Ako sam dobro razumeo pitanje, program treba da meri vreme, samo mu je 1/18.2 sec suviše 'grubo'? Postoji jedan koji se izvršava oko 1000 puta u sekundi. Ne bih znao sada tačno da ti kažem, al ako ti treba da pitamo vasu, znam da je koristio u VCS-u (za ono brže osvežavanje ekrana). Mada, to sigurno piše u helppc-u.
asembler.229 mivel, -> #224, mdimitrijevic
Za svaki slucaj, dodaj jedno "CLD" (ili STD, za smer "unazad") pre instrukcije MOVSB/MOVSB. Stanje Direction Flaga obicno je "navise", ali ne treba nagadjati... Milan
asembler.230 mdimitrijevic,
Hi! HVALA MNOGO za move naredbu u asembleru. Pozdrav, Marjan Dimitrijevic
asembler.231 spantic, -> #226, natila
> Mozes li mi preporuciti neku dobru knjigu na ovu temu (ali > koja moze da se nabavi i kod nas)? Imam ja predlog. "Naučna knjiga" je izdala u tri dela knjigu M. Stojčevskog "Savremeni 16-bitni procesori". Knjiga obuhvata teoretsku potku i detaljno prikazuje INTEL 80X86, MOTOROLA MC 680XX kao i nešto o ZILOGU Z 8000.
asembler.232 mivel, -> #209, natila
Dopuna (opsirnih) odgovora dzakica: a) za setovanje CF,PF,AF,ZF,SF mozes da koristis instrukciju SAHF: MOV AH,<flag_mask> SAHF b) za setovanje celog fleg registra (16-bitnog) simuliraj povratak iz interrupt-a: MOV AX,<flag_mask> PUSH AX PUSH CS LEA AX,FLAGS_ARE_SET PUSH AX IRET FLAGS_ARE_SET: ;ovde imas sadrzaj flag registra postavljen ; u prvoj instrukciji u AX registru Pazi, posle IRET mozes da budes negde u "hipersvemiru!!!" Strukturu (raspored bitova) flag-registra naci ces u NG ili helppc Puno srece! Milan
asembler.233 amilanov, -> #220, ddjj
> Dali je možda problem u tome što sam > obj-ecte dobio tlibom vadeći ih jedan po jedan iz > biblioteke (LIB za Turbo C 2.0). Ne znam. Iskreno, nisam se mnogo bavio OBJ2ASM-om, da bih mogao nešto da 100% tvrdim. Ne bi bilo loše da neko ko koristi recimo MSC, da proba da "secira" neki MSC LIB na isti način, pa da vidimo rezultate. ( možda si i sam probao to ). Moguće je da nešto ne znamo oko OBJ2ASM, pa bilo bi lepo da ako ga neko intenzivnije koristi, i zna nešto detaljnije o njemu, da kaže par reći o njemu. Pozdrav, Milanov
asembler.234 drpr, -> #228, dzakic
-> Ako sam dobro razumeo pitanje, program treba da -> meri vreme, samo mu je 1/18.2 sec suviše -> 'grubo'? Nije mi grubo nego neću da se igram sa sistemskim vremenom padne mašine i vreme se poremeti :(( -> znam da je koristio u VCS-u (za ono brže -> osvežavanje ekrana). Mada, to sigurno piše u -> helppc-u. Ne znam ja šta ti je to ali bi mi adresa ili već kako se zove interapta trebala. U napred hvala. cope Ps Ovde sam se javio jer sam znao da zakče ima odgovor :)
asembler.235 dzakic, -> #229, mivel
> Za svaki slucaj, dodaj jedno "CLD" (ili STD, za smer "unazad") > pre instrukcije MOVSB/MOVSB. Stanje Direction Flaga obicno je > "navise", ali ne treba nagadjati... Mislim da sam negde pročitao da DOS garantuje da će 'Direction flag' na početku izvršavanja programa biti resetovan (smer unapred). Ja se u svojim programima na to oslanjam, te ga ne resetujem dodatno ako ga već nigde nisam dirao. U procedurama koje se ubacuju u neke više programske jezike sigurno da ima logike staviti za svaki slučaj jedno CLD...
asembler.237 dzakic, -> #234, drpr
> Nije mi grubo nego neću da se igram sa sistemskim vremenom > padne mašine i vreme se poremeti :(( Nema razloga da se sistemsko vreme poremeti. Int 8 pri svakom 'otkucaju' poveća 'longint' brojač na adresi 0040:006C za jedan. Ti ga možeš iz svog programa pročitati, pa po završetku posla kome meriš vreme ponovo. Izračunaš razliku i eto ti proteklo vreme u 18.2-im delovima sekunde. Ako tu vrednost i promeniš, dos i drugi programi će privremeno imati pogrešnu informaciju o datumu i vremenu, ali će se po resetovanju sistema sve vratiti na normalu jer se za vreme butovanja pravo vreme čita iz CMOS-a i upisuje u ove promenljive. To recimo koristi zbtet za vreme padanja figurice. Ako ti je problem u paskalu, evo ti funkcije koja vraća vreme u osamnaestinkama koje je proteklo od uključenja računara. Funkcija je iz one zz-ove zbirke rutina za rad sa modemom: var day_countl:word; day_counth:word; old_countl:word; old_counth:word; function timer_get:longint; assembler; asm push es mov ax,$40 mov es,ax cli mov ax,es:[$6c] mov dx,es:[$6e] sti cmp old_counth, dx jb @calc cmp old_countl, ax jbe @calc add day_countl,$B0 adc day_counth,$18 @calc: mov old_counth,dx mov old_countl,ax add ax,day_countl adc dx,day_counth pop es end; Na početak programa stavi i jedno: day_countl:=0; day_counth:=0; old_countl:=0; old_counth:=0; > Ne znam ja šta ti je to ali bi mi adresa ili već kako se zove > interapta trebala. Kad se malo bolje prisetim :) Vasa je čini mi se programirao interapt kontroler da mu poveća frekvenciju generisanja interapta 8 pa je onda staru rutinu pozivao svaki n-ti put.
asembler.238 duduk, -> #234, drpr
> -> znam da je koristio u VCS-u (za ono brže > -> osvežavanje ekrana). Mada, to sigurno piše u > -> helppc-u. > Ne znam ja šta ti je to ali bi mi adresa ili već kako se > zove interapta trebala. > U napred hvala. Ja baš pre neki dan pitao Vasu. Int je 70h i normalno se ne generiše, dakle potrebno ga je aktivirati. U datoteci je asm sors enable70 i disable70 procedura koje ga (de)aktiviraju.
asembler.239 duduk, -> #238, duduk
Zaboravih ... 70.asm
asembler.240 nnedovic,
Hi, Zna li ko postoji li "nešto" (verovatno neki port) što sadrži liniju koju elektronski mlaz u katodnoj cevi trenutno ispisuje na ekran (raster)? dzakic i vasic su u BLP pominjali nešto o portu $3BA, ali on u nekim svojim bitovima drži samo informaciju da li je elektronski mlaz stigao do kraja linije, do kraja ekrana isl. Nikola P.S. I vreme je već jednom da neko baci na SEZAM spisak svih portova sa njihovim značenjem!
asembler.241 drpr, -> #238, duduk
-> Ja baš pre neki dan pitao Vasu. Int je -> 70h i normalno se ne generiše, dakle potrebno -> ga je aktivirati. U datoteci je asm sors -> enable70 i disable70 procedura koje ga -> (de)aktiviraju. -> Hvala ti puno .Ali postoji jedan problem ja ne radim u asembleru već u pascalu i to TP5.5 koji nema mogućnost da pišem asm sors aj jel može neko da bude dobar pa da mi to "prevede" na tp cope
asembler.242 nnedovic, -> #238, duduk
>> Ja baš pre neki dan pitao Vasu. Int je 70h i normalno se ne >> generiše, dakle potrebno ga je aktivirati. U datoteci je asm >> sors enable70 i disable70 procedura koje ga (de)aktiviraju. Stani, a šta radi taj interapt? Jel' to taj što se poziva 1000 puta u sekundi? Kod mene se poziva mnogo ređe (negde oko 0 puta u sekundi :)))), čak i posle aktiviranja tim enable70-om. Inače, koliko ja znam, to je hardverski IRQ8 (sat realnog vremena), i bilo bi logično da se poziva 100 puta u sekundi (svake stotinke), ali neće... Njemu sličan bi trebalo da bude int 71h (IRQ9-video), koji generiše video-adapter. I on bi trebalo da se generiše da li 60 puta u sekundi, ali posle ovoga ne znam šta da mislim...
asembler.243 dzakic, -> #242, nnedovic
> puta u sekundi? Kod mene se poziva mnogo ređe (negde oko 0 puta > u sekundi :)))), čak i posle aktiviranja tim enable70-om. Vasa reče da se iz za sada nepoznatih razloga pomenuta procedura Enable70 mora pozvati 2 (dva!) puta da bi se interapt zaista aktivirao. Ne upamtih kolka mu je frekvencija, valjda piše u helppc-u, nikako da pogledam :)
asembler.244 mstanic,
pitanje Mislim da je već bilo, kako se može neki kod ubaciti u keyboard buffer, kao da je pritisnut odgovarajući taster? Mislim da je bilo, ali stradao mi text u soru a nisam baš raspoložen da sve ponovo skidam.
asembler.245 mstanic,
pitanje (možda sam već preterao sa pitanjima?) U svoj dokumantaciji koju ima za mouse i trackball (logitech, genius i chicony) plus u helppc i dosref nisam našao kompletno objašnjenje uz funkcije 12, 20 i 24. Radi se o pozivu korisničkih rutina koje se aktiviraju pri nekom događaju (pritisak na mouse taster, pomeranje, pritisak Alt, Ctrl (kod chicony-ja) ili kombinacije)). Ja sam probao i on zaista aktivira te rutine ali prilikom povratka mi blokira računar. Najdetaljnije objašnjenje sam našao u dokumentaciji uz chicony keyboard with trackball i evo šta piše: NOTE : ■ Before ending your program, you must set the interrupt call mask to 0. ■ If the call mask and subroutine remain defined when the program is no longer running, the subroutine will still be executed if one of the conditions defined by the mask call occurs. Ako neko zna nešto neka napiše.
asembler.246 bearboy, -> #241, drpr
˙¨:> Hvala ti puno .Ali postoji jedan problem ja ne radim u ˙¨:> asembleru već u pascalu i to TP5.5 koji nema mogućnost da pišem ˙¨:> asm sors aj jel može neko da bude dobar pa da mi to "prevede" ˙¨:> na tp Uzmeš lepo masm, recimo, asembliraš u .OBJ i gotovo...
asembler.247 obren, -> #245, mstanic
> U svoj dokumantaciji koju ima za mouse i trackball > (logitech, genius i chicony) plus u helppc i dosref nisam > našao kompletno objašnjenje uz funkcije 12, 20 i 24. > Radi se o pozivu korisničkih rutina koje se aktiviraju pri > nekom događaju (pritisak na mouse taster, pomeranje, Ne znam za te funkcije 20 i 24 ali 12 (iliti 1Ch) sam koristio u jednom programu u C-u i mogu da ti kažem svoja iskustva: - Funkcija mora da se zavšava sa retf a ne sa iret, pa ako radiš u nekom višem programskom jeziku vrlo lako ćeš naleteti na probleme. Ako funkciju deklarišeš kao: void far mouse_event() umesto void interrupt mouse_event() onda imaš retf umesto iret na kraju, ali gubiš sve reference sa podacima unutar te svoje funkcije jer kompajler ne inicijalizuje DS na početku jer ne zna da nju ne poziva program već drajver za miša. Ako staviš onu drugu varijantu (sa interrupt) onda imaš svu potrebnu inicijalizaciju za pravilan rad ali imaš iret umesto retf. Ja sam ostavio interrupt, preveo program na .ASM i ručno doterao šta ne valja. Drugo na šta se treba obratiti pažnja je da se OBAVEZNO na kraju programa pozove ista funkcija sa nulom kao maskom za pozive, što si koliko vidim i sam našao. Najlakše je da se to reši sa atexit() ili preko nekog destruktora ako radiš u cpp-u. E sad ne znam treba li ti ono osnovno, tj. značenje pojedinih bitova pri psosleđivanju maske drajveru, sadržaj registara pri pozivu i sl. što se može naći i u dokumentaciji za pacova (bar kod mene). Kaži ako treba, da ne kucam ako to već imaš.
asembler.248 mivel, -> #245, mstanic
Pri postavljanju interrupt subrutine odredjuju se dogadjaju pri kojim ce mouse driver pozvati ovu subrutinu, kao i adresa subrutine: mov ax,12 mov cx,condition_mask les dx,subroutine_address int 33 Po zavrsetku programa, kod ove subrutine ostaje u memoriji i biva pozivan pri svakoj od predvidjenih promena misa (pomeranje, pritisak dugmeta, otpustanje dugmeta). Jasno, ako se ucita neki drugi program, kod rutine ce biti prekriven novim sadrzajem i svaki poziv od strane mouse drivera daje nepredvidljive rezultate. Zato, pre zavrsetka programa treba deaktivirati subrutinu: mov ax,12 xor cx,cx int 33h Funkcija 24 se ponasa isto kao funkcija 12, a predstavlja alternativnu subrutinu. Koju ce od ove dve rutine mouse driver da poziva zavisi od toga koja je aktivna - njihova aktivnos se menja funkcijom 20 (interrupta 33, svakako) Tako sam bar ja shvatio, i na taj nacin mi svi programi dobro rade (i dobro ne rade po zavrsetku :))) ) Pozdrav Milan
asembler.249 ddjula,
U nekoj od poruka bilo je reči o interaptu 70h, pa sam se zainteresovao i eksperimentisao malo. Evo šta sam otkrio: interapt izaziva real-time clock i to 1024 puta u sekundi. Da bi se koristio, mora dozvoliti clock-u da zahteva interapt i mora se dozvoliti da procesor primeti taj interapt (programiranjem interapt kontrolera). To sve radi ENABLE70, program koji je prikačen za neku od prethodnih poruka. Tako je to u teoriji... U praksi, postoji BIOS funkcija WAIT EVENT koja koristi taj INT 70h. Ta funkcija programira i gore navedene registre. Tako kad ja uključim INT 70h, BIOS ga isključi. Međutim kad se dva- put pozove ENABLE70, BIOS ga ne isključi (pojma nemam zbog čega), već setuje tajmer da broji do maksimalne vrednosti, a to je oko 68 min. Posle toga ga opet isključi! Jedno od rešenja je da se ne programiraju čipovi direktno, već da to uradi BIOS. Treba mu zadati da broji do maksimalne vrednosti - FFFFFFFFh Šsec. Te dve reči BIOS čuva na adresi LO 0:49Ch i HI 0:49Eh. Treba samo obez- bediti da se u jednom u sat vremena upiše npr. FFFFh u 0:49Eh. Tako će tajmer stalno brojati. Isključivanje INT 70h se može uraditi isključivanjem tajmera, opet preko BIOS-a. Napomena: ovaj interapt značajno usporava sistem (kod mene oko 12% po PCT-u i to u slučaju da se na njega kači samo mali test program)! Ako neko ima bolju ideju u vezi ovog ili nađe neki drugi interapt obavezno neka napiše... Pitanja: čemu služi SEQUENCER na VGA karti i kako se programira i šta je to PEL tj. PEL mask? Kad se menja taj PEL, menjaju se boje (izgleda nešto radi sa paletom), međutim ne shvatam po kom principu se menjaju boje... Pozdrav, Đula ────────────────────────────────────────────────────────────────────────── INT 15h, 83h (131) Event Wait Modifies a byte in the user's memory after a specified time interval. Control is transferred to the caller immediately after this service is called. On entry: AH 83h AL Subservice 00h - Set interval 01h - Cancel set interval ES:BX - Pointer to byte that will be posted CX:DX - Microseconds until posting (long integer) Returns: Carry Set if service not supported, else cleared ────────────────────────────────────────────────────────────────────────── After this service is called, control is returned immediately to the caller. This service does not work by delaying and then returning control to the user, but returns control immediately; the user must periodically look at the byte specified (pointed to by ES:BX) to determine when the interval has elapsed. Notes: The PC, PCjr, and the XT dated 11/08/82 do not support this service. The AT dated 1/10/84 is only able to set the interval; thus the value in AL is not used. The byte is posted by setting the high bit (bit 7). To test the end of the interval, make sure the high bit of the byte is clear before calling Subservice 0 (Set Interval). The real-time clock is used to count the number of microseconds. The granularity of the time is 976 microseconds. CX is the high-order word of the count. For example, if CX is 98h and DX is 9680h, then a 10-second delay would be specified.
asembler.250 dzakic, -> #245, mstanic
Evo šta Geniusov GMOUSE.DOC Kaže o funkcijama 12 i 20: Function 12: Define Event Handler Entry Location Function 12 defines the address entry location of an event handler routine which is called when a certain event (defined by the call mask) occurs. The program is temporarily interrupted by the mouse driver. At the end of the event handler routine the program continues at the point it was interrupted. The call mask is a single integer value defining the conditions which will cause an interrupt. A specific condition corresponds to a bit in the call mask: Mask Bit Condition -------------------------------------------------- 0 cursor location changed 1 left button pressed 2 left button released 3 right button pressed 4 right button released 5 middle button pressed 6 middle button released 7 - 15 not used In order to call the event handler routine, set the mask bit to 1 and put the mask in at CX (G3%). To disable, set the mask bit to 0 and put the mask in at CX (G3%). Always be sure to set the call mask to 0 before the program finishes. (Leave the system in the same state upon exit as if was upon entrance.) 8086 Register Input: AX = 12 CX = call mask ES:DX = pointer to event handler routine Return: none BASIC Input: G1% = 12 G3% = call mask G4% = pointer to event handler routine Return: none Example: 110 ' Active BUTTDOWN Event Handler Routine, When One or More Buttons Pressed 120 G1% = 12 130 G3% = &H002A : G4% = BUTTDOWN% 140 CALL GMOUSE ( G1%, G2%, G3%, G4% ) Function 20: Swap Event Handler Entry Location Function 20 sets new values for the call mask and event handler routine address for mouse hardware interrupts and return the values that were previously specified. For detail information to reference Function 12 description. 8086 Register Input: AX = 20 CX = new call mask ES:DX = new pointer to event handler routine Return: CX = old call mask ES:DX = old pointer to event handler routine BASIC Input: G1% = 20 G3% = call mask G4% = pointer to event handler routine Return: G3% = old call mask G4% = old pointer to event handler routine Example: 100 ' Swap Event Handler Entry Location 110 ' Active BUTTDOWN Event Handler Routine, When One or More Buttons Pressed 120 G1% = 20 130 G3% = &H002A : G4% = BUTTDOWN% 140 CALL MOUSE ( G1%, G2%, G3%, G4% )
asembler.251 dzakic, -> #249, ddjula
Evo šta Vasa ima da kaše o int 70h (pošto ga već njegov VCS koristi, a iz VCS-a su izvučene i procedure ENABLE70 i DISABLE70 - baš lepo od duduka što je to napomenuo): ------------------------------ > Tako kad ja uključim INT 70h, BIOS ga isključi. Međutim kad se dva- >put pozove ENABLE70, BIOS ga ne isključi (pojma nemam zbog čega), već setuje >tajmer da broji do maksimalne vrednosti, a to je oko 68 min. Posle toga ga >opet isključi! E, tako nešto sam i ja pitao pre neki mesec a zahvaljujući tvojoj poruci konačno sam našao i odgovor: BIOSov int 70h handler po svemu sudeći radi nešto kao ovo: sub word ptr ds:[49Ch],976 ; 976 = 1e6/1024 jnc loc1 dec word ptr ds:[49Eh] jc iskljuci_int_70h loc1: .... Inicijalno na 0:49Ch stoji 00000000h. Znači, prvi put kada se dogodi int 70h, biće odmah i isključen! Kada se drugi put pozove ENABLE70 tamo će se nalaziti FFFFxxxxh i u sledećih sat vremena sve izgleda OK. Rešenje prvog dela problema: (dvostruko pozivanje ENABLE70) Pre pozivanja ENABLE70 staviti 0FFFFh u 0:49Eh. Rešenje drugog dela problema (isključenje posle 68 min) je ono što si i sam rekao - s vremena na vreme u 0:49Eh staviti 0FFFFh. >Isključivanje INT 70h se može uraditi isključivanjem tajmera, >opet preko BIOS-a. Za probu sam ubacio u VCS rad sa int 70h preko biosa (jeste, radi, čak je i par bajtova kraći), ali me brine što i NG i HelpPC pominju neke rane verzije AT BIOSa koje nemaju ovu funkciju ili bar ne kompletnu - tj. bez mogućnosti isključivanja. Zato mislim da ću radije i ubuduće sam obavljati taj posao. Nemoj samo da mi neko sad kaže: "Ma ko još drži te matore krntije?" Moj bios je iz '87 (a računar kupljen prošle godine - hvala Jugodati) pa mi uopšte nije teško da zamislim i neki iz '84. V && !Z
asembler.253 mstanic,
>>> Radi se o pozivu korisničkih rutina koje se aktiviraju >>> pri nekom događaju (pritisak na mouse taster, pomeranje, Hvala svima, mada sam sve to znao je imam dokuntaciju za nekoliko miševa i trekbal(ova)a. Posle sam otkriu u čemu je štos, naime nije hteo da se vrati iz tih funkcija a ja sam ga u tome zeznuo (postavljao sa AX na nulu) Evo kako to izgleda: event_hand proc far sti push ax ovde sledi program po želji ali meni je trebao ovaj deo pop ax ret event_hand endp Još jednom hvala svima na uloženom vremenu i naporu.
asembler.254 dejanr,
Da li je neko uspeo da napiše program čija bi ekstenzija bila .EXE i koji bi se normalno izvršavao (recimo, kao rezidentni) ali koji bi mogao da se stavi i u CONFIG.SYS kao DEVICE=PERA.EXE? Ovo je moguće, recimo SMARTDRV je takav. Zna li neko kako?
asembler.255 d.petrovic, -> #249, ddjula
A, jel može neko da predpostavi zašto sa VCS-om (vasićeva simulacija cga za herc) program (igra) koja na 386/33/svga radi normalno kod mene na 286/16/herc+vcs radi 3-5 puta brže ?
asembler.256 janko, -> #254, dejanr
> Da li je neko uspeo da napiše program čija bi ekstenzija > bila .EXE i koji bi se normalno izvršavao (recimo, kao > rezidentni) ali koji bi mogao da se stavi i u CONFIG.SYS > kao DEVICE=PERA.EXE? Ovo je moguće, recimo SMARTDRV je > takav. Zna li neko kako? Za početak, pogledaju se reference koje definišu .EXE i .SYS fajlove, i algoritme koji se sprovode nad njima pri unosu u memoriju. ;)
asembler.257 skoprivica, -> #251, dzakic
-> ali me brine sto i NG i HelpPC pominju neke rane verzije AT BIOSa -> koje nemaju ovu funkciju ili bar ne kompletnu Evo ja imam bios iz '85 god, pa napisi neki programcic i posalji mi i kazi sta treba da se desi, a ja cu ti reci sta se desilo... Aje... CTEBO.
asembler.258 obren, -> #254, dejanr
> Da li je neko uspeo da napiše program čija bi ekstenzija bila .EXE > i koji bi se normalno izvršavao (recimo, kao rezidentni) ali koji > bi mogao da se stavi i u CONFIG.SYS kao DEVICE=PERA.EXE? Ovo je > moguće, recimo SMARTDRV je takav. Zna li neko kako? To su *device driveri* sa ekstenzijom .EXE, ima to u MS DOS Programmer's Reference, i nije nešto posebno teže od pravljenja običnih .SYS drajvera. Problem je (bar tako piše u dokumentaciji) što ovakvi drajveri ne rade sa IBM DOS-om jer je kod njega .EXE loader smešten u COMMAND.COM koji nije aktivan dok se interpretira config.sys. Doduše čuo sam priče da se i neki obični .EXE programi mogu startovati iz config.sys-a ali ja još ne nađoh takav... :)
asembler.259 mivel, -> #254, dejanr
Bez problema! U prilogu je primer sa kratkim opisom Ka Milan odgovor.zip
asembler.260 mstanic, -> #254, dejanr
>> Da li je neko uspeo da napiše program čija bi ekstenzija >> bila .EXE i koji bi se normalno izvršavao (recimo, kao >> rezidentni) ali koji bi mogao da se stavi i u CONFIG.SYS >> kao DEVICE=PERA.EXE? Ovo je moguće, recimo SMARTDRV je >> takav. Zna li neko kako? Ne znam kako .EXE ali imam u nekom časopisu (Nemačkom) za .COM verziju, zapravo kako se .COM pretvara u .SYS pa ako znaš Nemački mogu da ga skeniram i pošaljem.
asembler.261 nnedovic,
Hm, igrao sam se sad malo sa tim Vasinim interaptom 70h i zakačio za njegov vektor rutinu koja samo pushuje i popuje registre i proverava da li je već u toku opsluživanje tog interapta. Kad sam startovao programčić, sistem je poludeo (što bi automehaničari rekli, čini mi se da je crko komandni procesor). Naime, nije se ukočio nego je na (skoro) svaku komandu (pa čak i na format c: ) odgovarao sa "" a na neke komande imao začuđujuće originalno :) ponašanje. Jeste interesantno, ali ga treba i shvatiti. Dakle?
asembler.262 ddjj, -> #159, amilanov
==> Inače OBJ2ASM, uradi stvar, uglavnom ko što treba. ==> Pretvori .obj u .asm. žini se da OBJ2ASM ima bug. Lepo se od OBJ dobije ASM ali ... U asemblerskom programu je sve u redu osim sto kod svih CALL instrukcija u kojima se pozivaju drugi OBJ moduli (iz iste biblioteke) uvek stoji adresa modula koji se disasemblira (ili možda bolje objtoasseblira) kao da se poziva rekurzivno, a nema veze od rekurzije - proverio Turbo Disassemblerom. Dali je možda problem u tome što sam obj-ecte dobio tlibom vadeći ih jedan po jedan iz biblioteke (LIB za Turbo C 2.0).
asembler.263 ddjula, -> #251, dzakic
> iz VCS-a su izvučene i procedure ENABLE70 i DISABLE70 - baš lepo od > duduka što je to napomenuo): ^^^^^^ Nije mi baš jasno šta sam ja to napomenuo i što sam duduk, ali ja sam te procedure uzeo sa SEZAM-a, a sa tim VCS-om nemam nikakve veze - ne znam tačno ni čemu to služi. Pozdrav, Đula
asembler.264 ddjula, -> #257, skoprivica
> Evo ja imam bios iz '85 god, pa napisi neki programcic i posalji > mi i kazi sta treba da se desi, a ja cu ti reci sta se desilo... Evo, šaljem ti mali test programčić, pokreneš ga sa test70, a posle INT 70 možeš gasiti i paliti sa 70off i 70on. Ako imaš HERCULES, trebalo bi da se na- sred ekrana pojavi "" (smajli). Ako imaš VGA, biće isto, samo će da menja bo- ju 1024 puta u sekundi. Pogledaj i koliko ti se usporio sistem... Pozdrav, Đula int70.arj
asembler.265 mjova, -> #264, ddjula
> ju 1024 puta u sekundi. Pogledaj i koliko ti se usporio > sistem... nisam probao, ali ako radi neki posao koji zahteva malo vremena (ali samo malo) osetno je usporenje, ipak se izvršava suviše često.
asembler.266 mjova,
jednom prlikom neko je ostavio breakl ovde, ali taj nije baš bio transparentan kako treba jer je 'otpuštanje' ctrl-break-a gušio. malo sam ja to prepravio, pa sad evo toga. mislim da sad ctrl-break radi isto kao i bez breakl-a, ali to nikad nije ni radilo dobro ;). sad je gotiva samo na ctrl-alt-4. toliko. breakl.arj
asembler.267 pstojanovic,
Dobio sam u firmi neku Panasonikovu tel. centralu, koja ima tu mogucnost da salje na serijski stampac preko RS232 odredjene tekstualne statisticke zapise. E sad, posto imam visak paralelnih stampaca, prva solucija je bila da se ne kupuje serijski vec da se proba nabaviti kartica za prebacivanje sa serijske veze na paralelnu. Medjutim, takvu karticu nisam uspeo nabaviti, pa mi je palo na pamet da preko jednog racunara preuzimam signale sa centrale (simuliram stampac) i stavljam u datoteku koja bi se mogla kasnije obradjivati. Sta mislite, da li je to moguce ?
asembler.268 dejanr, -> #259, mivel
>> Bez problema! U prilogu je primer sa kratkim opisom Pre svega, puno hvala na primeru. No postoji mali problem - .EXE fajl se zaista može instalirati sa DEVICE = xxx.EXE iz CONFIG.SYS-a, ali se kao samostalan program ne može startovati iako mu je ekstenzija EXE. Bolje reći, može se startovati ali se po startovanju računar zaglupi.
asembler.269 dzakic, -> #255, d.petrovic
> A, jel može neko da predpostavi zašto sa VCS-om (vasićeva simulacija cga > za herc) program (igra) koja na 386/33/svga radi normalno kod mene na > 286/16/herc+vcs radi 3-5 puta brže ? Može. :) Može čak i da objasni, samo ako si raspoložen da slušaš (čitaš) o različitim adresama CGA i herc video portova, o presretanju čitanja sa (nepostojećih) CGA portova i njihovom preusmeravanju na herca i sličnim prljavštinama, kao i o pogrešnim podacima koje mali žuti daju u dokumentaciji za svoj hardver. Ako nisi, i ako se ta igra koju pominješ nekim slučajem zove 'Dangerous Dave' onda će ti i ovo pomoći: BA DA 03 EC C7 D2 A8 08 <- originalni sadržaj BA 80 <- izmene Ovo je patch za DAVE.EXE posle kojeg će se na hercu igra odvijati normalnom brzinom (čak i na tvojoj ljutoj makini;). Neće više ni blokirati na XT-u. PAčNJA! Sve ovo se odnosi **SAMO** na herca! Za ostale kartice treba sačuvati nekrpljenu verziju. Copyleft za ovo je (naravno) Vasin. ps. Imao sam tu negde i pokicu za bezbroj života, samo sad nikako ne mogu da je nađem... :(
asembler.270 dzakic, -> #263, ddjula
>> iz VCS-a su izvučene i procedure ENABLE70 i DISABLE70 - baš lepo od >> duduka što je to napomenuo): > ^^^^^^ > Nije mi baš jasno šta sam ja to napomenuo i što sam duduk, ali ja sam te > procedure uzeo sa SEZAM-a, a sa tim VCS-om nemam nikakve veze - ne znam > tačno ni čemu to služi. Ma neeee... :) Pogledaj kako se zove osoba koja je te procedure *ostavila* na Sezam, ili jednostavno otkucaj: res sh duduk
asembler.271 dzakic, -> #251, dzakic
> ali me brine što i NG i HelpPC pominju neke > rane verzije AT BIOSa koje nemaju ovu funkciju ili bar ne kompletnu - > tj. bez mogućnosti isključivanja. U stvari, funkcija za isključivanje (AX=8301h) i nije neophodna: Dovoljno je na 0:49Ch staviti 00000000h i pri sledećem nailasku INT 70h, bios će sam da ga isključi.
asembler.272 mivel, -> #268, dejanr
Izvinjavam se, nisam dobro protumacio pitanje. U svakom slucaju, interesantno je i probacu malo da promozgam ...
asembler.273 mstanic, -> #267, pstojanovic
>> jednog racunara preuzimam signale sa centrale >> (simuliram stampac) i stavljam u datoteku koja bi se >> mogla kasnije obradjivati. Sta mislite, da li je to >> moguce ? Svakako.
asembler.274 dejanr, -> #267, pstojanovic
>> pa mi je palo na pamet da preko jednog racunara preuzimam signale >> sa centrale (simuliram stampac) i stavljam u datoteku koja bi se >> mogla kasnije obradjivati. Sta mislite, da li je to moguce ? Mislim (tj. ubeđen sam) da je moguće. Štaviše, ne moraš da se "patiš" sa asemblerom, lepo će poslužiti i neki C ili paskal, a bogami i bejzik koji je za tu RS232 komunikaciju još i najpogodniji.
asembler.275 d.petrovic, -> #269, dzakic
Ă> Može. :) Može čak i da objasni, samo ako si raspoložen da slušaš Ă> (čitaš) o različitim adresama CGA i herc video portova, o Ă> presretanju čitanja sa Gkmpfhlj! Mani me bre, dosta mi je da znam da postoji logično objašnjenje. Neću da se mešam u prljave igre. Ă> Ako nisi, i ako se ta igra koju pominješ nekim slučajem zove Ă> 'Dangerous Dave' onda će ti i ovo pomoći: A, da izmisliš ( ili Vasić) još nešto tako štrokavo za Supremacy ? Ă> normalnom brzinom (čak i na tvojoj ljutoj makini;). Neće više ni Pa dobro bre! A šta bi rek'o da imam Amigu? ;)))
asembler.276 kvelkovski, -> #258, obren
>> Doduse cuo sam price da se i neki obicni .EXE programi mogu startovati >> iz config.sys-a ali ja jos ne nadoh takav... :) INSTALL=C:\DOS\SHARE.EXE A bio i primer o startovanju Win31 iz config.sys-a. Kupe
asembler.277 dejanr,
Evo šta kažu na BIX-u po pitanju .EXE programa koji je i .SYS drajver. Ako je neko raspoložen da proba, garantovana mu je svetska slava (ili bar prilog u "Bajtovima lične prirode" ;) ========== ibm.dos/secrets.3 #4021, from barryn, 506 chars, Sun Sep 27 13:31:33 1992 Comment to 4020. ---------- To make an executable file (.EXE) usable as a device driver, construct the .EXE file so that the header and relocation table are followed immediately by the device driver image. The memory image of the executable file then follows the device driver in the file. If you know someone with a XIRCOM pocket token ring adapter, ask to borrow a copy of their SMARTLSP.EXE program. It's a good example of a combination .EXE/.SYS file. You can hex-dump the first part of the file to see the relationships.
asembler.278 zormi, -> #258, obren
* Doduše čuo sam priče da se i neki obični .EXE programi mogu * startovati iz config.sys-a ali ja još ne nađoh takav... :) Koliko se sećam, programi iz paketa HYPER za cache su takvi.
asembler.279 mstanic, -> #277, dejanr
>> example of a combination .EXE/.SYS file. You can hex-dump >> the first part of the file to see the relationships. Hiperdisk je isto .EXE i .SYS, bar tako piše u uputstvu.
asembler.280 dzakic, -> #275, d.petrovic
> A, da izmisliš ( ili Vasić) još nešto tako štrokavo za Supremacy ? Hm. Pa nije štrokava pokica, nego je štrokavo kad interapt rutina (70h) menja registre i utiče na tok izvršavanja prekinutog programa - izigrava rezidentnu zakrpu. :) A i nemam(o) Supremacy, kad smo već kod toga. Probaj sam da središ, a ovo bi trebalo da ti pomogne: (Ako su simptomi isti, verovatno je i uzrok.) Prvo u .EXE-u potraži niz BA DA 03, tj 'mov dx,3DAh'. Ako negde iza toga sledi i jedno EC ('in al,dx') onda si na pravom mestu. Ono BA DA 03 onda zameniš sa BA BA 03 ('mov dx, 3BAh'). Time je pola posla završeno - čitanje sa CGA porta zamenjeno je čitanjem sa herca. Ali, i sami bitovi na portu su različito razmešteni: Negde iza ovoga trebalo bi da se nadje i A8 08 ('test al,8') ili 28 08 ('and al,8'). 08 zameniš sa 80. To bi onda trebalo da bude to. Možda će biti potrebno napraviti ove izmene na više mesta.
asembler.281 obren, -> #278, zormi
>* Doduše čuo sam priče da se i neki obični .EXE programi mogu >* startovati iz config.sys-a ali ja još ne nađoh takav... :) > > Koliko se sećam, programi iz paketa HYPER za cache su takvi. Pa hyper nije običan, on je predviđen i za takvo strtovanje što piše u dokumentaciji. Svaki program koji se tako instalira ima na samom početku device header - nije to neka mudrost napraviti (uz poruku je ZZ-ov HEX drajver u .EXE obliku, naravno proširen procedurom koja se izvršava u slučaju startovanja iz komandne linije). Ono što sam čuo je da je moguće *STARTOVATI* direktno iz config-a neki program. Konkretno, mazali su me da su na neki školski računar instalirali program preveden iz TP-a koji zahteva šifru, ali da je caka što su ga umesto u autoexec, stavili u config pa se nije mogao sprečiti start lupanjem po kontrol-brejku dok traje butovanje. Ja se naivan posle ubio da tako nešto postignem, ali tad sam još bio mlad i neiskusan ;) hex-exe.zip
asembler.282 janko, -> #281, obren
> Ono što sam čuo je da je moguće *STARTOVATI* direktno iz > config-a neki program. Konkretno, mazali su me da su na A zar nije? Ili ja nisam nešto razumeo u tvojoj priči?
asembler.283 ddjula, -> #269, dzakic
> Može. :) Može čak i da objasni, samo ako si raspoložen da slušaš (čitaš) > o različitim adresama CGA i herc video portova, o presretanju čitanja sa > (nepostojećih) CGA portova i njihovom preusmeravanju na herca i sličnim Ja sam raspoložen! Posebno me interesuje kako se može presresti čitanje i upis u I/O portove, pošto sam do sada bio uveren da to nije moguće. Pozdrav, Đula
asembler.284 obren, -> #282, janko
>> Ono što sam čuo je da je moguće *STARTOVATI* direktno iz >> config-a neki program. Konkretno, mazali su me da su na > > A zar nije? Ili ja nisam nešto razumeo u tvojoj priči? Prilično loše sam se izrazio - mislio sam na obične programe, recimo napišeš u nekom jeziku, prevedeš i staviš kao device=xxxx
asembler.285 mivel, -> #281, obren
EXE/SYS 1) svaki device driver se *STARTUJE* direktno iz config-a i ima potpunu kontrolu na sistemom sve dok ne odluci da zavrsi INIT rutinu! 2) svaki EXE fajl koji ima Device Driver header odmah iza EXE headera moze se startovati kao device driver, jasno uz postovanje strukture opisane u dokumentaciji o device driverima 3) ako taj EXE program ima neku drugu start adresu, onda ce, po startovanju iz DOS-a, dobiti kontrolu na tom mestu; kada se startuje iz CONFIG-a, onda je prva rutina koja se izvrsava INIT. Znaci, program ima dve razlicite ulazne tacke. Mozda je dejanr zelio da program startuje iz DOS-a, ostavi ga u memoriji tako da ovaj ima ulogu Device Drajvera?? I to je sigurno moguce, ali bi verovatno trebalo malo brljati po nedokumentovanim oblastima i po prvom memorijskom bloku. Cini mi se da je za tako nesto najsigurnije da se program startuje iz CONFIG.SYS-a, instalira neka vrsta SHELL-a device drajvera, a da se kasnije startovanjem iz DOS-a samo menja njegov modus operandi?! Milan
asembler.286 skoprivica, -> #264, ddjula
-> Evo, saljem ti mali test programcic, pokrenes ga sa test70, a posle -> INT 70 mozes gasiti i paliti sa 70off i 70on. Ako imas HERCULES, -> trebalo bi da se na- sred ekrana pojavi "" (smajli). Ako imas VGA, -> bice isto, samo ce da menja bo- ju 1024 puta u sekundi. Pogledaj i -> koliko ti se usporio sistem... Evo skace mi ovaj tvoj smajli po sredini ekrana, i posto imam EGA karticu, treperi, ali je pretezno beo (mislim da je to zbog brzine). Inace, kad dir-nem neki dir, ostaju raznobojni smajliji na mestima gde je bio, tj u toj koloni u kojoj je smajli (razumes?). E, SI (iz 6.0) kaze 9.2 (testirano na 286) bez "uputrebe" smajlija tj. INTa 70, a posle test70 izjavljuje 8.8, nije strasno... Aje... CTEBO. PS: BIOS je AWARDov, i datiran je 11/15/85, tj. 15. novembar 1985.
asembler.287 dejanr, -> #285, mivel
>> Mozda je dejanr zelio da program startuje iz DOS-a, ostavi ga u memoriji >> tako da ovaj ima ulogu Device Drajvera?? U stvari, ideja je da se korisniku da fajl koji se, recimo, zove X.EXE Ako mu je volja, može da ga ugradi u CONFIG.SYS sa DEVICE=X.EXE i da onda njegove usluge koriste i ostali programi koji se učitavaju iz CONFIG.SYS-a. Ako mu se to ne sviđa, može da ga stavi u AUTOEXEC.BAT ili čak da ga kasnije startuje kucajući X, kada mu usluge tog drajvera trebaju. Kako će "visiti" na nekom interaptu, nije nužno da bude device driver. Mislim da će to moći da se uradi sa ovim informacijama, hvala svima na pomoći.
asembler.288 d.petrovic, -> #284, obren
Ă> Prilično loše sam se izrazio - mislio sam na obične programe, Ă> recimo napišeš u nekom jeziku, prevedeš i staviš kao device=xxxx Koji ti dos čuči ? Verovatno su to izveli (ja sam recimo ced tako stavljao) sa install. To ide u dos-u 5.00 i ide iz config-a. Pozdrav, Dejan
asembler.289 obren, -> #288, d.petrovic
> Koji ti dos čuči ? Verovatno su to izveli (ja sam recimo ced tako > stavljao) sa install. To ide u dos-u 5.00 i ide iz config-a. Uopšte nisam znao to za INSTALL! Reče to i kvelkovski, ali nije mi palo na pamet da probam sa bilo kojim programom. Sad mi je jasno kako je ono što sam naveo izvedeno, thanx obojici!
asembler.290 d.petrovic, -> #280, dzakic
Ă> Prvo u .EXE-u potraži niz BA DA 03, tj 'mov dx,3DAh'. Ako negde iza Ă> toga sledi i jedno EC ('in al,dx') onda si na pravom mestu. Ono BA Ă> DA 03 onda zameniš sa BA BA 03 ('mov dx, 3BAh'). Time je pola posla Ă> završeno - Neeeeima ga niđe. Igra se sastoji od GAME.EXE i gomile .BIN .GPH fajlova. Ni u jednom .bin ili ti u game.exe nema tog niza (BA DA 03).
asembler.291 dzakic, -> #283, ddjula
> Ja sam raspoložen! Posebno me interesuje kako se može presresti čitanje i > upis u I/O portove, pošto sam do sada bio uveren da to nije moguće. Dobro ako si raspoložen, mada ćeš se verovatno razočarati kad vidiš o čemu se stvarno radi. Koliko ja znam, upis i nije moguće presresti, ali se sa čitanjem može nešto postići (nekad i negde). Evo kako obično izgleda petlja koja na CGA proverava horizontal retrace (za izbegavanje 'snega'): ... mov dx,3DAh petlja1:in al,dx ; Ako se u petlju uleti pri kraju v.r.-a, test al,01h ; sačeka se da prodje ceo. jnz petlja1 petlja2:in al,dx test al,01h ; žeka se početak sledećeg... jz petlja2 ... E sad, ako se ovo izvršava na herkulesu, petlja1 je mrtva jer in al,dx uvek daje 0FFh i računar blokira. Tu na scenu stupa tajmer interapt rutina. (8 ili 70h - svejedno) Prvo proveri da li se u dx nalazi 3DAh. Onda proveri da li povratna adresa pokazuje na kod naredbe 'in al,dx' (0ECh). Ako je i jedno i drugo tačno, onda treba 'odglaviti' program: Recimo tako što se obavi 'in al, 3BAh' (herkulesov status port), bitovi rezultata se srede da odgovaraju onome što bi dala CGA, povratna adresa uveća za jedan da se preskoči problematični 'in al,dx' čiji smo posao upravo obavili, i to je to.
asembler.292 mivel, -> #283, ddjula
Citanje ili pisanje I/O portova MOGUCE JE PRESRESTI, kao uostalom i svaku drugu instrukciju preko Interrupta 1 (Single Step, Trap). Fajl uz ovu poruku prikazuje nacin postavljanja u Single Step modus, ukidanje tog modusa i kostur interrupt rutine. Jasno, izvrsenje programa sa aktivnim INT 1 daleko je sporije jer se nakon svake instrukcije aktivira interrupt. trap.zip
asembler.293 bearboy, -> #258, obren
˙¨:> Doduše čuo sam priče da se i neki obični .EXE programi mogu startovati ˙¨:> iz config.sys-a ali ja još ne nađoh takav... :) X00 fosil radi slično... I kao .SYS i kao .EXE...
asembler.294 kvelkovski, -> #287, dejanr
>> Ako mu je volja, moze da ga ugradi u CONFIG.SYS sa DEVICE=X.EXE i da >> onda njegove usluge koriste i ostali programi koji se ucitavaju iz >> CONFIG.SYS-a. Ako mu se to ne svida, moze da ga stavi u AUTOEXEC.BAT >> ili cak da ga kasnije startuje kucajuci X, kada mu usluge tog drajvera A DESQview ima DEVICE.COM. Kad ti pritreba ANSI.SYS opalish jedno 'DEVICE ANSI.SYS' i gotovo ... Kupe P.S. Znam da postoji i DVANSI ali nisam nashao bolji primer :-)
asembler.296 ilazarevic, -> #281, obren
█ program. Konkretno, mazali su me da su na neki školski računar █ instalirali program preveden iz TP-a koji zahteva šifru, ali da je █ caka što su ga umesto u autoexec, stavili u config pa se nije mogao █ sprečiti start lupanjem po kontrol-brejku dok traje butovanje. Ja se █ naivan posle ubio da tako nešto Pa to može da se reši u 4DOS-u. u config.sys je kod shella, pored normalnog c:Đ4dos.exe blabla stavi i ime fajla koji će se pozivati neposredno po učitavanju 4dos-a. Kada se program odatle pozove, ne može da se prekine sa kontrol-brejk.
asembler.297 d.petrovic, -> #296, ilazarevic
Ă> učitavanju 4dos-a. Kada se program odatle pozove, ne može da se Ă> prekine sa kontrol-brejk. Xe. Učitaj ga sa install c:ĐtrućĐblabla pa uradi jedno MI ili MEM/C. Di se nalazi COMMAND ? :)
asembler.298 d.petrovic, -> #297, d.petrovic
Ups, mislio sam sve to sa dos 5.0
asembler.300 vitez.koja,
Kako se regulise velicina kursora preko dosa i biosa ? Hvala unapred.
asembler.301 mjova, -> #300, vitez.koja
> Kako se regulise velicina kursora preko dosa i biosa ? #define HIDE_CURSOR (0x2000) #define NORM_CURSOR ((VIDEOMODE!=7) ? 0x0D0E : 0x0607) #define HALF_CURSOR ((VIDEOMODE!=7) ? 0x070E : 0x0407) #define BLOCK_CURSOR ((VIDEOMODE!=7) ? 0x000E : 0x0007) ah= 1 // BIOS Set Cursor Type cx= // start-end scan line int 10h ako te zanima trenutan oblik kurzora onda ga možeš pročitati na: #define CURSOR (*((word far *)0x460lu)) // cursor shape
asembler.302 d.petrovic, -> #300, vitez.koja
Ă> Kako se regulise velicina kursora preko dosa i biosa ? Hvala Ă> unapred. INT 10H funkcija 01H CH bitovi 0-4= startna linija kursora CL 0-5= krajnja Ima puno toga da se piše, javi mi se pa da ti dam da pročitaš. Pozdrav, Dejan
asembler.303 korvin, -> #302, d.petrovic
­­­> Ima puno toga da se piše, javi mi se pa da ti dam da pročitaš. Jedno pitanjce :) Odakle (koja knjiga?)crpite to znanje o pozivima dos-a ??
asembler.304 ppekovic, -> #303, korvin
>> Jedno pitanjce :) Odakle (koja knjiga?)crpite to znanje o pozivima >> dos-a ?? Ray Duncan, Advanced MS-DOS programming (second edition) The Microsoft guide for Assebmly Language and C programmers. Pozive imaš i u obliku fajla ovde na sezamu u arhivi inter30. Paya P.S. Ako te knjiga zanima, mail me.
asembler.305 d.petrovic, -> #303, korvin
Ă> Jedno pitanjce :) Odakle (koja knjiga?)crpite to znanje o pozivima Ă> dos-a ?? E, sad ne mogu tačno da se setim naslova (knjiga je već kod njega :)) ). Mislim da beše : PC/ROM BIOS
asembler.306 korvin, -> #304, ppekovic
­­­> Ray Duncan, Advanced MS-DOS programming (second edition) ­­­> The Microsoft guide for Assebmly Language and C programmers. ­­­> ­­­> Pozive imaš i u obliku fajla ovde na sezamu u arhivi inter30. Puno ti hvala.
asembler.307 banex,
Ima li neko predlog za kupovinu neke dobre knjige za asembler? Naravno da se može kupiti kod nas. Meni bi bilo dosta da mi da spisak svih naredbi, šta joj je potrebno na ulazu, šta se dešava na izlazu, itd. Za primere se mogu snaći i sam (sourcer još uvek radi, zar ne?). CU! PS. Ne mora biti knjiga. Može i datoteka, ako neko zna za takvu (štampač ionako zvrji prazan).
asembler.308 tuci, -> #307, banex
¸> Ima li neko predlog za kupovinu neke dobre knjige za ¸> asembler? Naravno da se može kupiti kod nas. Meni bi bilo ¸> PS. Ne mora biti knjiga. Može i datoteka, ako neko zna za ¸> takvu (štampač ionako zvrji prazan). Pogledaj: R:/ibmpc/info/helppc21.arj(a01) * Zbog yuscii-a sam stavio slash umesto backslash-a. Pozdrav, Zlatko.
asembler.309 mjova, -> #307, banex
> PS. Ne mora biti knjiga. Može i datoteka, ako neko zna za > takvu (štampač ionako zvrji prazan). odavno sam ti dao neki mali help koji sadrži osnovne komande 8086 procesora. mislim da je to sasvim dovočljno, pa ako ne možeš to da nađeš, mogu ja da potražim i da ti pošaljem...