Hori Game Repeater

Discuss hardware-related topics, such as development cartridges, CopyNES, PowerPak, EPROMs, or whatever.

Moderators: B00daW, Moderators

Post Reply
krzysiobal
Posts: 886
Joined: Sun Jun 12, 2011 12:06 pm
Location: Poland

Hori Game Repeater

Post by krzysiobal » Thu Nov 05, 2020 7:13 am

A device plugged between Famicom EXP port and the joypad, meant to intercept the joypad keystrokes, store them on tape and play them back again giving ability to "save the game"

Image Image Image Image Image Image

Image Image Image Image Image Image Image Image Image

Quite poor in my opinion:
* totally impractical design - you need to press certain sequence of switches to make it work. Without this movie I wouldn't been able even know how to use it: https://www.youtube.com/watch?v=QECS8Jy3_YQ
* You can start saving only from the beginning of the game (when console is restarted), so you can't use it for a partial saves (macros), for example in RockMan where you need to make certain combination of jumps and moves to pass to next "save point" or to beat the whole level (you could've record yourself a whole cassette with sequences for every level in this game)
* Won't work with games that have some kind of randomness
* You need special Hori Joypad (15 pin, using $4016.D1) or you have to unplug the joypad from Famicom and plug it into this the 5 pin header socket. * The game you're playing need to OR $4016.1 with $4017.0

