이 소스는 gngeo-0.7 버전에 기반한것으로 모든 라이센스는 gngeo의 것을 그대로 따릅니다.

SDL 로 만들어진 원본을 flascc에서 컴파일이 가능하도록 최소한의 수정을 하였습니다.

드라이버와 설정, 세이브데이터같은 시스템 파일들은 flascc의 vfs에서 동작하도록 수정되었고,

memalloc 을 memory.h 에서 stdlib.h 으로 교체하였습니다.

FP에서 구동을 위한 Console.as 가 추가되어 main loop 로직이 일부 변경되었습니다.


as3gngeo-0.7.zip

gngeo.zip


컴파일하기

1. flascc sdk에 포함된 genfs를 이용하여 vfs 폴더를 .as 파일로 추출한다.

FLASCC=~/flasccpath/sdk

PATH=~/flasccpath/sdk/usr/bin:$PATH


genfs vfs testvfs

2. 생성된 .as 파일을 .abc 로 컴파일한다. 이는 나중에 gngeo 파일들과 함께 링크하게된다. 만약 vfs 폴더에 스스로 게임 롬파일을 넣어두었다면 큰 용량 때문에 자바 컴파일러가 heap 에러를 발생한다. 이럴 경우를 대비해 heap의 크기를 늘려주는 비표준 옵션을 추가.

java -Xmx1G -jar $FLASCC/usr/lib/asc2.jar -merge -md -import $FLASCC/usr/lib/builtin.abc -import $FLASCC/usr/lib/playerglobal.abc -import $FLASCC/usr/lib/BinaryData.abc -import $FLASCC/usr/lib/ISpecialFile.abc -import $FLASCC/usr/lib/IBackingStore.abc -import $FLASCC/usr/lib/IVFS.abc -import $FLASCC/usr/lib/InMemoryBackingStore.abc -import $FLASCC/usr/lib/PlayerKernel.abc testvfsRootFSBackingStore.as -outdir . -out VFS

3. Console.as 를 .abc 로 컴파일시, 위에서 생성된 .abc 파일을 첨부한다.

java -Xmx1G -jar $FLASCC/usr/lib/asc2.jar -merge -md -import $FLASCC/usr/lib/builtin.abc -import $FLASCC/usr/lib/playerglobal.abc -import $FLASCC/usr/lib/BinaryData.abc -import $FLASCC/usr/lib/ISpecialFile.abc -import $FLASCC/usr/lib/IBackingStore.abc -import $FLASCC/usr/lib/IVFS.abc -import $FLASCC/usr/lib/InMemoryBackingStore.abc -import $FLASCC/usr/lib/PlayerKernel.abc -import VFS.abc Console.as -outdir . -out Console

4. 에뮬레이터 소스(./src)를 컴파일한다.

cd src

sudo make

Makefile 이 이미 Configure를 통해서 생성해놓은 상태입니다. 옵션은 MAMEZ80 와 GENERATOR68K 를 사용하며 i386 asm을 꺼놓았습니다.

뭐... 이 옵션이 마음에 안드는분은 직접 설정해서 컴파일 해보시길.

위의 옵션은 모두 ASM을 사용하지 않기위함이었는데.. 이때문에 super sai같은 이펙트들을 사용할 수 없습니다.

5. 위에서 컴파일하고 남은 .o 파일들을 모아서 .swf로 링크시키는 작업이 남았습니다.

gcc  -I$FLASCC/usr/include/SDL -D_GNU_SOURCE=1 -DUSE_GENERATOR68K -DUSE_MAMEZ80 -O3 -Wall -Wno-unused -funroll-loops -ffast-math -g  fileio.o pd4990a.o streams.o video.o profiler.o main.o star_interf.o memory.o mamez80_interf.o raze_interf.o timer.o frame_skip.o messages.o screen.o emu.o unzip.o neocrypt.o sound.o generator68k_interf.o debug.o state.o conf.o transpack.o pbar.o driver.o list.o gui_interf.o videogl.o cyclone_interf.o gp2x.o drz80_interf.o menu.o effect/libeffect.a blitter/libblitter.a ym2610/libym2610.a generator68k/libgenerator68k.a mamez80/libmamez80.a    -lSDL -lz -lm  -L$FLASCC/usr/lib -Wl,-rpath,$FLASCC/usr/lib -lSDL -lm -lvgl ../VFS.abc $FLASCC/usr/lib/AlcVFSZip.abc -symbol-abc=../Console.abc -emit-swf -swf-version=17 -swf-size=704x512 -o gngeo.swf

문제없이 링크가 되었다면 gngeo.swf 생성이 되었으니 플래시플레이어를 통해서 실행을 하거나 브라우져로 실행을 하면 끝.


WRITTEN BY
buzzler

,

