Hi Koen.
The combined routines are finished and working

. Because it's longish, I haven't done a Basic assembler version so you just get the loadable object code and, for interest, the following assembler listing :
Code:
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\ 2 off SWR utilities for use with Quill \
\ running in a Master 128 \
\ \
\ (1) To call multiple SWR located utils \
\ (2) To retrieve and display SWR text messages \
\ \
\ V1.0 M.P.Barr 2008 \
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\------------------------------------------------------------------------------
\Notes
\Common :
\1. Non-relocatable, must be re-assembled if moved from $0B00
\2. Registers not preseved
\Utility Caller:
\1. Requires swr utility number as 1..n in Quill flag @ utilnum = $508
\2. Assumes all utils are max. 2 pages long (512 bytes)
\3. Call 'entry', NOT 'ustart' (entry = ustart + 6)
\Message Printer:
\2. Uses zero page $70-$72 (transient)
\3. On entry, message number = ?($500+(?50A))
\end of notes
\------------------------------------------------------------------------------
\Constants etc. for both utils defined here
qswrutils EQU $0B00 \locate in Fn key defs area
OSASCI EQU $FFE3 \print A to screen, $D -> $D,$A
utilnum EQU $0508 \utility number passed in Quill..
\..Flag $0508 (1..n)
uswrblk EQU 5 \swr bank number for utilities
qcharp EQU $050A \Quill character pointer
qcharb EQU $0500 \Quill character base address
messnum EQU $70 \message number determined at call
mloclo EQU $71 \absolute message address lo
mlochi EQU $72 \absolute message address hi
mswrblk EQU 4 \swr bank number for messages
romsoft EQU $F4 \software rom register
romhard EQU $FE30 \hardware rom register
basic EQU 12 \BASIC rom slot number
\end of constants
\------------------------------------------------------------------------------
ORG qswrutils \base addr for 2 consecutive utils
\------------------------------------------------------------------------------
\*** utilities caller ***
\*** don't call here! ***
ustart DFB $20 \'JSR' opcode
utilL DFB $00 \all utils on a page boundary
utilH DFB $80 \self-modifying util page number
JMP return \after calling util, graceful exit
\*** call here! ***
entry DEC utilnum \decrement util number to give 0,1,2..
BMI exit \illegal number, exit no action
LDA utilnum \prepare util address page number
ASL \512 bytes per util so util num x2
CLC \base address is $8000
ADC #$80 \$80, $82, $84 ... etc.
STA utilH \and set the util swr call address
\page BASIC out and SWR in
SEI \kill IRQ during rom switch
LDA #uswrblk \select utils swr bank
STA romsoft
STA romhard
CLI \restore IRQ
JMP ustart \and call the utility
return SEI \all done, reselect BASIC
LDA #basic \as swr select but rom = 12
STA romsoft
STA romhard
CLI
exit RTS \and return to Quill
\------------------------------------------------------------------------------
\*** message printer ***
\fetch and save message number
getnum LDY qcharp \get char number as index for fetch
LDA #>qcharb \message number base address lo
STA mloclo \save
LDA #<qcharb \message number base address hi
STA mlochi \save
LDA (mloclo),Y \fetch message number
STA messnum \and save
LDA #0 \initialise swr addr pointer to $8000
STA mloclo
LDA #$80
STA mlochi
\page in the message database swr
SEI \kill IRQ during rom switch
LDA #mswrblk \select message swr bank
STA romsoft
STA romhard
CLI \restore IRQ
seek LDY #0 \Y offsets to number (0) or length (1)
LDA (mloclo),Y \get this message number
BEQ found \if zero, end of messages
CMP messnum \else message we are after?
BEQ found \yes, goto print
INY \else wrong message, move to next..
LDA (mloclo),Y \..by fetching pointer to next
CLC
ADC mloclo \add pointer to base message address
STA mloclo
BCC seek
INC mlochi \with carry hi increment
BNE seek \and always loop for next
found INY \fetch pointer (equates to length + 2)
LDA (mloclo),Y
TAX \X = length + 2
DEX \adjust X to true length
DEX
show INY \inc Y to first/next chr
LDA (mloclo),Y \fetch a chr
JSR OSASCI \print
DEX \finished message?
BNE show \no, loop for next
SEI \all done, reselect BASIC
LDA #basic \as swr select but rom = 12
STA romsoft
STA romhard
CLI
RTS \and return to Quill
\------------------------------------------------------------------------------
\*** End of code ***
In case anyone's interested, I use the Lancs Assembler - I probably should be using Steve O's Swift but I guess I'm just a stuck-in-the-past luddite. Sorry Steve

A disc image is attached which contains the following files :
QCODE - The loadable object code which is located at $B00 as requested. The SWR utility handler is called at $0B06 (in Quill, MSB=11 LSB=6) and the number of the SWR utility to be called is passed in Flag $0508 and should be 1, 2, 3..etc.
The SWR message handler is called at $0B2B (MSB=11 LSB=43) to find and print the message number in ?($500 + (?$50A)) as discussed.
MESSAGE - A test message SWR image for location in Bank 4. This contains dummy messages 1 to 13 and of course 0.
UTILITY - A test utility SWR image for location in Bank 5. This contains 3 dummy utilities located at $8000, $8200 and $8400 which will simply print a 1, 2 or 3 and return.
QMESS - A short Basic demonstration program using the message printer.
QUTIL - A short Basic demonstration program using the utility handler.
If you are not able to produce SWR images for the message database or for the (relocated) utilities then let me know.
Have fun
Martin