├── .gitignore ├── images └── XHE-3_protocol.png └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | *.swp 3 | -------------------------------------------------------------------------------- /images/XHE-3_protocol.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pce-devel/PCE_Controller_Info/HEAD/images/XHE-3_protocol.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PCE_Controller_Info 2 | 3 | Information about controller signalling on the PC Engine 4 | 5 | ## Electrical Characteristics 6 | 7 | The PC Engine is based on CMOS 5V logic, so the voltage supply is 5V and the logic levels are set as such. 8 | 9 | There are 6 active lines (besides power and ground) on the connector, with two being driven by 10 | the console (SEL and CLR), and 4 being return signals from the joypad/peripheral. 11 | 12 | The original purpose of SEL was as a multiplex selector for joypad inputs (which 4 inputs out of 8 to 13 | read), and the purpose of CLR was to reset a port counter for the multitap... but over time, these 14 | signal have been used for more complicated purposes on sophisticated peripherals (more on this in the 15 | "Signalling Protocols" section below). 16 | 17 | Electrically, the signals of SEL and CLR are generally pulled up by a 47K resistor on the peripheral 18 | to prevent issues on the internals of the peripherals if power is supplied but CLR/SEL are floating; 19 | this is not a likely case, but this is a protective measure. 20 | 21 | Similarly, the controller inputs also use 47K resistors as pullups, and return signals from the 22 | peripheral are generally sent back through current-limiting 300-ohm resistors in order to limit 23 | the amount of current driven by the internal chips, in the event of an unexpected short circuit 24 | on the console side of the controller. 25 | 26 | Oscilloscope traces of the CLR and SEL signals into a multitap device as a load indicate that rise 27 | time for these signals is on the order of 10ns, and fall time on the order of 20ns. 28 | 29 | 30 | ### Controller Schematics and Connector Pinout 31 | 32 | This schematic shows the wiring diagram for a basic PC Engine controller. Schematics of additional 33 | configurations can be found here: 34 | https://console5.com/wiki/NEC_PC_Engine#Controller_Schematics 35 | 36 | (Many thanks to console5.com for sourcing, preserving and improving console information like this.) 37 | 38 | As can be seen in the schematic: 39 | 1) All inputs default to high, unless they are specifically driven low 40 | 2) The 74HC163 creates a divide-by-2/4/8 counter based on the CLR signal, which is then used by the 41 | 'turbo' switches to modulate auto-repeat keying. 42 | 43 | ![https://console5.com/wiki/File:PC-Engine---TG16-Controller-Schematic.png](https://console5.com/techwiki/images/9/9f/PC-Engine---TG16-Controller-Schematic.png) 44 | 45 | 46 | ### Power Consumption of Joypad Peripherals 47 | 48 | Power consumption numbers are currently being confirmed, but are almost certainly lower than one might expect. 49 | 50 | #### "Simple" power consumption: 51 | 52 | This test was conducted by connecting a current-limiting test power supply to the devices, with the CLR and SEL 53 | lines tied to ground (to prevent rapid state changes), and observing the digital readout on the power supply. 54 | This is not a comprehensive test - rather, it represents the lower limit of current/power usage: 55 | 56 | | Device | Observed Usage | 57 | |:------:|:--------------:| 58 | | 2-button joypad (NEC) | < 1 mA | 59 | | 6-button joypad (Hori) | < 1 mA | 60 | | 5-port Multitap (NEC) | < 1 mA | 61 | | 5-port Multitap (NEC) | < 1 mA | 62 | | PC Engine Mouse | 6 mA | 63 | | XHE-3/XE-1AP | 33 mA | 64 | | Memory Base 128 (NEC), fresh batteries | 0 mA | 65 | | Memory Base 128 (NEC), no batteries | 30 mA | 66 | | Save-kun (Koei), fresh batteries | 0 mA | 67 | | Save-kun (Koei), no batteries | 10 mA | 68 | | Replacement MB128 (my RP2040 design) | 25 mA | 69 | | USB Mouse (my RP2040 design), no USB device | 30 mA | 70 | | USB Mouse (my RP2040 design), Logitech Universal Receiver | 53 mA | 71 | 72 | 73 | ## Signalling Protocols - Overview 74 | 75 | The program will scan the joypad controls with code similar to the below. 76 | 77 | Notice that normally: 78 | 1) The CLR bit is set only briefly, once per scan across all joypads 79 | 2) SEL is kept HIGH for the initial read of joypad values, and toggled LOW to read the second group 80 | 3) There is normally a brief delay - although the size of this can vary - between changing the value 81 | of the SEL line, and reading back return values from the joypad. This is above and beyond the ~680ns 82 | delay (5 cycles) which would be implicit betwen the write cycle of a 'STA $1000' opcode and the read 83 | cycle of an immediately-following 'LDA $1000' opcode, for a total of roughly 1.93 microseconds. 84 | 85 | One further point which is not highlighted in the code below is that subsequent joypads are read 86 | simply by toggling SEL high again to advance to the next joypad in the multitap. Toggling CLR resets 87 | the sequence to the first port all over again. 88 | 89 | Normal reading of joypads in this way is generally carried out as part of the VSYNC interrupt, or 90 | as a direct result of its completion, so that values are always available, always 'fresh', and always 91 | based on a regular timebase. 92 | 93 | ``` 94 | LDA #1 ; SEL High (Least-significant bit), CLR low (next-least significant bit) 95 | STA $1000 ; output to joypad port 96 | LDA #3 ; both SEL and CLR high 97 | STA $1000 98 | LDA #1 ; Keep SEL high; drive CLR low again 99 | STA $1000 100 | ; the following instructions are a delay to allow transition of the joypad device 101 | PHA ; 3 cycles 102 | PLA ; 4 cycles 103 | NOP ; 2 cycles total = 9 cycles, roughly 1.25 microseconds (CPU clock is normally 7.16 MHz) 104 | 105 | LDA $1000 ; read from Joypad port 106 | AND #$0F ; strip the unnecessary bits 107 | 108 | LDA #0 ; Keep SEL high; drive CLR low again 109 | STA $1000 110 | ; the following instructions are a delay to allow transition of the joypad device 111 | PHA ; 3 cycles 112 | PLA ; 4 cycles 113 | NOP ; 2 cycles total = 9 cycles, roughly 1.25 microseconds (CPU clock is normally 7.16 MHz) 114 | 115 | LDA $1000 ; read from Joypad port 116 | AND #$0F ; strip the unnecessary bits 117 | ``` 118 | 119 | ### 2-button Controller Protocol 120 | 121 | A 2-button controller is keyed primarily on the SEL signal, and sends 4 key values when SEL is high, 122 | and another 4 key values when SEL is low. 123 | 124 | A 2-button controller doesn't care about the CLR line, but due to the way it is connected to the 74HC157, 125 | all 4 outputs will be LOW when CLR is HIGH. 126 | 127 | | SEL value | Bit Number | Key | 128 | |:------:|:--------------:|:--------:| 129 | | HIGH | bit 3 (ie $8) | LEFT | 130 | | HIGH | bit 2 (ie $4) | DOWN | 131 | | HIGH | bit 1 (ie $2) | RIGHT | 132 | | HIGH | bit 0 (ie $1) | UP | 133 | | LOW | bit 3 (ie $8) | RUN | 134 | | LOW | bit 2 (ie $4) | SELECT | 135 | | LOW | bit 1 (ie $2) | II | 136 | | LOW | bit 0 (ie $1) | I | 137 | 138 | 139 | ### Multitap Protocol 140 | 141 | Initially, multitap devices were built only for 2-button joypads, so subsequent devices which 142 | were designed to be used with them needed to be built to accept the multitap design. 143 | 144 | The multitap is essentially a multiplexer which takes CLR and SEL values from the console, and 145 | creates CLR and SEL values on each of the ports; likewise, it takes the output values from the 146 | active port and routes those back to the console. 147 | 148 | One interesting point is that while the console only generates a short CLR pulse at thebeginning of a 149 | joypad scan, the multitap presents it as a sustained high signal across all inputs except the active port. 150 | 151 | | CLR | SEL | Active Port | Port 1 CLR | Port 1 SEL | Port 2 CLR | Port 2 SEL | Port 3 CLR | Port 3 SEL | Port 4 CLR | Port 4 SEL | Port 5 CLR | Port 5 SEL | 152 | |-----|-----|-------------|------------|------------|------------|------------|------------|------------|------------|------------|------------|------------| 153 | | L | H | None | H | H | H | H | H | H | H | H | H | H | 154 | | H | H | None | H | H | H | H | H | H | H | H | H | H | 155 | | L | H | 1 | L | H | H | H | H | H | H | H | H | H | 156 | | L | L | 1 | L | L | H | H | H | H | H | H | H | H | 157 | | L | H | 2 | H | H | L | H | H | H | H | H | H | H | 158 | | L | L | 2 | H | H | L | L | H | H | H | H | H | H | 159 | | L | H | 3 | H | H | H | H | L | H | H | H | H | H | 160 | | L | L | 3 | H | H | H | H | L | L | H | H | H | H | 161 | | L | H | 4 | H | H | H | H | H | H | L | H | H | H | 162 | | L | L | 4 | H | H | H | H | H | H | L | L | H | H | 163 | | L | H | 5 | H | H | H | H | H | H | H | H | L | H | 164 | | L | L | 5 | H | H | H | H | H | H | H | H | L | L | 165 | 166 | **Compatibilty:** All games are expected to be compatible with the Multitap.
167 | However, one game - Youkai Douchuuki - is known to be incompatible (it shows a black screen with no movement when multitap 168 | is plugged in). There may be a 'fix' version of this HuCard available, as there is a version of the ROM which functions properly. 169 | 170 | 171 | ### 6-button Controller Protocol 172 | 173 | When fighting games like Street Fighter II became popular at the arcades, a 6-button joypad was required 174 | to support games like it on the PC Engine. 175 | 176 | The signalling format is the same as the 2-button joypad, except that on alternating scans (inferred by 177 | counting 'CLR' pulses), the direction buttons scan (SEL = HIGH) will show either the actual direction buttons, 178 | or a value of '0000', which is effectively impossible (as it would imply that opposing directions are 179 | simultaneously pressed, which is not possible on a standard controller). The additional buttons are sent 180 | in the corresponding (SEL = LOW) scan in place of the original RUN/SELECT/II/I buttons. 181 | 182 | Any game checking for the existence of a 6-button pad should scan twice, and not make any assumptions about 183 | which scan number would yield the '0000' number. 184 | 185 | | Scan number | SEL value | Bit Number | Key | 186 | |:-----------:|:------:|:--------------:|:--------:| 187 | | 1 | HIGH | bit 3 (ie $8) | LEFT | 188 | | 1 | HIGH | bit 2 (ie $4) | DOWN | 189 | | 1 | HIGH | bit 1 (ie $2) | RIGHT | 190 | | 1 | HIGH | bit 0 (ie $1) | UP | 191 | | 1 | LOW | bit 3 (ie $8) | RUN | 192 | | 1 | LOW | bit 2 (ie $4) | SELECT | 193 | | 1 | LOW | bit 1 (ie $2) | II | 194 | | 1 | LOW | bit 0 (ie $1) | I | 195 | | 2 | HIGH | bits 3-0 | value 0000 | 196 | | 2 | LOW | bit 3 (ie $8) | VI | 197 | | 2 | LOW | bit 2 (ie $4) | V | 198 | | 2 | LOW | bit 1 (ie $2) | IV | 199 | | 2 | LOW | bit 0 (ie $1) | III | 200 | 201 | **Compatibility:** Games which are not specifically written to support 6-button controllers will not work properly.
202 | Compatible games include: 203 | - HuCard 204 | - Street Fighter II 205 | - CDROM 206 | - Advanced Variable Geo 207 | - Battlefield '94 in Tokyo Dome 208 | - Emerald Dragon 209 | - Fire Pro Jyoshi - Dome Choujyo Taisen 210 | - Flash Hiders 211 | - Garou Densetsu II - Aratanaru Tatakai 212 | - Garou Densetsu Special 213 | - Kakutou Haou Densetsu Algunos 214 | - Linda Cube 215 | - Mahjong Sword Princess Quest Gaiden 216 | - Martial Champions 217 | - Princess Maker 2 218 | - Ryuuko no Ken 219 | - Sotsugyou II - Neo Generation 220 | - Super Real Mahjong P II - P III Custom 221 | - Super Real Mahjong P V Custom 222 | - Tengai Makyo - Kabuki Itouryodan 223 | - World Heroes 2 224 | - Ys IV 225 | 226 | 227 | ## Special Controller Peripherals 228 | 229 | The devices identified up to this point are easily implemented using simple discreet logic ICs with limited 230 | statefulness. The next group of devices rely on statefulness and have more complexity to their protocols. 231 | 232 | ### Mouse Protocol 233 | 234 | Similar to the 6-button joypad, the mouse outputs different pieces of data across a series of multiple scans. 235 | 236 | Timing is important on this protocol, as it must automatically reset so that the 'Delta X' scan is the first 237 | value returned in a scan sequence; as a result, there are two timeouts: 238 | 1) If on any scan, the SEL line does not transition from HIGH to LOW within ~550 microseconds, the mouse will 239 | time out, consider the scan completed, and reset the delta values until the next scan. It can be assumed that 240 | this is also true of LOW-to-HIGH transitions. 241 | 2) If the CLR line is not retriggered within a similar timeframe (for example, 600 microseconds), the mouse will 242 | also consider the scan complete. 243 | 244 | In-between scans, any X/Y movement is accumulated and presented as a net 'Delta X/Y' value at scan time. 245 | There does not seem to be any specific requirements for scanning frequencies, other than the fact that a 246 | subsequent scan should not appear within the timeout period for a preceding scan. 247 | 248 | In order to detect a mouse, a game will generally scan a number of times, and verify that a '0000' value returns 249 | in place of the UP/DOWN/LEFT/RIGHT keys; however, this has a danger of identifying a 6-button pad as a mouse. 250 | However, within a large number of scans in a single frame, two sequential '0000' values sould be able to identify 251 | a mouse. 252 | 253 | | Scan number | SEL value | Data Returned | 254 | |:-----------:|:------:|:--------:| 255 | | 1 | HIGH | bits 7-4 of 'Delta X' | 256 | | 1 | LOW | buttons (RUN,SELECT,II,I) | 257 | | 2 | HIGH | bits 3-0 of 'Delta X' | 258 | | 2 | LOW | buttons (RUN,SELECT,II,I) | 259 | | 3 | HIGH | bits 7-4 of 'Delta Y' | 260 | | 3 | LOW | buttons (RUN,SELECT,II,I) | 261 | | 4 | HIGH | bits 3-0 of 'Delta Y' | 262 | | 4 | LOW | buttons (RUN,SELECT,II,I) | 263 | 264 | **Compatibility:** Games which are not specifically written to support the PC Engine Mouse will not work properly.
265 | Compatible games include: 266 | - HuCard : none 267 | - CDROM 268 | - 1552 Tenka Tairan 269 | - A. III - Takin' the A Train 270 | - Atlas Renaissance Voyage 271 | - Brandish 272 | - Dennou Tenshi Digital Angel 273 | - Doukyuusei 274 | - Eikan ha Kimini - Koukou Yakyuu Zenkoku Taikai 275 | - Hatsukoi Monogatari 276 | - Jantei Monogatari III - Saver Angels 277 | - Lemmings 278 | - Metal Angel 279 | - Nemurenumori no Chiisana Ohanashi 280 | - Power Golf 2 Golfer 281 | - Princess Maker 2 282 | - Tokimeki Memorial 283 | - Vasteel 2 284 | 285 | 286 | ### Pachinko Controller Protocol 287 | 288 | The pachinko controller has two sections to it - all the standard buttons of a 2-button controller, plus a 289 | spring-loaded dial control which acts like a paddle with approximately 90 degreess of rotational travel. The 290 | spring returns it to its counterclockwise limit, and the player is intended to rotate it clockwise to the 291 | appropriate amount. 292 | 293 | To the console, the pachinko controller appears like a multitap with a regular 2-button pad in port 1 (echoed 294 | on ports 3 and 5); in port 2 (and echoed on port 4), the data should be interpreted in the following manner: 295 | - Scan 'A' of the pad with SEL=HIGH will show with bits 3 and 1 as LOW (i.e. either $5, or $0 - but possibly $1 or $4). 296 | - The rest of the data on scan 'A' is not meaningful; it may show as zeroes, or it may have the same values as scan 'B' 297 | (except for those two bits). 298 | - Scan 'B' of the pad with SEL=HIGH will definitely return bit 3 as HIGH (i.e. $80 to $FF). 299 | - When taken as a whole, scan 'B' will show a digital value of the analog pachinko dial as follows: 300 | - SEL = HIGH retrieves the most-significant 4 bits, and SEL = LOW retrieves the least signifiacnt 4 bits 301 | - When taken as a byte, the value ranges between $FC (spring-returned counterclockwise limit) to $83 (at 302 | full-range of clockwise motion). 303 | 304 | **Compatibility:** Games which are not specifically written to support pachinko controllers may or may not work properly.
305 | Compatible games include: 306 | - HuCard 307 | - Pachiokun Juuban Shoubu 308 | - CDROM 309 | - Pachiokun Maboroshi no Densetsu 310 | - Pachiokun Warau Uchuu 311 | - Pachiokun III - Pachisuro & Pachinko 312 | 313 | 314 | ### Memory Base 128 Protocol 315 | 316 | Memory Base 128 is a console (host)-driven protocol which resembles SPI to a certain degree, and covers both 317 | NEC-made "Memory Base 128" units as well as KOEI-made "Save-Kun" units. 318 | 319 | For Memory Base 128 protocol, the 'CLR' line is similar to the 'CLK' line of SPI, and when CLR transitions 320 | from LOW to HIGH, the value of SEL is taken as a single bit of data. Under normal conditions, the joypad read 321 | routines always set SEL to HIGH when CLR is set HIGH, so the data stream would normally be a series of '1' bits. 322 | 323 | In order to transition from 'joypad' mode to 'MB128' mode, the Memory Base device monitors the joypad scanning bitstream 324 | for a particular sequence of bits, and transitions to MB128 mode when it sees them. 325 | 326 | Memory Base 128 Mode is initiated when it sees the sequence '00010101' arrive. This corresponds to a value of $A8, 327 | since the bitstream is least-significant-bit first (unlike SPI implementations elsewhere). 328 | 329 | After the $A8 value is triggered, the Memory Base 128 will ignore the inputs of the daisy-chained device, and instead 330 | communicate back to the console with: 331 | - Bit 3 = No meaning. Zero on Save-Kun units. 332 | - Bit 2 = Identification. Transfers data back to the console only at predefined moments in the protocol; otherwise 0. 333 | - Bit 1 = No meaning. Zero on Save-Kun units. 334 | - Bit 0 = Data to be returned to the console 335 | 336 | Note that all data is sent least-significant bit first (in both directions): 337 | 338 | | Sequence | Number of Bits | Meaning | 339 | |----------|----------------|---------| 340 | | 1 | 2 | Send identification bit - echo the incoming bit back on bit 2 | 341 | | 2 | 1 | Request type (0 = Write; 1 = Read) | 342 | | 3 | 10 | Address (minimum granularity 128-byte offset within memory) | 343 | | 4 | 20 | Transfer length in bits (can address 128KB of memory down to the exact number of bits) | 344 | | 5 | (xfer len) | Data (to or from the console) | 345 | | 6 | 0 or 2 | Trailing empty bits (**Only if a write command**). Data out is set to zero after the first bit is received | 346 | | 7 | 3 | Trailing empty bits. Data out is set to zero after the first bit is received | 347 | 348 | At the conclusion of a transfer, the Memory base 128 disengages and allows the daisy-chained controller outputs 349 | to be returned to the console until the next $A8 sequence is received from the console. 350 | 351 | **Compatibility:** Games which are not specifically written to support the Memory Base 128 should work properly.
352 | Compatible games include: 353 | - HuCard : None 354 | - CDROM 355 | - A. III - Takin' the A Train 356 | - Atlas Renaissance Voyage 357 | - Bishoujo Senshi Sailor Moon Collection 358 | - Brandish 359 | - Eikan ha Kimini - Koukou Yakyuu Zenkoku Taikai 360 | - Emerald Dragon 361 | - Fire Pro Jyoshi - Dome Choujyo Taisen 362 | - Ganchouhishi - Aoki Ookami to Shiroki Mejika 363 | - Linda Cube 364 | - Magicoal 365 | - Mahojng Sword Princess Quest Gaiden 366 | - Nobunaga no Yabou - Bushou Fuuunroku 367 | - Nobunaga no Yabou Zenkokuban 368 | - Popful Mail 369 | - Princess Maker 2 370 | - Private Eye Dol 371 | - Sankokushi III 372 | - Shin Megami Tensei 373 | - Super Mahjong Taikai 374 | - Super Real Mahjong P II - P III Custom 375 | - Super Real Mahjong P V Custom 376 | - Tadaima Yuusha Boshuuchuu 377 | - Vasteel 2 378 | 379 | 380 | ### X-HE3 Converter for XE-1AP Analog Controller 381 | 382 | The X-HE3 converter connects a XE-1AP controller (originally made for MSX and X68000 computers) to the PC Engine, 383 | in both digital and analog formats. In digital format, the controller acts like a regular 2-button joypad. 384 | In analog form, the controller has additional inputs for games which specifically support the analog pad. 385 | 386 | For other joypad peripherals, the CLR line ls LOW under normal circumstances, and a pulse HIGH indicates either: 387 | a) A reset of the sequence, followed immediately by a low signal again, or 388 | b) Other data to be transmitted on the SEL line at the time of transition, like SPI protocol (MB128) 389 | 390 | Normally, when CLR is HIGH, the return data is not expected to be valid; in most cases, CLR is tied to a 74HC157 391 | on the /OE line, which will send all '0000' data back until CLR transitions low again; this is not the case for the 392 | X-HE3/XE-1AP combination (in analog mode). 393 | 394 | In this XE-1AP's analog case, the CLR signal is held high except for a brief pulse low, which signals the joystick 395 | to gneerate a pulse train back to the PC Engine, which must be monitored closely for transitions (which are driven 396 | by an internal state machine on the joypad, not the PC Engine). 397 | 398 | During this time, SEL is held LOW as the PC Engine is expected to watch for state transitions on the buttons 'I' and 'II', 399 | which are on D0 and D1 respectively. D0 is LOW and D1 is HIGH during the waiting period. After roughly 68.4 microseconds, 400 | data is ready, which is signalled by D1 (button 'II') transitioning low. 401 | 402 | When the console sees this, its duty is to transition SEL to HIGH, in order to read the four data bits on D0-D3 403 | (which normally correspond to UP/DOWN/LEFT/RIGHT), which in this situation correspond to the first nybble of data 404 | from the joystick. Then, SEL needs to transition back to LOW in order to monitor D0 and D1 again. The window of data 405 | availability (when button 'II' stays LOW) is fairly short, roughly 12.1 microseconds, requiring a tight loop on the 406 | host console. 407 | 408 | Before the next nybble is made available, button 'II' transitions HIGH for roughly 3.8 microseconds while data lines 409 | transition. Button 'I' transitions HIGH, representing the second nybble - and button 'II' transitions LOW again (for 410 | 12.1 microseconds again), signalling data ready, and the console needs to fetch the nybble by toggling SEL and reading 411 | the lines during the availability window. 412 | 413 | When button 'II' toggles high again, this time it stays high for longer (to prepare for the next 2 nybbles), at 414 | 21.8 microseconds. The pattern repeats, with 6 bytes (12 nybbles) in all being transferred; the entire time from the 415 | initial pulse to the end of the data transfer is roughly 350 microseconds. 416 | 417 | #### Data sequence output: 418 | 419 | The sequence of data (and bit-order) is as follows (from original joystick): 420 | 421 | All values are low when pressed, high when not pressed 422 | 423 | 1. Buttons A, B, C, D - (Note: A is pressed if either A or A' is pressed; same with B or B') 424 | 2. Buttons E1, E2, Start(F), Select (G) 425 | 3. Top 4 bits of 'channel 0' (Y-axis; limit up = 0x00, limit down = 0xFF) 426 | 4. Top 4 bits of 'channel 1' (X-axis; limit left = 0x00, limit right = 0xFF) 427 | 5. Top 4 bits of 'channel 2' (Throttle; limit up = 0xFF, limit down = 0x00) 428 | 6. 0000 (unused) 429 | 7. Bottom 4 bits of 'channel 0' (Y-axis) 430 | 8. Bottom 4 bits of 'channel 1' (X-axis) 431 | 9. Bottom 4 bits of 'channel 2' (Throttle) 432 | 10. 0000 (unused) 433 | 11. Buttons A, B, A', B' (This can differentiate between the buttons, whereas scan #1 merges them) 434 | 12. 1111 (all high) 435 | 436 | 437 | #### Logic state diagram: 438 | 439 | ![/images/XHE-3_protocol.png](/images/XHE-3_protocol.png) 440 | 441 | 442 | 443 | **Compatibility:** Games which are not specifically written to support the X-HE3/XE-1AP in analog format will not work properly, 444 | and should be used in digital format instead.
445 | Compatible games include: 446 | - AfterBurner II 447 | - Forgotten Worlds 448 | - Operation Wolf 449 | - Outrun 450 | - Thunder Blade (possibly) 451 | 452 | 453 | ## To Be Added: 454 | 455 | ### Develo Box Protocol 456 | 457 | The Develo Box is intended to interface with a PC, so there is communications software running on the PC side 458 | to handle the more complicated communications this involves. 459 | 460 | This deserves its own file, which will follow in the near future. 461 | 462 | --------------------------------------------------------------------------------