Make your own free website on

back : next : deutsch

The UQLX Sinclair QL Emulator for Linux

by Richard Zidlicky, re


The Redhat Package Manager is a very handy means to keeping track of different program versions and the many files a particular program collection might consist of. It also makes the orderly programs de-/installation an easy task.

Therefore I'd assemble the binaries and sources RPM packages for the UQLX. - Which are far from perfect, as this is my first attempt to producing such a (relocatible) package for public use. Thus:

I've tested the UQLX packages compiling, installing and the programs running in my systems (Suse/Caldera and Debian, kernel 2.2.10, i586 pc) and everything appears to working quite well. Nevertheless, if it produces buggy code or faulty structures anywhere else, pse give me a notice, such that I might find out what went wrong and produce another version - just a short notice about what when and why, I usually won`t need an elaborate "bug report".
Further, someone else contributing the spec-file data for other systems would be very welcome.

This is not another UQLX-version, the one and only authentic source of which is its author. The program can be found at his web-site:

I'd use RPM 2.5.5 which, for compiling, in turn requires a version of patch-2.5, or later.
Conflicts may arise when using older rpm versions as I found, for instance, version dependent differences in the doc-dir naming.

Current (Oct.1999) release based on the 99-10-01 version of UQLX.

It includes a few patches, which seem to be required for proper compilation due to to my own particular system configuration. Those patches can be left off and the program be re-compiled, after installation, then replacing the supplied binaries.

Some add-on's include:
(The latest versions of M89 and T6 can be found at the appropriate pages)


uqlx.i386.rpm (450K)

Pre-compiled binaries and a minimal set of QL programs to start with.

UQLX compiled using egcc 2.91, with glibc 2.0 (debian 2.1), linux 2.2.10, i586 and the uqlx preferences selected to primarily achieve best executional speed of the emulator.
Successfully run with the X window managers "fvwm" and most efficiently, with "WindowMaker" where it executes at up to about half the QXL timing and many operations even faster, under certain conditions, e.g. data transfer at host speed. - Mouse & P.I.F. interaction was very bad.

TCP/IP was dispensed with - I'd consider it, despite being not much of use in a Linux system, too much a security risk because of the "root" access rights which depending on it's mode of operation the UQLX would (or, seems to) require. Further, leaving it off was speeding up the UQLX. And, there is always the alternative of the user himself compiling a version to suit...

This package will install in the directory /usr/local/uqlx, where the installation prefix "/usr/local" can be overridden with the "--prefix" RPM install/upgrade option; for instance, installing to /opt/local/uqlx:

rpm -U --prefix /opt/local uqlx.1386.rpm

RPM installation in a Debian system might fail: "/bin/sh" was not found, due to whatever reason, when I tried the setup. If that is all what RPM regards "missing", the option "--nodeps" will help.

The files and directories are made accessible for the user root and the group users, only.

The documents, vi and emacs tagfiles, UQLX configuration defaults and the X-defaults go to the RPM configured documents destination directory, subdirectory "uqlx-{version-date}". The X-defaults (Xql, Xqlaw) will be copied to "/usr/X11/lib/X11/app-defaults", if that directory is present and those files are not in there, already - and left untouched when un-installing the program.
A few S.Basic extensions and program files go to the progs/mdv and progs/win directories or, will remain with the docs if other equally named files are already present.

If no "~/.uqlxrc" is found in the HOME directory the defaults will be copied there from the doc-dir, which also applies to the compiling configuration defaults, "~/.uqlx_cprefs".

The auxilary file ".uqlxdirs" should be left unchanged since it will be used by the UQLX package un-installing procedure (rpm -e uqlx, etc).

uqlx.src.rpm (300K)

This is how I use to install and (re-)compile the sources:

rpm -U uqlx.src.rpm

unpacking to the RPM sources directory, and, in the corresponding SPECS directory

rpm -ba uqlx-990303-1.spec

to recompiling and installing the programs, and producing the packages.

Integrity Ckeck

RPM invoked as