The PCB is one of the worst I have ever seen:
- paper laminate with non-plated vias (just like in SNES games or some Konami's Famicom PCB
- traces were drawn by hand, not by CAD
- there are signs of fixes - somebody tried to wipe out badly drawn track:
Image
- In this kind of PCB all connections to the components pin have to be done on the bottom layer, top layer is only for vias, but anyway there are tracks going to the components on the top layer, duplicated by connections on bottom layer
Image
- some part of PCB is not covered by soldermask at all
- They cut out the track going from power jack to 7805 and soldered a wrong-polarity protection diode (actually this is a feature). But what a funny diode is that?
Image

* I do not know if this is a mistake when soldering resistors, but I was not able to get any signal out of the tape recorder jack, maybe because the 1M resistor is too much?
Image

* Also skipping the second stage amplifier by shorting its input with output? Ehh.
Image



Internals
Device is built using custom TMP47C200 microprocessor, two SRAMS for storing keystrokes and a few 40xx components

Image Image Image

Principle of work

1. If RECORD/REPEAT button is slid into RECORD and STANDBY/STOP button is slid into STANDBY mode, it waits until console is restarted (either by the START button on Repeater or POWER/RESET button on the Famicom). It does not record anything until that happens. No idea how it actually detects that console is being restarted, maybe it waits for longer periods of inactivity on CLK or STROBE line.
* after that happens, device records inputs to the internal SRAM
* after recording should be stopped, slide the STANDBY/STOP into STOP mode
(see waveforms)
Image

* now if you want to store content of the internal RAM to tape, press SAVE buton
The sample waveform output to the recorder is shown below:
Image

2. If RECORD/REPEAT is slid into REPEAT and you press LOAD, it will playback what you've recorded.

The data to tape recorder is transmitted by a sequence of two (or three) different pulse lengths and duty (909 Hz, 1270 Hz, 2130 Hz)
Eech byte of RAM cell is stored a sequence of 8 pulses plus there is begin and end sequence for whole packet.

I did not analyse the protocol nor but it seems to be recorded as a kind of Run Length Encoding: when input combination changes, two bytes are saved - the combination itself (8 buttons in one bit) + number of frames the previous keystroke lasted (if it lasts more than 64 frames, that is 64 * 16.67 us = 1.06s, only a single byte with value of 64 is stored).

So the amount of inputs you can fit into the memory depends on how often you press the keys. Assuming NTSC console (frame every 16.67ms):
* In best scenario, where you almost do not press anything: 8192 bytes/SRAM * 2 SRAMs * 1.06 s = 4.82 hours
* In worst scenario, where you hold the TURBO button that alters every frame: 8192 bytes/SRAM * 2 SRAMs / * 16.67ms / 2 bytes per frame = 68 seconds

MCU
The code executed by TMP47C200 MCU, clocked by 4 MHz crystal seems to be internally pre-fabricated into the chip, but there is non-documented TEST pin that I do believe can be used to read back it content.


BTW. Can anyone abolish the 5 limit of attachments/post? I would like to start uploading all my images into the nesdev.bbs instead of using external hosting website.
Attachments
waveforms.rar
(3.44 MiB) Downloaded 95 times
TMP47C200N.pdf
(2.65 MiB) Downloaded 100 times
Last edited by krzysiobal on Thu Nov 05, 2020 8:29 am, edited 1 time in total.

User avatar
Jeroen
Posts: 1049
Joined: Tue Jul 03, 2007 1:49 pm

Re: Hori Game Repeater

Post by Jeroen » Thu Nov 05, 2020 7:39 am

Interesting analysis! It does seem quite cheaply made. (and hard to use)

As for the PCB being paper, I do think it helps to have some perspective on things. At the end of the day this would've been considered a toy, so there were probably (paper ;) ) thin margins. I suspect the reason they didn't cover the entire board with solder mask was to simply save a few cents on solder mask material.
Also whilst it looks like they didn't do a particular good job of laying out the board, I don't think not using CAD in itself is a "sin". I suspect this was a small operation and they might've outsourced it to a cheap engineering "firm" (possibly one man) to get laid out. But there's nothing inherently wrong about laying out a board this way other than being less practical than CAD nowadays.

I'm not sure I know what to look for in the image of the badly drawn track? I always find little engineering errors on things interesting.

That diode is an interesting package, I suspect it was the cheapest at the local electronics market that day :P.

Would love to see more things analysed like this!

nocash
Posts: 1400
Joined: Fri Feb 24, 2012 12:09 pm
Contact:

Re: Hori Game Repeater

Post by nocash » Thu Nov 05, 2020 12:25 pm

1M ohm output looks extreme, especially with the 1K ohm pulldown... though it might be intended for Mic In (rather than Line In)?
Most tape recorders did also have some volume regulator for recording (don't know if that's lowering or amplifying the incoming signal though).

I don't remember ever having seen egg-shaped diodes... but some webpages are actually showing similar "ceramic diodes" with package names SOD57 or SOD64.

The shortcut between inverter input+output pins is weird, don't know if that's a manufacturing accident (sticky solder, or missing solder stop?), or some wanted obscure fix, or whatever.
homepage - patreon - you can think of a bit as a bottle that is either half full or half empty

lidnariq
Posts: 10666
Joined: Sun Apr 13, 2008 11:12 am
Location: Seattle

Re: Hori Game Repeater

Post by lidnariq » Thu Nov 05, 2020 12:38 pm

nocash wrote:
Thu Nov 05, 2020 12:25 pm
1M ohm output looks extreme, especially with the 1K ohm pulldown... though it might be intended for Mic In (rather than Line In)?
The Family BASIC keyboard uses the same 1M / 1k combination.
See: http://www43.tok2.com/home/cmpslv/Famic/Fambas.htm - scroll down to "ファミリーBASICキーボードの回路図"

Bavi_H
Posts: 141
Joined: Sun Mar 03, 2013 1:52 am
Location: Texas, USA
Contact:

Re: Hori Game Repeater

Post by Bavi_H » Thu Nov 05, 2020 1:48 pm

I don't know Japanese, but I used Yandex Translate Image to OCR and Google Translate to do a translation of the side of the box with notes on it and sections 3 and 4 of the manual. I manually picked some characters from Windows Character Map to get some symbols and to correct a few of the OCR mistakes I noticed. I didn't spend time checking for more OCR mistakes, but the translation seems mostly understandable.

From the side of the box:
◢ゲームリピーターは、別売ジョイスティックの操作を記憶しますので、純正のコントローラは使用できません。
◢The game repeater remembers the operation of the optional joystick, so a genuine controller cannot be used.

純正コントローラを使用する場合は、別売品(コントローラⅠのみ)を、ゲームリピーター本体のコネクターに接続して使用してください。
When using a genuine controller, connect the separately sold product (Controller I only) to the connector of the game repeater main unit.

◢ソフトによってゲームリピーターが、使用てきないものがあります。
◢Some software may not be used by game repeaters.

ファミリーコンピュータ™ ファミコン™ は任天堂の商標です。
Family Computer ™ Famicom ™ is a trademark of Nintendo.

ゲームリピーターには、別売ジョイスティックまたは、別売純正コントローラⅠが必要です。
The game repeater requires an optional joystick or an optional genuine controller I.

※写真の製品は実物と多少異なります。
* The product in the photo is slightly different from the actual product.

特許出願中
Patent pending
Sections 3 and 4 from the manual:
3.操作方法
3. How to operate

3-1.記憶する場合。
a.切换SW2(STANDBY-STOP)をSTOPにして下さい。
b.切换SW1(RECORD-REPEAT)をRECORDにして下さい。
c.切换SW2(STANDBY-STOP)をSTANDBYにして下さい。
d.スタートを、押して下さい。(記憶を始めます)
e.ジョイスティックでアームを行なつて下さい。
e.記憶を終える時は、切換SW2(STANDBY-STOP)をSTOPにして下さい。

3-1. If you want to memorize.
a. Set the switch SW2 (STANDBY-STOP) to STOP.
b. Set switch SW1 (RECORD-REPEAT) to RECORD.
c. Set switch SW2 (STANDBY-STOP) to STANDBY.
d. Press Start. (Begin memory)
e. Use the joystick to move the arm.
e. When you finish the memory, set the switching switch SW2 (STANDBY-STOP) to STOP.

3-2.再生する場合。
a.切换SW2(STANDBY-STOP)をSTOPにして下さい。
b.切换SW1(RECORD-REPEAT)をREPEATにして下さい。
c.切换SW2(STANDBY-STOP)をSTANDBYにして下さい。
d.スタートを、押して下さい。(再生を始めます)
e.再生を終える時は、切換SW2(STANDBY-STOP)をSTOPにして下さい。

3-2. When playing.
a. Set the switch SW2 (STANDBY-STOP) to STOP.
b. Set switch SW1 (RECORD-REPEAT) to REPEAT.
c. Set switch SW2 (STANDBY-STOP) to STANDBY.
d. Press Start. (Start playing)
e. When you finish playback, set the switching switch SW2 (STANDBY-STOP) to STOP.

3-3.再生中に追加記憶する場合。
a.再生中に切換SW1(RECORD-REPEAT)をRECORDにして下さい。(SWを切り換えた時から追加記憶します。)
b.ジョイスティックでゲームを行なつて下さい。
c.記憶を終える時は、切換SW2(STANDBY-STOP)をSTOPにして下さい。

3-3. When additional memory is stored during playback.
a. Set switching SW1 (RECORD-REPEAT) to RECORD during playback. (Additional memory is stored from the time the SW is switched.)
b. Play the game with the joystick.
c. When you finish the memory, set the switching switch SW2 (STANDBY-STOP) to STOP.

3-4.テープレコーダーに記憶させる場合(SAVE)
a.テーブレコーダーのMIC端子とゲームリビーターのRECORD-OUTJACKを接続して下さい。
b.SAVEを行なう時は、切换SW2(STANDBY-STOP)をSTOPにして下さい。
c.テーブレコーダーを録音状態にしてかららームリビーターのSAVESWを押して下さい。この時、SAVE表示LEDが点します。
e.SAVEが問題なく終りりましたらSAVE表示LEDが消します。途中でエラーが起こりましたらSAVE表示LEDが点しますので、初め力らやり直して下さい。

3-4. When storing in a tape recorder (SAVE)
Connect the MIC terminal of the table recorder to the RECORD-OUT JACK of the game rebeater.
b. When performing SAVE, set the switch SW2 (STANDBY-STOP) to STOP.
c. After putting the table recorder in the recording state, press SAVE SW on the Muri Beater. At this time, the SAVE display LED lights up.
e. When SAVE finishes without any problem, the SAVE indicator LED turns off. If an error occurs on the way, the SAVE display LED will light up, so please try again first.

3-5.テープレコーダから再生させる場合(ROAD)
a.テープレコーダーのEAR端子とゲームリビーターのRECORD-INJACKを接続して下さい。
b.LOADを行なう時は、切換SW2(STANDBY-STOP)をSTOPにして下さい。
c.テーブレコーダーを再生状態にしてからゲームリビーターのLOADSWを押して下さい。この時、LORD表示LEDが点します。
d.LOADが問題な経わりましたらLOAD表示LEDが消します。途中でエラーが起こりましたらLOAD表示LEDが点滅しますので、初め力らやり直して下さい。

3-5. When playing from a tape recorder (ROAD)
a. Connect the EAR terminal of the tape recorder to the RECORD-IN JACK of the game rebeater.
b. When performing LOAD, set the switching switch SW2 (STANDBY-STOP) to STOP.
c. Put the table recorder in the playback state and then press the LOAD SW of the game rebeater. At this time, the LORD display LED lights up.
d. If LOAD is a problem, the LOAD indicator LED will turn off. If an error occurs on the way, the LOAD display LED will blink, so please try again first.

3-6.テープレコーダーのデータをチェックする場合。(VERIFY)
a.テープレコーダーのEAR端子とゲームリビーターのRECORD-INJACKを接続して下さい。
b.VERIFYを行なう時は、切換SW2(STANDBY-STOP)をSTOPにして下さい。
c.テーブレコーダーを再生状態にしてからゲームリビーターのVERIFYSWを押して下さい。この時、SAVE表示LEDとLOAD表示LEDが点します。
d.VERIFYが問題なく終わりましたらSAVE表示LEDとLOAD表示LEDが消します。途中でエラーが起こりましたら両方のLEDが点登しますので、初めからやり直してください。

3-6. When checking the data of the tape recorder. (VERIFY)
a. Connect the EAR terminal of the tape recorder to the RECORD-IN JACK of the game rebeater.
b. When performing VERIFY, set the switching switch SW2 (STANDBY-STOP) to STOP.
c. Put the table recorder in the playback state and then press VERIFY SW on the game rebeater. At this time, the SAVE display LED and the LOAD display LED are lit.
d. When VERIFY finishes without any problem, the SAVE indicator LED and LOAD indicator LED will turn off. If an error occurs on the way, both LEDs will point up, so start over from the beginning.

4.製品説明
ゲームリピーターの各種機能を説明します。

4. Product description
We will explain the various functions of the game repeater.

4-1.記憶時間
ゲームリピーターは、ジョイスティックの操作を記憶しますが、その時の時間はジョイスティックの操作の回数に比例しますので、連射機能を使用しますと極端に短かくなります。

下記に記憶出来る時間の目安を、示します。
通常操作20~40分
連射操作7~15分

4-1. Memory time
The game repeater memorizes the operation of the joystick, but the time at that time is proportional to the number of operations of the joystick, so using the rapid fire function makes it extremely short.

Below is a guideline for the amount of time you can memorize.
Normal operation 20-40 minutes
Rapid fire operation 7 to 15 minutes

4-2.操作上の注意点
a.記憶テーターの保持
ゲームリピーターがすでに記憶している操作データーは、ゲームリビーターを記憶状態にしますと、消去されてしまいます。
b.テーブレコーダーへの記憶再生
現在市販されているテープレコーーには、ゲームリビーターが使用出来ない物があります、推奨するテーブレコーダとして、任天堂製のデーターレコーダーを、御勧めします。この時、ゲームリビーターと力セトテーブレコーダ一とを接続する、コードは抵抗内蔵の物は何用しないで下さい。

4-2. Precautions for operation
a. Retention of memory datar
The operation data already stored by the game repeater will be deleted when the game rivator is stored.
b. Memory playback to the table recorder
Some tape recorders currently on the market cannot be used with game rebeaters, so we recommend Nintendo's data recorder as the recommended table recorder. At this time, do not use anything with a built-in resistor for the cord that connects the game rebeater and the force set table recorder.

c.ゲームソフト
ゲームソフトに依ってゲームリビーターが使用出来ないものが有ります。
d.ディスクシステム
ゲームリビーターをディスクシステムに使用する場合は、ゲームリビーターのスタートSWの変わりに、ファミコン本体のリセットSWを、使用して下さい。(ディスワゲームで、リセットポタンを押すとロードするソントには、使用できません。)
e.その他
ゲームリビーターはファミリーコンピュータ(任天堂製)以外のゲーム機には使用しないで下さい。他のゲーム機に使用されますと故障の原因になります。

c. Game software
Depending on the game software, the game rebeater may not be available.
d. Disk system
When using the game rebeater for the disk system, use the reset switch of the Famicom main unit instead of the start switch of the game rebeater. (In the Diswa game, it cannot be used for Sonto that loads when the reset button is pressed.)
e. Other
Please do not use the game rebeater for game consoles other than Family Computer (manufactured by Nintendo). If it is used for other game machines, it may cause a malfunction.

ccovell
Posts: 1041
Joined: Sun Mar 19, 2006 9:44 pm
Location: Japan
Contact:

Re: Hori Game Repeater

Post by ccovell » Thu Nov 05, 2020 4:04 pm

I had the Game Repeater back in Canada, and yes, I thought it was really weird... and of limited use.
krzysiobal wrote:
Thu Nov 05, 2020 7:13 am
* Won't work with games that have some kind of randomness
In theory, when you press the large button to reset/replay, the Game Repeater resets the Famicom, so the CPUs should be synchronized and the game becomes more deterministic -- even RPGs, which this could be slightly useful for grinding. I don't know if that ever worked in practice.

Bavi_H
Posts: 141
Joined: Sun Mar 03, 2013 1:52 am
Location: Texas, USA
Contact:

Re: Hori Game Repeater

Post by Bavi_H » Sat Nov 07, 2020 8:12 am

krzysiobal, thank you for providing your logic analyzer dump! I had fun looking at it. Here's my analysis:

hori-game-repeater-example.zip
(1.32 KiB) Downloaded 110 times

Here are some things I noticed:
  • In the recorder signal, the 3rd and 4th bytes of the 4-byte header appear to indicate the last address used in memory for the recording.
  • The trailer byte of the recorder signal appears to be a checksum.
  • The recorder pulses seem have various meanings to me in different spots, for example:
    short pulse = 0, long pulse = 1, most significant bit sent first
    short pulse = 1, long pulse = 0, least significant bit sent first
    short pulse = 1, long pulse = 0, most significant bit sent first
    Part of me wants some example RAM data to compare with so I can assign "official" bit endianness and bit values to the recorder pulses. But if the pulse meanings I observed actually work, it won't matter exactly what the bits in memory are, we might have enough information about the recorder signal to transfer data into the Game Repeater from a computer, to perhaps try some emulator controller movies on a real Famicom.

krzysiobal wrote:
Thu Nov 05, 2020 7:13 am
In worst scenario, where you hold the TURBO button that alters every frame: 8192 bytes/SRAM * 2 SRAMs / * 16.67ms / 2 bytes per frame = 68 seconds
Note: I get 136.5 seconds from that calculation...

krzysiobal
Posts: 886
Joined: Sun Jun 12, 2011 12:06 pm
Location: Poland

Re: Hori Game Repeater

Post by krzysiobal » Sun Nov 08, 2020 2:54 pm

Bavi_H wrote:
Sat Nov 07, 2020 8:12 am
Part of me wants some example RAM data to compare with so I can assign "official" bit endianness and bit values to the recorder pulses. But if the pulse meanings I observed actually work, it won't matter exactly what the bits in memory are, we might have enough information about the recorder signal to transfer data into the Game Repeater from a computer, to perhaps try some emulator controller movies on a real Famicom
Thank you for wonderful analysis. The only way of reading the memory content that comes to my mind is:
1) Replace the SRAM with socket and make integrated SRAM+battery to read it back in external programmer afterwards
sram.png
sram.png (38.73 KiB) Viewed 5035 times
2) Replace the SRAM with socket and make SRAM simulator-device (ordinary SRAM + FPGA or uC and USB, so it can read back or modify SRAM content at any time).

The second approach seems more educational so I will sick to it and give you results in few days.

Bavi_H
Posts: 141
Joined: Sun Mar 03, 2013 1:52 am
Location: Texas, USA
Contact:

Re: Hori Game Repeater

Post by Bavi_H » Sun Nov 08, 2020 9:25 pm

1. Thanks for thinking about capturing some RAM contents.
krzysiobal wrote:
Sun Nov 08, 2020 2:54 pm
The only way of reading the memory content that comes to my mind is [...] Replace the SRAM with socket and make [something to plug into the socket...]
Is it possible to connect the logic analyzer to the 8 data lines and the enable line of the RAM, then press the SAVE button on the Game Repeater to capture the RAM contents sequentially? (I don't know much about logic analyzers and if they interfere with the live signals on the circuit, so maybe this isn't possible?)

2. If you want to capture the tape recorder signal for a different controller sequence, we could compare the header and trailer parts. (To check if the unknown bytes in the header stay constant or change, if the other part of header still looks like the final address, and if the trailer still looks like a checksum.)

Post Reply