Turbo Pascal supported port array though: https://archive.org/details/bitsavers_borlandturVersion3.0Re...
Here is the first function of your example in TP3: procedure DataOut; begin while (Port[$f5] and 1) = 0 do; port[$f4] := Data; end,
Here is the first function of your example in TP3: procedure DataOut; begin while (Port[$f5] and 1) = 0 do; port[$f4] := Data; end,
Originally you had to write inline assembly.