QLAY Code
Brought to you by:
nikadsoft
QLAY Sinclair QL emulator for Windows95, DOS and Linux
Version 0.90, 19990130
1. Copyrights
This program is freeware. You may do with it whatever you want for
personal use. Copyright Jan Venema.
Permission is granted to redistribute this program free of charge,
provided it is distributed in the full archive with unmodified contents.
No profit beyond the price of the media on which it is distributed is
made.
There are no warranties of any kind for this program. If you use this
program, you do so at your own risk. The author is not responsible for
any damages that might result from using this program.
The QL ROMs and PSION programs are (C) Amstrad Plc. Distribution and
use on a non-commercial basis is allowed.
2. Overview
QLAY exists in three versions: Windows95, MS-DOS and Linux. In a general
sense, they have the same features, options and use. Specific exceptions
are noted where applicable.
The idea behind QLAY is to fully support the Sinclair QL hardware.
All original I/O is emulated. There is no focus on adding emulation
for hardware extensions like floppy or hard drives, video cards etc.
One exception is made: Native File Access allows access to the files of
the applicable OS: Windows95, DOS or Linux. With these hardware components
emulated, all original QL/QDOS software can be executed on QLAY. Newer
OSes like SMS are thus supported as long as they run fine on the original
QL hardware.
QLAY emulates the hardware of a Sinclair QL with 128, 640k or upto
8 Mbyte of memory.
It works with all known boot ROMs and ToolkitII ROMs.
In this version the following is emulated:
- Microdrives as basic file I/O. Up to 8 can be used.
- NFA. Access to MS-DOS/Linux file system as WIN1_ till WIN8_.
- Various screen sizes are supported to display in QL mode 256 and
mode 512. Emulates: blank screen and 2nd screen bank (Alt Tab).
- Keyboard via IPC.
- International keyboards emulated: US, UK, GE, FR, IT.
- Mouse via memory mapped I/O.
- Emulation speed control and delay.
- IPC Beep sound emulation.
- Large memory: up to 8 Mbyte.
- Full MC68000 emulation, including *all* exceptions and trace.
- Place ROM cartridge files anywhere in memory.
3. Using QLAY
3.1 Requirements
- 386 CPU
- 4MB of memory.
- 4MB of harddrive space for program and additional swap space
depending on emulated memory size. Swap file is called C:\cwsdpmi.swp (DOS).
With 8MB or more memory no harddrive swapping needed with default
emulation memory size.
- supported operating systems:
* MS-DOS version, any of: DOS, Windows3.x, Windows95, OS/2, DOSEMU (linux)
* Linux version: Linux with svgalib.
* Windows95 version: Microsoft Windows-95[TM].
QLAY emulates comfortably and faster than the original QL on a
486/DX2-66MHz system with 16Mbyte memory.
3.2 Installation and use
Unzip the QLAY???.ZIP archive into a suitable directory.
To start use:
QLAY -rJS.ROM
After initializations the familiar Sinclair logo should appear.
Press F1 or F2 and off you go!
QLAY -h
Gives short help on other options. (Not on Windows95 version).
If you downloaded the PSION package:
QLAY -1quill.mdv -rJS.ROM
After initializations the QUILL text editor that came with the
original QL appears. Similar for abacus, easel and archive.
See section 3.3 for more options.
Special key combinations:
<CTRL> <ALT> <SHIFT> <X> End QL emulation. (Not on Windows95 version).
<CTRL> <ALT> <SHIFT> <L> Refresh screen (when switching between Windows
or OS/2 and QLAY DOS box).
<CTRL> <ALT> <SHIFT> <R> RESET, like pushbutton on right hand side of QL
The microdrive file format is based on what is created during a FORMAT
command. It support 254 sectors of 512 bytes: almost 128kbytes.
The native OS MDV files have to be exactly 174930 bytes long.
3.2.1 MS-DOS
QLAY can be used from within a DOS box in Windows3.x, Windows95, OS/2
or dosemu of Linux. Via a 'PIF' or 'Shortlink' it can be started directly
from the graphical interface. A sample 'dosemu.conf' file for Linux is
included.
In addition, QLAY can be run from DOS, when the PC is booted in DOS.
QLAY requires a DPMI server. Windows has that support built in.
Under DOS it requires the 'CWSDPMI.EXE' included in the zip archive.
3.2.2 Linux
QLAY must be started with 'root' privilege from a console window. 'svgalib'
must be installed.
3.2.3 Windows95
QLAYW is a true Windows95 implementation of QLAY. The QL emulation window
executes with a GUI on the Windows desktop.
Installation:
- Unzip the archive.
- Move 'rsxnt.dll' in your windows\system directory.
- Place 'qlayw.exe' in your qlay directory.
3.2.4 Window95 Configuration Dialog
Every time qlayw is started, a configuration dialog is shown. All options
of qlayw can be modified and/or saved.
The program can be started from the Windows95 desktop via a shortlink,
without any knowlegde about command line options or configuration files.
Push [OK] to start, using the changes made to the configuration.
Push [CANCEL] to start, ignoring any changes made in the dialog.
Push [SAVE] to save new configuration, and then start with new configuration.
All configuration information is stored in file 'qlay.rc'.
3.3 Command line options
All command line options can be placed in a configuration file: 'qlay.rc'.
Simply place each command line option on a separate line. QLAY will
use these settings at emulation start.
All program options are the same for Windows95, DOS and LINUX versions.
-d num
Various screen sizes are supported. Mode 1 gives best aspect ratio, but is
slower than other modes. Modes 6 and 7 emulate correct aspect ration via
a high resolution screen on high-performance PCs.
-o
Use the 'old' graphics driver. QLAY082 and up have new, faster drivers,
but not tested on different graphics cards. Old driver may be more stable.
-m num
Memory size can be chosen: 128k, 640k, or 1M up to 8 Mbyte.
Default is 640k. num=0: 128k, num=1: 1M, ..., num=8: 8M.
(QLAY082: option -s is not supported any longer)
-r file
Use 'file' as BOOTROM. Always loaded at address 0. As default QLAY will
use file 'JS.ROM'.
-l win1@directory1\qlay.dir
-l win2@directory7\qlay.dir
until
-l win8@directory8\qlay.dir
-l mdv1@directorya\file1.mdv
-l mdv2@directoryb\file2.mdv
until
-l mdv8@directoryh\file8.mdv
These will tell qlay which directory or file to use for emulation of a
WIN#_ or MDV#_ device. After the '@' any drive, directory and file can
be specified.
WIN: The file must be called 'qlay.dir'. It contains the ql directory.
Use the QLAYT support program to include files in 'qlay.dir'.
NFA.ROM (087 version) is needed to support WIN1_ till WIN8_.
MDV: The mdvfile must be in the specific QLAY MDV image file format.
Use the QLAYT support program to convert files to MDV format.
An 'R' directly after the '@' makes the mdvfile readonly.
Examples:
QLAY -l mdv1@d:\qlay\mdv\quill.mdv -rJS.ROM
All mdv1_ operations will be made to the native DOS file.
QLAY -l win2@d:\qlay\win2\qlay.dir -rJS.ROM
Files in directory d:\qlay\win2\ are accessed via WIN2_.
-c address@file
Expansion ROM files, like cartridges and I/O expansions, can be placed
flexibly in memory. For each ROM a separate '-c ...' is needed. The file
will be loaded, starting at specified (hex) address.
E.g.: toolkit and nfa: QLAY -r js.rom -c c000@toolkit.rom -c c0000@nfa.rom
ROMs are write protected. QDOS limititions apply to address range.
On a real QL the ROM cartridge port is mapped at c000.
-f speed
Emulation speed control. This controls after how many instructions the
QLAY internal 1msec 'tick' should occur. With this 'tick' QLAY emulates
all timing sensitive functions: 50Hz interrupt, mouse sensitivity, BEEP
sound generation, MDV and some internal housekeeping.
The default value is '-f 400'. This emulates the 50Hz interrupt rate
about right on a 486/DX2 66MHz machine. On faster machines a larger value
should be used. The effect is easily seen: watch the cursor flash rate
and compare that to a real QL.
The SuperBasic program 'ft_bas' helps finding the proper value for -f.
This option does not change the emulation speed, only the interrupt rate
is controlled.
NOTE: date and time are not affected. QLAY uses the PC's clock for those.
-w delay
Emulation delay. Makes QLAY emulate slower for e.g. a game that plays
too fast. The emulation gets slower with higher values of the -w
option. The default value is '-w 0' for undelayed emulation speed.
-M
Disable mouse emulation.
-A
Disable ALT key support (Windows95 only).
-L xx
xx = US, UK, GE, FR, or IT.
Emulates keyboard differences for the different languages. Supports
special character entry, for example accented letters, and symbols.
Not much tested yet.
(old style options, still supported, deprecated)
-1 mdvfile
-2 mdvfile
until
-8 mdvfile
Emulate a microdrive cartridge. Up to 8 are supported. The option number
refers to the drive number. An 'R' directly after the drive number makes
the mdvfile readonly. The mdvfile must be in the specific QLAY MDV image
file format. Use the QLAYT support program to convert files to MDV format.
Examples:
QLAY -1quill.mdv -rJS.ROM
All mdv1_ operations will be made to the native DOS file.
QLAY -1Rquill.mdv -2emptydsk.mdv -rJS.ROM
mdv1_ is write protected, mdv2_ can be written to.
3.4 NFA support
Native File Access is supported via a small ROMable piece of QL code in
file nfa.rom.
Start emulation with:
QLAY -r js.rom -c c000@nfa.rom [options]
The boot screen shows that NFA is now available.
Type 'dir win1_' to find MS-DOS/Linux files available via NFA.
Option '-l win...' allows access to upto 8 WIN_, see above.
When using a toolkit ROM or another ROM:
QLAY -r js.rom -c c000@toolkit.rom -c c0000@nfa.rom
For NFA to work properly a 'qlay.dir' file must be present. It must
contain a 64-byte QDOS file header for each MS-DOS/Linux file that needs
to be accessed in QLAY. The 'qlay.dir' file can be created and updated
with the 'qlayt' file conversion tool. See section 5.
The free/good sectors numbers refer to the directory file only. Per 8
files one sector is used.
In QLAY each WIN#_ only supports files in that same directory.
Upto 159 files. Error checking to be improved.
NFA supports one extra SuperBasic command: win_use.
To replace all FLP1_ or MDV1_ accesses with WIN1_ in existing programs:
'win_use flp', or 'win_use mdv'.
To get the WIN1_ device back : 'win_use'.
3.5 Mouse
QLAY can emulate a mouse for use with Pointer Environment. The mouse
driver must be present before emulation starts. If no mouse driver is
found mouse support is skipped. This should normally be no issue at all
when starting from Windows or OS/2.
The mouse is supported via memory mapped I/O.
Win95: press F12 to suppress the double mouse pointer, press F12 again
to get the Windows mouse pointer back.
4.1 Development
QLAY was developed using DJGPP, RSXNTDJ, Cygwin and Linux. All sources
available starting with release 0.90. Other OSs should be easily to
port to.
Not supported yet: NET_,FLP_.
Minimal tested support for: SER1_,SER2_ and PAR_.
You're encoraged to enhance QLAY and improve compatibility with the
original QL hardware.
4.2 QLAY, how does it work?
QLAY consists of 3 parts: 68000 emulation, QL hardware emulation and
interfaces to the native operation system (Windows95, DOS or Linux).
After initialization and command line option evaluation the 68000
emulation starts. It will read one instruction, decode and execute it.
Part of execution can be a read or write access to memory. If it is
an access to the QL I/O area starting at 0x18000, QLAY will execute
the necessary QL hardware emulation directly. E.g.: read a bit from
the IPC (8049). If that implies e.g: reading a keyrow, QLAY will execute
a keyboard request in the Windows95/DOS/Linux interfaces part.
After each executed 68000 instruction, QLAY will check whether there
is internal housekeeping to be done. This is when exceptions, interrupts,
and timing events like the 1msec tick are handled.
QLAY will then proceed with the next instruction according current value
in program counter.
QLAY does not patch any ROMs and does not access any of the QDOS system
variables directly. This way any program, PROM or even a complete
QDOS replacement (SMS?) can be executed by QLAY. As long as it assumes
the hardware, I/O and memory map of the original Sinclair QL.
4.3 QLAY, how fast is it?
Emulation speed depends on many factors. CPU performance has the biggest
impact, but also what QDOS needs: memory access to the emulated screen
is slower than normal memory access. Short loops in the 68000 code are
executed much faster than large code segments; this due to the level 1
and level 2 caches that the CPU of the PC has.
A simple SuperBasic benchmark (qsbb_bas) shows how many print, function
and string manipulation loops can be executed within 20 seconds.
Higher number is faster.
Native 68k
System/CPU print function string Configuration/Emulator
QL original 980 840 1100 128k, JS-ROM
SandyQL 1080 1040 1360 512k, Floppy, Par. Port
GoldCard 2580 4280 5680
Super GoldCard 5680 10260 13820
Amiga 68040/25 9480 16540 23000 AmigaQDOS (JS/3.24)
QXL-20 14300 27900 70640
Amiga 68060/50 10480 48750 73880 AmigaQdos 3.24 Beta (Blitter)
Emulated 68k
System/CPU print function string Configuration/Emulator
486/DX2-66 660 980 1300 QLAY081 -d2 (DOS)
486/DX2-66 1080 1360 1820 QLAY082 -d2 (DOS)
486/DX2-66 920 1440 1840 QLAY083 -d2 (Linux)
Amiga A1200 2500 1800 2000 QL emulator, with 68060/50MHz
Pentium/150 2360 3680 4960 QLAY082
PentiumPro/200 6000 8000 11000 QLAY082 -f2900
Pentium/200 5260 9340 12660 QLAYW087 size 1, 16k colors
Pentium/150 7120 10840 28120 QPC
5. Tools and manual
QLAY is supported by the QLAYT and QL-TOOLS-Q tools for file conversion.
5.1 QLAYT
QLAYT provides a set of tools and general support functions for the QL
emulator QLAY. The tools are needed because the QL and it's operating
system QDOS have some pecularities that do not match well with most
other Operating Systems. Most obvious difference is that QDOS files consist
of two parts: a header block and the actual data file. To allow transparent
access from the emulator program to the native file system it's needed
that the file header is stored separately.
The QLAYT program takes care of inserting or extracting files into/from
a directory file. It knows about datasize fields. And will import and
export files from other QDOS compatible systems and QLAY's MDV file format.
Read more about QLAYT in the manual file 'qlayt.man' in 'qlayt.zip'.
5.2 QL-TOOLS-Q
From other sources 'qltools' is available to convert files to/from floppy
format. 'qltoolsq' is a modified version of 'qltools' that allows to
copy all files from a QL floppy in a PC directory. The files can then
be used in QLAY directly.
Read more about QLTOOLS in the manual files in the 'qltoolsq.zip'.
5.3 QDOS introduction
An introduction in QDOS and SuperBasic can be found in file 'qdos.man'.
This file was take from the AMIGA QDOS emulator. It may be incomplete and
contains errors. Has anyone better information?
6. Credits
The QLAY M68000 emulation code is derived from UAE, an AMIGA emulator
done by Bernd Schmidt and many others.
QLTOOLSQ is derived from qltools, done by Giuseppe Zanetti and many others.
7. Revisions
7.1 Bugs
If QLAY fails, crashes or worse, there may be a hint in the 'qlay.log' file.
Some known bugs, or not yet implemented:
- win3_ .. win8_, mdv3_ .. mdv8_ not via Windows95 configuration dialog.
- Linux version not much tested yet.
- Linux qlay -d2 and -d3 is the same: 640x480.
- FLASH (mode 8) is not supported.
- MDV access may give 'bad medium'. Experiment with '-f' option.
- In some screen resolutions (-d) the power, mdv and win LED are invisible.
- Serial and parallel ports, unstable/untested (0.90)
Undocumented/untested/unstable development options:
-F100 : fake F1 during boot
-D : 68k debug mode
Key combinations Control/Alt/Shift:
C/A/S B : no screen refresh toggle
C/A/S D : dump memory to file 'qlay.dmp'
C/A/S R : RESET
7.2 History
090 Win95: F12 suppresses double mouse pointer
Free source code available
Italian keyboard: Alt Gr+ supports # and @.
089 Never released
088 International keyboard emulation: US, UK, GE, FR and IT.
087 Support WIN1_ till WIN8_ (via NFA.ROM 087)
WIN1_BOOT file recognized at start (via NFA.ROM 087)
Windows95 configuration setup dialog
RESET QL (C/A/S R or via menu in Windows95)
ALT key support for Windows95, optional
086 More Windows95 improvements
Basic mouse support in Windows95.
Dump all messages and errors to 'qlay.log'
Support SDATE/ADATE, repaired timezone bugs, Windows95 memory leaks
Support FLP_ access via qltoolsq 2.7q external program
085 Windows95 and Dos updates
Fixed emulation bug that made Archive 'edit' hang
Windows95: support any screen size and display mode
084 Windows95 alpha version
083 Linux version of QLAY and QLAYT
Linux: -d6 speed improvement
Linux: 2 new options in QLAYT
082 Improved 68k emulation: exceptions, speed
New grapics code
Rename added in NFA
More emulation memory, ROM file support
New tool: QLAYT to support all file conversions
Command line options in configuration file
Remove clock bug: QLAY now uses the local PC time of day
081 Repaired QL mode 4 on 16-color screens
Improved error messaging in 'qlay.log'
080 NFA
Mouse
BEEP
New key combinations for 'exit' and 'refresh'
F6-F10 emulate shift F1-F5, PgUp/Dn: alt enter, End: ctl space
Improved interrupt emulation
Emulation speed control
Better IPC emulation
077 Dual screen support
ROM write protection
New screen code. Mode 4 is wrong on 16 color screens now
Minerva ROM support
Scroll Lock key
076 Improved STOP instruction
075 Bug fixes to support tools
More screen modes on QLAY
070 First release
7.3 Current versions
qlayw 0.90c 19990130 Windows95
qlay 0.90c 19990130 MS-DOS
nfa.rom 0.90c 19990130 QLAY
qlayt 0.90c 19990130 MS-DOS
qltoolsq 2.7q 19980519 MS-DOS
qlay 0.83a 19970904 Linux
qlayt 0.83a 19970904 Linux
8. Info and updates
http://www.inter.nl.net/hcc/A.Jaw.Venema
A.Jaw.Venema@net.hcc.nl
Jan Venema