[fpc-pascal] Access to RS232 ports with fpc

Holger Bruns holger.bruns at gmx.net
Mon Nov 2 15:42:47 CET 2009


Bernd Mueller schrieb:
> Holger Bruns wrote:
>> Holger Bruns schrieb:
>>> I try to implement a direct port access. If this also leads to 
>>> access errors, I should give it up. Embarassing.
>> Accessing ports is limited to ports < 03ffh, more ports cannot be 
>> released with fpioperm. This means to me, successful serial port 
>> access on higher addresses cannot yet be implemented with fpc. If 
>> this policy can be ruled out, let me know.
>
> so you must use a very special serial hardware which is located on io 
> address higher than $3ff. Seems unlikely to me. In your former post, 
> you tried to access io address 1000 (decimal) this is $3e8 
> (hexadecimal) and should be an ordinary COM3. May be you are mixing up 
> decimal vs. hexadecimal notation.
>
No, the "1000" means the size of a buffer, not a part address. The port 
address I try to use is 0xEC00, which is the base address for an UART on 
a PCI card. Linux sees this UART as /dev/ttyS2. Accessing the registers 
direcly should be easy, because 3 lines of assembler code should do this 
job:

function readport (portaddress: word): byte;
begin
 asm
  mov %dx, portaddress
   inb %al,%dx
  mov readport, %al
 end
end;

As long as the pascal syntax and the assembler syntax (instruction 
destination source) are both correct for fpc, this function should 
return the value of the selected port. This is all, what I try to do.


Best regards, Holger




More information about the fpc-pascal mailing list