Platform index / Video presentation switcher

Analog Way LiveCore

A card frame with an x86 PC inside it and a microcontroller on every card. Layer count is not a setting — it is how many processing cards are in the chassis.

PartialIntroduced 2014LiveCore (Ascender / NeXtage / SmartMatriX Ultra)Card-basedx86 PC card14 microsAES-encrypted updaterDowngrade registerTCP 105001,014 control variables

The load-bearing finding. layersPerResource tracks the processing-card count exactly: Ascender 16, 32 and 48 are 2, 4 and 6 PROC cards. The model number is arithmetic — ASC4806 means 48 total layers, 6 per screen, from 6 × 4 screens × 2 (program + preview).

Verdict. Hardware, and not subtly. Layer count is the processing-card count, input count is the input-card count, output count is the output-card count, and the 4K variants use a physically different input card — the per-position plug list changes, which a licence cannot do. The software knows how to be every model in the family from a single encrypted package, and the reported model is even writable over the wire, but only downwards and only within a set the device itself supplies. The interesting structural fact is how little of the machine is in the update file: an x86 PC card with its own BIOS and disk-on-module runs the web interface and the Lua policy layer, and fourteen microcontrollers on the cards do the rest. The control plane recovered since sits entirely on the PC card's side of that split: 1,014 variables, no authentication, and a memory model whose stored contents are addressable field by field — none of which says anything at all about what the processing cards contain.

Method

The vendor update packages are AES-encrypted and were not decrypted. The architecture findings come instead from the vendor's own simulator appliance, whose second disk is an ext4 image of the device filesystem — read without mounting — carrying the platform's variable, enum and dimension model as JSON plus its Lua policy layer. The control-plane findings came later and differently: the Flash client the device serves was lifted out of that same image and decompiled, exercised against a simulated NeXtage 16 booted under QEMU, and then confirmed on a real NeXtage 16 on our LAN on 2026-08-06. No unit was opened and nothing about the cards was measured.

Artifacts examined

  • LivecoreUpdate_04_02_77.awp and LivecoreUpdateBIOS_01_02_06.awp — encrypted; statistics only
  • aw_simulator.ova — the vendor simulator appliance; disk 2 is an ext4 filesystem containing the device application, the WebRCS tree and resources/Platforms/LiveCore_4_02/
  • GENERIC_DIM.json, GENERIC_ENUM.json, GENERIC_VAR.json — the platform's own dimension table, 133 enumerations and 1,014 control variables
  • Lua/typedef/awLiveCore.lua — the per-model capability table, in the vendor's own source with French comments intact
  • ORX_WebRCS.swf v04.02.03 — the Flash client the device serves to a browser, lifted from the appliance's ext4 image without mounting it. Its Vars_Common::awVar initialiser carries 1,014 control variables in 88 groups, each with its request and answer mnemonics, dimension list and declared range
  • A golden capture of real wire bytes — the framing, the asymmetric answer mnemonics, a set and its read-back, the unsolicited push on connect and both error codes — pinned as a regression test rather than described in prose

No manufacturer firmware, binaries or documentation are redistributed here. Artifacts are referenced by name and version only. See the method and legal statement for the basis on which this analysis was performed and the boundaries it observes.

Hardware architecture

