From: Laze Ristoski (cybernator_at_mt.net.mk)
Date: 2005-08-18 15:50:26
I made a Turbo 250 reader on PC, which works partially. I get the filename, the program starts to load, but I always end up with a load-error. Anyways, I tried flipping the triggering edge and nothing loaded anymore. This proves that the datasette differentiates the direction of polarity flip. Which, on the other hand, proves my experiments wrong... C'mon, I was just 14 at the time. :P There's another experiment that can be done on an emulator, since I guess CCS and Vice emulate this accurately. The doc that comes with CCS says that a TAP file contains the delay until the hardware is re-triggered again. This probably means the length of the period. But mtap reads the lengths of the phases (which might be combined into period length afterwards, I need to take a closer look at the code). Anyways, if a TAP contains the phase delays, the only way to find whether it's 0->1 or 1->0 transition is the position of the delay in the file (i.e. odd/even position). Then I can introduce an additional phase at the beginning. If programs no longer load successfully from the TAP, then the datasette really keeps track of polarity. Anyone knows what's stored in TAPs? Period or phase? About the T250 reader, I rewrote it in pure ASM, but that doesn't help either. There're two things that might be causing errors. 1. The PIT of the PC is 16 bit. Now what if I access the timer when the high byte decreases and the low byte wraps around? I mean, what if I read the low byte before the wrap, and the high byte after the wrap? I'll end up with an error of 256 PIT cycles. That's all it takes for a load-error. Anyway, I write 0 to port 43h before I read the counter. This should get the timer into latch mode. At least that's what I see in mtap. So far I didn't manage to find a decent document about the PIT. 2. Maybe my timer value is incorrect. This is how I calculated it: PIT_value=T250_timer_value*(PIT_freq/C64_freq), or PIT_value=263*(1193181/985248), which gives 318.5 (~319) One thing I can do is to record some period lengths and then calculate the average from them. If this doesn't work, it must be the first case with the wrapping. -- Laze Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.