2022. 3. 9. 01:35

chip 8 emulator의 정리.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

https://github.com/DanTup/DaChip8
https://github.com/kripod/chip8-roms

안녕하세요 오늘은 dosbox의 x86을 보던중, 참고할 에물레이터를 찾아 봤습니다.

chip 8 이란게 있어서 해당 내용을 들여다 봤습니다.

크게 정리할 내용은 없지만, 그래픽 구현 관련되서 어느정도 힌트를 얻을수 있기에 이렇게 글을 적어둡니다.

위의 dachip8 이란 코드를 보게 되면, 그래픽 구현은 picturebox를 이용했습니다.

위의 폼에 picturebox를 상속 시켜서 onpant관련 event만 override 했네요.

이렇게 된 화면에 그래픽 관련 opcode를 읽어서 redrawing 하면 화면 구현이 됩니다.

해당 drawing 코드는 아래와 같습니다.

이렇게 drawing을 하는 로직이 있습니다. 보시면 pointer1에 해당되는 부분이 green/black 2개로만 처리 되기에 위와 같은 인터페이스가 나오는거 같네요.

이런방식의 tick이 while문안에서 계속 돌아가면서 계속 drawing을 하게 됩니다.

sdl,sdl2 역시 위와 같은 방식 구현이 되어 있을꺼 같습니다.

추가로, v에는 변수를 넣어서 사용 합니다.

코인갯수가 위에 변수 V 에서 사용됩니다. misc는 추가 확장된 opcode라고 보시면 됩니다.

위의 벽돌 깨기 로직은 아래와 같이 구현되지 않았나 추측해봅니다.

RAM 어딘가에 32 * 64 의 사이즈의 map을 초기화 한 후, 

이동하는 공의 좌표와 벽돌이 있는 좌표가 겹치는 유무를 확인 한 후

이동하는 공이 벽돌과 겹칠 경우 해당 벽돌의 RAM map에서 0을 제거 시키는 방식인거 같습니다.

이후 draw는 알아서 해당 map의 값을 읽어 들인 후 화면에 표시 하는 형태일껍니다.

감사합니다.