Skip to content

Loader Dumps Arcade run Taito Type X | NESICAxLive arcade machines games in your PC

License

Notifications You must be signed in to change notification settings

ferraulg/loaderDumpsArcade

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Loader Dumps Arcade Emulator (wip)

All this is a homebrew development with reverse engineering, non official technical documentation and a lot of personal time.

Twitter : https://twitter.com/vicboma1

Youtube : https://www.youtube.com/channel/UCIyHFDfIyH2Z7FUQBiUxs4g

Table of Contents (wip)

Injections

  • CreateProcess and OpenProcess
  • CreateRemoteThread and LoadLibrary
  • Portable Execute
  • Hook Injection

Techniques

  • Virtual Method Table
  • Vectored Exception Handling
  • Trampoline/Columpio
  • DetourFunction
  • Addressing

Systems

Taito Type x

   Year : 2005
   CPU : Celeron - Pentium 4
   Chipset: Intel 865G
   GPU: ATI Radeon 9600SE/9600XT(128 MB) / X700PRO (256 MB), Bahia AGP 2.0/3.0 Soporte 1x/4x/8x
   SO: Windows XP Embedded

Taito Type x2

  Year : 2005
  CPU : Intel Core 2 Duo E6400/Pentium 4 651/Celeron D 352
  Chipset: Intel Q965 + ICH8
  GPU: ATI RADEON X1600Pro/X1300LE o nVIDIA GeForce 7900GS/7600GS/7300GS
  SO: Microsoft Windows XP Embedded SP2

NESiCAxLive

  Arcade System Board
  Run w/ Taito Type X, X2, X Zero, X3 and X4
Boolean isLoaded { get; }
Boolean isActive();
int Open(String name);
Task OpenAsync(String name);
Kernel32Native.PROCESS_INFORMATION Create(String name, uint securityAttr);
Boolean Attach(String name);
Boolean InjectDLL(String name);
List<IntPtr> SuspendAllThreads();
Boolean ReadMemory(IntPtr processID, IntPtr address, int numOfBytes, byte[] buffer, out int bytesRead);
Boolean WriteMemory(IntPtr hProc, IntPtr address, byte [] buffer, out int bytesWrited);
List<IntPtr> ResumeAllThreads();
Boolean Terminate();

Inputs

  • Taito Type
  • NESICAxLive

Example | File.properties

  • Player 1
P1_SERVICE = 3
P1_START = 1
P1_COIN = 5
P1_UP = UP
P1_DOWN = DOWN
P1_LEFT = LEFT
P1_RIGHT = ALT
P1_BUTTON_1 = SPACE
P1_BUTTON_2 = CTRL
P1_BUTTON_3 = C
P1_BUTTON_4 = A
P1_BUTTON_5 = V
P1_BUTTON_6 = B
  • Player 2
P2_SERVICE = 4
P2_START = 2
P2_COIN = 6
P2_UP = R
P2_DOWN = F
P2_LEFT = G
P2_RIGHT = D
P2_BUTTON_1 = A
P2_BUTTON_2 = S
P2_BUTTON_3 = E
P2_BUTTON_4 = Q
P2_BUTTON_5 = W
P2_BUTTON_6 = E	
  • Board
TEST_TILT1 = 3
TEST_TILT2 = 7 
TEST_TILT3 = 8
TEST_MODE = T
EXIT_CODE = ESC
  • Manual
Need for the taito type x game to read the keyboard input 

ENUM = Ascii code keyboard

Direct Input | Based on Hook's | DIKCodes

