After not suceeding in loading Skool Daze without errors in my Oric, I decided to dig a bit into this CLOAD trouble and check what was happening.
I will try to summarize my experiences and see if anybody can help with some ideas or clear some bits of information I might not have understood correctly.
The thing is that every time I try to load the game, it simply does not auto run. If I use tap2wav (with the -11 option) I usually end up getting some loading errors (that are clearly loading errors), but when I use tap2cd, things seem to work ok, although the game does not auto run.
I tried adding a silence at the end of the file, but nothing. Different volume settings, windows settings (of course I disabled system sounds and tried different programs from the windows recorder, to Audacity), plugging just the ear and both ear and mic, two different cables.. The results were always exactly the same.
However, some other games (for instance Damsell in Distress or O-Thrust) load perfectly well 100% of the times, even with quite different volume settings and conditions (cables, plugs, players,...).
I, then, tried to add a small BASIC loader, to do the trick with DOKE #1b,#500 and then CLOAD the game and, to my surprise, this basic loader didn't auto run either. It does if converted with tap2wav, though.
Then I started PEEKing into #2B1. Having a look at the Oric Atmos ROM disassembly, this address stores the number of parity errors. To my surprise I always get 1 and only 1.
It seems my ROM is not one of the newest with the load bug "corrected". In the Oric ROM disassembly the section which leads with loading errors seems to be:
Code: Select all
E8D3 JSR $E651 Print filename if there is a
E8D6 LDA $02AE format error.
E8D9 BEQ $E8E9
E8DB LDA $02AD Jump to start of machine code
E8DE BEQ $E8E8 program if correct file type
E8E0 LDA $02B1 and there are no loading errors.
E8E3 NOP
E8E4 NOP
E8E5 JMP ($02A9)
E8E8 RTS
What I don't understand is why I don't get any Errors Found message. The routine at $E651, which is called after loading the program, does:
Code: Select all
E651 LDA $02B1 Print out string after " if
E654 BEQ $E65D there was an error in format.
E656 LDA #$27
E658 LDY #$E5
E65A JSR $CCB0
E65D RTS
Also, checking the ROM disassembly, I did not find any point which could explain the loading bug. I think that some errors may occur with unstable sync leads in the program (for instance when some players tried to adjust volume automatically), but this shouldn't be the case here, and won't explain why some programs work and why some don't.
I guess I cannot promise that I have no real loading errors, but it seems quite improbable. The basic loader is correct and the game runs for hours with no bugs. And I always get just 1 parity error... very suspicious.
Difficult to draw some conclusions. Is it possible that tap2cd converted programs work better due to its higher frequency (22Khz, instead of 11)? Is there a possibility that the converted wav files have any kind of error which is the cause of all this? Maybe an extra buggy byte, a bad parity calculation somewhere, or a wrong header or sync signal, or something similar which appears only with some tap files? I think none of these will be noticed in Euphoric (loading from the WAV file) because it uses the 11b ROM, with the two NOPs, so it will autorun even in the pressence of errors.
I could hack something that could work, converting the loader as a standalone tap with tap2wav and the game with tap2cd and merging both wavs with Audacity, but I would like to understand why this is not working.
Can anybody enlighten me here?