Download Latest Version Novalight_1.2a.zip (73.7 kB)
Email in envelope

Get an email when there's a new version of Euphoric tools

Home / Tape tools / Novalight
Name Modified Size InfoDownloads / Week
Parent folder
Novalight_1.2a.zip 2019-03-24 73.7 kB
_Novalight_readme_1.2a.txt 2019-03-24 9.6 kB
Totals: 2 Items   83.2 kB 2
Novalight, very fast tape loader for Oric, 03/2019.
By Symoon, based on Fabrice's tools TAP2WAV and TAP2CD.
Version 1.2a

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.
Latest versions should be available at https://sourceforge.net/projects/euphorictools/files/Tape tools/


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 ] [ -option3 ] [ -option4 ] <.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?)
         -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).
         -m  'multipart booster': if you know that page 1 is never affected by
             the multipart program you're loading, this option allows to reduce
             the loader size after part 1 (all following parts load faster!).
         -rXX 'relocate': you can specify another memory page to store
             Novalight. Must be in hexadecimal, for instance '-r9F', '-r01'.
             Default uses page 1, or another if something is loaded in page 1.
Note:    dropped 'no loader' and 'old loader' options, that worked together,
         since the old loader became too big to remain compatible.



Loading time examples:
----------------------
			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:17
Lone Raider		5:08		2:59		fails
Trouble In Store	5:14		fails		fails


Programs compatibility:
-----------------------
		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.
Parity 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 loader 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, but will automatically relocate if it detects that something is loaded in pge 1 in the TAP file.
It leaves a rather little room for the stack management (62 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).

And finally, Novalight will automaatically skip the "ALC" program: this is the small patch loaded before many Atmos programs, that was provided by Oric (on the "Welcome to Oric Atmos" tape!) to avoid loading problems with the 1st version of the Atmos ROM. See "Welcome to Oric Atmos" inlay for details.


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 (who found a bug!), Chema, Dbug, NekoNoNiaow.
I would *never* have been able to program Novalight without this help.

Enjoy!




History:
--------

V 1.2a (released 2019-03-24):
- auto-relocation in memory if page 1 is used by the program to load. /!\ heavy ASM/C dependency
- ALC program is now detected and skipped (it's a now useless patch for old tape players)
- public release, cumulating all previous changes from v1.1l to v1.1n.

V1.1n (not released)
!!! incompatibility with ALC program and Loriciels software using it as copy protection!
=> new version required to store the dictionary in page 1.
- stopped using page 2 to store the dictionary, it caused compatibility problems (especially with Loriciels
  software). This leads to split Common Area 0 with additional 0a and 0b parts.
- this means the old loader is obsolete, so "old loader" option removed. Same for "no loader", as the old
  loader was required to load a Novalight file without loader.
- "multipart booster" option allows to use a reduced Common Area 1 if the Kernel and Common Area 0 are kept
  intact. Requires re-loading of Common Area 0a at the end of a part.
- optimized the dictionary by not only taking care of the time wasted by the most frequent isolated
  bytes, but also by taking care of how much time they use with their new encoding in the dictionary.
  (sometimes, it is worth selecting a byte that occupies a bit less time in the original signal,
   but that will occupy much less time with its new encoding!)


V1.1m (not released)
- removed the $24 starting byte. This was here for historical versions and had become useless.
- the room saved by this removal (7 bytes) is now used for a new change: in an uncompressed byte,
  the bit sequence '1111', which should be coded by 6 + 6 samples, is now coded by 7 samples.

!!! OLD LOADER not working anymore.

V1.1l (not released)
- removed 3 useless bytes in Common Area 2: in ROM 1.0, clearing the status line is
  done by the CLOAD (it was historically required because Novalight used to display
  its own "Searching", but this has been removed before the 1st public release)
- added 'multipart booster' option
- corrected a bug: oldloader was ignored if combined with F16 speed
- just for the joke, modified the options letters a bit ;) (-s, -i, -m, -o and -n)

'No Loader' is superior to all the other options: standard speed, old loader and multipart booster will be ignonred.
'Old Loader' will ignore 'Multipart Booster', as the booster only works with the normal loader.


v1.1k (released 2019-02-09):
1st public release. A few bugs corrected:
- Spotted by ISS, wrong jump in Common Area 2 that miraculously worked without crash.
  JMP E565 (clear status line ROM 1.0) started one byte earlier and became this:
  13 20    ASO (20),Y   (undocumented opcode)
  65 E5    RRA (E5,X)   (undocumented opcode)
  instead of calling the "clear status line" code. It was not visible since this cleaning
  had nothing left to clean (could be removed).
- F16 speed was disabled. It's now back so the loader is now much faster to load.
- restored a 500 samples pause between two parts of the loader. It was reduced to 250,
  that worked fine with real machines and emulators, but just found that apparently, it
  caused problems with multipart programs in Euphoric: Ere Informatique's Karate, ended
  with a syntax error et the 5th or 6th part, while it didn't with the original pause.
  It's a bit unclear why.

Source: _Novalight_readme_1.2a.txt, updated 2019-03-24