Hello Tape-Fans,
I talked with MiguelSky about the Dinamic-Tape loader.
He then sent me a few files, and I ripped the routines.
The result is a handy RSX-routine to save and load binary files to/from tape.
How to use it?
- RUN"DINAMIC.BAS" from my DSK file "dinamic.dsk"
- Commands are displayed:
|SAVE,<sync>,<start>,<length> - Saves a binary file to tape in dinamic format.
|LOAD,<sync>,<start>,<length> - Loads a binary file from tape in dinamic format.
Important: <sync> for loading and saving must be the same value. (1-255)
I'll attach 2 files:
dinamic.dsk -> The RSX routine
cauldron_dinamic.cdt -> An example tape I made using this routine.
I hope, this is useful :)
Edit: Forgot to explain, how to put this loader on tape:
- LOAD"DINAMIC.BIN" from my dsk file.
- Write a BASIC loader like this:
10 MODE 1:LOAD"!":CALL &A000
20 INK 0,0:BORDER 0:INK 1,9:INK 2,24:INK 3,6:CLS:CALL &BD19
30 |LOAD,1,&C000,&4000
40 |LOAD,1,&1800,&8656
50 INK 1,0:INK 2,0:INK 3,0:CLS:CALL &BD19
60 |LOAD,1,&C800,&3100
70 CALL &C800
- Save this loader to tape: |TAPE:SPEED WRITE 1:SAVE"CAULDRON" (It's the loader on the cauldron tape)
- Save the DINAMIC.BIN to tape: SAVE"LOADER",b,&A000,&0340
- Execute DINAMIC.BIN with CALL &A000
- Load the files you want to copy to tape and save them with: |SAVE,1,&C000,&4000 to tape, too (This is example for the title screen)
- Done...
Without knowing what sync value you used for the Cauldron example, it's not going to be of much use to anyone :)
Bryce.
Quote from: Bryce on 15:19, 29 October 13
Without knowing what sync value you used for the Cauldron example, it's not going to be of much use to anyone :)
Youself define the sync value, so where's the problem? ;)
I used 1 here.
Let me put it in BASIC for you: :P
10 REM Cauldron Example Loading Sequence
20 Counter=255: Saver = "Markus"
30 INPUT "Sync Value (required)"; LoadingSync
40 IF LoadingSync>0 AND LoadingSync<256 AND LoadingSync <> SavingSync THEN GOTO 80 ELSE GOTO 90
50 IF Saver = "Markus"[Nb]Who didn't bother to tell us what Sync value he chose[/Nb] THEN INPUT "Markus... What sync value did you use";A
60 IF A>0 AND A<256 THEN GOTO 90
70 PRINT "Doh, If I don't know the value then I can't try the Cauldron Example, lets ask again...":GOTO 50
80 Counter=Counter-1:PRINT "No, that value didn't work, just";Counter;" more values to try":GOTO 30
90 Print "Yeeeaaa, finally I have enough information to load the Cauldron example. Sync value is";A:END
100 Print "Doh, if he's not going to tell me I'm just going to have to guess after all":GOTO 30
(Probably full of errors that you DON'T need to point out to me :) )
Bryce.
Good idea...
Another is:
Just use the routine for what it's designed for.
(And when you make your own tapes, I'm sure, you can remember the sync value you used)
I'm interested in tape loaders, so I downloaded this. What's so special about this loader?
As far as I can tell, it's just a standard speccy turbo loader with a pulse width of 607 T states. That'd be on average a 1900 baud recording (1440 all ones-2880 all zeros), which is actually slower than the standard CPC SPEED WRITE 1.
EDIT: I'm not trying to diss your work, just interested why you'd use this over any other turbo loader... :)
Quote from: ralferoo on 22:05, 29 October 13
I'm interested in tape loaders, so I downloaded this. What's so special about this loader?
As far as I can tell, it's just a standard speccy turbo loader with a pulse width of 607 T states. That'd be on average a 1900 baud recording (1440 all ones-2880 all zeros), which is actually slower than the standard CPC SPEED WRITE 1.
EDIT: I'm not trying to diss your work, just interested why you'd use this over any other turbo loader... :)
I wanted to allow normal users like me, to be able to save such files to tape and read them.
For this I modified the Dinamic Loader / Save routine to a little RSX routine, which allows that.
It's not meant to be used by super-coder-hacker-mega-brains but by normal people, who just want to save / load a few files in a nice way to/from tape ;)
The coders here can code their loaders themselves, I think...
But people like me can't... So for me this is a helpful routine.
Quote from: Devilmarkus on 23:10, 29 October 13
The coders here can code their loaders themselves, I think...
But people like me can't... So for me this is a helpful routine.
I still haven't written a tape loader so this is useful.
However, if some kind soul wants to post a fast(er) spanish loader I'd also be very grateful :)
No worries ;)
My last reply was meant a 'bit' ironic :D
I know, it's not the fastest loader, but the almost most beautiful :D
Quote from: redbox on 00:14, 30 October 13
I still haven't written a tape loader so this is useful.
However, if some kind soul wants to post a fast(er) spanish loader I'd also be very grateful :)
Have you seen the bugfixed toposoft loader (http://www.cpcwiki.eu/forum/programming/spanish-style-loader/) by arnoldemu?
Quote from: Axelay on 08:44, 30 October 13
Have you seen the bugfixed toposoft loader (http://www.cpcwiki.eu/forum/programming/spanish-style-loader/) by arnoldemu?
No, I missed that one - thanks!
Quote from: Axelay on 08:44, 30 October 13
Have you seen the bugfixed toposoft loader (http://www.cpcwiki.eu/forum/programming/spanish-style-loader/) by arnoldemu?
Sure, I first worked with this. But as there is no save routine (You have to use 2CDT.exe), or I'm too blind to find one, I used the dinamic loader...
It's also bit faster.
Also it doesn't mess the registers etc... So very handy for keeping firmware etc. alive.
So - what's interesting about the Dinamic loader?
It works. :) And makes nice color effects. :)
Do we have to be from Dinamic Software to use it?
This reminded me of a project I started 2 years ago but never finished. Over the weekend I took another look and decided to start again.
This is the first prototype, running at 3680 baud, which is about double the speed of the Dinamic loader:
Phase 1 of turboloader on CPC (http://www.youtube.com/watch?v=8gSABi71YoM#ws)
It's just the loading screen - I just wanted something that I could check for obvious corruption!
I have plans to further massively improve speeds too, but I'll hold off on the details until it works... :D
Quote from: ralferoo on 09:38, 05 November 13
[size=78%]This is the first prototype, running at 3680 baud, which is about double the speed of the Dinamic loader:[/size]
It's just the loading screen - I just wanted something that I could check for obvious corruption!
I have plans to further massively improve speeds too, but I'll hold off on the details until it works... :D
Wow, that's fast!
I would imagine it's going to be very picky about how accurate the tape head azimuth alignment is though.....
Quote from: CanonMan on 15:02, 05 November 13
Wow, that's fast!
I would imagine it's going to be very picky about how accurate the tape head azimuth alignment is though.....
Hopefully not too picky. As I said when I looked at the Dinamic loader, it was using pulses at 607 T states apart. My loader is using pulses 542 T states apart, so only a 10% faster pulse rate than Dinamic when it's at it's maximum. It's all about optimising what pulses to send! 8)
I plan to test with some real (20 year old) tapes later this week - I just need to find some blank ones first! But I'm pretty confident it'll work fine as I know quite a bit about the theory and strive to keep the bias at 0 at all times... :D
Interestingly, I'm pretty sure this approach hasn't been used before on the CPC as it shows up serious bugs in both WinCPC and WinAPE as to how they handle 0x15 (pure data) chunks in CDT files. >:(
Quote from: CanonMan on 15:02, 05 November 13
Wow, that's fast!
I would imagine it's going to be very picky about how accurate the tape head azimuth alignment is though.....
Yes. Great for emulation. But senseless on real machines. Everything above about 2000 Baud makes no sense. That kind of tapes won't work after a year any longer. All that turbo loader fancy shmancy stuff is crap in real live. However a nice to have for emulation.[nb]On which I use DSKs instead of tapes of course!!![/nb]
Quote from: ralferoo on 15:50, 05 November 13
... as it shows up serious bugs in both WinCPC and WinAPE as to how they handle 0x15 (pure data) chunks in CDT files. >:(
What's about JavaCPC? It should work better.
That's really cool. Hope you get it working with real tapes!
Another use could of course be its implementation from an MP3 player (is this what you're doing in the video?) as I'd much rather load this fast on my 464 :)
Quote from: TFM on 18:50, 05 November 13
What's about JavaCPC? It should work better.
Yes, JavaCPC worked fine as far as I can tell (but my loading code wasn't working at all then, I was just testing being able to detect pulses). The problem with JavaCPC for me is that my only Windows box is too slow to run it at an acceptable speed, but that's more the fault of my PC! :(
Would be interesting to see how tapes (previously used OR not used) will be able to keep data at such high speeds. Charly (German forum) had problems to read Turbo Tapes of back the day (most could not be read), but anything using speed write 0 or 1 worked very well - even after decades.
Thinking of a tool to sense the integrity of the data, by analyzing the integrity of the frequency for every bit.
I think the best loader, is the loader of rescue to atlantis. You can't play mastermind in many games when a tape is loading...
Hmmm. Looks like I might have more hardware repair work in store for me... :(
Of my 3 464s, one doesn't have a working tape deck at all, one can't drive the motor and the last has a stretched belt that it struggles to load its own recordings made on SPEED WRITE 0.
So, the short version is that I have no idea if this will work on a real tape after all! >:(
Quote from: ralferoo on 15:50, 05 November 13
Interestingly, I'm pretty sure this approach hasn't been used before on the CPC as it shows up serious bugs in both WinCPC and WinAPE as to how they handle 0x15 (pure data) chunks in CDT files. >:(
Can you give me more information, and perhaps a test CDT so this can be fixed?
Sure, I'll make a test CDT tomorrow. The WAV works fine in WinApe though, so I just used that... :)
Here's a zip that shows the bugs in both emulators (with source). Load up showbug.cdt in an emulator. This cdt is just 2 other CDT concatenated, showbug-loader.cdt (showbug.asm) and bug.cdt (bug.py). There's also bug-44100.cdt which is the same thing exported at 44100Hz instead of 6451Hz (155us per pulse).
Expected behaviour is green/orange bars at different frequencies, there's a few seconds at each before it moves on to the next multiple.
WinCPC shows orange/pink for the frequency block as it returns data in bit 5 instead of bit 7 of port #F5xx.
WinAPE shows a high frequency pattern throughout the whole block. It seems to just be toggling the bit every 155us rather than using the input data. For the 44100 version, the bit seems to toggle faster than I can read it, but I assume it's around every 22us... :)
There's a WAV file for both CDTs that demonstrates the expected behaviour in WinAPE.
If real tapes can't keep up with that kind of speed then it's great as an exercise, but not of much use... What's the meaning in loading a CDT in an emulator? I can think of two cases:
-there's no disk dump
-for the nice sounds fx (I do that).
So using a turbo^2 loader would be meaningless in both cases...?
Quote from: Gryzor on 20:17, 09 November 13
If real tapes can't keep up with that kind of speed then it's great as an exercise, but not of much use... What's the meaning in loading a CDT in an emulator? I can think of two cases:
The plan is to have it usable on real tapes (although I might have to lower the speed a bit, we'll see...) If I wanted to just send from a PC soundcard to CPC it can be done much more quickly (as otla shows).
I'm only using an emulator because it's a lot quicker to develop and test that way. :)
Quote
-for the nice sounds fx (I do that).
I actually wrote the tape file generator first and the CPC loader later. For a while I was just listening and watching with the test program I already posted to repro the emulator bugs just because I like the noises!
I actually chose that particular baud rate as I get 9 bytes in almost exactly 312 lines so it makes nice patterns on the screen too, so I'll be a bit disappointed if I have to lower it! ;)
Quote from: Gryzor on 20:17, 09 November 13
If real tapes can't keep up with that kind of speed then it's great as an exercise, but not of much use... What's the meaning in loading a CDT in an emulator? I can think of two cases:
-there's no disk dump
-for the nice sounds fx (I do that).
So using a turbo^2 loader would be meaningless in both cases...?
Yes right, and in case you use a MP3 device for input on a real CPC, I guess raliferoo pointed that out before.
However, a MP3 device makes only sense if you already have it and can't afford a disc drive imho. But there is of course the sentimentality effect for some I could imagine.
CPCE is the more accurate emu for tape loading :)