QLiberator uses the top 3 bits of the 'value' long word pointer in name table entries as flags.RalfR wrote: Thu Jul 31, 2025 11:37 am As I understand it so far, the problem lies in the Q_ERR mechanism and also in the handling of integer FOR loops.
So any program that doesn't use either should work?
One bit flags that this name table entry is currently under Q_ERR control.
Another bit flags that 'AUTOF' is active on that name table entry. So the runtimes can 'on the fly' change a floating point FOR into an integer FOR, if the start, end, and STEP values are integers.
And the third bit flags that this name table entry is a FOR control variable. Normally in QDOS, this name table entry would have it's 'type' word set to $0702, As a floating point loop counter. But the runtimes set the 'type' word to be an integer or float normal variable. I don't know why Liberation Software did it this way, and did not set the type to $0702 or $0703.
This 'value' long word pointer in the name table is usually a memory address, so messing with the top 3 bits is going to make the address wrong. I assume that Liberation Software relied on incomplete address decoding in the hardware. So that the wrong address actually pointed at the correct memory location. This seems to work OK in the Q60, so long as the cache is turned off, But it falls apart with the cache on. I don't know why this happens. Does SMSQ/E decide what gets moved in and out of the cache, or the 68060? Does QSSQ/E or the 68060 also use these bits during caching?