Who's Online |
52 user(s) are online ( 28 user(s) are browsing Forums)
Members: 0
Guests: 52
more...
|
|
|
|
Foundation patching: v0.1 patch on os4depot
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@All To avoid derailing all the threads with unrelated content want to create one for only Foundation. !NOTE! we can play it in e-uae, etc. But i just want my fetish to be done to make all works directly from OS4. As it is known by anyone who tried to run that game before it is already half of working through. It has a bit of an issue like: - broken cursor in the menu (you need to swap back to os4 and then back to the foundation screen to make it works). - broken preferences (also can be workaround by playing with GUI prefs of OS4). - no AUDiO-CD by default. But that is not broken you need just mount .cue via diskimage.deviсe and use Salas00's cdplayer.library and CDDAPatch. And the last one which I want to deal with: music in the menu/intro/gametitle. Because does not matter if you use AHi it uses ahi just for sounds but Paula/CIA for mod-player. So. i for sake of tests run firstly Hypex's unfinished Ciagent tool (on os4depot) which can catch Cia accesses and that is what we have there: Quote: CIAgent Spy Monitor - API: CIA B: AddICRVector() ICRBit: 1=TIMER B Interrupt: $5F39243E "Protracker MusicInt" Result: $00000000 ! Hit: CIA B: ?:TBLO ($BFD600) Data: 236 ($EC) Task: $60B25AA0 "Foundation" ! Hit: CIA B: ?:TBHI ($BFD700) Data: 236 ($EC) Task: $60B25AA0 "Foundation" ! Hit: CIA B: R:CRB ($BFDF00) Data: 0 ($00) Task: $60B25AA0 "Foundation" ! Hit: CIA B: W:CRB ($BFDF00) Data: 1 ($01) Task: $60B25AA0 "Foundation" ! Hit: CIA B: R:CRB ($BFDF00) Data: 1 ($01) Task: $60B25AA0 "Foundation" ! Hit: CIA B: W:CRB ($BFDF00) Data: 0 ($00) Task: $60B25AA0 "Foundation" - API: CIA B: RemICRVector() ICRBit: 0=TIMER A Interrupt: $5F39243E "Protracker MusicInt" Result: $00000000
So everything is right - Paula-CIA for music. Even "Protracker MusicInt" words can be seen. Next, I go hacking way: trying to understand how to disassemble binary and assembly it back to binary. Good for us we have IRA (os4depot) and VASM68k from Frank ( http://sun.hasenbraten.de/vasm/index.php?view=binrel). After reading briefly tutorial to ira i was able to disassemble binary by just: Quote: ram:> ira -a -preproc Foundation
And make a working binary of the same size from that disassemble by vasm: Quote: ram:> vasmm68k_mot -no-opt -Fhunkexe -nosym -o Foundation_new Foundation.asm
Now to find where is a player called and then external jump to some C compiled object code with ahi player. But maybe will be better to do something easier first: like maybe replace the mouse cursor on system friendly one.
Edited by kas1e on 2022/1/9 23:18:27 Edited by kas1e on 2022/1/10 20:35:47 Edited by kas1e on 2022/1/10 22:42:58
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@All On EAB someone with the name "Docent" brings a bit of good help: Quote: It looks like the game adds a CIA interrupt handler via a system call.AddICRVector.
Search in the source code for jsr -6(A6) This defines AddICRVector. Before this call register a1 will be setup with a pointer to Interrupt struct, where.field is'_code is a pointer to actual cia interrupt handler with replay routine. You can replace it with your player
So there is that part:
LAB_1D30:
MOVE.L D7,LAB_1D3E ;722c2: 23c70007241c
DIVU #$007d,D7 ;722c8: 8efc007d
JSR (_LVOCloseLibrary,A6) ;722cc: 4eaefe62 exec.library (off=-414)
MOVEA.L LAB_1D3B(PC),A6 ;722d0: 2c7a0140
CMPI.W #$0001,D6 ;722d4: 0c460001
BEQ.W LAB_1D31 ;722d8: 6700003e
LEA LAB_1D41(PC),A1 ;722dc: 43fa0158
MOVEQ #1,D0 ;722e0: 7001
JSR -6(A6) ;722e2: 4eaefffa (UNKNOWN)
MOVE.L #$00000001,LAB_1D3D ;722e6: 23fc0000000100072418
TST.L D0 ;722f0: 4a80
BNE.W LAB_1D32 ;722f2: 66000060
MOVE.L A5,LAB_1D38 ;722f6: 23cd00072400
MOVE.B D7,1536(A5) ;722fc: 1b470600
LSR.W #8,D7 ;72300: e04f
MOVE.B D7,1792(A5) ;72302: 1b470700
BSET #0,3840(A5) ;72306: 08ed00000f00
MOVE.B #$01,LAB_1D3C ;7230c: 13fc000100072416
BRA.W LAB_1D33 ;72314: 60000058
LAB_1D31:
LEA LAB_1D41(PC),A1 ;72318: 43fa011c
MOVEQ #0,D0 ;7231c: 7000
JSR -6(A6) ;7231e: 4eaefffa (UNKNOWN)
MOVE.L #$00000000,LAB_1D3D ;72322: 23fc0000000000072418
TST.L D0 ;7232c: 4a80
BNE.W LAB_1D32 ;7232e: 66000024
MOVE.L A5,LAB_1D38 ;72332: 23cd00072400
MOVE.B D7,1024(A5) ;72338: 1b470400
LSR.W #8,D7 ;7233c: e04f
MOVE.B D7,1280(A5) ;7233e: 1b470500
BSET #0,3584(A5) ;72342: 08ed00000e00
MOVE.B #$01,LAB_1D3C ;72348: 13fc000100072416
BRA.W LAB_1D33 ;72350: 6000001c
Now need to understand how to rewrite a player. Wrote one on C are easy but need to understand first how it works in original what params it takes etc. i mean i can put just call to the external function in C code just i need to find in the code where to do so and where in the code name of the module is sent. i.e. i will write on C that:
play_module(char *name_of_module)
{
there ahi_player
}
stop_module()
{
there drop_of_player
}
Now i need to find a place where actually call to play happens and there do that just that (for first tests): 1). take the name of a module in question 2). play that module over ahi I have no problems with writing player on C/ahi. All I need now is to find out from where do JSR calls to my external function and from where to take the name of the module. I can do a call to the external player right after first "jsr -6(A6)" but where to are the name of module sends to replayer
|
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2012/10/17 20:42 Last Login
: 6/4 10:29
Group:
Registered Users
|
If the replay routine is done using addinvector() then this function could be patched, look for the task who did it if it is foundation put your own code if not continue. Doing it in 68k ASM might be simpler.
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2006/11/20 16:26 Last Login
: Today 17:03
From Norway
Group:
Registered Users
|
@kas1e
1). take the name of a module in question
should be "LAB_1E56" easy to find in a hex editor. Sadly, the decompile do not understand ASCII, so dumps it as Long Hex values.
Now you need to make sense of what it does with that string.
|
(NutsAboutAmiga)
Basilisk II for AmigaOS4 AmigaInputAnywhere Excalibur and other tools and apps.
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2012/10/17 20:42 Last Login
: 6/4 10:29
Group:
Registered Users
|
You can specify in the config file of Ira a range that you know is ascii for example and it will disassemble it in the correct data format.
|
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2012/10/17 20:42 Last Login
: 6/4 10:29
Group:
Registered Users
|
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@All At first, to better understand how Foundation was coded, I tried to fix "FoundationPrefs" which have issues with too small width and as result all the buttons use/save/reset_prefs/quit just invisibly and to make them be at least half visibly needed to play with the GUI preferences of OS to make buttons bigger and so on. So I just checked what size preference windows are: 600x240. I need to change the 240 value. Disassembled it with IRA and checked what function is used for open window: OpenWindow() or OpenWindowTagList() - as a result that is OpenWindow(). Next, from 68k asm pov OpenWindow takes just one argument: pointer to a window structure into A0. But that all looks like a mess from dissasemble part:
MOVE.W -(A2),(A4) ;13ade: 38a2
MOVE.W -(A2),2(A4) ;13ae0: 39620002
MOVE.W -(A2),4(A4) ;13ae4: 39620004
MOVE.W -(A2),6(A4) ;13ae8: 39620006
BTST #4,LAB_05DA ;13aec: 0839000400012ddf
BEQ.W LAB_065D ;13af4: 67000006
BSET #9,D1 ;13af8: 08c10009
LAB_065D:
BTST #7,D1 ;13afc: 08010007
BEQ.W LAB_065E ;13b00: 6700000c
MOVE.L LAB_0666(PC),34(A4) ;13b04: 297a01f80022
BSET #17,D1 ;13b0a: 08c10011
LAB_065E:
MOVE.L D1,14(A4) ;13b0e: 2941000e
MOVE.L -(A2),D1 ;13b12: 2222
MOVE.L D2,D0 ;13b14: 2002
JSR LAB_0312 ;13b16: 4eb90000cc14
MOVE.L D0,26(A4) ;13b1c: 2940001a
MOVE.B D3,8(A4) ;13b20: 19430008
MOVE.B D4,9(A4) ;13b24: 19440009
MOVEA.L (A1),A1 ;13b28: 2251
MOVE.L A1,30(A4) ;13b2a: 2949001e
MOVE.W 20(A1),D0 ;13b2e: 30290014
AND.W #$000f,D0 ;13b32: c07c000f
MOVE.W D0,46(A4) ;13b36: 3940002e
MOVEA.L A4,A0 ;13b3a: 204c
MOVEA.L (A7)+,A4 ;13b3c: 285f
JSR -204(A6) ;13b3e: 4eaeff34
Then i go easy route : if that a window structure, then it should be as in includes : Quote: x_pos: dc.w 0 ;X-position y_pos: dc.w 0 ;Y-position width: dc.w 600 ;width height: dc.w 240 ;height
And so on. So value width and height should be closed together. I tried immediately to find in the binary itself such a hex data: 025800F0, and nothing. How that? Created then 2 examples of OpenWindow() for 68k on asm (vasm from vbcc) and on C (also by vbcc's vc). In each of them, those values are placed the same together. So i start to think about all sorts of things, but then on EAB come one of the developers who help Paul to develop Foundation at some point, and he say that whole thing (and prefs and main binary) were written on BlitzBasic 2.1. Now, i install BlitzBasic 2.1 on OS3.2 under E-UAE, create a simple test case to Open a window, and wtf, in the binary it is also not just 025800F0, but 0258 some_4_bytes_ 00F0. Do now know wtf is that and how, but then it was easy for me to find that in the FoundationPrefs binary, add 10 by width, and have a proper window with proper buttons. See, before: (press open in new tab for fullscreen)  After fix: (press open in new tab for fullscreen)  Next want to deal with a cursor in the game itself being disappeared after title images show up. Probably they SetCursor via some BlitzBasic kind function new bitmap and something goes wrong there. Maybe worth just disabling and keeping system one. And after that probably ready to deal with music.
Edited by kas1e on 2022/1/7 0:54:35 Edited by kas1e on 2022/1/7 16:53:37 Edited by kas1e on 2022/1/7 16:54:32
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@all Ok, with cursor was easy enough. Checked intuition.library, and they're just 2 functions : SetPointer() (-270) and SetWindowPointerA (-816). Checked disassemble from IRA, and found only -270 there. So simple commented out JSR -270(A6), recompile back to the binary, and have system's cursor in the menu and in-game now. Maybe not that tasty as some game's fancy cursor, but it better than needs to swap back to the workbench, activate it, and swap back to foundation screen to have (not always) mouse is shown.
So now to the music part..
|
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2007/1/10 21:56 Last Login
: Today 15:46
From Stockholm Sweden
Group:
Registered Users
|
@kas1e
Good progress, keep on hacking!
|
1989-> A500, A600, A3000, A4000, A1200, CD32, µA1, PegII, A1XE, CDTV, Amy/416D79, A1X5000, Vampire 500 V2+, Vampire 600 V2, Amy-ITX, Denise ITX <-2022
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@khayoz :) I even found now how to made it works in 1920x1080x32bit , while originally it give only modes up to 1280 and non-system friendly screens. Through that wasn't by hacking, just setting up prefs:screen properly. I will made all info in some small article later when will done with replayer (the last thing).
For now, i already wrote 68k version of the player which takes the name of the module and plays it through ptreplay.library (on os4 it uses amigaos4 versions done by Frederik, so all works fine from 68k code). So i also made it an external function (a player I mean) and compile object files from C sources, with removing all C-libs code, so as to keep only OS3.x calls (will be easy to rewrite it on assembler if there will be needs for once that done). Now just sorting last moment about how to compile together that all via vbcc, and should have played some external module on the place where the module should start. So hope for something soon.
EDIT: ok i am able to compile into reassembled foundation binary my C player: right at the beginning do "jsr _my_player" , and on running music plays. Now need to do some crap to find out where actually put a player in (there are 7 place for 7 modules : end, enter, intro, lost, menu, start, and won). Only to find out when they should be called/stopped and that all.
Edited by kas1e on 2022/1/7 22:56:17
|
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2007/1/10 21:56 Last Login
: Today 15:46
From Stockholm Sweden
Group:
Registered Users
|
@kas1e
Kool progress!
|
1989-> A500, A600, A3000, A4000, A1200, CD32, µA1, PegII, A1XE, CDTV, Amy/416D79, A1X5000, Vampire 500 V2+, Vampire 600 V2, Amy-ITX, Denise ITX <-2022
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2012/10/17 20:42 Last Login
: 6/4 10:29
Group:
Registered Users
|
You can use WinUAE with the action replay rom, put a breakpoint on the replay routine and see the parameters for each song and use the same ones on your code.
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@All Ok, done! Check this out: https://youtu.be/J4zWR_Y8utoA bit of finetuning left, but all the major bits are done. What you see here is instead of cia.resource for modules i use ptreplay/ptplay librarys (native version of which for OS4 were done by Frederik aka Salas00). Player has written on C, and i link it together with main assembler code which i got by disassembling it by IRA. If some you will have any interest i can write a small article about how i have done that all, can be pretty interesting.
|
|
|
|
Re: Foundation music patch: progress
|
|
Just popping in 
Joined: 2016/3/10 14:15 Last Login
: 6/30 19:36
From Poland
Group:
Registered Users
|
Great ! Can You fix Payback PPC version with Warp3D ? https://www.apex-designs.net/payback_update_amiga.htmlUpdate 7: OS-legal Paula access routines are now used on the 68k version for compatibility with Amithlon. (The PPC version still accesses Paula directly for extra speed.)
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@amig_os I have a lot of TODO which i want to sort first for amiga projects. Payback at least in 68k version works fine on OS4. And with foundation, i was just lucky enough that it was more or less easy.
Taking into account that it was written on BlitzBasic2.1, it just luck it works at all :)
|
|
|
|
Re: Foundation music patch: progress
|
|
Home away from home 
Joined: 2006/12/2 3:55 Last Login
: 6/30 19:52
From Italy, Perugia
Group:
Registered Users
|
@kas1e
Thanks a lot! :)
|
|
|
|
Re: Foundation patching: progress
|
Posted on: 1/10 17:54
#17
|
Just popping in 
Joined: 2008/8/21 1:11 Last Login
: 7/3 7:33
Group:
Registered Users
|
@kas1e
Love the work on Foundation. I was playing it via E-UAE few years ago. Once your done and post your work I'll pick it up again but natively :)
As for Payback, I've installed the latest version from Aminet and I get the audio.device error when I run either the 68K or WOS version:
14.Work:Games/3D-Games/Payback> stack 10000 14.Work:Games/3D-Games/Payback> Payback.exe InitSound: Could not open audio.device! ***Command 'Payback.exe' returned with unfreed signals 04000000! 14.Work:Games/3D-Games/Payback> Paybackwos.exe InitSound: Could not open audio.device! ***Command 'Paybackwos.exe' returned with unfreed signals 04000000!
Any other trick I need to use to get Payback running?
Thanks! Bill "tekmage" Borsari
|
|
|
|
Re: Foundation patching: progress
|
Posted on: 1/10 20:24
#18
|
Not too shy to talk 
Joined: 2007/1/6 5:59 Last Login
: 5/20 22:02
Group:
Registered Users
|
Wich version of Foundation is needed to get this running? I tried this with Foundation I have, but it said something about newer prefs etc.
|
|
|
|
Re: Foundation patching: progress
|
Posted on: 1/10 20:32
#19
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@tekmage I need to check if i do something non-trivial, but the 68k version surely works in software mode.
@utri007 There is nothing uploaded at the moment (in the first post it was just reassembled wip, not a patch). I hope today to upload a fully ready patch with all that installation scripts and stuff.
The version which needs it is FoundationGOLD with their last official update applied called FoundationGold151.lha (i can upload it somewhere later, or maybe will add it to the patch archive).
Why I choose "GOLD" because gold is the latest one of all the Foundation's series, includes everything from previous ones, and has some improvements over other ones.
So wait probably a few hours more and i will upload ready-to-use patches.
|
|
|
|
Re: Foundation patching: progress
|
Posted on: 1/10 22:35
#20
|
Home away from home 
Joined: 2007/9/11 12:31 Last Login
: 6/22 18:37
From Russia
Group:
Registered Users
|
@All Ok, patch on os4depot in upload query. I tried to make it as good as possible (i mean patch itself), with installation script (but you of course can do it manually too), with checking if you have necessary player libs, and if not, install them, with double-checking that "GOLD + update151" version works and patches fine via installer script.
But there can be bugs of course :) So report them all there.
And don't forget (please) to read "readme.txt" in the root. It's small, but explain what was done, what TODO, and how to make Foundation runs with CD-Audio from .cue, with all music and sounds, on true-color screens, etc, etc.
|
|
|
Currently Active Users Viewing This Thread:
1
(
0 members
and 1 Anonymous Users
)
|
|
|