ItemFindingConfidence
Chassis modelCard frame with 20 addressable slots: LOGO_BRIDGE, IN_1..IN_3, PROC_1..PROC_6, OUT_1..OUT_2, MONITORING, FDP, three FAV_* front-panel cards, FRAMELOCK, LINK_UP and LINK_DOWNVerified
Distributed controlFourteen microcontrollers, one per card — BRIDGE, BRIDGE_AUX, IN_1..3, PROC_1..6, OUT_1..2, MONITORING. Part numbers are not given anywhere in the filesVerified
HostThere is an x86 PC inside the frame. The variable table carries PC_CARD_REV, PC_CARD_STATUS, PC_TEMP_CPU, PC_MAC_ADDRESS, VER_BIOS, VER_PC and VER_DOM — the last an enumeration of disk-on-module part numbers. It runs Apache and PHP and serves the Flash WebRCS appletVerified
Separate BIOS updateThat PC card is why LivecoreUpdateBIOS_01_02_06.awp exists as its own package, applied from a USB stick and confirmed with an on-screen "DO YOU WANT TO UPDATE LIVECORE BIOS?" promptVerified
Card population rulesInput cards = inputs ÷ 4 (INPUTS_BY_INPUT_CARD = 4), output cards = outputs ÷ 2, processing cards = the model's layer capacity. LOGO_BRIDGE, MONITORING and FDP are always presentVerified
Card part referencesThe simulator carries plausible CARD_REF values per slot: bridge 210218, input cards 210244, processing cards 210212, output cards 210213, framelock 210234. Whether these are real Analog Way references or simulator fixtures is not establishedUnknown
Input plugsPosition-dependent within a card, and different on the 4K variant. Standard: position 1 HD15/DVI-A/DVI/HDMI/SDI, 2 DVI/SDI, 3 HD15/DVI-A/DVI/SDI/HDMI, 4 SDI/DisplayPort. On the 4K card position 1 loses HDMI and position 2 gains itVerified
Output plugsANALOG, DVI, SDI, OPTICAL — two per output card, plus two optical links and a monitoring outputVerified

Software architecture

ItemFindingConfidence
Device applicationA 2.9 MB Qt5 binary on a Linux filesystem, with Lua 5.3 as the policy layer — around forty scripts covering layer validity, output format management, memory load and save, and factory resetVerified
Capability tableGetParametersByDevValue() returns, per model: is-LOE, soft-edge, SPU control, perspective layer, 4K-ready, layers per resource, is-3U, resources per device, outputs, inputs, monitoring resources, processing cardsVerified
Model capabilitiesNeXtage 08 — 8 in, 2 out, 2 resources, 2 layers, 1 PROC, 3U. NeXtage 16 — 8/2/2/4/2, 3U. SmartMatriX Ultra — 12/4/2/2/2, no soft-edge. Ascender 16 — 12/4/4/2/2. Ascender 32 — 12/4/4/4/4. Ascender 48 — 12/4/4/6/6Verified
Detected models24 device IDs: ORX_1 NeXtage 16 (97), ORX_2 SmartMatriX Ultra (98), ORX_3 Ascender 32 (99), ORX_4 Ascender 48 (100), ORX_5 (101) which was never released, LOE_16/32/48 Output Expanders (102–104), the _4K variants (105–111), ASC016 Ascender 16 (112–113), the _PL Perspective Layer builds (114–115, 118–119) and NXT0802 NeXtage 08 (116–117)Verified
Sibling platformThe same appliance carries a second platform, VTX, with one device — the VIO 4K at dev 1024, whose only option slot is an XLR audio card. Different software generation, same control architectureVerified
CouplingSINGLE, MASTER, SLAVE_1..SLAVE_7; modes LINK_MASTER, LINK_SLAVE, SYNC_MASTER, SYNC_SLAVE. Linking two frames doubles the model's input and output counts outright. Three link cables and two optical linksVerified
Protocol space24 inputs, 8 outputs, 8 screens, 24 layers, 16 groups, 32 EDID library slots, 144 preset memories, 512 settings memories, 100 stills, 10 GPO and 2 GPI — the ceiling across the whole family, not any one modelVerified
Control protocolThe same terse ASCII on TCP 10500 as the Midra generation, mnemonic-last outbound and mnemonic-first inbound — but the terminator differs. LiveCore's client returns a bare command string and its connection layer appends LF, with no carriage return anywhere; the device answers CRLF regardless. A receiver must split on LF, trim a trailing CR, and buffer a trailing partial line across reads. The vendor client does exactly that, and anything that does not drops state the first time a reply lands split across two packetsMeasured
The variable table1,014 variables in 88 groups, one object per parameter built from 15–16 positional arguments. Ranges and dimensions are the vendor's declarations rather than measured limits. The same client also serves the VIO 4K (VTX_WebRCS.swf v01.20.12), extractable by the identical pipeline and not yet tabulatedVerified
Identity, push and errors, on real bytesA get of 0,VEvar answers VEvar0,13. The asymmetric specials resolve: ?DEV0, !PDEV97 — 97 being the NeXtage 16's own device id — and **0. A set of 5,200INpcr was echoed INpcr5,200, read back 200 and restored. E10 answers an unknown mnemonic and E12 a wrong index count. ITcct0,1 — connected controllers, one, you — arrives unsolicited on connect, so the link is push, not pollMeasured
Three preset contexts, not twoThe layer variables are indexed [screen(0..7), ctx(0..2), layer(0..23)] and that middle axis is three wide, not a programme/preview pair. ctx0 is the context memories save from and load into — proven by tagging the three contexts of one layer with distinct sources and watching which survived a save and a load. What ctx1 and ctx2 correspond to on the physical outputs was not pinned downMeasured
Memory contents are directly addressablePM* mirrors the live PR* fields but is indexed [slot(0..143), layer(0..23)], so the contents of a stored memory can be read and written without touching the live arrangement — per-slot metadata included, where stored content width is non-zero exactly when the slot is used. Save snapshots PR[screen, ctx0, *] into PM[slot, *]; load writes it back into ctx0 only; a third verb is load-and-take. The round trip was proven both waysMeasured
Selection is not visibilityThe selected-layer variable tracks what the panel has selected and does not change what is on air, with or without a take — and it is correctly absent from the memory shadow, because a memory stores what each layer shows and never which layer someone had selected. Any client using it as a show/hide toggle is wrong, and appears to work until someone watches the outputMeasured
Take verbsTake-up, take-down, take-force and a T-bar, with up and down times — indexed by group [0..15] rather than by screen, a screen with no grouping being its own group. The per-layer status variables report small stable enums (3 or 4 for a used layer, 0 for an empty one) that did not flip under a take, so they are not an on-air flag whatever their names suggestMeasured
The appliance has to be given its cardsA simulator session created with empty options yields a device with no I/O cards fitted: every input and output reads unavailable, every screen allocates zero layers, and nothing — layers, takes, memory saves — has any effect. Passing each slot's option id from the device's own descriptor fits the cards, and the same device then comes up with its inputs available, its outputs enabled and its full control surface liveVerified

