Am einfachsten ist für sowas eine Tabelle mit Port-Adresse und Pin-Maske
(sieht schräger aus, als es ist)
Code:
PORT_TAB:
   DATA    &H3B, 1     ' PORTA  Pin 0            virtuell 0
   DATA    &H3B, 2     ' PORTA  Pin 1            virtuell 1
   DATA    &H3B, 4     ' PORTA  Pin 2            virtuell 2
   DATA    &H3B, 8     ' PORTA  Pin 3            virtuell 3
   DATA    &H3B, 16     ' PORTA  Pin 4          virtuell 4
   DATA    &H3B, 32     ' PORTA  Pin 5          virtuell 5
   DATA    &H3B, 64     ' PORTA  Pin 6          virtuell 6
   DATA    &H3B, 128     ' PORTA  Pin 7        virtuell 7
   DATA    &H38, 128     ' PORTB  Pin 0        virtuell 8

   DATA    &H38, 128     ' Port B  Pin 7         virtuell 9
   DATA    &H38, 2         ' Pin 1                   virtuell 10
   DATA    &H38, 128     ' Pin 7                    virtuell 11

 u.s.w.
   DATA    &H35, 1     ' Port C  Pin 0         virtuell xxx

   DATA    &H32, 1     ' Port D  Pin 0         virtuell xxx
Code:
DIM  Portadr as byte
DIM  Portmsk as byte 
DIM  Tabv as word  at Portadr overlay
DIM  Temp as byte

          Temp =  datenspeicher(3)
          Tabv = lookup ( temp,  PORT_TAB)

' z.B.  einzelnes PortPin setzen (die anderen nicht anrühren):
          Temp = INP ( Portadr)               
          TEMP = TEMP OR Portmsk
          OUT ( Portadr, TEMP)               

' z.B.  einzelnes PortPin löschen (die anderen nicht anrühren):
          Temp = INP ( Portadr)               
          Portmsk = Portmsk XOR &HFF     
          TEMP = TEMP AND portmsk
          OUT ( Portadr, TEMP)