From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felipe Sanches Subject: Re: MAME emulator is giving incentive to use non-free software Date: Mon, 4 Apr 2016 19:58:43 -0300 Message-ID: References: <20160402041955.484a1cb1@top-laptop> Reply-To: Workgroup for fully free GNU/Linux distributions Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gnu-linux-libre-bounces+gldg-gnu-linux-libre=m.gmane.org@nongnu.org Sender: gnu-linux-libre-bounces+gldg-gnu-linux-libre=m.gmane.org@nongnu.org To: Workgroup for fully free GNU/Linux distributions Cc: guix-devel@gnu.org List-Id: guix-devel.gnu.org The other situation when I was able to benefit from the automatically generated custom debugger UI was when working on emulating the (non-free) game Another World from the 90's. It was originally executed on Amiga computers, so the debugger would let me see the opcodes of the Amiga CPU. But the game was actually originally implemented in a custom virtual machine created by its author, Eric Chahi. I decided to emulate this virtual machine in MAME as if it were a real CPU. The end-result was that I got for the first time the ability to inspect the game (non-free) bytecode at the virtual-machine level by running it on the automatically generated debugger that MAME provides. This opens up a new level of insight on the internal workings of the program that was never possible before with so much ease. A screenshot of that can be seen here: https://twitter.com/juca_gnu/status/686597622417719296 Happy Hacking, Felipe Sanches On Mon, Apr 4, 2016 at 7:47 PM, Felipe Sanches wrote= : > On Mon, Apr 4, 2016 at 7:23 PM, al=C3=ADrio eyng w= rote: >> Felipe Sanches: >>>MAME provides an interactive debugger >> so mame is not just an emulator. >> it is a emulator, disassembler and debugger. >> this is relevant information i can't see in official documentation, than= ks. >> >> it seems even with a obsolete executable format, it can be a >> interesting development environment. >> a interesting development environment is useful in itself and don't >> need free games. >> is there a similar environment to a current architecture? >> can this development environment be used in freedom to develop a game >> from scratch? > > Yes. I did it. > https://github.com/garoa/GunSmoke/tree/master/ > >> this development environment works for all architectures mame supports? > Yes. The debugger dialog is generic and you get it automatically as a > bonus if you implement a new CPU emulation module. This happened with > me a couple times already. I got access to the technical manuals of > the first computer designed and manufactured in Brazil, which was > called "Patinho Feio" (meaning something like "Ugly Duckling > Computer"). I got the printed documentation from the hands of one of > my university professors at the engineering school. He was involved in > the team that developed the pioneer computer back in 1972. > > Based on the documentation (which I published it all on the Internet > Archive with authorization form the original author: > https://archive.org/details/Montador_do_Patinho_Feio__Julho1977) I > wrote a new CPU emulation driver in MAME to emulate the custom > instruction set of this Brazilian machine. Not only emulation works > when loading its sample software - a trivially simple hello-world > extracted from a punched data tape, trivial enough to not even be > copyrightable I guess... - It also allows me to run the code step by > step and to inspect the system memory because the whole debugging > framework was "magically" inherited by the way MAME codebase is > structured. > > So this makes it sure that absolutely every CPU architecture supported > by MAME does also provide such nice interactive debugger. And the list > of supported CPUs is absurdly broad: > > felipe@guarana:~/mame/src/devices/cpu$ ls > 8x300 arm drcbec.cpp drccache.h e0c6200 hd61700 > i860 m6800 mcs51 pdp8 sc61860 sm8500 tms32010 > ucom4 x86emit.h > adsp2100 arm7 drcbec.h drcfe.cpp e132xs hmcs40 > i960 m68000 mcs96 pic16c5x scmp spc700 tms32025 > uml.cpp x86log.cpp > alph8201 asap drcbeut.cpp drcfe.h es5510 hphybrid > ie15 m6805 melps4 pic16c62x score ssem tms32031 > uml.h x86log.h > alto2 avr8 drcbeut.h drcuml.cpp esrip i386 > jaguar m6809 minx powerpc scudsp ssp1601 tms32051 > unsp z180 > am29000 ccpu drcbex64.cpp drcuml.h f8 i4004 > lc8670 mb86233 mips pps4 se3208 superfx tms32082 > upd7725 z8 > amis2000 cop400 drcbex64.h drcumlsh.h g65816 i8008 > lh5801 mb86235 mn10200 psx sh2 t11 tms34010 > upd7810 z80 > apexc cosmac drcbex86.cpp dsp16 h6280 i8085 > lr35902 mb88xx nec rsp sh4 tlcs90 tms57002 > v30mz z8000 > arc cp1610 drcbex86.h dsp32 h8 i8089 > m37710 mc68hc11 patinhofeio s2650 sharc tlcs900 tms7000 > v60 > arcompact cubeqcpu drccache.cpp dsp56k hcd62121 i86 > m6502 mcs48 pdp1 saturn sm510 tms1000 tms9900 > v810