For format details, start
here.
S19 is good for 64K address space, only. With the QE128, you still have 16-bit addresses, but you also have an 8-bit PPAGE. This extra byte can be viewed as the most significant byte of a 24-bit address, but not necessarily.
It all depends on your assembler or compiler output. If you compiler outputs S28 format (3-byte addresses), write a loader for that. If you only get S19 files, you'll have no choice but to break up your project into as many separately compiled modules as needed and load the resulting S19 files, the main one and at least one more for each of pages 4 thru 7, as needed.
S19 files, being pure ASCII, can be combined into a single file very easily, after compilation (e.g., COPY PAGE0.S19+PAGE3.S19+FILE4.S19 IMAGE.S19). With MAKE files, this is a write-once nuisance.
I have written a rather comprehensive bootloader and use its commands to switch pages as the file is loaded. But, there are other simpler schemes:
An assembly language example for the pages outside the default 64K range:
org PPAGE;should appear at the very top of the file (as it must be the first byte in the corresponding S19)
fcb PPAGE_FOR_THIS_MODULE
org PAGE_START ;all ppage'd modules will have the same start point.
<data and code for this module>
Very simple, very efficient.