Article View: be.comp.programming
Article #15803Re: Statusport byte naar bits converteren.
From: Alain
Date: Fri, 18 Aug 2000 00:00
Date: Fri, 18 Aug 2000 00:00
90 lines
2721 bytes
2721 bytes
RedX wrote:
> Er worden maar 5 bits gebruikt: 8,16,32,64 en 128.
Dat klopt, ja.
> bits 8,16,32 en 64 zijn geinverteerd: ze hebben een waarde van -8, -16, -32 en -64.
Nee, dat zijn ze *niet*
Op 0x379 is alleen het MSB geinverteerd. (128 dus)
> bit 128 is normaal.
Nee.
Laat nou net dit bit geinverteerd zijn.
> daarbij wordt er ook nog 127 bij de waarde van de byte geteld.
??
> nu toe heb ik alle de 4 geinverteerde bits kunnen "losmaken" van de byte.
Die vier bits waar je het over hebt, zijn niet geinverteerd.
Enne...erhm....."losmaken van de byte" ???
[snip pseudo-code verhaal]
> Dit werkt correct
Lijkt me sterk ;)
> maar als ik een bit5 een 1 zou krijgen, geeft dit verkeerde waarden.
Als bit 5 een 1 zou krijgen ?
Bedoel je "als bit 5 hoog zou worden" ?
Als het MSB (0x379) *hoog* is, lees ik op mijn machine met deze
instructie:
"bit = inb(0x379) & 128"
deze waarde in: "0" /* should be 128. Ergo: bit inverted */
Als het MSB *laag* is, lees ik op mijn machine met deze instructie:
bit = inb(0x379) & 128
deze waarde in: "128" /* should be 0. Damn, bit still inverted */
--------------------------------------------------------------------
Als bit 6 (0x379, "64") *hoog* is, lees ik op mijn machine met deze
instructie:
"bit = inb(0x379) & 64"
deze waarde in: "64" /* exactly what we would expect, hence, bit
NOT inverted */
Als bit 6 (0x379, "64") *laag* is, lees ik op mijn machine met deze
instructie:
"bit = inb(0x379) & 64"
deze waarde in: "0" /* again, exactly what we would expect */
Deze code gebruikte ik om te testen: (Linux, gcc lpt.c -o lpt -O2, run
as root or setuid)
#include <stdio.h>
#include <sys/io.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int bit, level;
if (argc != 2 )
{
printf ("Not enough arguments.\n");
return 1;
}
level = atoi(argv[1]);
if (ioperm(0x378, 3, 1)) { perror ("ioperm"); return 1; }
bit = inb(0x379) & level;
printf ("This is the value: %d\n", bit);
return 0;
}
regards,
CoreCPU
Technical Details
Message-ID:
<399DAAC9.3362444E@village.uunet.be>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailReferences:
<8nekll$iv2$1@news.planetinternet.be>Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit X-Google-Thread: fcea4,a3337484a0f4caf0 X-Google-Attributes: gidfcea4,public From: Alain <zidaya@village.uunet.be> Subject: Re: Statusport byte naar bits converteren. Date: 2000/08/18 Message-ID: <399DAAC9.3362444E@village.uunet.be> X-Deja-AN: 659881954 Content-Transfer-Encoding: 7bit References: <8nekll$iv2$1@news.planetinternet.be> X-Accept-Language: en Content-Type: text/plain; charset=us-ascii X-Trace: bru5-newsr2.be.uu.net 966634095 12144 212.190.1.214 MIME-Version: 1.0 Newsgroups: be.comp.programming