Here's the readme:
Novalight, very fast tape loader for Oric, 02/2019.
By Symoon, based on Fabrice's tools TAP2WAV and TAP2CD.
Version 1.1k
Novalight converts an Oric TAP file into a 44 kHz WAV file that should load very fast on most Orics, ROM 1.0 or ROM 1.1.
It must be used in MS-DOS, or Windows command line (see below).
Default version is compiled in 32 bits and should work on 32/64 bits Windows command line.
Can be compiled in 16-bits mode for old real MS-DOS, and I hope it could be compiled for Unix/Linux.
WARNING:
- requires a *perfect* WAV player (Audacity?).
- do not convert the WAV file, in any way (mp3 or whatever). Each and every sample of the WAV file is important.
In case of failure loading the file:
- keep cellphones away, switch off WiFi
- try different volume settings if loading fails, some Orics require high volume, others very low
- try rebooting your computer playing the WAV if loading fails - this happens with my PC when it's been running for a while!
- some Orics may not load this signal
Usage:
Novalight [ -option1 ] [ -option2 ] <.TAP file> <.WAV file>
Options: -s 'standard speed': use standard speed instead of F16 speed
for the loader (slower, but some Orics may not like F16?)
-o 'old loader': use the ROM 1.1-only loader instead of the
latest 1.0/1.1 loader. Old one has an advantage: it can be
loaded only once, then used with several CALL#100 to load
multiple parts, as long as it remains intact. But no ROM 1.0.
-n 'no loader': generates the Novalight file(s), without loader.
You should load an 'old Novalight' loader yourself first, then
use CALL#100 to load each of the file(s). ROM 1.1 only.
-p 'long pause': generates a 5 seconds silence between each part
of multipart programs (ERE Informatique programs, for instance,
require time to draw a loading screen).
Loading time examples:
Code: Select all
FAST standard FAST F16 TAP2CD Novalight
HIRES screen 0:56 0:34 0:08 0:04 - 0:02
TEXT screen 0:10 0:07 0:05 0:015
Zorgon 4:31 2:37 0:31 0:15
Xenon-1 4:15 2:31s 0:32 0:12
Acheron's Rage 5:12 3.12 0:40 0:12
Oricium 5:45 3:25 0:49 0:18
Lone Raider 5:08 2:59 fails
Trouble In Store 5:14 fails fails
Programs compatibility:
Code: Select all
FAST standard FAST F16 TAP2CD Novalight
Oric-1 yes yes no yes
Atmos yes yes yes yes
Emulator yes yes yes yes
Real tape yes no no no
Digital player yes 11kHz yes 44kHz yes 22kHz yes 44kHz
How does it work:
Novalight uses the TAP2CD bit encoding (2 bits per period: 00, 01, 10 and 11), but with shorter periods: 3, 4, 5 and 6 samples for 2 bits, while TAP2CD used the equivalent of 4, 6, 8 and 10 samples. Four periods are required to make a full byte.
Based on statistics made on about 1400 TAP files, showing that Oric files hold 60% of "0" and 40% of "1", Novalight encodes the zeroes on the shortest persiods ("00" is 3 samples long, while on TAP2CD it was "11").
A RLE compression has been added, repeated bytes will be encoded with the shortest possible period (3 samples, 4 samples for the last repeated one).
Two 7-bytes dictionaries are set, stored with the program header and filled with the most repeated bytes that have not been dealed by the RLE compression. Those bytes are also encoded in a shorter way.
Partiy check has been removed.
Stop bits have been merged in the start bit, its length determines the type of encoding that follows (normal byte, RLE compressed, or dictionary encoded)
Novalight's loaded has been minimised: using F16 speed (compatible with standard ROM), inverting bytes to save 10% of loading time (bits 1 coded as 0 and reversed). It loads first a minimal kernel able to load at Novalight speed without compression, then loads at fast speed small banks that do different things: VIA initialization, display, loading of banks, RLE and dictionaries decoding code, VIA restore and progam launch. This reduces the loader's loading time at about 0.6 seconds, plus the banks that follow (very, very short loading time)
Novalight is loaded in page 1, and leaves rather little room for the stack management (54 bytes). Beware if you ever call it in a sub-sub-program or in a loop.
While at it, Novalight also fixes the HIRES CLOAD bug on ROM 1.0: a HIRES file loaded on ROM 1.0 should not be damaged anymore by a black line once loaded (which was the result of the erasing of the displayed of "Loading.." while in HIRES).
Acknowledgements:
Novalight's name is a tribute to Twilighte, the great Oric coder, and Paul Woakes, co-founder of Novagen company, author of Mercenary games and Novaload fast tape loader for C64.
RIP guys, I had the greatest respect for your work.
Thanks to Fabrice for having written the Oric tapes conversion tools long ago, for TAP2CD and for his constant help, giving ideas and answering my questions about tapes, WAVs, interrupts and Oric coding.
Thanks to the Oric community, especially on forums Defence-Force (
http://forum.defence-force.org) and Oric.org (
http://forums.oric.org). For months, many people here spent time on various coding questions, tests, advice: FredV60, Musepat, Kenneth, Dom50, Voyageur, Oric1-Atmos, Froggy, Godzil, DrPsy, ISS, Chema, Dbug, NekoNoNiaow.
I would *never* have been able to program Novalight without this help.
Enjoy!