Homebrew Citra - Unofficial \ Chinese builds discussion

player594

Well-Known Member
Member
Joined
Dec 25, 2006
Messages
458
Trophies
1
XP
1,897
Country
United States
First of all, I need to clarify a point: I have already given up getting respect from drwhojan. If you look back the history of this thread, I, along with other devs, have been trying to pay respect to him (and everyone), but what I got is either equivocate reply, ignoring, and disrespect on the open source spirit. I do understand and highly agree with you on the truth of "Give respect if you want respect in return" - and also in turn, if I don't want ones respect, I don't have to pay respect to them any more.

Second, even though I don't expect respect, I think my "anti-insult" subconscious functionality was still working when I made that post, because what I described, although probably too straight forward (because I figured euphemism didn't work for him), was merely describing and asking for facts. Let me analyze my own words for you:

"You haven't answered my question"
You probably didn't know this so I don't blame you. I have asked the same question below on github (probably twice) but he hadn't answered it; instead he kept turning aside from topic to something else

"did you actually managed to pass the famous XY intro freeze, or you just assumed that you can"
This was asking to clarify his previous (again) equivocate comment "this fixes the intro freeze", and I enumerated the two possibilities that I can think of when one seems like describing a "near-fact": tested or assumed.

"I won't read your non-sense"
OK I lied a little: because I indeed first read some of his other material on github, I already knew that what he wrote was non-sense. The word "non-sense" here describes a technical state, where what he said or did didn't make sense by logic, and/or by some simple hacking knowledge. I know the "hacking knowledge" is probably too much to say here (I can continue if you want to read), so let me just give one simple example of non-sense he did: he opened a PR on github to the master branch, in order to fix a bug that exists in MY fork but doesn't exist in the master branch. (See the post above https://gbatemp.net/threads/citra-unofficial-chinese-builds-discussion.431974/page-450#post-8366749)

"until you answer this question"
This is for the sake of fairness. He kept asking me to read (and accept) what he wrote, while refusing to directly answer my question (which came from me reading his stuff). It is unfair to me if I have to accept his thing without being able to question it.

As you can see, I managed to make my words insult-free (even if I intended to insult). If one still call this insult and say I was acting like an elitist, then they are the one who find themselves weak and who admit that who lower themselves in front of me. If you are not such person, stop being hypocritical to help those who treat themselves weak, and do real talk with me. I am even fine if you "act like an elitist" over me. What I am not fine with is acting weak and attacking me from moral high ground.

Still sound like an elitist, but whatever.
 

wwylele

Well-Known Member
Member
Joined
Oct 17, 2015
Messages
151
Trophies
0
Age
28
XP
395
Country
China
@wwylele Fire Emblem Warriors Fixed and Broken by #4392
https://github.com/citra-emu/citra/pull/4392

Needs Investigating ? :wtf: , Must have been some think added much later time...

Gone into Panic mode.
------

When tested it on a Working Build it dose CreateMemoryBlock

Code:
Kernel.SVC <Warning> core\hle\kernel\svc.cpp:Kernel::CreateMemoryBlock:1169: called addr=0x005FC000
Kernel.SVC <Warning> core\hle\kernel\svc.cpp:Kernel::CreateMemoryBlock:1169: called addr=0x005FE000
Kernel.SVC <Warning> core\hle\kernel\svc.cpp:Kernel::CreateMemoryBlock:1169: called addr=0x005FD000
Service.IR <Info> core\hle\service\ir\ir_user.cpp:Service::IR::IR_USER::InitializeIrNopShared:258: called, shared_buff_size=4096, recv_buff_size=82, recv_buff_packet_count=1, send_buff_size=18, send_buff_packet_count=1, baud_rate=4

For This Game ^
What is the working build number?
 

drwhojan

Well-Known Member
Member
Joined
Jul 14, 2009
Messages
4,196
Trophies
1
Age
45
Location
Where I Am!
XP
1,702
Country
United Kingdom
What is the working build number?

I need more time for checking, I gone though all citra canary builds from 10 days ago non worked.

It was one of my local msvc builds with you're PR merged, The working one must have bean some think I added too it..

Just ones of though's wtf I did sort of thing.. Will figure it out and post back soon.

EDIT: Recompiling.
 
Last edited by drwhojan,

drwhojan

Well-Known Member
Member
Joined
Jul 14, 2009
Messages
4,196
Trophies
1
Age
45
Location
Where I Am!
XP
1,702
Country
United Kingdom
Forget it ^, It was still that old shit in there - That did fix it.

kernal / memory.cpp Allocating memory o3ds 5 to 6 n3ds

And adding new FCRAM_N3DS_SIZE

Code:
    // New 3DS layouts
    {0x07C00000, 0x06400000, 0x02000000}, // 6
    {0x0B200000, 0x02E00000, 0x02000000}, // 7
};

