asembler.206dragisha,
-> #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.207asrdjan,
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.208obren,
-> #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.209natila,
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.210dzakic,
-> #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.211obren,
Zna li neko kako može da se dođe do definicije aktivnog fonta kod EGA/VGA?
asembler.212ppekovic,
-> #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.213obren,
-> #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.214natila,
-> #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.215ppekovic,
-> #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.216ppekovic,
-> #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.217obren,
-> #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.218dzakic,
-> #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.219natila,
-> #218, dzakicHvala. Mislim da sam shvatio.
Jel smem da te gnjavim ako mi jos nesto zatreba?
Nemeth Attila
asembler.220ddjj,
-> #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.221mivel,
-> #218, dzakicIspravka: 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.222dzakic,
-> #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.223dzakic,
-> #221, mivel> Ispravka: instrukcije su ADC (Add With Carry) i SBB (Subtract
Naravno, ostalo od Z80. :)
asembler.224mdimitrijevic,
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.225drpr,
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.226natila,
-> #222, dzakicHvala.
Mozes li mi preporuciti neku dobru knjigu na ovu temu (ali koja moze da
se nabavi i kod nas)?
Nemeth Attila
asembler.227dzakic,
-> #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.228dzakic,
-> #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.229mivel,
-> #224, mdimitrijevicZa 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.230mdimitrijevic,
Hi!
HVALA MNOGO za move naredbu u asembleru.
Pozdrav,
Marjan Dimitrijevic
asembler.231spantic,
-> #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.232mivel,
-> #209, natilaDopuna (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.233amilanov,
-> #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.234drpr,
-> #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.235dzakic,
-> #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.237dzakic,
-> #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.238duduk,
-> #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.239duduk,
-> #238, duduk
Zaboravih ...
70.asmasembler.240nnedovic,
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.241drpr,
-> #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.242nnedovic,
-> #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.243dzakic,
-> #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.244mstanic,
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.245mstanic,
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.246bearboy,
-> #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.247obren,
-> #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.248mivel,
-> #245, mstanicPri 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.249ddjula,
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.250dzakic,
-> #245, mstanicEvo š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.251dzakic,
-> #249, ddjulaEvo š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.253mstanic,
>>> 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.254dejanr,
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.255d.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.256janko,
-> #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.257skoprivica,
-> #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.258obren,
-> #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.259mivel,
-> #254, dejanrBez problema! U prilogu je primer sa kratkim opisom
Ka Milan
odgovor.zipasembler.260mstanic,
-> #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.261nnedovic,
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.262ddjj,
-> #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.263ddjula,
-> #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.264ddjula,
-> #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.arjasembler.265mjova,
-> #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.266mjova,
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.arjasembler.267pstojanovic,
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.268dejanr,
-> #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.269dzakic,
-> #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.270dzakic,
-> #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.271dzakic,
-> #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.272mivel,
-> #268, dejanrIzvinjavam se, nisam dobro protumacio pitanje. U svakom slucaju,
interesantno je i probacu malo da promozgam ...
asembler.273mstanic,
-> #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.274dejanr,
-> #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.275d.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.276kvelkovski,
-> #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.277dejanr,
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.278zormi,
-> #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.279mstanic,
-> #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.280dzakic,
-> #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.281obren,
-> #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.zipasembler.282janko,
-> #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.283ddjula,
-> #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.284obren,
-> #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.285mivel,
-> #281, obrenEXE/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.286skoprivica,
-> #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.287dejanr,
-> #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.288d.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.289obren,
-> #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.290d.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.291dzakic,
-> #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.292mivel,
-> #283, ddjulaCitanje 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.zipasembler.293bearboy,
-> #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.294kvelkovski,
-> #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.296ilazarevic,
-> #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.297d.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.298d.petrovic,
-> #297, d.petrovicUps, mislio sam sve to sa dos 5.0
asembler.300vitez.koja,
Kako se regulise velicina kursora preko dosa i biosa ? Hvala unapred.
asembler.301mjova,
-> #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.302d.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.303korvin,
-> #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.304ppekovic,
-> #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.305d.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.306korvin,
-> #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.307banex,
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.308tuci,
-> #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.309mjova,
-> #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...