Well, Betov's right - use an API... if you want this for Windows. I don't know *which* API to use, but I'm sure there is one (or more) that will let you send any bit pattern you want to LPT1. And then you've got lots of APIs to handle the GUI-building.
But... how old is your "old PC"? If it's old enough that Windows is slow and cranky on it, you might be better off to stick with dos, and write your own GUI - as "fancy" and as much (or little) "like Windows" as you want.
If your program is intended to be "dedicated" to that one machine. I'd stick with dos. If it's intended to be run by "other people", Windows is a bit more popular these days...
The dos emulation under Windows may be an option - if it works as expected. Have you got any "working code", under any OS?
The "subject" is "addressing memory"... For dos, real or emulated...
...
push ds
push byte 40h ; segment of BDA
pop ds
mov ax, [8]
pop ds
mov [LPT1base], ax
...
But that isn't going to work in a Windows program (where the GUI stuff is available), regardless of whether it's written with RosAsm or Nasm.
For "what API", ask Microsoft... or, what I'd do, is google "lpt1 windows" or some such, and follow the MS link - probably easier than searching MS for it. :)
The dos approach seems "more interesting" to me, and is probably more like what you did in the "good old days". This API programming is "almost like being in BASIC". :)
Best,
Frank