게임보이 용 「마법기사 레이어스 2nd - 더 미싱 컬러」 의 개조, 디버깅 기록.
(하단에 조금 개조된 롬파일 올려놓음 / Hack Rom Download below)
- 타이틀 명 : Mahou Kishi Rayearth 2nd - The Missing Colors / 魔法騎士レイアース 2nd
- English Title : Magic Knight Rayearth 2nd - The Missing Colors
난이도가 너무 쉬워서. 개조 시도하게 됨.
* 디버거 사용 에뮬레이터 - BGB
- 홈페이지 : https://bgb.bircd.org
- 장점 : 디버거가 에뮬레이터계에서 최고 수준
- 단점 : 메모리상에서 'Search' 불가능 / (사소함) 코드 복사시, 영역 지정 대신 직접 복사할 길이를 써야 함.
- 메모 : Option 에서 키설정할때 밑에 'Configure Extra Buttions'에 체크하고 설정하면 터보키, 강제세이브or로드 등 키 설정 가능.
(에뮬 Sameboy 도 괜찮다는 평가가 있지만, 텍스트 형식 디버거라 불편함)
* 용어
- 「0x」 : 16진수를 표현하기 위해 수 앞에 붙이는 건데 거의 생략하였음.
■ BGB 디버거 화면 메모
- (디버거 메인창 _ 좌상) 롬파일 내용을 어셈블리어 코드로 변환한 내용이 나와있다.
명령 예) 「ld b, 04 : b에 04 값을 넣는다」
이런 명령들은 구글AI 등에 물어보면 친절히 알려준다.
(만약 한국이 공산화가 되어 중국의 사례처럼 구글이 철수한다면, 불을 얻은 문명에서 불을 잃어버린 문명 수준이 될 지도 모른다는 생각이 듦)
* 참고 : 롬에서 그냥 데이터로 기록된 것들도 명령어로 해석되어 보인다.
- (디버거 메인창 _ 좌하) Memory View 인 듯 한데, 'Bank'가 바뀌면 알려줌.
예) 「WRA1:D230」 이라고 된 부분이, 롬뱅크 1이면 「Rom1:????」라고 나온다. 뱅크가 바뀌면 같은 주소라도 값이 다르다. Rom0 부분은 그대로고 Rom1부분만 'Rom3' 처럼 중간에 바뀌는 듯? (뱅크 스위칭)
- (디버거 메인창 _ 우상) 레지스터들과 값이 나와있음. af, bc(buffer counter), de(destination), hl(high low) 등의 레지스터 값.
오른쪽 z,n,h,c는 플래그 이다. af 레지스터의 f 레지스터의 값들이다.
a레지스터는 누산기로서 모든 연산은 a 를 거치는 듯.
bc레지스터는 반복문 카운터 등에 잘 쓰이는듯.
de는 대상 주소 지정에 잘 쓰이는 듯.
그런데 a, b 이렇게 8비트씩 연산이 되는 경우도 많아서 해석이 어렵다.
- (디버거 메인창 _ 우하) : 스택 표시 창
위에서부터 아래로 쌓이는 것이다. push 명령시 아래쪽으로 늘어나며, pop 명령시 줄어든다.
- (추가 창 _ 좌상) Debug -> Breakpoint 창.
hl 레지스터값이 '07A4' 가 되면 브레이크가 걸리는 조건을 지정한 상태.
문맥때문에 애먹었지만, 결론은 「hl=$07A4」 로 쓰면 됨.
- (추가 창 _ 중간 위) Watchpoint
메모리 뷰에서 우클릭 -> 'Set Watchpoint' 시 되는데, 이곳의 값이 변하면 브레이크 걸림.
- (추가 창 _ 우상) joy (패드 버튼 조작)
디버거 상태에서는 조작이 안되어 이 창을 이용해야 함. 클릭하면 버튼 눌러짐.
* 디버거 단축키 (자주 쓰는것만)
https://bgb.bircd.org/#documentation 에 나와있으나 주로 쓰이는 것들 메모
- F3 : Step Over - 한칸씩 넘어가는데, 함수 'call' 명령은 건너뛴다.
- Shift + F3 : 거꾸로 진행 (★가장 중요 기능. 이거 없으면 못찾는 수준)
- F7 : Step into - 한칸씩 넘어가며, 함수 'call' 명령시 안으로 진입.
- F8 : Step Out - 함수에서 빠져나온다.
- Ctrl + G : 주소로 이동 (아래 Memory View 창에서도 사용가능)
- Ctrl + S : 찾기 (아래 Memory View 창에서는 사용불가...)
* 개조 목적달성 후 결론 : 어셈블리어의 의미를 하나하나 해석하는건 어렵고 무의미하다.
(대충 함수 내용을 AI한테 물어보면 어떤 작업인지 추정해서 알려줌)
값이 어디에 있으며, 그 값이 변경될때 Watchpoint 또는 Breakpoint 건다음, Shift+F3 으로역추적 하는게 좋음.
몇개 안되는 레지스터로 온갖 연산을 수행하므로 헷갈림. 값이 어디로부터 오는지 추적해야.







%EB%B0%98%EB%94%94%EC%BA%A060fps%EC%BA%A1%EC%B3%902.gif)
%EC%98%A4%EC%BA%A060fps%EC%BA%A1%EC%B3%902.gif)

