CPCWiki forum

General Category => Programming => Topic started by: Devilmarkus on 15:54, 29 October 13

Title: Ripped Dinamic tape loader
Post by: Devilmarkus on 15:54, 29 October 13
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:
Code: [Select]
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...
Title: Re: Ripped Dinamic tape loader
Post by: Bryce on 16: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 :)

Bryce.
Title: Re: Ripped Dinamic tape loader
Post by: Devilmarkus on 16:57, 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.
Title: Re: Ripped Dinamic tape loader
Post by: Bryce on 17:41, 29 October 13
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.
Title: Re: Ripped Dinamic tape loader
Post by: Devilmarkus on 17:52, 29 October 13
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)
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 23: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... :)
Title: Re: Ripped Dinamic tape loader
Post by: Devilmarkus on 00:10, 30 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.
Title: Re: Ripped Dinamic tape loader
Post by: redbox on 01:14, 30 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 :)
Title: Re: Ripped Dinamic tape loader
Post by: Devilmarkus on 08:20, 30 October 13
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
Title: Re: Ripped Dinamic tape loader
Post by: Axelay on 09:44, 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?
Title: Re: Ripped Dinamic tape loader
Post by: redbox on 09:54, 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!
Title: Re: Ripped Dinamic tape loader
Post by: Devilmarkus on 10:53, 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.
Title: Re: Ripped Dinamic tape loader
Post by: Gryzor on 20:30, 31 October 13
So - what's interesting about the Dinamic loader?
Title: Re: Ripped Dinamic tape loader
Post by: TFM on 22:54, 31 October 13
It works.  :)  And makes nice color effects.  :)
Title: Re: Ripped Dinamic tape loader
Post by: remax on 23:17, 04 November 13
Do we have to be from Dinamic Software to use it?
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 10:38, 05 November 13
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
Title: Re: Ripped Dinamic tape loader
Post by: CanonMan on 16:02, 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.....
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 16:50, 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.  >:(
Title: Re: Ripped Dinamic tape loader
Post by: TFM on 19:47, 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]
Title: Re: Ripped Dinamic tape loader
Post by: TFM on 19: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.

Title: Re: Ripped Dinamic tape loader
Post by: redbox on 20:01, 05 November 13
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 :)
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 20:39, 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! :(
Title: Re: Ripped Dinamic tape loader
Post by: TFM on 20:48, 05 November 13
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.
Title: Re: Ripped Dinamic tape loader
Post by: dragon on 00:07, 06 November 13
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...
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 00:38, 06 November 13
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!  >:(
Title: Re: Ripped Dinamic tape loader
Post by: Executioner on 00:23, 08 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?
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 15:07, 08 November 13
Sure, I'll make a test CDT tomorrow. The WAV works fine in WinApe though, so I just used that... :)
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 11:42, 09 November 13
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.
Title: Re: Ripped Dinamic tape loader
Post by: Gryzor on 21: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...?
Title: Re: Ripped Dinamic tape loader
Post by: ralferoo on 21:41, 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!  ;)
Title: Re: Ripped Dinamic tape loader
Post by: TFM on 22:26, 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.
Title: Re: Ripped Dinamic tape loader
Post by: dlfrsilver on 23:19, 06 December 13
CPCE is the more accurate emu for tape loading :)