
LiteOS용 Doom
이 디렉터리에는 LiteOS에서 사용할 수 있는 Doom 버전이 들어 있습니다(먼저 LiteOS를 설치하십시오. 설치 방법은 여기에 있습니다).
프로그램을 컴파일하십시오:
$ make
- 그런 다음
doom.elf를 SD 카드에 복사하십시오. DOOM1.WAD를 내려받아 SD 카드에 복사하십시오.
ULX3S의 HDMI 커넥터에 화면을 연결하십시오.
SoC에 접속한 뒤(lxterm /dev/ttyUSBnnn) 프로그램을
실행하십시오:
liteOS> run doom.elf
게임 데모가 화면에 표시됩니다. 아직은 게임을 플레이할 수 없습니다(사용자 입력을 처리하는 루틴이 아직 구현되지 않았습니다).

SSD1331 OLED
Makefile은 doom_oled.elf도 컴파일합니다. ULX3S에
SSD1331이 장착되어 있다면 이 파일을 사용할 수 있습니다(참고: SSD1331
지원을 포함하여 합성했는지 반드시 확인하십시오).
이 프로그램은 SSD1331 OLED 디스플레이에서 실행되며, 320x200 해상도로 렌더링한 뒤 최근접 이웃(nearest neighbor) 방식으로 96x64로 축소합니다.
렌더링 해상도를 더 낮추면 오류와 크래시가 발생합니다. 이 문제는 조사하여 수정해야 하며, 일부 수정된 소스 포트에는 해결책이 있을 수도 있습니다.
동작 원리
이 프로그램은 SoC용 Doom 포트인 mc1-doom을 기반으로 합니다. Doom은 일반적으로 다른 플랫폼으로 포트하기가 매우 쉽습니다(그래서 매우 다양한 기기에서 실행되는 버전을 볼 수 있습니다). 이번 경우에는 두 가지 작업을 해야 했습니다:
LiteX에는 SD 카드에 저장된 파일에 접근하기 위한
libfatfs라이브러리가 있습니다(훌륭합니다!). 하지만 이 라이브러리는 표준open(),read(),close()API와는 다른 API를 사용합니다. 그래서 여기에 얇은 "에뮬레이션 계층"을 만들어야 했습니다.Doom을 새로운 하드웨어로 포트할 때는 사용자와 상호작용하는 부분(그래픽, 사운드, 사용자 입력)을 처리하는 코드를 작성해야 합니다. 그래픽의 경우 해당 코드는 여기에 있습니다. 이 코드는 매우 간단하며, 컬러맵 이미지를 RGB로 변환하기만 합니다(LiteX 프레임버퍼는 컬러맵 모드를 지원하지 않습니다).