|
Links:
Greg Holmes' page
Jean-Bernard
Emond's page: Manuals + Schematics + EPROM
Downloads:
click here
Screendumps:
click here
Fairlight CMI Series III/MFX software revisions (OS-9) overview:
click here
CMI Series I, II, IIx:
Operating system:
QASAR variant QDOS of Motorola's MDOS, running on
CPU P2. Series I/II machines have a dual-6800 system with 64KB shared
system RAM, whereas the Series IIx has a dual-6809 with 256KB shared
system RAM (up to 2MB) running a special QDOS-6809
version. (Note that the Series IIx is also capable of running OS-9,
see Series III below.) By default, CPU P1 runs a service request
loop in ROM. During cmi-software operation, CPU P1 is running a
real-time control executive for sampling, channel-card control,
sequencers and handles the music+Alpha-keyboard input data. CPU
P2 runs the operating system (CMIDOS.SY + CMI.SY) which is resonsible
for non-realtime tasks as file I/O and the graphical user-interface.
Note that P1 and P2 share the QASAR RAM and MMU.
Cmi software consists of two parts: a system-resident part (operating
system and shared cmi code) and dynamically loaded overlay parts
(display pages plus associated code).
For convenience and archiving purposes, the file LBFILE.SY contains
a user-maintainable database ("disk library") for up to
80 disks and the files contained on each disk (80 disk IDs and 80x128
encoded file-names).
(See Greg
Holmes' page for more infos.)
Note: The QASAR QDOS has nothing to do with 86-DOS,
which is often referred to as "QDOS" (or "Quick and
Dirty Operating System"), written by Tim Paterson for Intel
8086-based computers. Furthermore, QASAR QDOS has also nothing to
do with QDOS for the Sinclair QL (68008-based) computer system.
(click here for more infos about MDOS
and other operating systems)
By default, the optional SMIDI processor (68000, "MP",
CMI-28) runs a service request loop in ROM ("MON"). During
cmi software opertation, the SMIDI processor is running the mdmain68
(in MIDI.LO) SMPTE+MIDI real-time executive.
During cmi software operation, the optional AIC processor (6809,
CMI-07) is running the AIC09.LO executive.
Device drivers/low-level driver ROMs:
click here to go to the Series III
chapter
IOPACK:
click here to go to the Series III chapter
File
extensions:
click here to go to the Series
III chapter
User Software/Sequencers:
Keyboard Sequencer ("Page 9", .SQ timed MIDI-frame file
format)
Music Composition Language ("MCL", "Page C",
compiler with .SQ output)
Real-Time Composer ("Page R", 1980, 8-voice sequencer,
by Michael Carlos and Tom Stewart, infos:
Greg Holmes)
Film Music Processor ("FMP", timecode sequencer, for Series
IIx, see also Series III below)
STAVEWRITER (music printing system, for Series IIx with HP 7475A
plotter)
(See Greg
Holmes' page for more infos.)
QDOS
filesystem:
derived
from Motorola's MDOS filesystem, 512512 Bytes total per drive or
partition, fixed 128-Byte sector size, fixed 512-Byte cluster size,
8-Byte file size granularity, flat filesystem (no sub-directories),
place for up to 160 files in root directory
(see also OS-9 backup/conversion commands for QDOS below)
QDOS
file extensions:
2-letter file extensions, upper-case file names (8 letters max.)
click here to go to the Series
III chapter
QDOS 8" floppy format (Series I/II/IIx)
Drive: Mitsubishi M2896-63, Qume Q242, YE Data YD180
360rpm, single density (FM), soft sectored (1 index hole), 77 tracks/side,
26 sectors/track, 128 Bytes/sector, 500KBit/sec raw
single-sided -> total: 2002 sectors = 250.25KB formatted
double-sided -> total: 4004 sectors = 500.5KB formatted
Note:
There are two variants of the double-sided QDOS format: QDOS-6809
and QDOS-6800 ("old QDOS"), differing in the low-level sector-numbering
scheme for side 1 (which is handled by the low-level driver and is
transparent to the user as long as the device parameters are set appropriately).
For compatibility, Series IIx machines (running QDOS-6809) still employ
the (old) QDOS-6800 format for CMI sound-disks (with the system-disk
however having the new QDOS-6809 format).
QDOS Winchester drive format (Q077):
Drive: ???
QDOS parameters:
???
OS9 parameters:
7 heads, 219 tracks/head, 32 sectors/track, 256 Bytes/sector
total: 49056 sectors = 12264KB formatted
(OS9 devices: /wdv0, /wdv1)
QDOS-only
system:
bootstrap
in sector 0017, loads kernel via RIB in sector 0018
QDOS.SY (QDOS kernel, RIB at sector 0018)
QDOSOV0.SY (QDOS overlay: disk allocation)
QDOSOV1.SY (QDOS overlay: I/O and memory functions)
QDOSOV2.SY (QDOS overlay: I/O functions)
QDOSOV3.SY (QDOS overlay: file functions)
QDOSOV4.SY (QDOS overlay: file functions)
QDOSOV5.SY (QDOS overlay: chain file execution)
QDOSOV6.SY (QDOS overlay: shell (command interpreter))
QDOSER.SY (error messages)
typ. address space layout (CPU P2):
0000-007F: system variables
0080-00FF: bootstrap
0100-1FFF: QDOS system (kernel, overlays)
2000-3FFF: 8KB user program space
4000-7FFF: 16KB user program space
8000-BFFF: 16KB user program space or VRAM
CMI-6809
system:
bootstrap
in sector 0017, loads kernel via RIB in sector 0018
CMIDOS.SY (customized QDOS kernel, RIB in sector 0018)
CMI.SY (CMI system code, loaded by kernel)
CMIERR.SY (error messages)
PROVER0.SY (page R system overlay)
PROVER1.SY (page R system overlay)
PRGROM.SY (page R graphics bitmaps + code)
LBFILE.SY (disk library)
Note: CMIDOS.SY is a customized QDOS kernel, containing only the
necessary QDOS system services. CMI.SY is the cmi system software,
containing a proprietary multi-tasking system for CPU P2 with a
graphics/light pen user interface and real-time code for CPU P1.
(Although QDOS-6809 supports Q256 and Q096 systems, CMI.SY for the
CMI Series IIx runs only on Q256 hardware.)
typ. address space layout (CPU P2):
0000-BFFF: variable mapping (CMI system)
. 4000-7FFF: optionally mapped to CMI-07 RAM (AIC09)
. 8000-BFFF: optionally mapped to VRAM
C000-C7FF: RAM
C800-CFFF: RAM, for communication with CMI-28 (MIDI)
D000-DFFF: RAM
E000-E7FF: channel hardware
E800-EFFF: RAM
F000-FFFF: peripherals
typ.
address space layout (CPU P1):
0000-BFFF: variable mapping (CMI system)
. 4000-7FFF: optionally mapped to CMI-07 RAM (AIC09)
. 8000-BFFF: optionally mapped to VRAM
C000-C7FF: RAM
C800-CFFF: RAM, for communication with CMI-28 (MIDI)
D000-DFFF: TVT/TVT2
E000-E7FF: channel hardware
E800-EFFF: RAM
F000-FFFF: peripherals
CMI Series III, MFX1, MFX2:
Operating
system(s):
The dual-6809 QASAR has the overall control of the CMI system. CPU
P2 runs the OS-9/6809 Level 2 operating system with the graphical
user interface and the sequencers (RS, CAPS, TT, CL, PFTASK) as
real-time tasks. CPU P1 is used as a co-processor with its own operating
system and tasks.
The general interface processor (SMIDI, CMI-28) is responsible for
the system timing and real-time events, directly triggering the
CMI-31 channel cards. (The QASAR sequencers transmit/receive timed
MIDI events to/from the CMI-28's play/record queues (contained within
QASAR RAM). Here, the time-critical part is done by the CMI-28.)
Each CMI-31 channel card has an on-board 68B09 CPU for control of
the address/clock generators and the analog post-processing VCF/VCAs
of its two channels.
The waveform processor (CMI-33) (or waveform supervisor (CMI-41)
in later revisions) is responsible for waveform manipulation/loading/saving
and sampling. Furthermore, large parts of the MDR harddisk-recorder
software (including the GFX graphics library) are executed on the
CMI-41.
Inter-processor communication is based upon interrupts (IPIs) and
mailboxes (shared memory areas), whereas intra-processor inter-task
communication employs semaphores and shared memory techniques (offered
by the processors' operating systems).
1) QASAR version of Microware's OS-9/6809 Level 2
multitasking realtime operating system ("Fairlight OS9 Level
2"), running on CPU P2 (6809, Q209), using the virtual memory
paging hardware (MMU) on the system RAM boards (Q256/Q356). CPU
P2 runs the graphical user interface (cmi part) and the sequencers
(RS, CAPS, CL, TT, PFTASK) as tasks. (OS9 requests=SWI2, system
tick=1/16sec.) P2 ROM code bootstraps the system from disk. The
OS9 kernel is able to offer "clock tick" interrupts to
other processors (P1, MP, WP, WS) if required (normally, only the
JKERNEL on the WS has this feature enabled).
2) By default, CPU P1 (6809, Q209) runs a service request
loop in ROM (Q133). During OS9-only operation, P1 is running the
executive iop (providing ROM services and improved
text console I/O "IOPACK"). During cmi/mdr software operation,
P1 is running the P1Exec multi-tasking non-preemptive
kernel (contained within the p1task module) with various P1 tasks,
especially the IOPACK P1 task iopcmi (replacing iop). Communication
P2<->P1 is accomplished via the OS9 task p1task (i.e.
running on P2) and the communication P1 task P2Serve, which
are responsible for the p1exec startup/termination and creating/killing
of P1 tasks. (P1Exec requests=SWI2.) CPU P1 is used for the execution
of IOPACK commands (text console I/O) and especially for big parts
(non-realtime) of the sequencer software (RS/CAPS/CL/TT). Note that
P1 and P2 share the QASAR RAM and MMU. In Rev<=8, P1Exec
services channel card requests (CHINT, IRQ2 P1 interrupt), especially
setting the output router (ESP-RT1, in Rev8) and forwarding an IPI
to the WS/WP under dtm operation. In Rev>=9, P1Exec simply
forwards the channel card interrupt to WS CCINT (see below).
3a) By default, the waveform processor ("WP", CMI-33)
runs a service request loop in ROM ("KMON"). During cmi/dtm
software opertation, the waveform processor runs the wpexec68
waveform service request executive for non-realtime waveform manipulation,
loading, saving, sampling and general administration of waveform-memory.
Communication with wpexec68 is accomplished by the OS9 task
wptask.
3b) By default, the the waveform supervisor ("WS",
CMI-41) runs a service request loop in ROM ("KMON20").
During cmi/mdr software opertation, the waveform supervisor (CMI-41)
executes a multi-tasking system called JKERNEL (jker
module in jsys). J-modules (for J-tasks) are identical to OSK-modules,
but differ in the CRC since Rev8 (J: $000000 and OSK: $800fe3).
The JKERNEL was developed by Chris Johnston Walker in 1986. (JKERNEL
is not to be confused with the Java-based J-Kernel.)
The CMI-41 J-task wsexec plays the same role as the CMI-33
executive wpexec68 (non-realtime waveform manipulation, loading,
saving, sampling and general administration of waveform-memory).
Communication with wsexec is accomplished by the OS9 task
wstask. JKERNEL access to OS9 resources (esp. the OS9 filesystem)
is accomplished by wsst ("WS server task", OS9
task) and Server020 (J-task). On the other hand, OS9 requests
are serviced by Server09 (J-task). The WS SCSI/TSCSI driver
is implemented in KMON20 (no cmi/mdr running) or via the jscsi module
(in jsys, plus SCSI Deblock J-task in Rev>=9). The J-task
SCSI Driver (cmi/mdr running) acts on behalf of the QASAR
low-level driver for WS devices. For fast page changing, OS9 modules
can be kept in WS memory space, served by the wsm/wsm-file
J-tasks. Large parts of the MDR disk-recorder software (and the
GFX graphics library) run under the JKERNEL system. (JLIB library,
jker requests=trap 9, jscsi requests=trap 6/7/8/a, system tick=1/16sec.)
In Rev>=9, the CCINT WS interrupt (forwarded channel card
CHINT, see CPU P1 P1Exec above) and CC-Driver J-task
(cctask68 in older revisions) are used to service channel
card requests, esp. setting the output router (ESP-RT1) and metronome
click.
3c) As a software development system, there is also
a CMI version of OSK Level 1 ("OS-9/68K Level
1", no MMU) available for the waveform processor/waveform supervisor
(CMI-33: 68000, CMI-41: 68020+68881), using the QASAR as an I/O
processor and the waveform RAM as additional main memory. (Note:
OSK uses WRAM in "16-Bit mode", i.e. sets the "not-8-Bit"
line to 1 for compatibility reasons with old WRAM cards. For the
CMI-33 this gives 14MB. In the CMI-41 case, where the "not-8-Bit"
line is address line 24, this reduces OSK memory to the upper 16MB.
Nevertheless, an OSK program can access the unused lower 16MB directly
via pointers.) (OSK requests=trap 0.)
4) By default, the SMIDI processor (68000, "MP",
CMI-28) runs a service request loop in ROM ("KMON"). During
cmi/MDR software opertation, the SMIDI processor is running the
midi68 SMPTE+MIDI real-time executive. Communication
with midi68 is accomplished by the OS9 task mptask. The midi68
executive is the main real-time component of the CMI/MDR system
(MIDI, SMPTE, channel card events, sequencers, MDR time), directly
controlling/triggering the channel cards. Startup and communication
with OS9 via mptask. Sequencer communication (RS, CAPS, TT,
CL, PFTASK) is accomplished via separate play/record queue buffers
for each sequencer (2KB, in QASAR RAM). Events are in form of timed
MIDI frames (8 Bytes). Time measurement is based upon "time-unit"
values (1/48000 sec, for sub-frame timing resolution, independent
of frame-rate).
5) The channel cards processors (68B09, "CC", CMI-31)
run the real-time control executive ccprog / mdrccprog
/ dtmcc(rev2) / dtmwscc with the cmi
/ mdr / dtm / wsdtm software, respectively. Startup and communication
with OS9 via mptask, mdrtask and drtask, respectively.
Directly controlled from MP midi68, WS J-task CC-Driver
and WS CCINT handler. With MDR/DTM: Sample-clock locked to
MDR time (provided by midi68). Real-time clock ("tick")
from CMI-32 timer, triggering FIRQ (typ. 1msec) for envelope-timing.
6) The XDR sample card DSP (56001, ESP-348) runs proprietary
sampling/rate-conversion/scaling/routing code from ESP-348 ROM called
DSP348. Communication with WS via bi-directional serial
interface. (With Rev6 firmware, real-time digital sample-input scaling
and automatic 44.1k/48k conversion possible.)
7) The DSP96K (96002, ESP-96K) runs proprietary time-dilation/contraction
code: dsp96k.obj* modules. Communication with WS via
shared WRAM on ESP-96K by use of the mdrwsmain J-task, which
acts as a loader (transferring dsp96k.obj* modules to ESP-96K RAM)
and as a server for 96K-requests during waveform manipulation.
(click here for more infos about
OS-9 and other operating systems)
Fairlight
CMI Series III/MFX software revisions (OS-9):
Rev 3.?:
...
Rev 4.?:
Fairlight OS9 Level 2 - Version 4.23 - 7th July 1986
IOPACK v2.06
(Note: Stereo voice capability)
...
Rev 5.4:
???
(Note: Flanger, Mix, CL, DTM, optionally: CAPS)
...
Rev 6.03:
Fairlight OS9 Level2 - Version 5.14-fk - 26th October 1988
IOPACK v3.22
CMI IOPACK v3.20
(Note: last release for Waveform Processor CMI-33, CAPS)
...
Rev 7.30:
(Note: first release for Waveform Supervisor CMI-41)
...
Rev 8.30R:
FAIRLIGHT CMI/OS9 LEVEL 2 - VERSION 6.13:fkw 21st June 1989
IOPACK v5.00
JKERNEL V2.09, JSCSI V2.02, DEBUGGER V2.01
MFX Version 1.10 28 Oct 1988
(Note: XDR release, requires "software security boot floppy")
...
Rev 9.34:
FAIRLIGHT OS9 VERSION 6.39:fkw 29th April 1992
MULTI-MODE IOPACK v1.03
JKERNEL V9.34, JSCSI V6.01
MFX SOFTWARE VERSION 0.24
(Note: final MFX1 release)
...
Rev 10.19:
(Note: first MFX2 release)
...
Rev 11.39:
FAIRLIGHT OS9 VERSION 6.46:fkw 23rd March 1993
MULTI-MODE IOPACK v1.05
JKERNEL V11.32, JSCSI V7.00
MFX SOFTWARE VERSION 0.62
(Note: final MFX2 release)
...
Rev 12.?:
(Note: first MFX3 release, last release with CMI functionality)
...
Rev 13.?:
(Note: final MFX3 release, last release for Waveform Supervisor+QASAR)
...
Rev 14.?:
(Note: MFX3plus release, first release for Wave Executive)
...
Rev 15.?:
(Note: MFX3.48 release)
...
Fairlight OS-9/6809
Main directories:
/d0/CMDS
/d0/INFO
/d0/SYS
Note:
File names are case-insensitive (saved case-sensitive), but normally
directory names are all in upper-case letters by convention.
Partition
table (if hard disk):
(see special entries in LSN0 of /sc00)
/sc00/SYS/parttab
Secondary bootstrap (if hard disk):
(see special entries in LSN0 of /sc00)
/sc00/SYS/bootfile
= go2_9 for partition 9 (/d0=/k0)
= go2_1 for partition 1 (/d0=/c0)
contains module "GO"
Main modules ("Kernel"):
(see special entries in LSN0 of /d0)
/d0/SYS/bootfile
contains bootstrap module ("GO"), additional low-level
device drivers (loaded by GO, e.g. for CMI-41 SCSI), main modules
("kernel", "init", "sysgo", "clock",
"ioman", "ersw", "adsw"), file managers
("pipeman", "scf", "rbf"), device
drivers, device descriptors
(Note: in older revisions, the Q219's light-pen and the Q077 were
also supported as /lpen and /wdv..., respectively)
Kernel versions and boot partitions: "fk"=/f0 or /k000
Q777 SCSI, "fkw"=like "fk" but CMI-41 SCSI,
"c"=/c000
Shell:
/k0/CMDS/shell
contains modules "Shell", "goback", "goto",
"ifyes", "ifno", ...
Startup shell script:
/d0/SYS/startup
Additional modules ("Utilities"):
/d0/CMDS/utils_x (x=1,...,4)
(loaded by startup)
Session file:
/sc00/SYS/sessions
OS-9/6809 development system (Rev=x):
/c000/CMDS
/c000/CMDS/CMISYSx
/c000/CMDS/CMIUSERx
/c000/CMI
/c000/DEFS
/c000/DEFS/CMI
/c000/EDITOR
/c000/INFO
/c000/L2V2
/c000/LIB
/c000/LIB/CMI
/c000/MAN
/c000/SYS
/c000/TEMP
OS-9/68K (OSK) development system:
/k0/CMDS/osk (6809 OS9 task)
/c001/OSK/oskboot_c1 (CMI-33 OS-9/68000 kernel)
/c001/OSK/oskbt20_c1 (CMI-41 OS-9/68020 kernel)
/c001/SYS
/c001/CMDS
/c001/DEFS
/c001/LIB
/c001/startup
JKERNEL (CMI-41):
/d0/CMDS/wsst (WS server task, running on 6809)
/d0/CMDS/jsys (jkernel + jscsi, see CMI-41 below)
/d0/CMDS/CMISYSx
/d0/CMDS/CMISYSx/JPROGS
device aliases (see also OS9 command "adevice"):
Rev. 11.39:
/c0 -> /c000
/c1 -> /c001
/cmif -> /c0
/k0 -> /k000
/k1 -> /k001
/k2 -> /k002
/k3 -> /k003
/d0 -> /k0 (or /c0, or /f0 if booted from floppy)
/d1 -> /k1
/d2 -> /k2
/d3 -> /k3
/tape -> /sc10 (first tape drive)
/xtape -> /sc50 (second tape drive)
/w0 -> /sc30 (WORM drive)
/p1 -> /p1_19k2 (first printer)
/wsp1 -> /p1_19k2ws (wsacia driver (uses WS) instead of sacia)
/p2 -> /p2_9k6 (second printer, not available for printing with
MFX)
/mfx -> /p2_19k2 (MFX keyboard)
/term -> /term_9k6
/comms -> /comms_9k6
Rev. 9.34:
/c0 -> /c000
/c1 -> /c001
/cmif -> /c0
/k0 -> /k000
/k1 -> /k001
/k2 -> /k002
/k3 -> /k003
/d0 -> /k0 (or /c0, or /f0 if booted from floppy)
/d1 -> /k1
/d2 -> /k2
/tape -> /sc10 (first tape drive)
/xtape -> /sc50 (second tape drive)
/w0 -> /sc30 (WORM drive)
/p1 -> /p1_9k6 (first printer)
/p2 -> /p2_9k6 (second printer)
/mfx -> /p2_19k2 (MFX keyboard)
/term -> /term_9k6
/comms -> /comms_9k6
Rev8.30R:
/lazer -> /p1_9k6 (first printer)
Rev. 6.03:
/u0 -> /c000
/u1 -> /c200
/u2 -> /c300
/u3 -> /c400
/u4 -> /c500
/u5 -> /c600
/w0 -> /sc30
/w1 -> /sc40
/w2 -> /sc50
/w3 -> /sc60
/w4 -> /sc70
...
QASAR
Device drivers:
The device drivers for hard disks and floppy drives are splitted into
two parts: OS-9 driver module or QDOS driver (containing the controller
address and device parameters) and the low-level device driver (with
OS-independent standard call table interface). With Series IIx/III,
the low-level driver is contained within ROMs on the controller cards,
loaded by the Q133 (typically via loader code contained in the same
ROM, loader magic Byte=0x2112) at boot time before OS-9 (or QDOS)
is started. The OS-9 secondary bootstrap ("GO") can load
additional low-level drivers before the kernel module is started.
All low-level drivers are linked into a list (head pointer in $FE69).
Note on Q133 firmware:
* MRK17 loads/supports the QFC9 and the WS SCSI+TurboSCSI, command
input for the KMON20 Rev8.05 diagnostics mode and color graphics cards.
* MRK10 loads/supports the Q077, Q777, QFC9 and WS SCSI+TurboSCSI.
Low-level device drivers:
QFC2 (Floppy):
The 6800 driver code is contained in Q032 ROM.
Q077 (winchester DMA), Q777 (SCSI), QFC9 (Floppy and "Mini-Floppy"):
The 6809 driver code is contained in ROM on controller card, loaded
via DMA into RAM intiated by F8L ROM (Q133) at boot time, then boot
via F8L ROM with help of this driver.
CMI-41 (WS SCSI on-board, TurboSCSI with extra card):
low-level driver in two parts: The 68020 driver (which listens to
the $FDE0 mailbox) is contained in CMI-41 KMON20 ROM, the 6809 driver
(which uses the $FDE0 mailbox) is contained in CMI-41 KMON20 ROM.
The 6809 driver is loaded via KMON20 (LDRV or BOOT command) into QASAR
RAM, initiated by F8L ROM (Q133), then boot via F8L ROM with help
of this driver. After JKERNEL startup, the 68020 driver part from
the KMON20 is replaced by a J-task "SCSI driver". (KMON20
Rev8.05 and JKERNEL Rev>=9 support SCSI drives with 256-8192 Byte
sector size via translation to 256 Byte blocks for OS9.)
Device types:
01: QFC9 Floppy
03: QFC9 "Mini-Floppy" revision
81: Q077 Winchester DMA
82: Q777 SCSI
88: WS: WS-SCSI, TurboSCSI, RAM-disk, /wsmem
JKERNEL SCSI driver:
The CMI-41 JKERNEL system and its J-tasks access WS SCSI and TurboSCSI
drives directly, independent of the QASAR OS9 system. Access to SCSI
drives from multiple J-tasks running within the JKERNEL system is
coordinated via JKERNEL traps and semaphores ("jscsi" module,
plus "SCSI-Deblock" J-task for Rev>=9). From this point
of view, the J-task "SCSI driver" acts on behalf of the
QASAR OS9 system. Further communication mechanisms between OS9 and
JKERNEL ensure the integrity of the drives' filesystems for shared
file access (Server020 J-task and wsst OS9-task).
Large parts of the JKERNEL SCSI driver were written by Chris Alfred.
IOPACK:
IOPACK is an AMPEX DIALOGUE 80 series Video Display Terminal emulator
on the video graphics console (OS9 device /video) for enhanced text
display functions (see also OS9 INFO/iopack). The "multi-mode"
versions of IOPACK also support the color graphics cards (type C/D).
The QASAR provides three terminal outputs: video graphics console,
TVT, and TVT2. The QASAR ROM (e.g. Q9F0 + F8L) contains default console
I/O functions (e.g. OUTCH) and character bitmaps (for the video graphics
console), which are used under firmware operation (e.g., monitor and
booting) and QDOS. OS9 tasks (running on CPU P2) can write to the
video,TVT,TVT2 screens via the OS9-devices /video,/tvt,/tvt2 respectively.
Once IOPACK is running, the CPU P2 ROM functions + bitmaps and the
CPU P1 service handler are bypassed/replaced by more sophisticated
IOPACK routines.
TVT/TVT2 output:
CPU P1 handles the output to the TVT/TVT2 for the QASAR subsystem
(note that CPU P2 cannot access the TVT/TVT2). In addition, any DMA
on a P1 timeslot can access the TVT/TVT2 directly, as done for debugging
purposes from midi68 (CMI-28), wpexec68 (CMI-33), and JKERNEL (CMI-41).
Under IOPACK operation (QDOS and OS9), the IOPACK P1 functions for
TVT/TVT2 simply branch to the default QASAR ROM P1 functions.
Case 1: QDOS:
QDOS (running on CPU P2) calls OUTCH (with TOFLAG!=0), which in turn
contacts CPU P1 running IOPACK. (For a Q256 system, IOPACK runs in
the "temp.task" hardware map.)
Case 2: OS9:
An OS9 task (running on CPU P2) uses the OS9 devices /tvt,/tvt2, which
in turn are serviced by CPU P1 running IOPACK.
Video graphics output:
Case 0: QASAR ROM, no IOPACK:
With the CMI QASAR systems (ROMID C and K), CPU P1 does not access
the graphics card VRAM under QASAR ROM operation. (Note that on non-CMI
QASAR systems (with ROMID Q,L,V), in contrast, CPU P1 handles the
VRAM.) In Q096 systems, this is even inhibited by hardware. In Q256
systems, however, CPU P1 may optionally access the VRAM. In any case,
only CPU P2 makes use of the video graphics console under QASAR ROM
operation without IOPACK.
Case 1: QDOS:
The video graphics console part of QDOS IOPACK runs on CPU P2, which
can access the VRAM via map switching (Q096: map A=QDOS/map B=IOPACK,
Q256: "P2 sys.task"=QDOS/"temp.task"=IOPACK).
For this case, the QASAR ROM function OUTCH contains a bypass location
(fe05) which branches to an P2 IOPACK routine such that QDOS (also
runing on CPU P2) still can use OUTCH (with TOFLAG==0) transparently.
(For a Q256 system, P2 OUTCH and IOPACK run in the "temp.task"
hardware map.)
Case 2: OS9:
The OS9 IOPACK completely runs on CPU P1, which may temporarily access
the VRAM for this purpose (note that OS9 requires a Q256 system where
P1 may access the VRAM). An OS9 task (running on CPU P2) uses the
OS9 device /video, which in turn is serviced by CPU P1 running IOPACK.
Note: Under cmi software operation (QDOS and OS9), the graphical user
interface always runs on CPU P2, independent of IOPACK. As a special
case, the OS9 IOPACK for CMI (iopcmi P1 task) is responsible for the
shell mode only (reachable via "$") and emulates the OS9-only
IOPACK (iop).
Keyboard input:
Case 0: QASAR ROM:
The default CPU P1 service handler, which is provided by the QASAR
ROM, is also responsible for processing the SACIA keyboard input (multiplexed
alpha-keyboard, music-keyboard, and graphics pad/mouse).
Case 1: QDOS:
Under QDOS, with or without IOPACK, CPU P1 is responsible for processing
the keyboard input. (In particular with CMI software, CPU P1 handles
real-time music events from the music-keyboard and also real-time
sequencer operation plus channel card control. Optionally with CMI
Series IIx machines, additional music event I/O is implemented via
MIDI on the CMI-28.)
Case 2: OS9:
Under OS9, keyboard input is processed by the sacia OS9 device driver,
which is running on CPU P2. That is, the CPU P1 keyboard input routines
are deactivated once OS9 is running. (In particular with CMI software,
the iprehd OS9 device driver handles graphics pad/mouse code on the
keyboard input. An OS9 system on a CMI Series III machine does not
have a music-keyboard attached to the SACIA input. Here, music real-time
event I/O and sequencer operation is implemented via MIDI on the CMI-28.
Then, CPU P1 no longer has these real-time responsibilities.)
QDOS files:
QIOPACK.CM (contains the P1 service executive and P2 bypass code)
OS9 Files:
/d0/SYS/iop (P1 executive, especially new character bitmaps)
/d0/CMDS/iopack (iop loader, called by startup)
/d0/CMDS/killio
/d0/CMDS/display
/k2/CMDS/CMISYSx/iopcmi (P1 task, replacing iop under CMI operation)
OS-9
filesystem: (also look for general OS-9 infos here)
Also called RBF ("Random Block File") filesystem.
Fixed 256-Byte sector size. Due to the 24-Bit implementation of sector
numbers and the fixed 256-Byte sector size in OS-9 Level 2: max. 4GB
disk size ($FFFFFF sectors). With larger disks, only the lower 4GB
are accessible.
KMON20 Rev8.05 and JKERNEL Rev>=9 support WS-SCSI and TurboSCSI
drives with 256-8192 Byte disk-sector size, which are translated to
256 Byte blocks for QASAR OS-9 requests (see low-level device driver
chapter above).
MDR-DOS filesystem:
Software Rev10+11+12 (MFX2 and MFX3) use the MDR-DOS filesystem for
MDR-related files (.MT and .MK) in parallel to the OS9 filesystem
for the system-software and cmi-related files. Note that MFX1 (software
Rev9) uses the OS9 filesystem for MDR files, though. MDR-DOS can reside
in any partition (compatible to OS9 partitioning scheme) with a maximum
partition size of 4GB. Fixed 256-Byte block size for disk allocation
(WS-SCSI and TurboSCSI drives with 256-8192 Byte sector size). It
has a flat filesystem (no directories except root). By default, the
root directory has a size of 1MByte, containing place for 102 files
(with each file-entry using $2800 Bytes). The default cluster size
is 4096 sectors (i.e. 1MByte). This filesystem is intended for large
files with high transfer-rate requirements. An MDR-DOS partition can
be recognized by an entry of 0000 in the OS9 dd_map field of LSN0
(Bitmap size).
Note that MDR-DOS is implemented only within the JKERNEL and unknown
to OS9. (On the other hand, access from the JKERNEL system to the
OS9 filesystem and devices is accomplished with help of the OS9-task
wsst and J-task Server-020.)
MDR-DOS was written by Chris Alfred.
See MDR below for more. (See also OS-9 commands "mdrinit"
and "diskpart".)
FLFS (Fairlight Filesystem):
Used in software Rev.14 (MFX3plus) and upwards to handle disk
drives with up to 200GB. However, the maximum file size is limited
to 4GB. The boot device of the system must be in the OS-9 RBF format.
SCSI
device and partition naming:
Devices attached to the boot SCSI controller are called /scxy, /cxyz,
/kxyz (with x=SCSI ID, y=SCSI LUN, z=partition).
In principle, the CMI Series III can boot from the following devices
(apart from a floppy):
* Q777 SCSI drive
* WS-SCSI (CMI-41) SCSI drive
* TurboSCSI SCSI drive
* WS (CMI-41) RAM disk (loaded via KMON20 from tape e.g.)
If booted from WS-SCSI or TurboSCSI, the Q777 devices appear as /qscxy,
/qcxyz, /qkxyz and the RAM disk as /ram, /rcxyz, /rxyz, respectively.
If booted from WS-SCSI, the TurboSCSI drives are /sbxy, /bxyz, /jxyz.
If booted from TurboSCSI, the WS-SCSI drives are /sbxy, /bxyz, /jxyz.
Under MDR (see below), /scxy (i.e. boot controller) drives have SCSI
IDs 0,...,7 and /sbxy have "artificial" SCSI IDs 8,...,15.
On a Rev<=6 system with WS installed (untypical): If booted from
Q777, the WS-SCSI devices appear as /wscxy, /wcxyz, /wkxyz.
SCSI disk partition naming (/q..., /sb..., /r... analogous):
/scxy: x = SCSI ID, y = LUN
/cxyz: x = SCSI ID, y = LUN, z = partition number - 1 (0,...,7)
/kxyz: x = SCSI ID, y = LUN, z = partition number - 9 (0,...,7)
partition table file (/sc00/SYS/parttab) format:
partition x has entry of 16 Bytes starting at offset 0x10*(x-1):
xx ss ss ss nn nn nn 00 ... 00
xx = partition number (1,...)
ssssss = partition start sector
nnnnnn = partition size in sectors
unused partitions correspond to 16 Bytes of 0
OS9 LSN0
(sector 0) layout of disk/partition
bootstrap entry in LSN0:
at 0x0015: ss ss ss nn nn
ssssss = (DD_BT) start sector of SYS/bootfile (must be contigous)
nnnn = (DD_BSZ) size of bootfile in sectors
partition table entry in LSN0 (if hard disk):
at 0x0070: ss ss ss nn 00 00 qq qq qq mm mm
ssssss = start sector of SYS/parttab (must be contigous)
nn = number of entries in parttab
qqqqqq = start sector of QDOS partitions
mmmm = number of QDOS partitions
Note: /k-partitions (>=9) have 4300x256Bytes, QDOS
partitions have 4004x128Bytes, exactly the size of the corresponding
floppies.
SCSI hard disks:
With older revisions (esp. Q777), 256-Byte sector (=block) size required
for the SCSI disk (see SCSI "mode select" command and low-level
formatting, see OS9: "scsiformat -b=256 /sc00", normally
a lot of older full height 5.25" SCSI disks allow such re-formatting,
see also ESDI to SCSI Emulex MD21 board for two ESDI disks as two
SCSI LUNs: info).
KMON20 Rev8.05 and JKERNEL Rev>=9 support WS-SCSI and TurboSCSI
drives with 256-8192 Byte sector size via translation to 256 Byte
blocks.
(With standard CMI/MDR software, IOMEGA ZIP drives and CD-ROM drives
are not supported. However, certain streamer-tape drives (see below)
and certain MO-type drives are supported.)
typ. CMI SCSI devices:
/sc00: hard disk 0 (boot disk, internal)
/sc10: tape 0 (=/TAPE, internal)
/sc20: hard disk 1
/sc30: WORM 0 (=/w0)
/sc40: hard disk 2
/sc50: tape 1 (=/XTAPE)
/sc60: hard disk 3
typ. disk partitioning (some OS9 tools: "diskinit",
"mdrinit", "diskpart", "cmipart", "partgen",
"bootgen", "pback", "wscat", "dd"):
/sc00
(actually, this is the whole disk and the LSN0 size entry must contain
the full disk size, but first sectors contain small filesystem "master"):
256 sectors, 1 sector/cluster, contains partition table ("SYS/parttab"),
secondary bootstrap "SYS/bootfile" to partition 9 or 1
/k000
(partition 9, filesystem "OS9"): 4300 sectors, 1 sector/cluster,
contains floppy CMI_OS9_K0
/k001
(partition 10, filesystem "cmiuser"): 4300 sectors, 1 sector/cluster,
contains floppy CMI_USER_K1
/k002
(partition 11, filesystem "cmisys"): 4300 sectors, 1 sector/cluster,
contains floppy CMI_SYSTEM_K2
/k003
(partition 12, filesystem "mdr"): 4300 sectors, 1 sector/cluster,
contains floppy CMI_MDR_K3
/c000
(partition 1, filesystem "cmi"): rest, typ. 16 sectors/cluster,
contains CMIFILES/FAIRLIGHT (and fast page change file "cmixfast"
for Revx)
How to install the CMI system software from scratch
Warning: This procedure erases all data on the disk!!! Use
low-level formatting with care!!! Use at your own risk!!!
Notes:
SCSI disk must be low-level formattable to 256-Byte sector size for
use with older firmware. Max. $FFFFFF blocks (=4GB) accessible, even
on disks >4GB. Boot from floppy labeled CMI_OS9_K0 and exit to
OS9 shell. Load diskinit and pback. go2_9 is the bootsector (bootstrap
to partiton 9=/k0), contained on floppy CMI_OS9_K0. After creation
of filesystems, normal update procedure also possible. (diskinit v2.00
seems to have a "sign-bug", allowing only for partitions
<2GB.) In Rev11, the all-in-one utility "diskpart" can
be used instead (Note: diskpart should not be used to format /sbxy
drives i.e. on the secondary SCSI controller!).
Format
+ Bootblock:
scsiformat -b=256 /sc00 (for SCSI disk 0, 256B only necessary for
Rev<9)
diskinit /sc00 -xqs "-n=master" -a=256 -c=1 d (where
d=total disk size in sectors)
bootgen /sc00 /f0/cmds/go2_9
Partitions + Filesystems:
cmipart /sc00 -k=4 -q=4 -w=5 ! partgen /sc00 -qw
diskinit /k0 -rqs 4300 "-n=CMIOS9" -c=1
diskinit /k1 -rqs 4300 "-n=CMIUSER" -c=1
diskinit /k2 -rqs 4300 "-n=CMISYS" -c=1
diskinit /k3 -rqs 4300 "-n=CMIMDR" -c=1 (for Rev11)
diskinit /c0 -rzqs "-n=USER_DISK" -c=16 (cluster size here
typically 16, 32, 64)
Software: (alternative: reboot floppy CMI_OS9_K0
and run update)
makdir /c0/CMIFILES
makdir /c0/CMIFILES/FAIRLIGHT
pback /f0 /k0 (with floppy CMI_OS9_K0)
pback /f0 /k1 (with floppy CMI_USER_K1)
pback /f0 /k2 (with floppy CMI_SYS_K2)
pback /f0 /k3 (with floppy CMI_MDR_K3, for Rev11)
wscat /k1 >= /c0/cmixfast (where x=CMI version)
(wscat /k1 /k3/CMDS/CMIUSER9 >= /c0/cmi11fast (for Rev11))
copy /k0/sys/mdr_devices /sc00/sys/mdr_devices
OS9 8" floppy format:
Drive: Mitsubishi M2896-63, Qume Q242, YE Data YD180
360rpm, double sided, double density (MFM), soft sectored (1 index
hole),
77 tracks/side, 28(16) sectors/track, 256 Bytes/sector, 500KBit/sec
raw
track 0, side 0: 16 sectors/track, FM (SD)
track 0, side 1: 28 sectors/track, MFM (DD)
track 1, side 0 ... track 76, side1: 28 sectors/track, MFM (DD)
total: 4300 sectors = 1075KB formatted
QFC9 EPROM revisions:
DQFC910: for 8" drives (access selection via "HEAD LOAD")
adapter for 3-mode 3.5" floppy drive to QFC9 controller:
Older 3.5" floppy drives allow for a 360rpm mode via the DENSITY
select line.
(Note that the standard PC 360rpm format provides 1.2MB formatted
DS/HD with 78 tracks/side, 16 sectors/track, 512 Bytes/sector MFM.
But since the raw data rate of 500kBit/sec, the 360rpm and 77<78
tracks are suitable, it is possible to use such a 3.5" floppy
drive with the QFC9.)
The only problem is the correct handling of the QFC9's HEAD LOAD(out),
DS1,...,DS4(out), READY(in) lines and the 3.5" floppy's MOT0,MOT1(in),
DS0,DS1(in) lines. (See also QFC9 description above.)
Note: Floppy drives with 300rpm (1.44MB mode) also seem to work (but
not recommended).
OS9 "Mini-Floppy" format (MFX1, MFX2):
Drive: TEAC FD-235HG (3.5")
OS9 devices /m0, /m1:
77 tracks/side
total: 4300 sectors = 1075KB formatted
OS9 devices /mh0, /mh1:
80 tracks/side
total: 4468 sectors = 1117KB formatted
(Other parameters see 8" floppy above.)
QFC9 EPROM revisions:
DQFC911: for 3.5"/5.25" "Mini-Floppy" drives (access
selection via "DS")
SCSI QIC tape drives:
Tape media:
9-track QIC-24 tape media format, 60MB on DC600A tape
SCSI tape drives:
Archive Corporation 5945S-1 (tape drive with QIC-36 interface
+ extra QIC-36-to-SCSI Emulex MT02 formatter board, 5.25" FH,
info,
MT02
info, MT02
error codes, Note: 5945C is the pure HH tape drive with QIC-36
interface but w/o formatter board, 5945L-x is the same tape drive
but with QIC-36-to-QIC-02 formatter board)
Archive Corporation 2060S (tape drive with SCSI interface,
5.25" HH, Note: 2060L is same tape drive but with QIC-02 interface)
QIC standards:
standards,
info,
info
Interface standards:
QIC-36 basic
interface
QIC-02 intelligent interface
Tape media standards: (Verbatim
QIC tapes)
QIC-11 (4/9-track, 27/60MB DC600A)
QIC-24 (9-track, 60MB DC600A)
QIC-120 (15-track, 125MB DC6150)
QIC-150 (18-track, 150MB DC6150, 250MB DC6250)
QIC-525 (26-track, 525MB DC6525)
QIC-1000 (30-track, 1010MB DC9100)
OS9 Backup/Conversion utilities:
Disk:
copy
copy020 (uses CMI-41 PRAM, approx. 6 times faster than copy)
tcopy
trecpy
tredel
pback
TAPE:
backup, restore (harddisk partition backup utilities)
dirtape, totape, fromtape (file backup utility,.tp description files)
tp_dir, tp_put, tp_get (ancestor of dirtape/totape/fromtape)
devices: Archive Corporation 5945S-1 or 2060S (QIC-24 Media, SCSI,
60MB on DC600A tape)
WORM:
wdir
wfree
winit
wput
wget
warc
fromworm, toworm
cache directory: /c000/WCACHE
devices: Matsushita LF-5010, Maxtor RXT-800
QDOS floppy:
qdosdir, toq, fromq
bs128, bs256 (select floppy sector size, requires attach/detach)
K.M.I. floppy-image utilities: qget, qput, qformat
Multi-floppy file backup:
vsave, vrec
Conversion utilities (Series IIx -> III):
r23
r2r3
r923
s3m
v23
Screen
dumps:
This saves/restores the contents of the 16KB video RAM, typically
"_px" file name extension (e.g. the startup logo /k2/CMDS/CMISYSx/logo_px):
scrdump <file> (with "cmirun" or from within cmi via
"run")
vfork scrfill <file>; sleep
(Note: vfork creates a process with video RAM access, sleep can be
terminated by <ctrl-q>)
In
turn, "_px"-files can be printed by use of the "sd"
OS9-utility.
CMI
Series III software (for x=Rev):
main directories:
/k0/CMDS
/k1/CMDS/CMIUSERx
/k2/CMDS/CMISYSx
/D3/CMDS
/D3/CMDS/CMIUSER9
/D3/CMDS/CMISYS9
/c000
/c000/CMIFILES (for libraries)
/c000/CMIFILES/FAIRLIGHT (Fairlight library)
/c000/WCACHE (for WORM)
general
configuration files:
/k0/SYS/cmix_cfg (system configuration, read by cmix)
/k0/SYS/jsys_cfg (jkernel configuration, read by jsys)
/k1/CMDS/CMIUSERx/DIR/defaults.dir (last directory settings, read
by dir_pg)
/k2/CMDS/CMISYSx/cmi_pages (display pages, read by in_init)
/k2/CMDS/CMISYSx/defaults.mp (default patch, read by midi68)
/k2/CMDS/CMISYSx/logo_px (startup logo)
/k0/SYS/picture (startup logo Rev11, read by picfill/picfill68)
/k0/SYS/system.pal (color settings (PALRAM image) Rev11, read by
picfill68)
Track Split ("TS", track sheet utility for multi-track
tape recording)
/k1/CMDS/CMIUSERx/TS
Timecode Trigger ("TT", timecode sequencer, in Rev
<=5.2, successor: Cue List):
/k1/CMDS/CMIUSERx/TT
Cue List
see Cue List-section below!
Film Music Processor ("FMP"):
/k1/CMDS/CMIUSERx/fmp_pg
/k1/CMDS/FMPSYS
Stand-alone system for Series IIx and III:
/d0/FMP (root directory)
/d0/FMP/SYS
/d0/FMP/SYS/startup (starts "filmusic /d0/FMP /f0")
/d0/FMP/CMDS
/d0/FMP/CMDS/filmusic
/d0/FMP/CMDS/film
/d0/FMP/CMDS/filmvtemp
/d0/FMP/CMDS/fdraw
/d0/FMP/CMDS/plotv
/d0/FMP/FILMUSIC (user directory)
DTM
see DTM-section below!
MDR
see MDR-section below!
MFX
see MDR/MFX-section below!
GFX
see MDR/GFX-section below!
RS
see RS-section below!
CAPS
see CAPS-section below!
MCL ("Music Composition Language")
/k0/CMDS/mcl
/k0/CMDS/CMISYS/com ?? (OS9 compiler: .MC -> .SQ)
PFTASK ("Frame Playing Task", playback 8-Byte "timed
frames" to MP, e.g. used for .SQ files?):
/k2/CMDS/CMISYSx/pftask
ATP ("Audio Trigger Page", audio sample input
triggers sounds, Rev8):
/k1/CMDS/CMIUSERx/ATP
/k2/CMDS/CMISYSx/ATP
Sorted by CPU:
main CPU P2 (Q209) modules:
/k0/CMDS/cmix (system startup)
/k0/CMDS/cmi (system startup w/o sequencers)
/k2/CMDS/CMISYSx/grres (resident initialization module, graphics
task)
/k2/CMDS/CMISYSx/inres (resident initialization module, input task)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrres (resident initialization module,
MDR)
/k1/CMDS/CMIUSERx/textwin_dp (support module)
/k1/CMDS/CMIUSERx/fkmenu_dp (support module)
/k2/CMDS/CMISYSx/p1task (CPU P1 communication task)
/k2/CMDS/CMISYSx/ertask (error logging task)
/k2/CMDS/CMISYSx/grtask (graphics task)
/k2/CMDS/CMISYSx/lptask (light pen (graphics pad) task: switching
windows + calling window event handler functions)
/k2/CMDS/CMISYSx/gfxtask (GFX graphics task)
/k2/CMDS/CMISYSx/lbtask (library (file load/save) task)
/k2/CMDS/CMISYSx/copy020 (fast copy for lbtask, uses CMI-41 PRAM)
/k0/CMDS/(CMISYSx/)wsst (JKERNEL communication server task)
/k0/CMDS/(CMISYSx/)wsmod (handle WFM modules)
/k2/CMDS/CMISYSx/wstask (WS communication task)
/k2/CMDS/CMISYSx/wptask (WP communication task)
/k2/CMDS/CMISYSx/mptask (MP communication task)
/k2/CMDS/CMISYSx/input (command input task)
/k2/CMDS/CMISYSx/pftask (Frame playing task, see above)
/k2/CMDS/CMISYSx/DTM/dtmtask (DTM)
/k2/CMDS/CMISYSx/DTM/dtmedplay
/k2/CMDS/CMISYSx/drtask (WSDTM Rev7)
/k2/CMDS/CMISYSx/MIDI/mdtask (MIDI)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrtask (MDR)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrmaptask (started by mdrtask)
/k2/CMDS/CMISYSx/CAPS/captask (CAPS)
/k2/CMDS/CMISYSx/RS/rstask (Realtime Sequencer)
/k2/CMDS/CMISYSx/CL/cltask1 (Cue List)
/k2/CMDS/CMISYSx/CL/cltask2
/k2/CMDS/CMISYSx/TT/tttask (Timecode Trigger)
/k1/CMDS/CMIUSERx/ATP/atptask (ATP, started by atp_ov)
main CPU P1 (Q209) modules:
/k0/SYS/iop (IOPACK, see OS9)
/k2/CMDS/CMISYSx/iopcmi (CMI IOPACK, see OS9)
/k2/CMDS/CMISYSx/p1task (P1Exec in p1task: CPU P1 kernel)
/k2/CMDS/CMISYSx/p1task (CPU P1 communication task, executed by
CPU P2)
/k2/CMDS/CMISYSx/RS/rsp1task (RS)
/k2/CMDS/CMISYSx/CAPS/test_p1 (CAPS)
/k2/CMDS/CMISYSx/CAPS/diag_p1
/k2/CMDS/CMISYSx/CAPS/bcopy_p1
/k2/CMDS/CMISYSx/CAPS/bedit_p1
/k2/CMDS/CMISYSx/CAPS/control_p1
/k2/CMDS/CMISYSx/CAPS/noted_p1
/k2/CMDS/CMISYSx/CAPS/cap_p1task
/k2/CMDS/CMISYSx/CAPS/cap_p1rtask
/k2/CMDS/CMISYSx/CL/clp1ptask (Cue List)
/k2/CMDS/CMISYSx/CL/clp1rtask
/k2/CMDS/CMISYSx/CL/clp1dtask (debugging)
/k2/CMDS/CMISYSx/DTM/dtmp1tsk3 (DTM)
/k1/CMDS/CMIUSERx/WSDTM/dtmp1tsk1 (WSDTM Rev7)
/k1/CMDS/CMIUSERx/WSDTM/dtmp1tsk2 (WSDTM Rev7)
/k1/CMDS/CMIUSERx/WSDTM/dtmp1tsk3 (WSDTM Rev7)
/k1/CMDS/CMIUSERx/WSDTM/dtmp1tsk5 (WSDTM Rev7)
{/k2|/D3}/CMDS/CMISYSx/MDR/mdrp1task (MDR Rev9)
channel card ("CC", CMI-31) modules:
/k2/CMDS/CMISYSx/ccprog (CMI-31 CMI executive, started by mptask)
/k2/CMDS/CMISYSx/DTM/dtmccrev2 (CMI-31 DTM executive, started by
dtm_pg Rev6)
/k2/CMDS/CMISYSx/dtmwscc (CMI-31 WSDTM executive, started by drtask
Rev7)
{/k2|/D3}/CMDS/CMISYSx/MDR/mdrccprog (CMI-31 MDR executive, started
by mdrtask)
SMIDI processor ("MP", CMI-28):
/k2/CMDS/CMISYSx/mptask (6809 OS9 task)
/k2/CMDS/CMISYSx/errfile.mp (Error text file)
/k0/CMDS/kstart (for CMI-28/33/41, executed by 6809 CPU)
/k0/CMDS/com68 (for CMI-28/33/41, executed by 6809 CPU)
/k2/CMDS/CMISYSx/(MIDI/)midi68 (CMI-28 executive, started by mptask)
waveform processor ("WP", CMI-33) modules:
/k2/CMDS/CMISYSx/wptask (6809 OS9 task)
/k2/CMDS/CMISYSx/errfile.wp (Error text file)
/k0/CMDS/kstart (for CMI-28/33/41, executed by 6809 CPU)
/k0/CMDS/com68 (for CMI-28/33/41, executed by 6809 CPU)
/k2/CMDS/CMISYSx/wpexec68 (CMI-33 executive, started by wptask)
waveform supervisor ("WS", CMI-41) modules:
/k2/CMDS/CMISYSx/wstask (6809 OS9 task)
/k2/CMDS/CMISYSx/errfile.wp (Error text file)
/k2/CMDS/CMISYSx/errfile.jker (Error text file)
/c000/cmixfast (fast page change WFM modules file, created by wscat)
/k2/CMDS/wscat (create cmixfast WFM modules file, executed by 6809
CPU)
/k0/CMDS/(CMISYSx/)wsmod (handle WFM modules, executed by 6809 CPU)
/k0/CMDS/(CMISYSx/)kstart (for CMI-28/33/41, executed by 6809 CPU)
/k0/CMDS/com68 (for CMI-28/33/41, executed by 6809 CPU)
{/k0|/D3}/CMDS/(CMISYSx/)jprocs (utility, executed by 6809 CPU)
{/k0|/D3}/CMDS/(CMISYSx/)jsetpr (utility, executed by 6809 CPU)
/k0/CMDS/(CMISYSx/)jrun (utility, executed by 6809 CPU)
/k0/CMDS/(CMISYSx/)jkill (utility, executed by 6809 CPU)
/k0/CMDS/(CMISYSx/)jsend (utility, executed by 6809 CPU)
/k0/CMDS/(CMISYSx/)jsys (JKERNEL: jker + jscsi (+ keytest), started
by cmix)
/k0/SYS/jsys_cfg (configuration file)
/k0/CMDS/(CMISYSx/)wsst (JKERNEL communication server task on 6809
OS9)
/k0/CMDS/(CMISYSx/)wsm (WFM modules J-task, started by cmix)
/k2/CMDS/CMISYSx/jprocs68 (started by cmix)
/k2/CMDS/CMISYSx/jfman68 (started by cmix)
/k2/CMDS/CMISYSx/JPROGS/wscom68 (started by cmix, Rev <=9)
/k2/CMDS/CMISYSx/JPROGS/tvtmon68 (started by cmix or wscom68, Rev
<=9)
/k2/CMDS/CMISYSx/JPROGS/ertask68 (started by ertask)
/k2/CMDS/CMISYSx/JPROGS/gfxtask68 (GFX, started by gfxtask)
/k2/CMDS/CMISYSx/wsexec (J-task, started by wstask)
/k2/CMDS/CMISYSx/MIDI/cctask68 (started by mptask, Rev <=9)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrwsmain (MDR >=Rev9, started by
mdrtask, see also DSP96K)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrwsgrass (GFX Rev9, started by mdrwsmain)
{/k2|/D3}/CMDS/CMISYS9/MDR/mdrwsplay (started by mdrwsmain)
/k2/CMDS/CMISYS9/MDR/mdr68020main (MDR Rev8, started by mdrtask)
/k2/CMDS/CMISYS9/MDR/mdr68020play (started by mdr68020main)
/k2/CMDS/CMISYS9/MDR/mdr68020tvt (started by mdr68020main)
/k2/CMDS/CMISYSx/ATP/atp68 (started by atptask)
/k2/CMDS/CMISYSx/dtmwstsk (WSDTM Rev7, started by drtask)
/k2/CMDS/CMISYSx/wsdtmplay (WSDTM Rev7, started by drtask)
XDR sample card (ESP-348) modules:
runs from ROM!
waveform accelerator ("DSP96K") modules:
see DSP96K-section below!
CMI operation:
"system":
contains max. 80 instruments (however, limited by @in in cmi_cfg to
40), data saved in .SY file
"instrument":
contains max. 8 buddied voices plus max. 16 buddied external voices
(buddied = played in parallel), uniquely mapped from MIDI input channel
and ACIA number (A-D) and MIDI key (if from master keyboard), optional
MIDI input key transposition per instrument, optional MIDI input controller
mapping per ACIA, data saved in .IN/.SY file
"voice":
plays CMI channels, unique allowed channel mask, contains max. 63
subvoices, buddied voices in instrument obviously cannot share channel,
mono+stereo voices cannot share channel, multiple voices may share
channel (if Rev>=8), max. 16 voices total in system, data saved
in .VC file
"external voice":
plays MIDI output, unique MIDI output channel and ACIA number (A-D),
max. 32 external voices total in system, data saved with instrument
"subvoice":
sample data, uniquely mapped from MIDI key for each voice, unique
router output for each voice+subvoice (if Rev>=8, map saved in
.RT file), data saved with voice
Cue-List:
"CL", timecode sequencer, successor of Timecode Trigger
("TT").
CL files are called event modules (or event data modules, "EDM"),
which have a fixed size of 12KB with a maximum of 255 events per file
(older revisions used 4KB size by default, allowed 2/4/6/8/10/12KB).
Event modules can call other event modules as a special type of event,
which is referred to as a library module event. In CL, all time-informations
are based upon "time-unit" values (1/48000 sec, for sub-frame
timing resolution, independent of frame-rate).
CL is also capable of recording MIDI events in real-time into a so-called
take file (.TK, 8-Byte timed-frame format, similar to .SQ), which
in turn can be converted into an event module. Furthermore, TT files
can be converted to CL files.
QASAR
CPU P2 (cltask1, cltask2) handles the user interface, CPU P1 (clp1ptask,
clp1rtask) coordinates real-time events, and the SMIDI CPU (midi68)
finally is responsible for the time-critical part to play/record real-time
events (as timed MIDI-frames).
Directories:
/k1/CMDS/CMIUSERx/CL
/k2/CMDS/CMISYSx/CL
RS:
"Realtime Sequencer" or "Rhythm Sequencer", 16-track
pattern-oriented MIDI sequencer, successor of the Series II "Page
R" sequencer.
RS uses
statically allocated memory, i.e. for a given number of used patterns
(=measures), the file-size does not change dynamically. Furthermore,
within each pattern, fixed time-slots are used for key-events, in
16 separate monophonic tracks with fixed instrument assignment (corresponding
to the 16 channels of the CMI Series III). Each time-slot corresponds
to one microbeat. Each event is saved as a key-number, velocity and
release value, and a duration (max. 255 microbeats) in an event-slot
corresponding to the time of its occurance. The number of time-slots
per pattern depends on the chosen time signature, however, it cannot
exceed the max. value of 96 (per track). (For a 4/4 time e.g., we
have 96 microbeats, i.e. a resolution of 24PPQ. The playback accuracy,
however, is much higher.) A shared maximum of 16 continous controllers
plus 16 switches are recorded with one value per microbeat. Tempo
and time signature can vary from pattern to pattern (however remains
constant within a pattern).
An RS-file ("sequence-file") can contain a maximum of 255
patterns. Patterns are played back/recorded according to 27 so-called
sections (SONG, A, B, ..., Z), which define play-sequences of patterns.
(A section-step contains a pattern reference number and a repetition
count, but can also contain a reference to another section.)
The RS resembles a totally-static sequencer design, which stems from
the Series I/II/IIx machines' page-R sequencer. Typically, such a
sequencer concept is also used in drum-machines. In contrast, modern
MIDI-sequencers normally have a dynamical event-oriented design. (Compare
also with CAPS, which is partially dynamic within each quarter, leading
to a significantly higher resolution of 384PPQ.)
Series I/II/IIx page-R sequence files can be converted into a Series
III RS file (via r2r3 tool). On the other hand, RS can export take-files
(.TK, see Cue-List) with help of the "capsgen" command (misleading).
QASAR
CPU P2 (rstask) handles the user interface, CPU P1 (rsp1task) coordinates
real-time events, and the SMIDI CPU (midi68) finally is responsible
for the time-critical part to play/record real-time events (as timed
MIDI-frames).
Directories:
/k1/CMDS/CMIUSERx/RS
/k2/CMDS/CMIYSYSx/RS
CAPS:
"Composer, Arranger, Performer, Sequencer", 80-track
MIDI sequencer.
CAPS is based upon statically allocated memory, i.e. for a given number
of measures, the file-size does not change dynamically. Each pre-allocated
quarter contains a fixed number of available event- and controller-slots:
220 key-event slots shared amoung 80 polyphonic tracks(="parts")
and 24 values for each of the possible 80 shared controllers. Each
track corresponds to one fixed CMI instrument with arbitrary polyphony.
Times are measured in "microbeats" (1/384 quarter, giving
384 PPQ resolution). A key-event consists of a time-stamp (relative
to the quarter begin in microbeats), the MIDI key number, velocity
and release value, and also the total duration (max. 65536 microbeats).
(Note: Such a concept does not correspond to MIDI events, which encode
note-on and note-off separately.) All events within a quarter are
organized as separate linked lists for each track (part) and are dynamically
allocated. In contrast, controllers are statically recorded every
MIDI-clock (1/24 quarter) (unusual for MIDI sequencers). Each track
can be assigned max. 8 out of 80 controllers (exclusively shared amoung
all tracks). A CAPS-file (.OP "Opus-file") also contains
a fixed number of 480 measure-information slots, where quarters (events
+ controllers, allocated only for the Opus length) are assigned to
measures. Tempo-values are stored every 1/32 note within a measure.
The built-in undo-function is based upon a doubling of quarter-memory,
with a switchable assignment to measures (alternating recording, keeping
one level of history). A "packed" Opus does not contain
this doubled quarter-memory. For example, an "unpacked"
Opus in 4/4 time of 5min duration approximately consumes 3MB of disk
space.
CAPS reads and writes quarters and measures from/to disk on demand
(keeping only a small number of measures in RAM for caching). CAPS
can handle arbitrary sequences of measures with varying time signatures
(with beat 1/2, 1/4, 1/8, 1/16, or 1/32, and a maximum number of 8
quarters per measure) and varying tempo (1/32 resolution of changes).
The mainly static concept (with dynamically managed events in each
quarters for a higher time-resolution) enables CAPS to correctly chase
SMPTE (offering also SMPTE cue-lists).
With CAPS, tracks (i.e. parts) refer to instruments (with a dynamical
assignment to channel cards, if supported by the CMI software Rev.).
QASAR
CPU P2 (captask) handles the user interface, CPU P1 (cap_p1task, cap_p1rtask)
coordinates real-time events, and the SMIDI CPU (midi68) finally is
responsible for the time-critical part to play/record real-time events
(as timed MIDI-frames).
Directories:
/k1/CMDS/CMIUSERx/CAPS
/k2/CMDS/CMISYSx/CAPS
Configuration:
/k1/CMDS/CMIUSERx/CAPS/cap_cfg
/k1/CMDS/CMIUSERx/CAPS/ed_sizes
DTM:
DTM ("Digital Tape Machine") is the hard disk recording
system for CMI software Rev5+6. DTM runs on a WP (CMI-33) system with
Q777 SCSI contoller, providing a maximum of 1 track (2 channels if
stereo) playback simultaneously. DTM has a fixed sample-rate of 48kHz.
(Rev7 also had an experimental DTM version called "WSDTM",
which ran on WS (CMI-41) systems with the JKERNEL.) The successor
of DTM is MDR (see below).
DTM is implemented as special functions within wpexec68 (running on
the WP), OS9-tasks (dtmtask, dtmedplay), P1-tasks (dtmp1tsk*), various
CMI display pages (with _dt suffix typically), a special CC executive
(dtmcc*), and special functions within midi68 (running on the MP).
A DTM-file (.DR-file) occupies disk space in a granularity of contiguous
4MB blocks. It contains multiple segments of waveform data and an
edit-list of "events", which specify which waveform is supposed
to be played at which time offset. Waveform data is never altered
during editing. Optional crossfades between adjacent events are implemented
by use of extra file space, located within the first 2MB of the DTM-file.
DTM software:
/k1/CMDS/CMIUSERx/DTM
/k2/CMDS/CMISYSx/DTM
WSDTM (DTM Rev7, with CMI-41):
/k1/CMDS/CMIUSERx/WSDTM
/k1/CMDS/CMIUSERx/WSDTM/dtmp1tsk* (P1-tasks)
/k2/CMDS/CMISYSx/drtask (OS9-task)
/k2/CMDS/CMISYSx/dtmwstsk (J-task, started by drtask)
/k2/CMDS/CMISYSx/wsdtmplay (J-task, started by drtask)
/k2/CMDS/CMISYSx/dtmwscc (CMI-31 executive, started by drtask Rev7)
MDR, GFX, MFX, and sync possibilities:
The harddisk recording system "MDR" ("Multitrack Disk
Recorder", Rev>=7) is the successor of DTM ("Digital
Tape Machine", Rev5,6). While DTM runs on a WP (CMI-33) system
with the Q777 SCSI contoller, providing a maximum of 2 channels playback
simultaneously, MDR requires a WS (CMI-41) system with WS-SCSI (on
CMI-41) or additional TurboSCSI (ESP-TS1), providing up to 16 channels
simultaneous playback. Rev11 software recognizes the presence of a
TurboSCSI controller by means of the "hardware protection level"
(see ESP-TS1) and accordingly switches to Rev10 (level=A) or Rev11
(level=B) mode. Large parts of MDR were written by Steve Rance, Chris
Alfred, and Michael Carlos.
MDR is implemented as separate J-tasks (running on the WS) and OS9-tasks
(running on the QASAR) with a special CC executive (mdrccprog) and
special functions within midi68 (running on the MP). (Rev9 software
also uses a P1-task called mdrp1task.) MDR runs independently in parallel
to the old CMI software system (esp. CAPS/RS/CL) and has its own control
and sync paths, controlled and synchronized from the MFX (via the
CMI's MIDI D) or CMI SMPTE inputs (LTC or MTC). MDR Rev11 requires
4MB of WS PRAM and at least 12MB of WRAM. Starting with Rev10, the
MDR-DOS filesystem (see above) is employed for MDR-related files (.MT,
.MK). (Setup parameters are contained within the mdr_data file.) The
official MDR time is measured in "time-units" (1/48000 sec,
independent of the selected frame-rate) and provided by midi68 (MP).
The playback sample-clock of each channel is locked to this MDR time,
with nominal values of 44100Hz or 48000Hz (same for all channels,
depending on the MDR project file, independent of the selected frame-rate,
even if dropframe). During record (with the ESP-348), sample-rate
conversion is always activated to ensure a correct sample count, synchronous
with MDR time (channel card 1 acting as the clock source, see ESP-348
above). As a special option, the record sample-rate (same as playback
by default) can be run-up by 0.1% (for use with a 29.97fps (i.e. dropframe)
project, where old 30fps video material is played back at 29.97fps
later on). Note that Rev6 ESP-348 firmware can convert 44.1kHz/48kHz
AES/EBU source rates automatically into the project's rate and can
amplify the signal in the digital domain. Digital AES/EBU output of
one MDR track is also possible, however, with a sample-rate not in
exact sync to the official MDR time (freely running sample clock,
see ESP-348 above).
The so-called "GFX" graphics system is used for the graphical
user interface during MDR operation. It is implemented as the gfxtask68
(mdrwsgrass in Rev9) J-task (with the GFX library) for the WS, the
gfxtask OS9-task (in Rev11) for the QASAR, and individual modules
for each display page (J-modules: _gfx, OS9-modules: _pa and _pb files).
Here, graphics processing and generation is primarily accomplished
by the WS, providing an improved and faster GUI in addition to the
old CMI QASAR-based system (OS9-tasks: grtask, lptask, input).
The MFX keyboard acts as a control console, sync source and router
for the MDR and other external machines. It sends proprietary SysEx-encoded
timecode and control commands and forwarded music-keyboard MIDI packets
to the CMI MIDI D input (handled by the MP). (Note that MTC is not
employed here, except for the "MIDI 1.0" machine, see below.)
MFX runs the "mfx.runtime" executive (contained within the
MFX's NVRAM, downloadable from the CMI, see "mfxload" OS9
utility) during operation with MDR. (Note: mfx.runtime re-routes MIDI
data from the music-keyboard input, but supports only 3-Byte MIDI
command packets, as sent by the CMI music-keyboard. Neither Real-time,
Active-Sensing, SysEx, nor omitted start-bytes are allowed.)
For MFX/MDR, the following sync sources are possible:
1) MFX's internal timecode generator. (MFX sync mode "MFX"
with no master)
2) External timecode (Sony protocol) via MFX's RS422 input, forwarded
by the MFX to the slaves. (MFX sync mode "MFX" with one
master machine "SONY 2.0")
3) External frame-click signal via MFX's RS422 input, forwarded by
the MFX to the slaves. (MFX sync mode "EXTERNAL") (Not to
be confused with the CMI's CLICK input!)
4) External SMPTE (LTC) at the CMI's SMPTE input or MIDI-timecode
(MTC) at one of the CMI's MIDI inputs.
Note that MDR time is internally measured in "time-units"
(1/48000 sec), independent of the selected frame-rate.
In cases 1-3, the MFX sends timecode to the MP (SysEx-encoded via
MIDI D) as the official MDR time. Only in case 4 under normal-speed
playback/record, the MP's SMPTE input (LTC or MTC) is used as MDR
time (in which case the MFX is synchronized via the /mfx port by the
J-task mdrwsplay).
The midi68 executive directly synchronizes the channel cards (those
which are used for MDR) and the MDR system (running on QASAR and WS,
special MDR entries in C_TCODE).
Note that the MFX's MIDI input (normally from the Music-keyboard)
cannot be used as a sync/control input (at least with MFX1/MFX2 software).
Note that the MDR is always a sync-slave, although the MP can forward
the timecode it receives to the CMI SMPTE output (the MDR time appears
under "SMPTE GENERATION=FREE-RUN"). Apart from the MDR disk-recorder,
other slave machines are possible for the MFX. For example, a "SONY
2.0" machine, which is an external recorder attached to the MFX's
RS422 (control output only, no timecode output however). A special
case is the "MIDI 1.0" machine, which is nothing but the
MFX's MIDI output to the CMI's MIDI D input using MIDI-SMPTE (MTC)
(Note that the CMI's MIDI D input is also used for control/sync of
the MDR by the MFX. However, this uses a different protocol, based
upon SysEx). This "MIDI 1.0" machine can be used to synchronize
MIDI sequencers on the CMI (i.e. CAPS/RS/CL) to the same master which
is also used for the MDR and other sync slaves ("SyncGroup")
attached to the MFX. Here, the system sync of the old CMI software
part (i.e. CAPS/RS/CL) must be set to "SMPTE MTC-D" (note
that the CMI system in turn can be used to forward sync to other MIDI
outputs, CLICK out, CLOCK out, SMPTE out). (A more accurate way would
be the usage of a common external SMPTE input for the MDR and CMI
sequencers.) The MFX can switch each slave individually on/off-line
("Sync" switches for machines, "Disk" switch for
MDR), additionally to the global "SyncGroup" switch.
An MDR-file (.MT-file, "project") contains 24 Tracks, each
containing multiple "clips" (dynamically allocated). Each
clip contains information about head/sync/tail/fade times and references
to "waves" (1 for Mono, 2 for Stereo). Waves contain the
original sample data (dynamically allocated, not necessarily contiguous).
Note that the sample data within the waves is not altered during editing
(unless "space"-functions are used), only the clips (telling
which part of which wave is to be used) are changed. Clips can also
refer to waves with sample data contained within different files (in
which case such a file is called a "library"). "Fades"
are realized during playback in real-time with help of the VCAs on
the channel cards (CMI-331). An MDR-file is uniquely identified by
a 32-Bit ID (hidden in the file header), which is especially employed
to reference a library file. This ensures that a library file can
be found even if it has been renamed or moved to a different storage
device (MDR always scans for MDR-files on all available MDR-devices).
(Note that "backup"-functions do not change this ID. In
contrast, "copy" creates a new project with a new unique
ID.)
(Note: Early MDR versions under software Rev7 and Rev8 might be considered
as preliminary. These systems employed a different file-architecture
with one .DR-file, containing information for all tracks, and multiple
.TR-files, containing waveform data for individual tracks.)
MDR software (moved to /D3 since Rev11):
{/k1|/D3}/CMDS/CMIUSER9/MDR
{/k2|/D3}/CMDS/CMIUSER9/MDR/mdr_cfg
{/k2|/D3}/CMDS/CMIUSER9/MDR/mdr_pagesx (x=9,10,11)
/sc00/SYS/mdr_devices
/d0/SYS/mdr_devices (template)
{/k2|/D3}/CMDS/CMISYS9/MDR
{/k2|/D3}/CMDS/CMISYS9/MDR/errfile.mdr
{/k2|/D3}/CMDS/CMISYS9/MDR/helpfile.mdr
{/k2|/D3}/CMDS/CMISYS9/MDR/mdr_data (setup values)
MFX software:
* "MFX III sound design console" (<=Rev8):
/k0/mfx (OS9 shell-script, sends mfx.l and mfxslave)
/k0/CMDS/mfxsend (OS9 up-load program)
/k0/CMDS/MFX/mfx.l (master-CPU)
/k0/CMDS/MFX/mfxslave
(slave-CPU)
/k0/CMDS/MFX/mfxrom.s (master-CPU firmware)
/k0/CMDS/MFX/mfxrom09.s
(slave-CPU firmware)
/k0/mfxdiag
(OS9 shell-script, sends mfxdiag.l and mfxslave)
/k0/CMDS/MFX/mfxdiag.l (master-CPU diagnostics)
/k3/MFX (development system)
* "MFX1", "MFX2" (>=Rev9):
/k0/CMDS/mfxload (OS9 up-load program)
{/k2|/D3}/CMDS/CMISYS9/MDR/mfx.runtime (master-CPU)
/D3/CMDS/mfx.diagled (master-CPU diagnostics)
GFX (graphics system under JKERNEL/MDR):
/k2/CMDS/CMISYSx/gfxtask (OS9 task, Rev11)
/k2/CMDS/CMISYSx/JPROGS/gfxtask68 (J-task, Rev11, started by gfxtask)
/k2/CMDS/CMISYSx/MDR/mdrwsgrass (J-task, Rev9, started by mdrwsmain)
{/k2|/D3}/CMDS/CMISYS9/GFX (general _gfx modules)
{/k2|/D3}/CMDS/CMISYS9/MDR[/GFX] (MDR-specific _gfx modules)
(see above for MDR-DOS
filesystem, and MFX hardware)
DSP sampler (ESP-348) functions:
The XDR sample card DSP (56001, ESP-348) runs proprietary sampling/rate-conversion/scaling/routing
code from ESP-348 ROM called "DSP348". Communication with
WS via bi-directional serial interface. (With Rev6 firmware, real-time
digital sample-input scaling and MDR-assisted semi-automatic 44.1k/48k
conversion is possible.)
Upon DSP (56001) RESET, the DSP on-chip bootstrap loads the secondary
bootstrap from the ESP-348 ROM (bootmode 1). The secondary bootstrap
then copies data/code from the ROM to program, X-data and Y-data space
(according to a load-table within the ROM). Finally, the secondary
bootstrap jumps to the entry address of the loaded application program
code. Sample-rate conversion is based upon sin(x)/x interpolation
with phase-detection via ESP-348 built-in hardware.
(See hardware chapter for more information about the ESP-348.)
Waveform
accelerator (DSP96K) functions:
MDR software uses the optional DSP96K card for time-dilation/contraction
(in "CONST" mode only, "VARI" mode is implemented
by the WS J-task mdrwsmain). Here, the card with the lowest ID is
used (default installation: ID3). Communication with the WS is accomplished
via shared WRAM on the DSP96K by use of the mdrwsmain J-task, which
acts as a loader (transferring dsp96k.obj* code modules to DSP96K
RAM) and as a server for 96K-requests during waveform manipulation
(esp. load/save waveform segments from/to MDR-files to/from DSP96K
WRAM). (See "setdsp" command on MDR tracks page and TVT-debug
output during DSP96K operation, esp. with MDR U-flag set. Time-dilation/contraction
parameters are contained within the mdr_data file.) Note that the
DSP96K has neither access to the waveform bus nor to the QASAR bus,
only to its on-board WRAM and SRAM. The on-board WRAM, however, is
also accessible by the WS, providing a means of communication.
The DSP96K code was written by Andrew Cannon.
Upon DSP96K RESET release (triggered by WS), the DSP96K on-chip bootstrap
loads the secondary bootstrap from the DSPINIT PROM (96002 boot mode
5). This secondary bootstrap then jumps to the ternary bootstrap at
82000100 (DSP address, in DSP96K WRAM), which has been loaded to this
location by mdrwsmain. In turn, the ternary bootstrap jumps to the
entry point of the dsp96k.obj* code, which also has been loaded by
mdrwsmain. Typically, this entry point is 82001000 (in DSP96K WRAM).
For example, if ID=3, DSP addresses 82000100 and 82001000 correspond
to WS Byte-addresses 04800400 and 04804000, respectively. dsp96k.obj*
initializes the DSP96K hardware and enters a service request loop,
waiting for commands from mdrwsmain via DSP96K WRAM mailboxes. For
the execution of time-consuming tasks, so-called overlays are used,
which are code and data segments in dsp96k.obj* which are copied to
the DSP96K on-chip RAM areas and SRAM in order to speed-up execution
(compared to execution from on-board WRAM). During overlay execution,
mdrwsmain acts as a server for DSP96K requests (via DSP96K WRAM mailboxes),
such as waveform block load/save.
DSP96K
software (MDR time-dilation/contraction, DSP96K used for "CONST"
mode only, WS is used for "VARI" mode):
/D3/CMDS/CMISYS9/DSP96K/dsp96k.obj* (code modules, varying quality
1-4)
/D3/CMDS/CMISYS9/MDR/mdrwsmain (J-task, esp. used as DSP96K loader/server)
/D3/CMDS/CMISYS9/MDR/mdr_data (bandsplitter default values, varying
quality 1-4)
Note: In Rev11, the code modules are actually the same for
all qualities (1-4), variation is accomplished via different parameter
sets (in mdr_data, see also the "setdsp" command) for different
quality numbers.
File extensions:
res: resident subroutine module
task: 6809 OS9 task
68: 68k module
dsp96k.obj*: DSP96K object file
_pg: primary display page (Usr6 P Prog module)
_dp: display page (Usr6 P Prog module)
_ov: small display page (Usr6 P Prog module)
_xm: ext. module (Usr6 P Prog module)
_cm: command module (Usr6 P Prog module)
_pa: MDR/GFX large display page (Usr6 P Prog module), associated
_gfx file
_pb: MDR/GFX small display page (Usr6 P Prog module), associated
_gfx file
_gfx: MDR/GFX display page (J-module), associated _pa/_pb file
_dt: DTM (Usr6 P Prog module)
_ed: CAPS (Usr6 P Prog module)
_db: Usr6 P Prog module
_p1: CPU P1 Subroutine module
_cp: CAPS Subroutine module
_bgnd: Subroutine/Program module
_ovl: WP Subroutine module
_init: Subroutine module
_sr: Subroutine module
_fl: FLANGER page file
_ts: Track Split page file
_icon: icon (Data module)
_sy: character Bitmap
_cfg: configuration
_px: screendump Bitmap
.jker: JKERNEL data file
.mdr: MDR config/data file
.wp: waveform processor data file
.os9: OS9 file
.cmi: CMI software file
.fft: FFT page file
.ps: PostScript file (see psdump)
.doc: text file
.txt, .TXT: text file
.cm: shell command file
.pal: PALRAM image (for type D graphics cards)
.a: assembler source (rma)
.ma: assembler source (c.mac, rma)
.ca: C source (c.comp, rma)
.mca: C source (c.prep, c.comp, rma)
.o: assembler source (c.opt, rma)
.mo: assembler source (c.mac, c.opt, rma)
.c: C source (c.comp, c.opt, rma)
.mc: C source (c.prep, c.comp, c.opt, rma)
.h: C include file
.ha: assembler include file
.d: assembler include file
.r: relocatable object file (rlink)
.l: library (rlink)
.s: binary image in Motorola hex format
.m: macro definition file
.mh: macro definition file
.u: macro definition file
.i: command include file
.p: shell script?, PASCAL souce?
.asm: assembler source (asm, OS-9 Level 1)
.b, .bas: BASIC09 file (see basic09, runb)
.SY: CMI system file, QDOS system binary file
.RT: router file
.IN: instrument file, Series I/II/IIx instrument file (page 3)
.OP: CAPS opus file
.RS: Series I/II/IIx Real-time Composer file (page R), Series III
Rhythm Sequencer file
.TK: Cue List Take file (8-Bytes "timed-frames" format
similar to .SQ)
.CL: Cue List file (event module)
.VC: voice file, Series I/II/IIx voice file (page 3)
.SV: subvoice file
.SX: MIDI System Exclusive file
.TS: Track Split file
.SL: Series I/II/IIx scale file
.FN: function curve file
.TP: tape directory file
.PX: screendump Bitmap
.DR: Disk Recorder "tape" file (<=Rev8)
.TR: Disk Recorder track file (<=Rev8)
.MT: MDR Disk Recorder Multi-Track file (>=Rev9)
.MK: MFX macro file
.DL: Dubber Language file (MFX3 Rev>=13: for D.A.D. via MDL-command)
.EL: ???
.MX: ???
.TT: Timecode Trigger file
.CO: Series I/II/IIx control file (voice effect patches + function
curves, page 7)
.SQ: MIDI frame sequence file (8-Byte "timed-frames" format),
MCL compiler output format, Series I/II/IIx keyboard sequence file
(page 9), Series III sequence file (see pftask)
.PC: Series I/II/IIx MCL Piece source file
.PT: Series I/II/IIx MCL Part source file
.SS: Series I/II/IIx MCL Sequence source file
.MC: Series I/II/IIx MIDI configuration file (page I), Series III
MCL Piece source file
.AI: Series I/II/IIx analog interface file (page A)
.HL: Series I/II/IIx help file
.DP: Series I/II/IIx display page file
.OV: Series I/II/IIx display overlay file, QDOS overlay file
.CF: QDOS chain procedural file
.CM: QDOS command file
.ED: QDOS EDOS-converted file
.SA: QDOS ASCII source file (optionally compressed spaces)
.AL: QDOS assembler listing file
.LX: QDOS loadable object in Motorola EXORciser (S-record) format
.LO: QDOS loadable object in binary format (e.g. MIDI.LO,
AIC09.LO)
.RO: QDOS relocatable object file
(Note: The upper-case 2-letter suffixes are mandatory only under
QDOS. More infos
about CMI Series IIx files on Greg Holmes' page.)
|