From df26f4613a83e03724c0746c45035370a6d842a0 Mon Sep 17 00:00:00 2001 From: Bottersnike Date: Thu, 17 Nov 2022 17:53:00 +0000 Subject: [PATCH] Folding regions! --- headers.js | 79 ++++- images/mxstartup.png | Bin 0 -> 62579 bytes styles.css | 26 +- templates/pages/proto/cardmng.html | 56 +++- templates/pages/protocol.html | 2 + templates/pages/sega/partition.html | 269 ++++++++++++++++++ templates/pages/sega/software/boot.html | 13 + templates/pages/sega/software/mxmaster.html | 23 ++ .../pages/sega/software/mxprestartup.html | 15 + templates/pages/sega/software/mxstartup.html | 133 +++++++++ 10 files changed, 602 insertions(+), 14 deletions(-) create mode 100644 images/mxstartup.png create mode 100644 templates/pages/sega/partition.html create mode 100644 templates/pages/sega/software/boot.html create mode 100644 templates/pages/sega/software/mxmaster.html create mode 100644 templates/pages/sega/software/mxprestartup.html create mode 100644 templates/pages/sega/software/mxstartup.html diff --git a/headers.js b/headers.js index 6a7d0ba..73b2dcf 100644 --- a/headers.js +++ b/headers.js @@ -1,8 +1,79 @@ for (const el of document.querySelectorAll("[id]")) { - el.classList.add("haspara") + el.classList.add("haspara"); const pilcrow = document.createElement("a"); - pilcrow.className = "pilcrow" + pilcrow.className = "pilcrow"; pilcrow.href = "#" + el.id; - pilcrow.innerHTML = "¶" - el.prepend(pilcrow) + pilcrow.innerHTML = "¶"; + el.prepend(pilcrow); } + +const foldable = (root, children) => { + let state = true; + root.addEventListener("click", (e) => { + if (e.target.classList.contains("pilcrow")) state = true; + else state = !state; + + children.style.height = state ? "auto" : "0"; + children.style.overflow = state ? "visible" : "hidden"; + if (state) root.classList.remove("closed"); + else root.classList.add("closed"); + }); + root.classList.add("toggle-root"); +}; + +const make_foldable = (root) => { + const child_stacks = new Array(10).fill(null).map(() => ({ children: [], root: null })); + + const flush_header = (this_level, sibling) => { + for (let level = 9; level >= this_level; level--) { + const stack = child_stacks[level]; + + if (!stack.root) continue; + + const new_e = document.createElement("div"); + for (const old_e of stack.children) { + old_e.remove(); + new_e.appendChild(old_e); + } + + foldable(stack.root, new_e); + let parent_level; + for (parent_level = level - 1; parent_level > 0; parent_level--) if (child_stacks[parent_level].root) break; + + if (parent_level === -1) { + if (sibling) root.insertBefore(new_e, sibling); + else root.appendChild(new_e); + } else { + stack.root.remove(); + child_stacks[parent_level].children.push(stack.root); + child_stacks[parent_level].children.push(new_e); + } + + stack.root = null; + stack.children.length = 0; + } + }; + + for (const child of [...root.children]) { + if (/^H\d$/.test(child.tagName)) { + const this_level = parseInt(child.tagName[1]) - 1; + + flush_header(this_level, child); + + child_stacks[this_level].root = child; + continue; + } + + for (let level = 9; level >= 0; level--) { + if (child_stacks[level].root) { + child_stacks[level].children.push(child); + break; + } + } + } + + for (let level = 9; level >= 0; level--) { + flush_header(level, null); + } +}; +make_foldable(document.body); diff --git a/images/mxstartup.png b/images/mxstartup.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac175881caaec7f626fc2d385f14fc3612aa616 GIT binary patch literal 62579 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 literal 0 HcmV?d00001 diff --git a/styles.css b/styles.css index da698bb..69c3c77 100644 --- a/styles.css +++ b/styles.css @@ -144,7 +144,7 @@ table.nav td { .pilcrow { position: absolute; right: calc(100%); - padding-right: 4px; + padding-right: 24px; top: .1em; font-size: .9em; text-decoration: none; @@ -234,6 +234,30 @@ mark { text-underline-offset: 1px; } +.toggle-root { + cursor: pointer; + position: relative; +} +.toggle-root::before { + opacity: .5; + content: ""; + display: block; + border: 4px solid currentColor; + border-left-color: transparent; + border-top-color: transparent; + position: absolute; + left: -18px; + top: 50%; + transform: translateY(-50%) rotate(45deg); + transition: transform 100ms ease-out, opacity 100ms ease-out; +} +.toggle-root:hover::before { + opacity: 1; +} +.toggle-root.closed::before { + transform: translateY(-50%) rotate(-45deg); +} + @media (prefers-color-scheme: dark) { body { background-color: #000; diff --git a/templates/pages/proto/cardmng.html b/templates/pages/proto/cardmng.html index 5f8d720..edc8a36 100644 --- a/templates/pages/proto/cardmng.html +++ b/templates/pages/proto/cardmng.html @@ -50,6 +50,40 @@
  • cardmng.getdatalist
  • +

    dataid? refid?

    +

    Some requests use refid, some use dataid, and some use both. What exactly you use these + values for is largely left up to the server implementer, as the game will echo them back verbatim, however here are + three suggestions:

    + + + + + + + + + +
    refidAn ID that references the user
    dataAn ID that references the game specific data for this user/game combination
    + + + + + + + + + +
    refidA session token issued during card auth
    dataAn ID that references the game specific data for this user/game combination
    + + + + + + + + + +
    refidAn ID that references the user
    dataThe same as refid; we can use database joins for accessing game data

    cardmng.inquire

    Request information about a card that has been inserted or touched against a reader.

    @@ -76,12 +110,11 @@ - + - + @@ -94,12 +127,16 @@ - + + + + +
    refidA reference to this card to be used in other requestsSee section about refid and dataid
    dataidAppears to be set the same as refid; presumably to allow different keys for game state vs - login details.See section about refid and dataid
    newflag
    expired? Just set to 0.? Just set it to 0.
    newflag? Just set it to 0.

    cardmng.getrefid

    -

    Register a new card to this server.

    +

    Register a new card to this server. In the process, we're also going to create a game profile.

    Request:

    {% highlight "cxml" %}
         
    @@ -122,20 +159,21 @@
     
    -        
    +        
    -        
    +        
    -        
    +        
    refidA reference to this card to be used in other requestsSee section about refid and dataid
    dataidAppears to be set the same as refid; presumably to allow different keys for game state vs - login details.See section about refid and dataid
    pcode? Not present in captured data.? Just omit this

    cardmng.bindmodel

    +

    Create a data profile for this card on the current game. Request and response should be fairly self-explanatory.

    +

    Request:

    {% highlight "cxml" %}
         
    diff --git a/templates/pages/protocol.html b/templates/pages/protocol.html
    index 7115d2e..b8d5d24 100644
    --- a/templates/pages/protocol.html
    +++ b/templates/pages/protocol.html
    @@ -219,5 +219,7 @@
     
     

    Possible XRPC requests

    +

    Of which properly documented:
    - cardmng

    + {{ generate_xrpc_list()|safe }} {% endblock %} \ No newline at end of file diff --git a/templates/pages/sega/partition.html b/templates/pages/sega/partition.html new file mode 100644 index 0000000..a4ee57e --- /dev/null +++ b/templates/pages/sega/partition.html @@ -0,0 +1,269 @@ +{% extends "sega.html" %} +{% block title %}SEGA Partition Structure{% endblock %} +{% block body %} +

    SEGA Partition Structure

    + +

    Games on the Ring* series use MBR partitioned drives. The core partition structure is as follows:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PartitionSizeFormatContent
    11.5GiBNTFSWindows XP Embedded 2009
    21.5GiBNTFSWindows recovery partition
    3remaining spaceExtended Partition (LBA)Game data
    4
    + +

    Extended partitions are structed by a linked list of partition headers at the beginning of each partition. These + headers reserve 3Fh blocks for their information, however only use a single block at the start of this + for actual data. SEGA make use of the remaining blocks in the first extended partition header for SEGA boot records. +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Partition offset (blocks)Content
    0Extended partition header
    1SEGA Partition Description
    2SEGA Boot Record (1)
    3SEGA Boot Record (2)
    4-63Additional data storage
    64-...Actual partition data
    + +

    Two identical copies of the SEGA Boot Record are present. This is for redundancy; if either is corrupted, an attempt + will be made to restore it from the other copy.

    + +

    SEGA Partition Description

    + +

    The SEGA Partition Description (SPD) largely echos the structure laid out by the extended partition headers, however + is the table SEGA loaders preferentially read. It takes up all 512 bytes of the block; it's structure is as follows: +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789ABCDEF
    00hCRC32Ver
    10hSlot content?Block sizeBlock count
    20hSlot content?Block sizeBlock count
    30hSlot content?Block sizeBlock count
    ...
    F0hSlot content?Block sizeBlock count
    + +

    The slot content types are:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ValueMeaning
    10horiginal0
    11horiginal1
    20hpatch0
    21hpatch1
    30hos
    40happ_data
    + +

    SEGA Boot Record

    + +

    The SEGA Boot Record (SBR) contains detailed information about the content of each slot.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    0123456789ABCDEF
    00hCRC32Ver
    10h
    20hBootslot5x slot status
    30h
    ...
    A0h
    B0h
    C0h
    D0h
    E0h
    F0h
    + +{% endblock %} \ No newline at end of file diff --git a/templates/pages/sega/software/boot.html b/templates/pages/sega/software/boot.html new file mode 100644 index 0000000..e2b5cbf --- /dev/null +++ b/templates/pages/sega/software/boot.html @@ -0,0 +1,13 @@ +{% extends "sega.html" %} +{% block title %}Boot Sequence{% endblock %} +{% block body %} +

    Boot Sequence

    + +

    This page is a stub for now.

    + +
      +
    1. mxprestartup
    2. +
    3. mxstartup
    4. +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/pages/sega/software/mxmaster.html b/templates/pages/sega/software/mxmaster.html new file mode 100644 index 0000000..0085880 --- /dev/null +++ b/templates/pages/sega/software/mxmaster.html @@ -0,0 +1,23 @@ +{% extends "sega.html" %} +{% block title %}mxmaster{% endblock %} +{% block body %} +

    mxmaster

    + +

    mxmaster is the program responsible for orchastrating the entire system.

    + +

    It first spawns the following list of programs:

    + +
      +
    • s:\mxkeychip.exe
    • +
    • s:\mxnetwork.exe -p 40104
    • +
    • s:\mxstorage.exe
    • +
    • s:\mxinstaller.exe -cmdport 40102 -binport 40103 (sometimes with -openmode any appended)
    • +
    • s:\mxgcatcher.exe {appboot.platformid} {appboot.gameid} {appboot.networkaddr} {appboot.keyid}
    • +
    • s:\mxgfetcher.exe {appboot.platformid} {appboot.gameid} {appboot.networkaddr} {appboot.keyid}
    • +
    • s:\mxgdeliver.exe {appboot.platformid} {appboot.gameid} {appboot.networkaddr} {appboot.keyid}
    • +
    • C:\WINDOWS\system32\regini.exe S:\default_regset.txt
    • +
    • c:\System\Execute\mxsegaboot.exe
    • + +
    + +{% endblock %} \ No newline at end of file diff --git a/templates/pages/sega/software/mxprestartup.html b/templates/pages/sega/software/mxprestartup.html new file mode 100644 index 0000000..8f77357 --- /dev/null +++ b/templates/pages/sega/software/mxprestartup.html @@ -0,0 +1,15 @@ +{% extends "sega.html" %} +{% block title %}mxprestartup{% endblock %} +{% block body %} +

    mxprestartup

    + +

    mxprestartup is the first program to run when the AppUser user logs in.

    + +

    This program's sole job is to construct the password for SystemUser, and spawn mxstartup.exe as SystemUser.

    + +

    Micetools contains a full version of this program, with a few additions for ease of use. It + can be found on the micetools repository.

    + +{% endblock %} \ No newline at end of file diff --git a/templates/pages/sega/software/mxstartup.html b/templates/pages/sega/software/mxstartup.html new file mode 100644 index 0000000..ae21b5c --- /dev/null +++ b/templates/pages/sega/software/mxstartup.html @@ -0,0 +1,133 @@ +{% extends "sega.html" %} +{% block title %}mxstartup{% endblock %} +{% block body %} +

    mxstartup

    + +

    mxstartup is responsible for some very initial system checks, loading the S: drive, and handing over to mxmaster.exe.

    + +

    This is the first time anything other than the Windows XP boot screen will be shown.

    + + + +

    mxstartup is responsible for a number of error codes, listed below. This table contains every error mxstartup can + produce, to the best of my knowledge.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Error codeMessageMeaning
    0500SecurityCheck error
    0501CheckEwfState error
    0502GetSystemVersion error
    0503GetsystemKeyFile
    0504SetDiskAccessPrivilege
    0505MountSystem
    0506MountUpdate error
    0507ExecuteMaMaster
    0508GetOSUpdateKeyFile error
    0509ExecuteMxOSUpdate error
    0510ChangeEWFStateEnable error
    0511GetSBRSlotOSState error
    0512Deleate Key File error
    0513MountDriver error
    0514CheckPlatform error
    0540Unmount error
    0541MountRecoveryVolume error
    0543MxChangeActivePartition error
    0545osuSystemReboot error
    0546GetSystemDiskNumber error
    ????SetBackupComputerName failed
    +

    These errors are also reported into the Application event log, under the source mxstartup.

    + +{% endblock %} \ No newline at end of file