Avatar billede amoelle Nybegynder
05. april 2004 - 09:52 Der er 5 kommentarer og
1 løsning

programmerin g til et uortodokst IO kort

Hvordan koder man mod et IO kort i Visual Basic ?

Jeg har et uortodokst IO kort (parallel kommunikation, bygget af en ingeniør til styring af en ekstern enhed, når man trykkede på en pedal på den eksterne enhed)
Det bruger register 300,301,302 og 303.


(*******************        initier_port          **********************)
(*  Oppsett av portene ved start:                                      *)
(*  PortA = utgang (som er verdi=1). PortB = inngang (som er verdi=0). *)
(***********************************************************************)

(*----------------!verdi!port!port!port!port!port!port!port!port!-------*)
(*    ! port nr. !    ! 8  ! 7  ! 6  ! 5  ! 4  ! 3  ! 2  !  1 !      *)
(*-----!----------------------------------------------------------------*)
(*    ! register !    !    !    !    !    !    !    !    !    !      *)
(*    !  $301  ! $FF ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  !=av    *)
(*  A !----------------------------------------------------------------*)
(*    ! kontroll !    !    !    !    !    !    !    !    !    !=bare  *)
(*    !  $303    $FF ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  !utgang *)
(*-----!----------------------------------------------------------------*)

(*----------------!verdi!port!port!port!port!port!port!port!port!-------*)
(*    ! port nr. !    ! 16 ! 15 ! 14 ! 13 ! 12 ! 11 ! 10 !  9 !      *)
(*-----!----------------------------------------------------------------*)
(*    ! register !    !    !    !    !    !    !    !    !    !      *)
(*    !  $300  ! $FF ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  ! 1  !=av    *)
(*  B !----------------------------------------------------------------*)
(*    ! kontroll !    !    !    !    !    !    !    !    !    !=bare  *)
(*    !  $302    $00 ! 0  ! 0  ! 0  ! 0  ! 0  ! 0  ! 0  ! 0  !inngang*)
(*-----!----------------------------------------------------------------*)


Det har i fordums dage siddet i en win311 maskine, og Pascal koden var i stil med:
function pedal:byte;
  var pedaladr : word;
  begin
    port(.$303.):=$00;
    pedaladr:=(6 mod 64) or $c0;
    port(.$300.):=pedaladr;
    port(.$300.):=pedaladr and $7F;
    pedal:=PORT(.$301.);
    port(.$300.):=pedaladr;
    port(.$300.):=$FF;
end;
 

Nu har jeg flyttet det over i en (anden) gammel maskine, der kører win 98 (det skal også virke på win 2000) og skal have koden skrevet om i Visual Basic.

Tiger_webdesign har i spørgsmålet http://www.eksperten.dk/spm/463854 skrevet:
"... Der ligger en dll der hedder IO.dll den kan tricket... "  på www.geekhideout.com

Jeg har kigget lidt på den og mangler svar på spørgsmålet om, hvordan jeg detekterer portens nummer på maskinen, -
altså hvordan finder jeg f.eks. værdien til Port i nedenstående kald:

Private Declare Sub PortWordOut Lib "IO.DLL" (ByVal Port As Integer, ByVal Data As Integer)

Dernæst er jeg usikker på, om IO.DLL er til en 'standard' parallel port (hvad det så end er ?..) og om den derfor kan bruges til mit formål ??

Gode råd modtages med tak og points
mvh Anne
Avatar billede driis Nybegynder
05. april 2004 - 10:08 #1
Er det et PCI eller ISA kort ?

Umiddelbart burde portadressen være den samme - men hvis der sidder andet hardware i den 'nye' maskine, som bruger samme adresse, dur det naturligvis ikke.
Avatar billede amoelle Nybegynder
05. april 2004 - 10:19 #2
Det er et ISA kort
Avatar billede driis Nybegynder
05. april 2004 - 10:24 #3
Du burde godt kunne bruge IO.DLL så vidt jeg kan se. Måske du burde overveje blot at bruge 'PortOut', da du så kun skriver én byte af gangen.
Avatar billede amoelle Nybegynder
05. april 2004 - 10:29 #4
OK, jeg skal prøve det i aften, men hvordan detekterer jeg porten ?
Skal jeg foretage mig noget med Windows enhedshåndteringen (Windows har ikke opdaget noget nyt hardware) eller kan jeg checke det fra min VB kode ?
Avatar billede driis Nybegynder
05. april 2004 - 10:39 #5
Der er ikke andet at gøre end at prøve at læse fra/skrive til kortet på adresserne 0x0300 til 0x0303. Hvis du kan få "kontakt" med det, så fungerer det. På en 'normal' PC tror jeg ikke der sidder andet hardware der bruger det adresseområde, så der skulle være gode chancer for at det virker. Hvis IKKE det virker, kan det være du er så heldig, at der på selve kortet sidder nogle jumpere, hvormed du kan indstille en anden adresse.

Windows finder ikke noget i enhedshåndteringen. Det kræver at kortet aktivt gør opmærksom på sig selv - og hvis det er lavet til en Win311 maskine, tvivler jeg stærkt på, at det gør det.

Husk, adresserne er angivet i hexadecimal noteringen. Dvs 0x0300 = 768 decimalt.
Avatar billede amoelle Nybegynder
05. april 2004 - 11:59 #6
OK, jeg prøver og vender tilbage i morgen.
Jeg har været ude for at der har været installeret et netværkskort, der brugte adresseområdet, men det løste jeg ved at ændre IRQ håndteringen til IKKE af være automatisk, og så gav jeg netværkskortet et andet adresseområde.
I mit konkrete tilfælde har maskinen (en Compaq Pressario) kun de 'medfødte' kort + det gamle IO kort, så adresseområdet bør være ledigt.
Foreløbig tak, jeg vender tilbage i morgen
/Anne
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester