Retro Developer Environment Project - Debug Output Specification V01
이 문서는 AppleWin과 openMSX 에뮬레이터에서 공통으로 사용할 수 있는 통합 디버그 출력 포맷 을 정의합니다.
단일 TCP 포트를 통한 모든 디버그 정보 통합 출력
실시간 스트리밍에 적합한 JSON Lines 형식
두 에뮬레이터 간 호환 가능한 공통 필드 정의
클라이언트 측에서 유연한 필터링 및 처리 가능
모든 라인에 에뮬레이터 식별자 포함
에뮬레이터
emu 값
CPU
지원 플랫폼
AppleWin
apple
6502/65C02
Apple II, II+, IIe, IIc
openMSX
msx
Z80/R800
MSX1, MSX2, MSX2+, MSXturboR
프로토콜 : Raw TCP Socket (또는 Telnet 호환)
포트 : 설정 가능 (기본값: 6502 또는 사용자 지정)
바인드 주소 : 127.0.0.1 (기본, 보안 목적)
인코딩 : UTF-8
연결 유형 : 지속 연결 (Persistent Connection)
[Emulator] ──TCP──> [Client]
│
├── 연결 수립 시 초기 상태 전송
├── 이벤트 발생 시 즉시 전송 (Push 방식)
└── 주기적 상태 업데이트 (설정에 따라)
클라이언트 연결 시 에뮬레이터는 즉시 hello 메시지를 전송합니다:
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" hello" ,"val" :" AppleWin 1.30.0" ,"ver" :" 1.0" ,"ts" :1704067200000 }
각 데이터는 한 줄의 독립된 JSON 객체 로 출력되며, 줄바꿈(\n)으로 구분됩니다.
{"emu":"..","cat":"..","sec":"..","fld":"..","val":".."}\n
{"emu":"..","cat":"..","sec":"..","fld":"..","val":".."}\n
필드
타입
필수
설명
emu
string
Y
Emulator - 에뮬레이터 식별자 (apple 또는 msx)
cat
string
Y
Category - 데이터 대분류
sec
string
Y
Section - 중분류/하위 그룹
fld
string
Y
Field - 구체적 필드명
val
string
Y
Value - 값 (항상 문자열)
ts
number
N
Timestamp - Unix 밀리초 (선택)
idx
number
N
Index - 배열/순서 인덱스 (선택)
addr
string
N
Address - 메모리 주소 (선택)
len
number
N
Length - 데이터 길이 (선택)
값
에뮬레이터
설명
apple
AppleWin
Apple II 시리즈 에뮬레이터
msx
openMSX
MSX 시리즈 에뮬레이터
중요 : emu 필드는 모든 출력 라인에 필수 입니다. 이를 통해 클라이언트는 여러 에뮬레이터의 데이터를 단일 스트림에서 구분할 수 있습니다.
16진수 : 대문자, $ 접두사 없음 (예: "C600", "FF")
불리언 : "0" 또는 "1"
숫자 : 10진수 문자열 (예: "12345")
문자열 : 그대로 (JSON 이스케이프 적용)
cat
설명
주요 section
cpu
CPU 상태
reg, flag, int, state
mem
메모리
read, write, dump, bank
io
입출력
port, switch, slot
mach
머신 상태
info, status, video
dbg
디버거
bp, watch, trace
sys
시스템 메시지
conn, error, event
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" C600" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" 0000" }
fld
크기
설명
a
8-bit
Accumulator
x
8-bit
X Index
y
8-bit
Y Index
sp
8-bit
Stack Pointer
pc
16-bit
Program Counter
p
8-bit
Processor Status
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" a" ,"val" :" F3" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" x" ,"val" :" 00" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" y" ,"val" :" 01" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" sp" ,"val" :" FF" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" C600" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" p" ,"val" :" 30" }
fld
크기
설명
af
16-bit
AF pair
bc
16-bit
BC pair
de
16-bit
DE pair
hl
16-bit
HL pair
af2
16-bit
AF' (alternate)
bc2
16-bit
BC' (alternate)
de2
16-bit
DE' (alternate)
hl2
16-bit
HL' (alternate)
ix
16-bit
Index X
iy
16-bit
Index Y
sp
16-bit
Stack Pointer
pc
16-bit
Program Counter
i
8-bit
Interrupt Vector
r
8-bit
Refresh
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" af" ,"val" :" F3A0" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" bc" ,"val" :" 0100" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" hl" ,"val" :" C000" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" sp" ,"val" :" F380" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" 0000" }
fld
비트
설명
n
7
Negative/Sign
v
6
Overflow
b
4
Break
d
3
Decimal
i
2
Interrupt Disable
z
1
Zero
c
0
Carry
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" n" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" z" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" c" ,"val" :" 0" }
fld
비트
설명
s
7
Sign
z
6
Zero
h
4
Half-Carry
pv
2
Parity/Overflow
n
1
Subtract
c
0
Carry
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" s" ,"val" :" 1" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" z" ,"val" :" 0" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" pv" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" int" ,"fld" :" enabled" ,"val" :" 1" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" int" ,"fld" :" mode" ,"val" :" 1" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" int" ,"fld" :" halted" ,"val" :" 0" }
4.4 CPU 상태 (sec: "state")
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" state" ,"fld" :" type" ,"val" :" 65C02" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" state" ,"fld" :" cycles" ,"val" :" 12345678" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" state" ,"fld" :" jammed" ,"val" :" 0" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" state" ,"fld" :" type" ,"val" :" R800" }
5.1 메모리 읽기 이벤트 (sec: "read")
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" read" ,"fld" :" byte" ,"val" :" A9" ,"addr" :" C600" }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" read" ,"fld" :" word" ,"val" :" 20A9" ,"addr" :" C600" }
5.2 메모리 쓰기 이벤트 (sec: "write")
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" write" ,"fld" :" byte" ,"val" :" FF" ,"addr" :" 0300" }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" write" ,"fld" :" byte" ,"val" :" 00" ,"addr" :" 8000" }
연속된 메모리 영역을 16진수 문자열로 출력:
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" dump" ,"fld" :" data" ,"val" :" A9208500A900850120" ,"addr" :" C600" ,"len" :9 }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" dump" ,"fld" :" data" ,"val" :" F3EDA0210080" ,"addr" :" 0000" ,"len" :6 }
5.4 Zero Page 덤프 (sec: "zp") - AppleWin
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" zp" ,"fld" :" data" ,"val" :" 00 00 00 00 FF FF 20 30 ..." ,"addr" :" 0000" ,"len" :" 16" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" zp" ,"fld" :" data" ,"val" :" A9 00 85 00 A9 20 85 01 ..." ,"addr" :" 0010" ,"len" :" 16" }
5.5 Stack Page 덤프 (sec: "stackpage") - AppleWin
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" stackpage" ,"fld" :" data" ,"val" :" 00 00 C6 00 C7 00 ..." ,"addr" :" 0100" ,"len" :" 16" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" stackpage" ,"fld" :" data" ,"val" :" 00 00 00 00 00 00 ..." ,"addr" :" 0110" ,"len" :" 16" }
5.6 메모리 플래그 (sec: "flag") - AppleWin
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" 80store" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" auxRead" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" auxWrite" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" altZP" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" highRam" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" bank2" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" writeRam" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" page2" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" flag" ,"fld" :" hires" ,"val" :" 0" }
5.7 텍스트 화면 덤프 (sec: "text") - AppleWin
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" text" ,"fld" :" page" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" text" ,"fld" :" row" ,"val" :" APPLE ][ " ,"idx" :" 0" ,"addr" :" 0400" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" text" ,"fld" :" row" ,"val" :" ] " ,"idx" :" 1" ,"addr" :" 0480" }
5.8 뱅크/슬롯 정보 (sec: "bank")
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" auxread" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" auxwrite" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" 80store" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" altzp" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" page2" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" hires" ,"val" :" 1" }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" page_pri" ,"val" :" 0" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" page_sec" ,"val" :" 0" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" page_pri" ,"val" :" 1" ,"idx" :1 }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" expanded" ,"val" :" 1" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" io" ,"sec" :" port" ,"fld" :" read" ,"val" :" FF" ,"addr" :" A0" }
{"emu" :" msx" ,"cat" :" io" ,"sec" :" port" ,"fld" :" write" ,"val" :" 00" ,"addr" :" A1" }
6.2 소프트 스위치 (sec: "switch") - AppleWin
{"emu" :" apple" ,"cat" :" io" ,"sec" :" switch" ,"fld" :" 80store" ,"val" :" 1" ,"addr" :" C000" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" switch" ,"fld" :" ramrd" ,"val" :" 0" ,"addr" :" C002" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" switch" ,"fld" :" ramwrt" ,"val" :" 0" ,"addr" :" C004" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" slot" ,"fld" :" type" ,"val" :" Disk II" ,"idx" :6 }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" slot" ,"fld" :" active" ,"val" :" 1" ,"idx" :6 }
{"emu" :" msx" ,"cat" :" io" ,"sec" :" slot" ,"fld" :" device" ,"val" :" ROM" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" io" ,"sec" :" slot" ,"fld" :" primary" ,"val" :" 0" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" io" ,"sec" :" slot" ,"fld" :" secondary" ,"val" :" 0" ,"idx" :0 }
6.4 어나운시에이터 (sec: "ann") - AppleWin
{"emu" :" apple" ,"cat" :" io" ,"sec" :" ann" ,"fld" :" state" ,"val" :" 0" ,"idx" :" 0" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" ann" ,"fld" :" state" ,"val" :" 1" ,"idx" :" 1" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" ann" ,"fld" :" state" ,"val" :" 0" ,"idx" :" 2" }
{"emu" :" apple" ,"cat" :" io" ,"sec" :" ann" ,"fld" :" state" ,"val" :" 0" ,"idx" :" 3" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" id" ,"val" :" apple2e" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" name" ,"val" :" Enhanced Apple //e" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" type" ,"val" :" Apple2e" }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" id" ,"val" :" Panasonic_A1F" }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" name" ,"val" :" Panasonic FS-A1F" }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" type" ,"val" :" MSXturboR" }
7.2 실행 상태 (sec: "status")
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" status" ,"fld" :" mode" ,"val" :" running" }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" status" ,"fld" :" mode" ,"val" :" paused" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" status" ,"fld" :" powered" ,"val" :" 1" }
7.3 비디오 모드 (sec: "video")
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" video" ,"fld" :" mode" ,"val" :" hires" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" video" ,"fld" :" page" ,"val" :" 1" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" video" ,"fld" :" mixed" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" bp" ,"fld" :" hit" ,"val" :" 1" ,"addr" :" C600" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" bp" ,"fld" :" add" ,"val" :" exec" ,"addr" :" D000" ,"idx" :1 }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" bp" ,"fld" :" remove" ,"val" :" " ,"addr" :" D000" ,"idx" :1 }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" bp" ,"fld" :" enabled" ,"val" :" 1" ,"idx" :0 }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" watch" ,"fld" :" read" ,"val" :" A9" ,"addr" :" 0300" }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" watch" ,"fld" :" write" ,"val" :" FF" ,"addr" :" 0300" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" LDA #$20" ,"addr" :" C600" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" opcode" ,"val" :" A9" ,"addr" :" C600" }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" LD A,#FF" ,"addr" :" 0000" }
8.4 역어셈블 (sec: "disasm") - AppleWin
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" disasm" ,"fld" :" line" ,"val" :" LDA #20" ,"addr" :" C600" ,"idx" :" 0" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" disasm" ,"fld" :" line" ,"val" :" STA 00" ,"addr" :" C602" ,"idx" :" 1" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" disasm" ,"fld" :" line" ,"val" :" JSR C700" ,"addr" :" C604" ,"idx" :" 2" }
8.5 CPU 스택 (sec: "stack" in cpu 카테고리) - AppleWin
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" stack" ,"fld" :" sp" ,"val" :" F8" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" stack" ,"fld" :" depth" ,"val" :" 7" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" stack" ,"fld" :" val" ,"val" :" C6" ,"addr" :" 01F9" ,"idx" :" 0" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" stack" ,"fld" :" val" ,"val" :" 00" ,"addr" :" 01FA" ,"idx" :" 1" }
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" hello" ,"val" :" AppleWin 1.30.0" ,"ver" :" 1.0" ,"ts" :1704067200000 }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" hello" ,"val" :" openMSX 19.1" ,"ver" :" 1.0" ,"ts" :1704067200000 }
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" goodbye" ,"val" :" " ,"ts" :1704067300000 }
9.2 에러 메시지 (sec: "error")
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" error" ,"fld" :" message" ,"val" :" Invalid address format" }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" error" ,"fld" :" code" ,"val" :" E001" }
9.3 이벤트 알림 (sec: "event")
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" reset" ,"val" :" cold" }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" reset" ,"val" :" warm" }
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" disk" ,"val" :" insert" ,"idx" :1 }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" cart" ,"val" :" insert" ,"idx" :0 }
다음 이벤트 발생 시 즉시 출력:
이벤트
출력 데이터
CPU 명령 실행
cpu.reg.*, cpu.flag.* (변경된 것만)
메모리 접근
mem.read, mem.write
브레이크포인트 히트
dbg.bp.hit
머신 상태 변경
mach.status
I/O 접근
io.port, io.switch
클라이언트 요청 또는 설정에 따라 주기적으로 전체 상태 전송:
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" snapshot" ,"val" :" start" ,"ts" :1704067200000 }
... (전체 상태 데이터) ...
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" event" ,"fld" :" snapshot" ,"val" :" end" ,"ts" :1704067200100 }
클라이언트에서 에뮬레이터로 명령을 보낼 수 있는 선택적 기능:
{"cmd" :" subscribe" ,"args" :[" cpu" ," mem" ]}
{"cmd" :" unsubscribe" ,"args" :[" io" ]}
{"cmd" :" snapshot" ,"args" :[]}
{"cmd" :" setbp" ,"args" :[" C600" ," exec" ]}
{"cmd" :" delbp" ,"args" :[" 0" ]}
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" resp" ,"fld" :" ok" ,"val" :" subscribe" }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" resp" ,"fld" :" error" ,"val" :" unknown command" }
단일 TCP 포트에서 여러 클라이언트 연결 허용
각 연결에 대해 독립적인 스트림 유지
비동기 출력 (에뮬레이션 성능에 영향 최소화)
모든 출력 라인에 emu 필드 필수 포함
버퍼링 및 배치 전송 지원 (옵션)
JSON Lines 파서 사용 (줄 단위 파싱)
emu 필드로 에뮬레이터 구분 (1차 필터링)
cat 필드로 카테고리 필터링
sec, fld 필드로 세부 처리
타임스탬프 기반 순서 정렬 (필요시)
송신 버퍼: 64KB
수신 버퍼: 16KB
최대 라인 길이: 4KB
새로운 에뮬레이터 추가 시:
고유한 emu 값 정의 (예: c64, nes, sega)
해당 CPU 레지스터, 플래그 문서화
기존 클라이언트는 unknown emu 값 무시 또는 처리
고유한 cat 값 정의
해당 sec, fld 문서화
기존 클라이언트는 unknown 카테고리 무시
hello 메시지의 ver 필드로 프로토콜 버전 식별
하위 호환성 유지 (필드 추가만, 삭제 없음)
{"emu" :" apple" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" hello" ,"val" :" AppleWin 1.30.0" ,"ver" :" 1.0" ,"ts" :1704067200000 }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" type" ,"val" :" Apple2e" }
{"emu" :" apple" ,"cat" :" mach" ,"sec" :" status" ,"fld" :" mode" ,"val" :" running" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" C600" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" a" ,"val" :" 00" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" x" ,"val" :" 00" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" y" ,"val" :" 00" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" sp" ,"val" :" FF" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" LDA #$20" ,"addr" :" C600" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" a" ,"val" :" 20" }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" z" ,"val" :" 0" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" read" ,"fld" :" byte" ,"val" :" 20" ,"addr" :" C601" }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" STA $00" ,"addr" :" C602" }
{"emu" :" apple" ,"cat" :" mem" ,"sec" :" write" ,"fld" :" byte" ,"val" :" 20" ,"addr" :" 0000" }
{"emu" :" msx" ,"cat" :" sys" ,"sec" :" conn" ,"fld" :" hello" ,"val" :" openMSX 19.1" ,"ver" :" 1.0" ,"ts" :1704067200000 }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" info" ,"fld" :" type" ,"val" :" MSX2" }
{"emu" :" msx" ,"cat" :" mach" ,"sec" :" status" ,"fld" :" mode" ,"val" :" running" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" 0000" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" af" ,"val" :" F3A0" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" bc" ,"val" :" 0100" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" sp" ,"val" :" F380" }
{"emu" :" msx" ,"cat" :" mem" ,"sec" :" bank" ,"fld" :" page_pri" ,"val" :" 0" ,"idx" :0 }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" LD A,#FF" ,"addr" :" 0000" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" af" ,"val" :" FF00" }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" flag" ,"fld" :" s" ,"val" :" 1" }
14.3 혼합 스트림 예제 (다중 에뮬레이터)
클라이언트가 여러 에뮬레이터에 연결된 경우:
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" C600" ,"ts" :1704067200001 }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" 0100" ,"ts" :1704067200002 }
{"emu" :" apple" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" JSR $C700" ,"addr" :" C600" ,"ts" :1704067200003 }
{"emu" :" msx" ,"cat" :" dbg" ,"sec" :" trace" ,"fld" :" exec" ,"val" :" CALL #8000" ,"addr" :" 0100" ,"ts" :1704067200004 }
{"emu" :" apple" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" C700" ,"ts" :1704067200005 }
{"emu" :" msx" ,"cat" :" cpu" ,"sec" :" reg" ,"fld" :" pc" ,"val" :" 8000" ,"ts" :1704067200006 }
순서
필드
설명
1
emu
에뮬레이터 식별자
2
cat
카테고리
3
sec
섹션
4
fld
필드명
5
val
값
필드
사용 시점
ts
이벤트 시간 추적 필요시
idx
배열/슬롯 인덱스
addr
메모리/I/O 주소
len
데이터 길이
ver
프로토콜 버전 (hello 메시지)
버전
날짜
변경 내용
V01
2024-12-29
초안 작성 - 모든 라인에 emu 필드 필수 포함
V01.1
2026-01-04
65501-65504 호환성 확장: Zero Page/Stack 덤프, 텍스트 화면, 어나운시에이터, 역어셈블, CPU 스택 정보 추가
AppleWin Debug Server: Emulator/AppleWin/source/debugserver/
openMSX Debug HTTP: Emulator/openMSX/src/debugger/