Repository navigation
v0.0.165
rePIU v0.0.165
이전 릴리스 v0.0.164 이후의 변경입니다. Linux 이식 3단계로, 게임이 Linux에서 실행되고
화면이 나옵니다. v0.0.163이 런처까지였고 그때는 롬셋을 고르면 "실행 엔진이 아직 Linux에
없다"고 알리고 끝났습니다.
Linux에서 게임이 돕니다
- 기본
dynamicAOT backend가 Linux에서 동작합니다. Win32 메모리 호출 62곳을 3b 가상
메모리 계층으로 옮기고, 없던 것 하나 — 명령 캐시 flush — 를 만들었습니다. 캐시 배치,
동적 실행, 인라인 패치, 페이지 retirement가 모두 Linux에서 돕니다. legacybackend는 명령 단위로 단일 스텝하므로 기동 자산 디코드를 끝내지 못했습니다.
화면이 기다리고 있던 것이 이 항목이었습니다.- WSLg
pumpit1기준 약 45.1초에 첫 버퍼 스왑, 약 51.7초에 69,263/307,200 non-black 픽셀,
이후 스왑이 계속됩니다. 실제 게임 화면이 나오는 것은 사람이 확인했습니다.
종료가 됩니다
- 종료를 요청받은 실행이 스스로 끝납니다. 이전에는 SDL이 SIGTERM을 종료 이벤트로 바꾼
뒤pthread_join이 영원히 기다려, 종료를 요청받은 실행 자체가 매달렸습니다. - 종료 블록의 Win32 전용 호출 넷이
InterruptHostThread한 번으로 수렴했습니다. 회수에
성공하면 정상 종료하고, 거절되면 기다리지 않고 내려갑니다. - 코어 덤프 없이 끝납니다. 회수를 거절당한 갈래가 게스트 스레드가 아직 필요로 하는 폴트
핸들러를 떼고 있었습니다. 이제 그 갈래는 정리를 하지 않고 곧바로 끝냅니다. 60초 예산 6회
기준 SIGTRAP 2회 → 0회.
알려진 것
- 속도가 아주 느립니다. Linux 프레임률은 아직 측정된 적이 없고, 다음 작업이 그것입니다.
- 무엇이 그려지는지를 Windows와 프레임 단위로 대조한 적은 없습니다.
rePIU v0.0.165
Changes since v0.0.164. Stage 3 of the Linux port: the game runs on Linux and puts a picture on
the screen. v0.0.163 reached the launcher, which at the time answered a chosen ROM set by saying
the execution engine was not on Linux yet.
The game runs on Linux
- The default
dynamicAOT backend works on Linux. Its 62 Win32 memory calls moved onto the 3b
virtual-memory layer, and the one thing that did not exist yet -- an instruction-cache flush --
was built. Cache placement, dynamic execution, inline patching and page retirement all run. - The
legacybackend single-steps every instruction and never finished the start-up asset decode.
This was the item the screen was waiting on. - On WSLg
pumpit1: first buffer swap at about 45.1 seconds, 69,263 of 307,200 non-black pixels at
about 51.7 seconds, and swaps continuing after that. A person has confirmed an actual game
screen appears.
Shutdown works
- A run asked to stop stops by itself. Before this, SDL turned SIGTERM into a quit event and
pthread_joinwaited forever, so the run asked to stop hung instead. - The shutdown block's four Win32-only calls converged onto one
InterruptHostThread. A successful
recovery ends the run normally; a refused one goes down without waiting. - And it ends without a core dump. The refused arm had been removing a fault handler the guest
thread still needed. That arm now does no cleanup and ends immediately. Across six
60-second-budget runs: two SIGTRAPs became zero.
Known
- It is very slow. The Linux frame rate has never been measured, and that is the next task.
- What is drawn has never been compared frame by frame against Windows.