Example | File.bin

  • Player 1
  [Display address]  [Value]  [Byte]  [Key]
  0000000000000000     00       .     Start
  0000000000000004     00       .     Coin
  0000000000000008     00       .     Service
  000000000000000C     00       .     Up
  0000000000000010     00       .     Down
  0000000000000014     00       .     Left
  0000000000000018     00       .     Right
  000000000000001C     00       .     Btn 1
  0000000000000020     00       .     Btn 2
  0000000000000024     00       .     Btn 3
  0000000000000028     00       .     Btn 4
  000000000000002C     00       .     Btn 5 
  0000000000000030     00       .     Btn 6
  • Player 2
 [Display address]  [Value]  [Byte]  [Key] 
 0000000000000034     00       .     Start
 0000000000000038     00       .     Coin
 000000000000003C     00       .     Service
 0000000000000040     00       .     Up
 0000000000000044     00       .     Down
 0000000000000048     00       .     Left
 000000000000004C     00       .     Right
 0000000000000050     00       .     Btn 1
 0000000000000054     00       .     Btn 2
 0000000000000058     00       .     Btn 3
 000000000000005C     00       .     Btn 4
 0000000000000060     00       .     Btn 5 
 0000000000000064     00       .     Btn 6
  • Board
 [Display address]  [Value]  [Byte]  [Key]
 0000000000000068     00       .     Test Mode
 000000000000006C     00       .     Exit
  • Manual
 Need for the taito type x game to read the keyboard input 
 
 Keyboard    -  256 (short)
 0x000000XX     XX     
   
 Joystick    -  X[1|2]   -  Axis[+|-][X|Y|Z]   -  256 (btn)
 0xZXYA0CMN       ZY     -        YA           -    0CMN      
 

 Example

 [Display address]        [Hexa Code]             [Hexa Code]          [Ascii Code]
 0000000000000000  02 00 00 00 06 00 00 00  06 00 00 00 C8 00 00 00  ................
 0000000000000010  D0 00 00 00 CB 00 00 00  CD 00 00 00 02 00 00 00  ................
 0000000000000020  03 00 00 00 04 00 00 00  05 00 00 00 06 00 00 00  ................
 0000000000000030  07 00 00 00 32 00 00 00  31 00 00 00 30 00 00 00  ....2...1...0...
 0000000000000040  2F 00 00 00 2E 00 00 00  01 00 00 X1 03 00 00 X1  /...............
 0000000000000050  02 00 00 X1 25 00 00 00  24 00 00 00 23 00 00 00  ........$...#...
 0000000000000060  22 00 00 00 21 00 00 00  14 00 00 00 01 00 00 00  "...!...........         
  • Input Tool to map output file *.bin

Emulators

JVS I/O

Semantic Trace for Taito Type

Inicializando
	Logger: 2019-06-07_00-48-04-LoggerJvs.log 

	Escribo  6 bytes... -> [ E0 FF 03 F0 D9 CB ] 0xE0FF03F0D9CB
	[E0] = SYNC_CODE OK
	[FF] = BROADCAST A TODOS LOS NODOS
	[03] = 
	[F0] = RESET ALL NODES
	[D9] 
	[CB] = 
	Envío    0 bytes... -> [ ]

............................

	Escribo  6 bytes... -> [ E0 FF 03 F1 01 F4 ] 0xE0FF03F101F4
	[E0] = SYNC_CODE OK
	[FF] = BROADCAST A TODOS LOS NODOS
	[03] = 
	[F1] = Set Address
	[01] 
	[F4] = 
	Envío    6 bytes... -> [ XXXXXXXXXXX ]

............................

	Escribo  5 bytes... -> [ E0 01 02 10 13 ]  0xE001021013 
	[E0] = SYNC_CODE OK
	[01] = ESCLAVO
	[02] = 
	[10] = I/O IDENTIFICADOR 
	[13] = 
	Envío    58 bytes... -> [ XXXXXXXXXXX ]

............................

	Escribo  5 bytes... -> [ E0 01 02 11 14 ] 0xE001021114 
	[E0] = SYNC_CODE OK
	[01] = ESCLAVO
	[02] = 
	[11] = COMANDO REVISION FORMATO 
	[14] = 
	Envío    7 bytes... -> [ XXXXXXXXXXX ]
	
	...
	

............................
	
	Escribo  5 bytes... -> [ E0 00 02 00 02 ]
	[E0] = SYNC_CODE OK
	[00] = MAESTRO
	[02] =
	[00] = RESETEANDO MAQUINA (Exit Game)
	[02] = 
	Envío    6 bytes... -> [ XXXXXXXXXXX ]

Semantic Trace for NESICAxLive

Inicializando
	Logger: 2020-01-19_14-50-21-LoggerFAST-io.log 

Abriendo conexion
	Hook_iDmacDrvOpen[_in_]			(deviceId: 1 | outBuffer: 00000000 | flags: 00000000)
	Hook_iDmacDrvOpen[_out_]		(deviceId: 1 | outBuffer: 00000001 | flags: FFFFFFFF)

............................

Leyendo datos
	Hook_iDmacDrvRegisterRead
		Discovery [0x400]
		XXXXXXXXX [0x4000] ?
		XXXXXXXXX [0x4004] ?
		XXXXXXXXX [0x4000] ?
	
	
............................

** FOR:

Escribiendo datos
	Hook_iDmacDrvRegisterWrite
		XXXXXXXXX [0x4000] ?
		
............................

Leyendo datos
	Hook_iDmacDrvRegisterRead
		XXXXXXXXX [0x4004] ?
		
............................

Escribiendo datos
	Hook_iDmacDrvRegisterWrite
		XXXXXXXXX [0x4004] ?
		
............................
		
