2016년 9월 20일 화요일

[WIN] VS Code에서 MSX 어셈블리를 색칠(!)

혹시 Visual Studio Code 쓰시는 분 계세요?

코딩 용 에디터인데요, 저는 쓴지 1년 가까이 되어가는 듯 합니다.

보통 VS Code라고 부르더라구요.

안써보신 분은 한번 깔아보셔도 괜찮을 듯 합니다.



일단 본론으로 넘어가서~ ㅋ

대부분 에디터가 그렇지만...

VS Code에서는 언어 익스텐션이라는걸  추가하게 되면, 해당 언어에 대해 키워드 색칠놀이(?)을 할 수 있습니다.

저야 뭐~ 이걸로 MSX 용 코드 작업할 때 쓰고 있는데요. ㅎ.ㅎ

Z80 어셈 명령어와 MSX BIOS의 엔트리 심볼, 워크에어리어 변수들을 등록해놨어요.


요거 익스텐션을 야매(!)로 만들어서 쓰고 있었는데,

이걸 마켓플레이스에 등록하는 방법이 의외로 간단하더라구요.

(뭔가 복잡한 계정 설정이 필요할까봐 쳐다보지도 않았는데..ㅋ)


그.래.서.

작업한걸 VS Code 마켓플레이스에 올렸습니다. ㅎ.ㅎ


아래처럼 VS Code의 익스텐션(확장) 메뉴에서 msx로 검색하면 나옵니다.

README 템플릿를 대충 편집하다보니, 요구사항 도움말이 안지워지고 남아있네요.ㅋ





아까 저녁에 올렸는데, 벌써 두분이 받아가셨습니다. MSX 개발자에게 경의를 표합니다!

익스텐션 설치 후, VS Code를 재실행하면 동작합니다.


파일 확장자는 GEN, MAC, INC 세개만 넣었어요.

MSX 용 어셈 소스를 열어보면 아래처럼 키워드에 이쁘게 색칠되어서 나옵니다.


참고로 아래 코드는 폰트팩 소스 일부분인데, Cobalt 컬러 테마를 쓸 때의 색깔입니다. 푸르딩딩~~~





결론은,

VS Code로 MSX 어셈 코딩하시는 분 있으시면 받아서 쓰시라는 얘기지용~ ㅎ.ㅎ


그럼 즐거운 MSX 되세요!


PS. 20160921 업뎃
아이콘 추가하고 디스플레이 이름 바꿨습니다. extension 이름은 asm-msx 그대로입니다.
그리고 키워드는 대소문자 구분하지 않도록했습니다. ㅎ.ㅎ




2016년 9월 18일 일요일

MMC/SD Drive V3 제작 #12 - Hybrid 모드 (SUBROM + MegaRAM)

일요일을 맞아, MMC/SD Drive V3의 기능을 확장해보았습니다.


MMC/SD Drive V3 내부에는 플래쉬롬(SUBROM)과 SRAM이 함께 들어있습니다.

기본 H/W는 SUBROM 1024KB + SRAM 512KB가 들어있구요,

SRAM을 확장하면, SUBROM 1024KB + SRAM 1024KB 상태가 됩니다.


만약 롬 이미지를 구동는 경우,

MegaRAM 또는 SUBROM 모드를 쓰면 최대 1024KB의 롬 파일을 로드할 수 있습니다.


대부분 MSX 롬은 512KB 이하의 크기이지만, 가끔 2048KB나 되는 대용량 롬을 볼 수 있습니다.

Pointless Fighting, 수퍼 게임 월드(126합팩) 등이요. (두개 뿐이었나...ㅋ)


이런 롬들을 SUBROM과 SRAM에 나눠서 다운로드 후 구동하는 기능을 추가하게 되었습니다.

물론 기존에도 전혀 불가능하지는 않았어요.

사용자가 직접 파일을 쪼개서 다운로드해서 구동하는 방법도 있었습니다.


하지만 이 방법으로는 SCC 매퍼만 구동가능하다는 단점이 있구요.

결정적으로 귀찮아요.