rpm --checksig uqlx.i386.rpm
rpm --checksig uqlx.src.rpm

if the files are not corrupted, somehow, tells:

{rpm-file}: size pgp md5 OK

Example ".uqlxrc"

SYSROM = minerva_rom  # other names will not be recognized
ROMDIR = /ql/romdir   # can be linked to where the ql files really are

RAMTOP=17000 # maximum of useable RAM := 16256K

# does not work:
# SER3=/dev/ttyI2
# SER4=/dev/ttyS1

PRINT=lpr -Praw
# depending on which printer filter used <ff> might be not be possible to 
# supress. if so, un-commenting the next line would reveal an alternative: ###SER1=/dev/lp0 # which could send some error messages to the calling xterm but, works! and, # further, does circumvent possible character translation problems (TRA, etc) CPU_HOG=0 FAST_START=1 REAL_WHITE=0 STRICT_LOCK=1 SIZE_1=640x400 SIZE_2=800x600 SIZE_3=1024x768 DEVICE = MDV1,~/.qm/prog/mdv1/ DEVICE = MDV2,~/.qm/prog/mdv2/ DEVICE = MDV3,~/.qm/prog/win1/ DEVICE = MDV4,~/.qm/prog/win2/ DEVICE = MDV5,~/.qm/prog/win3/ DEVICE = MDV8,~/.qm/prog/win4/ DEVICE = MDV6,~/.qm/prog/win5/ DEVICE = MDV7,~/.qm/prog/win6/ # DEVICE = MDV8,~/.qm/prog/ DEVICE = FLP1,~/.qm/prog/flp1/ DEVICE = FLP2,~/.qm/prog/flp2/ DEVICE = FLP3,~/.qm/prog/flp3/ DEVICE = FLP4,/flp1,qdos-fs DEVICE = FLP5,/flp1 DEVICE = FLP6,~/.qm/prog/qxw/d,qdos-fs DEVICE = FLP7,/cdrom DEVICE = FLP8,~/ # qxl win drives DEVICE = WIN1,/hda1-c/,qdos-fs DEVICE = WIN2,/hda2-f/,qdos-fs DEVICE = WIN3,/hda3-g/,qdos-fs DEVICE = WIN4,/hda1-c/q4/,qdos-fs DEVICE = WIN5,/hda1-c/q5/,qdos-fs DEVICE = WIN6,/hda1-c/q6/,qdos-fs DEVICE = WIN7,/hda1-c/q7/,qdos-fs DEVICE = WIN8,/hda1-c/q8/,qdos-fs DEVICE = RAM1,/tmp/.ram1-%x,clean DEVICE = RAM2,/tmp/.ram2-%x,clean # and, wasting much of valuable QL memory, but not a problem when in the UQLX,
# for those who'll never seem to learn how to use the zip compressing program:
DEVICE = RAM8,/tmp/.ram8-%x,clean

Example ".uqlx_cprefs"

## .uqlx_cprefs ##


            -DCPU=586 \
            -finline-functions \
-malign-loops=4 \
-malign-functions=4 \
-malign-jumps=4 \ -fexpensive-optimizations
# the "-malign"-s did result to a speed-up of up to about 25%! # mit BUILDFLAGS zusammengefuehrt BUILD_SPECIALFLAGS=-D__i586__ \ -DU_NODDOT \ -DNEWSERIAL \ -DNEWPTY \ -DUSE_IPC \ -DDO_GRAB \ -DSH_MEM \ -UIPDEV \ -DHPR_STYLE # "hpr_style" for capital letters of the additonal S.Basic words of UQLX
# "hpr_style" weil ich die manieristische groß/kleinschreiberei nicht mag LOCAL_DEFINES= # mit BUILD_SPEIALFLAGS zusammengefuehrt LOCAL_INCLUDES= # LOCAL_LIBPATH= # LOCAL_LINKFLAGS= # als LINKFLAGS uebernommen # UQLXDIR=/opt/uqlx

back : next : deutsch