dwt/tcpip: map the socket API and fetch a file over TFTP into RAM

The firmware's tftp_open hangs in its resolver from the rdebug process, so
the payload speaks RFC 783 over the firmware socket API: socket(2,2,0),
sendto(RRQ), recvfrom(DATA)/ACK into a malloc'd buffer, close. Verified
live: 600 B fetched from 192.168.99.1 into the malloc buffer, server RRQ
logged, and rdebug peek matches probe.bin byte-for-byte.

Notes: dwt/notes/TCPIP.md (function table, ABI, limits) and the
loader/transport hand-off in dwt/notes/LOADER_CROSS.md.
This commit is contained in:
SDD committed 2026-10-18 15:24:34 +03:00
1 parent 139d89a10c
commit 01923ecb69
47 files changed
+3394

No files matched your search

+15
View File
@@ -373,3 +373,18 @@ Facts for anyone tempted to "just create a window" (details in
client is "one call away".
* Shared-RAM UI mutation still works (opcode 8 / `0x3F309350`), and that is the
realistic route for making the Terminal Manager draw something.
## 2026-10-18 15:25 EEST — TFTP fetch into a malloc buffer works from rdebug
For the COFF-loader agent (details: `dwt/notes/LOADER_CROSS.md` and
`dwt/notes/TCPIP.md`):
* The firmware `tftp_open` hangs from the rdebug process (its resolver; no RRQ).
Use the socket API instead: `socket` `3F5C9A00`, `sendto` `3F5D3D70`,
`recvfrom` `3F5D7D50` (`arg5 = &socklen`, initialise to 16), `close`
`3F5E8930`, `malloc` `3F701230`. Stack args, last first.
* Verified: `dwt/tcpip/tftpc.asm` (bit `01870000`) fetched 600 B into the
malloc buffer `0x00b5bcd0`; server RRQ `'dwt/tcpip/probe.bin'`; peek/cmp
byte-identical (sha256 `9662e62b…333359`). Run it in the **rdebug process**.
* Pointers are bit addresses: advance a data cursor by `n*8`. Keep the 2048-B
receive buffer and the `from`/`fromlen`/ACK cells disjoint.
+25
View File
@@ -128,3 +128,28 @@ out of the target sections; the loader cannot see them.
offsets match it.
* `dwt/notes/LOADER.md` — the full COFF layout, the position-dependence
evidence and the loader algorithm.
## 2026-10-18 15:25 EEST — TFTP fetch works from the rdebug process
* **Exact fetch call:** the firmware's `tftp_open` is unusable (hangs in its
resolver, no RRQ). Use the minimal client in `dwt/tcpip/tftpc.asm`
(bit `01870000`, 694 B): `malloc(0x10000)` at `3F701230`, `socket(2,2,0)` at
`3F5C9A00`, `sendto(fd,buf,len,0,to,16)` at `3F5D3D70`,
`recvfrom(fd,buf,2048,0,&from,&fromlen)` at `3F5D7D50` with `*fromlen=16`,
`close(fd)` at `3F5E8930`. Stack arguments are pushed **last first**; the
sixth `recvfrom` argument is a **pointer to the socklen**.
* **Buffer/process:** run in the **rdebug process** (ordinary `jump`); no
`create_process` and no registration. A child returned `-1` from `socket()`
in the one attempt. `malloc` returns a **bit** address; advance the
destination by `n*8`, not `n`. Keep the receive buffer (2048 B) and the
`from`/`fromlen`/ACK cells disjoint — a `0x800` bit offset is only 256 bytes.
* **Verified:** 600 B fetched into the malloc buffer at `0x0095bbd0`, server
RRQ `15:23:48 ... requested 'dwt/tcpip/probe.bin'`, and `peek`/`cmp` match
byte-for-byte (sha256 `9662e62b…333359`). The payload returns 0; rdebug stays
live.
* **Hand-off:** the fetched buffer's bit address and byte length go straight
into the descriptor at `0x01882C00` (`magic 4C44/5231, buf, len, mode=1`),
then `calla 01880000h` with `A8=0` or the descriptor address. The transport
scratch is below `0x01880000` (recv `01876000`, `from` `0187A000`, `fromlen`
`0187A080`, ACK `0187A100`), so it does not collide with the loader page
`01880000`–`01883200`.
+251
View File
@@ -0,0 +1,251 @@
# VT1200 TCP/IP and a working TFTP fetch
Date: 2026-10-18. Firmware `vt1200_v22.bin` md5
`b46a3e442ccb86134d2356bd70d22fd2` (**unmodified**). No driver edits, no ROM
patch. The emulator ran the documented `VT1200_SKIP_LEVEL1=1` divergence with a
private `-cfg_directory`/`-nvram_directory`, the LANCE on `taptun`, BOOTP from a
private server, and `dwt/tcpip/probe.bin` served over TFTP.
**Result:** a payload (`dwt/tcpip/tftpc.asm`) fetched a 600-byte file from
`192.168.99.1:69` into a `malloc`'d buffer, in the **rdebug process** (ordinary
`jump`, no `create_process`), and `peek` returned it byte-for-byte:
```
stage=4 fd=1 buf=0x0095bbd0 total=600 last=92 block=0x0200 done=0x05a5a5a5
OK: 600 bytes at 0x0095bbd0 match dwt/tcpip/probe.bin
sha256=9662e62b45802984e5eef9c7410ad7482645eb5ff77805f0406d248e35333359
```
Server-side RRQ (fresh server log for that run):
```
15:23:48 RRQ 192.168.99.2:1025 requested 'dwt/tcpip/probe.bin' (600 bytes)
```
The firmware's own `tftp_open` is **not usable from the rdebug process**: it
never returns and emits no RRQ (details in §3). The fetch is therefore a
minimal RFC 783 client built on the firmware's socket API — the allowed
fallback, not a mock.
---
## 1. Stack architecture
TCP/IP is an **in-process library with a kernel-lock wrapper**, not a separate
service with an IPC protocol. Every socket call is an ordinary ROM function
taking stack arguments in the firmware convention:
```
MOVE A14,-*SP,1 ; reserve the slot the callee restores
MOVI argN,A0 / MOVE A0,*A14+,1 ; last argument first, upward via A14
...
MOVI arg0,A0 / MOVE A0,*A14+,1 ; first argument last
CALLA target
```
The wrappers take the per-process lock at `[@0x1B3900]+0x1C1` and dispatch
through the kernel entry, but from the caller's point of view they are library
calls: no registration, no service name, and no X-style attach. The arguments
are the normal BSD socket arguments; `struct sockaddr` is a 16-byte
`{u16 family; u16 port; u32 addr; u8 zero[8]}` in **network byte order** (the
firmware calls `htons(69)` itself in `tftp_open`).
### Verified entry points
| function | bit address | Ghidra | ABI (source order) | status |
|---|---|---|---|---|
| `socket` | `3F5C9A00` | `07EB9340` | `socket(domain, type, protocol)` -> fd | **verified live**, returns 1 |
| `bind` | `3F5CAA80` | `07EB9550` | `bind(fd, sockaddr*, len)` | from the BOOTP caller |
| `listen` | `3F5CBCD0` | `07EB979A` | `listen(fd, backlog)` | from inetd (`backlog=5`) |
| `accept` | `3F5CCB40` | `07EB9968` | `accept(fd, sockaddr*, len*)` | from inetd (`NULL,NULL`) |
| `sendto` | `3F5D3D70` | `07EBA7AE` | `sendto(fd, buf, len, flags, to, tolen)` -> n | **verified live** (28-byte RRQ) |
| `recvfrom` | `3F5D7D50` | `07EBAFAA` | `recvfrom(fd, buf, len, flags, &from, &fromlen)` -> n | **verified live** (516/92-byte DATA) |
| `read` | `3F5D8E70` | `07EBB1CE` | `read(fd, buf, len)` | the rdebug/X read wrapper named in the brief |
| `close` | `3F5E8930` | `07EBD126` | `close(fd)` | **verified live** |
| `setsockopt` | `3F5DD260` | `07EBBA4C` | `setsockopt(fd, level, name, val*, len)` | from the BOOTP/X callers |
| `select` (candidate) | `3F871CE0` | `07F0E39C` | `select(nfds, r, w, e, timeout)` | wrapper used by Xlib; not exercised |
| `malloc` | `3F701230` | `07EE0246` | `malloc(bytes)` -> **bit** pointer | **verified live** |
| `create_process` | `3F706A40` | `07EE0D48` | `create_process(entry,name,stack,1,arg)` | known from the GUI work |
`connect` was not needed and is not in this table: the fetch uses UDP
`sendto`/`recvfrom` only. The candidates in the same wrapper block
(`3F5CF8B0`, `3F5E43F0`) were not exercised, so no ABI is claimed for them.
`recvfrom`'s sixth argument is a **pointer to a `socklen_t`**, and the caller
must initialise it to 16 before the call. Its fifth argument is a pointer to
the source `sockaddr`. That is exactly how the firmware's own `tftp_read`
passes them (`&0x1CB8A0` / `&0x1CB920`).
---
## 2. Per-process requirements
* **rdebug process: works.** `socket`, `sendto` and `recvfrom` all return
normally from the process the `jump` handler runs in. The fd is process-local
(`socket` returned 1 in that process).
* **No network context or registration is needed.** The terminal already has
its address (BOOTP) and the stack is up; the calls are plain library calls.
* **`create_process` child:** one attempt (`dwt/tcpip/launcher.asm` +
`socktest.asm`) returned `-1` from `socket()` (`sfd=FFFFFFFF`) even though the
PCB was valid (`pcb=003FFBD0`) and the child had started (`stage=2`). The
machine then went into the boot delay loop. That is **not** a clean child
result, but it is enough to say the working context here is the rdebug
process, not a child. Do not assume the X result (`create_process` is needed)
transfers to sockets; it did not in this test.
---
## 3. The firmware TFTP client (why it was not used)
The client is `dwt_tftp.c` compiled into ROM:
| function | bit address | Ghidra | ABI |
|---|---|---|---|
| `tftp_open` | `3F5EBC40` | `07EBD788` | `tftp_open(host, filename)` -> fd, or `-1` |
| `tftp_read` | `3F5ED230` | `07EBDA46` | `tftp_read(fd, buf, bufsize)` -> DATA payload length, `0` at EOF, `-1` error |
| `tftp_close` | `3F5EC860` | `07EBD90C` | `tftp_close(fd)` |
`tftp_open` does, in order: `socket(2,2,0)`, `memset` a 16-byte `sockaddr`,
`sa_family=2`, resolve the host (`3F5933D0`; on `-1` it retries through
`3F5B8580`), `htons(69)` into the port, build the RRQ in its static buffer
(`0x1C85A0`) with mode `octet`, and `sendto`. It returns the fd.
`tftp_read` receives into its own static buffer `0x1CB960` with length `0x204`,
checks opcode/block, copies `len-4` bytes to the caller's `buf`, ACKs, and sets
`@0x1CB940=1` when the block was shorter than 512. **Read until it returns 0**;
if the caller stops after a full 512-byte block, `tftp_close` sends TFTP ERROR 3
("Disk full or allocation exceeded") — the behaviour documented in
`harness/mame/FONT_STORAGE_REPORT.md`.
**Why it is unusable:** calling `tftp_open("192.168.99.1","…")` from the rdebug
process never returns and produces no RRQ. `socket()` alone works (proved with
`socktest.asm`: fd 1), so the hang is downstream; a direct call to the resolver
`3F5933D0` also wedged the service and the machine fell into the boot delay
loop. The exact resolver failure was not reduced further, because the socket
API is sufficient and the fallback is legitimate. **Do not call `tftp_open`
from a payload on this image.**
---
## 4. The working fetch
Payload: `dwt/tcpip/tftpc.asm`, built by `dwt/tcpip/build.sh` to
`dwt/tcpip/build/tftpc.bin` (694 bytes, linked at bit `01870000`).
It is a minimal RFC 783 client:
1. `buf = malloc(0x10000)`; keep the returned **bit** pointer in `a11`.
2. `fd = socket(2,2,0)`; keep it in `a9`.
3. `sendto(fd, RRQ, 28, 0, &server, 16)`, where the RRQ is
`dwt/tcpip/probe.bin` in `octet` mode and `server` is
`{AF_INET, htons(69), 192.168.99.1}`.
4. `recvfrom(fd, recv, 2048, 0, &from, &fromlen)`; accept only opcode 3
(`00 03` on the wire, read as the 16-bit word `0x0300`).
5. Copy `len-4` payload bytes to `buf`, send ACK `00 04 <block>` to the
`from` address returned by `recvfrom`, advance `buf` by `(len-4)*8` **bits**.
6. Repeat while the block was full (512); a short block ends the transfer.
`close(fd)`.
Evidence:
```
# server (dwt/tcpip/serve_probe.py, fresh log)
15:23:48 RRQ 192.168.99.2:1025 requested 'dwt/tcpip/probe.bin' (600 bytes)
# MAME-side markers (probe.lua)
TCPC cstage=00000004 cfd=00000001 cbuf=00B5BCD0 ctotal=00000258 \
clast=0000005C cblock=00000200 cdone=05A5A5A5
# rdebug peek + byte comparison (dwt/tcpip/verify.py)
stage=4 fd=1 buf=0x0095bbd0 total=600 last=92 block=0x0200 done=0x05a5a5a5
OK: 600 bytes at 0x0095bbd0 match dwt/tcpip/probe.bin
sha256=9662e62b45802984e5eef9c7410ad7482645eb5ff77805f0406d248e35333359
$ cmp dwt/tcpip/run/fetched.bin dwt/tcpip/probe.bin
(no output = identical)
```
`ctotal` counts the 512-byte block 1 plus the 88-byte block 2; `clast=0x5C`
is the 92-byte DATA packet (88 + 4-byte header); `cblock=0x0200` is the wire
word for block 2 (bytes `00 02`).
The payload returns 0, so the same rdebug connection and later connections are
still live. No breakpoints, no ROM patch, no `create_process`.
### The two bugs that cost the debugging cycles
1. **Pointers are bit addresses.** After copying `n` bytes, the destination
cursor must advance by `n*8`. Adding `n` puts block 2 at `dest+64` for a
512-byte block, which looks like a copy corruption.
2. **The receive buffer and the `from` sockaddr must not overlap.** A bit
offset of `0x800` is 256 bytes, not 2048: with the receive buffer at
`0187B000`, `from=0187B800` sat 256 bytes into the 2048-byte buffer and the
stack's `from` write corrupted the payload at offset 252. The working layout
is recv `01876000` (2048 bytes), `from` `0187A000`, `fromlen` `0187A080`,
ACK `0187A100`.
---
## 5. What a loader must do to fetch a COFF at runtime
1. Deliver a small bootstrap with rdebug `poke` + `jump` (or `create_process` if
a child is needed for the loader itself).
2. In the rdebug process: `malloc(size)` for the COFF, then `socket(2,2,0)`,
`sendto` an RRQ for the COFF name, and the `recvfrom`/ACK loop from
`tftpc.asm`. Use a receive buffer of at least 2048 bytes, separate from the
`from`/`fromlen`/ACK cells.
3. Append blocks at `dest + total*8` bits, not `dest + total`.
4. Stop on a short block; `close(fd)`. No timeout is built in — the server is
local and the payload blocks in `recvfrom`. Add `setsockopt(SO_RCVTIMEO)` or
a retry if a lossy link matters.
5. Hand the buffer to the loader resident at bit `01880000`
(`dwt/loader/build/loader.bin`, 1220 B): write the descriptor at
`01882C00` — `u16 0x4C44, u16 0x5231, u32 buf, u32 len_bytes, u32 mode=1` —
then `move a14,-*sp,1; calla 01880000h` with `A8=0` (fixed descriptor) or
the descriptor's bit address. The loader parses the COFF, copies
`.text`/`.data`, zeroes `.bss` and calls `create_process` itself. The full
contract, including the status block at `01882D00`, is in
`dwt/notes/LOADER_CROSS.md`.
6. Keep the COFF buffer alive; it is not reused by the fetch after the payload
returns. The transport's code (`01870000`), argument area (`01875000`),
receive buffer (`01876000`–`0187A000`), `from`/`fromlen`/ACK cells
(`0187A000`–`0187A120`) and markers (`0187C000`) are all below the loader
page, so they do not collide with `01880000`–`01883200`.
The fetch call itself is only `malloc`/`socket`/`sendto`/`recvfrom`/`close`;
the firmware `tftp_open` must not be used.
---
## 6. Limits and files
* **Buffer:** the test allocates 64 KiB; the proof file is 600 bytes. The
receive buffer is 2048 bytes and the server's block size is 512, so the
largest single DATA packet is 516 bytes. A COFF over TFTP is limited only by
the malloc block and the 16-bit block counter (32 MiB at 512-byte blocks).
* **Timeouts:** none in the payload; `recvfrom` blocks until a packet arrives.
The server side has 10 retries at 60 s. A lost packet hangs the `jump`.
* **Concurrency:** the server is single-threaded. An un-ACKed transfer (the
first `udptest` left one) blocks later RRQs until it times out; restart the
server or use a per-transfer server.
* **Process:** rdebug process. A `create_process` child returned `-1` from
`socket()` in the one attempt; if the loader is a child, prove `socket()`
first.
| path | contents |
|---|---|
| `dwt/tcpip/tftpc.asm` | the working minimal TFTP client (694 B, bit `01870000`) |
| `dwt/tcpip/build/tftpc.bin`, `.lst`, `.map` | built payload and assembler/link records |
| `dwt/tcpip/tfetch.asm` | firmware-`tftp_open` attempt (hangs; kept as the negative result) |
| `dwt/tcpip/socktest.asm`, `restest.asm`, `udptest.asm` | the isolation steps: socket, resolver, sendto |
| `dwt/tcpip/launcher.asm` | `create_process` launcher used for the child attempt |
| `dwt/tcpip/copytest.asm` | isolated byte-copy loop |
| `dwt/tcpip/serve_probe.py` | TFTP server for `probe.bin` + BOOTP (imports `harness/serve.py`) |
| `dwt/tcpip/probe.bin` | 600-byte distinctive probe file |
| `dwt/tcpip/verify.py` | rdebug peek + byte-for-byte comparison |
| `dwt/tcpip/probe.lua` | MAME-side marker/PC sampler and buffer check |
| `dwt/tcpip/run/server_final.log` | the final RRQ line |
| `dwt/tcpip/run/mame_final.log` | final `TCPC` marker line (`ctotal=0x258`) |
| `dwt/tcpip/run/final2_verify.log`, `fetched.bin` | peek comparison and the 600 fetched bytes |
| `dwt/tcpip/run/inject_tftpc.log`, `inject_res.log`, `inject_child_sock.log` | negative results: `tftp_open`, resolver, child `socket()` |
| `dwt/notes/LOADER_CROSS.md` | the loader/transport contract (loader at `01880000`, descriptor at `01882C00`) |
+7
View File
@@ -0,0 +1,7 @@
# SDK scratch (GSPA/GSPLNK tools and intermediate files)
work/
__pycache__/
# MAME runtime state, recreated per run
run/cfg/
run/nvram/
+70
View File
@@ -0,0 +1,70 @@
#!/bin/sh
# Build a VT1200 payload with the 1987 TI TMS34010 SDK (GSPA/GSPLNK under
# DOSBox). Same flow as dwt/gui/build.sh, but all work/output stays under
# dwt/tcpip/.
#
# dwt/tcpip/build.sh SOURCE.asm [ORIGIN_BITS]
#
# Output: dwt/tcpip/build/<name>.bin, .map, .lst
set -eu
ROOT=$(cd "$(dirname "$0")/../.." && pwd)
DIR=$(cd "$(dirname "$0")" && pwd)
SRC=${1:?usage: build.sh SOURCE.asm [ORIGIN_BITS]}
ORIGIN=${2:-01870000}
NAME=$(basename "$SRC" .asm)
BASE=$(printf '%s' "$NAME" | tr 'a-z' 'A-Z')
WORK="$DIR/work"
OUT="$DIR/build"
IMG="$ROOT/tools/tms34010-sdk/1987-05 TMS34010 SDK/1987-11-06 TMS34010 Simulator-C Tools-ASM Tools.img"
DOSBOX_CONF="$ROOT/harness/sdk-scratch/dosbox-bench.conf"
mkdir -p "$WORK" "$OUT"
if [ ! -x "$WORK/GSPA.EXE" ]; then
mcopy -s -n -i "$IMG" "::/A2/*" "$WORK/"
mcopy -s -n -i "$IMG" "::/C2/*" "$WORK/"
fi
cp "$SRC" "$WORK/$BASE.ASM"
case "$ORIGIN" in
[0-9]*) ;;
*) ORIGIN="0$ORIGIN" ;;
esac
printf '%s\n' \
'-a' \
"-o $BASE.out" \
"-m $BASE.map" \
"$BASE.obj" \
'SECTIONS' \
'{' \
" .text ${ORIGIN}h: {}" \
'}' > "$WORK/$BASE.CMD"
sed -i 's/$/\r/' "$WORK/$BASE.CMD"
rm -f "$WORK/$BASE.OBJ" "$WORK/$BASE.OUT" "$WORK/$BASE.LST" \
"$WORK/$BASE.MAP" "$WORK/$BASE.HI" "$WORK/$BASE.LO"
SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy \
timeout 180 dosbox -conf "$DOSBOX_CONF" -noprimaryconf -nolocalconf \
-c "mount c $WORK" -c "c:" \
-c "gspa $BASE $BASE.obj $BASE.lst -l" \
-c "gsplnk $BASE.cmd" \
-c "exit" -exit >/dev/null 2>&1
if [ ! -f "$WORK/$BASE.OUT" ]; then
echo "build.sh: GSPLNK produced no $BASE.OUT" >&2
exit 1
fi
if grep -q '\*\*\*\*\*' "$WORK/$BASE.LST" 2>/dev/null; then
echo "build.sh: assembler diagnostics:" >&2
grep -n '\*\*\*\*\*' "$WORK/$BASE.LST" >&2
exit 1
fi
python3 "$ROOT/harness/hello-world/cofextract.py" "$WORK/$BASE.OUT" "$OUT/$NAME.bin"
sed 's/\r$//' "$WORK/$BASE.MAP" > "$OUT/$NAME.map"
cp "$WORK/$BASE.LST" "$OUT/$NAME.lst"
echo "build.sh: $OUT/$NAME.bin ($(wc -c < "$OUT/$NAME.bin") bytes) at bit $ORIGIN"
Binary file not shown.
+218
View File
@@ -0,0 +1,218 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:19:40 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; copytest.asm -- isolate the byte-copy loop used by tf
0002 ;
0003 ; malloc(01000h), then copy 256 bytes from SRC (values
0004 ; dint/movb/addk/dsjs/eint loop. A peek of the destina
0005 ;
0006 ; 0187A800 stage (1 entered, 2 copied)
0007 ; 0187A820 destination pointer
0008 ; 0187A840 entry SP
0009 ; 0187A860 entry A14
0010
0011 00000000 .text
0012 00000000 _start:
0013 00000000 0550 setf 16, 0, 0
0014 00000010 0740 setf 32, 0, 1
0015 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0016 00000040 078F move sp, @0187A840h, 1
00000050 0187A840
0017 00000070 078E move a14, @0187A860h, 1
00000080 0187A860
0018 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0019 000000D0 0780 move a0, @0187A800h, 1
000000E0 0187A800
0020
0021 00000100 A3CF move a14, -*sp, 1
0022 00000110 09EE movi 0187B800h, a14, L
00000120 0187B800
0023 00000140 09E0 movi 01000h, a0, L
00000150 00001000
0024 00000170 920E move a0, *a14+, 1
0025 00000180 0D5F calla 3F701230h
00000190 3F701230
0026 000001B0 07AF move @0187A840h, sp, 1
000001C0 0187A840
0027 000001E0 07AE move @0187A860h, a14, 1
000001F0 0187A860
0028 00000210 0550 setf 16, 0, 0
0029 00000220 0740 setf 32, 0, 1
0030 00000230 0788 move a8, @0187A820h, 1
00000240 0187A820
0031 00000260 4D06 move a8, a6
0032
0033 00000270 0360 dint
0034 00000280 09E5 movi SRC, a5, L
00000290 00000400'
0035 000002B0 09E2 movi 256, a2, L
000002C0 00000100
0036 000002E0 copy_bytes:
0037 000002E0 8EA0 movb *a5, a0
0038 000002F0 8C06 movb a0, *a6
0039 00000300 1105 addk 8, a5
0040 00000310 1106 addk 8, a6
0041 00000320 3CA2 dsjs a2, copy_bytes
0042 00000330 0D60 eint
0043
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:19:40 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
0044 00000340 09E0 movi 2, a0, L
00000350 00000002
0045 00000370 0780 move a0, @0187A800h, 1
00000380 0187A800
0046 000003A0 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
000003B0 00FF
0047 000003C0 09E8 movi 0, a8, L
000003D0 00000000
0048 000003F0 0960 rets
0049
0050 00000400 SRC:
0051 00000400 0100 .word 00100h
0052 00000410 0302 .word 00302h
0053 00000420 0504 .word 00504h
0054 00000430 0706 .word 00706h
0055 00000440 0908 .word 00908h
0056 00000450 0B0A .word 00B0Ah
0057 00000460 0D0C .word 00D0Ch
0058 00000470 0F0E .word 00F0Eh
0059 00000480 1110 .word 01110h
0060 00000490 1312 .word 01312h
0061 000004A0 1514 .word 01514h
0062 000004B0 1716 .word 01716h
0063 000004C0 1918 .word 01918h
0064 000004D0 1B1A .word 01B1Ah
0065 000004E0 1D1C .word 01D1Ch
0066 000004F0 1F1E .word 01F1Eh
0067 00000500 2120 .word 02120h
0068 00000510 2322 .word 02322h
0069 00000520 2524 .word 02524h
0070 00000530 2726 .word 02726h
0071 00000540 2928 .word 02928h
0072 00000550 2B2A .word 02B2Ah
0073 00000560 2D2C .word 02D2Ch
0074 00000570 2F2E .word 02F2Eh
0075 00000580 3130 .word 03130h
0076 00000590 3332 .word 03332h
0077 000005A0 3534 .word 03534h
0078 000005B0 3736 .word 03736h
0079 000005C0 3938 .word 03938h
0080 000005D0 3B3A .word 03B3Ah
0081 000005E0 3D3C .word 03D3Ch
0082 000005F0 3F3E .word 03F3Eh
0083 00000600 4140 .word 04140h
0084 00000610 4342 .word 04342h
0085 00000620 4544 .word 04544h
0086 00000630 4746 .word 04746h
0087 00000640 4948 .word 04948h
0088 00000650 4B4A .word 04B4Ah
0089 00000660 4D4C .word 04D4Ch
0090 00000670 4F4E .word 04F4Eh
0091 00000680 5150 .word 05150h
0092 00000690 5352 .word 05352h
0093 000006A0 5554 .word 05554h
0094 000006B0 5756 .word 05756h
0095 000006C0 5958 .word 05958h
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:19:40 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 3
0096 000006D0 5B5A .word 05B5Ah
0097 000006E0 5D5C .word 05D5Ch
0098 000006F0 5F5E .word 05F5Eh
0099 00000700 6160 .word 06160h
0100 00000710 6362 .word 06362h
0101 00000720 6564 .word 06564h
0102 00000730 6766 .word 06766h
0103 00000740 6968 .word 06968h
0104 00000750 6B6A .word 06B6Ah
0105 00000760 6D6C .word 06D6Ch
0106 00000770 6F6E .word 06F6Eh
0107 00000780 7170 .word 07170h
0108 00000790 7372 .word 07372h
0109 000007A0 7574 .word 07574h
0110 000007B0 7776 .word 07776h
0111 000007C0 7978 .word 07978h
0112 000007D0 7B7A .word 07B7Ah
0113 000007E0 7D7C .word 07D7Ch
0114 000007F0 7F7E .word 07F7Eh
0115 00000800 8180 .word 08180h
0116 00000810 8382 .word 08382h
0117 00000820 8584 .word 08584h
0118 00000830 8786 .word 08786h
0119 00000840 8988 .word 08988h
0120 00000850 8B8A .word 08B8Ah
0121 00000860 8D8C .word 08D8Ch
0122 00000870 8F8E .word 08F8Eh
0123 00000880 9190 .word 09190h
0124 00000890 9392 .word 09392h
0125 000008A0 9594 .word 09594h
0126 000008B0 9796 .word 09796h
0127 000008C0 9998 .word 09998h
0128 000008D0 9B9A .word 09B9Ah
0129 000008E0 9D9C .word 09D9Ch
0130 000008F0 9F9E .word 09F9Eh
0131 00000900 A1A0 .word 0A1A0h
0132 00000910 A3A2 .word 0A3A2h
0133 00000920 A5A4 .word 0A5A4h
0134 00000930 A7A6 .word 0A7A6h
0135 00000940 A9A8 .word 0A9A8h
0136 00000950 ABAA .word 0ABAAh
0137 00000960 ADAC .word 0ADACh
0138 00000970 AFAE .word 0AFAEh
0139 00000980 B1B0 .word 0B1B0h
0140 00000990 B3B2 .word 0B3B2h
0141 000009A0 B5B4 .word 0B5B4h
0142 000009B0 B7B6 .word 0B7B6h
0143 000009C0 B9B8 .word 0B9B8h
0144 000009D0 BBBA .word 0BBBAh
0145 000009E0 BDBC .word 0BDBCh
0146 000009F0 BFBE .word 0BFBEh
0147 00000A00 C1C0 .word 0C1C0h
0148 00000A10 C3C2 .word 0C3C2h
0149 00000A20 C5C4 .word 0C5C4h
0150 00000A30 C7C6 .word 0C7C6h
0151 00000A40 C9C8 .word 0C9C8h
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:19:40 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 4
0152 00000A50 CBCA .word 0CBCAh
0153 00000A60 CDCC .word 0CDCCh
0154 00000A70 CFCE .word 0CFCEh
0155 00000A80 D1D0 .word 0D1D0h
0156 00000A90 D3D2 .word 0D3D2h
0157 00000AA0 D5D4 .word 0D5D4h
0158 00000AB0 D7D6 .word 0D7D6h
0159 00000AC0 D9D8 .word 0D9D8h
0160 00000AD0 DBDA .word 0DBDAh
0161 00000AE0 DDDC .word 0DDDCh
0162 00000AF0 DFDE .word 0DFDEh
0163 00000B00 E1E0 .word 0E1E0h
0164 00000B10 E3E2 .word 0E3E2h
0165 00000B20 E5E4 .word 0E5E4h
0166 00000B30 E7E6 .word 0E7E6h
0167 00000B40 E9E8 .word 0E9E8h
0168 00000B50 EBEA .word 0EBEAh
0169 00000B60 EDEC .word 0EDECh
0170 00000B70 EFEE .word 0EFEEh
0171 00000B80 F1F0 .word 0F1F0h
0172 00000B90 F3F2 .word 0F3F2h
0173 00000BA0 F5F4 .word 0F5F4h
0174 00000BB0 F7F6 .word 0F7F6h
0175 00000BC0 F9F8 .word 0F9F8h
0176 00000BD0 FBFA .word 0FBFAh
0177 00000BE0 FDFC .word 0FDFCh
0178 00000BF0 FFFE .word 0FFFEh
0179 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:19:40 2026
OUTPUT FILE NAME: <COPYTEST.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01878000 00000C00
01878000 00000C00 COPYTEST.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01878000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01878000 .text
01878C00 etext 01878C00 etext
[6 symbols]
Binary file not shown.
+86
View File
@@ -0,0 +1,86 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:13:38 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; launcher.asm -- run tfetch.bin as a first-class proce
0002 ;
0003 ; The rdebug `jump` runs in the "remote debug" process.
0004 ; (dwt/notes/GUI_APPS.md section 10) showed that a serv
0005 ; from that context is accepted but never completed; a
0006 ; works. This launcher is the same shape as dwt/gui/xl
0007 ;
0008 ; create_process(entry, name, stack_size, 1, arg)
0009 ;
0010 ; create_process = bit 3F706A40h (Ghidra 07EE0D48)
0011 ;
0012 ; The child runs tfetch.bin, linked at bit 01870000h.
0013 ;
0014 ; Evidence cells (32-bit, bit addresses):
0015 ; 01872500 stage (1 entered, 2 create_process return
0016 ; 01872520 PCB returned by create_process (0 = failu
0017 ; 01872540 entry-point argument (poked by the host,
0018
0019 00000000 .text
0020 00000000 _start:
0021 00000000 0550 setf 16, 0, 0
0022 00000010 0740 setf 32, 0, 1
0023 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0024 00000040 078F move sp, @01872700h, 1 ; entry SP
00000050 01872700
0025 00000070 078E move a14, @01872720h, 1 ; entry A14
00000080 01872720
0026
0027 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0028 000000D0 0780 move a0, @01872500h, 1
000000E0 01872500
0029
0030 00000100 A3CF move a14, -*sp, 1
0031 00000110 09EE movi 01872800h, a14, L ; argument area
00000120 01872800
0032 00000140 09E0 movi 0, a0, L
00000150 00000000
0033 00000170 920E move a0, *a14+, 1 ; arg4 = 0
0034 00000180 09E0 movi 1, a0, L
00000190 00000001
0035 000001B0 920E move a0, *a14+, 1 ; arg3 = 1
0036 000001C0 09E0 movi 04000h, a0, L ; 16 KiB stack
000001D0 00004000
0037 000001F0 920E move a0, *a14+, 1 ; arg2 = stack size
0038 00000200 09E0 movi 3F30DC00h, a0, L ; ROM "0::0", any short name
00000210 3F30DC00
0039 00000230 920E move a0, *a14+, 1 ; arg1 = name
0040 00000240 07A0 move @01872540h, a0, 1 ; arg0 = entry, poked at run ti
00000250 01872540
0041 00000270 920E move a0, *a14+, 1 ; (little-endian bit address)
0042 00000280 0D5F calla 3F706A40h ; create_process
00000290 3F706A40
0043 000002B0 07AF move @01872700h, sp, 1
000002C0 01872700
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:13:38 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
0044 000002E0 07AE move @01872720h, a14, 1
000002F0 01872720
0045 00000310 0550 setf 16, 0, 0
0046 00000320 0740 setf 32, 0, 1
0047
0048 00000330 0788 move a8, @01872520h, 1 ; PCB marker
00000340 01872520
0049 00000360 09E0 movi 2, a0, L
00000370 00000002
0050 00000390 0780 move a0, @01872500h, 1 ; stage = 2
000003A0 01872500
0051
0052 000003C0 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
000003D0 00FF
0053 000003E0 09E8 movi 0, a8, L
000003F0 00000000
0054 00000410 0960 rets
0055 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:13:38 2026
OUTPUT FILE NAME: <LAUNCHER.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01872000 00000420
01872000 00000420 LAUNCHER.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01872000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01872000 .text
01872420 etext 01872420 etext
[6 symbols]
Binary file not shown.
+105
View File
@@ -0,0 +1,105 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:12:36 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; restest.asm -- socket() then the resolver tftp_open u
0002 ;
0003 ; socket = 3F5C9A00h socket(2,2,0) -> fd
0004 ; resolve = 3F5933D0h resolve("192.168.99.1") -> -
0005 ;
0006 ; Evidence cells (32-bit, bit addresses):
0007 ; 01875800 stage (1 entered, 2 socket returned, 3 re
0008 ; 01875820 socket() fd
0009 ; 01875840 resolver return
0010 ; 01875A00 entry SP
0011 ; 01875A20 entry A14
0012
0013 00000000 .text
0014 00000000 _start:
0015 00000000 0550 setf 16, 0, 0
0016 00000010 0740 setf 32, 0, 1
0017 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0018 00000040 078F move sp, @01875A00h, 1
00000050 01875A00
0019 00000070 078E move a14, @01875A20h, 1
00000080 01875A20
0020
0021 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0022 000000D0 0780 move a0, @01875800h, 1
000000E0 01875800
0023
0024 ; socket(2,2,0)
0025 00000100 09EE movi 01875900h, a14, L
00000110 01875900
0026 00000130 09E0 movi 0, a0, L
00000140 00000000
0027 00000160 920E move a0, *a14+, 1
0028 00000170 09E0 movi 2, a0, L
00000180 00000002
0029 000001A0 920E move a0, *a14+, 1
0030 000001B0 09E0 movi 2, a0, L
000001C0 00000002
0031 000001E0 920E move a0, *a14+, 1
0032 000001F0 0D5F calla 3F5C9A00h
00000200 3F5C9A00
0033 00000220 07AF move @01875A00h, sp, 1
00000230 01875A00
0034 00000250 07AE move @01875A20h, a14, 1
00000260 01875A20
0035 00000280 0550 setf 16, 0, 0
0036 00000290 0740 setf 32, 0, 1
0037 000002A0 0788 move a8, @01875820h, 1 ; fd
000002B0 01875820
0038 000002D0 4D09 move a8, a9
0039
0040 000002E0 09E0 movi 2, a0, L
000002F0 00000002
0041 00000310 0780 move a0, @01875800h, 1
00000320 01875800
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:12:36 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
0042
0043 ; resolve("192.168.99.1")
0044 00000340 09EE movi 01875900h, a14, L
00000350 01875900
0045 00000370 09E0 movi HOST, a0, L
00000380 00000550'
0046 000003A0 920E move a0, *a14+, 1
0047 000003B0 0D5F calla 3F5933D0h
000003C0 3F5933D0
0048 000003E0 07AF move @01875A00h, sp, 1
000003F0 01875A00
0049 00000410 07AE move @01875A20h, a14, 1
00000420 01875A20
0050 00000440 0550 setf 16, 0, 0
0051 00000450 0740 setf 32, 0, 1
0052 00000460 0788 move a8, @01875840h, 1
00000470 01875840
0053
0054 00000490 09E0 movi 3, a0, L
000004A0 00000003
0055 000004C0 0780 move a0, @01875800h, 1
000004D0 01875800
0056 000004F0 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000500 00FF
0057 00000510 09E8 movi 0, a8, L
00000520 00000000
0058 00000540 0960 rets
0059
0060 00000550 HOST:
0061 00000550 3931 .word 03931h
0062 00000560 2E32 .word 02E32h
0063 00000570 3631 .word 03631h
0064 00000580 2E38 .word 02E38h
0065 00000590 3939 .word 03939h
0066 000005A0 312E .word 0312Eh
0067 000005B0 0000 .word 00000h
0068 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:12:36 2026
OUTPUT FILE NAME: <RESTEST.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01875000 000005C0
01875000 000005C0 RESTEST.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01875000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01875000 .text
018755C0 etext 018755C0 etext
[6 symbols]
Binary file not shown.
+75
View File
@@ -0,0 +1,75 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:12:14 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; socktest.asm -- call the firmware's socket() wrapper
0002 ;
0003 ; Isolates the first call tftp_open makes. Run with rd
0004 ; remote-debug process (or from a create_process child)
0005 ; socket API is usable in that context.
0006 ;
0007 ; socket = bit 3F5C9A00h (Ghidra 07EB9340)
0008 ; socket(domain, type, protocol) = socket(2, 2, 0)
0009 ;
0010 ; Evidence cells (32-bit, bit addresses):
0011 ; 01874000 stage (1 entered, 2 socket returned)
0012 ; 01874020 socket() return (fd, or a negative errno)
0013 ; 01874200 entry SP
0014 ; 01874220 entry A14
0015
0016 00000000 .text
0017 00000000 _start:
0018 00000000 0550 setf 16, 0, 0
0019 00000010 0740 setf 32, 0, 1
0020 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0021 00000040 078F move sp, @01874200h, 1
00000050 01874200
0022 00000070 078E move a14, @01874220h, 1
00000080 01874220
0023
0024 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0025 000000D0 0780 move a0, @01874000h, 1
000000E0 01874000
0026
0027 00000100 09EE movi 01873800h, a14, L
00000110 01873800
0028 00000130 09E0 movi 0, a0, L
00000140 00000000
0029 00000160 920E move a0, *a14+, 1 ; arg2 = protocol
0030 00000170 09E0 movi 2, a0, L
00000180 00000002
0031 000001A0 920E move a0, *a14+, 1 ; arg1 = SOCK_DGRAM
0032 000001B0 09E0 movi 2, a0, L
000001C0 00000002
0033 000001E0 920E move a0, *a14+, 1 ; arg0 = AF_INET
0034 000001F0 0D5F calla 3F5C9A00h ; socket
00000200 3F5C9A00
0035 00000220 07AF move @01874200h, sp, 1
00000230 01874200
0036 00000250 07AE move @01874220h, a14, 1
00000260 01874220
0037 00000280 0550 setf 16, 0, 0
0038 00000290 0740 setf 32, 0, 1
0039 000002A0 0788 move a8, @01874020h, 1
000002B0 01874020
0040
0041 000002D0 09E0 movi 2, a0, L
000002E0 00000002
0042 00000300 0780 move a0, @01874000h, 1
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:12:14 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
00000310 01874000
0043 00000330 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000340 00FF
0044 00000350 09E8 movi 0, a8, L
00000360 00000000
0045 00000380 0960 rets
0046 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:12:14 2026
OUTPUT FILE NAME: <SOCKTEST.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01873000 00000390
01873000 00000390 SOCKTEST.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01873000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01873000 .text
01873390 etext 01873390 etext
[6 symbols]
Binary file not shown.
+218
View File
@@ -0,0 +1,218 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:10:29 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; tftp_fetch.asm -- fetch a file over TFTP into a mallo
0002 ; firmware's own client (dwt_tftp.c in ROM).
0003 ;
0004 ; Linked at bit 01870000h (byte 0x30E000) and executed
0005 ; call. The payload follows the firmware's stack-argum
0006 ;
0007 ; MOVE A14,-*SP,1 ; reserve the slo
0008 ; MOVE argN,*A14+,1 ; last argument f
0009 ; MOVE arg0,*A14+,1 ; first argument
0010 ; CALLA target
0011 ;
0012 ; We point A14 at a fixed argument area and restore SP/
0013 ; entry values after every call, so a payload bug canno
0014 ; stack. a9 and a11 are callee-saved by tftp_open/tftp
0015 ; hold the fd and the current write pointer across call
0016 ;
0017 ; Firmware entry points (bit addresses; Ghidra = bit >>
0018 ; malloc 3F701230h (Ghidra 07EE0246) malloc(by
0019 ; tftp_open 3F5EBC40h (Ghidra 07EBD788) tftp_open
0020 ; tftp_read 3F5ED230h (Ghidra 07EBDA46) tftp_read
0021 ; tftp_close 3F5EC860h (Ghidra 07EBD90C) tftp_clos
0022 ;
0023 ; tftp_read returns the DATA payload length, and 0 once
0024 ; has been consumed. tftp_close sends TFTP ERROR 3 if
0025 ; a full 512 bytes, so the loop must read until it gets
0026 ;
0027 ; Evidence cells (32-bit, bit addresses; peeked over rd
0028 ; 01871000 stage (1 malloc, 2 open, 3 reading, 4 cl
0029 ; 01871020 fd
0030 ; 01871040 buffer pointer (returned by malloc; a BIT
0031 ; 01871060 total bytes fetched
0032 ; 01871080 last tftp_read return
0033 ; 018710A0 marker: 05A5A5A5h when the fetch complete
0034 ; 018710C0 tftp_close return scratch
0035 ; 01871200 entry SP
0036 ; 01871220 entry A14
0037 ;
0038 ; The fetched bytes are at [01871040] and are compared
0039 ; The marker cells are deliberately above 01870AD0 (the
0040 ; writing them into the code was the first, silent fail
0041
0042 00000000 .text
0043 00000000 _start:
0044 00000000 0550 setf 16, 0, 0
0045 00000010 0740 setf 32, 0, 1
0046 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0047 00000040 078F move sp, @01871200h, 1 ; entry SP
00000050 01871200
0048 00000070 078E move a14, @01871220h, 1 ; entry A14
00000080 01871220
0049
0050 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0051 000000D0 0780 move a0, @01871000h, 1 ; stage = 1
000000E0 01871000
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:10:29 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
0052
0053 ; ---- buf = malloc(010000h) -------------------------
0054 00000100 A3CF move a14, -*sp, 1
0055 00000110 09EE movi 01878000h, a14, L ; argument area
00000120 01878000
0056 00000140 09E0 movi 010000h, a0, L ; 65536 bytes
00000150 00010000
0057 00000170 920E move a0, *a14+, 1
0058 00000180 0D5F calla 3F701230h ; malloc
00000190 3F701230
0059 000001B0 07AF move @01871200h, sp, 1
000001C0 01871200
0060 000001E0 07AE move @01871220h, a14, 1
000001F0 01871220
0061 00000210 0550 setf 16, 0, 0
0062 00000220 0740 setf 32, 0, 1
0063 00000230 0788 move a8, @01871040h, 1 ; buffer pointer (bit address)
00000240 01871040
0064 00000260 4D0B move a8, a11
0065 00000270 4D08 move a8, a8
0066 00000280 CA6A jreq fail
0067
0068 00000290 09E0 movi 2, a0, L
000002A0 00000002
0069 000002C0 0780 move a0, @01871000h, 1 ; stage = 2
000002D0 01871000
0070
0071 ; ---- fd = tftp_open("192.168.99.1", "dwt/tcpip/probe
0072 000002F0 09EE movi 01878000h, a14, L ; argument area
00000300 01878000
0073 00000320 09E0 movi FNAME, a0, L
00000330 00000A60'
0074 00000350 920E move a0, *a14+, 1 ; arg1 = filename
0075 00000360 09E0 movi HOST, a0, L
00000370 000009F0'
0076 00000390 920E move a0, *a14+, 1 ; arg0 = host
0077 000003A0 0D5F calla 3F5EBC40h ; tftp_open
000003B0 3F5EBC40
0078 000003D0 07AF move @01871200h, sp, 1
000003E0 01871200
0079 00000400 07AE move @01871220h, a14, 1
00000410 01871220
0080 00000430 0550 setf 16, 0, 0
0081 00000440 0740 setf 32, 0, 1
0082 00000450 0788 move a8, @01871020h, 1 ; fd
00000460 01871020
0083 00000480 4D09 move a8, a9
0084 00000490 4D08 move a8, a8
0085 000004A0 C448 jrlt fail
0086
0087 ; ---- while ((n = tftp_read(fd, p, 010000h)) > 0) p +
0088 000004B0 09E0 movi 3, a0, L
000004C0 00000003
0089 000004E0 0780 move a0, @01871000h, 1 ; stage = 3
000004F0 01871000
0090 00000510 read_loop:
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:10:29 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 3
0091 00000510 09EE movi 01878000h, a14, L
00000520 01878000
0092 00000540 09E0 movi 010000h, a0, L
00000550 00010000
0093 00000570 920E move a0, *a14+, 1 ; arg2 = bufsize
0094 00000580 936E move a11, *a14+, 1 ; arg1 = buffer
0095 00000590 932E move a9, *a14+, 1 ; arg0 = fd
0096 000005A0 0D5F calla 3F5ED230h ; tftp_read
000005B0 3F5ED230
0097 000005D0 07AF move @01871200h, sp, 1
000005E0 01871200
0098 00000600 07AE move @01871220h, a14, 1
00000610 01871220
0099 00000630 0550 setf 16, 0, 0
0100 00000640 0740 setf 32, 0, 1
0101 00000650 0788 move a8, @01871080h, 1 ; last return
00000660 01871080
0102 00000680 4D08 move a8, a8
0103 00000690 C609 jrle close_it
0104 000006A0 410B add a8, a11 ; advance the write pointer
0105 000006B0 07A1 move @01871060h, a1, 1
000006C0 01871060
0106 000006E0 4101 add a8, a1
0107 000006F0 0781 move a1, @01871060h, 1 ; total += n
00000700 01871060
0108 00000720 C0DE jruc read_loop
0109
0110 00000730 close_it:
0111 00000730 09E0 movi 4, a0, L
00000740 00000004
0112 00000760 0780 move a0, @01871000h, 1 ; stage = 4
00000770 01871000
0113 00000790 09EE movi 01878000h, a14, L
000007A0 01878000
0114 000007C0 932E move a9, *a14+, 1 ; arg0 = fd
0115 000007D0 0D5F calla 3F5EC860h ; tftp_close
000007E0 3F5EC860
0116 00000800 07AF move @01871200h, sp, 1
00000810 01871200
0117 00000830 07AE move @01871220h, a14, 1
00000840 01871220
0118 00000860 0550 setf 16, 0, 0
0119 00000870 0740 setf 32, 0, 1
0120 00000880 0788 move a8, @018710C0h, 1
00000890 018710C0
0121 000008B0 09E0 movi 05A5A5A5h, a0, L
000008C0 05A5A5A5
0122 000008E0 0780 move a0, @018710A0h, 1 ; DONE marker
000008F0 018710A0
0123 00000910 4508 sub a8, a8 ; return 0
0124 00000920 C009 jruc epilogue
0125
0126 00000930 fail:
0127 00000930 09E0 movi 0FFh, a0, L
00000940 000000FF
0128 00000960 0780 move a0, @01871000h, 1
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:10:29 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 4
00000970 01871000
0129 00000990 09E8 movi 0FFFFFFFFh, a8, L
000009A0 FFFFFFFF
0130 000009C0 epilogue:
0131 000009C0 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
000009D0 00FF
0132 000009E0 0960 rets
0133
0134 000009F0 HOST:
0135 000009F0 3931 .word 03931h ; "192.168.99.1"
0136 00000A00 2E32 .word 02E32h
0137 00000A10 3631 .word 03631h
0138 00000A20 2E38 .word 02E38h
0139 00000A30 3939 .word 03939h
0140 00000A40 312E .word 0312Eh
0141 00000A50 0000 .word 00000h
0142 00000A60 FNAME:
0143 00000A60 7764 .word 07764h ; "dwt/tcpip/probe.bin"
0144 00000A70 2F74 .word 02F74h
0145 00000A80 6374 .word 06374h
0146 00000A90 6970 .word 06970h
0147 00000AA0 2F70 .word 02F70h
0148 00000AB0 7270 .word 07270h
0149 00000AC0 626F .word 0626Fh
0150 00000AD0 2E65 .word 02E65h
0151 00000AE0 6962 .word 06962h
0152 00000AF0 006E .word 0006Eh
0153 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:10:29 2026
OUTPUT FILE NAME: <TFETCH.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01870000 00000B00
01870000 00000B00 TFETCH.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01870000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01870000 .text
01870B00 etext 01870B00 etext
[6 symbols]
Binary file not shown.
+382
View File
@@ -0,0 +1,382 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; tftpc.asm -- minimal TFTP read client built on the fi
0002 ;
0003 ; The firmware's own tftp_open() calls a resolver that
0004 ; called from the rdebug process (dwt/notes/TCPIP.md),
0005 ; RFC 783 directly: RRQ, DATA/ACK, 512-byte blocks, one
0006 ;
0007 ; socket = 3F5C9A00h socket(2,2,0) -> fd
0008 ; sendto = 3F5D3D70h sendto(fd, buf, len, flags, t
0009 ; recvfrom = 3F5D7D50h recvfrom(fd, buf, len, flags,
0010 ; close = 3F5E8930h close(fd)
0011 ; malloc = 3F701230h malloc(bytes) -> bit pointer
0012 ;
0013 ; The transfer is 600 bytes, so DATA 1 is 512 (full) an
0014 ; (short); the short block ends the transfer. ACKs go
0015 ; recvfrom reports, not to a hard-coded port.
0016 ;
0017 ; Evidence cells (32-bit, bit addresses):
0018 ; 0187C000 stage (1 malloc, 2 socket, 3 receiving, 4
0019 ; 0187C020 fd
0020 ; 0187C040 destination buffer (malloc)
0021 ; 0187C060 total bytes fetched
0022 ; 0187C080 last recvfrom length
0023 ; 0187C0A0 last DATA block word as read from the wir
0024 ; 0187C0C0 marker 05A5A5A5h when the fetch completed
0025 ; 0187C200 entry SP
0026 ; 0187C220 entry A14
0027 ;
0028 ; Scratch (fixed bit addresses, above this image):
0029 ; 01875000 argument area
0030 ; 01876000 receive buffer (2048 bytes)
0031 ; 0187A000 recvfrom source sockaddr
0032 ; 0187A080 recvfrom sockaddr length
0033 ; 0187A100 ACK packet (4 bytes)
0034
0035 00000000 .text
0036 00000000 _start:
0037 00000000 0550 setf 16, 0, 0
0038 00000010 0740 setf 32, 0, 1
0039 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0040 00000040 078F move sp, @0187C200h, 1
00000050 0187C200
0041 00000070 078E move a14, @0187C220h, 1
00000080 0187C220
0042
0043 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0044 000000D0 0780 move a0, @0187C000h, 1
000000E0 0187C000
0045
0046 ; ---- buf = malloc(010000h) -------------------------
0047 00000100 A3CF move a14, -*sp, 1
0048 00000110 09EE movi 01875000h, a14, L
00000120 01875000
0049 00000140 09E0 movi 010000h, a0, L
00000150 00010000
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
0050 00000170 920E move a0, *a14+, 1
0051 00000180 0D5F calla 3F701230h
00000190 3F701230
0052 000001B0 07AF move @0187C200h, sp, 1
000001C0 0187C200
0053 000001E0 07AE move @0187C220h, a14, 1
000001F0 0187C220
0054 00000210 0550 setf 16, 0, 0
0055 00000220 0740 setf 32, 0, 1
0056 00000230 0788 move a8, @0187C040h, 1
00000240 0187C040
0057 00000260 4D0B move a8, a11 ; dest cursor (callee-saved)
0058 00000270 4D08 move a8, a8
0059 00000280 CA00 jreq fail
00000290 010F
0060
0061 000002A0 09E0 movi 2, a0, L
000002B0 00000002
0062 000002D0 0780 move a0, @0187C000h, 1
000002E0 0187C000
0063
0064 ; ---- fd = socket(2,2,0) ----------------------------
0065 00000300 09EE movi 01875000h, a14, L
00000310 01875000
0066 00000330 09E0 movi 0, a0, L
00000340 00000000
0067 00000360 920E move a0, *a14+, 1
0068 00000370 09E0 movi 2, a0, L
00000380 00000002
0069 000003A0 920E move a0, *a14+, 1
0070 000003B0 09E0 movi 2, a0, L
000003C0 00000002
0071 000003E0 920E move a0, *a14+, 1
0072 000003F0 0D5F calla 3F5C9A00h
00000400 3F5C9A00
0073 00000420 07AF move @0187C200h, sp, 1
00000430 0187C200
0074 00000450 07AE move @0187C220h, a14, 1
00000460 0187C220
0075 00000480 0550 setf 16, 0, 0
0076 00000490 0740 setf 32, 0, 1
0077 000004A0 0788 move a8, @0187C020h, 1
000004B0 0187C020
0078 000004D0 4D09 move a8, a9 ; fd (callee-saved)
0079 000004E0 4D08 move a8, a8
0080 000004F0 C400 jrlt fail
00000500 00E8
0081
0082 ; ---- sendto(fd, RRQ, 28, 0, SADDR, 16) -------------
0083 00000510 09EE movi 01875000h, a14, L
00000520 01875000
0084 00000540 09E0 movi 16, a0, L
00000550 00000010
0085 00000570 920E move a0, *a14+, 1
0086 00000580 09E0 movi SADDR, a0, L
00000590 00001530'
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 3
0087 000005B0 920E move a0, *a14+, 1
0088 000005C0 09E0 movi 0, a0, L
000005D0 00000000
0089 000005F0 920E move a0, *a14+, 1
0090 00000600 09E0 movi 28, a0, L
00000610 0000001C
0091 00000630 920E move a0, *a14+, 1
0092 00000640 09E0 movi RRQ, a0, L
00000650 00001450'
0093 00000670 920E move a0, *a14+, 1
0094 00000680 932E move a9, *a14+, 1
0095 00000690 0D5F calla 3F5D3D70h
000006A0 3F5D3D70
0096 000006C0 07AF move @0187C200h, sp, 1
000006D0 0187C200
0097 000006F0 07AE move @0187C220h, a14, 1
00000700 0187C220
0098 00000720 0550 setf 16, 0, 0
0099 00000730 0740 setf 32, 0, 1
0100 00000740 4D08 move a8, a8
0101 00000750 C400 jrlt fail
00000760 00C2
0102
0103 00000770 09E0 movi 3, a0, L
00000780 00000003
0104 000007A0 0780 move a0, @0187C000h, 1
000007B0 0187C000
0105 000007D0 4400 sub a0, a0
0106 000007E0 0780 move a0, @0187C060h, 1 ; total = 0
000007F0 0187C060
0107
0108 00000810 recv_loop:
0109 ; ---- recvfrom(fd, BUF, 2048, 0, &FROM, &FROMLEN) ---
0110 ; arg5 is a POINTER to the socklen (as tftp_read passe
0111 ; value is initialised to 16 first.
0112 00000810 09E0 movi 16, a0, L
00000820 00000010
0113 00000840 0780 move a0, @0187A080h, 1 ; fromlen = 16
00000850 0187A080
0114 00000870 09EE movi 01875000h, a14, L
00000880 01875000
0115 000008A0 09E0 movi 0187A080h, a0, L
000008B0 0187A080
0116 000008D0 920E move a0, *a14+, 1 ; arg5 = &fromlen
0117 000008E0 09E0 movi 0187A000h, a0, L
000008F0 0187A000
0118 00000910 920E move a0, *a14+, 1 ; arg4 = &from
0119 00000920 09E0 movi 0, a0, L
00000930 00000000
0120 00000950 920E move a0, *a14+, 1 ; arg3 = flags
0121 00000960 09E0 movi 00800h, a0, L
00000970 00000800
0122 00000990 920E move a0, *a14+, 1 ; arg2 = 2048
0123 000009A0 09E0 movi 01876000h, a0, L
000009B0 01876000
0124 000009D0 920E move a0, *a14+, 1 ; arg1 = receive buffer
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 4
0125 000009E0 932E move a9, *a14+, 1 ; arg0 = fd
0126 000009F0 0D5F calla 3F5D7D50h
00000A00 3F5D7D50
0127 00000A20 07AF move @0187C200h, sp, 1
00000A30 0187C200
0128 00000A50 07AE move @0187C220h, a14, 1
00000A60 0187C220
0129 00000A80 0550 setf 16, 0, 0
0130 00000A90 0740 setf 32, 0, 1
0131
0132 00000AA0 0788 move a8, @0187C080h, 1 ; last length
00000AB0 0187C080
0133 00000AD0 4D08 move a8, a8
0134 00000AE0 C600 jrle fail
00000AF0 0089
0135
0136 ; opcode: wire 00 03 -> little-endian word 0300h
0137 00000B00 05A0 move @01876000h, a0, 0
00000B10 01876000
0138 00000B30 0B40 cmpi 0300h, a0
00000B40 FCFF
0139 00000B50 CB00 jrne fail ; only DATA is accepted
00000B60 0082
0140
0141 00000B70 05A4 move @01876010h, a4, 0 ; block number, wire order
00000B80 01876010
0142 00000BA0 0784 move a4, @0187C0A0h, 1
00000BB0 0187C0A0
0143
0144 00000BD0 4D03 move a8, a3
0145 00000BE0 1483 subk 4, a3 ; payload length
0146
0147 ; ---- total += payload, dest += payload -------------
0148 00000BF0 07A1 move @0187C060h, a1, 1
00000C00 0187C060
0149 00000C20 4061 add a3, a1
0150 00000C30 0781 move a1, @0187C060h, 1 ; total += payload (bytes)
00000C40 0187C060
0151 00000C60 4D66 move a11, a6 ; copy destination
0152 00000C70 4C62 move a3, a2
0153 00000C80 2462 sll 3, a2 ; bytes -> bits: pointers are bit addresse
0154 00000C90 404B add a2, a11 ; dest cursor advances now (do NOT add by
0155
0156 ; ---- copy payload from BUF+4 to a6, one byte at a ti
0157 ; Interrupts are disabled for the copy so a 512-byte c
0158 ; with respect to the firmware's ISRs.
0159 00000CA0 0360 dint
0160 00000CB0 09E5 movi 01876020h, a5, L
00000CC0 01876020
0161 00000CE0 4C62 move a3, a2
0162 00000CF0 0783 move a3, @0187C0E0h, 1 ; payload length
00000D00 0187C0E0
0163 00000D20 0782 move a2, @0187C140h, 1 ; copy count
00000D30 0187C140
0164 00000D50 0786 move a6, @0187C120h, 1 ; write start
00000D60 0187C120
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 5
0165 00000D80 078B move a11, @0187C100h, 1 ; cursor after advance
00000D90 0187C100
0166 00000DB0 0785 move a5, @0187C160h, 1 ; source
00000DC0 0187C160
0167 00000DE0 CA05 jreq copy_done
0168 00000DF0 copy_bytes:
0169 00000DF0 8EA0 movb *a5, a0
0170 00000E00 8C06 movb a0, *a6
0171 00000E10 1105 addk 8, a5 ; one byte
0172 00000E20 1106 addk 8, a6
0173 00000E30 3CA2 dsjs a2, copy_bytes
0174 00000E40 copy_done:
0175 00000E40 0D60 eint
0176
0177 ; ---- ACK: 00 04 <block as received> ----------------
0178 00000E50 09E0 movi 00400h, a0, L
00000E60 00000400
0179 00000E80 0580 move a0, @0187A100h, 0
00000E90 0187A100
0180 00000EB0 0584 move a4, @0187A110h, 0
00000EC0 0187A110
0181
0182 00000EE0 09EE movi 01875000h, a14, L
00000EF0 01875000
0183 00000F10 09E0 movi 16, a0, L
00000F20 00000010
0184 00000F40 920E move a0, *a14+, 1
0185 00000F50 09E0 movi 0187A000h, a0, L
00000F60 0187A000
0186 00000F80 920E move a0, *a14+, 1
0187 00000F90 09E0 movi 0, a0, L
00000FA0 00000000
0188 00000FC0 920E move a0, *a14+, 1
0189 00000FD0 09E0 movi 4, a0, L
00000FE0 00000004
0190 00001000 920E move a0, *a14+, 1
0191 00001010 09E0 movi 0187A100h, a0, L
00001020 0187A100
0192 00001040 920E move a0, *a14+, 1
0193 00001050 932E move a9, *a14+, 1
0194 00001060 0D5F calla 3F5D3D70h
00001070 3F5D3D70
0195 00001090 07AF move @0187C200h, sp, 1
000010A0 0187C200
0196 000010C0 07AE move @0187C220h, a14, 1
000010D0 0187C220
0197 000010F0 0550 setf 16, 0, 0
0198 00001100 0740 setf 32, 0, 1
0199 00001110 4D08 move a8, a8
0200 00001120 C426 jrlt fail
0201
0202 ; short block ends the transfer; full block means read
0203 00001130 07A2 move @0187C080h, a2, 1
00001140 0187C080
0204 00001160 1482 subk 4, a2
0205 00001170 0B42 cmpi 512, a2
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 6
00001180 FDFF
0206 00001190 C402 jrlt close_it
0207 000011A0 C000 jruc recv_loop
000011B0 FF65
0208
0209 000011C0 close_it:
0210 000011C0 09E0 movi 4, a0, L
000011D0 00000004
0211 000011F0 0780 move a0, @0187C000h, 1
00001200 0187C000
0212 00001220 09EE movi 01875000h, a14, L
00001230 01875000
0213 00001250 932E move a9, *a14+, 1
0214 00001260 0D5F calla 3F5E8930h ; close(fd)
00001270 3F5E8930
0215 00001290 07AF move @0187C200h, sp, 1
000012A0 0187C200
0216 000012C0 07AE move @0187C220h, a14, 1
000012D0 0187C220
0217 000012F0 0550 setf 16, 0, 0
0218 00001300 0740 setf 32, 0, 1
0219 00001310 09E0 movi 05A5A5A5h, a0, L
00001320 05A5A5A5
0220 00001340 0780 move a0, @0187C0C0h, 1
00001350 0187C0C0
0221 00001370 4508 sub a8, a8
0222 00001380 C009 jruc epilogue
0223
0224 00001390 fail:
0225 00001390 09E0 movi 0FFh, a0, L
000013A0 000000FF
0226 000013C0 0780 move a0, @0187C000h, 1
000013D0 0187C000
0227 000013F0 09E8 movi 0FFFFFFFFh, a8, L
00001400 FFFFFFFF
0228 00001420 epilogue:
0229 00001420 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
00001430 00FF
0230 00001440 0960 rets
0231
0232 00001450 RRQ:
0233 00001450 0100 .word 00100h ; opcode 1 (00 01)
0234 00001460 7764 .word 07764h ; "dw"
0235 00001470 2F74 .word 02F74h ; "t/"
0236 00001480 6374 .word 06374h ; "tc"
0237 00001490 6970 .word 06970h ; "pi"
0238 000014A0 2F70 .word 02F70h ; "p/"
0239 000014B0 7270 .word 07270h ; "pr"
0240 000014C0 626F .word 0626Fh ; "ob"
0241 000014D0 2E65 .word 02E65h ; "e."
0242 000014E0 6962 .word 06962h ; "bi"
0243 000014F0 006E .word 0006Eh ; "n\0"
0244 00001500 636F .word 0636Fh ; "oc"
0245 00001510 6574 .word 06574h ; "te"
0246 00001520 0074 .word 00074h ; "t\0"
0247 00001530 SADDR:
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:23:35 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 7
0248 00001530 0002 .word 00002h ; sin_family = AF_INET
0249 00001540 4500 .word 04500h ; sin_port = htons(69)
0250 00001550 A8C0 .word 0A8C0h ; 192.168
0251 00001560 0163 .word 00163h ; .99.1
0252 00001570 0000 .word 0
0253 00001580 0000 .word 0
0254 00001590 0000 .word 0
0255 000015A0 0000 .word 0
0256 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:23:35 2026
OUTPUT FILE NAME: <TFTPC.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01870000 000015B0
01870000 000015B0 TFTPC.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01870000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01870000 .text
018715B0 etext 018715B0 etext
[6 symbols]
Binary file not shown.
+142
View File
@@ -0,0 +1,142 @@
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:14:27 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 1
0001 ; udptest.asm -- socket() + sendto() a real TFTP RRQ.
0002 ;
0003 ; socket = 3F5C9A00h socket(2,2,0) -> fd
0004 ; sendto = 3F5D3D70h sendto(fd, buf, len, flags, to
0005 ;
0006 ; The RRQ is the packet the firmware itself would send
0007 ; "dwt/tcpip/probe.bin" in octet mode. A server log li
0008 ; proof that UDP transmit works from the calling proces
0009 ;
0010 ; Evidence cells (32-bit, bit addresses):
0011 ; 01876800 stage (1 entered, 2 sendto returned)
0012 ; 01876820 socket fd
0013 ; 01876840 sendto return
0014 ; 01876A00 entry SP
0015 ; 01876A20 entry A14
0016
0017 00000000 .text
0018 00000000 _start:
0019 00000000 0550 setf 16, 0, 0
0020 00000010 0740 setf 32, 0, 1
0021 00000020 098F mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000030 FF00
0022 00000040 078F move sp, @01876A00h, 1
00000050 01876A00
0023 00000070 078E move a14, @01876A20h, 1
00000080 01876A20
0024
0025 000000A0 09E0 movi 1, a0, L
000000B0 00000001
0026 000000D0 0780 move a0, @01876800h, 1
000000E0 01876800
0027
0028 00000100 09EE movi 01877000h, a14, L
00000110 01877000
0029 00000130 09E0 movi 0, a0, L
00000140 00000000
0030 00000160 920E move a0, *a14+, 1 ; arg2 = protocol
0031 00000170 09E0 movi 2, a0, L
00000180 00000002
0032 000001A0 920E move a0, *a14+, 1 ; arg1 = SOCK_DGRAM
0033 000001B0 09E0 movi 2, a0, L
000001C0 00000002
0034 000001E0 920E move a0, *a14+, 1 ; arg0 = AF_INET
0035 000001F0 0D5F calla 3F5C9A00h
00000200 3F5C9A00
0036 00000220 07AF move @01876A00h, sp, 1
00000230 01876A00
0037 00000250 07AE move @01876A20h, a14, 1
00000260 01876A20
0038 00000280 0550 setf 16, 0, 0
0039 00000290 0740 setf 32, 0, 1
0040 000002A0 0788 move a8, @01876820h, 1
000002B0 01876820
0041 000002D0 4D09 move a8, a9
0042
0043 000002E0 09E0 movi 2, a0, L
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:14:27 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 2
000002F0 00000002
0044 00000310 0780 move a0, @01876800h, 1
00000320 01876800
0045
0046 ; sendto(fd, RRQ, RRQLEN, 0, SADDR, 16)
0047 00000340 09EE movi 01877000h, a14, L
00000350 01877000
0048 00000370 09E0 movi 16, a0, L
00000380 00000010
0049 000003A0 920E move a0, *a14+, 1 ; arg5 = 16
0050 000003B0 09E0 movi SADDR, a0, L
000003C0 00000740'
0051 000003E0 920E move a0, *a14+, 1 ; arg4 = &sockaddr
0052 000003F0 09E0 movi 0, a0, L
00000400 00000000
0053 00000420 920E move a0, *a14+, 1 ; arg3 = flags
0054 00000430 09E0 movi 28, a0, L
00000440 0000001C
0055 00000460 920E move a0, *a14+, 1 ; arg2 = length
0056 00000470 09E0 movi RRQ, a0, L
00000480 00000660'
0057 000004A0 920E move a0, *a14+, 1 ; arg1 = packet
0058 000004B0 932E move a9, *a14+, 1 ; arg0 = fd
0059 000004C0 0D5F calla 3F5D3D70h
000004D0 3F5D3D70
0060 000004F0 07AF move @01876A00h, sp, 1
00000500 01876A00
0061 00000520 07AE move @01876A20h, a14, 1
00000530 01876A20
0062 00000550 0550 setf 16, 0, 0
0063 00000560 0740 setf 32, 0, 1
0064 00000570 0788 move a8, @01876840h, 1
00000580 01876840
0065
0066 000005A0 09E0 movi 3, a0, L
000005B0 00000003
0067 000005D0 0780 move a0, @01876800h, 1
000005E0 01876800
0068 00000600 09AF mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
00000610 00FF
0069 00000620 09E8 movi 0, a8, L
00000630 00000000
0070 00000650 0960 rets
0071
0072 00000660 RRQ:
0073 00000660 0100 .word 00100h ; opcode 1 (00 01)
0074 00000670 7764 .word 07764h ; "dw"
0075 00000680 2F74 .word 02F74h ; "t/"
0076 00000690 6374 .word 06374h ; "tc"
0077 000006A0 6970 .word 06970h ; "pi"
0078 000006B0 2F70 .word 02F70h ; "p/"
0079 000006C0 7270 .word 07270h ; "pr"
0080 000006D0 626F .word 0626Fh ; "ob"
0081 000006E0 2E65 .word 02E65h ; "e."
0082 000006F0 6962 .word 06962h ; "bi"
0083 00000700 006E .word 0006Eh ; "n\0"
GSP COFF Assembler, Version 2.00, 87.300 Sun Oct 18 15:14:27 2026
(c) Copyright 1985, 1987, Texas Instruments Inc.
PAGE 3
0084 00000710 636F .word 0636Fh ; "oc"
0085 00000720 6574 .word 06574h ; "te"
0086 00000730 0074 .word 00074h ; "t\0"
0087 00000740 SADDR:
0088 00000740 0002 .word 00002h ; sin_family = AF_INET
0089 00000750 4500 .word 04500h ; sin_port = htons(69)
0090 00000760 A8C0 .word 0A8C0h ; 192.168
0091 00000770 0163 .word 00163h ; .99.1
0092 00000780 0000 .word 0
0093 00000790 0000 .word 0
0094 000007A0 0000 .word 0
0095 000007B0 0000 .word 0
0096 .end
No Errors, No Warnings
+34
View File
@@ -0,0 +1,34 @@
*****************************************************
GSP COFF Linker, Version 2.00, 87.300
*****************************************************
Sun Oct 18 15:14:27 2026
OUTPUT FILE NAME: <UDPTEST.out>
ENTRY POINT SYMBOL: 0
SECTION ALLOCATION MAP
output attributes/
section page origin length input sections
-------- ---- ---------- ---------- ----------------
.data 0 00000000 00000000
.bss 0 00000000 00000000 UNINITIALIZED
.text 0 01876000 000007C0
01876000 000007C0 UDPTEST.obj (.text)
GLOBAL SYMBOLS
address name address name
-------- ---- -------- ----
00000000 .bss 00000000 edata
00000000 .data 00000000 .bss
01876000 .text 00000000 end
00000000 edata 00000000 .data
00000000 end 01876000 .text
018767C0 etext 018767C0 etext
[6 symbols]
+179
View File
@@ -0,0 +1,179 @@
; copytest.asm -- isolate the byte-copy loop used by tftpc.asm.
;
; malloc(01000h), then copy 256 bytes from SRC (values 0..255) with the same
; dint/movb/addk/dsjs/eint loop. A peek of the destination must show 00..FF.
;
; 0187A800 stage (1 entered, 2 copied)
; 0187A820 destination pointer
; 0187A840 entry SP
; 0187A860 entry A14
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @0187A840h, 1
move a14, @0187A860h, 1
movi 1, a0, L
move a0, @0187A800h, 1
move a14, -*sp, 1
movi 0187B800h, a14, L
movi 01000h, a0, L
move a0, *a14+, 1
calla 3F701230h
move @0187A840h, sp, 1
move @0187A860h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @0187A820h, 1
move a8, a6
dint
movi SRC, a5, L
movi 256, a2, L
copy_bytes:
movb *a5, a0
movb a0, *a6
addk 8, a5
addk 8, a6
dsjs a2, copy_bytes
eint
movi 2, a0, L
move a0, @0187A800h, 1
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
movi 0, a8, L
rets
SRC:
.word 00100h
.word 00302h
.word 00504h
.word 00706h
.word 00908h
.word 00B0Ah
.word 00D0Ch
.word 00F0Eh
.word 01110h
.word 01312h
.word 01514h
.word 01716h
.word 01918h
.word 01B1Ah
.word 01D1Ch
.word 01F1Eh
.word 02120h
.word 02322h
.word 02524h
.word 02726h
.word 02928h
.word 02B2Ah
.word 02D2Ch
.word 02F2Eh
.word 03130h
.word 03332h
.word 03534h
.word 03736h
.word 03938h
.word 03B3Ah
.word 03D3Ch
.word 03F3Eh
.word 04140h
.word 04342h
.word 04544h
.word 04746h
.word 04948h
.word 04B4Ah
.word 04D4Ch
.word 04F4Eh
.word 05150h
.word 05352h
.word 05554h
.word 05756h
.word 05958h
.word 05B5Ah
.word 05D5Ch
.word 05F5Eh
.word 06160h
.word 06362h
.word 06564h
.word 06766h
.word 06968h
.word 06B6Ah
.word 06D6Ch
.word 06F6Eh
.word 07170h
.word 07372h
.word 07574h
.word 07776h
.word 07978h
.word 07B7Ah
.word 07D7Ch
.word 07F7Eh
.word 08180h
.word 08382h
.word 08584h
.word 08786h
.word 08988h
.word 08B8Ah
.word 08D8Ch
.word 08F8Eh
.word 09190h
.word 09392h
.word 09594h
.word 09796h
.word 09998h
.word 09B9Ah
.word 09D9Ch
.word 09F9Eh
.word 0A1A0h
.word 0A3A2h
.word 0A5A4h
.word 0A7A6h
.word 0A9A8h
.word 0ABAAh
.word 0ADACh
.word 0AFAEh
.word 0B1B0h
.word 0B3B2h
.word 0B5B4h
.word 0B7B6h
.word 0B9B8h
.word 0BBBAh
.word 0BDBCh
.word 0BFBEh
.word 0C1C0h
.word 0C3C2h
.word 0C5C4h
.word 0C7C6h
.word 0C9C8h
.word 0CBCAh
.word 0CDCCh
.word 0CFCEh
.word 0D1D0h
.word 0D3D2h
.word 0D5D4h
.word 0D7D6h
.word 0D9D8h
.word 0DBDAh
.word 0DDDCh
.word 0DFDEh
.word 0E1E0h
.word 0E3E2h
.word 0E5E4h
.word 0E7E6h
.word 0E9E8h
.word 0EBEAh
.word 0EDECh
.word 0EFEEh
.word 0F1F0h
.word 0F3F2h
.word 0F5F4h
.word 0F7F6h
.word 0F9F8h
.word 0FBFAh
.word 0FDFCh
.word 0FFFEh
.end
+55
View File
@@ -0,0 +1,55 @@
; launcher.asm -- run tfetch.bin as a first-class process.
;
; The rdebug `jump` runs in the "remote debug" process. The X experiment
; (dwt/notes/GUI_APPS.md section 10) showed that a service connection made
; from that context is accepted but never completed; a create_process child
; works. This launcher is the same shape as dwt/gui/xlaunch.asm:
;
; create_process(entry, name, stack_size, 1, arg)
;
; create_process = bit 3F706A40h (Ghidra 07EE0D48)
;
; The child runs tfetch.bin, linked at bit 01870000h.
;
; Evidence cells (32-bit, bit addresses):
; 01872500 stage (1 entered, 2 create_process returned)
; 01872520 PCB returned by create_process (0 = failure)
; 01872540 entry-point argument (poked by the host, little-endian)
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @01872700h, 1 ; entry SP
move a14, @01872720h, 1 ; entry A14
movi 1, a0, L
move a0, @01872500h, 1
move a14, -*sp, 1
movi 01872800h, a14, L ; argument area
movi 0, a0, L
move a0, *a14+, 1 ; arg4 = 0
movi 1, a0, L
move a0, *a14+, 1 ; arg3 = 1
movi 04000h, a0, L ; 16 KiB stack
move a0, *a14+, 1 ; arg2 = stack size
movi 3F30DC00h, a0, L ; ROM "0::0", any short name
move a0, *a14+, 1 ; arg1 = name
move @01872540h, a0, 1 ; arg0 = entry, poked at run time
move a0, *a14+, 1 ; (little-endian bit address)
calla 3F706A40h ; create_process
move @01872700h, sp, 1
move @01872720h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01872520h, 1 ; PCB marker
movi 2, a0, L
move a0, @01872500h, 1 ; stage = 2
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
movi 0, a8, L
rets
.end
Binary file not shown.
+105
View File
@@ -0,0 +1,105 @@
-- probe.lua -- watch the dwt/tcpip payloads from inside MAME.
--
-- Samples marker cells and the CPU PC once per frame. This is independent of
-- the terminal's network stack, so it still reports after a payload has wedged
-- rdebug or TCP. PCs inside the payload or the socket/TFTP code are printed,
-- which is how a hang is localised.
--
-- <mame> vt1200 ... -debug -debugger none \
-- -autoboot_script dwt/tcpip/probe.lua -autoboot_delay 0
--
-- Stop with PROBE_END=<frame> (default 20000).
local machine = manager.machine
local cpu = machine.devices[':maincpu']
local prog = cpu.spaces['program']
local function hex(v) return string.format("%08X", v & 0xFFFFFFFF) end
local M = {
-- tfetch.asm
stage = 0x01871000, fd = 0x01871020, buf = 0x01871040,
total = 0x01871060, last = 0x01871080, done = 0x018710A0,
close = 0x018710C0, sp = 0x01871200, a14 = 0x01871220,
-- launcher.asm
lstage = 0x01872500, pcb = 0x01872520,
-- socktest.asm
sstage = 0x01874000, sfd = 0x01874020,
-- tftpc.asm
cstage = 0x0187C000, cfd = 0x0187C020, cbuf = 0x0187C040,
ctotal = 0x0187C060, clast = 0x0187C080, cblock = 0x0187C0A0,
cdone = 0x0187C0C0,
}
local END_AT = tonumber(os.getenv("PROBE_END") or "1000000")
local last = {}
local frames = 0
local pc_lines = 0
local checked = false
-- Ground truth for the fetch: read the malloc'd buffer from inside MAME and
-- compare it with the file the server holds. This avoids trusting rdebug peek.
local function check_buffer(buf, total)
local f = io.open("dwt/tcpip/probe.bin", "rb")
if not f then print("PROBE: no probe.bin to compare") return end
local want = f:read("*a")
f:close()
local n = math.min(total, #want)
local bad, first = 0, -1
for i = 0, n - 1 do
local got = prog:read_u8(buf + i * 8)
if got ~= want:byte(i + 1) then
bad = bad + 1
if first < 0 then first = i end
end
end
print(string.format("PROBE BUFFER buf=%s total=%d file=%d bad=%d first_bad=%d",
hex(buf), total, #want, bad, first))
end
local function in_range(pc, lo, hi) return pc >= lo and pc < hi end
local function sample()
frames = frames + 1
local vals = {}
for k, a in pairs(M) do vals[k] = prog:read_u32(a) end
local pc = cpu.state['PC'].value
local changed = false
for k, v in pairs(vals) do
if last[k] ~= v then changed = true end
end
local interesting = in_range(pc, 0x01870000, 0x01874000)
or in_range(pc, 0x3F5C0000, 0x3F5F0000)
or in_range(pc, 0x3F700000, 0x3F710000)
if changed or interesting or frames % 120 == 1 then
if interesting then pc_lines = pc_lines + 1 end
if not interesting or pc_lines <= 400 then
print(string.format("PROBE f=%d pc=%s stage=%s fd=%s buf=%s total=%s last=%s done=%s close=%s sp=%s a14=%s lstage=%s pcb=%s sstage=%s sfd=%s",
frames, hex(pc), hex(vals.stage), hex(vals.fd), hex(vals.buf),
hex(vals.total), hex(vals.last), hex(vals.done),
hex(vals.close), hex(vals.sp), hex(vals.a14),
hex(vals.lstage), hex(vals.pcb), hex(vals.sstage), hex(vals.sfd)))
print(string.format("TCPC cstage=%s cfd=%s cbuf=%s ctotal=%s clast=%s cblock=%s cdone=%s",
hex(vals.cstage), hex(vals.cfd), hex(vals.cbuf), hex(vals.ctotal),
hex(vals.clast), hex(vals.cblock), hex(vals.cdone)))
end
end
if vals.cdone == 0x05A5A5A5 and not checked then
checked = true
check_buffer(vals.cbuf, vals.ctotal)
end
last = vals
if frames >= END_AT then
print("PROBE end")
machine:exit()
end
end
if not machine.debugger then
print("PROBE ERROR: pass -debug")
machine:exit()
return
end
emu.register_frame_done(sample, "probe")
print("PROBE armed")
+68
View File
@@ -0,0 +1,68 @@
; restest.asm -- socket() then the resolver tftp_open uses.
;
; socket = 3F5C9A00h socket(2,2,0) -> fd
; resolve = 3F5933D0h resolve("192.168.99.1") -> -1 or address
;
; Evidence cells (32-bit, bit addresses):
; 01875800 stage (1 entered, 2 socket returned, 3 resolve returned)
; 01875820 socket() fd
; 01875840 resolver return
; 01875A00 entry SP
; 01875A20 entry A14
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @01875A00h, 1
move a14, @01875A20h, 1
movi 1, a0, L
move a0, @01875800h, 1
; socket(2,2,0)
movi 01875900h, a14, L
movi 0, a0, L
move a0, *a14+, 1
movi 2, a0, L
move a0, *a14+, 1
movi 2, a0, L
move a0, *a14+, 1
calla 3F5C9A00h
move @01875A00h, sp, 1
move @01875A20h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01875820h, 1 ; fd
move a8, a9
movi 2, a0, L
move a0, @01875800h, 1
; resolve("192.168.99.1")
movi 01875900h, a14, L
movi HOST, a0, L
move a0, *a14+, 1
calla 3F5933D0h
move @01875A00h, sp, 1
move @01875A20h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01875840h, 1
movi 3, a0, L
move a0, @01875800h, 1
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
movi 0, a8, L
rets
HOST:
.word 03931h
.word 02E32h
.word 03631h
.word 02E38h
.word 03939h
.word 0312Eh
.word 00000h
.end
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
[+] challenge f8 74 7d 75 00 00 7c 61 02 63 a8 c0 f8 6c 7d 76
[+] reply 08 66 31 7f 4f 55 f3 c9 62 d3 c9 6a 13 2e d8 3d
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
[.] jump returned 0x00000000 (0)
jump 0x01870000: returned 0x00000000 (0) payload=00 00 00 00
+4
View File
@@ -0,0 +1,4 @@
[+] challenge ff fc 7b 59 00 00 7b 51 02 63 a8 c0 ff fc 7b 5a
[+] reply a1 34 cd a5 e9 c4 80 ad 63 68 f8 78 c1 6b a2 e2
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
poke-file dwt/tcpip/build/tftpc.bin: 694 bytes at 0x01870000: ok
+2
View File
@@ -0,0 +1,2 @@
stage=4 fd=1 buf=0x0095bbd0 total=600 last=92 block=0x0200 done=0x05a5a5a5
OK: 600 bytes at 0x0095bbd0 match /home/arti/code/k-space/vt1200/dwt/tcpip/probe.bin sha256=9662e62b45802984e5eef9c7410ad7482645eb5ff77805f0406d248e35333359
+5
View File
@@ -0,0 +1,5 @@
[+] challenge f8 64 68 9d 00 00 67 87 02 63 a8 c0 f8 64 68 9d
[+] reply 14 dc bf 0b 6b 6c 0b 15 41 99 2a 7e b3 93 ab 36
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
[.] jump returned 0x00000000 (0)
jump 0x01872000: returned 0x00000000 (0) payload=00 00 00 00
+4
View File
@@ -0,0 +1,4 @@
[+] challenge f6 fc e9 16 00 00 e7 d3 02 63 a8 c0 f6 f4 e9 17
[+] reply 53 f1 47 62 57 42 7b c4 4b 2a 56 c9 e7 30 fd f8
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
jump 0x01875000: NO RETURN within 8.0s
+5
View File
@@ -0,0 +1,5 @@
[+] challenge ff fc 5d d5 00 00 5d c4 02 63 a8 c0 ff fc 5d d6
[+] reply 72 61 60 45 bf bb 0d 01 f0 17 9e b1 87 a0 fd 32
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
[.] jump returned 0x00000000 (0)
jump 0x01870000: returned 0x00000000 (0) payload=00 00 00 00
+5
View File
@@ -0,0 +1,5 @@
[+] challenge ef 8c 60 17 00 00 5d e6 02 63 a8 c0 ef 84 60 18
[+] reply 23 5f ff 91 64 74 93 f9 f1 f4 da 11 38 c1 1d 15
opcode 7 -> flag=0x00 payload=44 6f 6e 65 0a 00 (b'Done\n\x00')
[.] jump returned 0x00000000 (0)
jump 0x01876000: returned 0x00000000 (0) payload=00 00 00 00
+407
View File
@@ -0,0 +1,407 @@
Warning: -video none doesn't make much sense without -seconds_to_run
vt1200: screen_update#1 frame=0 clip_y=0..0 screen=1280x901
PROBE armed
vt1200: screen_update#2 frame=0 clip_y=1..900 screen=1280x901
vt1200: guard#1 frame=0 dump_frame=-1 dump_ram=-1
PROBE f=1 pc=3F200040 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
vt1200: screen_update#3 frame=0 clip_y=0..900 screen=1280x901
vt1200: scanline#1 line=0 enabled=1
vt1200: guard#2 frame=0 dump_frame=-1 dump_ram=-1
vt1200: screen_update#4 frame=1 clip_y=0..0 screen=1280x901
vt1200: scanline#2 line=0 enabled=1
vt1200: scanline#3 line=1 enabled=1
vt1200: scanline#4 line=2 enabled=1
PROBE f=3 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=4 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=5 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=6 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=7 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=8 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=9 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=10 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=11 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=12 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=13 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=14 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=15 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=16 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=17 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=18 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=19 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=20 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=21 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=22 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=23 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=24 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=25 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=26 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=27 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=28 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=29 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=30 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=31 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=32 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=33 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=34 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=35 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=36 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=37 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=38 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=39 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=40 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=41 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=42 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=43 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=44 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=45 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=46 pc=3F7056F0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=47 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=48 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=49 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=50 pc=3F7056B0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=51 pc=3F7056E0 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=52 pc=3F705700 stage=00000000 fd=00000000 buf=00000000 total=00000000 last=00000000 done=00000000 close=00000000 sp=00000000 a14=00000000 lstage=00000000 pcb=00000000 sstage=00000000 sfd=00000000
TCPC cstage=00000000 cfd=00000000 cbuf=00000000 ctotal=00000000 clast=00000000 cblock=00000000 cdone=00000000
PROBE f=53 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=54 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=55 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=56 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=57 pc=3F7056F0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=58 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=59 pc=3F705700 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=60 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=61 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=62 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=63 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=64 pc=3F7056F0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=65 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=66 pc=3F705700 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=67 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=68 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=69 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=70 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=71 pc=3F7056F0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=72 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=73 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=74 pc=3F7056B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=75 pc=3F7056E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=76 pc=3F701E60 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=77 pc=3F702460 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=78 pc=3F702C70 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=79 pc=3F702070 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=80 pc=3F702530 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=81 pc=3F700E20 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=82 pc=3F7021D0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=83 pc=3F7026E0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=84 pc=3F700C10 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=85 pc=3F701EB0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=86 pc=3F702460 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=87 pc=3F701100 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=88 pc=3F7020D0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=89 pc=3F702590 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=90 pc=3F700E70 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=91 pc=3F7021D0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=92 pc=3F702730 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=93 pc=3F701D90 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=94 pc=3F701070 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=95 pc=3F702C70 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=96 pc=3F700FF0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=97 pc=3F700ED0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=98 pc=3F7010C0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=100 pc=3F701950 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=104 pc=3F701950 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=107 pc=3F701560 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=113 pc=3F703FA0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=121 pc=3FB44DA0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=131 pc=3F702810 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=241 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=361 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=432 pc=3F702460 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=433 pc=3F702110 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=472 pc=3F701930 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=477 pc=3F702C30 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=481 pc=3F350F50 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=490 pc=3F7040D0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=492 pc=3F702F00 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=493 pc=3F7012A0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=546 pc=3F702460 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=601 pc=3FB447B0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=613 pc=3F708730 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=721 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=841 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=961 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1081 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1118 pc=3F7075A0 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1123 pc=3F5D7400 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1124 pc=3F5D5500 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1127 pc=3F708C00 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1201 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1321 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1441 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1561 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1681 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1801 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1921 pc=3F579870 stage=55555555 fd=55555555 buf=55555555 total=55555555 last=55555555 done=55555555 close=55555555 sp=55555555 a14=55555555 lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1961 pc=3FB2C140 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=55555555 cfd=55555555 cbuf=55555555 ctotal=55555555 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1979 pc=3FB446C0 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000003 cfd=00000001 cbuf=0095BBD0 ctotal=00000000 clast=55555555 cblock=55555555 cdone=55555555
PROBE f=1980 pc=3F5D7060 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE BUFFER buf=0095BBD0 total=600 file=600 bad=0 first_bad=-1
PROBE f=2041 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2161 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2281 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2401 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2521 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2641 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2761 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=2881 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3001 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3121 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3241 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3361 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3481 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3601 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3721 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3841 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=3961 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4081 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4201 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4321 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4441 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4561 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4681 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4801 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=4921 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5041 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5161 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5281 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5401 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5521 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5641 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5761 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=5881 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6001 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6121 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6241 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6361 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6481 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6601 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6721 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6841 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=6961 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7081 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7201 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7321 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7441 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7561 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7681 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7801 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=7921 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8041 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8161 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8281 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8401 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8521 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8641 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8761 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=8881 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=9001 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=9121 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=9241 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=9361 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
PROBE f=9481 pc=3F579870 stage=09E0920E fd=0187A100 buf=932E920E total=3D700D5F last=07AF3F5D done=0187C200 close=C22007AE sp=0187C000 a14=500009EE lstage=55555555 pcb=55555555 sstage=55555555 sfd=55555555
TCPC cstage=00000004 cfd=00000001 cbuf=0095BBD0 ctotal=00000258 clast=0000005C cblock=00000200 cdone=05A5A5A5
+4
View File
@@ -0,0 +1,4 @@
tftp: serving 600 bytes (probe.bin) for any name on ('192.168.99.1', 69)
bootp: L2 responder on tap-mess-1000-0: handing out 192.168.99.2, siaddr 192.168.99.1
bootp: request from 08:00:2b:16:4b:5a xid=f81fccff -> 192.168.99.2 (siaddr 192.168.99.1, tap tap-mess-1000-0)
15:23:48 RRQ 192.168.99.2:1025 requested 'dwt/tcpip/probe.bin' (600 bytes)
+75
View File
@@ -0,0 +1,75 @@
#!/usr/bin/env python3
"""TFTP + BOOTP server for the dwt/tcpip fetch experiment.
Serves ``dwt/tcpip/probe.bin`` for *any* requested name (the terminal's TFTP
client asks for the exact filename we put in the payload) and logs every RRQ.
``--bootp`` reuses the L2 BOOTP responder from ``harness/serve.py`` so the
terminal learns 192.168.99.2 at power-up; that file is imported, not modified.
sudo python3 -u dwt/tcpip/serve_probe.py 192.168.99.1 --bootp
Run this instead of ``harness/serve.py`` when the file to serve is the probe:
both want UDP 69, so only one can be up.
"""
import argparse
import os
import sys
import time
HERE = os.path.dirname(os.path.abspath(__file__))
ROOT = os.path.dirname(os.path.dirname(HERE))
sys.path.insert(0, os.path.join(ROOT, "tools"))
sys.path.insert(0, os.path.join(ROOT, "harness"))
import fontgen # noqa: E402
import serve as hserve # noqa: E402
PROBE = os.path.join(HERE, "probe.bin")
def main(argv=None):
ap = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("host", nargs="?", default="192.168.99.1")
ap.add_argument("port", nargs="?", type=int, default=69)
ap.add_argument("--bootp", action="store_true")
ap.add_argument("--bootp-client", default="192.168.99.2")
ap.add_argument("--bootp-iface", default=None)
ap.add_argument("--file", default=PROBE)
args = ap.parse_args(argv)
content = open(args.file, "rb").read()
# Answer any name with the probe: the payload chooses the name, and the
# log records exactly what the terminal asked for.
srv = fontgen.TFTPServer((args.host, args.port), {}, timeout=60.0,
retries=10, resolver=lambda name: content).start()
print(f"tftp: serving {len(content)} bytes ({os.path.basename(args.file)}) "
f"for any name on {srv.address}", flush=True)
bootp = None
if args.bootp:
bootp = hserve.BootpResponder(server_ip=args.host,
client_ip=args.bootp_client,
iface=args.bootp_iface).start()
print(f"bootp: L2 responder on {bootp.iface}: handing out "
f"{bootp.client_ip}, siaddr {bootp.server_ip}", flush=True)
start = time.time()
try:
while True:
time.sleep(0.2)
while srv.log:
ts, name, addr = srv.log.pop(0)
stamp = time.strftime("%H:%M:%S", time.localtime(ts))
print(f"{stamp} RRQ {addr[0]}:{addr[1]} requested {name!r} "
f"({content.__len__()} bytes)", flush=True)
except KeyboardInterrupt:
pass
finally:
srv.stop()
if bootp:
bootp.stop()
if __name__ == "__main__":
main()
+46
View File
@@ -0,0 +1,46 @@
; socktest.asm -- call the firmware's socket() wrapper and return.
;
; Isolates the first call tftp_open makes. Run with rdebug `jump` from the
; remote-debug process (or from a create_process child) to see whether the
; socket API is usable in that context.
;
; socket = bit 3F5C9A00h (Ghidra 07EB9340)
; socket(domain, type, protocol) = socket(2, 2, 0)
;
; Evidence cells (32-bit, bit addresses):
; 01874000 stage (1 entered, 2 socket returned)
; 01874020 socket() return (fd, or a negative errno)
; 01874200 entry SP
; 01874220 entry A14
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @01874200h, 1
move a14, @01874220h, 1
movi 1, a0, L
move a0, @01874000h, 1
movi 01873800h, a14, L
movi 0, a0, L
move a0, *a14+, 1 ; arg2 = protocol
movi 2, a0, L
move a0, *a14+, 1 ; arg1 = SOCK_DGRAM
movi 2, a0, L
move a0, *a14+, 1 ; arg0 = AF_INET
calla 3F5C9A00h ; socket
move @01874200h, sp, 1
move @01874220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01874020h, 1
movi 2, a0, L
move a0, @01874000h, 1
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
movi 0, a8, L
rets
.end
+153
View File
@@ -0,0 +1,153 @@
; tftp_fetch.asm -- fetch a file over TFTP into a malloc'd buffer using the
; firmware's own client (dwt_tftp.c in ROM).
;
; Linked at bit 01870000h (byte 0x30E000) and executed with the rdebug `jump`
; call. The payload follows the firmware's stack-argument convention:
;
; MOVE A14,-*SP,1 ; reserve the slot the callee restores
; MOVE argN,*A14+,1 ; last argument first, upward via A14
; MOVE arg0,*A14+,1 ; first argument last
; CALLA target
;
; We point A14 at a fixed argument area and restore SP/A14 from the saved
; entry values after every call, so a payload bug cannot walk the caller's
; stack. a9 and a11 are callee-saved by tftp_open/tftp_read/tftp_close and
; hold the fd and the current write pointer across calls.
;
; Firmware entry points (bit addresses; Ghidra = bit >> 3):
; malloc 3F701230h (Ghidra 07EE0246) malloc(bytes) -> bit pointer
; tftp_open 3F5EBC40h (Ghidra 07EBD788) tftp_open(host, filename) -> fd
; tftp_read 3F5ED230h (Ghidra 07EBDA46) tftp_read(fd, buf, bufsize) -> n
; tftp_close 3F5EC860h (Ghidra 07EBD90C) tftp_close(fd)
;
; tftp_read returns the DATA payload length, and 0 once a short (final) block
; has been consumed. tftp_close sends TFTP ERROR 3 if the last block read was
; a full 512 bytes, so the loop must read until it gets 0.
;
; Evidence cells (32-bit, bit addresses; peeked over rdebug):
; 01871000 stage (1 malloc, 2 open, 3 reading, 4 closed, 0FFh failed)
; 01871020 fd
; 01871040 buffer pointer (returned by malloc; a BIT address)
; 01871060 total bytes fetched
; 01871080 last tftp_read return
; 018710A0 marker: 05A5A5A5h when the fetch completed
; 018710C0 tftp_close return scratch
; 01871200 entry SP
; 01871220 entry A14
;
; The fetched bytes are at [01871040] and are compared with the served file.
; The marker cells are deliberately above 01870AD0 (the end of this image):
; writing them into the code was the first, silent failure of this payload.
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @01871200h, 1 ; entry SP
move a14, @01871220h, 1 ; entry A14
movi 1, a0, L
move a0, @01871000h, 1 ; stage = 1
; ---- buf = malloc(010000h) ------------------------------------
move a14, -*sp, 1
movi 01878000h, a14, L ; argument area
movi 010000h, a0, L ; 65536 bytes
move a0, *a14+, 1
calla 3F701230h ; malloc
move @01871200h, sp, 1
move @01871220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01871040h, 1 ; buffer pointer (bit address)
move a8, a11
move a8, a8
jreq fail
movi 2, a0, L
move a0, @01871000h, 1 ; stage = 2
; ---- fd = tftp_open("192.168.99.1", "dwt/tcpip/probe.bin") -----
movi 01878000h, a14, L ; argument area
movi FNAME, a0, L
move a0, *a14+, 1 ; arg1 = filename
movi HOST, a0, L
move a0, *a14+, 1 ; arg0 = host
calla 3F5EBC40h ; tftp_open
move @01871200h, sp, 1
move @01871220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01871020h, 1 ; fd
move a8, a9
move a8, a8
jrlt fail
; ---- while ((n = tftp_read(fd, p, 010000h)) > 0) p += n --------
movi 3, a0, L
move a0, @01871000h, 1 ; stage = 3
read_loop:
movi 01878000h, a14, L
movi 010000h, a0, L
move a0, *a14+, 1 ; arg2 = bufsize
move a11, *a14+, 1 ; arg1 = buffer
move a9, *a14+, 1 ; arg0 = fd
calla 3F5ED230h ; tftp_read
move @01871200h, sp, 1
move @01871220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01871080h, 1 ; last return
move a8, a8
jrle close_it
add a8, a11 ; advance the write pointer
move @01871060h, a1, 1
add a8, a1
move a1, @01871060h, 1 ; total += n
jruc read_loop
close_it:
movi 4, a0, L
move a0, @01871000h, 1 ; stage = 4
movi 01878000h, a14, L
move a9, *a14+, 1 ; arg0 = fd
calla 3F5EC860h ; tftp_close
move @01871200h, sp, 1
move @01871220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @018710C0h, 1
movi 05A5A5A5h, a0, L
move a0, @018710A0h, 1 ; DONE marker
sub a8, a8 ; return 0
jruc epilogue
fail:
movi 0FFh, a0, L
move a0, @01871000h, 1
movi 0FFFFFFFFh, a8, L
epilogue:
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
rets
HOST:
.word 03931h ; "192.168.99.1"
.word 02E32h
.word 03631h
.word 02E38h
.word 03939h
.word 0312Eh
.word 00000h
FNAME:
.word 07764h ; "dwt/tcpip/probe.bin"
.word 02F74h
.word 06374h
.word 06970h
.word 02F70h
.word 07270h
.word 0626Fh
.word 02E65h
.word 06962h
.word 0006Eh
.end
+256
View File
@@ -0,0 +1,256 @@
; tftpc.asm -- minimal TFTP read client built on the firmware's socket API.
;
; The firmware's own tftp_open() calls a resolver that does not return when
; called from the rdebug process (dwt/notes/TCPIP.md), so this payload speaks
; RFC 783 directly: RRQ, DATA/ACK, 512-byte blocks, one file.
;
; socket = 3F5C9A00h socket(2,2,0) -> fd
; sendto = 3F5D3D70h sendto(fd, buf, len, flags, to, tolen) -> n
; recvfrom = 3F5D7D50h recvfrom(fd, buf, len, flags, from, fromlen) -> n
; close = 3F5E8930h close(fd)
; malloc = 3F701230h malloc(bytes) -> bit pointer
;
; The transfer is 600 bytes, so DATA 1 is 512 (full) and DATA 2 is 88
; (short); the short block ends the transfer. ACKs go to the sockaddr that
; recvfrom reports, not to a hard-coded port.
;
; Evidence cells (32-bit, bit addresses):
; 0187C000 stage (1 malloc, 2 socket, 3 receiving, 4 closed, 0FFh failed)
; 0187C020 fd
; 0187C040 destination buffer (malloc)
; 0187C060 total bytes fetched
; 0187C080 last recvfrom length
; 0187C0A0 last DATA block word as read from the wire
; 0187C0C0 marker 05A5A5A5h when the fetch completed
; 0187C200 entry SP
; 0187C220 entry A14
;
; Scratch (fixed bit addresses, above this image):
; 01875000 argument area
; 01876000 receive buffer (2048 bytes)
; 0187A000 recvfrom source sockaddr
; 0187A080 recvfrom sockaddr length
; 0187A100 ACK packet (4 bytes)
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @0187C200h, 1
move a14, @0187C220h, 1
movi 1, a0, L
move a0, @0187C000h, 1
; ---- buf = malloc(010000h) ------------------------------------
move a14, -*sp, 1
movi 01875000h, a14, L
movi 010000h, a0, L
move a0, *a14+, 1
calla 3F701230h
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @0187C040h, 1
move a8, a11 ; dest cursor (callee-saved)
move a8, a8
jreq fail
movi 2, a0, L
move a0, @0187C000h, 1
; ---- fd = socket(2,2,0) --------------------------------------
movi 01875000h, a14, L
movi 0, a0, L
move a0, *a14+, 1
movi 2, a0, L
move a0, *a14+, 1
movi 2, a0, L
move a0, *a14+, 1
calla 3F5C9A00h
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @0187C020h, 1
move a8, a9 ; fd (callee-saved)
move a8, a8
jrlt fail
; ---- sendto(fd, RRQ, 28, 0, SADDR, 16) ------------------------
movi 01875000h, a14, L
movi 16, a0, L
move a0, *a14+, 1
movi SADDR, a0, L
move a0, *a14+, 1
movi 0, a0, L
move a0, *a14+, 1
movi 28, a0, L
move a0, *a14+, 1
movi RRQ, a0, L
move a0, *a14+, 1
move a9, *a14+, 1
calla 3F5D3D70h
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, a8
jrlt fail
movi 3, a0, L
move a0, @0187C000h, 1
sub a0, a0
move a0, @0187C060h, 1 ; total = 0
recv_loop:
; ---- recvfrom(fd, BUF, 2048, 0, &FROM, &FROMLEN) -------------
; arg5 is a POINTER to the socklen (as tftp_read passes it); the
; value is initialised to 16 first.
movi 16, a0, L
move a0, @0187A080h, 1 ; fromlen = 16
movi 01875000h, a14, L
movi 0187A080h, a0, L
move a0, *a14+, 1 ; arg5 = &fromlen
movi 0187A000h, a0, L
move a0, *a14+, 1 ; arg4 = &from
movi 0, a0, L
move a0, *a14+, 1 ; arg3 = flags
movi 00800h, a0, L
move a0, *a14+, 1 ; arg2 = 2048
movi 01876000h, a0, L
move a0, *a14+, 1 ; arg1 = receive buffer
move a9, *a14+, 1 ; arg0 = fd
calla 3F5D7D50h
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @0187C080h, 1 ; last length
move a8, a8
jrle fail
; opcode: wire 00 03 -> little-endian word 0300h
move @01876000h, a0, 0
cmpi 0300h, a0
jrne fail ; only DATA is accepted
move @01876010h, a4, 0 ; block number, wire order
move a4, @0187C0A0h, 1
move a8, a3
subk 4, a3 ; payload length
; ---- total += payload, dest += payload -----------------------
move @0187C060h, a1, 1
add a3, a1
move a1, @0187C060h, 1 ; total += payload (bytes)
move a11, a6 ; copy destination
move a3, a2
sll 3, a2 ; bytes -> bits: pointers are bit addresses
add a2, a11 ; dest cursor advances now (do NOT add bytes)
; ---- copy payload from BUF+4 to a6, one byte at a time ------
; Interrupts are disabled for the copy so a 512-byte copy is atomic
; with respect to the firmware's ISRs.
dint
movi 01876020h, a5, L
move a3, a2
move a3, @0187C0E0h, 1 ; payload length
move a2, @0187C140h, 1 ; copy count
move a6, @0187C120h, 1 ; write start
move a11, @0187C100h, 1 ; cursor after advance
move a5, @0187C160h, 1 ; source
jreq copy_done
copy_bytes:
movb *a5, a0
movb a0, *a6
addk 8, a5 ; one byte
addk 8, a6
dsjs a2, copy_bytes
copy_done:
eint
; ---- ACK: 00 04 <block as received> --------------------------
movi 00400h, a0, L
move a0, @0187A100h, 0
move a4, @0187A110h, 0
movi 01875000h, a14, L
movi 16, a0, L
move a0, *a14+, 1
movi 0187A000h, a0, L
move a0, *a14+, 1
movi 0, a0, L
move a0, *a14+, 1
movi 4, a0, L
move a0, *a14+, 1
movi 0187A100h, a0, L
move a0, *a14+, 1
move a9, *a14+, 1
calla 3F5D3D70h
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, a8
jrlt fail
; short block ends the transfer; full block means read again
move @0187C080h, a2, 1
subk 4, a2
cmpi 512, a2
jrlt close_it
jruc recv_loop
close_it:
movi 4, a0, L
move a0, @0187C000h, 1
movi 01875000h, a14, L
move a9, *a14+, 1
calla 3F5E8930h ; close(fd)
move @0187C200h, sp, 1
move @0187C220h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
movi 05A5A5A5h, a0, L
move a0, @0187C0C0h, 1
sub a8, a8
jruc epilogue
fail:
movi 0FFh, a0, L
move a0, @0187C000h, 1
movi 0FFFFFFFFh, a8, L
epilogue:
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
rets
RRQ:
.word 00100h ; opcode 1 (00 01)
.word 07764h ; "dw"
.word 02F74h ; "t/"
.word 06374h ; "tc"
.word 06970h ; "pi"
.word 02F70h ; "p/"
.word 07270h ; "pr"
.word 0626Fh ; "ob"
.word 02E65h ; "e."
.word 06962h ; "bi"
.word 0006Eh ; "n\0"
.word 0636Fh ; "oc"
.word 06574h ; "te"
.word 00074h ; "t\0"
SADDR:
.word 00002h ; sin_family = AF_INET
.word 04500h ; sin_port = htons(69)
.word 0A8C0h ; 192.168
.word 00163h ; .99.1
.word 0
.word 0
.word 0
.word 0
.end
+96
View File
@@ -0,0 +1,96 @@
; udptest.asm -- socket() + sendto() a real TFTP RRQ.
;
; socket = 3F5C9A00h socket(2,2,0) -> fd
; sendto = 3F5D3D70h sendto(fd, buf, len, flags, to, tolen) -> n
;
; The RRQ is the packet the firmware itself would send for
; "dwt/tcpip/probe.bin" in octet mode. A server log line for this packet is
; proof that UDP transmit works from the calling process; no reply is read.
;
; Evidence cells (32-bit, bit addresses):
; 01876800 stage (1 entered, 2 sendto returned)
; 01876820 socket fd
; 01876840 sendto return
; 01876A00 entry SP
; 01876A20 entry A14
.text
_start:
setf 16, 0, 0
setf 32, 0, 1
mmtm sp, a0,a1,a2,a3,a4,a5,a6,a7
move sp, @01876A00h, 1
move a14, @01876A20h, 1
movi 1, a0, L
move a0, @01876800h, 1
movi 01877000h, a14, L
movi 0, a0, L
move a0, *a14+, 1 ; arg2 = protocol
movi 2, a0, L
move a0, *a14+, 1 ; arg1 = SOCK_DGRAM
movi 2, a0, L
move a0, *a14+, 1 ; arg0 = AF_INET
calla 3F5C9A00h
move @01876A00h, sp, 1
move @01876A20h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01876820h, 1
move a8, a9
movi 2, a0, L
move a0, @01876800h, 1
; sendto(fd, RRQ, RRQLEN, 0, SADDR, 16)
movi 01877000h, a14, L
movi 16, a0, L
move a0, *a14+, 1 ; arg5 = 16
movi SADDR, a0, L
move a0, *a14+, 1 ; arg4 = &sockaddr
movi 0, a0, L
move a0, *a14+, 1 ; arg3 = flags
movi 28, a0, L
move a0, *a14+, 1 ; arg2 = length
movi RRQ, a0, L
move a0, *a14+, 1 ; arg1 = packet
move a9, *a14+, 1 ; arg0 = fd
calla 3F5D3D70h
move @01876A00h, sp, 1
move @01876A20h, a14, 1
setf 16, 0, 0
setf 32, 0, 1
move a8, @01876840h, 1
movi 3, a0, L
move a0, @01876800h, 1
mmfm sp, a0,a1,a2,a3,a4,a5,a6,a7
movi 0, a8, L
rets
RRQ:
.word 00100h ; opcode 1 (00 01)
.word 07764h ; "dw"
.word 02F74h ; "t/"
.word 06374h ; "tc"
.word 06970h ; "pi"
.word 02F70h ; "p/"
.word 07270h ; "pr"
.word 0626Fh ; "ob"
.word 02E65h ; "e."
.word 06962h ; "bi"
.word 0006Eh ; "n\0"
.word 0636Fh ; "oc"
.word 06574h ; "te"
.word 00074h ; "t\0"
SADDR:
.word 00002h ; sin_family = AF_INET
.word 04500h ; sin_port = htons(69)
.word 0A8C0h ; 192.168
.word 00163h ; .99.1
.word 0
.word 0
.word 0
.word 0
.end
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env python3
"""Read the fetched TFTP image back with rdebug peek and compare it byte-for-byte.
python3 dwt/tcpip/verify.py --host 192.168.99.2 \
--markers 0x0187C000 --file dwt/tcpip/probe.bin
Marker layout is the one in tftpc.asm:
+0x00 stage, +0x20 fd, +0x40 buffer, +0x60 total,
+0x80 last recvfrom length, +0xA0 last block, +0xC0 done.
The comparison is the acceptance check: the payload is not trusted to report
its own success.
"""
from __future__ import annotations
import argparse
import hashlib
import os
import sys
HERE = os.path.dirname(os.path.abspath(__file__))
DWT = os.path.dirname(HERE)
sys.path.insert(0, DWT)
import challenge # noqa: E402
import exploit # noqa: E402
_orig_answer = exploit.RDebug.answer_challenge
def _answer(self, challenge_bytes: bytes) -> None:
self.challenge_raw = challenge.respond(challenge_bytes)
return _orig_answer(self, challenge_bytes)
exploit.RDebug.answer_challenge = _answer
def main(argv=None):
ap = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("--host", default="192.168.99.2")
ap.add_argument("--port", type=int, default=771)
ap.add_argument("--markers", type=exploit.parse_int, default=0x0187C000)
ap.add_argument("--file", default=os.path.join(HERE, "probe.bin"))
a = ap.parse_args(argv)
want = open(a.file, "rb").read()
rd = exploit.RDebug(a.host, a.port, 10.0, False)
rd.connect()
rd.liveness(7)
def u32(off):
return int.from_bytes(rd.peek(a.markers + off, 4), "little")
stage, fd, buf, total = u32(0), u32(0x20), u32(0x40), u32(0x60)
last, block, done = u32(0x80), u32(0xA0), u32(0xC0)
print(f"stage={stage} fd={fd} buf={buf:#010x} total={total} "
f"last={last} block={block:#06x} done={done:#010x}")
if stage != 4 or done != 0x05A5A5A5:
print("FAIL: payload did not reach the completed state")
return 2
if total != len(want):
print(f"FAIL: total {total} != file size {len(want)}")
return 2
got = b""
off = 0
while off < total:
n = min(exploit.MAX_XFER, total - off)
got += rd.peek(buf + off * 8, n)
off += n
if got == want:
print(f"OK: {len(got)} bytes at {buf:#010x} match {a.file} "
f"sha256={hashlib.sha256(got).hexdigest()}")
return 0
for i, (x, y) in enumerate(zip(got, want)):
if x != y:
print(f"FAIL: first mismatch at byte {i}: got {x:02x} want {y:02x}")
break
print(f"FAIL: {len(got)} bytes differ from {a.file}")
return 1
if __name__ == "__main__":
raise SystemExit(main())