Multi Plust On System Documentation 0.2
July 20th, 2019
Shonumi aka D.S. Baxter

***************************************************
1. Introduction
*************************************************** 

The Multi Plust On System (MPOS) is an accessory for the Bouken Yuuki Pluster World franchise from Takara. Designed as a "toys-to-life" device, it allows plastic figurines to transfer characters known as "Plusters" into the games. Bouken Yuuki Pluster World: Densetsu no Plust Gate and the EX version are RPGs, while Bouken Yuuki Pluster World: Pluston GP is a racing game. All 3 were released in 2003 and came with special sets featuring the the MPOS and a bundled Pluster figurine.


***************************************************
2. General Hardware Information
***************************************************

* The MPOS is a small attachment that fits into the GBA serial port and has a circular slot for figurines
* Each figurine is entirely plastic, having no electronic parts whatsoever
* Each figurine has a hollow base with different spokes extending slightly from the bottom
* Once a figurine is inserted and secured inside the slot, these spokes push down on a sensitive pads beneath the surface
* Internally, the MPOS uses two Texas Instruments HC165 parallel load-shift registers to output data to the GBA serially


***************************************************
3. Compatible Games
***************************************************

- Bouken Yuuki Pluster World: Densetsu no Plust Gate
- Bouken Yuuki Pluster World: Densetsu no Plust Gate EX
- Bouken Yuuki Pluster World: Pluston GP

All 3 games are more or less unplayable without the MPOS. A few minigames can be played in Densetsu no Plust Gate EX, but in both that game and the regular Densetsu no Plust Gate, starting the main RPG requires the MPOS be attached with a Pluster Figure inserted. In Pluston GP, many of the menus can be navigated, but beginning a race also requires the accessory and an inserted figurine.

***************************************************
4. Communication Protocol
***************************************************

Communication between the MPOS and the GBA is very simple. The role of the MPOS is to provide a single 16-bit number. Depending on which spokes the plastic model uses to put on the MPOS' array of pressure pads, a different number is sent to the GBA. The number effectively acts as an ID for the Pluster figurine. Using General Purpose Mode, both sides send a total of 37 transfers. At the beginning, of a session, the games will set all lines (SC, SD, SI, SO) as output with the RCNT value 0x80F0. Afterwards the 37 transfers keep looping indefinitely. The first 4 transfer appear to act as a start signal. The start signal is the following:


----------------------------------------------
RCNT		|SC	| SD	| SI	| SO 
----------------------------------------------
0x80BD		| 1	| 0	| 1	| 1
0x80B5		| 1	| 0	| 1	| 0
0x80BF		| 1	| 1	| 1	| 1
0x80BF		| 1	| 1	| 1	| 1


Although the games' code ignores the results of the start signal, the MPOS returns these values:


----------------------------------------------
RCNT		|SC	| SD	| SI	| SO 
----------------------------------------------
0x80B9		| 1	| 0	| 0	| 1
0x80B1		| 1	| 0	| 0	| 0
0x80BB		| 1	| 1	| 0	| 1
0x80BB		| 1	| 1	| 0	| 1


The next 33 transfers are used for the 16-bit ID, 1 bit for every 2 transfers. The last transfer appears to dangle. This may simply be necessary to complete the transfer of the ID and begin the process over again. The GBA sends the following over and over again until it sends another start signal:


----------------------------------------------
RCNT		|SC	| SD	| SI	| SO 
----------------------------------------------
0x80BE		| 0	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1


In response, the MPOS toggles SI every odd transfer (when receiving 0x80BE from the GBA) to send the the bit. For example, for the Pluster Wyburst (PF002), it produces the ID 0x16A0. The values sent back to the GBA look like this:


------------------------------------------------------
RCNT		|SC	| SD	| SI	| SO 	| Bit
------------------------------------------------------
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BE		| 0	| 1	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BE		| 0	| 1	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1	|
0x80BE		| 0	| 1	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BE		| 0	| 1	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BE		| 0	| 1	| 1	| 1	| 1
0x80BC		| 0	| 0	| 1	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	| 0
0x80B8		| 0	| 0	| 0	| 1	|
0x80BA		| 0	| 1	| 0	| 1	|


The ID is received serially, MSB first. Essentially, a "1" bit is transferred whenever both SD and SI go high, and a "0" bit is transferred whenever SD is high, but SI is low.


***************************************************
5. Pluster IDs
***************************************************

There are 22 identified Pluster characters spread over 136 figurines. Each one is associated with a unique 16-bit ID that will generate that character in the games. There are multiple variants of figurines, therefore the Plusters themselves have multiple valid IDs, since the configuration of the spokes is different. These variants may grant special stat bonuses, for example stronger defense or offense in the RPGs, or faster acceleration or different color schemes in the racing game.

Figurines from the PF-EX series are only compatible with Bouken Yuuki Pluster World: Densetsu no Plust Gate EX. They will not be recognized by either Bouken Yuuki Pluster World: Densetsu no Plust Gate or Bouken Yuuki Pluster World: Pluston GP.


==============================================
PF001 :: Beetma
==============================================
Beetma Advance			0x1780
Beetma Attack			0x1740
Beetma Guard			0x16C0
Beetma Extra			0x1720
Beetma Power			0x1682
Beetma Rare #1			0x1642
Beetma Basic			0x1786
Beetma Rare #2			0x1746


==============================================
PF002 :: Wyburst
==============================================
Wyburst Advance			0x16A0
Wyburst Attack			0x1660
Wyburst Guard			0x17E0
Wyburst Extra			0x1710
Wyburst Power			0x17C2
Wyburst Rare #1			0x1622
Wyburst Basic			0x16C6
Wyburst Rare #2			0x1726