*바이오스파일과 롬파일이 있어야 에뮬레이션이 가능합니다*

유니바이오스를 내장하고 있지만 그 외 저작권 문제가 있는 sfix.sfx000-lo.lo 파일이 필요합니다.

구글에서 검색하면 쉽게 찾을 수 있으니 그건 이용자의 몫.

그리고 게임 롬파일이 있어야 합니다. 기본적으로 gngeo 에뮬레이터와 호환이 가능한 롬이라면 모두 구동이 가능합니다만 유니바이오스라서 생기는 차이점들이 있을 수 있습니다.



how to use

  1. BIOS 버튼을 클릭하여 sfix.sfx 파일과 000-lo.lo를 선택하고 확인버튼을 클릭. 로드가 완료되면 화면에 선택된 파일이 로드되었다는 메시지가 나옵니다.
  2. ROM 버튼을 클릭하여 게임 롬파일을 선택하고 확인버튼을 클릭. BIOS버튼과 같이 메시지가 출력되며 문제가 없으면 START버튼이 보입니다.
  3. START버튼을 클릭하고 기다린다..

key mapping

1P

coin : 3

start : 1

A : z

B : x

C : a

D : s

arrow key



WRITTEN BY
buzzler

,

neocd와 gngeo를 번갈아가며 삽질을 거듭하면서 좌절을 반복하던 찰나에 등장한 FlasCC 가 SDL 라이브러리와 zlib 등을 내장하고 1.0 버전의 배포가 시작되어 긴급 개발 방향을 선회하였습니다. 약 2년전 gngeo 0.7 소스를 alchemy로 포팅해놓고 하드를 날려먹는 어이없는 실수를 했던 터라 팠던 곳을 또 파는 삽질의 연속.

퇴사후 독립게임 개발에 열중하면서 한편으론 서버를 우분투12.4로 바꾸고 한동안 커맨드라인에 익숙해져 있던 터라 이번 포팅에 큰 도움이 된듯합니다. 지금까지 우분투를 쓰면서 하라는대로 해도 안되는일이 태반이었는데 돌이켜 생각해보면 kr.ubuntu 저장소가 뻑난탓에 패키지들 설치가 원활하지 않아서 그랬던것 같네요.

또하나 이번 포팅을 하면서 놀라웠던 점이 있는데.. SSH로 서버에 접속하고 서버단에서 gngeo를 컴파일하고 실행까지 하면 SSH 터미널 상에서 네오지오 에뮬레이터가 구동이되는 놀라움을 경험할 수 있었다는 사실. 이바닥에선 흔한일인지 어떤지 모르겠지만 오색 찬란한 아스키코드로 네오지오 게임을 렌더링하는 놀라움을 보고 감탄하지 않을 수 없었습니다. 아스키 렌더러 만든분께 존경을 표하는바.

이만 각설하고 스크린샷 첨부.






포팅을 수월하게 하기위해서 M68K 소스는 Generator68K 로 하고 Z80 소스는 MAMEZ80 으로 컴파일. 덕분에 속도저하가 조금 생긴듯합니다만 사실 이 부분 때문에 생기는 프레임드랍은 전혀 없고, 오히려 as3 단계에서 키보드나 마우스 입력 처리에 따른 드랍이 비번한편. 입력문제를 깔끔하게 개선해야할듯.

VFS 에 첨부할 파일용량이 살짝 큰 경우 .as -> .abc 컴파일시 에러가 생겨서.. .swf 파일에 롬까지 같이 구워서 돌리려면 저용량 롬만 가능할 것이고 그 외 외부 저장소에서 따로 롬을 로드한다면 스크린샷과 같이 용량이 많더라도 구동이 가능하도록 바꿔놓았습니다. 고용량 파일을 VFS에 담는 과정에서 생기는 에러는.. 롬파일을 통으로 String으로 as3에 임베딩해서 저장해놓고 그걸 컴파일 하는 과정에서 JVM이 메모리 방전으로 뻗어버리는 것으로 파악됨.

사운드가 아직 안나오고 있는데... 이유는 지금 전혀 파악된바가 없고 앞으로 비벼가며 손을 봐야할 부분입니다.






WRITTEN BY
buzzler

,

지금까지 define같은 매크로는 const로 해결하거나 함수로 만들어서 해결하려고 발악해왔지만, mc68k 에뮬레이션에서는 그것마저도 한계에 다다릅니다. 전처리가 아니면 해결할 수 없는 예외상황이 너무 많아서 일단 소스차원의 다이렉트 포팅은 힘들겠다는 판단. 속도문제도 생기고하니 일단 다른 방법을 찾아야했달까..

