The driver entry point that is called on a DosWrite/DosRead passes a physical address to read from/write to.
You need to call device driver helpers to convert a physical address to a virtual address. Or, for a 32-bit driver, to a linear address with the DS selector set to the flat selector.
By the way, the Gemini code is wrong. PhysToVirt maps from physical to virtual (16:16 pointer) and not to flat (0:32 pointer).
And it heavily phantasizes on what DevHelp calls are available. Seems there is not enough OS/2 code floating around...