==============================================
PF003 :: Gabrian
==============================================
Gabrian Basic			0x1690
Gabrian Attack			0x1650
Gabrian Guard			0x17D0
Gabrian Extra			0x1630
Gabrian Power			0x17A2
Gabrian Rare #1			0x1762


==============================================
PF004 :: Molly
==============================================
Molly Basic			0x1798
Molly Attack			0x1758
Molly Guard			0x16D8
Molly Extra			0x1738
Molly Power			0x16B2
Molly Rare #1			0x1672


==============================================
PF005 :: Hania
==============================================
Hania Basic			0x1688
Hania Attack			0x1648
Hania Guard			0x17C8
Hania Extra			0x1628
Hania Power			0x1792
Hania Rare #1			0x1752


==============================================
PF006 :: Zagarian
==============================================
Zagarian Basic			0x17A4
Zagarian Attack			0x1764
Zagarian Guard			0x16E4
Zagarian Extra			0x1614
Zagarian Power			0x16CA
Zagarian Rare #1		0x172A


==============================================
PF007 :: Tan Q
==============================================
Tan Q Basic			0x1794
Tan Q Attack			0x1754
Tan Q Guard			0x16D4
Tan Q Extra			0x1734
Tan Q Power			0x16AA
Tan Q Rare #1			0x166A


==============================================
PF008 :: Wariarm
==============================================
Wariarm Basic			0x17B0
Wariarm Attack			0x1770
Wariarm Guard			0x16F0
Wariarm Extra			0x1708
Wariarm Power			0x16E2
Wariarm Rare #1			0x1612


==============================================
PF009 :: Doryuun
==============================================
Doryuun Basic			0x16B8
Doryuun Attack			0x1678
Doryuun Guard			0x17F8
Doryuun Extra			0x1704
Doryuun Power			0x17F2
Doryuun Rare #1			0x160A


==============================================
PF010 :: Fezard
==============================================
Fezard Basic			0x17A8
Fezard Attack			0x1768
Fezard Guard			0x16E8
Fezard Extra			0x1618
Fezard Power			0x16D2
Fezard Rare #1			0x1732


==============================================
PF011 :: Mashanta
==============================================
Mashanta Basic			0x1684		
Mashanta Attack			0x1644
Mashanta Guard			0x17C4
Mashanta Extra			0x1624
Mashanta Power			0x178A
Mashanta Rare #1		0x174A


==============================================
PF012 :: Gingardo
==============================================
Gingardo Basic			0x16B4		
Gingardo Attack			0x1674
Gingardo Guard			0x17F4
Gingardo Extra			0x160C
Gingardo Power			0x17EA
Gingardo Rare #1		0x171A


==============================================
PF013 :: Torastorm
==============================================
Torastorm Basic			0x178C
Torastorm Attack		0x174C
Torastorm Guard			0x16CC
Torastorm Extra			0x172C
Torastorm Power			0x169A
Torastorm Rare #1		0x165A


==============================================
PF014 :: Gongoragon
==============================================
Gongoragon Basic		0x16AC
Gongoragon Attack		0x166C
Gongoragon Guard		0x17EC
Gongoragon Extra		0x171C
Gongoragon Power		0x17DA
Gongoragon Rare #1		0x163A


==============================================
PF015 :: Mighty V
==============================================
Mighty V Basic			0x169C
Mighty V Attack			0x165C
Mighty V Guard			0x17DC
Mighty V Extra			0x163C
Mighty V Power			0x17BA
Mighty V Rare #1		0x177A


==============================================
PF016 :: Dorastorm
==============================================
Dorastorm Basic			0x17BC
Dorastorm Attack		0x177C
Dorastorm Guard			0x16FC
Dorastorm Extra			0x1702
Dorastorm Power			0x16FA
Dorastorm Rare #1		0x1606


==============================================
PF-EX001 :: Beetma EX
==============================================
Beetma EX Basic			0x1666
Beetma EX Attack		0x17E6
Beetma EX Guard			0x1716
Beetma EX Extra			0x1696
Beetma EX Power			0x1656
Beetma EX Rare #1		0x17D6


==============================================
PF-EX002 :: Varouze
==============================================
Varouze Basic			0x1636
Varouze Attack			0x17B6
Varouze Guard			0x1776
Varouze Extra			0x16F6
Varouze Power			0x170E
Varouze Rare #1			0x168E


==============================================
PF-EX003 :: Gigajoule
==============================================
Gigajoule Basic			0x164E
Gigajoule Attack		0x17CE
Gigajoule Guard			0x162E
Gigajoule Extra			0x17AE
Gigajoule Power			0x176E
Gigajoule Rare #1		0x16EE


==============================================
PF-EX004 :: Birdnick
==============================================
Birdnick Basic			0x161E
Birdnick Attack			0x179E
Birdnick Guard			0x175E
Birdnick Extra			0x16DE
Birdnick Power			0x173E
Birdnick Rare #1		0x16BE


==============================================
PF-EX005 :: Poseihorn
==============================================
Poseihorn Basic			0x167E
Poseihorn Attack		0x17FE
Poseihorn Guard			0x1701
Poseihorn Extra			0x1681
Poseihorn Power			0x1641
Poseihorn Rare #1		0x17C1


==============================================
PF-EX006 :: Tera
==============================================
Tera Basic			0x1621
Tera Attack			0x17A1
Tera Guard			0x1761
Tera Extra			0x16E1
Tera Power			0x1611
Tera Rare #1			0x1791


When the MPOS is connected to the GBA but has no Pluster figurine inserted, the device returns the ID 0x1400.
