Here want to talk of course not about differences in added new HW, different CPU, bus, and like, but differences in ST(E) compatible mode, with HW what is present in ST(E) too.
1. Falcon PSG (YM) has no shadow register, while others have 63x both (range $FF8804-$FF88FF) . Usual way of writing to PSG, in purpose to set floppy drive select lines for instance, or to produce some sound is to write bytes to $FF8800 and $FF8802 (first is register #, second is value going there).
Some game coders realized that it is more efficient to write at once in more registers using movem . And that will not work on Falcon, because lack of shadow registers, so to have sound on Falcon with such movem using code, need to patch game.
Now, what is for me most interesting here is question: did designers of ST have that movem way in mind when chose such address space for PSG access ?
Especially, because there are no other HW registers with shadows in ST, as I know.
Update: In case of Falcon there is so called "STE bus compatibility mode" setting possible. When it is on, access to area $FF8804-$FF88FF will not cause bus error. But will not change anything in PSG (case of write) , so will not produce sound. I thought first, that at least write to $FF8804-7 will be effective, since in lot of SW there is write with one instruction movep.l what covers area $FF8800-%FF8806 (4 bytes written), so can write to 2 of 3 channels at once.
But only first 2 bytes will be really written to PSG, other is lost. So, I think that that STE bus compat. mode is just some fix, done in later stage, when they realized that many of SW will soon finish with 2 bombs on screen because lack of shadow registers. It was to late to change main (Combel ?) chip, so they solved generating of DTACK signal, in other chip for that address area - but it could not activate PSG chip too.
2. Staying at PSG - and this is fresh discovery, thanx to coder of Hard 'n' Heavy : in TT, and only in TT writing byte to odd address of PSG, so for instance to $FF8801 or $FF8803 will cause bus error. Same code produces proper sound on ST(E), Falcon. Actually I'm surprised that writing to odd produced sound at all, since all SW (except mentioned, and even it mostly) writes to even address.
3. Still at sound: Falcon fixed bad mixing ratio of PSG and DMAA sound, so PSG is not louder (while on STE is much louder) on Falcon.
4. Another only Falcon improvement: writing values stored in video base registers ($FF8201, $FF8203) to video pointers/counters happens at end of V-blank, unlike by ST(E), where it happens at begin of V-blank. The benefit is that if SW writes in those registers in V-blank routine it will have immediate effect, while on ST(E) only 1 V-blank later.
If you know some other diff. in same manner, please share with us. Just to note that only differences in regular (video) usage are interesting. Some overscan code will for sure act different on TT and Falcon, because whole video is different, despite being compatible with ST regular modes.
Last edited by AtariZoll
on Sat Dec 02, 2017 1:21 pm, edited 3 times in total.
Famous Schrodinger's cat hypothetical experiment says that cat is dead or alive until we open box and see condition of poor animal, which deserved better logic. Cat is always in some certain state - regardless from is observer able or not to see what the state is.