🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #15803

Re: Statusport byte naar bits converteren.

#15803
From: Alain
Date: Fri, 18 Aug 2000 00:00
90 lines
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-mail
References: <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