> The utility does indeed create a wave file. A little background, the header
> to a BLOAD file contains 4 bytes, being WORD load_address, WORD length.
> Without these, well, where would it go? Random address is perhaps not a good idea.
From my memory (I didnt "review" the L2001 BASIC manual) I thought it was the loader to specify to which RAM address the data must be loaded. e.g.
-> CLOAD a BASIC program
-> program contains "10 BLOAD $C000"
-> RUN
-> the remaining part of the tape is loaded from $C000 on.
I understand that I was wrong, as you write that the L2001 binary file has such information. That's great!
> So -l specifies that load address.
OK perfect. The info is needed to build the header.
> The -c option adds a small BASIC loader which will do the necessary POKEs and
> BLOAD to get the SM/L2K1 into CV compatibility mode.
Sorry I dont remember about the POKEs and the "compatiblity mode" you're talking about, but I suppose you wrote about these somewhere on the forum, did you?
> Thus a simple CRUN will load and run Sonic Invader, for example.
From my memory, the "original tape" of Sonic Invader for the L2001 has a loader with just "10 BLOAD $C800" or similar. Or are there any addit. "poke's"? What's their use?
> Your previous statement assumed that all 32k had to be mirrored or filled. This is completely
> false. That was my point. The RETAIL Sonic Invader is EXACTLY the same from tape as it is
> from cartridge. It occupies only 4Kbytes of memory, It is not mirrored. There is no magical
> algorithm at play to do so.
You're right, it was a typo. I had to make clearer that I was talking about the Chopper Rescue case only.
I know the CV memory map very well, otherwise I couldn't produce a working Multicart. Games up to 8 KBytes don't need any mirroring, unless the game programs "JMP" to any mirrored area (that would be due to unproper programming).
The problem comes with larger games than 8 KBytes, where the ROM program must be "prepared" in order to make it load properly "with all data in a row".
On programs such as BASIC 1982 R2, 1983, V1, Locomotive and Music Maker you don't need to mirror the whole data, all you have to do is "swapping" the various parts of the ROM in order to make them match the correct memory map as needed. Obviously I'm talking about the ROMs which circulate on the Internet, where the "banks" are not in the same order as the memory map.
From my memory: BASIC 1982 R1 doesn't work properly unless you mirror the lower 4K data to $4000 (or was it $5000?) instead of the "usual" $7000.
> If you analyse the dumped carts, you will see that in the vast majority of cases -
> no mirroring is required. For the handful which do, they can easily be 'fixed', as
> it tends to be duplicate reads from the wrong address.
That's it!
I think BASIC 82 is the only program affected by such problem.
A Chopper Rescue ROM to "convert" to WAV should be 20K, that's lower 2K at $7000 + 2K blank (or mirrored, probably useless) + upper 16K at $8000 in order to work properly. If you use the ROM taken from the Internet, the upper 16K must be cut into two halves of 8K each, and swapped.
> However, SM/L2K1 do mirror 0/4000/8000 - so I highly doubt that any cartridge
> which uses those pages will run.
L2001 mirrors zeropage to $4000? Are you sure? Isn't that where the lower 1KB RAM stands, for compatibility to CV games?
Would you kindly post the full L2001 memory map here?
Thanks much for the kind explanations, much appreciated.