Sorry for the delay, I wanted to have a look at this first before commenting.
Please don't waste too much time!! It's a total mess yet. I thought it was a bit further along. I rushed it out so more capable eyes can look over my shoulder. I have a "real" commit coming shortly.
I think this is the right approach and it fits with other units in PXL like the PXL.Boards.Soft unit (which implements software or bit banged SPI and UART etc) so adding a PXL.Boards.Mpsse to represent the FTDI devices as a GPIO seems correct.
I don't know if you'll need the TFTDISystemCore class in this case, it might make more sense to accept an instance of TCustomSystemCore if you need the timing routines it provides. That way those functions could come from any platform that has the required implementation.
Here has been my struggle: getting the correct class model determined. Looks like there needs to be a TFTDIvirtualClass --> TMPSSEvirtualClass ---> TMPSSE_SPI, TMPSSE_i2c, TMPSSE_etc... type of model. TFTDI does the basic initialization of the chip and establishes timing configuration settings. TMPSSE has a secondary initialization stage. This starts the mpsse engine itself vs the default operation (basic init of the FTDI chip). I want to have this modeled correctly to accommodate all the features of the chip in the future AND get a nice melding with the PXL library.
My idea to build directly into the PXL library (inside out) vs a TFTDIbase from scratch got me tied in knots.
As far as I understand the FTDI devices can actually represent lots of device types (GPIO, SPI, I2C etc) using this protocol so there is room for expansion once you get the concepts sorted out and working.
This is where I realized the model isn't feeling right for FTDI. It needs to branch earlier, from TCustomSystemCore forward with it's own TFTDIbase and TMPSSEbase virtual classes it appears. Also, I started the project in the Ultibo IDE which was a no no and only confused the issue with learning PXL. This uses the D2xx.dll so is strictly a normal Lazarus PXL library application. This little detail escaped me at first.
I have a lot of these issues sorted and am getting a good idea, I hope, of a solid strategy with the model.