Update path & security model

ItemFindingConfidence
Update packageAES-encrypted. Entropy 7.9998 bits/byte from byte zero, length an exact multiple of 16, and zero repeated 16-byte blocks in 64 MB — so a chaining or counter mode, not ECB. No header, no magic, no version field in the clearVerified
DecryptionNot attempted beyond statistics. The key lives on the device side and the simulator appliance does not appear to carry a production copyUnknown
Version bindingPlatformDescriptor.json carries "updater": "67239956" — which is 0x04020014, i.e. version 04.02.20 packed as bytes. The package version is a plain integer comparisonVerified
Model registerThe reported model is a control variable, not a constant. xDOWNGRADE_DEV (DGdev) is externally writable, with the true model preserved read-only in xDOWNGRADE_ORIG_DEV (DGori) and the permitted set supplied by the device in xDOWNGRADE_DEV_LIST_COMPATIBILITY. It is a downgrade path, and it exists for link compatibility — pair two unequal frames and the larger steps down, which is why there is an explicit COUPLING_DISABLE_AUTODOWNGRADE flag. Recorded as a structural fact about the coupling feature; it was not exercised and the permitted set was not enumeratedVerified
Control-plane authenticationNone observed, and the same picture as the Midra generation: no credential step, state pushed the moment a socket opens, and the socket that reads is the socket that writes. AWGateway — a vendor application that holds one session to the device and re-serves port 10500 to several clients — is the strongest available evidence that the device accepts very few sessions, possibly one. The limit was not measuredMeasured

These rows describe how a platform validates a firmware image, because that is a structural fact about its architecture. They are not a vulnerability disclosure and no exploit, bypass or circumvention technique is published here. Licensing and entitlement mechanisms are out of scope throughout — seescope boundaries.