참고로.. as3에는 매크로로 쓸만한 그 어떤것도 제공하지 않습니다. 툴에서도 그렇고. 아마 일부 Flex에서 가능한 부분이 있는듯 한데 이제와서 Flex 라이브러리를 만들 생각은 없으니까 그 마저도 아웃오브안중.

이런 부분을 해결하고자.. c에서 전처리 이후의 소스로 포팅을 시도하고있습니다. gcc에서 -E 옵션으로 preprocessing  까지만 돌리고 compile 이나 linking은 패스. 그 결과 macro가 모두 사라지고 inline 함수들이 빼고하게 차오른 상태의 소스를 얻을 수 있었습니다. 대신 그만큼 정리도 안되고 지저분해지는 단점이 생기지만 일단 해결하기 어려운 많은 문제가 이로써 해결. 이렇게 단순한 방법을 몰라서 고생도 많이 했습니다. 

부작용이라면.. 이렇게 하고나니 지금까지 포팅했던 수많은 소스도 다시 고쳐야 한다는 압박감이 생기기 시작.




WRITTEN BY
buzzler

,
파일 IO와 관련된 부분을 마무리하고 간단히 테스트 완료. video나 memory 부분을 갖춰좋고 cpu를 건드리려고 생각해봤으나 일단 큰 장벽으 하나 넘어야 마음이 놓일것 같아서 MC68000 구현을 먼저할까 합니다.
스을쩍 코드를 봤는데 미칠듯한 OPCODE 가득. 지금까지 수많은 포인터는 잘 참아 왔는데 어셈블리 코드는 어찌해야할지 조금 난감한 상황. 어셈블리코드를 에뮬레이션하기위한 어셈블리코드를 다시 에뮬레이션 하거나 아니면 완전히 새로..

WRITTEN BY
buzzler

,

이미 오래전에 만들어진 포멧이라 자료도 많고 예제도 많아서 쉽게쉽게 파서를 구현했습니다.  다만.. .iso에는 오디오 트랙이 포함되지 않기 때문에 게임에서 BGM재생을 위해 필요한 CDDA 기능은 .mp3를 따로 추가하거나 폴더를 지정하는 방식으로 에뮬레이팅 해야겠음.

만들면서 생각난 사실인데.. 다른 에뮬레이터들은 게임롬과 바이오스롬의 덤프/배포가 불법이라서 완전무결한 서비스를 만드는데 걸림돌이 항상 있어왔는데..  네오지오-시디는 컴퓨터의 시디롬에 정품 소프트를 넣고 에뮬레이셔닝하면 그런 문제가 사라지고, 바이오스롬도 개발자들이 직접 만든 유니버셜 바이오스를 사용하면 법의 테두리 안에서 서비스도 가능하겠다 싶네요.

중요한건

할 생각이 없다는거. 단지 가능하다 안하다의 이야기일뿐.




'programming > as3neocd' 카테고리의 다른 글

C 에서 actionscript 로 변환시 매크로 문제.  (0) 2012.06.20
MC68000 에뮬레이셔닝  (0) 2012.06.16
as3neocd 레포지토리 생성  (0) 2012.06.07
참고자료 모음  (0) 2012.06.07
NeoCD/SDL flash port  (1) 2011.02.19

WRITTEN BY
buzzler

,

라이센스들 읽어볼 겨를이 없어서 일단 무시하고 달리는 중 입니다. 완성이 되면 그때 읽어보고 공개를 하던지 말던지 할 생각. 완성이 안되면 말고.

초기 목표는 alchemy 포트를 노렸었고 실제 swc컴파일도 성공하긴 했는데 이유를 알수없는 state error?? 라는 상황까지.이에 질세라 실수로 그간 포팅하던 소스도 다 날려먹고 잊혀진 프로젝트가 됐습니다만, as3gb리뉴얼을 성공적으로 한 이후 자신감이 붙어서 직접 네이티브 코드로 개발을 계획하고 다시 시작헀습니다.
SDL 기반으로 gcc로 만들어낸 원본이라 한계가 예상되지만 일단 그래도 고. 고고. (아아.. 포인터로 기교 부린 코드는 정말...)

데이터는 ISO9660 로더를 만들어서 쓰면 될것같고.. CDDA는 .swf만으로는 디바이스 접근 방법이 없을듯 하니 MP3로 리핑된 트랙을 가상으로 CDDA구축해야 할 것같은 느낌. 아직 찾아보진 않았는데 아마도 그렇지 않을까 합니다. 현제 인터페이스 만들어놨고 어플리케이션 소스중 cdrom.* cdaudio.* 는 구현 완료된 상태. 이번 주중에 ISO9660 로더 구현에 돌입!

가장 큰 난관은 CPU인 MC68000 와 코프로세서인 Z80, YM2610 의 포팅인데.. 이 부분은 아직 발도 들이놓지 않은 상태. 갈 길이 천리입니다.

