| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
New life for your underloved datassette unit :D
The first phase of testing just ended.
(Still in the packaging and refining phase)
But I wish to share with you all my latest accomplishment.
You might want to check this out:
https://twitter.com/zibri/status/1450979434916417540
and this:
https://twitter.com/zibri/status/1450979005117644800
The fastest example (11 kilobit/sec) has the same (or better) error rlsilience as "turbo250" but it is 3 times faster.
The slowest one (8 kilobit/sec) has the same error resilience as the standard commodore slow "save", but it is 100 times faster and twice as fast as turbo250.
;)
Notes:
1) faster speeds are possible if the tape is written with a professional equipment or hi-fi with a stabilized speed and virtually no wobbling.
2) if the tape is emulated (tapuino or similar projects) the speed can go up to 34 kilobit/sec.
3) even with datassette, higher speeds are possible but the highly depend on the status of the tape, the datassette speed and azimuth. |
|
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quite impressive, if it's really as reliable as traditional tape turbos or even the very conservative ROM tape routines.
Can you tell a bit more about the new tricks you apparently came up with? Tech details? Is it more than just shorter pulses, like three or even more pulse lengths? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quite impressive, if it's really as reliable as traditional tape turbos or even the very conservative ROM tape routines.
Can you tell a bit more about the new tricks you apparently came up with? Tech details? Is it more than just shorter pulses, like three or even more pulse lengths?
Yep. Exactly. All of the above.
I use 4 (5 with sync) pulses.
I also assign 00 and 11 to the higher frequency pulses so to achieve a sort of compression (00 and 11 are more frequent in an uncompressed file than 01 or 10 so they are assigned higher frequency pulses.. this is done dynamically and change change depending on the file).
And, hear, hear, I don't use timers :D
I found out that on the tape and cia timers there is a better way to create an interrupt:
By putting $4C in $DC0C and $XX in $DC0E and point the irq to $DC0C will make "magic" :D
IRQ will jump to $dc0c (also unlatching our DC0D in the process) and the JUMPS to $XX90 (for tape irq)
so at $XX90 I have my routine which will start exactly 9+3=12 cycles after the pulse.
Note:
the same can be achieved with timer A, B and TOD on both cias :D
I don't know if anyone ever used this method.. In some demos I saw them using an LDA or $04 in dc0c and an RTI in DC0E.
But the jump I came up with is way better.
An example using timers:
After setting up your timers, disabling and latchiong irqs, disabling roms and putting DC0C in $FFFA/FFFF
LDA #$0C
STA $DC0E
LDA #$4C
STA $DC0C
you could put:
70 70 0c 70 70 in (for example) $0C00
which will achieve this:
C00 >> C72 ; ON BRK
C01 >> C0F ; ON Timer A
C02 >> C05 ; ON Timer B
C03 >> C75 ; ON Timer A+B
C04 >> C12 ; ON TOD
The same can be done on CIA#1 :D
Anyway, I didn't use timers at all.
And the turboloader (differently from the others) is cycle accurate and has no jitter thus achieving a perfect accuracy.
Commodore has about 96 cycles separation between their
pulse frequencies. Using the same separation I can achieve 8 kilobit/sec.
But as the program is very accurate, I can use smaller separations, like many turbos do, but since I have no jitter I don't induce errors all programs so far do (including headalign which mainly shows on screen it's own jitter and not the truth). |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Studying the datassette I also found out many important notions I didn't know and most people are confused about:
The datassette has TWO important settings: the one everyone knows is the azimuth and there is another one on the motor.
The azimuth:
azimuth is thought to be something "depending on the tape you are reading". That's totally wrong:
there is a right azimuth and a wrong one.
The right one is when the head is perfectly parallel to the TAPE.
With headalign is not easy to get the right setting and I will soon also make a new alignment program.
The second setting involves the way the datassette manages speed.
Tapes are a pain in the ass because their speed changes depending on how far from the start you are recording.
That speed change is compensated and there is a screw on the motor to better fine tune that.
As you can see in the videos, I made the PILOT frequencies in a way that they create stable raster bars.
If you see them unstable it might depend on the rubber belt between the motor and the spindle, but it also might depend on the setting of this screw.
The guy who is tested the program, aligned his datassette on my advice and then set the screw (recorded and replayed my test pilot) until the bars were as stable as possible.
Now his datassette is almost perfect and he go up to 12 kilobit/second (writing+reading with the same datassette).
That speed could go up even more if the tape would be written by a high quality tape deck.
There are a number of possibilities and different settings.
I could set it up in a way that the result will be readable by a datassette but almost impossible to copy for example.
On a MASTER, this turbo can go up to 16kilobit or more (still haven't tested this)
On an EMULATED tape (ultimate2+, tapuino, etc) the turbo can easily go up to 30-34 kilobit/sec :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quite impressive, if it's really as reliable as traditional tape turbos or even the very conservative ROM tape routines.
Can you tell a bit more about the new tricks you apparently came up with? Tech details? Is it more than just shorter pulses, like three or even more pulse lengths?
About the reliability, it depends only on how you set it.
You will be able to set all parameters easily.
But from the tests done so far, with "wide" settings like 96 cycles separation between frequencies, the reliability is the same as commdore's.
And with the same "unreliability" of turbo250, I can achieve twice (or more) it's speed.
As I said we are still in the early testing stages.
The program is still a standalone PRG to be run over a pre-made TAP file (writte to a normal tape using the ultimate2).
In the next weeks, the loader will be included in the tap file.
After that also a save routine will be written.
As of now I didn't do all that because I already changed all the program twice improving stability and speed.
So until I will be totally satisfied with the final code, we will still be testing :D |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
"Tapes are a pain in the ass because their speed changes depending on how far from the start you are recording."
AFAIK the tape is dragged near where it is read by a so called "pinch roller" to make it move at constant speed. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
correct
(jumping via $dc0d is commonly known as the "ninja method") |
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
Quote:(including headalign which mainly shows on screen it's own jitter and not the truth).
Does this mean that a new headalign program would be a meaningful task for someone to take on, or are there already alternatives that work as they "should" in this regard? |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1409 |
Nice work Zibri
Just for reference, Thrust64 (Thomas Jentzsch) was using a seven pulse length loader for his own files 'back in the day' that managed a throughput of around 9kbits/s (using pulse lengths of (167+50*n cycles)), though his was only intended for personal use on his own hardware.
It would be interesting to compare how resilient his and yours are in practice. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: "Tapes are a pain in the ass because their speed changes depending on how far from the start you are recording."
AFAIK the tape is dragged near where it is read by a so called "pinch roller" to make it move at constant speed.
Yep.. to reduce the speed variation.
But there is.
Even with that. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Nice work Zibri
Just for reference, Thrust64 (Thomas Jentzsch) was using a seven pulse length loader for his own files 'back in the day' that managed a throughput of around 9kbits/s (using pulse lengths of (167+50*n cycles)), though his was only intended for personal use on his own hardware.
It would be interesting to compare how resilient his and yours are in practice.
what do you mean by "seven pulse length loader" ? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quote:(including headalign which mainly shows on screen it's own jitter and not the truth).
Does this mean that a new headalign program would be a meaningful task for someone to take on, or are there already alternatives that work as they "should" in this regard?
Indeed.
Headlign is a jitter displayer :D
It's code jitters and is totally unstable..
To really understand things I made a C64 "tape to tap" with a resolution of 2,4 or 8 cycles (standard tap file).
And I didn't see so many artifacts as in headalign.
So, indeed a new cycle exact headalign is due...
You can try, but not only you have to use my "irq method" but also be sure the code does not jitter and has even cycles.
Also you must be sure that wehn the IRQ kicks in, the cpu is executing a 2 cycle instruction and not a 3-7 cycle one or it will jitter by that amount.
If anyone wants I can provide the "engine" that get's you the number of cycles of a pulse.
But after that the number should drawn with an even cycle code with no jitter and as short as possible.
Otherwise you won't get the high frequencies.
By my tests, the datassette supports up to 12khz, perhaps a little more.. then the aplifier filter kicks in.
In reality it kicks in at 10khz.. but it has a slow slope.. until 11-12 khz pulse everything is fine... |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Nice work Zibri
Just for reference, Thrust64 (Thomas Jentzsch) was using a seven pulse length loader for his own files 'back in the day' that managed a throughput of around 9kbits/s (using pulse lengths of (167+50*n cycles)), though his was only intended for personal use on his own hardware.
It would be interesting to compare how resilient his and yours are in practice.
hmm 167 + 50*n means a frequency separation of 50 cycles (strange).
That can work but it will be very prone to errors.
In the videos on twitter, the frequency separation is 48 for the fast one (12kilobit/sec) and 96 for the "slow" one (8 kilobit/sec)
As you can see the "slow" one has double the error resilience as the fast one (and Thomas's).
I also tested all other separations. from 32 cycles.. they all work but if you want to be able to WRITE and the READ with a datassette you have to consider a double error.
That leads to a minimum of 40 cycles on a perfect datassette.
48 cycle separation was read 10 times over 10. on a perfect datassette.
If the same file (in wav) is NOT written by a datassette, then also a 32-40 cycle separation will be reliable to read on a datassette and also an intrinsic copy prtotection. Even copying using audio equipment will introduce an error big enough for it not to work anymore :D
Back in the day I would have been rich :/ |
| |
Copyfault
Registered: Dec 2001 Posts: 478 |
Quoting Zibri...
You can try, but not only you have to use my "irq method" but also be sure the code does not jitter and has even cycles.
... While I do appreciate your effort you have put in to bring the tape topic to new glory I think it's just fair to be careful when it comes to credits. Afaiu your approach is like "Ninja-method goes Tape jitter measuring", so the irq method is definately not yours. This doesn't mean that you copied it from there, I believe you had the idea on you own, but it's just not new.
However, applying this ninja-method to tape measuring hasn't been done before, that I'm pretty sure of.
Have to admit that I still have to sort all the information you give here; currently, the core benefits of this approach are not completely clear to me. Maybe I need more time to find the right path through this;)
What I think to have grasped is the potential to increase tape loading speed. Kudos for the effort, the numbers you tell here are really impressing! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: what do you mean by "seven pulse length loader" ?
Just as a comparison, with 48 cycles of separation and a starting frequency of 96 cycles (10khz on a pal c64)
my turbo achieves a speed of 11529.61 bit/sec
with a 96 cycles separation (which is as reliable as standard commodore saves) it achieves a speed of 8016.04 bit/sec
With a "sober" 80 cycle separation and 11khz of top "accepted" frequency, it goes at about 9257.72 bit/sec
any combination is possible.
the fastest turbo ever made public was the one used in the (horrible) game "Evil Dead". with the same "unreliability" I can get as high as 12kilobit/sec which is almost 3 times it's speed. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting CopyfaultQuoting Zibri...
You can try, but not only you have to use my "irq method" but also be sure the code does not jitter and has even cycles.
... While I do appreciate your effort you have put in to bring the tape topic to new glory I think it's just fair to be careful when it comes to credits. Afaiu your approach is like "Ninja-method goes Tape jitter measuring", so the irq method is definately not yours. This doesn't mean that you copied it from there, I believe you had the idea on you own, but it's just not new.
However, applying this ninja-method to tape measuring hasn't been done before, that I'm pretty sure of.
Have to admit that I still have to sort all the information you give here; currently, the core benefits of this approach are not completely clear to me. Maybe I need more time to find the right path through this;)
What I think to have grasped is the potential to increase tape loading speed. Kudos for the effort, the numbers you tell here are really impressing!
I never said "nobody did it before", I just said it I made it up and I din't know if it was used or not. But as far as I saw the "ninja method" does not involve a JMP in DC0C but something else.
Which makes it very different because the key is that JMP.
An RTI in DC0E steals too many cycles and needs the stack.
In my turbo I totally trash the stack and don't use it at all. (when needed I restore the tack before jumping to the game start).
I thought about many different implementations of my idea.. using timers or using the JMP in dc0c but still using timers... everything resulted in a longer and way slower code.
I think many people will benefit of this particular IRQ method, expecially in demos.
The advantage is that you start your code exactly at the 12 cycle after the "event" (timer or tape pulse or data from serial or iec).
The IRQ steals 9 cycles (odd) but the JMP is also an odd number.
So you start your code in even cycles. If you keep your code "EVEN" before the IRQ, you'l bee always in perfect sync with no jittering.
Putting instead an RTI in DC0E, requires 9(IRQ)+2(LDA in DC0C)+6(RTI) cycles which is 17 cycles against 12.
Also, not using timers allowed my code to be fast and short.
Timer calculations take cycles.
At the moment in my loader there are always 46 cycles free + 24 cyles 3 times over 4.
Enough for a nice sid tune or some raster effects :D
It's also possible to have the screen on but that would require a different file encoding and little slower throughput. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: correct
(jumping via $dc0d is commonly known as the "ninja method")
I sincerely never heard of it.
But I checked it and it does not do what I do.
I think you refer to put DC0C in the iRQ vector.
That's NOT just what I do.
The difference with my method to the "ninja method" is that I put a JMP in $dc0c
I mean:
lda #$4C
sta $dc0c
lda #$XX
sta $dc0e
and when the irq comes, it first jumps to dc0c and THEN it jumps to XX90 :D
That's what I don't think (I might be wrong) has ever been used. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting FranticQuote:(including headalign which mainly shows on screen it's own jitter and not the truth). Does this mean that a new headalign program would be a meaningful task for someone to take on, or are there already alternatives that work as they "should" in this regard? Not so sure about that.
The lion's share in jitter production is probably due to tape wobble. Measurement jitter (unstable interrupt-to-ISR latency) adds a bit on top.
Minimising the latter using the Ninja method surely has benefits, but they amount to minimising the already much smaller measurement error. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
ok, true... that just seems a bit pointless, whats the advantage? do you update dc0e/f elsewhere? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting FranticQuote:(including headalign which mainly shows on screen it's own jitter and not the truth). Does this mean that a new headalign program would be a meaningful task for someone to take on, or are there already alternatives that work as they "should" in this regard? Not so sure about that.
The lion's share in jitter production is probably due to tape wobble. Measurement jitter (unstable interrupt-to-ISR latency) adds a bit on top.
Minimising the latter using the Ninja method surely has benefits, but they amount to minimising the already much smaller measurement error.
Sorry but that's just wrong.
First (and again): this is NOT the ninja method.
Second: the jittering has nothing to do with the irq method. Even pointing the irq directly to my code, will cause NO jittering.
Third:
headlign has more than 20 cycle jitter along the program
tape wobble on a good datassette is about 8-10 cycles at most.
In some very old and bad units it can be even 12 or 16..
but EVEN if it was 20.. that's 20 + 20 of the headlign program.. they don't cancel each other. they SUM.
This and many more thoughts lead people to think the datassette was "bad" but actually it wasn't.
(I never liked it too.. at the time I had my beloved 1541 pretty soon after getting the C64) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriI don't know if anyone ever used this method.. In some demos I saw them using an LDA or $04 in dc0c and an RTI in DC0E.
But the jump I came up with is way better. FWIW, Softwired does.C:dd0c 4C 83 05 JMP $0583 when handling a timer interrupt, acknowledging it while executing the jump, saving a cycle over BIT $DD0D. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: ok, true... that just seems a bit pointless, whats the advantage? do you update dc0e/f elsewhere?
for the tape (or timers) you only neeed DC0D.
a JMP instruction in DC0C will unlatch the IRQ (4 cycles saved) and then jmp immediately to DIFFERENT locations depending on the IRQ received.
Example:
lda #$4c
sta $dc0c
lda #$0a
sta $dc0e
Now.. a BRK will cause a jump to $A00
a pulse from tape will cause a jump to $A90
and with timers irq on there will be jumps to:
A01
A02
A03
A04
A05... etc etc
so it makes possible with the right code at $A00
to jump to different locations in your code without even having to check which irq happened.
That I call a HUGE advantage and I never saw that used anywhere in this way. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriI don't know if anyone ever used this method.. In some demos I saw them using an LDA or $04 in dc0c and an RTI in DC0E.
But the jump I came up with is way better. FWIW, Softwired does.C:dd0c 4C 83 05 JMP $0583 when handling a timer interrupt, acknowledging it while executing the jump, saving a cycle over BIT $DD0D.
I didn't know that...
nice. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriI don't know if anyone ever used this method.. In some demos I saw them using an LDA or $04 in dc0c and an RTI in DC0E.
But the jump I came up with is way better. FWIW, Softwired does.C:dd0c 4C 83 05 JMP $0583 when handling a timer interrupt, acknowledging it while executing the jump, saving a cycle over BIT $DD0D.
Just an info.. I donwloaded SOFTWIRED because I love demos, but it does not work on VICE...
Do you know why? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
dont use vintage vice :) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
x64sc >>>>>>> dogshit > x64 :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: dont use vintage vice :)
Do you call
3.5 r40906M
(GTK3 3.24.30, GLib 2.70.0, Cairo 1.17.4, Pango 1.48.10)
vintage?? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
it works fine in 3.5 - ie what krill said :) (yes x64 is vintage) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: x64sc >>>>>>> dogshit > x64 :D
LOL :D
ok.. it works in x64sc
I wonder why they don't keep x64.exe up to date with x64sc.exe |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: it works fine in 3.5 - ie what krill said :) (yes x64 is vintage)
Then, update it to be in par with x64sc :P |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
[OT] Use x64sc. Uses the novel Quiss+Copyfault method of getting to a specified beam X position to set up a stable raster timer interrupt, without accessing VIC registers and in just a few bytes. .cerror * != $08a3, "sync not at $08a3"
sync = * + 1
ldx #$9e
ldy #8
cpx #0
bne sync |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
x64sc is the updated emulator. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriI don't know if anyone ever used this method.. In some demos I saw them using an LDA or $04 in dc0c and an RTI in DC0E.
But the jump I came up with is way better. FWIW, Softwired does.C:dd0c 4C 83 05 JMP $0583 when handling a timer interrupt, acknowledging it while executing the jump, saving a cycle over BIT $DD0D.
Back to the topic.. ok.. I don't know about this 2021 demo.
But anyway nobody used that with tape :P
The strong point of my tyurbo is not the irq ... the irq just saves a few cycles (and I have plenty to spare.. more than 40-60).
The reasons my turbo works are others. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
The JMP saves a few cycles on IRQ dispatch, minimising overall execution time per pulse.
But most of the measurement error would come from unstable ISR latency, i.e. whatever opcode was executing when the interrupt triggered would delay handling it by a variable amount of cycles.
Do you correct for that somehow? |
| |
iAN CooG
Registered: May 2002 Posts: 3193 |
> I wonder why they don't keep x64.exe up to date with x64sc.exe
If it was possibile there would be no need for a x64sc.
X64 uses a faster but inaccurate emulation, x64sc is more accurate but heavier on the host cpu. Choose your destiny. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: x64sc is the updated emulator.
x64sc takes as much as double the cpu time as x64.exe.
except for a few demos, everything I throw at it works.
and it's bugs are the same as in the x64sc version.
What an update!
lol
please. stay on topic anyways. I don't want this to become a circus again. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: > I wonder why they don't keep x64.exe up to date with x64sc.exe
If it was possibile there would be no need for a x64sc.
X64 uses a faster but inaccurate emulation, x64sc is more accurate but heavier on the host cpu. Choose your destiny.
I know.. but most of the times the inaccuracies of x64.exe are irrelevant.
And, personally, I don't find x64sc so much more accurate.
cpu speed still wobbles and is never a "still" 100% even in the sc version. |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1409 |
Quoting Zibriwhat do you mean by "seven pulse length loader" ?
He used seven different pulse lengths. The shortest outputted a pair of bits, the other six groups of three.
Quote:hmm 167 + 50*n means a frequency separation of 50 cycles (strange).
That can work but it will be very prone to errors.
Well yes, as I said, he only was using it to load back on the drive he used to record on. Apparently it worked well enough for that purpose.
I mostly wanted to point out that experimenting with frequency separations that low is really not that groundbreaking. We've known for decades that separation 50 is really pushing it, and 100 is pretty safe. |
| |
Copyfault
Registered: Dec 2001 Posts: 478 |
Quoting ZibriSorry but that's just wrong.
First (and again): this is NOT the ninja method.
... Yes, you are right. Please take my apollogies to have brought this up in the first place.
But: there *is* a strong parallel in using appropriate IO regs as a jump vector, by cleverly placing a JMP instruction in a suitable IO register.
Quoting Zibrifor the tape (or timers) you only neeed DC0D.
a JMP instruction in DC0C will unlatch the IRQ (4 cycles saved) and then jmp immediately to DIFFERENT locations depending on the IRQ received.
Example:
lda #$4c
sta $dc0c
lda #$0a
sta $dc0e
Now.. a BRK will cause a jump to $A00
a pulse from tape will cause a jump to $A90
and with timers irq on there will be jumps to:
A01
A02
A03
A04
A05... etc etc
so it makes possible with the right code at $A00
to jump to different locations in your code without even having to check which irq happened.
That I call a HUGE advantage and I never saw that used anywhere in this way. Ok, this post made it clear to me. Thanks! Though I think it might cause problems when having both Timer A and Timer B active, since the routine that will be jumped to is the same, just with one byte offset. Using DC0D as hi-byte of the JMP is not doable, right? Would need a TOD-register with Bits 5/6 active I guess...
Quoting KrillThe JMP saves a few cycles on IRQ dispatch, minimising overall execution time per pulse.
But most of the measurement error would come from unstable ISR latency, i.e. whatever opcode was executing when the interrupt triggered would delay handling it by a variable amount of cycles.
Do you correct for that somehow? If understood this correctly there's no dejittering going on... but..
what about chaining the ninja-method (here I really mean the real dejittering method Ninja came up with long ago) and then jumping to $dc0c which'd handle the different IRQ causes? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: The JMP saves a few cycles on IRQ dispatch, minimising overall execution time per pulse.
But most of the measurement error would come from unstable ISR latency, i.e. whatever opcode was executing when the interrupt triggered would delay handling it by a variable amount of cycles.
Do you correct for that somehow?
No need to correct it.
In my code the amount of cycles is not variable because all "interruptable" code is made of 2 cycle instructions only :D
so whenever the IRQ happens, I get control at the 12 cycle mark. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
@Copyfault: we are slightly off topic here.
but as I said to chain the JMP in dc0c to the timers all is needed is a code like this at XX00:
example:
.C:0a00 70 70 BVS $0A72
.C:0a02 0C 70 70 NOOP $7070
A00 >> A72 ; ON BRK
A01 >> A0F ; ON Timer A
A02 >> A05 ; ON Timer B
A03 >> A75 ; ON Timer A+B
A04 >> A12 ; ON TOD
putting for example (but there are more combinations)
70 70 0C 70 70
will cause a different jump for every situation :D |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriNo need to correct it.
In my code the amount of cycles is not variable because all "interruptable" code is made of 2 cycle instructions only :D
so whenever the IRQ happens, I get control at the 12 cycle mark. If the interruptible code is a bunch of NOPs, then you'd have a jitter of 1 cycle. This is quite small, of course, and may not be reducible further. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: @Copyfault: we are slightly off topic here.
but as I said to chain the JMP in dc0c to the timers all is needed is a code like this at XX00:
example:
.C:0a00 70 70 BVS $0A72
.C:0a02 0C 70 70 NOOP $7070
A00 >> A72 ; ON BRK
A01 >> A0F ; ON Timer A
A02 >> A05 ; ON Timer B
A03 >> A75 ; ON Timer A+B
A04 >> A12 ; ON TOD
putting for example (but there are more combinations)
70 70 0C 70 70
will cause a different jump for every situation :D
Novel approach! I'll probably use that someday! |
| |
ws
Registered: Apr 2012 Posts: 251 |
Is there any data on how the reliability of reading standard-recorded tapes is affected by this method?
Like does it introduce more noise/errors due to sampling more often, or is this just an overall better way to read from tape?
(If i read a value 3 times more often, it can be wrong 3 times more often, - do i deal with that yes/no&how?) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Is there any data on how the reliability of reading standard-recorded tapes is affected by this method?
Like does it introduce more noise/errors due to sampling more often, or is this just an overall better way to read from tape?
(If i read a value 3 times more often, it can be wrong 3 times more often, - do i deal with that yes/no&how?)
Hmm not exactly...
Imagine this situation: run headalign...
You will see 2 vertical lines on normal turbos (4 in mine).
As you will see they are "separated" by "a space".
Imagine to draw a THIN line bewteen them and assign 4 different values instead of the usual 2.
Now, the ability of my program is to draw those lines perfectly.
It's then up to the real datassette status and alignment and wobbling how variable will be the "data" lines.
Nonetheless every other program I saw add a huge jitter or imprecision in "discerning what is what". My program just does not have that problem and that allows smaller "gaps" between those "lines" without any loss.
Then again if I use the same GAPS (around 96 cycles) commodore uses, I still can achieve 100 times their speed (and 2 times turbo250) preserving the error resilience.
I tried to explain this as simple as I could.
There is no noise involved.
The datassette has a low pass filter in it's amplifier which cuts everything above 10khz (but not abruptly). Frequencies up to 11196 hz (perhaps even 12khz) are possible but a little less reliable and way more dependent on the azimuth.
About the azimuth, the tape head must be perfectly parallel to the magnetic tape.
If it's not, even slightly, higher frequencies will be affected first... then the more it is "slanted" the more frequencies will be "mixed up"...
Anyway, even at lower frequencies my turbo performs greatly.
And there will be parameters so everyone can set it up as they want and you will be very welcome to make tests, improvements , even challenges :D
Before someone asks: why TWO bits at a time and not 3 or 4 or even 8?
Because the speed won't improve by much.
With only 2 bits I can ssigne the more common ones (00 and 11) to the highest frequencies and so to a higher speed.
It the data is not compressed, that achieves a great compression on a frequency level.
I am studying some more improvements before starting to write all the "api", but as far as we tested, more complexity does not affect too much the performance. But I might be wrong on this. We will see.
This is still in the early stages of testing. I just wanted to share with you all what has been done so far. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriNo need to correct it.
In my code the amount of cycles is not variable because all "interruptable" code is made of 2 cycle instructions only :D
so whenever the IRQ happens, I get control at the 12 cycle mark. If the interruptible code is a bunch of NOPs, then you'd have a jitter of 1 cycle. This is quite small, of course, and may not be reducible further.
Yep.. on real hardware that could happen but I don't consider one cycle a "jitter".
I am developing mostly on an emulator and since tap files are quantized by 8 cycles I had to do most of the work on paper.
Anyway, a one cycle jitter won't affect the actual accuracy at all.
I went up to 8 cycle per symbol at 17.5 KHZ on an emulated tape with no problems. On a real tape if it's the datassette writing the file (consider that as a COPY of a master) the maximum speed we achieved was about 12 kilobit or little more than that.
If the master would be written by a professional device I am sure the speed could go way up and still be readable by a standard datassette. And you all will be very welcom to try that.
Also, about that, most programs I saw converting TAP to WAV seem to be wrong IMHO.
I created a tap 2 wav in python which generates a waveform that does not need to be inverted (it's simmatrical on the horizontal axis, and it works nicely with every device I threw it at. More on this later. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
"tap files are quantized by 8 cycles" - I was very annoyed when I found that. Almost annoyed enough to create a more accurate format and add it to an emulator. :) |
| |
morphfrog
Registered: Mar 2002 Posts: 33 |
Quote: The first phase of testing just ended.
(Still in the packaging and refining phase)
But I wish to share with you all my latest accomplishment.
You might want to check this out:
https://twitter.com/zibri/status/1450979434916417540
and this:
https://twitter.com/zibri/status/1450979005117644800
The fastest example (11 kilobit/sec) has the same (or better) error rlsilience as "turbo250" but it is 3 times faster.
The slowest one (8 kilobit/sec) has the same error resilience as the standard commodore slow "save", but it is 100 times faster and twice as fast as turbo250.
;)
Notes:
1) faster speeds are possible if the tape is written with a professional equipment or hi-fi with a stabilized speed and virtually no wobbling.
2) if the tape is emulated (tapuino or similar projects) the speed can go up to 34 kilobit/sec.
3) even with datassette, higher speeds are possible but the highly depend on the status of the tape, the datassette speed and azimuth.
Intresting and very impresssive!
How fast is this compared to the fastet tapeloader I know of Gyrospeed? ( GyroSpeedWin ) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriBefore someone asks: why TWO bits at a time and not 3 or 4 or even 8?
Because the speed won't improve by much.
With only 2 bits I can ssigne the more common ones (00 and 11) to the highest frequencies and so to a higher speed.
It the data is not compressed, that achieves a great compression on a frequency level. More than 4 pulse widths still look quite promising, imho: Tape loaders using more than two pulse widths for data shows 7 pulse widths to be pretty close to optimal - this could squeeze out some more density using information theory, on top of the more or less maxed-out physical optimisations.
The data should be compressed, though, as hard as possible. The more entropy, the better overall results can be expected. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:"tap files are quantized by 8 cycles" - I was very annoyed when I found that. Almost annoyed enough to create a more accurate format and add it to an emulator. :)
.tap format supports cycle exact pulse timing just fine
In TAP version $01 files, the data value of $00 has been re-coded to represent values greater than 255 * 8. When a $00 is encountered, three bytes will follow which are the actual time (in cycles) of a pulse
https://vice-emu.sourceforge.io/vice_17.html#SEC330 |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
I know, but there is a bug in the Ultimate2+.
Writing V1 taps makes a mistake on the 00 XX XX XX code.
Anyway,
This is the latest version:
Now the loader is ON TAPE and it is recorded only ONCE and not twice as commodore usually does but it is indeed in commodore standard.
By the way this is a different tester, with a different (and slightly out of speed datassette) and a c64c (I removed the "digi boost" from the loader because it was too loud on a breadbin, but on a c64c you can barely hear the sounds)
Enjoy!
https://twitter.com/zibri/status/1451954596251832327
As of now, the "fast" "non master" version takes 50 seconds to fully load from when you press play on tape to when the game actually starts :D
The "relaxed timings" version (which works also on datassettes in "bad" shape) takes a total of 59 seconds from LOAD to GAME. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:I know, but there is a bug in the Ultimate2+.
Writing V1 taps makes a mistake on the 00 XX XX XX code.
it uses the exact cycle timings from the tap - the mistake may be to expect to read back those exact timings too. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:I know, but there is a bug in the Ultimate2+.
Writing V1 taps makes a mistake on the 00 XX XX XX code.
it uses the exact cycle timings from the tap - the mistake may be to expect to read back those exact timings too.
Nope.. I tested it.. there is something wrong in the files written with the ultimate if the timings are expressed in 00 XX YY ZZ.. vice is fine.
Infact in vice it works.
How can you make such assumptions when you don't even know my code?
Can you really do something more constructive than giving air to your teeth? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: I know, but there is a bug in the Ultimate2+.
Writing V1 taps makes a mistake on the 00 XX XX XX code.
Anyway,
This is the latest version:
Now the loader is ON TAPE and it is recorded only ONCE and not twice as commodore usually does but it is indeed in commodore standard.
By the way this is a different tester, with a different (and slightly out of speed datassette) and a c64c (I removed the "digi boost" from the loader because it was too loud on a breadbin, but on a c64c you can barely hear the sounds)
Enjoy!
https://twitter.com/zibri/status/1451954596251832327
As of now, the "fast" "non master" version takes 50 seconds to fully load from when you press play on tape to when the game actually starts :D
The "relaxed timings" version (which works also on datassettes in "bad" shape) takes a total of 59 seconds from LOAD to GAME.
I just made also an EMU-ONLY (means it works only on emulated datassette but on real hardware) version which loads at 30.5 kilobit per second :D
It works in VICE and probably on the Ultimate2 emulated tape (being tested right now).
Not so useful and I can go way faster than that on an emulated datassette. On a previous test I hit 34 kilobit/s.
As of now anyway both the slow and fast version work pretty well on a normal datassette.
The reason of some glitches we had was due to my testers skipping part of the pilot tone.
The pilot tone is pretty useless but it gives time to the datassette to gain a uniform speed.
That needs a minimum of 5-6 seconds.
On emulated tapes is not even needed but on the real thing it is very important to hit play at least 8 seconds before the real data begins (the commodore standard loader I mean). |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
If some of you wants to test an early beta (tap and wav provided), let me know.
No need to test on emulators or FPGAs...
Only on real DATASSETTE (C2N) or compatible units. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
If anybody tries this on hw, it would be interesting to see how it compares to Datassette RLL Mastering Demo. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:Nope.. I tested it.. there is something wrong in the files written with the ultimate if the timings are expressed in 00 XX YY ZZ.. vice is fine.
Infact in vice it works.
That doesnt make any sense. what are you even comparing there? It still sounds like you are expecting to read back the exact timing written to a real tape, like you can do in VICE (which doesnt emulate the properties of the tape that would prevent doing it). Ie if you write a tap in vice and then write this to a real tape with 1541U, the timing will not match what you get when writing directly to the real tape from a c64. That is expected. And that is also why socis RLL demo does not work in VICE, unless you create a .tap from a previously written real tape.
Quote:Can you really do something more constructive than giving air to your teeth?
just post the damn thing so we can have a look. the entire thread is basically hot air until now. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:Nope.. I tested it.. there is something wrong in the files written with the ultimate if the timings are expressed in 00 XX YY ZZ.. vice is fine.
Infact in vice it works.
That doesnt make any sense. what are you even comparing there? It still sounds like you are expecting to read back the exact timing written to a real tape, like you can do in VICE (which doesnt emulate the properties of the tape that would prevent doing it). Ie if you write a tap in vice and then write this to a real tape with 1541U, the timing will not match what you get when writing directly to the real tape from a c64. That is expected. And that is also why socis RLL demo does not work in VICE, unless you create a .tap from a previously written real tape.
Quote:Can you really do something more constructive than giving air to your teeth?
just post the damn thing so we can have a look. the entire thread is basically hot air until now.
The only one who is hot air in this scene is you.
I even posted the videos shot on real hardware showing two different parameters working.
I'm still testing anyway and I WILL TAKE MY TIME, so STFU.
And again. On commodore standard slow save, the frequency gap is of 96 cycles. I can use 80 with more accuracy and obtain 8 kilobit/s with the same error resilence.
Obviously I can shorten the gap up until 40-32 cycles and save a master tape recording it with a professinal tape deck and it still works when read on datassette.
But when you write and then read you induce a double error.
Safe settings are around 48-56 (11/10 kilobit/s) cycles of frequency separation, if you want to write and then read with any other datassette and even in bad shape, then you have to increase the gap to at least 80-96 cycles (which still beats turbo250 by TWO TIMES) and then you'll have no problems in any situation. In any other , even the normal commodore save would fail.
Sorry for the rant to the usual moron, guys. He is just not able to shut up. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
I like how you ignore what was written and then repeat some unrelated babble combined with carefully crafted ad hominem. Good work! |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
But what keeps you from releasing a preliminary version along with the announcement in this thread's original post, which everybody can test for themselves and report problems, so you can put out a patch release some time later? :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillBut what keeps you from releasing a preliminary version along with the announcement in this thread's original post, which everybody can test for themselves and report problems, so you can put out a patch release some time later? :)
That is exactly my intention.. but for now is all very manual.. I have to automate things a little... to encode loader+game i have to do everything mostly manually as of now.
Perhaps I was wrong in posting the videos so early but you know... I was amazed that it worked so well on real hardware.
Imagine that the guys who make "CORE32" are updating their device because the fastest version of my program exposed a small timing bug :D
P.S.
As of now this has been tested mostly on PAL C64.
ON NTSC c64 the frequencies will be higher on tape and perhaps can give some problems. That's why I need some time to add some parameters.
If you want a sneak peek I can manually prepare a version for you if you are willing to test.
Drop me a message if you are. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Here's my more or less working attempt just because I was bored. I just modified an old project right now to see if I could match Soci's RLL-attempt using a two pulse loader only, and this at least generates a TAP that can be written and loaded on my C2N. I somehow doubt if I can successfully load it on another C2N than what is used to write it with, though... but here it is anyway. No guarantees!
Archive includes the exe to create a .tap-file, the tap-file I wrote and the resulting tap-file from re-dumping just as a proof it still loads in VICE (you may need to disable wobble emulation).
https://colaku.com/~tomsk/pointless.zip |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCHere's my more or less working attempt just because I was bored.
Would you be so kind to open your own thread for your own stuff, please? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
P.S.
I never heard nor tried RLL so I can't compare to it.
I just have to finish this first.
Then I will release a couple of TAP files for you to play with. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quoting ZibriQuoting SLCHere's my more or less working attempt just because I was bored.
Would you be so kind to open your own thread for your own stuff, please?
Not so much stuff, only contributing to the discussion with another reference point than Soci's RLL-based loader, and proof of concepts. Nothing I'm actively working on so creating an entire thread just for that seems silly :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Today's update:
the loader shrunk a little and improved.
Now I am starting to put parameters.
Today's game "Pharaohs curse" in it's original version, loads at 9150 bit per second at 80 cycle frequency "bandwidth" (or should I say accepted range?). As reliable as a commodore save.
Details:
The actual turbo data loads in 41 seconds.
The loader loads in about 21 seconds from tape (but if put on a cartridge in the future then that won't count).
I can post a video but it would be on emulators because it still needs to be tested on real hardware (but the standard is the same as before, so it will work unless I introduced some new bugs in the first refactoring).
If someone wants to be a beta tester, just write me a message, but no emulators. Only with real hardware.
Emulator tests are ongoing with core32/cute32 and they already hit 34 kilobit/sec. |
| |
Adam
Registered: Jul 2009 Posts: 323 |
Quote: Quoting SLCHere's my more or less working attempt just because I was bored.
Would you be so kind to open your own thread for your own stuff, please?
no code, no examples, only tweets and "just trust me, bro!" - ah, classic zibri. walls of text with nothing to show for it.
you're in no position to tell anyone what to do. never will be. would you be so kind as to go back to facebook or open up your own personal blog somewhere else? that'd be great, thanks. |
| |
bugjam
Registered: Apr 2003 Posts: 2589 |
Relax, no harm done here.
Personally I find this thread fascinating, even though I don't understand much of it. :) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Would love to see how this stacks up against Gyrospeed.
GyroSpeedWin
Maybe if we could get statmat to shoehorn Zibri's code into Gyrospeedwin, I could test out writing some large TAPs to C90 tapes to see how Zibri's loader holds up on a huge mixtape. |
| |
ws
Registered: Apr 2012 Posts: 251 |
semi-related:
did anyone yet write a tool that digitizes audio from datasette? (like a datasette-based sampler, any links greatly appreciated)
and: is there already a datasette audio synthesizer that generates audio on a tape that then afterwards can actually be played on a normal cassette player? think "c64-bassdrum-generator-->audio to datasette"
just some friday-night-ratskrone export thoughts. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quote: semi-related:
did anyone yet write a tool that digitizes audio from datasette? (like a datasette-based sampler, any links greatly appreciated)
and: is there already a datasette audio synthesizer that generates audio on a tape that then afterwards can actually be played on a normal cassette player? think "c64-bassdrum-generator-->audio to datasette"
just some friday-night-ratskrone export thoughts.
I think there was a release doing this a few years ago, not sure.
I did a small hack trying this in my youth, as I assume many others did. It's going to be rather limited as the input is single edge detection only and the output is a one bit on or off. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
there have been various such programs (its trivial to do) - the quality is simply terrible :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: there have been various such programs (its trivial to do) - the quality is simply terrible :)
hahahah. only you are trivial and terrible.
and there was no such program as mine.
Go back to your lair and fix all the mess you did in vice.
Facts will speak for themselves when it will be finished and ready. And there will be instructions also to properly setup a datassette that even a "genius" like you can understand.
P.S.
My results are being checked by professional engineers and not "experts" like you. Nobody will care of your opinion and my results can be proven scientifically and practically.
Every wrong result will be due to a wrong settings of the datassete, but even in that case there will be slightly slower versions which will work on any datassete with a higher error tolerance than any other turbo.
In other words: using the "same" error tolerance of other programs, my turbo is 3 times faster on average. Using a better error tolerance is about 2 times faster and using a WIDER error tolerance is still 30% faster than the fastest turbo ever done.
Period.
If you think it is impossible I invite you to make a public bet.
I can cover asd much as you want to put in the bet.
Or just quit and shut up. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: there have been various such programs (its trivial to do) - the quality is simply terrible :)
about "it'ìs trivial to do":
sure, as you usualyy do, copying other people programs, it can be trivial. Code one from scratch and show me how trivial it is then we will compare the results.
But the judges will be engineers not your friends/clan :P
Wanna compete? Do it. Or STFU. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting wssemi-related:
did anyone yet write a tool that digitizes audio from datasette? (like a datasette-based sampler, any links greatly appreciated)
Yes and no. I coded one to test out my new turbo program, but the datassette does not know what amplitude is and only understands "rising edges" of waveforms, so you will get a sampler at 1 BIT which will sound exactly like the "impossible mission" opening speech :D |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
trivial programs that do this were all over the mags in the 80s. quick search also finds Fantasys 1Bit Tape Sampler or Tape Sampler 80% (there are surely more) |
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
@Zibri: You do realize that Groepaz was talking about the "digitize audio from casette" issue, rather than your turbo, right? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: @Zibri: You do realize that Groepaz was talking about the "digitize audio from casette" issue, rather than your turbo, right?
OOps :D
For once I didn't. (since he didn't quote the message and was off-topic)
I thought he was referring the last message IN TOPIC.
Anyway, sorry if I misunderstood this time.
But the bets are open anyways.
:D |
| |
ws
Registered: Apr 2012 Posts: 251 |
@ all : i see and understand. and thanks for the links! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Update:
after a round of successful tests on the loader,
I finished today the first draft of save program (the one that creates on a C64 and on tape, everything needed).
It creates:
the main loader in standard format
the pilot with stable rasterbars
the turbo "data" at 10 different "speeds".
and a short final pilot (ignored by the loader except for the first pulse.. I can remove that but I like to have a small ending gap)
Also the writing program has absolutely NO JITTER and is cycle exact.
Now, after/during the next round of tests on real hardware, I will put some parameters and cleanup the messy first draft.
I have a question for you:
how would you like it wo work?
As of now it works by issuing:
SYSXXXXX"filename",speed (where speed is a number from 0 to 9)
The test program just saves all memnory from 0801 to bfff and the test loader is setup to load and jump to 16384.
What do you think is the best way to go?
I use some zeropage pointers for start,end and jump (so some pokes will be needed before issuing SYSXXXX or what?
I know I could use: sysXXXX"filename",speed, start,end,jump
but using the kernel to get the parameters uses memory so, as of now I get the parameters manually.
Sure I can do it anyways but it will make the program way bigger.
As of now the loader is 214 bytes.
The same program (which includes the loader) is about 7 hundred.
Any idea?
P.S.
This won't matter much in the future because it will probably go in a cartridge but it could be nice as a standalone utility to load from a disk drive or other device. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Standalone utility is fine, as is one built into a kernal ROM.
Most practical would be a loader that can take a program of up to 202 blocks and master it to tape (or TAP), much like Gyrospeed, or Richard Bayliss' tape mastering tools. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriI know I could use: sysXXXX"filename",speed, start,end,jump
but using the kernel to get the parameters uses memory so, as of now I get the parameters manually.
Sure I can do it anyways but it will make the program way bigger. Getting the parameters with ROM calls doesn't take all that much code, actually.
But why is the size so important? Being able to save a 202-blocks program from $0801 to $d000 leaves a lot of space for the save routine.
It could even implement something like MASTER"filename",start,end,entry,speed - or maybe extend the SAVE command with the parameters, for most intuitive usage. |
| |
Peacemaker
Registered: Sep 2004 Posts: 275 |
What a toxic guy. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriI know I could use: sysXXXX"filename",speed, start,end,jump
but using the kernel to get the parameters uses memory so, as of now I get the parameters manually.
Sure I can do it anyways but it will make the program way bigger. Getting the parameters with ROM calls doesn't take all that much code, actually.
But why is the size so important? Being able to save a 202-blocks program from $0801 to $d000 leaves a lot of space for the save routine.
It could even implement something like MASTER"filename",start,end,entry,speed - or maybe extend the SAVE command with the parameters, for most intuitive usage.
well.. let's say you load a file from 0801 to CFFF.
if you call E1D4 to get the parameters from the sys line you will get an out of memory error.
So I didn't call $E1D4 and got the filename and speed (single digit 0-9) by myself.
As of now the "saver" can save anything from $400 to $CFFF.
The next version (which will need a heavy rewrite) will probably support a save from $400 to $FFF0 it's not difficult to do but I need to rewrite and recalculate everything because of how the loader is made.
(An example: the great giana sisters file "1" loads from $820 to $FFF0 and at the moment is not possible).
Works pretty fine with anything in the range $400-$CFFF.
The preliminary version is now sent to my testers and has only the filename and speed parameters, saves from 0801 to cfff and jumps to $16384. Parameters will come immediately after and that's why I asked how would you prefer them.
Here is the updated speed table (test file is pharaoh's curse)
============================================
S | C | B | PAL Bitrate NTSC | Reliability
--------------------------------------------
0 24 24 5154.12 5350.19 Best / Old D
1 23 22 5497.19 5706.31 High / Old D
2 22 20 5889.19 6113.22 High / Any D
3 21 18 6341.39 6582.61 Best / Any D
4 20 16 6868.8 7130.09 Good / Any D
--------------------------------------------
5 19 14 7491.9 7776.9 Best / Same D
6 18 12 8239.33 8552.76 Good / Same D
7 17 10 9152.42 9500.58 Avg / Same D
8 16 8 10293.12 10684.67 Low / Same D
--------------------------------------------
9 15 6 11758.64 12205.94 Low / Master
-------------------------------------------
PAL C Center Freq: 123156 hz / C
NTSC C Center Freq: 127840.875 hz / C
PAL B Badwidth: 123156 hz / B
NTSC B Badwidth: 127840.875 hz / B
-------------------------------------------
File lenght: 47103 bytes.
-------------------------------------------
Note:
On NTSC systems the resulting frequencies will be slightly
higher than on PAL, but there will be more bandwidth for each symbol.
Note:
Speeds 0 to 2 are highly reliable.
Speeds 3 and 4 are more reliable than any other turbo
Speeds 5 to 8 are less reliable and dependent
on a good alignment and fitness of the datassette.
speed 9 worked on a particularly good datassette but it is meant
for masters only.
In our tests, speed 8 was successfully written and read back
by a datassette in good condition.
As usual your mileage may and will vary, but even at it's slowest
speed this turbo beats any other by 50% or more and up to 300%.
For personal archiving (reading and writing with the same datassette)
Speeds 5-8 are suitable.
For compatibility with other (out of speed) datassettes,
speeds 0-4 are more indicated. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Update:
nevermind. I was getting "out of memory" only for the name string. for the numbers no problem so I addes start,end and jump.
As of now the syntax is:
SYS52480"filename",speed(0-9),start,end,entry
P.S.
It still needs some refactoring but as of now I used every single byte of the last 2 pages at $cd00-cfff and every single byte of the 213 bytes of the loader :D
Just tested it and it worked with both archon and pharaoh's curse.
I am sure some games will give problems because the loader does not have the cleanest of the exits (euphemism).
And since it's impossible to forsee any situation,
as of now the loader (which trashes the stack too)
exits in this way:
it pushes the entry point (minus one) to the stack, then
jumps to $FF5B.
I don't have space to do much more than a jump and I think FF5B is a good candidate. If you have better ideas, do tell.
Obviously the loader could expand to the video memory too, but it will take longer to load and I don't like that. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Update:
the new loader seems to work.
It can load from $4C6 to $FFF9 (writing in ram below roms and chips).
Since there is not a universal jump, I setup up a few vectors:
one is the game entry point.
another one is where it jump before "returning" to the program entry point. The default is $FF5B for this one but some games "prefer" $E544 or other "cleanups".
Or you can make your own, save it with the game and jump to it.
I strongly advice not to use crunchers for the game, because the loader already takes care of that in it's own way. And the less compressed the data is the faster it will load.
Update: IT WORKS!
It successfully loaded giana sisters file "1" from 0801 to FFF0 and then started it.
Now it needs some cleaning and polishing.. few more days and it will be ready. |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Update:
the new loader seems to work.
It can load from $4C6 to $FFF9 (writing in ram below roms and chips).
Since there is not a universal jump, I setup up a few vectors:
one is the game entry point.
another one is where it jump before "returning" to the program entry point. The default is $FF5B for this one but some games "prefer" $E544 or other "cleanups".
Or you can make your own, save it with the game and jump to it.
I strongly advice not to use crunchers for the game, because the loader already takes care of that in it's own way. And the less compressed the data is the faster it will load.
Update: IT WORKS!
It successfully loaded giana sisters file "1" from 0801 to FFF0 and then started it.
Now it needs some cleaning and polishing.. few more days and it will be ready.
Keep up the good work Zibri! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
It seems that:
push jumpaddress-1
then
jsr $e518
jmp $ff5b
works for at least: archon, giana sisters and paharoh's curse.
Note for VICE team:
by mistake my saving program inverted the pulse.
On real hardware the result didn't work.
On Vice it works (that's why I didn't notice the silly mistake).
Note:
that's really weird because FF5b has a jsr e518 as first instruction.. hmmm |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Outside of mastering single file autostart programs to turbotape, what about the possibility of archiving a floppy (or D64) to turbotape, for later retrieval.
Kinda like a primitive tape backup system :D
I suppose that's totally impractical these days, but if you're playing around with tapes and tape turbos then it could be an idea that's fun to toy with. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Is your speed table the bitrate when loading uncrunched/unpacked data? |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriI strongly advice not to use crunchers for the game, because the loader already takes care of that in it's own way. And the less compressed the data is the faster it will load. This is unexpected. Can you expand on that?
Usually you'd expect a tape encoding to assume a uniform distribution of 0 and 1 bits, i.e., high entropy, packed data.
It can then assume a fixed relation of symbol size and frequency, and optimise encoded symbols for that generic case.
The job of the encoding is to provide the shortest possible representation for that "noise", while a good cruncher is expected to provide the high entropy.
Crunching would make the payload data as small as possible, and the encoding would have less data to encode to start with.
Do you mix both somehow, or pick encoded symbols based on the statistics of that one file (not a generic encoding with one loader for multiple files) and does that give higher loading speeds? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Is your speed table the bitrate when loading uncrunched/unpacked data?
My speed table is on unpacked/uncrunched data.
On giana sisters the bitrate is even higher (by almost 10%) because giana sisters file "1" is 250 blocks. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillQuoting ZibriI strongly advice not to use crunchers for the game, because the loader already takes care of that in it's own way. And the less compressed the data is the faster it will load. This is unexpected. Can you expand on that?
Usually you'd expect a tape encoding to assume a uniform distribution of 0 and 1 bits, i.e., high entropy, packed data.
It can then assume a fixed relation of symbol size and frequency, and optimise encoded symbols for that generic case.
The job of the encoding is to provide the shortest possible representation for that "noise", while a good cruncher is expected to provide the high entropy.
Crunching would make the payload data as small as possible, and the encoding would have less data to encode to start with.
Do you mix both somehow, or pick encoded symbols based on the statistics of that one file (not a generic encoding with one loader for multiple files) and does that give higher loading speeds?
I encode 2 bits at a time. in 4 "symbols". 4 different pulse "widths".
Statistically, in any uncrunched file representing a C64 game in memory (think of it as a memory freeze like giana sisters original game) there are more "00" and "11" than "01" or "10".
So, the first encoder I did, counted every pair of bits and assigned the shorter pulses to the more frequent ones.
In this way the file is "time compressed" automatically. (probably the wrong term)
Without this "trick" the loader will be anyhow faster than any other but with this it gains 30% of speed on average.
With a crunched file, the speed will be slower but if you consider the uncrunched size then it will be comparable.
Also, in the latest tests I am using a fixed frequency order:
00 11 10 01
assigning the short pulses to "00" and the longest to "01".
I found that statistically on real files that's the most common distribution, "10" and "01" have a 10% difference in the total amount while 00 and 11 are the most common.
As of now I already have the TAP files tested and working on real hardware and I could pre-release a few of them but it seems that the ultimate 2+/ultimate 64 have some jitter and problems in writing which affect my results.
If written with CUTE32, the results are perfect.
Now I am writing the code that creates the turbo data on tape from the c64. Unfortunately VICE is so full of bugs that I had a lot of false positives so I have to check everything on real hardware and that takes time.
I will need a few more days to perfect the writing routine and refactor the whole thing.
If any of you has a cute32 or is able to write a TAP file on a real tape with NO JITTER of sorts, contact me and it will sure speed up things. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriWithout this "trick" the loader will be anyhow faster than any other but with this it gains 30% of speed on average.
With a crunched file, the speed will be slower but if you consider the uncrunched size then it will be comparable. How does overall loading + decrunch time (= all that matters) compare, with both the uncompressed file and the compressed file being turbo-loaded?
Surely the compressed file will load + decrunch in less time than the uncompressed file will load? =) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillQuoting ZibriWithout this "trick" the loader will be anyhow faster than any other but with this it gains 30% of speed on average.
With a crunched file, the speed will be slower but if you consider the uncrunched size then it will be comparable. How does overall loading + decrunch time (= all that matters) compare, with both the uncompressed file and the compressed file being turbo-loaded?
Surely the compressed file will load + decrunch in less time than the uncompressed file will load? =)
Sincerely I haven't done these tests yet, that will be everyone "game" after the release.
As of now my problem is to generate 50% duty cycle arbitrary signals which is not easy with high accuracy and I am thinking of using unrolled code.
we will see... generatig the turbo data in a TAP file is one thing, doing it from the C64 in an accurate way is another. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriThe fastest example (11 kilobit/sec) has the same (or better) error rlsilience as "turbo250" but it is 3 times faster.
The slowest one (8 kilobit/sec) has the same error resilience as the standard commodore slow "save", but it is 100 times faster and twice as fast as turbo250.
Quoting ZibriNote:
Speeds 0 to 2 are highly reliable.
Speeds 3 and 4 are more reliable than any other turbo
Speeds 5 to 8 are less reliable and dependent
on a good alignment and fitness of the datassette.
speed 9 worked on a particularly good datassette but it is meant for masters only.
I find these comparisons the most interesting, how are you measuring error resilience/reliablility?
It would be very interesting to see a plot of the results on different turbos against each other, both on speed and error resilience. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlrQuoting ZibriThe fastest example (11 kilobit/sec) has the same (or better) error rlsilience as "turbo250" but it is 3 times faster.
The slowest one (8 kilobit/sec) has the same error resilience as the standard commodore slow "save", but it is 100 times faster and twice as fast as turbo250.
Quoting ZibriNote:
Speeds 0 to 2 are highly reliable.
Speeds 3 and 4 are more reliable than any other turbo
Speeds 5 to 8 are less reliable and dependent
on a good alignment and fitness of the datassette.
speed 9 worked on a particularly good datassette but it is meant for masters only.
I find these comparisons the most interesting, how are you measuring error resilience/reliablility?
It would be very interesting to see a plot of the results on different turbos against each other, both on speed and error resilience.
To be unpolluted by bad hardware or any other variable, tests are conducted on more fronts:
1) accuracy of the signal generation taken directly from the source with an oscilloscope or using dedicated hardware (cute32 and htap format are more than redundant for this)
2) modification of the signal by a standard datassette and a test datassette at "worse" settings but stil able to read a "commodore standard save".
3) a very good aligned and serviced datassette able to read even the fastest turbo (Evil Dead master).
Obviously once released, people will probably have to argue but in most cases different results are mainly because datassette have a good alignment but the wrong speed. The speed setting is on the motor itself and almost nobody ever cared about it.
A standard tape (by philips specification) should run at 4.75 cm/sec by the way. I have no clue on what was the original commodore setting but after 50 years even the most pristine and in "mint condition" were found to have different speeds (and very bad rubber bands which needed to be changed).
We will see. I just want to do the best program possible, after that it will be a matter of good tapes and good settings I think. But my turbo has a speed setting and at the lowest speed (which is still very high) data are very reliable (little less than commodore own protocol).
The program just needs a datassette with a good azimuth setting. And on the same datassette, very high speeds are possible (up to speed 8 of my program)
At the moment I could release a demo tape in TAP format but the program to generate that on the C64 side is still far from being releasable. I just need a little more time. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
An example with Giana Sisters file "1" on the disk version:
Turbo speed "5" (range is 0-9)
File size: 63472 bytes
PAL Turbo Data length in seconds: 67.55324953717236
NTSC Turbo Data length in seconds: 65.07768348738226
PAL Turbo Bitrate in bit/s: 7516.68
NTSC Turbo Bitrate in bit/s: 7802.61
Load address: $0801
End address: $FFF0
Jump Address: $84F |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriQuoting tlrQuoting ZibriThe fastest example (11 kilobit/sec) has the same (or better) error rlsilience as "turbo250" but it is 3 times faster.
The slowest one (8 kilobit/sec) has the same error resilience as the standard commodore slow "save", but it is 100 times faster and twice as fast as turbo250.
Quoting ZibriNote:
Speeds 0 to 2 are highly reliable.
Speeds 3 and 4 are more reliable than any other turbo
Speeds 5 to 8 are less reliable and dependent
on a good alignment and fitness of the datassette.
speed 9 worked on a particularly good datassette but it is meant for masters only.
I find these comparisons the most interesting, how are you measuring error resilience/reliablility?
It would be very interesting to see a plot of the results on different turbos against each other, both on speed and error resilience.
To be unpolluted by bad hardware or any other variable, tests are conducted on more fronts:
1) accuracy of the signal generation taken directly from the source with an oscilloscope or using dedicated hardware (cute32 and htap format are more than redundant for this)
2) modification of the signal by a standard datassette and a test datassette at "worse" settings but stil able to read a "commodore standard save".
3) a very good aligned and serviced datassette able to read even the fastest turbo (Evil Dead master).
Yes, but how do you quantify it to compare turbos against each other?
Are you messing with signal levels or speed to see when loading fails, or something else? |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriPAL Turbo Data length in seconds: 67.55324953717236
NTSC Turbo Data length in seconds: 65.07768348738226 That's an awful lot of precision. Where does it come from? :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlrYes, but how do you quantify it to compare turbos against each other?
Are you messing with signal levels or speed to see when loading fails, or something else?
You should ask Andrea Nalli, the electrical engineer behind the Cute32 device.
Anyway, as a rule of thumb, what counts are the frequencies (pulse lenghts to be exact) and the frequency separation used.
Commodore uses 3 pulses:
"SHORT" 384 cpu cycles + some jittering
"MEDIUM" 528 cycles + some jittering
"LONG" 688 cycles + some jittering
the frequency separation is "strange" and the equivalent separation in my code is SPEED "3".
I can so say that my speed "3" is as error resilent as commodore's but since is higher in frequency will be more dependent on a good AZIMUTH setting.
But you can always use a lower speed and get even better error resilence.
At speed "3" my turbo yields 6364.21 bit/sec in PAL and 6606.31 bit/sec on an NTSC machine. (calculated on giana sisters huge file)
Which is 50% more than the fastest released (Evild Dead master).
P.S.
Evil dead was not only an ugly game but gave a lot of problems to original tape owners.
It was even used often to calibrate datassette due to it's high sensitivity to errors. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillQuoting ZibriPAL Turbo Data length in seconds: 67.55324953717236
NTSC Turbo Data length in seconds: 65.07768348738226 That's an awful lot of precision. Where does it come from? :)
LOL.. forgot to remove the digits..
It comes from the tap generator I coded in python :D |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting Zibrithe frequency separation is "strange" and the equivalent separation in my code is SPEED "3".
I can so say that my speed "3" is as error resilent as commodore's but since is higher in frequency will be more dependent on a good AZIMUTH setting.
But you can always use a lower speed and get even better error resilence.
I'd consider the azimuth setting in the resilience. In my view it cannot be assumed that every tape unit is perfectly adjusted.
But, from what I hear the resilience of any of the turbos is yet to be measured, no?
Currently it's just an assumption based on pulse lengths. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlrQuoting Zibrithe frequency separation is "strange" and the equivalent separation in my code is SPEED "3".
I can so say that my speed "3" is as error resilent as commodore's but since is higher in frequency will be more dependent on a good AZIMUTH setting.
But you can always use a lower speed and get even better error resilence.
I'd consider the azimuth setting in the resilience. In my view it cannot be assumed that every tape unit is perfectly adjusted.
But, from what I hear the resilience of any of the turbos is yet to be measured, no?
Currently it's just an assumption based on pulse lengths.
I repeat:
my turbo is AS IS. It has parameters. In the end people will use what they want.
P.S.
a good tape alignment and maintenance is WHAT SHOULD BE DONE.
As it was for drives it is for tapes.
There were commercial loaders even for the 1541 that didn't work if the drive didn't have a good alignemnt and speed setting.
There's no difference with a datassette.
Alignment and steady speed have always to be good. Otherwise you stick with the commodore loaders which assume also the MISUSE of their products.
Anyway. We are off topic. Again. The program is still in the early stages of testing and development.
If you want to help in this project, just tell me what setup do you have and what kind of tests you want to do and I can provide the appropriate TAP files (for now) assuming you will write them correctly on a good tape and with a good device.
I would really apreciate some help in testing. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
And here is a very early preview of the new version of the loader in action: https://twitter.com/zibri/status/1456759971610337283 |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
I timed a gyrospeed load of the Remember crack of Giana sisters in an emulator alongside your twitter footage.
Speed seems comparable with gyrospeed just edging out Zibri's by a second although the Remember crack had a long depack once loaded.
And the Remember crack is 37,590 bytes - so actually smaller than Zibri's test file. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: I timed a gyrospeed load of the Remember crack of Giana sisters in an emulator alongside your twitter footage.
Speed seems comparable with gyrospeed just edging out Zibri's by a second although the Remember crack had a long depack once loaded.
And the Remember crack is 37,590 bytes - so actually smaller than Zibri's test file.
longer than what?
I don't depack anything.
Giana sisters is unpacked. is the file "1" on the disk version but a little longer (file 1 is from 0820 to FFF0, the loaded file is from 0801 to FFF0 without any depacking) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Well that's my point. Your turbo at that speed loads twice as many bytes as gyrospeed does - on average.
Not sure how much the crunching of the Remember crack would affect your turbo - since you said that crunching isn't needed - but with a smaller number of bytes to load would we get even faster times?
Either way, well done :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Neo-RioWell that's my point. Your turbo at that speed loads twice as many bytes as gyrospeed does - on average.
Not sure how much the crunching of the Remember crack would affect your turbo - since you said that crunching isn't needed - but with a smaller number of bytes to load would we get even faster times?
Either way, well done :)
Sincerely I have no idea how it performs in many situations.
But it can handle more than 251 blocks.
Probably some very efficient cruncher will gain in loading times but probably will lose everything in the decrunching.
Not sure though. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Personally I don't mind if time is lost in the decrunch, although it may matter more for other people.
For me anyway - the dream is to pack as many games as possible onto a C90 mixtape. Playing around with Gyrospeed, I managed to get around 620 games onto 10 C90 cassettes.
Every bit of saved tape counts! |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriProbably some very efficient cruncher will gain in loading times but probably will lose everything in the decrunching.
Not sure though. To be honest, i believe basically any given cruncher will reduce total loading time of a compressible program, with any given tape loader.
Even the slower decrunchers would take maybe "only" 10-15 seconds to decrunch about almost the entire RAM.
Tape loading is in the order of minutes, so those 10-15 seconds added to the end while a minute or so of loading time is saved would still come out faster overall. =) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
I just tried out the Slushload v2 implentation of Zibri's loader ideas on a testfile at 0x0a speed and pitched it against Gyrospeed.
Simply speaking, Slushload v2 completely blew Gyrospeed away and finished in half the time! If we assume that 0x0a is of the same reliability as Gyrospeed is, then Gyrospeed isn't even in the race anymore! It's going to be decided between Slushload v2 vs Zibri's masterpiece. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Neo-RioI just tried out the Slushload v2 implentation of Zibri's loader ideas Er, please elaborate on that. |
| |
Burglar
Registered: Dec 2004 Posts: 1101 |
Quoting KrillQuoting Neo-RioI just tried out the Slushload v2 implentation of Zibri's loader ideas Er, please elaborate on that.
Slushload V2? |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
I was aware of that. My point was what makes it an implementation of Zibri's ideas? That it uses 4 pulse widths for 2-bit symbols and optimises symbol choice based on the payload file's stats? Pretty low bar for (TM)(C). :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillQuoting Neo-RioI just tried out the Slushload v2 implentation of Zibri's loader ideas Er, please elaborate on that.
Slushload came out immediately after I spoke about my loader.
It implements the ideas I exposed on this toxic forum.
Instead of cooperating, people here just project their life frustrations by doing mock ups or insulting or trying to prove something.
As of me I have a beautiful life in a wonderful place. I do this for fun and to challenge MYSELF, not others.
If then I find some new idea and implementation I am glad to share it, but I hate people appropriating other people ideas without a purpose.
And if you care so much about who is first to do what, then just know I did it first, 3 weeks ago. Published the results way before the "bootlegged" loader was posted by the dynamic duo groepaz and slc.
Really, guys. I never imagined a fun hobby could lead to a so toxic forum.
Anyway, think what you want, use what you like and have fun.
Fortunately this is just a small part of my day, I live in the best place in the world where winter does not exist.
I swim surrounded by turtles, dolphins and tropical fishes.
I eat good fodd and have a very nice love life.
I wish you all could have the same and relax, start cooperating and stop challenging each other on things nobody cares or ever cared even at the time...
Probably 40 years ago I could have made some good money out of all this, fortunately I did in the last years in other fields.
I could just say "BITE ME" but I really wish everyone of you to have a beautiful life as I do. Sincerely. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillI was aware of that. My point was what makes it an implementation of Zibri's ideas? That it uses 4 pulse widths for 2-bit symbols and optimises symbol choice based on the payload file's stats? Pretty low bar for (TM)(C). :)
Low bar? Was never done before I did. Period. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriQuoting KrillI was aware of that. My point was what makes it an implementation of Zibri's ideas? That it uses 4 pulse widths for 2-bit symbols and optimises symbol choice based on the payload file's stats? Pretty low bar for (TM)(C). :) Low bar? Was never done before I did. Period. If you're referring to 4 pulse widths for 2-bit symbols only, then... was done before (and the idea itself isn't novel at all - getting it reliable on real hardware might be). =) https://csdb.dk/forums/?roomid=11&topicid=133521#133523 |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quote: Quoting ZibriQuoting KrillI was aware of that. My point was what makes it an implementation of Zibri's ideas? That it uses 4 pulse widths for 2-bit symbols and optimises symbol choice based on the payload file's stats? Pretty low bar for (TM)(C). :) Low bar? Was never done before I did. Period. If you're referring to 4 pulse widths for 2-bit symbols only, then... was done before (and the idea itself isn't novel at all - getting it reliable on real hardware might be). =) https://csdb.dk/forums/?roomid=11&topicid=133521#133523
It was mentioned somewhere before, but this one apparently uses four pulse lengths as well: Deep Throat |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting KrillQuoting ZibriQuoting KrillI was aware of that. My point was what makes it an implementation of Zibri's ideas? That it uses 4 pulse widths for 2-bit symbols and optimises symbol choice based on the payload file's stats? Pretty low bar for (TM)(C). :) Low bar? Was never done before I did. Period. If you're referring to 4 pulse widths for 2-bit symbols only, then... was done before (and the idea itself isn't novel at all - getting it reliable on real hardware might be). =) https://csdb.dk/forums/?roomid=11&topicid=133521#133523[/quote]
More reliable than any other. According to 2 engineers and 4 testers.. but the code is not yet final. I'm still brainstorming on a few ideas.. |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1409 |
Using imbalances in the likelihood of zeros vs ones in the source data is a very inefficient way of reducing the expected load duration, given how few bits you get per cycle from even the fastest of tape loaders.
You get much better mileage from compressing the file first, and optimising your loader to represent random data with as short a tape file as possible - and attempts at the latter date back decades. (At least if your goal is to minimise total time to load and decrunch the file.) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Using imbalances in the likelihood of zeros vs ones in the source data is a very inefficient way of reducing the expected load duration, given how few bits you get per cycle from even the fastest of tape loaders.
You get much better mileage from compressing the file first, and optimising your loader to represent random data with as short a tape file as possible - and attempts at the latter date back decades. (At least if your goal is to minimise total time to load and decrunch the file.)
1) tape encoding is based on pulse lenghts so there is an imbalance and the lenght of a 0 or a 1 is different in ANY tape encoding on the c64.
2) I didn't check any other code. I like to study and implement things myself and I came up with the "non original" idea of 2 bits encoding by myself.
3) since 2 bits have 4 possible combinations I just privileged the more common in an uncompressed file. In a compressed one every couple of bits should have the same statistical probability.
4) my program does not do any compression or decompression but depending on the file it "compresses" the time spent in loading it.
I remember many bad cracks having a decompression program which sometimes took 10-20 or even 30 seconds.
also very few programs were able to load more than 202 blocks.
And also, NONE of them had zero jitter because everyone thought that the tape "imperfection" was way more than any jitter. That's a wrong concept and I proved it even on the 1541 with my non-jittering speed test which as usual was first accused, then insulted and then copied (badly) by groepaz, but that's how things go here evidently. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting Zibri1) tape encoding is based on pulse lenghts so there is an imbalance and the lenght of a 0 or a 1 is different in ANY tape encoding on the c64.
In general yes, but not true for RLL (1) or GCR (2).
(1) Datassette RLL Mastering Demo
(2) tapmaster 0.4 (used in the included trance sector tap) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Zibri1) tape encoding is based on pulse lenghts so there is an imbalance and the lenght of a 0 or a 1 is different in ANY tape encoding on the c64. Yes, and that fact just shows that two pulse lengths encoding single bits is far from the theoretical optimum. :) |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Neo-Rio: My loader is *not* an implementation of Zibri's loader. Apart from checking out the claimed benchmarks, I have not paid much attention to technical details. But there's a big likelihood that it's based on the same principles. I have no idea about the actual implementation as I never saw the actual loader.
And Zibri, drop the attitude.
None of the ideas I used came from you. The method is not exactly new, and I'm not sure it's the first time it's implemented on tape loaders either. I'm not even sure I've still landed on the optimal solution and have a few more ideas to try out. You told me to take "my projects" elsewhere, so I did... wasn't so much talk about cooperation then.
The only thing here that somehow is right is the fact I was triggered by your attitude to give it a go :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Neo-Rio: My loader is *not* an implementation of Zibri's loader. Apart from checking out the claimed benchmarks, I have not paid much attention to technical details. But there's a big likelihood that it's based on the same principles. I have no idea about the actual implementation as I never saw the actual loader.
And Zibri, drop the attitude.
None of the ideas I used came from you. The method is not exactly new, and I'm not sure it's the first time it's implemented on tape loaders either. I'm not even sure I've still landed on the optimal solution and have a few more ideas to try out. You told me to take "my projects" elsewhere, so I did... wasn't so much talk about cooperation then.
The only thing here that somehow is right is the fact I was triggered by your attitude to give it a go :)
Drop the b*llsh*t.
Likelihood my a$$.
You came out of your cave after I posted my videos and explaination.
None of the ideas I used came from you.
That's why they came before mine.. oh no wait.. they came AFTER!
Hmmm... weird uh?
"wasn't so much talk about cooperation then."
if you seek for cooperation, as I said, you open your own thread and then someone might contribute there. I just said you were doing it in the wrong place and posting a TAP does not help or cooperate in any way to something I already did and explained. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
And that is exactly what I did...
If you want the chain of events that led to this:
1. I posted an experiment here, you responded with rage
2. First I didn't think much of it, but then I decided I'd try to give you some competition anyway, but by doing it OUTSIDE this thread, as per your requests.
3. I then told your favorite friend Groepaz about what I wanted to try and if he had any idea on how to set up the timers for this and he suggested the approach of cascading timers. At this point, I was actually not aware of what encoding scheme you were using and I have still no knowledge on how you implemented it, neither do I care.
4. On Wednesday I started coding to see if what Groepaz suggested would work, and it showed promising results so I kept on working on it.
5. Yesterday I decided it was time to drop it on csdb.. :-)
Also: When I asked you the specific question of the benchmarking I was only wanting a reference to know where I stood compared to my competition because it was not clear if it was loading uncompressed data or not because obviously loading a lot of the same two bitpairs would skew the measurement for you as well as for me. But apart from the benchmarks and the idea of making a loader, nothing was "borrowed" from you or your ideas.
If you really think you are the only one in the world who could come up with a two bit scheme, you're at the very best delusional.
I am not even sure it is the optimal route, which is why I am still going to try a few other approaches, returning to a three pulse scheme. Now you know that, so now I can accuse you of stealing my idea if you ever do the same! |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1409 |
Quoting Zibri1) tape encoding is based on pulse lenghts so there is an imbalance and the lenght of a 0 or a 1 is different in ANY tape encoding on the c64.
If you still think that is true, then you have not understood the discussion at Tape loaders using more than two pulse widths for data. Even you don't simply map 0 to one length, 1 to another.
Quote:2) I didn't check any other code. I like to study and implement things myself and I came up with the "non original" idea of 2 bits encoding by myself.
Sure - but in that case, you should have no trouble believing that SLC came up with his own loader long before you started talking about one that happened to use some similar ideas. Convergent evolution happens - you just reminded SLC to push his old code out the door :) many similar ideas to yours independently. See his comment he left while I was writing this one for details!
Quote:3) since 2 bits have 4 possible combinations I just privileged the more common in an uncompressed file. In a compressed one every couple of bits should have the same statistical probability.
This is true - and it also is an indication that there are smaller representations possible.
Quote:I remember many bad cracks having a decompression program which sometimes took 10-20 or even 30 seconds.
Yes, decompression programs are a lot faster than they used to be. 20 seconds is considered unacceptably slow these days, with the bar being well under 10 seconds for decompressing to all of memory.
Halving the size of a file that would otherwise take over a minute to load even with a super fast tape turbo will save at least 30 seconds of loading time, so as long as the decrunch takes under 30 seconds you end up ahead. Even compression by a mere 30% would still be a drastic improvemnt.
Quote:also very few programs were able to load more than 202 blocks.
True - but also this is rarely necessary now given modern compression codecs.
Quote: And also, NONE of them had zero jitter because everyone thought that the tape "imperfection" was way more than any jitter. That's a wrong concept and I proved it even on the 1541 with my non-jittering speed test which as usual was first accused, then insulted and then copied (badly) by groepaz, but that's how things go here evidently.
Jitterless I can certainly see a point to, if you're pushing your throughput so close to bandwidth limitations. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: Neo-Rio: My loader is *not* an implementation of Zibri's loader. Apart from checking out the claimed benchmarks, I have not paid much attention to technical details. But there's a big likelihood that it's based on the same principles. I have no idea about the actual implementation as I never saw the actual loader.
And Zibri, drop the attitude.
None of the ideas I used came from you. The method is not exactly new, and I'm not sure it's the first time it's implemented on tape loaders either. I'm not even sure I've still landed on the optimal solution and have a few more ideas to try out. You told me to take "my projects" elsewhere, so I did... wasn't so much talk about cooperation then.
The only thing here that somehow is right is the fact I was triggered by your attitude to give it a go :)
More than happy to be corrected here. I did not see any code and make comparisons. Only made an assumption from the chatter in this forum. So if I'm wrong - I own that mistake right there.
In any case I tried mastering both Slushload v2 and Zibri's test tap he sent me to try out.
I have a pretty woeful clone datasette. I tried aligning it and giving it a headclean, and with firmware 3.10 on an ultimate 1541-II and tape adpater - I could not get either tap generated to master properly. Slushload v2 failed take off (0x0a speed from a file I generated - which worked in VICE), and Zibri's loaded but the end result made some pretty cool glitch music along with corrupted graphics :D
Now granted that my tape deck was a pile of cack, and the ultimate 1541 is not the best mastering tool (it won't even let you lead in the motor before recording) -- and yet Gyrospeed mastered TAPs I created played back OK on it.
So while Gyrospeed is not the fastest tape turbo in existance, it is *mostly* reliable across really badly maintained datasettes IMHO.
And I suppose this was the problem with datasettes back in the day - just wide variance on equipment - and nobody really giving two flying firetrucks about it because they were cheap and nasty. While theoretically possible to get amazing speeds with it, the datasettes in question need to be properly maintained - which mine was certainly not. That's even though it was an oldstock clone datasette which I haven't had for very long, and also has a funky motor. Yet it still manages to load a lot of stuff normally.
The other thing is that emulators don't really "count" so to speak, as you should expect a perfect load every time. But this is obvious....
I am by far and away no subject matter expert on this. Only reporting so far what I'm seeing and trying to see if I can work to improve the situation. Fully expecting to be corrected on these assumptions. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
I would like to know more about what you tried and that didn't work, so if you could send me a PM about it (keeping it outside of this thread etc.) I would really appreciate that.
The 1541U does btw delay a second before it starts outputting data after you start recording, which should be enough time for the signal to settle.
The challenge with writing these signals back to tape (and which is why Zibri's real C64-approach might yield a better result as he will have full control of this process), is that you need to be more careful on how you render the signal but nothing we can do with the .tap-files can affect how for example the 1541U handles it. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting ChristopherJam
Yes, decompression programs are a lot faster than they used to be. 20 seconds is considered unacceptably slow these days, with the bar being well under 10 seconds for decompressing to all of memory.
Halving the size of a file that would otherwise take over a minute to load even with a super fast tape turbo will save at least 30 seconds of loading time, so as long as the decrunch takes under 30 seconds you end up ahead. Even compression by a mere 30% would still be a drastic improvemnt.
Jitterless I can certainly see a point to, if you're pushing your throughput so close to bandwidth limitations.
Yep.. all that's right.
About the jitter, think of it this way: if you have a jitter of 3 cycles is like having a third of the accuracy.
HeadAlign for example has a total jitter of more than 20 cycles and "most" of the movement you see is it's own jitter and not the tape.
Just saying.. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: I would like to know more about what you tried and that didn't work, so if you could send me a PM about it (keeping it outside of this thread etc.) I would really appreciate that.
The 1541U does btw delay a second before it starts outputting data after you start recording, which should be enough time for the signal to settle.
The challenge with writing these signals back to tape (and which is why Zibri's real C64-approach might yield a better result as he will have full control of this process), is that you need to be more careful on how you render the signal but nothing we can do with the .tap-files can affect how for example the 1541U handles it.
The u2+ is accurate but it will never go even near the Cute32.
Cute32 has an accuracy that is way over the c64 cpu itself.
The last imperfection (a 0.5microsecond rounding) was corrected thanks to a special ultra-fast version of my turbo which unexpectedly failed on the cute32 while working on VICE.
Corrected the very small rounding error now Cute32 is the most accurate device for tape mastering (and dumping).
Anyway, the c64 mastering program is still under work... different duty cycles yeld different results on original datassette and clones. No difference on emulators or devices like u2/u64/cute32.
In the meanwhile I am thinking of a way to let people correctly set their datassette.
This of this:
a 1541 (which costed a lot and people cared about it) is most of the time very well aligned and expecially at a "perfect" speed, set by a tachimetric disc on the back of the motor.
On (the cheap) datassette, people didn't care and always blamed the software or the "friend's recording".
We analyzed a few datassette, few of which never even opened and in mint condition and we dind't find 2 at the same speed.
Moreover the azimuth was set almost randomly.
With the ultra-slow commodre save/load that didn't create a big problem but with anything that wants to use the full potential of the deck, there will be dragons.
I found a way to be sure that at least the speed is right.
About the azimuth, it does NOT depend on the "recording".
There is a right one and a wrong one.
Anything wrong will worsen the reading process.
The right azimuth is the one that makes the head perfectly parallel to the tape. That can depend on the tape media (the plastic cassette) itself and on the deck mechanics too.
But again, once the azimuth is correctly set and the speed is also correct, we successfully tested speeds up to 12 kilobit/sec on 2 different devices.
My turbo anyway can keep a very decent (commodore-like) error resilence at about 4-6 kilobit/sec and, as I said on a good deck/tape it performed at about 12 kilobit/sec.
Note, if you put a "line in fake tape" instead of a real tape, obviously wobbling and speed problems cease to exist. in that case the speed goes way up, demonstrating once and for all that the electronics of the datassette is not an issue. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriAbout the jitter, think of it this way: if you have a jitter of 3 cycles is like having a third of the accuracy. Hmm... if, say, there is some noise on the pulse width coming in from tape, making it +/- 30 cycles compared to the saved intended width... and you add 3 cycles of measurement error due to jitter on top of that, are +/- 33 cycles a third of the accuracy of +/- 30 cycles? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Do we know how the c2n was specified to begin with? Whats the max speed deviation? For the floppy drive mechs we know this (and thus what a proper loader must be able to deal with). |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Do we know how the c2n was specified to begin with? Whats the max speed deviation? For the floppy drive mechs we know this (and thus what a proper loader must be able to deal with).
Even if there were some figures, on the 1541 there is a tachimetric disc for accurate setting. Because speed is very important. About tapes even with audio hi-fis there were differences, for example TEAC hi-fi were known to be "faster".
By philips specification, a tape should go at 4.75 cm/sec.
With my program we found a perfect setting which then works with anything else too (obviously) but we don't know the exact figure.
A simple test could be this one (assuming the ribbons are new and good):
turn the motor on for exactly one minute from the start of a tape and check the counter. The problem is we don't know exactly what should be the right one. And nobody cared much at the time.
(I cared zero because I had the 1541 almost immediately). |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:Even if there were some figures, on the 1541 there is a tachimetric disc for accurate setting. Because speed is very important
for data its much less important than for audio tape - actually floppy drives are specd much "worse" than good audio decks regarding deviation in speed.
Quote:By philips specification, a tape should go at 4.75 cm/sec.
Thats the ideal figure - but the interesting number is the maximum deviation from that. Good HIFI decks manage ~0,1% for example - however the shitty straight from hell mechs used for C2N are surely specd much worse. This is the number we need to know to make a loader that can deal with all devices. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
I tried loading Zibri's loader and Slushloadv2 in the ultimate-ii under TAP loading emulation. While Zibri's loader worked, slushload v2 crashed to BASIC right at the end.
Meanwhile both TAPs worked fine in VICE 3.1 (old, I know).
It gets interesting because Zibri gave me multiple TAPs at different speeds to try out mastering to tape, and all of them "loaded" from the same deck they were mastered from, but his Giana Sisters TAP dreliably glitched out with fast music every time when loaded!
(G0T080 would have loved it! :D )
We determined that my deck is probably recording and loading from tape at completely different speeds.
It makes me wonder if the ultimate-II is mastering TAPs to tape properly (probably not), and what sort of equipment and software is the average user going to need to fine-tune their C2Ns within an inch of their lives....
At best most users can only really do a headclean and adjust azimuth. Maybe a demagnetization too if they have a demag tape. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Neo-Rio: I can explain a few things for you if you send a message, I won't discuss slushload here. :) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Neo-RioWe determined that my deck is probably recording and loading from tape at completely different speeds. Would the pilot signal prior to the turbo file be sufficient to adjust expected pulse widths accordingly? |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: Quoting Neo-RioWe determined that my deck is probably recording and loading from tape at completely different speeds. Would the pilot signal prior to the turbo file be sufficient to adjust expected pulse widths accordingly?
In an emulator and on the ultimate ii, the pilot signal bars DID NOT MOVE, which shows that everything is in alignment.
With my clone deck after mastering and loading from the same deck those bars had significant jitter... either moving down screen or upscreen, even not that fast but there was distinct movement which highlights the problem I was having.
Also note that I was using a type I TDK C90, so already you have the C2N motor straining to pull a huge reel of tape, and the motor on my clone deck is fairly weak. It sometimes gets jammed trying to spool the tape after FOUND message and the motor restarts - requiring "percussive maintenance" :D
It really is a crappy deck - and yet I still manage to get good TAP dumps of originals that PASS from it - even if it's never normally used to master a tape (and clearly shouldn't given these turbos). I've discovered that Gyrospeed is the best balanced tape turbo for speed AND reliability, given the wide variance of tape decks in various states and conditions. There are faster turbos out there, but all of them require tight speed/motor/head alignment, and headclean of the deck, as well as a good quality tape. Gyrospeed has been a "good enough" compromise.
I've been wanting a new C2N in good condition for a while for my GB64 tape dumping activities, but many go for ludicrous prices now. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Neo-RioIn an emulator and on the ultimate ii, the pilot signal bars DID NOT MOVE, which shows that everything is in alignment.
With my clone deck after mastering and loading from the same deck those bars had significant jitter... either moving down screen or upscreen, even not that fast but there was distinct movement which highlights the problem I was having. The moving bars don't indicate a problem per se.
They move because the pulse width is slightly off (different motor speed for reading vs writing on possibly different devices), and then that certain integer multiple of it doesn't coincide with a video frame duration any more.
As long as the width is stable (within certain error bounds), all should be good. =)
Now, i'm not so sure about the linearity or lack thereof for different pulse widths.
If the read pilot signal frequency is off the "perfect" (written) frequency by a fixed ratio, does the same ratio apply to all used pulse widths?
And how do preceding pulse widths influence the current one?
Surely the band-pass filter would mess a bit with the signal.
I wonder whether a pilot "training sequence" should use different combinations of all used pulse widths to determine feasible thresholds. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting KrillIf the read pilot signal frequency is off the "perfect" (written) frequency by a fixed ratio, does the same ratio apply to all used pulse widths?
And how do preceding pulse widths influence the current one?
Surely the band-pass filter would mess a bit with the signal.
I wonder whether a pilot "training sequence" should use different combinations of all used pulse widths to determine feasible thresholds.
You are going to have different factors here.
1: there are speed related parameters:
- average speed
- wow and flutter
Wow and flutter are more or less jitter of the speed, but within different frequency ranges, wow being relatively slow.
2: frequency related parameters:
- hi-frequency dampening due to the incorrect azimuth. Recording and writing on the same deck will somewhat mask this though.
- intersymbol interference due to the magnetic media itself, i.e pulses shift around slightly depending how close they are to each other.
EDIT: and effects from the filter in the datasette as well.
Speed related parameters could probably be measured by just inserting a tape with a 1 kHz test tone and crafting a program to extract that information.
The frequency related parameters are more tricky, but a relative measurement could be made by having a program write a test pattern, sampling the data back to ram for offline analysis.
Maybe soci has done some of this already to tweak his pre-compensation scheme? |
| |
soci
Registered: Sep 2003 Posts: 480 |
You make me release all the crap I have in my drawers ;)
The pulse length calibration pattern for setting thresholds was explored already:
Datassette 4PW Mastering Demo |
| |
soci
Registered: Sep 2003 Posts: 480 |
Any tape experiments on my side need to wait for at least another month at the moment ;( |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Any tape experiments on my side need to wait for at least another month at the moment ;(
Ohnoes! No you're going to upset him by posting your own projects in his thread! ;) Exactly how old is this anyway? |
| |
soci
Registered: Sep 2003 Posts: 480 |
Started around end of June 2018 then abandoned in August 2018, so more than 3 years.
Anyway I'll stay quiet as suggested. Sorry for spamming this thread. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
UPDATE:
the glitching was unrelated to the turbo.. but on a bad init of giana sisters game.
With his "troubled" datassette clone we successfully tested anonfirmed the results I had earlier..
He could write and read back at 8239.33 bit/sec !!!
Now he is testing speed "8" at 9152.42 bit/sec but i guess his limit will be lower... 8239 for his datassette should be the safe limit. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Started around end of June 2018 then abandoned in August 2018, so more than 3 years.
Anyway I'll stay quiet as suggested. Sorry for spamming this thread.
That's not spam at all...
As I said.. I have never checked or seen any other tape code.
I didn't want to be influenced...
So I started from scratch.
As of now I have a working loader that gives the results I posted earlier (the big table) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:Speed related parameters could probably be measured by just inserting a tape with a 1 kHz test tone and crafting a program to extract that information.
original Input64 had such thing on them, and a small type-in program in the Booklet that could be used with it to align the azimuth. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: UPDATE:
the glitching was unrelated to the turbo.. but on a bad init of giana sisters game.
With his "troubled" datassette clone we successfully tested anonfirmed the results I had earlier..
He could write and read back at 8239.33 bit/sec !!!
Now he is testing speed "8" at 9152.42 bit/sec but i guess his limit will be lower... 8239 for his datassette should be the safe limit.
Update:
also 9152 bit/sec worked!
also 10293.12 bit/sec worked!
his datassette is not bad at all even if it's a clone..
as usual is the software that makes the difference.
now he is going for the record :D
which will probably fail, because speed "9" is meant only for masters. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
For a fair comparison you should really post a benchmark that uses already compressed data too. The loader soci just uploaded loads the demo "SIDrip relive" at an average of 5400 bits/s at what looks like rather conservative settings.
It's also funny to observe that also this loader uses the scheme you claim was your idea, and that noone else had done before you ;) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quote:Speed related parameters could probably be measured by just inserting a tape with a 1 kHz test tone and crafting a program to extract that information.
original Input64 had such thing on them, and a small type-in program in the Booklet that could be used with it to align the azimuth.
yes.. but that will assert if the speed is the philips standard.
we don't really know what commodore chose for tape speed.
since it was only for data we don't know for certain.
it could have been higher or lower. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Update:
also 9152 bit/sec worked!
also 10293.12 bit/sec worked!
his datassette is not bad at all even if it's a clone..
as usual is the software that makes the difference.
now he is going for the record :D
which will probably fail, because speed "9" is meant only for masters.
and here is his record!
https://twitter.com/zibri/status/1457334641896132610 |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:For a fair comparison you should really post a benchmark that uses already compressed data too.
indeed, numbers derived from testdata with low entropy is a bit meaningless |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: For a fair comparison you should really post a benchmark that uses already compressed data too. The loader soci just uploaded loads the demo "SIDrip relive" at an average of 5400 bits/s at what looks like rather conservative settings.
It's also funny to observe that also this loader uses the scheme you claim was your idea, and that noone else had done before you ;)
Until now the funniest thing was to hear you speak and FAIL on his deck.
While with my turbo he beat even the record of my own testers.
Speed "9" is not even meant to work on a datassette.. yet it did.
And yes, you can believe it or not, I don't really care, everything I did was my own idea and from scratch.
If anyone else in 40 years thought of it or used it is not my concern.
My concern was to make the best program I could do.. and as of now it's the only one that worked on the australian (Neo-Rio) guy's hardware :P
Bite me. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quote:For a fair comparison you should really post a benchmark that uses already compressed data too.
indeed, numbers derived from testdata with low entropy is a bit meaningless
And I repeat: you will be welcome to make all tests you want after the release.
A commodore game was always a full (or partial) memory image (not considering multiload games which were the same but more than one... like different games... every stage was a completely new game or the same with different data).
All I care is to make the fastest and more reliable turbo. From scratch (that was my purpose and fun).
And I did. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
So, the confirmed table is:
============================================
S | C | B | PAL Bitrate NTSC | Reliability
--------------------------------------------
0 24 24 5154.12 5350.19 Best / Old D
1 23 22 5497.19 5706.31 High / Old D
2 22 20 5889.19 6113.22 High / Any D
3 21 18 6341.39 6582.61 Best / Any D
4 20 16 6868.8 7130.09 Good / Any D
--------------------------------------------
5 19 14 7491.9 7776.9 Best / Same D
6 18 12 8239.33 8552.76 Good / Same D
7 17 10 9152.42 9500.58 Avg / Same D
8 16 8 10293.12 10684.67 Low / Same D
--------------------------------------------
9 15 6 11758.64 12205.94 Low / Master (record by Neo-Rio)
-------------------------------------------
PAL C Center Freq: 123156 hz / C
NTSC C Center Freq: 127840.875 hz / C
PAL B Badwidth: 123156 hz / B
NTSC B Badwidth: 127840.875 hz / B
-------------------------------------------
File lenght: 47103 bytes.
------------------------------------------- |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Yeah I thought it was strange that the Giana sisters TAP reliably failed in the same way - but yeah, it was just software after all.
It's funny because that clone datasette used was relatively new old stock I got off ebay when somebody had a pile of them to offload a few years back. Have been using it to dump TAPs for Gamebase 64 for quite a while. It was given an amateur headclean and alignment with Azimuth 3000. The motor is a bit sketchy on that unit. The tape was a brand new (oldstock probably) Maxell Type I C90. C64 was completely stock C64C longboard.
By the way, the video posted completed this load in 20 counts on that particular datasette (I forgot to show it). Will aim for some higher speed settings tomorrow, but so far this looks really good. Each speed setting faster saves a counter revolution on this equipment by the looks of it. The question is: can it go higher? :D |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriMy concern was to make the best program I could do.. and as of now it's the only one that worked on the australian (Neo-Rio) guy's hardware :P
In the first post you did state claims about error resilience compared to other loaders so that was obviously a goal too, no?
I still think the error resilience/reliability part is the most interesting of your goals because turbos didn't use to very reliable. Improving the speed and the reliability at the same time would be a great achievment. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriMy concern was to make the best program I could do.. and as of now it's the only one that worked on the australian (Neo-Rio) guy's hardware :P
In the first post you did state claims about error resilience compared to other loaders so that was obviously a goal too, no?
I still think the error resilience/reliability part is the most interesting of your goals because turbos didn't use to very reliable. Improving the speed and the reliability at the same time would be a great achievment.
exactly.
I believe it can be even further improved.
After analyzing NEO-RIO results I found ONE byte error in the "speed 8" setting.
I expect to find more on the speed "9".
But the table is solid.
At lower speeds errors are zero even on bad devices.
At the lowest speeds the saved data is not only readable by the same deck, but also by other "out os speed" ones.
I am pretty satisfied with these results as of now.
As I said the work is not complete.
But for now the results are encouraging. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Glad that I can be of amusement. I do know why it failed on his deck, though, and I have rectified it on my end. One of the fails he mentions isn't really a loading fail even, it's caused by two lines of code I forgot to remove as I was originally intending a return to basic on load. He described a load that exited to a blue screen and wouldn't have happened without an active cartridge installed. Had it actually failed the load it would have ended with a red striped screen.
Any other issues lies in either how the .tap-file is prepared in advance and/or the solution being used to transfer it and I'm refining that process a bit now. Loader itself does exactly what it was designed to do.
I guess your constant need for bragging, trying to convince the world everyone steals your ideas, etc. is the signs of you not caring? :D |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:I still think the error resilience/reliability part is the most interesting
Indeed. And it should be formally proved/calculated of course, a bunch of anecdotal evidence is useless for this - at best its a hint you are on the right track. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
If this was a healthy and not toxic environment I would have posted some preliminary code long ago. Unfortunately it isn't and what I see is people stealing each other code and ideas, adding a few tweaks and posting them as their own. Almost reminded me of the horrible italian bootlegged games with names and title changed and sold in newstands.
So I will post my final code when I think it will be ready.
I won't care about what "the usual guys" will think or say, because all my results are being professionally checked by engineers who are in this field from years (I am the newbie here).
About my results, they are "anectodal" only becayuse of a personal choice. When I post data is accurate data checked and rechecked by professionals and not "guys" like you or me.
I wonder why "the usual guys" are so harsh on a thing they didn't even see the code yet. And probably they won't see anything they haven't already seen in their career of sotware "inspired by others".
I am happy to KNOW that every single line (good or bad) of my code was done by me and not a single line was seen or "Inspired" by anything else.
Otherwise, where is the fun in creating? |
| |
SLC
Registered: Jan 2002 Posts: 52 |
If that was directed towards me, I can assure you that not a single idea was taken from you (you're not the only one that have been thinking of a 2 bit scheme as I said). I started from scratch on Wednesday, and I hadn't even paid enough attention to see what scheme you were going for.
Just like you, every single line of code is mine. I admit that I did initially ask for tips on a method to use for the timers, though I did not ask for code. Not have I seen any of your tap-files either, so there's no way I could have seen your code.
Also, why did I just release this now, you seem to have asked yourself. Part of the fun when doing something like this to me, is to let others experiment with along the way rather than just babbling on about it. Would I have written this now if it wasn't for you? No, not at this time. But this WAS on my todo-list, so I figured now was a good time as any. You haven't seen the last from me, as I know I screwed up a thing or two in the previous release and I am also trying out other ways. But again, your benchmarks would make much more sense with already packed data.. I hope that you'll add that. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:I hadn't even paid enough attention to see what scheme you were going for.
Not even looking at the thread - thats how toxic you are :( |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriI am happy to KNOW that every single line (good or bad) of my code was done by me and not a single line was seen or "Inspired" by anything else.
Otherwise, where is the fun in creating? There's this quote, something with standing on the shoulders of giants. :)
I.e., looking at prior art and building on that to reach new heights, with some fresh ideas and creativity, can be pretty rewarding, too. =) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Quote:I hadn't even paid enough attention to see what scheme you were going for.
Not even looking at the thread - thats how toxic you are :(
You're all awesome (Groepaz, Zibri, SLC etc) and gives the scene a lot. <3 Just try to appreciate your individual efforts and be proud of them. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Here is another "anecdote" for you all to enjoy:
https://www.facebook.com/Zibri/posts/10227091097965659
Giana sisters: 251 BLOCKS. Speed "6" : 8265.01 bit/sec
Note:
I made the pilot longer just to help testing.
As you can see the bars are "going" down.
That means that the writing is faster than the reading.
Why?
Because the tape was at more than half!
The same recording at the start of a tape causes bars to go up.. at about 25% of a tape they are steady. and after 50% they start to go up.
Just for information. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriI am happy to KNOW that every single line (good or bad) of my code was done by me and not a single line was seen or "Inspired" by anything else.
Otherwise, where is the fun in creating? There's this quote, something with standing on the shoulders of giants. :)
I.e., looking at prior art and building on that to reach new heights, with some fresh ideas and creativity, can be pretty rewarding, too. =)
I don't think this is the right place for a philosophical discussion, but I can agree on that.
And surely I was "inspired" but my own experience in computing and telecommunications.
But believe me if I tell you that before 3 weeks ago I barely used a tape when I was 13.
I didn't know anything about the encoding or anything about even reading a commodore tape (but I knew about the 1541 and magnetic media in general).
I like sometimes to "reinvent the wheel" without previous knowledge and see where it leads me. Then if it fails I can always climb some gian shoulder and look around, but I prefer not to do that when I learn something.
But, surely both way can obtain great results.
What I don't like is when people clinbing a giant's shoulder, won't even cite the name of the giant.
In computing that happened many times (xerox is a "giant" example) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: If that was directed towards me, I can assure you that not a single idea was taken from you (you're not the only one that have been thinking of a 2 bit scheme as I said). I started from scratch on Wednesday, and I hadn't even paid enough attention to see what scheme you were going for.
Just like you, every single line of code is mine. I admit that I did initially ask for tips on a method to use for the timers, though I did not ask for code. Not have I seen any of your tap-files either, so there's no way I could have seen your code.
Also, why did I just release this now, you seem to have asked yourself. Part of the fun when doing something like this to me, is to let others experiment with along the way rather than just babbling on about it. Would I have written this now if it wasn't for you? No, not at this time. But this WAS on my todo-list, so I figured now was a good time as any. You haven't seen the last from me, as I know I screwed up a thing or two in the previous release and I am also trying out other ways. But again, your benchmarks would make much more sense with already packed data.. I hope that you'll add that.
Ok, then. I apologize to YOU. Perhaps we are more alike than I thought. And I would be delighted to share ideas with you and make a perfect one :D
Wanna know one? I don't use timers :D
Question:
can some of you provide me a crunched version of giana sisters disk file "1" (entry point $84F) done with a GOOD cruncher? I don't want to try one then hear there was a better one.. and I never played with crunchers (yet). |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: I don't think this is the right place for a philosophical discussion, but I can agree on that.
And surely I was "inspired" but my own experience in computing and telecommunications.
But believe me if I tell you that before 3 weeks ago I barely used a tape when I was 13.
I didn't know anything about the encoding or anything about even reading a commodore tape (but I knew about the 1541 and magnetic media in general).
I like sometimes to "reinvent the wheel" without previous knowledge and see where it leads me. Then if it fails I can always climb some gian shoulder and look around, but I prefer not to do that when I learn something.
But, surely both way can obtain great results.
What I don't like is when people clinbing a giant's shoulder, won't even cite the name of the giant.
In computing that happened many times (xerox is a "giant" example)
Could you for reference just try writing out SIDrip ReLive too? (I am aware it will make less impressive benchmarks for you, but it really would be interesting to see how it performs on real hardware for you)
I'll share mine even if you may not be that interested:
Giana Sisters (same file as you, unpacked) gave me slightly above 8500 bits/s now, written with a U2 and read back on the same C2N. The demo I linked to yielded a little over 6750 bits/s.
Update: Now at 8398 bits/s for the sidrip demo and 10114 bits/s for unpacked Giana Sisters. Still written back with the U2 and successfully read back. :) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Just tried out SLC's unreleased bleeding edge dev version of SlushLoad. Many thanks for letting me test the work in progress.
0x0a speed worked a treat.
I even managed to get speed 0x09 with 4 pulse loader to load perfectly on my equipment but - as expected - it's too unreliable. When I say that I mean that I had one load attempt out of 3 attempts fail. Two out of three ain't bad - as the song goes - but it doesn't give much confidence in that speed and any faster being used for anything but a world record attempt - a bit like overclocking a CPU with liquid nitrogen - a fun test of the extremes, but otherwise impractical for normal use! Especially if the tape is shared between datasettes!
Anyway, there's not much to gain by going too fast. The speed increases are minimal (maybe saving a count revolution on the C2N) at the cost of reliability.
I used Super Mario Bros v1.2 crack by Excess as a test file, given that it's one of the largest compressed single file programs I could think of to use, hence errors are more likely to show up the longer the run-time.
One other thing I did note with this particular test with SMB is that somehow after the crack intro the trainer menu was magically skipped over - which was unexpected. I figured it may have been my fat finger on the space bar skipping it but on retesting, it wasn't. The original Gyrospeed had a similar issue with the keyboard buffer not being cleared until StatMat fixed it in GyroSpeedWin, so there's likely still some gremlins in the pre-next-release Slushload code. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting Zibri
Question:can some of you provide me a crunched version of giana sisters disk file "1" (entry point $84F) done with a GOOD cruncher? I don't want to try one then hear there was a better one.. and I never played with crunchers (yet).
Sure, good starting point for a test suite.
Here's the original 1.prg file + packed by exomizer 3.1.1 using default settings + the SIDrip ReLive binary: tapetestfiles.zip |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Another video (or anecdote as some clever guy called it) from Neo-Rio testing my turbo:
https://twitter.com/zibri/status/1457708314083696641
:D |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
To prevent looking stupid, you might want to read up on what anecdotal evidence actually is, before making fun of it being called what it is :)
Quote:Anecdotal evidence is a factual claim relying only on personal observation, collected in a casual or non-systematic manner. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Another video (or anecdote as some clever guy called it) from Neo-Rio testing my turbo:
https://twitter.com/zibri/status/1457708314083696641
:D
Quite a bold claim... may I ask who decided, other than you, that your loader is officially the fastest and most reliable turbo loader? :-)
Neo-Rio was pushing similar speeds with mine, and even managed to step it up one more notch, all though not with reliable results.. but I honestly didn't even expect it to work because of some limitations regarding .tap-writing from the U2 (and no, accuracy does not have anything to do with it... it's all about physics and lack of some manipulation!) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting Zibri
Question:can some of you provide me a crunched version of giana sisters disk file "1" (entry point $84F) done with a GOOD cruncher? I don't want to try one then hear there was a better one.. and I never played with crunchers (yet).
Sure, good starting point for a test suite.
Here's the original 1.prg file + packed by exomizer 3.1.1 using default settings + the SIDrip ReLive binary: tapetestfiles.zip
Hmm..
Interesting result.
With the exomized giana sisters file (assuming ALL bytes from 0801 to FFF0 were crunched, which I doubt it and I would prefer some of you could "exomize" the file "1" of the disk version of giana sisters which is my reference file)
It took 25(!) seconds less to load. and 7 seconds to decrunch before running.
That makes it 18 seconds faster than the demo you just watched.
(At the same turbo speed) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC
Neo-Rio was pushing similar speeds with mine, and even managed to step it up one more notch, all though not with reliable results..
Neo_rio was able to push my loader to it's limit. The demo video was at speed "6" and he managed to push it to speed "8" and "9".
So what?
Bite me again. :P
Please, stop this fight. Unless you can manage a NEW system, using 2 bits you can AT most, "tune" your program which in the end will be a copy of mine.
As I said: as for the time of my first post/videos/tests, my program was and is the most reliable and fast ever made and I am very satisfied by that.
Obviously, AFTER that, improvements can be made (giant's shoulders apply here) and probably WILL be made.
I am happy if you managed to have "good" results with "your" turbo. And I will be more than happy if someone will improve mine or even make it bite the dust. But unless someone comes with a new and original idea, I doubt that would likely happen anytime soon. (But with the c64 you never know..that's the beauty) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriWith the exomized giana sisters file (assuming ALL bytes from 0801 to FFF0 were crunched, which I doubt it and I would prefer some of you could "exomize" the file "1" of the disk version of giana sisters which is my reference file)
gianna_1_084f.prg is the file I exomized. Not sure what the doubt about what was crunched is?
You didn't specify which gianna sisters image to use so I lifted it from The Great Gianna Sisters - Original Hiscores.d64 on your github. If that was an incorrect guess, please point me to the right file. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting ZibriHmm..
Interesting result.
With the exomized giana sisters file (assuming ALL bytes from 0801 to FFF0 were crunched, which I doubt it and I would prefer some of you could "exomize" the file "1" of the disk version of giana sisters which is my reference file)
It took 25(!) seconds less to load. and 7 seconds to decrunch before running.
That makes it 18 seconds faster than the demo you just watched.
(At the same turbo speed) Entirely expected result, see previous posts about compression vs tape.
What makes you doubt it? =) |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLC
Neo-Rio was pushing similar speeds with mine, and even managed to step it up one more notch, all though not with reliable results..
Neo_rio was able to push my loader to it's limit. The demo video was at speed "6" and he managed to push it to speed "8" and "9".
So what?
Bite me again. :P
Please, stop this fight. Unless you can manage a NEW system, using 2 bits you can AT most, "tune" your program which in the end will be a copy of mine.
As I said: as for the time of my first post/videos/tests, my program was and is the most reliable and fast ever made and I am very satisfied by that.
Obviously, AFTER that, improvements can be made (giant's shoulders apply here) and probably WILL be made.
I am happy if you managed to have "good" results with "your" turbo. And I will be more than happy if someone will improve mine or even make it bite the dust. But unless someone comes with a new and original idea, I doubt that would likely happen anytime soon. (But with the c64 you never know..that's the beauty)
That tweet was from yesterday, which definitely was after you was made aware of my attempts too... hence my question about the "officially"-claim...
And we already established that we are using different approaches so I'm not sure how you can still claim my program copies yours. Having looked over your bits of information posted here, I also believe I use a small trick that you are not using which can sometimes improve throughput slightly. If I'm not mistaken you're using a fixed pulse/bitpair-scheme.. I go through the data in advance and do a count to see which appears more often and sort accordingly.
Trying to claim I'm influenced directly by your work in any way is just as far fetched to say that you are influenced by Soci who already did this exact same thing as both you and I are doing now several years ago. :)
I can't relate to what your "speeds" are, but if I should guess, what Neo-Rio successfully managed to play back (admittedly a bit unreliable) would be equal to your "speed 8" if I were to guess. The reason it stops there and is unreliable does not have to do with the loader itself, though. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Here is the first test.
It will be tested on real hardware in the evening.
I repeat: I don't expect speed 9 to work unless the datassette is PERFECT. Speed 9 is meant to be used on professionally mastered tapes.
Speed 7 and 8 are more likely to succeed, but yesterday one of my testers succeded at speed 9... so we will see.
https://twitter.com/zibri/status/1457739686219223048
P.S.
The file used is the one provided by TLR |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriWith the exomized giana sisters file (assuming ALL bytes from 0801 to FFF0 were crunched, which I doubt it and I would prefer some of you could "exomize" the file "1" of the disk version of giana sisters which is my reference file)
gianna_1_084f.prg is the file I exomized. Not sure what the doubt about what was crunched is?
You didn't specify which gianna sisters image to use so I lifted it from The Great Gianna Sisters - Original Hiscores.d64 on your github. If that was an incorrect guess, please point me to the right file.
Oh.. nothing I didn't think you did it now.. I thought you just got it from somewhere.
Oh.. then it's ok...
Perfect.
P.S.
exomizer at first didn't want to work with my loader :D
I had to change the initialization code (before the jump)
The same code that worked with the normal Giana Sisters didn't work with the exomizer code.
I got crazy for an hour but the solution was a single line of assembly code.
Meh.
Note to quit polemics:
I stated that my turbo is the more reliable and fast ever released.
The only way to prove me wrong is to find a proof that something has been done and posted before I did.
And by something I don't mean just a piece of code. I mean a tape or a video showing a test on real hardware.
I would be glad to see it and change my statement.
Otherwise. You know... bite me. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Maybe holding back on yet-unprovable claims until you release actual code would trigger fewer people to jump on you. =) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriOh.. nothing I didn't think you did it now.. I thought you just got it from somewhere.
Oh.. then it's ok...
Perfect.
you're welcome. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Maybe holding back on yet-unprovable claims until you release actual code would trigger fewer people to jump on you. =)
1) I don't need to release any code.
2) my results are proved by engineers and as you can see random people (NeoRio, Flavioweb are normal users).
Oh and by the way, my turbo has done 34 kilobit on an emulated device (cute32, ultimate2 and vice) can any other (slc?) do the same? (this is off-topic since we are talking about the datassette... just wondering) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Zibri1) I don't need to release any code. Sure. But claiming to be better than anyone else in 40 years, without proof... better be ready to take the heat. Also: Code or not true. :)
Quoting Zibri2) my results are proved by engineers and as you can see random people (NeoRio, Flavioweb are normal users). I see no proof of those claims. And engineers or not, their proof would be as good as anyone else's, because a proof is self-sufficient and doesn't need to appeal to authority.
Quoting ZibriOh and by the way, my turbo has done 34 kilobit on an emulated device (cute32, ultimate2 and vice) can any other (slc?) do the same? (this is off-topic since we are talking about the datassette... just wondering) Emulated devices are a lot more forgiving then real hardware, as you will know. Getting more speed out of them is the easy part. :) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
I'd still like to know the metrics used for reliability, so we can apply them to other loaders and then compare. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting Zibri1) I don't need to release any code. Sure. But claiming to be better than anyone else in 40 years, without proof... better be ready to take the heat. Also: Code or not true. :)
Quoting Zibri2) my results are proved by engineers and as you can see random people (NeoRio, Flavioweb are normal users). I see no proof of those claims. And engineers or not, their proof would be as good as anyone else's, because a proof is self-sufficient and doesn't need to appeal to authority.
Quoting ZibriOh and by the way, my turbo has done 34 kilobit on an emulated device (cute32, ultimate2 and vice) can any other (slc?) do the same? (this is off-topic since we are talking about the datassette... just wondering) Emulated devices are a lot more forgiving then real hardware, as you will know. Getting more speed out of them is the easy part. :)
I repeat:
"code or not true" is a bulls*t. I don't do fake videos (I am not even able to) and for certain nor FlavioWeb nor NeoRio did fake videos. Also Andrea Nalli the engineer behing the CUTE32 device tested all versions including the "emu only" 30 and 34 kilobit versions. The latter once even exposed a small roungin error in his own code.
I sincerely see no better judge that a person who worked with this stuff for years and has a degree in engineering, and surely is more athoritative than a bunch of wankers.
Anyway, probably the code will be release at some point or in some product or in some demo, this has yet to be decided.
And yes, I know emulated devices are "perfect" (if correctly coded like the Cute32) but still I haven't seen a turbo performing on them at 34 kilobit. And with the jitter-fest I saw in the past in most loaders it's no wonder :D
Oh, and sure you can go even faster than 34 kilobit/sec... but you need a special code and not an "all purpose" loader as the one I did, where speed is just a parameter and can go from 34 kilobit to 4 (or less.. never tried it) and at 4 kilobit the frequency separation is MORE than the one used by commodore. So I can safely state that the error rate will be way less.
That's because what causes errors is "misinterpreting" a pulse lenght/width for another (weather you use 1,2 or 4 symbols). |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Still just claims and no proof. :) (And still authority or not doesn't mean anything.)
And what Groepaz said, there should be some kind of metric for reliability, which can be measured and compared by anyone interested enough. On tangible, well, code. :) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
https://en.wikipedia.org/wiki/Argument_from_authority#Use_in_sc..
Quote:Scientific knowledge is best established by evidence and experiment rather than argued through authority as authority has no place in science. Carl Sagan wrote of arguments from authority:
One of the great commandments of science is, "Mistrust arguments from authority." ... Too many such arguments have proved too painfully wrong. Authorities must prove their contentions like everybody else.
(I strongly recommend "The Demon-Haunted World" by Carl Sagan - it's a phantastic resource on how to detect bullshit) |
| |
Adam
Registered: Jul 2009 Posts: 323 |
Quoting Zibri1) I don't need to release any code.
release code or gtfo. really simple process for most people. or did you steal this code too like the rest of the garbage you have on your github page?
Quote:"code or not true" is a bulls*t. I don't do fake videos (I am not even able to)
what an amazing story. if only you weren't a well known compulsive liar, then it might actually be believable. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting Zibri1) I don't need to release any code.
release code or gtfo. really simple process for most people. or did you steal this code too like the rest of the garbage you have on your github page?
Quote:"code or not true" is a bulls*t. I don't do fake videos (I am not even able to)
what an amazing story. if only you weren't a well known compulsive liar, then it might actually be believable.
I don't even argue on what you wrote: you're just a nobody only able to steal code, mock people.
I have at least 10 witness (who also saw the code) and I have to prove nothing to you nor anyone else.
I thought I would share my findings but clearly excvept for a few exception this was the wrong place.
But I somehow enjoy to see you all getting heated and WANTING to see a code you clearly don't imagine or can't imagine if not by using the elements I already posted.
And I repeat: my turbo did 34 kilobit on emulated devices (30 with the exact same code.. 34 without the inc d020 and the sound).
And 11-12 on a very good datassette.
On even the most horrible datassette it didn't go below 8 kilobit and thos are twice the standing record on real hardware.
I am more than satisfied with all this and having a lot of fun between a dive, some sun and good food.
Bite me, or enjoy with me. Your choice. |
| |
Hate Bush
Registered: Jul 2002 Posts: 465 |
> having a lot of fun between a dive, some sun and good food
oh how i enjoy you living the life, as compared to those ugly creatures rotting in their dark, rain-soaked cellars and munching on turds.
what's next, an invitation to an MLM scheme? :) |
| |
Adam
Registered: Jul 2009 Posts: 323 |
Quoting ZibriI don't even argue on what you wrote: you're just a nobody only able to steal code, mock people.
i don't steal code, unlike you. remember how i busted you before and i sent you messages and you denied it? even though i showed screen caps to show you were a lamer? good times to be had by all. forgot all about that, didn't you? you couldn't even be honest with where you stole that BASIC code from. you're not fooling anyone here.
Quote:I have at least 10 witness (who also saw the code) and I have to prove nothing to you nor anyone else.
and we still see no code. what a surprise. post code or gtfo.
Quote:I thought I would share my findings but clearly excvept for a few exception this was the wrong place.
you got that right. if you want to be a compulsive lying attention whore, you should stick to twitter and using facebook.
Quote:But I somehow enjoy to see you all getting heated and WANTING to see a code you clearly don't imagine or can't imagine if not by using the elements I already posted.
post code or gtfo.
Quote:Bite me, or enjoy with me. Your choice.
post code or gtfo. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: > having a lot of fun between a dive, some sun and good food
oh how i enjoy you living the life, as compared to those ugly creatures rotting in their dark, rain-soaked cellars and munching on turds.
what's next, an invitation to an MLM scheme? :)
LOL! no, but if you want to come to Sharm El Sheikh I'll show you what a paradise is here :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Adam
post code or gtfo.
GNE GNE GNE (sound of a baby crying and whining) :P |
| |
Adam
Registered: Jul 2009 Posts: 323 |
Quoting ZibriQuoting Adam
post code or gtfo.
GNE GNE GNE (sound of a baby crying and whining) :P
it's just that easy to expose you as the compulsive lying fraud that you truly are, zibri. walls of text, questionable videos, abusing everyone and nothing to show for it.
if you weren't a disgusting compulsive lying fraud you should be able to easily post code, but it's safe to say you have nothing (or the code is completely stolen from another project - highly likely since you've done this thing before). :) |
| |
Count Zero
Registered: Jan 2003 Posts: 1932 |
Zibri: quit blabla and repeating yourself. "New life for your underloved datassette unit :D" is what you have chosen as topic - provide some binaries to the public in whatever format to fill that title with more life. Premastered crap at speeds up to blablup even!
Rest: quit getting triggered by blabla.
*looks at the CLOSE button* |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Well the videos are of my setup, I can vouch for that.
All the same, I'd like to do an apples-to-apples comparison between Zibri's and other turbos, but without his mastering tools (yet), I can't really do that.
Going for a speed world record is one thing, but trying to find that sweet spot of speed AND reliability is a bit harder to test, because we need to simulate "real world" use scenarios by non-engineers using standard hardware, and only allowing for manual azimuth alignment, head cleaning, and mastering with C2N decks ONLY without fancy equipment.
Here's what I'm thinking (so please chime in if you have better ideas!) :
I have two tape decks. The clone deck as seen in the video, and an official commodore C2N that has never had it's azimuth adjusted, so it is basically a factory setting.
Both decks have been run through the Interceptor "Azimuth 3000" tape and passed with a HEADS ALIGNED message. Azimuth 3000, however, plays a bit fast and loose with head alignment. It tolerates a bit of divergence with the azimuth screw position beyond the tightest allowable azimuth position, and yet the tightest possible azimuth position won't load the test game "Bandana City" on the back of the tape. It needs to be loosened just a bit further.
All the same, this should simulate some "mostly aligned" divergence between aligned tape decks.
I figure if I do the "mixtape test" and master an entire C90 tape side with a turbo loader of choice and particular speed setting, I *should* be able to get the entire side to load without error on the other deck, since they are both more or less "aligned". A C90 should be used because apart from it straining the tape motor it simulates a mixtape of yore :D The loader should be resilient to the motor pulling different sized spools of tape depending on where in the tape spool the head is reading.
I can get to work playing with Slushload (we estimate the sweet spot is somewhere between 0x0a and 0x10), but I'll have to wait until Zibri is ready to release his mastering tools before I (or anyone else for that matter) can test his head-to-head with the same file.
It may just turn out that both loaders come within half a counter revolution of each other anyway :D |
| |
TheRyk
Registered: Mar 2009 Posts: 2244 |
Quote:... personally, I don't find x64sc so much more accurate.
cpu speed still wobbles and is never a "still" 100% even in the sc version. ...
performance of CPU eating emulators, for sure, depends on your (nowadays!) hardware, OS & whatnot...
But higher accuracy of X64sc vs X64 is NOT a matter of opinion.
If you're lucky, it doesn't matter (would mean whatever ancient X64 emu you use is accurate enough). But as your project is dealing with real hardware (if I got "datassette unit" from the thread title right), it rather makes me frown to read your (as of yet still unreleased) progress made so far is based on X64... Wouldn't it make sense to use the most accurate emulator you can get - or better: real hw? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting TheRykQuote:... personally, I don't find x64sc so much more accurate.
cpu speed still wobbles and is never a "still" 100% even in the sc version. ...
performance of CPU eating emulators, for sure, depends on your (nowadays!) hardware, OS & whatnot...
But higher accuracy of X64sc vs X64 is NOT a matter of opinion.
If you're lucky, it doesn't matter (would mean whatever ancient X64 emu you use is accurate enough). But as your project is dealing with real hardware (if I got "datassette unit" from the thread title right), it rather makes me frown to read your (as of yet still unreleased) progress made so far is based on X64... Wouldn't it make sense to use the most accurate emulator you can get - or better: real hw?
I agree. I tend not to use real hardware myself. I am in a hot country and now it's not exactly the right season :D
Anyway I have a few testers more than happy to do that for me.
From my point of view it does not matter how accurate is the emulator since I use it mostly to check the main logic.
Also from my own tests I saw no difference between x64 and x64sc concerning the tape or my code. Aside from some nasty bugs in the machine monitor, I find it very handy for testing.
Al real tests are done on real hardware anyways. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Use x64 for development and quick debug turnaround cycles.
Once good, see if still good with x64sc. If not, continue with x64sc only.
Once good, see if still good on realthing. If not, send minimal test program to VICE team. :)
Quoting Zibri... personally, I don't find x64sc so much more accurate.
cpu speed still wobbles and is never a "still" 100% even in the sc version. ... The improved accuracy refers to emulation of realthing. Things that make a difference for cycle-exact (or even sub-cycle exact) interaction of the different components of the emulated system.
It has nothing to do with virtual CPU speed deviating from real time here and there. Having stable 100% emulated CPU speed would require a real-time OS, at least. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Actually the speed of the emulated cpu directly relates to the accuracy of the audio driver in your system, since that is what it syncs to :) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
I tested out Zibri's loader a bit more and we came to a bit of a sweet spot. Pity if he is not planning to release anything.
So I did some more testing with Slushload.
So far I narrowed down Slushload's sweetspot to around 0x0c to 0x0e, with 0x0c being on the bleeding edge of fast/reliable.
Been having really good results swapping a 4 pulse 0x0c mastered TAP on my official Commodore C2N tape between it and my clone deck and experienced no load issues so far.
0x0a and 0x0b occasionally had load errors on the deck that mastered them, so those speeds are out of consideration for me.
Will try using older tapes to see how this speed holds up between decks, and how far I can shift the alignment of my clone deck before it can't read the master from the other deck reliably anymore.
Still investigating the SMB trainer menu issue. Seems like it is keyboard buffer related. Loading the created TAP with SHIFT+RUN/STOP seems to trigger the issues, but that's an easy fix if it is. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Neo-RioI tested out Zibri's loader a bit more and we came to a bit of a sweet spot. Pity if he is not planning to release anything.
I didn't say exactly that; it will be released, but at the time and form I will see fit. I won't release an incomplete and not yet fully tested program.
Also, while it will have a similar accuracy, the mastering program has yet to be completed and it may even cause changes the main loader. As I said these videos and tests are just an early preview I hoped you people would have simply enjoyed.
Lesson learnt. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
One thing I have learned from these tape reliability tests was that having a good quality cassette can make a huge difference! It's fairly obvious that it would, but just *how much* of a difference it makes was news to me - especially at these turbo speeds.
I have a TDK D90, and a Maxell UE 90, and the TDK one allows for high speed mastering. I did all Zibri's testing with the TDK tape.
With slushload at 0x0c between both of my decks the TDK tape worked fine, but the Maxell tape just encounters way more errors at that speed and I had to drop the mastering speed right down to 0x10 in order to get the deck that wrote it to load it back. Even then - when transferred to my other deck it loaded up until the end and then failed.
Needless to say - when mastering tapes for general consumption, use good quality ones preferably no bigger than 60 minutes (as the tape thickness of a 90 minute tape and above is weaker)
And the keyboard buffer issue in the bleeding edge Slushload RC version I am testing got fixed and the issue is now resolved. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:preferably no bigger than 60 minutes
C30 or C20 actually... which of course are unobtanium these days :) Most important is to use Type-I types though. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: Quote:preferably no bigger than 60 minutes
C30 or C20 actually... which of course are unobtanium these days :) Most important is to use Type-I types though.
Yes! I remember being able to get dedicated "computer" tapes back in the day of C15 and C20 size.
Anyway, I've been researching these Maxell UE tapes that I have and I think they're counterfeit tapes! No enthusiast circles mention it anywhere (other than the legitimate Maxell UR), and there are no Maxell markings on the tape itself and no labels to apply onto the tape in the case... and yet there are Maxell UEs on ebay with tape labels...
Also I had a second one which I tried and that produced errors even with Gyrospeed when I tried to load it in my other deck, so it's just a BAD fake tape and not worthy of using - and hence shouldn't further influence any reliability tests.
The TDK D seems like the king of Type I cassettes - but while you used to get them dirt cheap, finding them these days is costly - and then there's the risk of ebay knockoffs.
Also tape enthusiasts rave about Sony BHF or HF tapes, and BASF LH-extra I tapes - but I have zero experience with mastering to them, as TDK Ds are the only good tapes I have.
There are also lots of TDK Bs knocking about but many might be fakes. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Neo-Rio
I have a TDK D90, and a Maxell UE 90, and the TDK one allows for high speed mastering. I did all Zibri's testing with the TDK tape.
Just for curiosity (I don't expect "much" difference but some, yes) did you try my tests on the "bad" tape? It would be interesting a comparison on that too. ;) |
| |
Frantic
Registered: Mar 2003 Posts: 1648 |
Quote: LOL! no, but if you want to come to Sharm El Sheikh I'll show you what a paradise is here :D
A random girl at Twitter just started a thread about "worst place you've travelled to", and her own suggestion was precisely Sharm El Sheikh, which she found really awful. Now of course I realise that people have different tastes, and personally I know nothing at all about Sharm El Sheikh — maybe it is totally great — but it was still kind of funny in relation to this thread. Hehhe..
Aaaanyway... back to topic and keep up the good work on those loaders! I'm eager to see what comes out of it. Maybe I should get myself a datasette again after all, just to be able to load real quick. :D |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: Quoting Neo-Rio
I have a TDK D90, and a Maxell UE 90, and the TDK one allows for high speed mastering. I did all Zibri's testing with the TDK tape.
Just for curiosity (I don't expect "much" difference but some, yes) did you try my tests on the "bad" tape? It would be interesting a comparison on that too. ;)
No I never did any of your tests on the bad tapes. I don't think there'd be much point.
One of the decks had occasional trouble getting to FOUND without distortion creeping in one in every five or so attempts - and that's before it even reached the tape turbo!
I could give it a go anyway, but I would not be expecting miracles! These tapes are only good for people who like their music with snakes hissing as backup singers. :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Neo-RioNo I never did any of your tests on the bad tapes. I don't think there'd be much point.
One of the decks had occasional trouble getting to FOUND without distortion creeping in one in every five or so attempts - and that's before it even reached the tape turbo!
Oh.. then it's very bad, because everything before the lines start is in standard commodore format (like any other normal save)
Also, note, I gave you test files, they have redundant data on them and if you want to compare speeds or counter clicks you should compare from when the "thin" lines start and not before that. In the final version everything before that will be way shorter.
Also note: I made a big calculation error on the last files I gave you. I sent you the updated ones. I was very tired yesterday, it always happens after swimming and taking sun :D
Sorry for wasting some of your time.
And thanks again for the tests. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting FranticA random girl at Twitter just started a thread about "worst place you've travelled to", and her own suggestion was precisely Sharm El Sheikh, which she found really awful. Now of course I realise that people have different tastes, and personally I know nothing at all about Sharm El Sheikh — maybe it is totally great — but it was still kind of funny in relation to this thread. Hehhe..
Yeah.. sure.. I have enought money to live anywhere and I chose the worst place because I am a masochist :D sure.
Many people have horrible holidays here because they go cheap and trust shady travel agencies or go to bad resorts.
I live here full time since 6 years. And it's paradise.
(Unless you like snow, and cold weather, then is hell)
Quote:
Aaaanyway... back to topic and keep up the good work on those loaders! I'm eager to see what comes out of it. Maybe I should get myself a datasette again after all, just to be able to load real quick. :D
ehehe.. the 1541 thanks to the great works of Krill is unbeatable. Internally it uses 26 to 32 microseconds per bit and even considering GCR format that goes at 32.5 to 40 microseconds per bit. That is the equivalent of 25000 to 30769 Hz. which is 3 times what the datassette can handle.
The datassette amplifier has a filter cutting everything above 11Khz (barely detected at 12khz)
An interesting thing of the datassette, anyhow, is that you can directly control it from the C64, while on the 1541 you have to use the IEC bus which is the bottleneck.
Thanks to krill and realtime GCR and 2 bit transfer that is less "felt" but still... |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
While it's relatively easy to align your equipment and master your own tapes for your own use, it's another thing entirely to master a tape with no fancy equipment other than the C2N and then spread warez (lol) to other datasettes - and have the programs load without issue. And then do it on a deck that has probably never been serviced, and has a drive belt that is 30 years old and worn out!
To do this test, I kept the same TDK D90 and had one C2N master the tape, so the other could read it.
Makes absolutely no sense in this day and age to master to garbage tapes for general consumption, and a 90 minute cassette is a borderline length for normal use.
I am simulating the average CBM C2N deck out there and stuck in someone's loft with my CBM deck that has never been serviced, or had it's alignment adjusted. In many ways it is dialing down my test speeds considerably to reach that happy sweet spot where the loader should work on most anything within a user serviceable context.
So my CBM had issues with speeds under 18, and even with 18 had a glitch on loading the very tape it mastered until I tried and second time and it got it right. Interestingly loading the tape on my much newer clone deck presented no issue, but without a doubt, my clone deck is better for making tape masters.
I think Zibri's table is more or less accurate. 18 is the bleeding edge of reliable (if you can tolerate the occasional load failure), 19 may be the sweet spot, and 20 should be rock solid even on a mistreated C2N you found in a car boot sale.
That said, 16 is a reasonably reliable speed for well serviced units and self-made masters you only intend to read for yourself.
According to Zibri and all the dumps I've sent him to analyse, my old CBM deck has a lot of wobble and that's probably down to the worn-out drive belt. I may just hunt down a replacement and see if that helps in the reliability stakes. I guess it makes sense that anyone still using a datasette TODAY get a replacement square belt (75-80mm L x 1-1.2mm W seems to be about the right dimensions), and get rid of any 30 year old belt that's had it's day.
Anyway, we'll see if any improvements need to be made yet, and I'm sure there's more testing to do. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
That brings us back to the question how c2n hardware is specd regarding wow and flutter (wobble) :) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: That brings us back to the question how c2n hardware is specd regarding wow and flutter (wobble) :)
And I don't suppose Commodore ever documented this - other than in software?
Software that carried two copies of the data and took forever to load... ?
Did third party software houses ever receive support from Commodore for mastering tapes en masse, or was it simply a wild west? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Not Commodore - but the vendors of the tape mechanics surely did this. Commodores implementation surely is based on the specs of the tape mechanics used in the 2001 PET, and then was just reused again and again. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Update: turns out that because of a previous version comment in the code, my program was OFF by a lot of cycles (and still performed).
After the correction of the typo, the program gave STELLAR RESULTS.... showing all his accuracy...
The program was working also before... but the results I was given didn't "add up" to what they whould have been.
I worked on it a night and the files were perfect.
The loader wasn't :D
It's parametric, and I was calculating wrongly it's parameters :D
Now I can finally say that unless another loader will use my same method, I will always be able to match it and surpass it.
P.S.
I created a program that checks 62K of memory and loads at $801 to FFF0.
Then it checks all memory with a simple 16 bit XOR on all bytes BELOW the ROMS and BELOW SID, VIC and CIAs chips.
The resulting prg works if loaded from ultimate or vice monitor or from some custom loader (like giana sisters).
If you want the file, it's here:
https://github.com/Zibri/C64/raw/master/chkram.prg
To load it in VICE just go to the monitor and write
l"chkram.prg" 0
x
then from c64 you can just do RUN
the file contains just "urandom" data and the data is checked in the range 0800-FF00
I can do a version that checks from 0500 to FF00 if that's not enough... my loader will load that too.. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
I continue to play with these loaders and I think the difference between them is something akin to arguing over VHS and betamax.
My current reliability test has me using a TDK D90 to master a TAP in my newish aligned clone deck (which is capable of running Zibri's at it's master 15-6 setting - which even then isn't as accurate as professional hi-fi equipment or a CUTE32), and then trying to get that master to load in my CBM deck - which has never been serviced EVER - and work three times in a row without a single failure.
With the latest RC of slushload:
0x0c - had a single failure, so it's probably not as reliable as I first thought
0x0d - passed all three loads, and on the fourth load I shook the datasette around and only then did it fail
0x0e - passed and resisted abuse
Which makes 0x0e probably the best setting for general DIY mastering on decent tapes for distribution.
With Zibri's loader:
I've been trying his 21-14 setting and it failed the test, but his 24-24 setting worked fine. Note that there are two settings on Zibri's so more possible combinations of loads that are going to be reliable and those that aren't. The settings probably need more tuning for my crap deck, and it's not as fast obviously. Zibri is adamant that his loader be used on well maintained equipment and his code is more tunable than is Slushloads. Also this means that he can probably master a tape so well that it will be incredibly hard to copy with the old dual decks trick. If it was 1984 he might be showered in cash from EA or some other publisher.
So while it seems that Zibri's is the fastest, hands down - it's reliability is fairly limited to well maintained equipment - like betamax.
Slushload is not as fast, but comes across to me as fast enough with less reliable equipment - like VHS.
And really - speeds between the two? there's not much between them. A counter turn or so. Slushload however needs to stop cheating with the shorter tape lead in, as it's causing my old CBM deck lots of problems picking up FOUND and even loading in the first place.
Now I have absolutely no technical understanding of what I am currently seeing. I'm not digging into anyone's code. I've just been sitting around making masters and seeing the results for the past couple of days.
Well, that's the state of play so far - and I'm just one person's opinion and review. Everything is subject to change as both codebases aren't even finished yet.
What is for certain is that Gyrospeed has been surpassed. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Still some proper metrics needed for useful comparison, especially regarding reliability :) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting GroepazStill some proper metrics needed for useful comparison, especially regarding reliability :) Lacking proper specs, i guess we're left with whatever we have.
So, i wonder if one could make a tape wobble measurement program.
I'd expect the wobble to be rather slow, with speed differences covering many pulses. And if that is so, perhaps, one could dynamically adjust pulse width detection thresholds, for greater reliability and perhaps even overall shorter pulses and faster loading? =) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting KrillSo, i wonder if one could make a tape wobble measurement program.
I'd expect the wobble to be rather slow, with speed differences covering many pulses. And if that is so, perhaps, one could dynamically adjust pulse width detection thresholds, for greater reliability and perhaps even overall shorter pulses and faster loading? =)
There's some info here: https://en.wikipedia.org/wiki/Wow_and_flutter_measurement
Not sure if a standard-ish measurement can be made with a tape deck containing a pulse detector like the datasette, but probably it could.
Quoting KrillI'd expect the wobble to be rather slow, with speed differences covering many pulses. And if that is so, perhaps, one could dynamically adjust pulse width detection thresholds, for greater reliability and perhaps even overall shorter pulses and faster loading? =)
For the slow changing part it is possible. I do that to some extent in the Trance Sector loader. I think the ROM tape loader does that too, or is it only regulating on the pilot? |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Measuring should be rather easy... IF you have a pretty decent hifi deck, just record a reference signal, and then use something like recorder justage that plots the measured pulselengths. could be interesting to collect some data this way :) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting GroepazMeasuring should be rather easy... IF you have a pretty decent hifi deck, just record a reference signal, and then use something like recorder justage that plots the measured pulselengths. could be interesting to collect some data this way :)
yes, IF. I have at least two, but they've been completely unused since perhaps 20 years. Chances they are worse than the datasette now. :) |
| |
enthusi
Registered: May 2004 Posts: 677 |
Oh, missed all that.
There used to be a few loaders with multiple bits encoded in several bit lenghts.
The aforementioned loader by Thomas Jentzsch as well as the loader from C't magazine that was ported to multiple systems.
The latter reaches ~3600 Baud with option for 7200 with the warning that it will fail with many datassettes.
This is the point. Speeding up encoding and in particular decoding has its limits. I mastered several real world tapes. IRQ-loader and TurboTape-likes (and even heavy error correction ones - see 'neoload') and tested loaders on at least 20 different c2ns*. And even had to tune a loader to work at a party with people switching their big CRTs on/off :)
*(that part is crucial, there is no handshaking. Different c2ns will read things differently - even when both are 'aligned' to their best.)
Some loaders also auto-tune themselves to the registered pilot tone. To some extent even the ROM loader does that.
While technically quite possible, I personally consider everything considerably tighter than TurboTape to be unreliable.
The meaning of azimuth is quite understood.
The headalign tools aim for minimal scatter (not zero scatter which is as you noticed not achievable in those codes).
And there IS a high res tape data format because TAP is very crude: https://www.luigidifraia.com/technical-info/
sampling at 2 Mhz. And in Fact dumps are being made at this rate. Or higher even to investigate asymmetric signals which are a nice way to throw off some attempts to copy those tapes.
You can btw also inverse the data direction and use the data line as antenna on tape and use that as sampler AND loader. Tested. works. World first. But totally unreliable.
Not all that works can/should be used.
Loaders that prefer certain bits are not going to be faster than loading properly compressed data to begin with.
What is more tricky: decompress WHILE loading :)
What you observe (some bit pairs being faster and hence preferred etc) can also be seen in these simple tests as well :)
http://enthusi.de/oldhp/c64/tape/
With all that said: nice work, have fun! |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Decompression while loading would be something else.
Essentially I imagine that the decompression would also act as a checksum for the incoming data as well - meaning that you don't have to do it separately.
Or more simply, you could just write a tapeloader with no reliability checks and let the fully compressed file's decompress routine sort it out. If the tape loader is fast enough, a load error will come relatively quickly and shouldn't be too much of an inconvenience as the computer will crash anyway at the end.
Of course, in the latter case, some corruption may slip past the decompress routine and then you end up with a glitching piece of software :) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
There were loaders that detect block errors and then tell you to rewind and reload (betaskip iirc?) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quote: There were loaders that detect block errors and then tell you to rewind and reload (betaskip iirc?)
Super Pavloda and/or Pavloda, IIRC. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Another interesting approach might be to put ECC data after the regular data, so incase errors are being detected, it will just take longer to load instead of giving load error. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting enthusiOh, missed all that.
The aforementioned loader by Thomas Jentzsch as well as the loader from C't magazine that was ported to multiple systems.
The latter reaches ~3600 Baud with option for 7200 with the warning that it will fail with many datassettes.
Mine reaches 4100 kilobit at the same reliability of commodore own loader.
Quoting enthusi
This is the point. Speeding up encoding and in particular decoding has its limits. I mastered several real world tapes. IRQ-loader and TurboTape-likes (and even heavy error correction ones - see 'neoload') and tested loaders on at least 20 different c2ns*. And even had to tune a loader to work at a party with people switching their big CRTs on/off :)
*(that part is crucial, there is no handshaking. Different c2ns will read things differently - even when both are 'aligned' to their best.)
If it was coded like the other I saw around, probably.
Quoting enthusi
Some loaders also auto-tune themselves to the registered pilot tone. To some extent even the ROM loader does that.
While technically quite possible, I personally consider everything considerably tighter than TurboTape to be unreliable.
They are but not just because of the pulse length, but because of the inaccuracies in the loader code.
My code (that was my main goal) is 100% accurate, with 0 jittering and a 2 cycle accuracy.
It has parameterts that make it possible to select ranges and bandwidths in 2 cycle steps.
And at the same pulse length of any other loader, has better results both in speed both in error reliability.
As an example, if I use my "speed 0" it still gets 4kilobit/sec on a compressed file but with a HIGHER error resilence than the own commodore slow loader.
Quoting enthusi
The meaning of azimuth is quite understood.
The headalign tools aim for minimal scatter (not zero scatter which is as you noticed not achievable in those codes).
And there IS a high res tape data format because TAP is very crude: https://www.luigidifraia.com/technical-info/
My results are checked by and engineer that worked 10 years on the cute32 and other devices. And cute32 can use a format called HTAP which not only is more granular than tap (to the cycle) but also defines both raising both falling edges,
"describing" all the signal.
Quoting enthusi
Loaders that prefer certain bits are not going to be faster than loading properly compressed data to begin with.
My loader just optimizes the representation of the bits. It still has 4kilobit speed on an exomized file or a random one.
The optimization kicks in only in uncompressed files.
Quoting enthusi
What is more tricky: decompress WHILE loading :)
What you observe (some bit pairs being faster and hence preferred etc) can also be seen in these simple tests as well :)
http://enthusi.de/oldhp/c64/tape/
With all that said: nice work, have fun!
I will discuss my code and make comparisons when I will release it, but the tests are all positive.
If the commodore loader work then also my 4-5 kilobit parameters will work. It's that simple.
I could even (untested yet) use a wider "bandwidth" as commodore. So even if commodore save/load will fail (on a defective tape or hardware) my loader will succeeed and still keep 3-4 kilobit/s speed. But to load the loader you'll then need a cartridge or floppy, since the commodore load would fail. :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
quick and dirty test program:
random data from $0801 to $FFF0
checked with 16 bit xor checksums
result is fail or success.
https://github.com/Zibri/C64/raw/master/chkram.prg
To test it:
load with
enter monitor in VICE:
issue:
bank ram
l"chkram.prg" 0 in VICE
exit and type RUN
Loader must:
load the program and run it (entry point is $80d)
P.S.
I know I could have made a nicer one, but I am lazy and this does the check I needed.
And I know colors are ugly :D
If anyone wants to provide a nicer one you are welcome to do so, but the checkd range must be no less than 0800-FF00
32 or 64 bit checkers are welcome too. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
if you want other ranges (including $0000-$ffff), there is a test file generator (cgen) in cbmtools 0.8.
Note that it currently generates random RLE compressible data which may or may not be what you want. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlrif you want other ranges (including $0000-$ffff), there is a test file generator (cgen) in cbmtools 0.8.
Note that it currently generates random RLE compressible data which may or may not be what you want.
No. I meant my chkram is ugly. That's all. But it works as a test file and almost no other loaders (very few) support a so big file which loads data in all ram (below SID, CIAs and VIC too) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriQuoting tlrif you want other ranges (including $0000-$ffff), there is a test file generator (cgen) in cbmtools 0.8.
Note that it currently generates random RLE compressible data which may or may not be what you want.
No. I meant my chkram is ugly. That's all. But it works as a test file and almost no other loaders (very few) support a so big file which loads data in all ram (below SID, CIAs and VIC too)
I guess my comment was aimed at all thread readers rather than your specific case. Haven't tried your chkram.
I don't think it was very uncommon that a tape loader loaded under I/O, maybe the oldest turbo tape variants didn't but Turbo 250 is a good example and a lot of (most?) commercial loaders loaded under I/O. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Quoting ZibriQuoting tlrif you want other ranges (including $0000-$ffff), there is a test file generator (cgen) in cbmtools 0.8.
Note that it currently generates random RLE compressible data which may or may not be what you want.
No. I meant my chkram is ugly. That's all. But it works as a test file and almost no other loaders (very few) support a so big file which loads data in all ram (below SID, CIAs and VIC too)
I guess my comment was aimed at all thread readers rather than your specific case. Haven't tried your chkram.
I don't think it was very uncommon that a tape loader loaded under I/O, maybe the oldest turbo tape variants didn't but Turbo 250 is a good example and a lot of (most?) commercial loaders loaded under I/O.
Yep. That's right. Giana Sister's loader loads under IO and CHIPS too.
But I haven't seen it in many others... Usually the files are split in smaller ones and one ends up under the roms sometimes. Under the chips is more rare though.
UPDATE:
new "checkram.prg" (now with a clean exit to basic and blue background)
https://github.com/Zibri/C64/raw/master/chkram.prg
This is from now on my test program.
Made of all random data saved under chips and between $801 and $FFF0.
Range checked is: $0800-$FF00.
Can someone tell me how many loaders support this?
I am very curious. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
Just update $01 as needed during the store or when reading timer CIA timers and acking IRQs. It's not hard at all. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Just update $01 as needed during the store or when reading timer CIA timers and acking IRQs. It's not hard at all.
Many loaders support it already, including the legendary Turbo 250 by Mr. Z. But as Martin Piper points out, this is nothing special. My loader does $0400-$fffa anyway, and did from the very start. The one I uploaded that I called "Pointless" does $0800-$fffa already, so.. again.. nothing special about it :)
Some commercial loaders have chosen to do it differently, though. They load the file somewhere else in RAM first, then copy it to $d000-$e000 (which is the only memory location you require a $01 change for during loading anyway). Freeload is one of the loaders that does this. I don't remember if this is also the approach for Novaload, but I think it might be.
I think the main reason why turbo loaders such as Super Tape (not to be confused with Input64s Super Tape), GRL Turbo, etc. didn't load higher than $d000 is because regular kernal load doesn't allow it, so I simply think many considered it quite pointless to support it. |
| |
enthusi
Registered: May 2004 Posts: 677 |
This should support it.
https://csdb.dk/release/?id=95190&show=notes#notes |
| |
Fungus
Registered: Sep 2002 Posts: 686 |
Bleepload checks for bad blocks and even tells you how far to rewind.
Pretty much any commercial loader can load anywhere in ram after 1984, better question is which ones do not.
What's next, making IRQ or NMI loader which plays music as special feature? Maybe invade-a-load clone? :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC
I think the main reason why turbo loaders such as Super Tape (not to be confused with Input64s Super Tape), GRL Turbo, etc. didn't load higher than $d000 is because regular kernal load doesn't allow it, so I simply think many considered it quite pointless to support it.
It's not in my opinion. The fact that commodore doesn't support it means nothing. Commodore didn't "support" 99.9% of the things that were done after the release of the C64 :D
And that's why my loader supports that too.
After a cleanup, my loader supports from a normal basic program to a full 64K image (excluding the locations where the small loader code is which are a bunch of bytes).
At the moment I rechecked all parameters, cleaned up also the mastering program (written in python and multi-platform).
And now I will proceed with the difficult task (for me at least) to make a mastering program FOR the C64.
That's not going to be easy without any jittering like my loader is but I have a few ideas. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Just pointing out that it wasn't "not done" because it was deemed an impossible task or anything. A lot of commercial loaders loads $d000-$e000.
But yeah, I agree.. in this context, a bare minimum should be loading $0400-$fffa... :) |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
As compression algorithms got better and file sizes got smaller, being able to load under the IO/VIC/CRAM probably got less important as well. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Just a note about error reliability, since I see some confusion on the matter.
Reliability is given by 3 factors:
1) frequency range (the higher the more the azimuth and tape media must be perfect ..e.g. TDK D60 or better)
2) frequency "separation" or bandwidth.
3) acuracy of code.
Commodre uses 3 "symbols" with a base pulse lenght of $30 (in tap values) separated by $12 ($42) or $14 ($56)
Both the save program AND the loader have a big jitter of even 8 cycles or more. Thus losing a lot of accuracy and needing bigger separation.
So, let's say I set my turbo to $30 with $12 separation and my error resilence, will be about 150% of the commodore one becase my code ha zero jitter.
Moreover: speed "0" of my loader is higher in frequency but has 1 time and a half the bandwith of the standard commodore loader. It has proven to work even on a very unstable and in need of service datassette owned by NEo Rio, a member of this forum.
Speed 0 has "$18" as separation. And it still keeps a more than respectable speed of 4.4 kilobit/sec.
On his "debatable" hardware it even worked speed 1 and 2 (as the table I posted shows they are the most reliable and forgiving speeds).
Using the same base frequencies and separation of other turbos, my turbo proved to be more stable and error free than the counterpart (depending on the settings obviously).
A jitter, even minimal in code is like saying that your "borders" are "about there". Meaning you must use wider ranges to be sure the signal was actually there.
With zero jitter you are sure the signal arrived at precisely THAT time.
Another important factor is the "readiness".
My code is ready before the 40th cycles after the pulse arrived. I have therefore some "wasting time" routines there at the moment which could be instead used to play a tune of do some raster effects or even nothing. At the moment it just does the usual INC $D020 (6 cycles) and and plays the tape audio on the sid, but it could be a tune instead of the screeching sound of the tape pulses).
Unless a loader will use my exact same method (I tried many other methods) there is no way it can be faster.
And whatever method it uses it can't be more accurate than mine (no jitter, 2 cycles accuracy).
Now, this is all anecdotial for people who never did something like this, but 4 testers plus an independent one can't be all posting photoshopped videos for a complicated hoax, don't you think? Think what you prefer. I am fine as I am.
I just need to code a good writer program for the c64 and that's another very complex task. Sure I could use a timer but it won't be as accurate as the loader is.
A last note: if the writer also has a jitter, that jitter sums and in some moments multiplies by th loader jitter, lowering the accuracy by another order of magnitude or two in the worst case. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
My standard tape loader, no real optimisation or speed tweaks, can load 33,096 bytes in 62 seconds (with the screen enabled, flashing sprite, music with music load, bitmap load, then data load) which I think works out to be 4270 bits/sec.
Plus overhead for block checksum and gaps between blocks and files.
TAP file bytes are $20 and $40. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
If I use tape file bytes $18 and $30 then it loads in 44 seconds, which is I think, 6017 bits/sec. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: My standard tape loader, no real optimisation or speed tweaks, can load 33,096 bytes in 62 seconds (with the screen enabled, flashing sprite, music with music load, bitmap load, then data load) which I think works out to be 4270 bits/sec.
Plus overhead for block checksum and gaps between blocks and files.
TAP file bytes are $20 and $40.
What kind of data is relevant. If it's unpacked it will load somewhat faster than if it is packed if there's a majority of zero bits in the data. With a 50/50 separation which is roughly what you'd expect with a crunched file, you would have ended up with 105 seconds for that file size if you're using a standard 0/1 encoding scheme (if I didn't miscalculate).
33096 bytes * 8 bits = 271248 pulses needed
271248 / 2 = 135625
135625 * 256 = 34720000 total cycles of short pulses
135625 * 512 = 69440000 total cycles of long pulses
104160000 cycles / 985248.0Hz = 105,7 seconds ~ 2504 bit/s.
(Freeload from Paul Hughes uses the same pulse lengths)
If you are using a different encoding scheme or some realtime unpacking, these numbers of course do not apply. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
Well that's the point about how and where to use symbols to encode data combined with their relative error rates given the mechanics of the tapes. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quote: Well that's the point about how and where to use symbols to encode data combined with their relative error rates given the mechanics of the tapes.
To have the right calcluation of the "turbo" data, just do this:
SUM all values of the pulses leght from start to end of the turbo section.
Then divide that big number by 123156 and you will get the seconds. Then divide total number of bytes and divide by seconds and you will get BYTES/sec then multiply that by 8 and you will get BIT/sec
In other words. if your SUM of all pulses lenghts in the TAP file (turbo section) is "ttime", the formula is:
bit/s = len(data)*985248 / ttime (for PAL)
bit/s = len(data)*1022727 / ttime (for NTSC)
Let's put it this way:
in your case ($20/$40) it's like having a file made all of $30 on average.
you will have $30 * 8 symbols per BYTE in your TAP file.
in a 2 bit encoding instead, you will have half of them :D
let's say in your 2 bit encoding your 4 symbols will be:
$18 $28 $38 $48
that would be the same as having all $30 on average.
in my turbo that encoding is called "24 16"
it's one of the slowest and more error resilent (the best is 24 24)
On a test file (archon exomized) my 24 16 does:
File size: 22073 bytes
bit/s: 5322.25
Note:
even if you would use the same pulse lenghts and encoding, unless your code will have zero jitter, an error resilence as my turbo is NOT achievable.
To remove (conceal) the jitter you must then use a wider bandwidth and slow everying down a notch or two. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
On other news...
One of my testers just made the newest world record with my turbo:
https://twitter.com/zibri/status/1459938649873784833
That's a load at 11534.22 !!!
Written and loaded by the same datassette of course.
This is what a well serviced datassette can really do with the RIGHT software :D
Update!!!
New world record: 12338.79 bit/sec!!! https://twitter.com/zibri/status/1459981517925593097
As of today, my turbo is the fastest turbo ever made.
It succeeded writing and reading back from a normal commodore DATASSETTE, in perfect owrking order and on a good compact cassette.
Probably there is still a chance he will break to 12989.49.
We will see.
Note:
this is just "how fast can he go?" test.
But at lower speeds the reliability is total (more than commodore's own save method) |
| |
SLC
Registered: Jan 2002 Posts: 52 |
While cool, this is not so much about the loader anymore, but the process of writing the tape, not to mention the C2N itself. You should at least be honest enough to mention that :)
If I had a C2N capable of writing the short pulses required for this, I'd be at those speeds too. I was experimenting with write precompensation but lost interest when I realized it wasn't transferrable to other C2Ns so just tweaked a bit more for reliability and left it there. As for a reliability test, I was able to load all 108 test games written to a C90 on one C2N and read on another at an average 7000bit/s (exomized files only) |
| |
soci
Registered: Sep 2003 Posts: 480 |
Thanks for trying that. I suspected that was the case but couldn't try it at the time. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Making TAPs that can't be even played back on actual cassette is pretty cool though - if there was some way to master TAPs to CD ROM and to use the rainbow arts CD adapter to play them back digitally and without error! |
| |
SLC
Registered: Jan 2002 Posts: 52 |
There is. Convert to .wav and burn as audio. Heck, you can even use mp3... |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
A perfectly (very) reliable C2N that's been very well serviced or calibrated really isn't a good test however. It would be much better to use a standardised test that alters the TAP file bytes to introduce controlled errors and then check, under emulation, that the TAP with errors still loads.
I do this with my TapeTool which can read the TAP, add controlled errors of specific magnitudes, then runs the TAP to check for correct load behaviour. The emulator's remote debugger can be used to check for all the memory being loaded correctly, which also serves as an integration test of the block checksum code. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Oh yeah, I forgot about audiotap.
I think somebody used to sell those cassette adapters with headphone jacks - like what came with the rainbow arts CD - but I don't think we can get them anymore. Shouldn't be too hard to handcraft one if you have the designs though. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCWhile cool, this is not so much about the loader anymore, but the process of writing the tape, not to mention the C2N itself. You should at least be honest enough to mention that :)
What? Sorry, I don't understand what you mean.
The test tap I passed my testers were all writte unsing a STANDARD C2N and read back using the same device.
And those pulses are not as short as I could make them. But it seems that 40 cycles is the minimum gap to use if you want also to write on a C2N. if You use a recorder using a WAV then I can go as little as 24.
Am I missing something?
And I repeat: BOTH the loader AND the writer must be perfect for this to be possible.
What counts more is that I am able to write sucjh a tape now as I could have been able 39 years years ago.
And this was my challenge (with myself).
And the results speak for themselves. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Martin PiperA perfectly (very) reliable C2N that's been very well serviced or calibrated really isn't a good test however. It would be much better to use a standardised test that alters the TAP file bytes to introduce controlled errors and then check, under emulation, that the TAP with errors still loads.
That's what I did while developing the first version of my turbo.
I added in my encoder the option to randomly cause errors (pulse lenght changes) and that's how I tested the loader.
Then after it was stable and perfect I started the real world tests. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Neo-RioOh yeah, I forgot about audiotap.
I think somebody used to sell those cassette adapters with headphone jacks - like what came with the rainbow arts CD - but I don't think we can get them anymore. Shouldn't be too hard to handcraft one if you have the designs though.
I have one of those inside one of my datassette.
They are for sale on any chinese website for very little. I found them for sale even here in Egypt.
With those, if well aligned to the datassette head, the limit is "the sky". I think more that 20 kilobit.. haven't tested it yet... Even if it's perfect I didn't finish even the main loader code. I am adding a few options right now :D
But the new world records Flavioweb just did are a very good motivation to go on. |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: Quoting Neo-RioOh yeah, I forgot about audiotap.
I think somebody used to sell those cassette adapters with headphone jacks - like what came with the rainbow arts CD - but I don't think we can get them anymore. Shouldn't be too hard to handcraft one if you have the designs though.
I have one of those inside one of my datassette.
They are for sale on any chinese website for very little. I found them for sale even here in Egypt.
With those, if well aligned to the datassette head, the limit is "the sky". I think more that 20 kilobit.. haven't tested it yet... Even if it's perfect I didn't finish even the main loader code. I am adding a few options right now :D
But the new world records Flavioweb just did are a very good motivation to go on.
The Rainbow arts CD had an actual circuitboard with headphone jack that plugged onto the cassette port edge-connector on the 64.
You're thinking about those car stereo plastic tape adapters with the headphone jack coming out of them so you can plug them into something else, like a CD player or an iphone, to play music in your car.
I suppose it would work just as well, only that you'd probably have to hack a hole for the cable (or lead it out through the datasette hole - only then the tape would be stuck in there. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:I added in my encoder the option to randomly cause errors (pulse lenght changes) and that's how I tested the loader.
so what is the random amount of error it can deal with at what speeds? that'd be some kind of metric to work with at least. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:I added in my encoder the option to randomly cause errors (pulse lenght changes) and that's how I tested the loader.
so what is the random amount of error it can deal with at what speeds? that'd be some kind of metric to work with at least.
It can deal with any amount of error depending on the "bandwidth" of the "speed setting".
Since the code is 100% accurate, the "borders" of the ranges are also usable (not in jittering code).
So if I set a "bandwidth" of let's say 144 cpu cyles per symbol I have a better resilence than CBM with higher bandwidth.
If I use the same bandwidth of CBM (144-160 cpu cycles) then I have a better error resilence than CBM but I can still do 5 kilobit/sec.
In my turbo, as of now, the maximum bandwidth is 192 cycles, which is way more than CBM (and that's my speed 0 setting) at about 4.2 kilobit/sec
The highest speed achieved so far on a real tape is 12kilobit/sec. (Almost zero error resilence but within the parameters of a good datassette and a very good tape)
P.S.
it can also deal with an azimuth misalignment, just a tad more than cbm. But a wrong azimuth setting or a datassette in bad condition SHOULD NOT considered normal as musch as a misaligned 1541 does.
Like saying that a 1541 turbo "should work" on a 1541 with dirty heads, 40 years old elastic rubber band and bad media.
The datassette is not "as shit" as people may think. It was it's use that was wrong. Only because it was cheap.
Commodore on the other hand didn't spend time in telling how to make it perfectly aligned and fit or it would have impacted probably the sales of drives.
But everything I am doing could have been possible at the time.
Now I am focusing on the mastering program on the C64 itself.
The mastering program in python is very fine but the challenge for me is also to write a mastering program with zero jitter and same accuracy the loader has. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:It can deal with any amount of error depending on the "bandwidth" of the "speed setting".
no shit. that is pretty much an universal truth and couldn't be more generic. the interesting thing is the answer to "what is the random amount of error it can deal with at what speeds?" because "that'd be some kind of metric to work with at least." |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:It can deal with any amount of error depending on the "bandwidth" of the "speed setting".
no shit. that is pretty much an universal truth and couldn't be more generic. the interesting thing is the answer to "what is the random amount of error it can deal with at what speeds?" because "that'd be some kind of metric to work with at least."
I thought you were following the discussion.
The amount of error is exactly half the bandwidth of each signal. It is obvious, since the program has no jitter and it 2 cycle accurate if bandwidth is 96 cycle, the "wrong" signal can happen up until 48 cycle bofore or after if should have been.
"I can explain it for you, but I can't understand it for you." (anonymous) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting ZibriQuoting GroepazQuote:It can deal with any amount of error depending on the "bandwidth" of the "speed setting".
no shit. that is pretty much an universal truth and couldn't be more generic. the interesting thing is the answer to "what is the random amount of error it can deal with at what speeds?" because "that'd be some kind of metric to work with at least."
I thought you were following the discussion.
The amount of error is exactly half the bandwidth of each signal. It is obvious, since the program has no jitter and it 2 cycle accurate if bandwidth is 96 cycle, the "wrong" signal can happen up until 48 cycle bofore or after if should have been.
And the bandwidth can go as high as 192 cycles for example at speed 0. More than CBM bandwidth.
"I can explain it for you, but I can't understand it for you." (anonymous) |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriQuoting ZibriQuoting GroepazQuote:It can deal with any amount of error depending on the "bandwidth" of the "speed setting".
no shit. that is pretty much an universal truth and couldn't be more generic. the interesting thing is the answer to "what is the random amount of error it can deal with at what speeds?" because "that'd be some kind of metric to work with at least."
I thought you were following the discussion.
The amount of error is exactly half the bandwidth of each signal. It is obvious, since the program has no jitter and it 2 cycle accurate if bandwidth is 96 cycle, the "wrong" signal can happen up until 48 cycle bofore or after if should have been.
And the bandwidth can go as high as 192 cycles for example at speed 0. More than CBM bandwidth.
That's not very clear at all. Error is not usually measured in bandwidth for instance.
Also there are many factors that may affect the reliability, so measuring the limit of what each loader can take is the only real way to know anything.
One method could be this:
Take a tape image for each loader, introduce various amounts of jitter, measure for each loader at which amount it starts to fail and plot that.
Then, do the same for various amounts of high-frequency dampening, and so on... |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:The amount of error is exactly half the bandwidth of each signal. It is obvious, since the program has no jitter and it 2 cycle accurate if bandwidth is 96 cycle, the "wrong" signal can happen up until 48 cycle bofore or after if should have been.
Are you saying it's tolerant to random +/- 48 cycles per pulse (that is 48 / 8 = 6 tap values)? At what speed is that? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:The amount of error is exactly half the bandwidth of each signal. It is obvious, since the program has no jitter and it 2 cycle accurate if bandwidth is 96 cycle, the "wrong" signal can happen up until 48 cycle bofore or after if should have been.
Are you saying it's tolerant to random +/- 48 cycles per pulse (that is 48 / 8 = 6 tap values)? At what speed is that?
precisely.
48? is SPEED 0 at about 4-5 kilobit/sec
I can even esceed that using +/- 7 tap values.. but speed zero until now worked wherever the cbm loader does.
No need to slow it down any further, but it's possible. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlrThat's not very clear at all. Error is not usually measured in bandwidth for instance.
I don't agree here.
I (or the tape) can induce as much random errors (deviations from the right value) as the range allows.
The range (or bandwidth) of each symbol can be set and determines the turbo speed/reliability.
After a certain deviation (not much) even the standard CBM loader stops working.
So exceeding or matching CBM own "tolerance" assures the same (or better in my case) tolerance to errors.
I say better, bceause CBM code is very imprecise and can't determine "accurately" when the pulse came. My loader can.
So it can take advanage of a slightly "wider" range that includes up until 2 cycles from the "border".
CBM (or any other) loader jittering does not allow that because they never know if the PULSE arrived AT TIME X or TIME X+/- it's jitter (which in many cases is more than 8 cycles!) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Groepaz
Are you saying it's tolerant to random +/- 48 cycles per pulse (that is 48 / 8 = 6 tap values)? At what speed is that?
My loader can be very tolerant, differently from his author, or can be very intolerant (thus enforcing even a copy protection).
One of my testers succeded even in writing and reading back at speed 9 (only 40 cycles bandwidth = +/- 20 cycle tolerance)
Which means that his perfectly service datassette has a combined writing + reading deviation of a maximum of 20 cpu cycles :D
that's an incredible 10 cycle deviation! (10 writing + 10 reading in the worst case scenario).
Speed 9 was meant only for masters... it surprised me.
Now he is attempting a new record, but I dount he will make it with a bandwidth of only 32 cycles.. we will see.
This is just for fun to test the limits of a PERFECT device on a perfect tape. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
@Groepaz
I messed up my calculation in my previous answer.
Speed 0 has a "bandwidth" of 24 TAP VALUES = 192 cpu cycles.
So the pulse can "randomly" "happen" 12 values (96 cpu cyles) before or after the "right" length.
For 48 cycles (6 tap values) that's speed "6" which goes double as fast as speed 0 and reaches about 8.5 kilobit/sec.
The number in column C and B are TAP values.
I organized them in speeds 0 to 9 but both values are arbitrary.
============================================
S | C | B | PAL Bitrate NTSC | Reliability
--------------------------------------------
0 24 24 5154.12 5350.19 Best / Old D
1 23 22 5497.19 5706.31 High / Old D
2 22 20 5889.19 6113.22 High / Any D
3 21 18 6341.39 6582.61 Best / Any D
4 20 16 6868.8 7130.09 Good / Any D
--------------------------------------------
5 19 14 7491.9 7776.9 Best / Same D
6 18 12 8239.33 8552.76 Good / Same D
7 17 10 9152.42 9500.58 Avg / Same D
8 16 8 10293.12 10684.67 Low / Same D
--------------------------------------------
9 15 6 11758.64 12205.94 Low / Master
-------------------------------------------
PAL C Start Freq: 123156 hz / C
NTSC C Start Freq: 127840.875 hz / C
PAL B Badwidth: 123156 hz / B
NTSC B Badwidth: 127840.875 hz / B
-------------------------------------------
File lenght: 47103 bytes.
-------------------------------------------
The actual record is "Speed 10" (which is C=13 B=5) with :D And he is attempting speed 11 (C=12 B=4) .. failing so far, quite obviously. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Small update:
I think there is no way to write and read back speed 11.
The measured error rate is about 30%.
So I think we hit the limit.
32 cycles of bandwidth *could* work only if written by a professional device and at the same exact speed of the datassette which will be reading it back.
It was a real miracle the record he did at only 40 cycles of bandwidth :D
And that's why my program starts at 48 cycles (speed 9) and still I consider that a "master only" speed. If written on a datassette the result is very unreliable even on the same datassette.
But.. still.. the record stands.
:D
P.S.
you might have noticed that my bandwidth settings go in multiples of 8. That's only to ease tests on the emulator.
The code allows also increments of 2 cpu cycles. I use 8 just because I am lazy :D |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
No shame in including a "you probably aren't using a cassette deck on the cassette bus" top speed for CDROMs, MP3 players, ultimate, or other devices.
Just because you can. |
| |
ws
Registered: Apr 2012 Posts: 251 |
A little bit off topicz, but:
if we applied a very simple hardware change that turns the datasette into variable speed by connecting something to the paddles pins... would that be cool?
Like take an old joystick cable, hook the wires up to a teensy and splice the teensy into the power supply of the datasette motor? VBR-Read with "spinup/spindown" to determine best error-free reading speed?
But maybe there was just something in my gung-pow tea just now.
(Just thinking Dongle here... a teensy costs around $16..) |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
I find it pretty non interesting myself if a mastered tape doesnt work on random, likely not optimal condition, c2n - afterall thats the usecase for 99% of all people that still use tapes these days :)
Quote:Error is not usually measured in bandwidth for instance.
Guess i need to make some calculations using supposed and guessed speed deviation/flutter/wow and see how these numbers go together :) |
| |
Neo-Rio Account closed
Registered: Jan 2004 Posts: 63 |
Quote: I find it pretty non interesting myself if a mastered tape doesnt work on random, likely not optimal condition, c2n - afterall thats the usecase for 99% of all people that still use tapes these days :)
Quote:Error is not usually measured in bandwidth for instance.
Guess i need to make some calculations using supposed and guessed speed deviation/flutter/wow and see how these numbers go together :)
I agree.
It's nice in theory to have everyone service their datasettes, but we all know that that won't happen!
Unless there's some inexpensive way to realign and service them...
...and even then you need good tapes. You can still get tapes but the good ones are expensive. And if they're expensive, there are better solutions. The cheap "Type 0" knockoff tapes can't even hold a reliable kernel save let alone a turboloader.
It's fun, but tapes are totally not worth it these days, and the only reason to play with them is to push technical boundaries and ask "what if?" :)
Supporting them is still valid though - as you have to assume that a more accurate device may or may not end up using the cassette port. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Well, i guess we can expect shitty belts are being replaced and azimuth setting is somewhat okish - but anything besides that, not so much. It still boils down to the expected variations between individual c2n - which unfortunately we dont have datasheets of, but we can still do a couple calculations to atleast get an idea of what to expect. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
Quote: Well, i guess we can expect shitty belts are being replaced and azimuth setting is somewhat okish - but anything besides that, not so much. It still boils down to the expected variations between individual c2n - which unfortunately we dont have datasheets of, but we can still do a couple calculations to atleast get an idea of what to expect.
I was pondering that. We could use the dataset of released tape titles over the years. I would assume that due to market feedback and replacement rates, they would eventually use pulse sizes that are reliable over a large range of C2N devices. |
| |
Trurl
Registered: Mar 2002 Posts: 61 |
Quote: I was pondering that. We could use the dataset of released tape titles over the years. I would assume that due to market feedback and replacement rates, they would eventually use pulse sizes that are reliable over a large range of C2N devices.
Of course one restriction regarding the mass-marketed tapes was the utilization of high speed dubbing machines, which didn't play well with very fast loaders. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
i kindof doubt that was actually a problem - those machines were also used for high quality audio tapes, which is much more demanding than data tapes. |
| |
Trurl
Registered: Mar 2002 Posts: 61 |
True. What might be the real problem with the duplication then, since I'm in the understanding that there were real problems at that stage? |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
Quote: i kindof doubt that was actually a problem - those machines were also used for high quality audio tapes, which is much more demanding than data tapes.
Well back in the day, sometimes turbo loaders needed to be tweaked to get reliable duplication because the professional companies weren't producing accurate product. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
This page quite usefully does a bit of analysis on the speeds of various loaders: https://www.luigidifraia.com/c64/docs/tapeloaders.html |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazWell, i guess we can expect shitty belts are being replaced and azimuth setting is somewhat okish - but anything besides that, not so much. It still boils down to the expected variations between individual c2n - which unfortunately we dont have datasheets of, but we can still do a couple calculations to atleast get an idea of what to expect.
And there's the beauty of parameters.
My loader can (and does) work even on datassettes in bad conditions like Neo-Rio's aand still keep a respectable speed.
Like with cars, is up to the user to have an "OKish" car and go on dirt roads (bad tapes) or to fully tune their car and test it on a track :D
I like more the second, some like more the first.
Hence the speed setting which allows a full range of possibilities (131 * 4 possible parameters cobinations!)
I just use ten of them in the speed setting but it's fully customizable for every need, keeping always the best possible speed and reliability. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Martin PiperThis page quite usefully does a bit of analysis on the speeds of various loaders: https://www.luigidifraia.com/c64/docs/tapeloaders.html
I know.. that's where I learnt about Evil Dead, found the tape, reconstructed a clean master and started working on my turbo.
:D |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting Martin PiperThis page quite usefully does a bit of analysis on the speeds of various loaders: https://www.luigidifraia.com/c64/docs/tapeloaders.html
I know.. that's where I learnt about Evil Dead, found the tape, reconstructed a clean master and started working on my turbo.
:D
Reconstructed? Would be interested in seeing what it looks like compared to the real tape.
And while we're at reconstructing... you're wrong about Giana disk orrie, btw. The protection pattern is if I don't remember incorrectly consisting of 128 repeats, not 112.5 or whatever you concluded with (I checked an original dump). Written in speed zone 2 but with a slightly higher RPM than the rest of the floppy. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:131 * 4 possible parameters cobinations!
so that is the metric for how good the loader is? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCReconstructed? Would be interested in seeing what it looks like compared to the real tape.
And while we're at reconstructing... you're wrong about Giana disk orrie, btw. The protection pattern is if I don't remember incorrectly consisting of 128 repeats, not 112.5 or whatever you concluded with (I checked an original dump). Written in speed zone 2 but with a slightly higher RPM than the rest of the floppy.
I am not wrong about it.
Check the document in the website.
From the loader code I got the exact timing range accepted and
re-created a "better" sync which is long exactly at the middle of the range. So my "WP" writes a better more centered one and assures more compatibility with out of speed drives.
About the evil dead reconstruction, I just removed the noise, cleaned up the tap and set all values as they should have been and not as they were read (with the classic +/- 1 variation.
If you are interested I can post it somewhere. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazQuote:131 * 4 possible parameters cobinations!
so that is the metric for how good the loader is?
Clearly not your judgement. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCReconstructed? Would be interested in seeing what it looks like compared to the real tape.
https://github.com/Zibri/C64/raw/master/EvilDead_REMASTERED.tap |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:Clearly not your judgement.
i am not judging anything. i am just asking - because the way you brought it up implies its related somehow.
the "judgement" will happen once we can establish some proper metrics and then apply it to different loaders in a systematic way. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLCReconstructed? Would be interested in seeing what it looks like compared to the real tape.
https://github.com/Zibri/C64/raw/master/EvilDead_REMASTERED.tap
Why is there jitter in this file? How was it created? |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCWhy is there jitter in this file? How was it created?
There is NO jitter in this file.
Where do you see that?
According to Luigi, the turbo pulses lenghts in Evil Dead were
$17 and $21
I see no value different than those.
Oh.. wait.. if you mean the first turbo pulse, $1A that is a mistake... should be $17 .. my bad.
I just corrected that. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
TAP-pulse stats:
----------------
$08 : 1
$0f : 1
$17 : 284117
$1a : 191
$1f : 1
$20 : 52
$21 : 148176
$24 : 22
$30 : 41254
$32 : 1
$40 : 169
$42 : 9182
$44 : 9
$56 : 932
$58 : 8
$62 : 1
$a0 : 1
|
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLCWhy is there jitter in this file? How was it created?
There is NO jitter in this file.
Where do you see that?
According to Luigi, the turbo pulses lenghts in Evil Dead were
$17 and $21
I see no value different than those.
Oh.. wait.. if you mean the first turbo pulse, $1A that is a mistake... should be $17 .. my bad.
I just corrected that.
There is a considerable amount of jitter in both the ROM data and parts of the turbo data. All the way throughout the entire file... |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCThere is a considerable amount of jitter in both the ROM data and parts of the turbo data. All the way throughout the entire file...
Rechecked: https://github.com/Zibri/C64/raw/master/EvilDead_REMASTERED.tap
Now it's ok.
P.S.
The presence of A0 08 and 0F is because you are using finaltap which dfoes not understand TAP V1.
those values are inside a long pulse (or silence as many wrongly call it) and not in the real pulses.
In the tap file there are only:
30
42
56
17
21
But in finaltap:
$08 (1) *error*
$0F (1) *error*
$17 (284308)
$21 (148251)
$30 (41256)
$42 (9360)
$56 (940)
$A0 (1) *error* |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:finaltap
no, not using finaltap. nor is finaltap not understanding tap v1 - it quite correctly identifies the file as such. and if it didnt, it'd show more than one occurance of those values. i guess they come from the long gap at the beginning of the file that shouldnt be there. |
| |
nc513
Registered: Jul 2017 Posts: 3 |
Quoting ZibriThe presence of A0 08 and 0F is because you are using finaltap which dfoes not understand TAP V1.
those values are inside a long pulse (or silence as many wrongly call it) and not in the real pulses.
Nope. You just messed up the TAP header. It's supposed to be 20 bytes long, not 19.
Anyway, now please explain why the clean version you made is better than what you get with 'tapclean -o'. :D
And why would you choose to set the length of all pauses to one second in your fantastic 100% proper remaster? |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLCThere is a considerable amount of jitter in both the ROM data and parts of the turbo data. All the way throughout the entire file...
Rechecked: https://github.com/Zibri/C64/raw/master/EvilDead_REMASTERED.tap
Now it's ok.
P.S.
The presence of A0 08 and 0F is because you are using finaltap which dfoes not understand TAP V1.
those values are inside a long pulse (or silence as many wrongly call it) and not in the real pulses.
In the tap file there are only:
30
42
56
17
21
But in finaltap:
$08 (1) *error*
$0F (1) *error*
$17 (284308)
$21 (148251)
$30 (41256)
$42 (9360)
$56 (940)
$A0 (1) *error*
Sometimes I get the feeling you're not even bothering to check your own claims, but rather blames something or someone else for the faults automatically. If you open the .tap in a hex editor you will clearly see those three bytes starting at 0x14 which is the first databyte in .tap. FinalTAP, tapclean and tapex are right, you are wrong! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLCbla bla bla
Check it again and redownload it.
TAP file data start at $14:
00000014h: 00 A0 08 0F
And that means "pulse after 985248 cpu cycles" and that means unsecond after the start of the tape there will be a pulse.
P.S.
I posted it as a courtesy to you and because you asked.
I don't care about evil dead. And this has nothing to do with my turbo and it's totally off topic.
And, yes, I am human, I can be wrong, SO?
BITE ME.
My turbo still beats yours or any other.
Live with that. |
| |
nc513
Registered: Jul 2017 Posts: 3 |
Oh, I see you fixed the truncated TAP header now. Thanks. But you forgot to reply to my questions above. ;) |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLCbla bla bla
Check it again and redownload it.
TAP file data start at $14:
00000014h: 00 A0 08 0F
And that means "pulse after 985248 cpu cycles" and that means unsecond after the start of the tape there will be a pulse.
P.S.
I posted it as a courtesy to you and because you asked.
I don't care about evil dead. And this has nothing to do with my turbo and it's totally off topic.
And, yes, I am human, I can be wrong, SO?
BITE ME.
My turbo still beats yours or any other.
Live with that.
Yes, now *after* you fixed it.... again! You will now notice this not bugging in finaltap or tapclean anymore too now!
My point here is that you are VERY fast at throwing out conclusions that OTHERS do the errors, not you (some of your VICE bug reports is the same). You insisted that finaltap was wrong, and falsely also claimed it didn't support V1 taps properly while it does and have done since the very first version. Even before it was even released to the public. You just didn't bother to sanity check your results thus concluded you were right and with that gives other who read your posts the idea the other programs being at fault.
Whenever confronted with such claims, you either just go silent or ignore the questions asked back and sometimes even respond with aggressive phrases like "BITE ME" while at the same time complaining about this place being toxic. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting nc513Oh, I see you fixed the truncated TAP header now. Thanks. But you forgot to reply to my questions above. ;)
I never used tapeclean and when I did this "cleanup" I did it for me and for testing.
That's why. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC You just didn't bother to sanity check your results thus concluded you were right and with that gives other who read your posts the idea the other programs being at fault.
Whenever confronted with such claims, you either just go silent or ignore the questions asked back and sometimes even respond with aggressive phrases like "BITE ME" while at the same time complaining about this place being toxic.
1) yes. I was mistaken and sincerely I don't care about other people softwares very much.
2) the only confrontation I need with my "FACTS" (not claims) comes from engineers and testers. And yes, there were a few calculation errors on the parameter settings (not in the code) even if it was still breaking records, results didn't match my theories. After the correction now they do and I am very happy with that and so are my testers.
Now what?
Come on.. I gave you enought informations in thes thread that even you could come up with a loder similar to mine.
But unless you completely copy my method you'll never reach such accuracy and I can always beat any other loader.
Now, go on, acuse me of "claiming".
Whay don't we make some public bet, then?
How much you want to lose? a thousand dollars? Ten?
Just STFU, will you?
And if I go silent sometimes it's just because I sincerely have better things to do.
Since my loader works, now I am jst checking the wonderful results they are getting and brainstorming if there is any way I can improve it.
While doing that I am just taking sun and enjoy the warmth.
Ciao. |
| |
nc513
Registered: Jul 2017 Posts: 3 |
Quoting ZibriI never used tapeclean and when I did this "cleanup" I did it for me and for testing.
That's why.
Oh, I see. So you were kind of jumping to conclusions when you on Sep 30th said "Every dump around is wrong (has timing errors even if it works). Anyway, I recreated the clean MASTER of evil dead with the correct timings". Fine. Let's drop the subject of Evil Dead now. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting nc513Quoting ZibriI never used tapeclean and when I did this "cleanup" I did it for me and for testing.
That's why.
Oh, I see. So you were kind of jumping to conclusions when you on Sep 30th said "Every dump around is wrong (has timing errors even if it works). Anyway, I recreated the clean MASTER of evil dead with the correct timings". Fine. Let's drop the subject of Evil Dead now.
Well, they were right for what I needed. Most of them were right anyways, but here they are just messing with me because you know...apparently I jumped in their little world doing something better that them and now they are angry.
Poor kids.
Fortunately they are a minority in this forum.
A noisy one, but still a minority. |
| |
Count Zero
Registered: Jan 2003 Posts: 1932 |
Quoting ZibriMost of them were right anyways, but here they are just messing with me because you know...
What?
Are you reading yourself even?
One usual way to challenge people may be to release something, hit the "Discuss this release" link and get off.
Why you choose a generic title, use that as a partial blog thread, avoid questions, twist and twinkle around when people directly face you on binary grounds and feel that everybody is AGAINST you while being an aggressor on your own - beyond me.
But who am I to look at 4 different tap files of the same MASTER and judge that. Dont have a clue on tapes and that silly thing doesn't load my old AC/DC bootlegs anyhow!
My _claim_ - a word you might want to look up. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
No nickname was better chosen.
You really do COUNT ZERO.
I *released* video proof of my "claims" done by various and different users including two members of this forum.
The code, for now, is mine and mine only.
Even if now it's almost final, I'm still brainstorming and thinking of some new ideas to add to it.
And that's NONE of your business.
Until now I haven't seen anything even comparable to my loader but I am pretty sure many will popup as soon as I release my code.
Sincerely, in a less toxic environment I would have already released it and probably it would have improved with the help of skilled (in this field) people like Krill and a few others.
But instead of enouraging or just enjoy what I posted, very different things happened. And this is the consequence.
What is more important, the program has been checked by people that work professionally in this field. Engineers who produced something in their life (differently from you).
The ultimate2+ is a very good device (and I am happy to own one) but, even if I don't onwn one I can say that for tapes, the best device is CUTE32.
Sincerely I care about the judgement of the best people in thios sector and not by a few toxic people on an otherwise nice forum.
Stadiums would be a nice place without hooligans and people who use sports as an excuse for violence.
As this forum would be a really nice place without frustrated people who take everything as an excuse to leash out.
So, I repeat for the last time:
If you want to follow this thread, you are welcome to do so.
If not, just crawl somewhere else.
I am posting here my results or doubts in developing this program, including errors sometimes, yes, so what?
You want to take that as an excuse to "prove" I "claim" things or I tell andecdotes? Be my guest.
It happened the same at the time of Ziphone. 14 millions downloads. A group of losers/haters tried to spread bullshit about it. And I answerted them as I am answering the very few of you that behave in the same way. Because I care? Yes. I care about the others which are probably get annoyed or nervous about this useless debacle.
I will ignore any other message which I will consider off topic or offensive.
And if everyone will agree this is not of any interest then I will stop writing.
I didn't do that to brag or anything, but to share my enthsiasm in finding new ways to enjoy our beloved devices. |
| |
Raistlin
Registered: Mar 2007 Posts: 680 |
I’d say some excellent and very interesting things have come up from this thread.
It’s not something that most of us can use, so I’ve seen people question the usefulness - but, hell, this is Commodore 64, a 35 year old machine, isn’t everything we’re doing pointless? :-)
Keep up the good work - and don’t worry about the trolls. |
| |
Hate Bush
Registered: Jul 2002 Posts: 465 |
"he who thinks he's a giant is a shithead in fact" - Jaroslav Hasek |
| |
Comos
Registered: May 2004 Posts: 73 |
Quoting Zibri
I didn't do that to brag or anything,
Well, you already did that from the beginning, instead of leading a normal technical discussion.Maybe if you change your manners,you'll get respected instead of getting fucked. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Geohot is giggling in the background :) |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting RaistlinI’d say some excellent and very interesting things have come up from this thread.
It’s not something that most of us can use, so I’ve seen people question the usefulness - but, hell, this is Commodore 64, a 35 year old machine, isn’t everything we’re doing pointless? :-)
Keep up the good work - and don’t worry about the trolls.
Yep. Commerically is surely pointless as of today.
But the basis you learn from this are useful even for today technology.
For example a discovery I did on 1541 lead to the possibility to double the scanning resolution on an optical scanner at no cost.
The two things seem unrelated, yet they are not :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting ComosQuoting Zibri
I didn't do that to brag or anything,
Well, you already did that from the beginning, instead of leading a normal technical discussion.Maybe if you change your manners,you'll get respected instead of getting fucked.
Nobody did that. They just argued against the facvts and produced another inaccurate loader (based on the same mistakes done in the past). That's all. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting GroepazGeohot is giggling in the background :)
About him, he is surely skilled but did you know that everything he published on the iPhone came from a russian guy?
It wasn't him to do the first jailbreak. He just published what the russian guy told him.
Anyway, after the fact he grew up and started to do things himself.
You remind me of him, you just look less skilled than him, and he was a kid at the time.
Now go fix VICE and try to not mess it up any further.
Oh no wait, you are the one pushing 3 commits just to correct comments... what a fullfilling job. |
| |
Comos
Registered: May 2004 Posts: 73 |
Quoting Zibri
Nobody did that. They just argued against the facvts and produced another inaccurate loader (based on the same mistakes done in the past). That's all.
Please read again your posts from the beginning properly,several times, you might get it. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Another small note:
Whithout using tricks, like shortening the original commodore PILOT tone ($6a00 $2f or $30 pulses)
Or the "inter-pilot" ($1a00 $2f/$30 pulses).
I found a way to load my loader in jusy 4 counter clicks.
Also this I didn't see it anywhere.
But if any of you did, please do tell.
I don't think there is a faster way to do it. Perhaps by little (I could make my loader a few bytes shorter) but not much.
The funny thing:
My loader now is not recognized by VICE (shows an empty tape) but it is recognized by the (emulated and RH) C64 :D |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriAnother small note:
Whithout using tricks, like shortening the original commodore PILOT tone ($6a00 $2f or $30 pulses)
Or the "inter-pilot" ($1a00 $2f/$30 pulses).
I found a way to load my loader in jusy 4 counter clicks.
Also this I didn't see it anywhere.
But if any of you did, please do tell.
I don't think there is a faster way to do it. Perhaps by little (I could make my loader a few bytes shorter) but not much.
Do you mean just autostarting after loading only the first CBM data chunk? That happens for instance if using $029f/$02a0 for autostart and I guess also on ISTOP.
That kind of autostart is pretty common, although I think in most instances the second data block is still there even though it's not used.
For fast startup, keep your loader within the tape buffer and load max 2 bytes to trigger the autostart. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Another small note:
Whithout using tricks, like shortening the original commodore PILOT tone ($6a00 $2f or $30 pulses)
Or the "inter-pilot" ($1a00 $2f/$30 pulses).
I found a way to load my loader in jusy 4 counter clicks.
Also this I didn't see it anywhere.
But if any of you did, please do tell.
I don't think there is a faster way to do it. Perhaps by little (I could make my loader a few bytes shorter) but not much.
The funny thing:
My loader now is not recognized by VICE (shows an empty tape) but it is recognized by the (emulated and RH) C64 :D
If you mean putting your loader in the tape header and then overloading $029f-$02a0, it's been done before yes, including in my loader that I am very sure you've been peeking at already! |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
Quote: Another small note:
Whithout using tricks, like shortening the original commodore PILOT tone ($6a00 $2f or $30 pulses)
Or the "inter-pilot" ($1a00 $2f/$30 pulses).
I found a way to load my loader in jusy 4 counter clicks.
Also this I didn't see it anywhere.
But if any of you did, please do tell.
I don't think there is a faster way to do it. Perhaps by little (I could make my loader a few bytes shorter) but not much.
The funny thing:
My loader now is not recognized by VICE (shows an empty tape) but it is recognized by the (emulated and RH) C64 :D
Either on a real C64 by copying the kernal into RAM and patching it: https://codebase64.org/doku.php?id=base:autoboot_tape_turbo_loa..
Or using TapeTool to write custom kernal format pulses and this code: https://github.com/martinpiper/C64Public/blob/master/IRQTape/Ta..
It's possible to have a very minimal loader that only uses two bytes to claim the vector at $300/$301, plus bytes in the tape header for the loader code.
This actually loads very quickly because the kernal does not even get to try to verify the memory with the second block as the error handler kicks in. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting tlr
Do you mean just autostarting after loading only the first CBM data chunk? That happens for instance if using $029f/$02a0 for autostart and I guess also on ISTOP.
No :D
Quoting tlr
That kind of autostart is pretty common, although I think in most instances the second data block is still there even though it's not used.
Indeed. But not in mine.
Quoting tlr
For fast startup, keep your loader within the tape buffer and load max 2 bytes to trigger the autostart.
That's what I did!
1) no double copy of the file.
2) loader inside the tape buffer and already loaded when the "found" appears.
3) loaded 40 more bytes only (which can be reduced a little as I said)
So, after thge "found" message, only 40 bytes are really loaded :D
I can shorten that up of perhaps other 10 bytes. But that won't impact the loading time by much. What does is the single copy of the file on tape.
P.S.
I did this on my own and I didn't read of this anywhere. |
| |
Martin Piper
Registered: Nov 2007 Posts: 722 |
My method starts the turbo code 1 counter click after the filename is displayed... |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting tlr
Do you mean just autostarting after loading only the first CBM data chunk? That happens for instance if using $029f/$02a0 for autostart and I guess also on ISTOP.
No :D
Quoting tlr
That kind of autostart is pretty common, although I think in most instances the second data block is still there even though it's not used.
Indeed. But not in mine.
Quoting tlr
For fast startup, keep your loader within the tape buffer and load max 2 bytes to trigger the autostart.
That's what I did!
1) no double copy of the file.
2) loader inside the tape buffer and already loaded when the "found" appears.
3) loaded 40 more bytes only (which can be reduced a little as I said)
So, after thge "found" message, only 40 bytes are really loaded :D
I can shorten that up of perhaps other 10 bytes. But that won't impact the loading time by much. What does is the single copy of the file on tape.
P.S.
I did this on my own and I didn't read of this anywhere.
1. Already been done, allthough not in mine (as I didn't see much gain in that but I was aware of this. Martin Piper have done it and you can see this in many Psytronik releases)
2. Same as in mine and many others.
3. I (and others) did the same.
So, the difference here apparently lies in the vector used for autostart, then... and I'm pretty sure whatever vector you used, it's already been done by others. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting Martin Piper
It's possible to have a very minimal loader that only uses two bytes to claim the vector at $300/$301, plus bytes in the tape header for the loader code.
Why $300?
$326-$32D are a better choice imho.
In this way the loader can be saved normally or without the double block.
In this way it's more flexible.
$300 won't be triggered if the loader is saved normally because there won't be a load error.
Also: to write such a loader fom the C64 itselt is tricky.
I can write anyway from C64 my loader in the normal way.
From my tap generator I can create it both the normal both the truncated way and it works with no modification.
About loading 2 bytes only:
in the tape header section there are 191 bytes of which 16 are the file name, start/end address ($14 bytes)
That leaves 171 bytes in the tape buffer for code.
Some loaders load a pre-loader there, then with that they load another piece of the loader and then start the turbo routine.
Instead, I just write from $326 to $350 (filename can be long)
and jump.
That is everything my loader needs. So after that there is directly the turbo data. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC1. Already been done, allthough not in mine (as I didn't see much gain in that but I was aware of this. Martin Piper have done it and you can see this in many Psytronik releases)
2. Same as in mine and many others.
3. I (and others) did the same.
So, the difference here apparently lies in the vector used for autostart, then... and I'm pretty sure whatever vector you used, it's already been done by others.
I saw your loader (briefly):
1) not same at all you load at different addresses.
2) not same as you or any other I saw (not many to say the truth)
3) you absolutely not do the same I do, perhaps you understood it wrongly.
4) my loader allows and uses also another technique and allows the saved "cbm" data to be saved only once (or normally if needed, without any change in the code).
If you think ALL these techniques where used in a single loader, please do tell me which one and I will analyze it and tell you any differences I find. Perhaps there would be even some better ideas there.. I don't know. |
| |
tlr
Registered: Sep 2003 Posts: 1790 |
Quoting ZibriQuoting tlr
For fast startup, keep your loader within the tape buffer and load max 2 bytes to trigger the autostart.
That's what I did!
1) no double copy of the file.
2) loader inside the tape buffer and already loaded when the "found" appears.
3) loaded 40 more bytes only (which can be reduced a little as I said)
So, after thge "found" message, only 40 bytes are really loaded :D
I can shorten that up of perhaps other 10 bytes. But that won't impact the loading time by much. What does is the single copy of the file on tape.
P.S.
I did this on my own and I didn't read of this anywhere.
Exactly. The details will lay in how you choose to do your autostart.
It's a fun process to find this kind of stuff out for sure!
We all find a lot of stuff out on our own and it often turns out to be already found out by others. Not surprising given the amount of people who have fiddled with this during the years. When you know what has been done, you can choose to apply a new twist on it to make it unique.
My suggestion was 2 bytes, so some more room for improvement. |
| |
chatGPZ
Registered: Dec 2001 Posts: 11386 |
Quote:You remind me of him, you just look less skilled than him, and he was a kid at the time.
Now go fix VICE and try to not mess it up any further.
Oh no wait, you are the one pushing 3 commits just to correct comments... what a fullfilling job.
Another carefully crafted ad hominem! Has it's moments! |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quote: Quoting SLC1. Already been done, allthough not in mine (as I didn't see much gain in that but I was aware of this. Martin Piper have done it and you can see this in many Psytronik releases)
2. Same as in mine and many others.
3. I (and others) did the same.
So, the difference here apparently lies in the vector used for autostart, then... and I'm pretty sure whatever vector you used, it's already been done by others.
I saw your loader (briefly):
1) not same at all you load at different addresses.
2) not same as you or any other I saw (not many to say the truth)
3) you absolutely not do the same I do, perhaps you understood it wrongly.
4) my loader allows and uses also another technique and allows the saved "cbm" data to be saved only once (or normally if needed, without any change in the code).
If you think ALL these techniques where used in a single loader, please do tell me which one and I will analyze it and tell you any differences I find. Perhaps there would be even some better ideas there.. I don't know.
Do you even read what others write?
For 1, I already stated that I do not discard that second data block, I acknowledged that it can be done. Check some of the Psytronik releases for example and you will see this. You were not first!
For 2, can you explain what you think is different? You can load $033c-$03fc, and that's it. Most of my loader resides here, but I needed some extra bytes that I chose to load near my chosen vector to autostart.
For 3, again I don't understand what you think is so different. I overload the vector I chose for autostart (I know there are more options) and the few extra bytes I needed for my loader. I just didn't choose to discard the repeat block.
I think it's you who do not understand, tbh. But what about you teling exactly what you did so that we don't have to play this guessing game?
Soci, who you do not accept any proof from because there are no twitter videos and only working binaries, uses another trick in addition to all these. In the ROM header, he places a small loader that is loading his main loader. |
| |
Burglar
Registered: Dec 2004 Posts: 1101 |
BREAKING: Popcorn sold out in C64land! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting BurglarBREAKING: Popcorn sold out in C64land!
ROTFL! :D |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC
Usual whining.
I never said mine was better.
I just said it was different.
See how you are touchy?
I never implied any of what you blabbered about.
Keep calm. See how you overreact?
How you have the urge to say that someone was not first?
I said "I have never seen one using my mthods" and that's 100% true.
I made them up without any previous knowledge.
I never said nobody ever did.
Keep damn calm or go have some decent sex if you can. Perhaps it will help you and everyone else around you.
(Except perhaps the person you will have sex with.. hahahahah) |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quoting ZibriQuoting SLC
Usual whining.
I never said mine was better.
I just said it was different.
See how you are touchy?
I never implied any of what you blabbered about.
Keep calm. See how you overreact?
How you have the urge to say that someone was not first?
I said "I have never seen one using my mthods" and that's 100% true.
I made them up without any previous knowledge.
I never said nobody ever did.
Keep damn calm or go have some decent sex if you can. Perhaps it will help you and everyone else around you.
(Except perhaps the person you will have sex with.. hahahahah)
I did not imply that you said yours was better. I just pointed out it was the same method, but simply using a different "way in". The principles was the same, so I simply asked exactly what you thought was different about it.
I am pretty sure I'm way calmer than you, who I quite a few times see resorting to name calling and other aggressive phrases. |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Quoting SLC
I am pretty sure I'm way calmer than you [...]
You don't know me as I don't know you but I find it DUMB to point out everytime I post something "that it has already been done by your grandma at the times of dinosaurs".
So, in your opinion a composer does nothing new only because he uses the "same old 12 notes"?
I am pretty sure my techniques (or a great parte of them) have already been used in the last 40 years (and probably most of the in graphical demos were jitter is very visible).
As I am pretty sure John Williams didn't invent music and even some of his tunes remind of Prokoviev and Mussorgsky.
That doesn't make his music less beautiful and original.
So, I am just saying that if ALL the techniques I used would be used by the same program and at the same time, then there would be a clone of my program hidden somewhere, and I assure there is not.
Unless a program uses the same techniques, it won't even be as accurate.
Same as my 1541 speed test. Useful or not, there is no program as accurate in determining the instant RPM of a 1541 drive.
And that's a fact.
As it is a fact that noby ever did 12338.79 bit/sec writing and reading on a datassette.
Period. |
| |
TheRyk
Registered: Mar 2009 Posts: 2244 |
BTT immediately, please.
If this (rather long already) thread only gets longer and longer by mere "my shit's better than yours" dick size comparisons, it will be closed.
So stick to the technical facts (popcorn lovers will find it boring, but at least they'll move along instead of fueling the fire)... or just breathe. If there's nothing new (good would be an actual release by TS), leaving this thread alone for the time being seems best. |
| |
SLC
Registered: Jan 2002 Posts: 52 |
Quoting ZibriQuoting SLC
I am pretty sure I'm way calmer than you [...]
You don't know me as I don't know you but I find it DUMB to point out everytime I post something "that it has already been done by your grandma at the times of dinosaurs".
Just as it is equally dumb make the claims it's a world's first for almost every little thing. Especially when you in some instances in the same breath incorrectly implies others having done it wrong. Or just because you didn't see something, it was never done. You said yourself that you haven't looked at much.
I'm going to revisit that Evil Dead thing one last time to use as an example of what I mean, because you came up with quite a few false claims already there:
You claimed that you was the first ever to create a perfect master of it. This is wrong. You can find a copy of it in The Ultimate Tape Archive which is perfectly cleaned and with no deviations in pulse lengths.
Furthermore, your master wasn't so perfect after all. When this first was pointed out, you didn't even believe it at first. Then you corrected it, but since you screwed up the header before running it through tapclean or finaltap, you concluded that it incorrectly reported these pulses because it did not support TAP V1, which was also wrong. You didn't for a single second stop to think "Hm, maybe *I* screwed up?". Not until it was pointed out to you. I also asked how it was created because I was genuinely curious considering what I saw, but that question was ignored...
Also, when I released my loader, you jumped quickly to the conclusion that I obviously must have been ripping you off somehow, even though I did not. I hadn't even read through all the technical details on what you were working on and I have never even seen your code or any of the .tap-files.
Also, here's the summary you can use when you quote this message again so you don't have to make one yourself...:
Blah blah blah usual whining blah blah! |
| |
Zibri Account closed
Registered: May 2020 Posts: 304 |
Update:
another tester successfully did 11739.17 bit/sec 10 times over 10.
Tomorrow with a new tape he will attempt the new record :D
It seems that now 11 kilobit/sec is the normal for almost all my testers.. except one who has a not so good datassette or not so good tapes.
:D |
| |
enthusi
Registered: May 2004 Posts: 677 |
Long thread. But datasette never was dead. We even get new loaders from it. Possibly the fastest released loader ever? Cool work, SLC.
I wish I still had those tons of c2n units to test.
The issue with tape is reliability much more than speed (at least once you ignore that darn ROM loader). |