Skip to content

AdamNet Timing Analysis

Thomas Cherryhomes edited this page Sep 8, 2025 · 21 revisions

Internal notes describing observations of AdamNet timings with other peripherals.

The lifecycle of a single block

A Block is 1K of data from a disk or data pack.

stateDiagram-v2
    [*] --> Adam_asks_for_Status

    %% --- Transaction 1: MN_STATUS ---
    state MN_Status_Exchange {
        [*] --> Adam_Sends_MN_STATUS

        state "Adam sends MN_STATUS (0x14)" as Adam_Sends_MN_STATUS
        Adam_Sends_MN_STATUS --> Peripheral_Responds_NM_STATUS

        state "Peripheral responds NM_STATUS (0x84, 0x00, 0x04, 0x01, 0x40, 0x45)" as Peripheral_Responds_NM_STATUS
        Peripheral_Responds_NM_STATUS --> Adam_Responds_NM_ACK

        state "Adam responds NM_ACK (0x24)" as Adam_Responds_NM_ACK
        Adam_Responds_NM_ACK --> [*]
    }

    MN_Status_Exchange --> MN_Other_Exchange

    %% --- Transaction 2: Example other exchange ---
    state MN_Other_Exchange {
        [*] --> Adam_Sends_MN_OTHER

        state "Adam sends MN_OTHER (0x33)" as Adam_Sends_MN_OTHER
        Adam_Sends_MN_OTHER --> Peripheral_Responds_NM_OTHER

        state "Peripheral responds NM_OTHER (...payload...)" as Peripheral_Responds_NM_OTHER
        Peripheral_Responds_NM_OTHER --> Adam_Responds_NM_ACK2

        state "Adam responds NM_ACK (0x24)" as Adam_Responds_NM_ACK2
        Adam_Responds_NM_ACK2 --> [*]
    }

    MN_Other_Exchange --> [*]
Loading

Each of the three packet states:

Interesting things to look at

TAPEUTL always reads blocks cleanly from the FujiNet. Are we messing up status timing?

Digital Data Packs

Multiple units: The DCB has a unit number, which can specify the unit number for a drive. This gets reflected in the very last data byte of the requested block number. (This is why the send block command has 5 bytes).

Write Timings:

  • Time between D8 and 98: 164 microseconds
  • Time between 98 and 68: 124 microseconds
Clone this wiki locally