'programming > as3neocd' 카테고리의 다른 글

C 에서 actionscript 로 변환시 매크로 문제.  (0) 2012.06.20
MC68000 에뮬레이셔닝  (0) 2012.06.16
ISO9660 파서 구현 완료  (0) 2012.06.13
참고자료 모음  (0) 2012.06.07
NeoCD/SDL flash port  (1) 2011.02.19

WRITTEN BY
buzzler

,

H/W spec.

NeoGeoProgrammersGuide.pdf


개발 메뉴얼

NeoGeoPM.pdf


ISO 9660 spec

The ISO 9660 FileSystem.pdf


NEOCD/SDL 컴파일 환경 구축

http://ubuntu-gamedev.wikispaces.com/How-To+Setup+SDL+for+games+development

'programming > as3neocd' 카테고리의 다른 글

C 에서 actionscript 로 변환시 매크로 문제.  (0) 2012.06.20
MC68000 에뮬레이셔닝  (0) 2012.06.16
ISO9660 파서 구현 완료  (0) 2012.06.13
as3neocd 레포지토리 생성  (0) 2012.06.07
NeoCD/SDL flash port  (1) 2011.02.19

WRITTEN BY
buzzler

,
가정용 콘솔인 네오지오 CD의 에뮬레이터, NeoCD/SDL 를 플래시로 포팅하기 위한 준비중입니다. NeoCD/SDL 은 이름처럼 SDL기반으로 제작되어있구요. 

제한사항은..

 다른 에뮬레이터들과 달리 미디어가 CD인 이유로 플래시에서 직접 CDROM에 접근해서 에뮬레이션 하지는 못할 것 같습니다. 정확히 이야기하자면 CD AUDIO를 사용할 수 없겠네요. 드라이브에 접근하더라도 데이타파일들만 읽어올 수 있으니 립핑된 iso가 아닌 게임 디스크만으로는 PCM 사운드만 들릴것 같습니다.

SDL 라이브러리가 AVM으론 없어요. 사실 이러한 포팅을 위한게 아니라면 있을 필요가 없죠. 그래서 SDL은 alchemy를 통해서 포팅한 버전을 사용할 계획입니다. 아직 초기 단계라 오디오부분은 포팅되어있지 않구요. 그래서 PCM 사운드도 SDL 만으로는 듣기 어렵습니다. 따라서 이번 에뮬레이터 포팅 작업을 하면서 사운드 재생 라이브러리는 직접 만들던지 아니면 일단 오디오를 지원하지 않는 방향으로 개발을 시작해야 할 것 같습니다.

그래픽 관련 필터들도 제외시킬 예정입니다. 화면 크기를 2배로 확장시키는 필터나 스캔라인등등.. 플래시에서 간단히 해결할 수 있기 때문에 굳이 많은 연살을 필요로 하는 방식을 쓰지 않을 계획입니다. 하지만...  2xsai 필터나 2xSalmmx 는 어떻게 해야할지 고민이네요. 뭐 어쨌든 일단 비디오는 1x1 매칭의 실제 픽셀만 뽑아내고 그 이후에 필터를 고민해야겠습니다.

대전 액션이 많은 게임 콘솔인 만큼 조이스틱을 지원해야 할 것 같은데요.. 요즘 조이스틱 드라이버들이 키보드로 키 맵핑을 하기 때문에 크게 무리없이 조이스틱이라도 키보드 입력으로 우회해서 사용할 수 있지 않을까 하네요. 

또한.. 콘솔에 내장된 OS라고 할 수 있는 neocd.bin 롬파일은 아마도 배포 자체가 불법... 그래서 이 파일은 swf 내에 임배드 시키기엔 무리일것 같고, 아마도 초기 시작단계에 url이나 로커파일을 입력 받아서 구동되게끔 만들어야할 것 같습니다.

게임 컬렉션중에 네오지오 CD 용 게임은 고작 9개밖에 없더군요. 이것도 게임을 모았다기 보다는 게임기를 모으면서 같이 덤으로 받은것들 이구요. 그중 7개를 샘플로 테스트하면서 제작할까 합니다. 테스트용 게임은..

The king of fighters '94
용호의권 2
아랑전설 3
천외마경 진전
월화의검사
2020 Super Baseball
World HerosPerfect

입니다.
1개를 제외한 나머지는 전부 격투게임 -_-
뽜이팅!

'programming > as3neocd' 카테고리의 다른 글

C 에서 actionscript 로 변환시 매크로 문제.  (0) 2012.06.20
MC68000 에뮬레이셔닝  (0) 2012.06.16
ISO9660 파서 구현 완료  (0) 2012.06.13
as3neocd 레포지토리 생성  (0) 2012.06.07
참고자료 모음  (0) 2012.06.07

WRITTEN BY
buzzler

,