Šta je novo?

priviledged instruction

hwfanatic

Čuven
Učlanjen(a)
13.02.2002
Poruke
659
Poena
630
O programiranju u asembleru je vec bilo reci, ali o ovom problemu nista nisam nasao putem search-a.

Dakle, instrukcija in al,dx izaziva exception opisan u naslovu, i program tu staje... Razvojni alat je Delphi 3.0; os je WinXP.

Ja, iskreno, nemam pojma sta vo znaci... :(

10x unapred
 
hwfanatic je napisao(la):
O programiranju u asembleru je vec bilo reci, ali o ovom problemu nista nisam nasao putem search-a.

Dakle, instrukcija in al,dx izaziva exception opisan u naslovu, i program tu staje... Razvojni alat je Delphi 3.0; os je WinXP.

Ja, iskreno, nemam pojma sta vo znaci... :(

10x unapred

Nisam siguran, ali u XP-u i NT-olikim OS neke instrukcije mogu da se izvrsavaju samo iz nultog prstena OS-a. Odnosno privilegovane su za OS. XP izoluje hardver kako bi bio stabilan, a cini mi se da ti necim punis neki od registara direktno.
 
Izgleda da je baš to u pitanju, posto odbija saradnju i iz compatibility moda; jedino u "čistoj" 98ici radi kako treba...

Nego,.. Da li postoji način da ova komplikacija zaobiđe, možda korišćenjem drugih instrukcija - pristupanjem hardveru baš preko os-a(izbegavanjem korišćenja assemblera)?
 
hwfanatic je napisao(la):
Izgleda da je baš to u pitanju, posto odbija saradnju i iz compatibility moda; jedino u "čistoj" 98ici radi kako treba...

Nego,.. Da li postoji način da ova komplikacija zaobiđe, možda korišćenjem drugih instrukcija - pristupanjem hardveru baš preko os-a(izbegavanjem korišćenja assemblera)?

Za početak, možda ti treba savremeniji Delphi?
 
Kad je rec o winxp-u, mozes slobodno da zaboravis na koriscenje in i out instrukcija. XP ne dozvoljava pristup portovima. Jedini nacin da im pristupis je da napises drajver. To nije bas lako ali mozes da potrazis neki gotov koji mozda obavlja funkciju koja ti treba. Trazi malo po netu.
Evo ti jedna adresa:
http://www.logix4u.net
 
Hm...

Nakon što sam završio sa čitanjem dotične adrese i linkova, bio sam ubeđen da je to prava stvar. Možda i jeste; nemam pojma, kako nisam uspeo da ga anteram da radi...

Instalirao (importovao) sam biblioteku kao novu ActiveX controlu preko priloženog ocx-a, a kao takvu sam je i koristio u programu. Medjutim, iz meni nepoznatih raazloga error ostaje da postoji, samo što je sada - Catastrophic Failiure :(
 
Ne znam, meni bez problema radi kad ga pozivam direktno iz impout32.dll-a. Jesi probao tako?
 
Ne pozivas valjda in al dx, zasto ne mov, in i out je valjda samo za portove
 
Ovo poslednje nisam razumeo...

Direktno iz dll-a? Kako to? Jedini nacin na koji sam uopste mogao da iskoristim biblioteku je da je importujem kao ActiveX komponentu... Mada, jelte, ja ne znam puno o tome :(
 
Ne vidim zašto bi neko pri zdravoj pameti napisao in al, dx. Em što drugi operand za in mora da bude I/O adresa (direktno ili registarski indirektno, ili kako već hoćeš), pa kao što reče čovek, možda si hteo da napišeš mov, ali onda ti i ni operandi nisu iste širine, izvorišni je 16 bita, a odredišni 8.

Sve u svemu, meni nije jasno šta si ti pokušavao da uradiš.
 
function GetPort(address:word):word;
var bvalue:byte;
begin
asm
mov dx,address
in al,dx
mov bvalue,al
end;
result:=bvalue;
end;

Tako glasi cela funkcija, i ona radi; mislim, u dos-based os-u... Uostalom, zasto je sada to bitno?! Nasao sam biblioteku koja obavlja ono sto meni treba, samo mi sada pomozite da je iskoristim...
 
function Inp32(PortAddress:Integer):Byte; stdcall external 'inpout32.dll';
procedure Out32(PortAddress:Integer; data:Integer); stdcall external 'inpout32.dll';

ovo je sve sto ti treba u hederu, posle samo pozovi ove funkcije, prva ti cita port druga upisuje.
 
Zahvaljujem! cheers

Znači sve što sam trebao da uradim jeste da dodam stdcall ispred external... Kako sam mogao znati?
 
hwfanatic je napisao(la):
Zahvaljujem! cheers

... Kako sam mogao znati?

predji na Delphi7 :mrgreen: :mrgreen:
 
Ja se izvinjavam :) ono gore i jeste bilo registarski indirektno adresiranje. My bad.
 
Nazad
Vrh Dno