What is programmable

  1. 1The control protocol

    1,014 variables with their command mnemonics, access rights, types and ranges are all in the platform's own JSON on the appliance, and the table has since been reconstructed from the client and confirmed on a real NeXtage 16 — framing, identity, the set path, push, errors, the three preset contexts and the memory model. The stock client is a Flash applet served by the device, which is dead technology; a modern replacement controller is the obvious project and needs nothing that is encrypted.

  2. 2The Lua policy layer

    Layer validity, output format management and the memory model are Lua on the device filesystem, not compiled code. That is an unusually open seam for a machine of this class — though reaching it on real hardware, rather than in the simulator, was not investigated.

  3. 3Nothing in the video path

    The processing is on cards behind a backplane, driven by per-card micros, and every firmware component arrives inside the encrypted package. There is no analysable route to the picture from here.

Traps

Mistakes this analysis actually made, or came close to making. They are recorded because each one produces a plausible-looking wrong answer rather than an obvious failure.

  • Reading the model number as inputs and outputs. ASC4806 looks like 48 inputs and 6 outputs; the machine has 12 inputs and 4 outputs, and the digits are 48 total layers and 6 layers per screen. SMX12x4 genuinely is 12 in by 4 out, which makes the wrong reading feel confirmed. Only the capability table settles it.
  • Treating the encrypted update package as the end of the road. All three Analog Way packages examined here are AES-encrypted, which reads as a dead end — while the vendor's own simulator, already installed, ships the complete device filesystem unencrypted, including the platform's entire variable model. The locked door had an open one beside it.
  • Assuming -4K is a licence because it is presented in the interface as an option slot. It changes which physical connectors are usable on which input position, so it is a different card. An "option" in the vendor's configuration UI is not evidence of a software-only difference.
  • Averaging the encrypted package's statistics and stopping at "high entropy". The useful facts were the length being an exact multiple of 16 and the complete absence of repeated 16-byte blocks — which together say block cipher, chained or counter mode, a much more specific claim than "encrypted".
  • Reading the appliance's inert control surface as a stubbed simulator. A session created with no options has no cards fitted, so every input reads unavailable, every screen allocates zero layers and nothing responds — which looks exactly like a simulator that models the wire and not the machine. It models both. The session has to be created with the device's own option ids, and the whole control surface then works.
  • Treating the selected-layer variable as a show/hide control. It is panel selection only, it does not change on-air state with or without a take, and it is deliberately absent from what a memory stores.

Open questions

  • What is actually on a processing card. The card model, the micro and the per-card FPGA or ASIC are all invisible from the appliance — it describes the machine's behaviour, not its silicon. This is the largest gap on the page.
  • ORX_5, device 101 — six layers per resource but only two resources, sitting between the Ascender and NeXtage shapes. It is in the enumeration and in the capability table and appears in no catalogue.
  • Whether the simulator's CARD_REF numbers are real Analog Way part references or fixtures invented for the appliance.
  • The .awp key. It is on the device side; the appliance is a simulator build and does not obviously carry a production copy. Not pursued.
  • How much of the appliance's Lua matches what runs on real hardware. The scripts are explicitly simulation-side (simulator_SetVarMatrixValue), so they describe the model faithfully but may not be the production implementation.
  • The on-air semantics. A take is a verb on a group index and the per-layer status variables did not move under it, so nothing observed on the wire says what is actually on the programme output. It needs a monitor on the output and a signalled input, neither of which was available remotely.
  • How many concurrent control sessions the frame accepts, and whether an idle socket is dropped. AWGateway implies the answer is small; it was never measured, and it decides whether a third-party controller can run alongside the vendor client.
  • Whether a set outside a variable's declared range is clamped, rejected or accepted. Every range here is the client's declaration.
  • The VIO 4K's own variable table. The same Flash client ships it and the same pipeline extracts it; it has not been built, so the sibling platform named above is still described only by its device descriptor.

Status of this entry. Substantial findings recorded, but whole subsystems remain unexamined. Rows labelled Measured were read off a running unit; everything else on this page is derived from files and has not been checked against hardware.

← Back to the platform index