Half-Life for Dreamcast has some functional multiplayer components

Discussion in 'Sega Dreamcast Development and Research' started by TerdFerguson, Jul 13, 2015.

  1. Kallus

    Kallus Seriously Serious Member

    Joined:
    Dec 22, 2015
    Messages:
    103
    Likes Received:
    58
    Nice. Hopefully we can port Counter-Strike and Team Fortress Classic too.
     
    TerdFerguson likes this.
  2. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    We'd be able to port everything that's why I've spent a silly amount of time on this lol

    I'm also in the process of trying this
    https://msdn.microsoft.com/en-us/library/ms884674.aspx
    But services.exe doesn't seem to be in WCE-DC or WCE5.0

    Also the 'bgetmod' command ("request batch mod status") has the same output as 'getsv' another example of a network related command that has functional inner-engine workings. I'll edit this with a picture later
     
    spinksy and Anthony817 like this.
  3. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    Here's 'bgetmod' giving the same output as 'getsv'
    [​IMG]

    That Services.exe registry entry string didn't have any effect either

    I've found out though that you can manually combine the .bib and .reg files that Windows CE Dreamcast and Windows CE 5.0 share, copy and overwrite the old Windows CE Dreamcast files in C:\WCEDreamcast\release\retail, open the Dreamcast Image Configuration Tool. And build a new 0WINCEOS.BIN using the image/module schema, modules, and .exe's from Windows CE 5.0 SH4

    I'll be fiddling with that but i've been having a hard time getting a working install of WCE5.0 Platform Builder since it has an uninstall/reinstall bug in Windows 7 or in general. Who knows, booting the whole OS can actually work because you can define the memory spaces for Dreamcast in the .bib files. I don't think it will actually work, but if it does then things really get interesting
     
    Anthony817 likes this.
  4. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    After doing some more skimming through the ASM, it does look like those parameters are in fact defined and should function if they're called correctly
    Code:
    loc_3C342:                ; CODE XREF: sub_3C320+A8j
            mov.l    @r9, r6
            tst    r6, r6
            bt    loc_3C3C4
            mov.l    #aBasedir, r5    ; "-basedir"
            mov    r6, r7
    
    loc_3C34C:                ; CODE XREF: sub_3C320+44j
            mov.b    @r5, r6
            mov.b    @r7, r3
            cmp/eq    r3, r6
            bt    loc_3C358
            bra    loc_3C368
            mov    #h'FFFFFFFF, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C358:                ; CODE XREF: sub_3C320+32j
            tst    r6, r6
            bf    loc_3C360
            bra    loc_3C368
            mov    #0, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C360:                ; CODE XREF: sub_3C320+3Aj
            add    #1, r5
            add    #1, r7
            bra    loc_3C34C
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C368:                ; CODE XREF: sub_3C320+34j
                        ; sub_3C320+3Cj
            tst    r5, r5
            bf    loc_3C3C4
            bra    loc_3C3CE
            mov    r4, r5
    ; ---------------------------------------------------------------------------
    word_3C370:    .data.w    h'104           ; DATA XREF: sub_3C1EC+84r
    word_3C372:    .data.w    h'208           ; DATA XREF: sub_3C1EC+7Cr
                        ; sub_3C1EC+8Er ...
    word_3C374:    .data.w    h'10C           ; DATA XREF: sub_3C1EC+92r
    word_3C376:    .data.w    h'214           ; DATA XREF: sub_3C1EC:loc_3C2AEr
    word_3C378:    .data.w    h'114           ; DATA XREF: sub_3C1EC:loc_3C30Cr
    word_3C37A:    .data.w    h'118           ; DATA XREF: sub_3C320+Er
    word_3C37C:    .data.w    h'200           ; DATA XREF: sub_3C1EC+110r
            .align h'10
    off_3C380:    .data.l    _sprintf    ; DATA XREF: sub_3C1EC+FAr
    off_3C384:    .data.l    sub_123494    ; DATA XREF: sub_3C1EC:loc_3C296r
    off_3C388:    .data.l    aBasedir    ; DATA XREF: sub_3C320+28r
                        ; "-basedir"
    off_3C38C:    .data.l    unk_2C3E80    ; DATA XREF: sub_3C1EC+EAr
                        ; sub_3C1EC+100r
    off_3C390:    .data.l    aValve        ; DATA XREF: sub_3C1EC+D8r
                        ; "valve"
    off_3C394:    .data.l    _strcpy        ; DATA XREF: sub_3C1EC:loc_3C2C2r
                        ; sub_3C1EC+116r
    off_3C398:    .data.l    sub_3D774    ; DATA XREF: sub_3C1EC+10Ar
    off_3C39C:    .data.l    aGamedir    ; DATA XREF: sub_3C1EC+10Er
                        ; "*gamedir"
    off_3C3A0:    .data.l    unk_2C48C0    ; DATA XREF: sub_3C1EC+11Ar
    off_3C3A4:    .data.l    aSS_3        ; DATA XREF: sub_3C1EC+102r
                        ; "%s/%s"
    off_3C3A8:    .data.l    unk_2C4A60    ; DATA XREF: sub_3C1EC+10Cr
    off_3C3AC:    .data.l    unk_2C49D4    ; DATA XREF: sub_3C320+12r
    off_3C3B0:    .data.l    unk_2C49CC    ; DATA XREF: sub_3C320+1Cr
    off_3C3B4:    .data.l    sub_176AE0    ; DATA XREF: sub_3C1EC+DEr
    off_3C3B8:    .data.l    aValve_0    ; DATA XREF: sub_3C1EC+E0r
                        ; "valve"
    off_3C3BC:    .data.l    sub_168284    ; DATA XREF: sub_3C1EC+9Ar
                        ; sub_3C1EC:loc_3C290r
    off_3C3C0:    .data.l    sub_122BE4    ; DATA XREF: sub_3C1EC+88r
    ; ---------------------------------------------------------------------------
    
    loc_3C3C4:                ; CODE XREF: sub_3C320+26j
                        ; sub_3C320+4Aj
            add    #1, r4
            cmp/gt    r4, r8
            bt/s    loc_3C342
            add    #4, r9
    
    loc_3C3CC:                ; CODE XREF: sub_3C320+1Aj
            mov    #0, r5
    
    loc_3C3CE:                ; CODE XREF: sub_3C320+4Cj
            tst    r5, r5
            bt    loc_3C3EE
            add    #-1, r8
            cmp/gt    r5, r8
            bf    loc_3C3EE
            mov.l    #unk_2C49CC, r2
            shll2    r5
            mov.l    @r2, r0
            add    #4, r5
            mov.l    @(r0,r5), r5
            mov    #h'14, r4
            mov.l    #_strcpy, r0
            jsr    @r0 ; _strcpy
            add    r15, r4
            bra    loc_3C3FA
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C3EE:                ; CODE XREF: sub_3C320+B0j
                        ; sub_3C320+B6j
            mov    #h'14, r4
            mov.l    #_strcpy, r0
            mov.l    #unk_2C3E80, r1
            mov.l    @r1, r5
            jsr    @r0 ; _strcpy
            add    r15, r4
    
    loc_3C3FA:                ; CODE XREF: sub_3C320+CAj
            mov    #h'14, r4
            mov.l    #_strlen, r0
            jsr    @r0 ; _strlen
            add    r15, r4
            mov    r0, r5
            cmp/pl    r5
            bf    loc_3C422
            mov    #h'14, r4
            add    r15, r4
            add    #-1, r5
            add    r5, r4
            mov.b    @r4, r5
            mov    #h'5C, r3
            cmp/eq    r3, r5
            bt    loc_3C41E
            mov    #h'2F, r2
            cmp/eq    r2, r5
            bf    loc_3C422
    
    loc_3C41E:                ; CODE XREF: sub_3C320+F6j
            mov    #0, r1
            mov.b    r1, @r4
    
    loc_3C422:                ; CODE XREF: sub_3C320+E6j
                        ; sub_3C320+FCj
            mov.l    #unk_2C49D4, r2
            mov.l    @r2, r8
            mov    #1, r4
            cmp/gt    r4, r8
            bf    loc_3C462
            mov.l    #unk_2C49CC, r2
            mov.l    @r2, r9
            add    #4, r9
    
    loc_3C432:                ; CODE XREF: sub_3C320+13Ej
            mov.l    @r9, r6
            tst    r6, r6
            bt    loc_3C45A
            mov.l    #aCachedir, r5    ; "-cachedir"
    
    loc_3C43A:                ; CODE XREF: sub_3C320+132j
            mov.b    @r5, r7
            mov.b    @r6, r2
            cmp/eq    r2, r7
            bt    loc_3C446
            bra    loc_3C456
            mov    #h'FFFFFFFF, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C446:                ; CODE XREF: sub_3C320+120j
            tst    r7, r7
            bf    loc_3C44E
            bra    loc_3C456
            mov    #0, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C44E:                ; CODE XREF: sub_3C320+128j
            add    #1, r5
            add    #1, r6
            bra    loc_3C43A
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C456:                ; CODE XREF: sub_3C320+122j
                        ; sub_3C320+12Aj
            tst    r5, r5
            bt    loc_3C464
    
    loc_3C45A:                ; CODE XREF: sub_3C320+116j
            add    #1, r4
            cmp/gt    r4, r8
            bt/s    loc_3C432
            add    #4, r9
    
    loc_3C462:                ; CODE XREF: sub_3C320+10Aj
            mov    #0, r4
    
    loc_3C464:                ; CODE XREF: sub_3C320+138j
            tst    r4, r4
            bt    loc_3C492
            add    #-1, r8
            cmp/gt    r4, r8
            bf    loc_3C492
            shll2    r4
            mov.l    #unk_2C49CC, r11
            add    #4, r4
            mov.l    @r11, r0
            mov.l    @(r0,r4), r5
            mov.b    @r5, r0
            cmp/eq    #h'2D, r0
            bf    loc_3C486
            mov    #0, r2
            mov.l    #unk_2C4B40, r1
            bra    loc_3C48E
            mov.b    r2, @r1
    ; ---------------------------------------------------------------------------
    
    loc_3C486:                ; CODE XREF: sub_3C320+15Cj
            mov.l    #_strcpy, r0
            mov.l    #unk_2C4B40, r4
            jsr    @r0 ; _strcpy
            nop
    
    loc_3C48E:                ; CODE XREF: sub_3C320+162j
            bra    loc_3C4AC
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C492:                ; CODE XREF: sub_3C320+146j
                        ; sub_3C320+14Cj
            mov.l    #unk_2C3E80, r4
            mov.l    @(4,r4), r5
            tst    r5, r5
            bt    loc_3C4A6
            mov.l    #_strcpy, r0
            mov.l    #unk_2C4B40, r4
            jsr    @r0 ; _strcpy
            nop
            bra    loc_3C4AC
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C4A6:                ; CODE XREF: sub_3C320+178j
            mov    #0, r2
            mov.l    #unk_2C4B40, r1
            mov.b    r2, @r1
    
    loc_3C4AC:                ; CODE XREF: sub_3C320:loc_3C48Ej
                        ; sub_3C320+182j
            mov.l    #aValve_0, r6    ; "valve"
            mov    #h'14, r5
            mov    #1, r4
            bsr    sub_3C0D4
            add    r15, r5
            mov.l    #unk_2C49D4, r3
            mov    #1, r4
            mov.l    @r3, r8
            cmp/gt    r4, r8
            movt    r11
            bf    loc_3C4FE
            mov.l    #unk_2C49CC, r3
            mov.l    @r3, r9
            add    #4, r9
    
    loc_3C4C8:                ; CODE XREF: sub_3C320+1DAj
            mov.l    @r9, r6
            tst    r6, r6
            bt    loc_3C4F6
            mov    r6, r7
            mov.l    #aGame,    r5    ; "-game"
    
    loc_3C4D2:                ; CODE XREF: sub_3C320+1CAj
            mov.b    @r5, r6
            mov.b    @r7, r3
            cmp/eq    r3, r6
            bt    loc_3C4DE
            bra    loc_3C4EE
            mov    #h'FFFFFFFF, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C4DE:                ; CODE XREF: sub_3C320+1B8j
            tst    r6, r6
            bf    loc_3C4E6
            bra    loc_3C4EE
            mov    #0, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C4E6:                ; CODE XREF: sub_3C320+1C0j
            add    #1, r5
            add    #1, r7
            bra    loc_3C4D2
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C4EE:                ; CODE XREF: sub_3C320+1BAj
                        ; sub_3C320+1C2j
            tst    r5, r5
            bf    loc_3C4F6
            bra    loc_3C500
            mov    r4, r6
    ; ---------------------------------------------------------------------------
    
    loc_3C4F6:                ; CODE XREF: sub_3C320+1ACj
                        ; sub_3C320+1D0j
            add    #1, r4
            cmp/gt    r4, r8
            bt/s    loc_3C4C8
            add    #4, r9
    
    loc_3C4FE:                ; CODE XREF: sub_3C320+1A0j
            mov    #0, r6
    
    loc_3C500:                ; CODE XREF: sub_3C320+1D2j
            tst    r6, r6
            bt    loc_3C52E
            mov    #h'FFFFFFFF, r1
            add    r8, r1
            cmp/gt    r6, r1
            bf    loc_3C52E
            mov.l    #unk_2C44A0, r3
            mov    #1, r1
            mov.w    r1, @r3
            shll2    r6
            mov.l    #unk_2C49CC, r2
            add    #4, r6
            mov.l    @r2, r0
            mov    #h'14, r5
            add    r15, r5
            mov    #0, r4
            bsr    sub_3C0D4
            mov.l    @(r0,r6), r6
            mov    #1, r1
            mov.l    #unk_2C49D4, r3
            mov.l    @r3, r8
            cmp/gt    r1, r8
            movt    r11
    
    loc_3C52E:                ; CODE XREF: sub_3C320+1E2j
                        ; sub_3C320+1EAj
            tst    r11, r11
            bt/s    loc_3C56A
            mov    #1, r4
            mov.l    #unk_2C49CC, r3
            mov.l    @r3, r9
            add    #4, r9
    
    loc_3C53A:                ; CODE XREF: sub_3C320+246j
            mov.l    @r9, r6
            tst    r6, r6
            bt    loc_3C562
            mov.l    #aPath_0, r5    ; "-path"
    
    loc_3C542:                ; CODE XREF: sub_3C320+23Aj
            mov.b    @r5, r7
            mov.b    @r6, r3
            cmp/eq    r3, r7
            bt    loc_3C54E
            bra    loc_3C55E
            mov    #h'FFFFFFFF, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C54E:                ; CODE XREF: sub_3C320+228j
            tst    r7, r7
            bf    loc_3C556
            bra    loc_3C55E
            mov    #0, r5
    ; ---------------------------------------------------------------------------
    
    loc_3C556:                ; CODE XREF: sub_3C320+230j
            add    #1, r5
            add    #1, r6
            bra    loc_3C542
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C55E:                ; CODE XREF: sub_3C320+22Aj
                        ; sub_3C320+232j
            tst    r5, r5
            bt    loc_3C56C
    
    loc_3C562:                ; CODE XREF: sub_3C320+21Ej
            add    #1, r4
            cmp/gt    r4, r8
            bt/s    loc_3C53A
            add    #4, r9
    
    loc_3C56A:                ; CODE XREF: sub_3C320+210j
            mov    #0, r4
    
    loc_3C56C:                ; CODE XREF: sub_3C320+240j
            tst    r4, r4
            bf/s    loc_3C576
            mov    r4, r9
            bra    loc_3C66C
            nop
    ; ---------------------------------------------------------------------------
    
    loc_3C576:                ; CODE XREF: sub_3C320+24Ej
            mov.l    #unk_2C44A4, r10
            mov.l    #unk_2C44A0, r1
            mov    #1, r2
            mov.w    r2, @r1
            add    #1, r9
            cmp/gt    r9, r8
            mov    #0, r3
            bf/s    loc_3C66C
            mov.l    r3, @r10
            mov.l    #unk_2C49CC, r11
            mov.l    r11, @(h'134+var_124,r15)
    
    loc_3C58C:                ; CODE XREF: sub_3C320+340j
            mov    r9, r12
            shll2    r12
            mov.l    @(h'134+var_124,r15), r2
            mov.l    @r2, r0
            mov.l    @(r0,r12), r2
            tst    r2, r2
            bt    loc_3C5B2
            mov    r9, r2
            mov.l    #unk_2C49CC, r1
            shll2    r2
            mov.l    @r1, r0
            mov    #h'2B, r3
            mov.l    @(r0,r2), r4
            mov.b    @r4, r4
            cmp/eq    r3, r4
            bt    loc_3C5B2
            mov    #h'2D, r2
            cmp/eq    r2, r4
            bf    loc_3C5F0
    
    loc_3C5B2:                ; CODE XREF: sub_3C320+278j
                        ; sub_3C320+28Aj
            mov    #1, r1
            mov.l    #unk_2C49D4, r2
            mov.l    @r2, r2
            cmp/gt    r1, r2
            bra    loc_3C66C
            movt    r11
    ; ---------------------------------------------------------------------------
            .align h'10
    off_3C5C0:    .data.l    aCachedir    ; DATA XREF: sub_3C320+118r
                        ; "-cachedir"
    off_3C5C4:    .data.l    unk_2C44A0    ; DATA XREF: sub_3C320+1ECr
                        ; sub_3C320+258r
    off_3C5C8:    .data.l    unk_2C3E80    ; DATA XREF: sub_3C320+D2r
                        ; sub_3C320:loc_3C492r
    off_3C5CC:    .data.l    aGame        ; DATA XREF: sub_3C320+1B0r
                        ; "-game"
    off_3C5D0:    .data.l    _strcpy        ; DATA XREF: sub_3C320+C4r
                        ; sub_3C320+D0r ...
    off_3C5D4:    .data.l    aPath_0        ; DATA XREF: sub_3C320+220r
                        ; "-path"
    off_3C5D8:    .data.l    unk_2C4B40    ; DATA XREF: sub_3C320+160r
                        ; sub_3C320+168r ...
    off_3C5DC:    .data.l    unk_2C44A4    ; DATA XREF: sub_3C320:loc_3C576r
    off_3C5E0:    .data.l    unk_2C49D4    ; DATA XREF: sub_3C320:loc_3C422r
                        ; sub_3C320+196r ...
    off_3C5E4:    .data.l    unk_2C49CC    ; DATA XREF: sub_3C320+B8r
                        ; sub_3C320+10Cr ...
    off_3C5E8:    .data.l    aValve_0    ; DATA XREF: sub_3C320:loc_3C4ACr
                        ; "valve"
    off_3C5EC:    .data.l    _strlen        ; DATA XREF: sub_3C320+DCr
    
    I looked into trying to run HALFLIFE_DC.EXE using ShellExecuteEx rather than CreateProcess which is what that modem dialer EXE uses. But I cannot code and couldn't find any completed samples to compile like the CreateProcess modem EXE

    It's kind of disappointing knowing people on this board own Katana dev boxes, and could somewhat simply install the SDK and test properly running the command line parameters to Half-Life using the "Dreamcast Tool" command line transport for the WinCE kernel. Then know for absoulte certainty if they work or not
    @RedRingRico @Shane McRetro could either of you help with that?
     
    RedRingRico and Anthony817 like this.
  5. RedRingRico

    RedRingRico Rising Member

    Joined:
    May 26, 2009
    Messages:
    50
    Likes Received:
    28
    Sure, I'll help. Seems like there is a lot of reading to catch up on, first.
     
    TerdFerguson and Anthony817 like this.
  6. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    All I need tested is using the "Dreamcast Tool" command shell to run those switches. If you want though you can also use MRASENTRY.EXE to make a RAS dial entry and MRASDIAL.EXE to dial it if you have a DreamPi to see if it trys sending packets

    I'll make sure the new CE/SH4 DLL is in the HLDC-SDK later on
     
    Anthony817 likes this.
  7. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    Pretty much, and you probably already know this, but running "hl.exe -game cstike" on PC would start the engine using the new client.dll/hl.dll from counter-strike

    So doing the same on Dreamcast may have the same effect. If not then we know for sure or a new client.dll is needed as well

    The new dll should replace the models for zombies, headcrabs and medkits. So if you delete the 'Barney' folder and start a new Blue-Shift game you can have quick access to console and type 'map c1a1' because there's a head crab right in the beginning of that map. Goodluck
     
  8. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    One other thing, try finding out if you can use the remote registry editor tool to see what the original 1st_read.bin contains in the kernel
     
  9. RedRingRico

    RedRingRico Rising Member

    Joined:
    May 26, 2009
    Messages:
    50
    Likes Received:
    28
    Well, I'm off to an interesting start. At the moment, I get what appears to be a pink screen when using Dreamcast Tool to launch Half-Life. I am unable to switch from the debug image to the release image with the tool and there's no obvious way to switch between the two. When I load without the GD emulated, I get this:
    [​IMG]

    I was able to get Half-Life to load just fine by booting from the GD but it doesn't work with Windbg (complains about a missing function - NKStackWalk from IMAGEHLP.dll - and DLL - em.dll).
     
  10. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    Do you have the GDI driver enabled? When the GDI driver is enabled for me on retail the screen flashes pink and resets. Are you in debug mode?

    With windbg, you need to run 'WinDbgFix.exe" then it will stop that error
    Do you mean the command shell tool or the Image Tool?
     
  11. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    And I'm going to go over this stuff in greater detail on hldc.dreampipe.net later tonight http://hldc.dreampipe.net/viewtopic.php?f=11&t=30

    I added some code for making the modem dialer applet wait 60 seconds before launching Half-Life. The code will be on HLDC-DEV and I'll add it to the next version of hldc-sdk too

    I did a whole bunch of network diagnostics trying to get the Dreamcast to send a packet. I ran "Nmap" on the dreampi to scan all ports on the Dreamcast's IP. But from the quick 1000 port TCP scan it said all 1000 were closed

    So it's possible that even though the modem is dialed and connected, there are no open ports in the CE kernel. So if the port's Half-Life uses are opened using winsock, there's a potential it could then use the internet connection. I'll go over this is greater detail later. I'm doing an Nmap TCP scan on every port (1-65535) now, which it hasn't output anything for about a half-hour now maybe the program hanged. But after the full TCP scan I'll be doing a UDP scan of every port to see if there's at least one opened port

    Edit: @RedRingRico I attached the CE/SH4 hl.dll. Adding to sdk later
     

    Attached Files:

    Last edited: May 13, 2016
  12. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    The socket scan finished and I got a packet
    [​IMG]
    But I didn't set to output to a log file, so I have to redo the scan to find out which one it is. Which is good because if I get the packet again the result was reproduced
     
  13. RedRingRico

    RedRingRico Rising Member

    Joined:
    May 26, 2009
    Messages:
    50
    Likes Received:
    28
    I got it working by copying the 0winceos.bin and NK.BIN files from the retail build of the image to the debug directory. Setting the environment variable _FLATRELEASEDIR to point to the retail directory before running dctool did nothing, so I think I may have to resort to copying the files into the debug directory for now.
     
    Anthony817 and TerdFerguson like this.
  14. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    This might help
    That one packet was a generic ICMP ping packet at the start of the scan. So every port is closed
    [​IMG]
    So I guess that means the ports need to be opened manually
     
  15. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    Necro Bump Update Report:

    Back in July I added code to that modem dialing applet that calls DirectPlay, to test editing the network enviroment within Windows CE. It had no effect of any use or significance. But I can now ping TCP ports, and it looks like there is handshaking (meaning it doesn't fail to reach the port, not in half-life), though it is just a stray packet, it does reply with multiple responses
    This will be 3 posts because this one already is exceeding max length
     
  16. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    But when I send a packet to any UDP port, it fails to reach the port
    After the test used to capture those packets, I added Windows Sockets code to bind the UDP sockets half-life uses. But I didn't test yet, no more CDs
    Someone needs to implement WCE support in dreamshell or some other SD card loader
     
  17. TerdFerguson

    TerdFerguson ls ~/

    Joined:
    Apr 27, 2015
    Messages:
    755
    Likes Received:
    466
    With all of the stuff I've poked around in with this over the past many months I understand how a lot of this stuff works better

    I now see that if I do open the UDP ports, there's an extreme slim chance it does anything significant. There's no apparent strings or functions that are the equivalent to all of the WinSock API exports in the Half-Life PC binary for interacting with the internet. All or most of the WinSock32 functions are present in the Windows CE version of the API, but these were seemingly not ported at all

    I'm pretty sure I've mentioned this at least once in this mess of a thread, but I was taking a closer look at this today. List of strings from HLDC binary:
    This is probably the more significant aspects or findings of all of this
    D:\proj\halflifedc\src\engine\eng_cdll_int.c

    I read the filename as "Engine Client.dll Initialization". If that is not a safe assumption, please tell me. Grouped in the same area as that string is many of the strings responsible for the effects of the "Startgame" command

    I think if client.dll was properly ported and compiled for WinCE Dreamcast, "Startgame" will load the new client.dll. I am extremely confident of this

    If client.dll can in fact be loaded, we're in. We can do (virtually) anything. All of the WinSock32 API functions could be reimplemented into CE. As well as calling LoadLibrary for hl.dll and handling of it's functions, adding mic/bba support, porting all open sourced mods. But without that entry point, nothing can be done

    All of that would require a real lot of game development skill, but if there's anyone who can buckle down and actually port client.dll, we can test for sure if it loads. There's plenty of evidence posted here to believe it's a strong possibility it will

    It'd be cool to hear others thoughts on this
     
  18. Anthony817

    Anthony817 Familiar Face

    Joined:
    May 12, 2010
    Messages:
    1,124
    Likes Received:
    596
    Dreamshell has supported Windows CE games for quite some time now.
     
  19. megavolt85

    megavolt85 Peppy Member

    Joined:
    Jan 8, 2015
    Messages:
    332
    Likes Received:
    483
    Windows CE in Dreamshell work only from HDD.
    Windows CE use MMU. MMU work only with DMA. DMA work only with HDD
     
    TerdFerguson likes this.
  20. truemaster1

    truemaster1 Enthusiastic Member

    Joined:
    Nov 10, 2015
    Messages:
    570
    Likes Received:
    273
    if only we could get the source code. we could make it in no time. but:(
     

Share This Page