Leyendo datos
	Hook_iDmacDrvRegisterRead
		Input Key P1 - P2 [0x4120]
		XXXXXXXXX         [0x4124] ?
		XXXXXXXXX         [0x4128] ?
		XXXXXXXXX         [0x412C] ?
		XXXXXXXXX         [0x41A0] ?
		XXXXXXXXX         [0x41A4] ?
		XXXXXXXXX         [0x41A8] ?
		XXXXXXXXX         [0x41AC] ?

............................	

Escribiendo datos
	Hook_iDmacDrvRegisterWrite
		XXXXXXXX          [0x4100] ?
		XXXXXXXX          [0x4104] ?
		XXXXXXXX          [0x4108] ?
		XXXXXXXX          [0x410C] ?
		Coin Input P1 	  [0x4140]
		Coin Input P2 	  [0x4144]
		XXXXXXXX          [0x4180] ?
		XXXXXXXX          [0x4184] ?
		XXXXXXXX          [0x4188] ?
		XXXXXXXX          [0x418C] ?

............................
		
Leyendo datos
	Hook_iDmacDrvRegisterRead
		Coin Input P1 	 [0x4140]
		Coin Input P2 	 [0x4144]
		Coin Input P2 	 [0x4144]
                XXXXXXXX         [0x41C0] ?
                XXXXXXXX         [0x41C4] ?
** FOR

...

Cerrando conexion
	Hook_iDmacDrvClose			(deviceId: 1 | access: 004E4BDC) -> You can only close game with Test Mode  

Graphics

  • Color Inverting per-stage texture processing
  • No filter stretch
  • Fetch stream vertex
  • Primitives to render
  • Rendered entities without alpha
  • Filters in runtime
  • Reverse pixel mode in runtime / Nearest-Point Sampling
  • Diffuse CyberPunk Lights
  • Spot Light Type
  • Linear Filter (LF)
  • Bilinear Filter (BF)
  • Anisotropic Filter (AF)

Sound

  • Sound Create
  • Sound Capture
  • Sound Full Duplex
  • Sound Full Duplex Create
  • Sound EnumerateA
  • Sound EnumerateW
  • Sound Buffer

Virtual Storage

  • Dynamic virtual Hard Disk (VHD)
  • Substitute a drive letter for local path

Cache Storage

  • Save/Config0000.bin
  • setting.dat
  • hiscore.dat
  • game.dat

Monitor w/restoring config

  • Clone
  • Extends
  • Monitor_1
  • Monitor_2

Display

  • Windowed
  • Windowed Center
  • Fullscreen (Windowed Magnifier)
  • Fullscreen Native

Aspect Ratio

  • 1:1
  • 2:1
  • 3:2
  • 3:4 - Vertical
  • 4:1
  • 4:3
  • 5:3
  • 5:4
  • 6:5
  • 7:9 - Vertical
  • 8:3
  • 8:7
  • 9:16 - Vertical
  • 16:9
  • 16:10
  • 16:15
  • 19:12
  • 19:14
  • 30:17
  • 32:9

Rotation Display

  • 90°
  • 180°
  • 270°

TaskBar Menu

  • Show
  • Hidden
  • Animation

Tab-Menu

  • Controller
  • Menu
  • Video
  • System

Pause Mode

  • Classic
  • Blur Effect w/fullscreen

Systems/Games Loaders (wip)

Taito Type x

Taito Type x2

NesicaxLive

Code Ratio

-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
XML                            142            173            345         286219
C/C++ Header                   795          38483          84272         147221
C++                            114           4477           4607          16206
C                               14            747            711          10235
C#                             118           1478           3894           9043
MSBuild script                  18              0             49           1653
Markdown                         3              4              0             46
DOS Batch                        8              1              0             27
XAML                             2              1              0             15
JSON                             5              0              0              5
Bourne Shell                     2              7             22              4
Assembly                         1              1              2              1
-------------------------------------------------------------------------------
SUM:                          1222          45372          93902         470675
-------------------------------------------------------------------------------

Highlights

References

Miscelanea projects

About

Loader Dump Arcade is programmed by vicboma1, all this is a homebrew development with reverse engineering, non official technical documentation and a lot of personal time.

Development environment

Poor Macbook 2015 
Bootcamp Native - Windows 8
Intel hd graphics 4500
8gb RAM 

Twitter : https://twitter.com/vicboma1

Youtube : https://www.youtube.com/channel/UCIyHFDfIyH2Z7FUQBiUxs4g

This software is provided as-is, and is licensed under the MIT License.

MIT License

Copyright (c) 2020 Victor Bolinches

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

No roms, no games, no dumps!

About

Loader Dumps Arcade run Taito Type X | NESICAxLive arcade machines games in your PC

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 39.3%
  • C 38.6%
  • C# 22.0%
  • Batchfile 0.1%