그래서 한방에 동작하는 모드로 구현했습니다.


SUBROM과 SRAM을 함께 쓰니까, 이름은 Hybrid 모드라고 지었구요~ ㅋ

MMCSD.COM 프로그램으로 ROM 실행 시, 사용자가 선택해서 모드전환을 할 수 있습니다.

롬 용량이 1024KB 넘는 경우만 쓸 수 있어요.


아래는 2048KB 용량의 Pointless Fighting 롬을 다운로드 하는 모습입니다.

초반 1024KB는 SUBROM에 들어가겠구요. 후반 1024KB는 SRAM(MegaRAM)으로 다운로드됩니다.





V3의 SRAM을 확장(1024KB)한 경우만 2048KB 롬을 실행할 수 있구요.

V3 기본 상태의 SRAM(512KB)인 경우는 1536KB 롬까지 실행 가능합니다.

수퍼 마리오 월드(1304KB)를 다운로드 할 수 있겠네요.



그럼, 실제 동작하는 영상을 보시겠습니다요~

Pointless Fighting -> Super Mario World -> Super Game World 순으로 실행합니다.

PAC-V 카트리지도 함께 출연했어요. ㅋㅋ





그럼, 즐거운 일요일 밤 되세요!!

MMC/SD Drive V3 제작 #11 - 게임 내의 카세트 세이브/로드

지난번엔 카세트테입 이미지로 된 게임을 로드해봤었지요?

이번엔 일반 롬팩 게임 내에서 카세트테입에 데이터를 세이브/로드하는 것을 구현해봤습니다.


GameRunner 모드 용 BIOS에 카세트 루틴으로 구현되었구요.

게임 내에서 카세트에 저장하게 되면, MMC/SD Drive의 SRAM을 이용하여 데이터를 저장합니다.

CTRL + ESC 눌러서 게임을 강제종료하게 되면, 디스크에 파일 형태로 저장됩니다.


게임에서 세이브 데이터를 크게 필요로하진 않으니까, 테입 용량은 16KB 정도로 제한했습니다.

뭐, 이정도면 충분하겠죠? ㅋ


생성된 CAS 파일은 나중에 ROM 파일을 로딩할 때, 자동으로 함께 로딩됩니다.

예) CASTLE.ROM, CASTLE.CAS 두개 파일이 존재하는 경우,

    MMCSD CASTLE.ROM /G 명령으로 실행하면, CASTLE.CAS 파일도 함께 로딩됨.


아래 사진처럼 되겠습니다.





음... 근데 지난번 소개드린, 카세트 게임 로딩 방법과의 차이가 이해되시나요?

이해하셨으리라 믿고 넘어갑니다요. ㅎ.ㅎ



카세트 테입을 쓰다보면 테입을 되감아야하는 경우가 생깁니다.

게임 중에서는 CTRL + BS 를 누르면, 테입 되감기가 됩니다.

물론 게임을 종료하고 다시 실행하면, 테입이 맨처음 위치로 시작하겠구요.



실제로 잘 동작하는지 봐야겠죠?

메탈기어와 캐슬로 테스트 해봤습니다.


메탈기어의 경우는 세이브/로드 시 이름을 입력하도록 되어있습니다.

로드할 때 보니, 해당 이름의 데이터가 나올 때 까지 자동으로 SKIP 하더라구요. ㅎ.ㅎb

테입을 맨 앞으로 되감더라도 별로 불편하지 않았습니다. 카세트 에뮬이 워낙 빠르다보니~ㅋ





캐슬의 경우는 여러번 세이브 했을 때, 원하는 데이터를 로딩하려면 조금 귀찮았습니다.

테입 로드를 맘대로 할 수 있는게 아니라, 타이틀 화면에서만 로드하도록 되어있더라구요.

로드 했는데 원하는 데이터가 아니라면,

F2 눌러서 게임오버 후 F3 눌러서 다시 로드... 이걸 반복해야합니다.



그럼, 실제 동작하는 모습을 영상으로 보시지요~ ㅎ.ㅎ





그럼, 즐거운 주말 되세요!!