@Fredrik, Daniel Yeah, thanks both of you! That works!
@Daniel Quote:
You can comment in / out the first BEQ.W. If the behaviour doesn't change for sure then salass00's asumption that the coder falsely asumed that movea changes cc is likely to be correct.
Yeah, commented out, and nothing changes (i.e. same works as before, DSI gone).
@All I found another 2 issues for now:
1. In the game itself, every 3 seconds, everything "pauses" for a little while, like maybe for half of a second. But that happens stable and in the menu, and in-game itself, it's like dbl-buffering issues or WaitTOF/something dunno.
Any ideas are welcome.
If it is related to that "null pointer crash" issue it is unclear, can be that this DSI hits because of another issue coming from somewhere, or that can be just an independent issue very well as well.
2. When we exit from preferences (that is another binary), we always crash.
Seeing information to the patches released for the game back in past, they have the same issue and it should be fixed in the patch applied, but it is still not. So seems there is some general bug with which they try to fix (and maybe fix for os3), but on OS4 we, as usual, can catch everything bad, and the bug seems still there.
A bug is not skippable and complete lockup. That bug happens to be there even 10 years ago on pretty older amigaos4 versions and on different hardware (at least on A1 and on Sam440 for sure) so that something with the code of the preferences 100%.
The crash is just a lockup, those logs i got from serial, so no luck for GR. So there is even no 68k stack trace as far as i can see.
I only can see that everything comes from intuition, and such hardcore lockups usually happen when one fucked up with Send/Recv IMSGs, etc or something.
Will try to trace all the intuition calls on OS3 to see what is called when we hit the close button.
But at least what is for sure, is that crash happens before CloseWindow() call (i already tried to put RTS before).
And still the same freeze, and I can't see my DSI...
Of course, binary also uses dos.library and exec.library, but it just feels like freeze happens exactly when we are about to break the main loop. It's like window settings done in some wrong way, which only arise when we about to close window.
Edited by kas1e on 2022/1/14 14:02:46 Edited by kas1e on 2022/1/14 14:04:25
@jabirulo Yeah, the prefs file is a small one, and the format file is not a big one too.
I thought about writing prefs too before, but that can take more time IMHO in comparison with just one bug fixed. But if there will be no luck, then yep...
edit: their prefs real buggy, when I just press RMB (as they have an RMB menu too for some options), and navigate through the menu, it just freezes the same as when I hit close/chancel/etc. So seems their whole main loop broken
Edited by kas1e on 2022/1/14 15:05:19 Edited by kas1e on 2022/1/14 15:08:13
@All So after Javier offers help to write reaction-based preference for Exodus so it will be not only without bugs but will not be that weird in all areas as original, i just reparse prefs format of exodus and there is (just for reference purposes later):
Quote:
32 bytes : name of cdda device 1 byte : unit # of cdda device 1 byte : language : 0 : poland, 1 : english, 2 : deutch 1 byte : game screen : 0 : lowres 1 : hires 1 byte : GfxDirect : 1 enabled , 0: disabled 1 bytes : PlayCD : 1 enabled, 0 : disabled 1 byte : Use Paula : 1 enabled, 0: disabled 4 bytes : screenmode ID 1 (for playing movies, 320x240) 4 bytes : screenmode ID 2 (for a game, 640x480) 1 byte : task priority (slider from -15 to +15) 1 byte : skip anim, 1 : enabled, 0 : disabled 32 bytes : name of null-modem device 4 bytes : baud rate of null-modem device (slider, from 9200 to 115200) 1 byte : unit number for null modem 1 byte : Force Intuition Mouse Pointer: 1 enabled, 0 : disabled. 2 bytes : 00 00 reserved?
So probably with Prefs we can chill out and concentrate instead on the Game's bugs.
Imho at this point, we need to deal with that "pause every 3 seconds bug".
Once I disable music (that one which plays from CD-Audio), then NO pause.
I.e. just sound effects: no pauses sounds effects + music: pauses just music: pauses
For sake of tests, i do that: disable music from the game, keep on sound effects, switch back to the workbench, run playCDDA, and start to play the exact same track from exactly the same place. Back to the game, and while having the same sound+music, have no pauses!
That means their Cd-Audio player suck. Or it doing something weird our cdplayer.library/cddapatch do not support.
@Frederik Maybe you as an expert and author of cdplayer/cddpatch have any idea what it can be, and where to look? I.e. what functions, etc to see their cd player code in disassembly.
@all So asked on EAB 68k coders what were used back in times for playing CD-Audio, and seems there were just 2 ways: one was cdplayer.library and another way was direct play over SCSI device via DoIo/IoReq/etc, by using HD_SCSICMD and sending a "PLAY AUDIO" command.
So far Napalm and WipeOUT use cdplayer.library : those ones ok.
Other games probably use "direct way", and while for example Foundation, Payback and Exodus do work via our CDDAPatch. Games as Earth2140 and Heretic2 fail for some reason to work with our current CDDAPatch (through Earth2140 says that CD audio initialized OK, but then in-game we have no list of tracks).
Anyway, long story short, in Exodus we need to understand if they indeed use HD_SCSICMD and "Play Audio" command to play audio CD tracks, and once we found what way was used, we may move further with bug-fix.
Reading SCSI list of commands i found that there is not only "PLAY AUDIO(10) (code: 0x45)" but also "PLAY AUDIO MSF (code: 0x47) and also "PLAY AUDIO 12 (code: 0xA5). Which ones are used in Exodus dunno at the moment. The length of the commands also can be different...
So will try now at first to find the filling of the IOStdReq structure with HD_SCSICMD, and then if so, what kind of commands it uses. That at least should bring us to their audio-cd-player's code.
See, -456 is DoIO, all the previous MOVE it's about filling Req struct. For example part starts at "MOVE.W #$001c,28(A1)" is "req->io_Command = HD_SCSICMD;" Now need to find a place where UBYTE struct for command placed, and we can find what command is used, and then based on this can think wtf.
Edited by kas1e on 2022/1/15 21:22:41 Edited by kas1e on 2022/1/15 21:27:27 Edited by kas1e on 2022/1/15 21:36:46
Probably for patch v0.1 we need to create 2 patches: one for RadeonHD/RX cards with padding-fix + DSI in meni/exit fixes, and another one for older Radeon cards, where is no need for a padding fix, but fixing DSIs is worth as well. I can just add in the installer a choice for what Radeon patch is installed or something...
@All The first version of the patch is out (on os4depot in upload query for now). That what done in:
Quote:
-- new Reaction based preference binary (old one was buggy very much). Thanks to Javier who wrote a new one. -- fixed to works on RadeonHD/RX (the game wasn't aware of padding, and use the old/default one which is 128 making it works only on older cards). Thanks to Daniel and LiveForIt. -- fixed DSI in the menu. Thanks to Daniel and Salas00 -- fixed DSIs on exit. Thanks to Daniel.
And TODO:
Quote:
- fix remain padding issue for Radeon RX/HD (credits, loading bar) - when we have no CDDA device and set the "No CD-Audio" option game still fails to run and still asks for a CDDA device, while shouldn't. - made a screen be not "custom" but workbench alike, so we can amiga+m and see it. - A mouse pointer is not all the time active from the first run (need to do amiga+m , click on WB, and then back to the game) - fix hiccups of the game when CD-Audio is enabled. Forced intuition mouse pointer fixes the move of mouse, but not the gameplay itself. maybe just rewrote CD-Player and replace the old one. - cd audio track didn't stop when we exit from the game but play till the end. Can be also auto-fixed when rewrote CD-Player (if). - to make intro movies work
And anyone who wants to play in READ THE README! I wrote there an ideal (i hope) step-by-step guide to how setup it all starting from the basics like "once you get CD" and ending with patching itself.
4. Once you read with everything, mount the .cue ?
As lifeforit says you need to have diskimage.device, and just mount inside of it .cue file coming inside of archive when you download image from APC-TCP.
But be sure that if you mount your .cue file to the IDC0:, then in the tooltypes of CDDAPatch which you placed in commodites and make it runs from wbstartup you also set ICD0: to be patched.
@LiveForIt And somebody didn't read the readmes, while i point a few times about it :) (check TODO section). They're are just some the same kind of "padding" issues that handle those parts that need to be found.
@328gts It's coming not with a bug-fix-update archive, but inside of the archive with a disk image. I.e image of the Exodus disk contains 2 files: EXODUS_THE_LASTWAR.BIN (about 800mb of size) and EXODUS_THELASTWAR.CUE (just 0.5kb of size). This .cue file show where the music tracks (cd-audio) are placed.
You can not worry about audio tracks if you don't want to hear music and skip that part and just mount only .BIN file.