void KernelSystem::MemoryInit(u32 mem_type) {
    // TODO(yuriks): On the n3DS, all o3DS configurations (<=5) are forced to 6 instead.
    ASSERT_MSG(mem_type <= 6, "New 3DS memory");
    ASSERT(mem_type != 1);

    // The kernel allocation regions (APPLICATION, SYSTEM and BASE) are laid out in sequence, with
    // the sizes specified in the memory_region_sizes table.
    VAddr base = 0;
    for (int i = 0; i < 3; ++i) {
        memory_regions[i].Reset(base, memory_region_sizes[mem_type][i]);

        base += memory_regions[i].size;
    }

    // We must've allocated the entire FCRAM by the end
    ASSERT(base == Memory::FCRAM_N3DS_SIZE);

kernal / kernal.cpp -> Same Memory of 6 n3ds / Why can't we keep "system_mode" ? and place the 6 n3ds else where..

EDIT: Yes we can / MemoryInit(system_mode = 6);

Code:
/// Initialize the kernel
KernelSystem::KernelSystem(u32 system_mode) {
    MemoryInit(6);
 
Last edited by drwhojan, , Reason: typo fix
  • Like
Reactions: JPXZ and xmeee978

dissidius

New Member
Newbie
Joined
Nov 25, 2009
Messages
2
Trophies
0
XP
3
Country
Albania
hello everyone
can anyone redirect me to the best build to play jrpgs like fire emblem awakening for excample???
if possible obviously :)
Best Regards!
 

warweeny

Well-Known Member
Member
Joined
Apr 25, 2011
Messages
319
Trophies
0
XP
1,140
Country
Netherlands
i stopped making builds because i will get a 3ds soon

Could you post your "final" build?
That way i (and others of course) would at least have the latest build you made, seeing you are one of the few remaining in terms of custom builds, i'd like to have the latest build you made, in case the main branch is still worse than yours.
 

drwhojan

Well-Known Member
Member
Joined
Jul 14, 2009
Messages
4,196
Trophies
1
Age
45
Location
Where I Am!
XP
1,702
Country
United Kingdom
@drwhojan You haven't answered my question: did you actually managed to pass the famous XY intro freeze, or you just assumed that you can?

As a Follow up on the other had I don't think fixing the Music in the game would fix the deadlock/freeze anyway, has to be some think deeper..

EDIT: Yes it is.. ^, Seams to be around setting channels between the pipe and buffer Audio / Binary
Set "RegisterInterruptEvents"

const DspPipe pipe = static_cast<DspPipe>(channel);
to
const DspPipe pipe = static_cast<DspPipe>(channel, 3);

And it will Deadlock/Freeze a lot Sooner in FMV, Extra sounds missing so its Locking on "WriteProcessPipe"

https://www.3dbrew.org/wiki/DSP:ReadPipeIfPossible#Channel_3_.28Binary.29

Code:
Audio.DSP <Error> audio_core\hle\hle.cpp:AudioCore::DspHle::Impl::PipeWrite:139
: DspPipe::Audio: Unexpected buffer length 32 was written <- Odd ?

DSP_DSP::SetSemaphore:71: (STUBBED) called, semaphore_value=4000

DSP_DSP::WriteProcessPipe:119: channel=2, size=0x4, buffer_size=4 <- Audio 2 Channel
DSP_DSP::WriteProcessPipe:119: channel=3, size=0x20, buffer_size=20 <- Binary 3 Channel

DSP_DSP::ReadPipeIfPossible:178: channel=2, peer=0, size=0x0002, pipe_readable_size=0x0020 <- Audio 2 Channel
DSP_DSP::ReadPipeIfPossible:178: channel=2, peer=0, size=0x001E, pipe_readable_size=0x001E <- Audio 2 Channel , 1E can't be used.

DSP_DSP::RegisterInterruptEvents:261: Registered interrupt=2, channel=3 <- Interupt ?, <- Binary 3 Channel
DSP_DSP::RegisterInterruptEvents:265: Unregistered interrupt=2, channel=3

DSP_DSP::SetSemaphoreMask:287: (STUBBED) called mask=0x00002000

So how to split the two channels in the one "WriteProcessPipe" ?..
 
Last edited by drwhojan, , Reason: fixed info

drwhojan

Well-Known Member
Member
Joined
Jul 14, 2009
Messages
4,196
Trophies
1
Age
45
Location
Where I Am!
XP
1,702
Country
United Kingdom
^ Though't might be some think like this

Code:
void DSP_DSP::WriteProcessPipe(Kernel::HLERequestContext& ctx) {
    IPC::RequestParser rp(ctx, 0x0D, 2, 2);
    const u32 channel = rp.Pop<u32>();
    const u32 size = rp.Pop<u32>();
    auto buffer = rp.PopStaticBuffer();

    const DspPipe pipe = static_cast<DspPipe>(DspPipe::Audio, channel, 2);
    const DspPipe pipe2 = static_cast<DspPipe>(DspPipe::Binary, channel, 3);

    // This behaviour was confirmed by RE.
    // The likely reason for this is that games tend to pass in garbage at these bytes
    // because they read random bytes off the stack.
    switch (pipe) {
    case DspPipe::Audio:
        ASSERT(buffer.size() >= 4);
        buffer[20] = 1;
        break;
        switch (pipe2) {
        case DspPipe::Binary:
            ASSERT(buffer.size() >= 8);
            buffer[4] = 1;
            break;
        }
    }

    Core::DSP().PipeWrite(pipe, buffer);

    IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
    rb.Push(RESULT_SUCCESS);

    LOG_DEBUG(Service_DSP, "channel={}, size=0x{:X}, buffer_size={:X}", channel, size,
              buffer.size());
}

Should be Channel Binary 3 and size, 0020 / pipe_readable_size, 0020 , But its having non of it..
Code:
void DSP_DSP::ReadPipeIfPossible(Kernel::HLERequestContext& ctx) {
    IPC::RequestParser rp(ctx, 0x10, 3, 0);
    const u32 channel = rp.Pop<u32>();
    const u32 peer = rp.Pop<u32>();
    const u16 size = rp.Pop<u16>();

    const DspPipe pipe = static_cast<DspPipe>(DspPipe::Audio, channel, 2);
    const u16 pipe_readable_size = static_cast<u16>(Core::DSP().GetPipeReadableSize(pipe));

    std::vector<u8> pipe_buffer;
    if (pipe_readable_size >= size, 1)
        pipe_buffer = Core::DSP().PipeRead(pipe, size);

    IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
    rb.Push(RESULT_SUCCESS);
    rb.Push<u16>(pipe_readable_size, 1);
    rb.PushStaticBuffer(pipe_buffer, 0);

    LOG_DEBUG(Service_DSP, "channel={}, peer={}, size=0x{:04X}, pipe_readable_size=0x{:04X}",
              channel, peer, size, pipe_readable_size);
}

Now CMD are Log reading
Code:
Audio.DSP <Warning> audio_core\hle\hle.cpp:AudioCore::DspHle::Impl::PipeRead:111: pipe_number = 2 is out of data, application requested read of 32 but 0 remain

Still Required no matter what for above
https://github.com/citra-emu/citra/compare/master...MerryMage:pipe3
 
Last edited by drwhojan, , Reason: fixed info

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • BakerMan @ BakerMan:
    1st of what?
  • BakerMan @ BakerMan:
    may?
  • K3Nv2 @ K3Nv2:
    Oh yeah it's in September
  • Xdqwerty @ Xdqwerty:
    @BakerMan, yea i think its different
  • BakerMan @ BakerMan:
    ok, because here it's in september, right before the fuckin school year starts
  • Xdqwerty @ Xdqwerty:
    good night
  • BakerMan @ BakerMan:
    as to you
  • K3Nv2 @ K3Nv2:
    How do you know if the night will be good when you're asleep
  • BakerMan @ BakerMan:
    because i didn't say i was asleep
  • BakerMan @ BakerMan:
    i said i was sleeping...
  • BakerMan @ BakerMan:
    sleeping with uremum
  • K3Nv2 @ K3Nv2:
    Even my mum slept on that uremum
  • TwoSpikedHands @ TwoSpikedHands:
    yall im torn... ive been hacking away at tales of phantasia GBA (the USA version) and have so many documents of reverse engineering i've done
  • TwoSpikedHands @ TwoSpikedHands:
    I just found out that the EU version is better in literally every way, better sound quality, better lighting, and there's even a patch someone made to make the text look nicer
  • TwoSpikedHands @ TwoSpikedHands:
    Do I restart now using what i've learned on the EU version since it's a better overall experience? or do I continue with the US version since that is what ive been using, and if someone decides to play my hack, it would most likely be that version?
  • Sicklyboy @ Sicklyboy:
    @TwoSpikedHands, I'll preface this with the fact that I know nothing about the game, but, I think it depends on what your goals are. Are you trying to make a definitive version of the game? You may want to refocus your efforts on the EU version then. Or, are you trying to make a better US version? In which case, the only way to make a better US version is to keep on plugging away at that one ;)
  • Sicklyboy @ Sicklyboy:
    I'm not familiar with the technicalities of the differences between the two versions, but I'm wondering if at least some of those differences are things that you could port over to the US version in your patch without having to include copyrighted assets from the EU version
  • TwoSpikedHands @ TwoSpikedHands:
    @Sicklyboy I am wanting to fully change the game and bend it to my will lol. I would like to eventually have the ability to add more characters, enemies, even have a completely different story if i wanted. I already have the ability to change the tilemaps in the US version, so I can basically make my own map and warp to it in game - so I'm pretty far into it!
  • TwoSpikedHands @ TwoSpikedHands:
    I really would like to make a hack that I would enjoy playing, and maybe other people would too. swapping to the EU version would also mean my US friends could not legally play it
  • TwoSpikedHands @ TwoSpikedHands:
    I am definitely considering porting over some of the EU features without using the actual ROM itself, tbh that would probably be the best way to go about it... but i'm sad that the voice acting is so.... not good on the US version. May not be a way around that though
  • TwoSpikedHands @ TwoSpikedHands:
    I appreciate the insight!
  • The Real Jdbye @ The Real Jdbye:
    @TwoSpikedHands just switch, all the knowledge you learned still applies and most of the code and assets should be the same anyway
    The Real Jdbye @ The Real Jdbye: @TwoSpikedHands just switch, all the knowledge you learned still applies and most of the code...