honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

ツール配布について

一時的に本ブログおよびリンク先でソフトを配布していましたが、

同様の目的を果たすソフトウェアはすでにもう一つ開発されていて、
一時的に対抗意識を持ちましたが、私の力だけでは開発スピードに追い付かず、
当初の目的である本来の純粋な技術的好奇心を満たせなくなりました。

 個人的な技術的探求心と、副作用のバランスを考えた結果
公開を中止し、今後の配布を行わないことに決めました。

もう一つのほうは悔しくてダウンロードすらしていないので、
どのぐらい使えるかわかんないんですが、もし今ファミコンミニで使えなくても
そのうち使えるようになるんじゃないでしょうか。オープンソースだし。

使っていただいた方、中止後の再配布をお待ちいただいた方には申し訳ありませんが
ご理解いただけると幸いです。

尚、この件について、警告や圧力を受けたことは一切ありません。
発売されてから2か月、スプラトゥーンを我慢してファミコンミニをいじってきて
値段以上の元を取ったと思っています。が、まだまだ遊べるハードだと思うので、
そういった面で記事を書いていきたいと思います。

とりあえず、スプラトゥーンします。


ディスクシステムの引き出しを嫁が買ってくれたので、
これにディスクを実際に差し込めるようにするんじゃー

f:id:honeylab:20170110222318j:plain

 

どうすっかなこれ。

海外版NES届きましたー

もっと早く買っといてもよかったんだろうけど、ぼちぼち手に入れなければいけなくてヤフオクでぽちっとね…

f:id:honeylab:20170110110604p:plain

 

さて、基板のほうはこんな感じで入ってました。

f:id:honeylab:20170110110451p:plain日本版はこれとは全く裏返しで入っていて、デフォルトのUARTとかSDとかJTAG用の端子が反対面だったんですが、

f:id:honeylab:20170110110507p:plain

こっちは基板をつけたまま配線できますね。

ずいぶん改造がしやすいですね。

 

しかも左のほうにずいぶんスペースがあって、なんでも入りますねこれ。

(何を入れるんだよ…

とりあえず、JP版との違いを確認する作業をちゃっちゃっとするために、
またSDカードコネクタをつける作業でもしますかね…

 

メニューで言語選択できるんですね

f:id:honeylab:20170110110549p:plain


ファームはJP/それ以外 なのか。

Going on...

Little test

・pulled nandb tree on pcDuino(allwinner 10) ,run kachikachi

 # kachikachi  <my nes file>

kachikachi - v30.0.20160830.dev
===============================
updated hinting sdl game controller
added hinting sdl game controller
added hinting sdl game controller
ERROR in Mali driver:
* Mali device driver failed the API version check
* The solution is probably to rebuild the libraries and the Mali device driver.
Could not create window: Could not initialize EGL

Unhandled exception 11:
/home/ubuntu/newroot/usr/bin/kachikachi[0x1c204]
/lib/arm-linux-gnueabihf/libc.so.6(__default_sa_restorer_v2+0x0)[0xb6a48ab0]
Result 80150000 at ../../source/kachikachi_application.cpp(2109): BaseApplication::SetupWindowIconAndTitle() failed! Result 80150000 at ../../source/kachikachi_application.cpp(694): SetupWindowIconAndTitle() failed!

 

shit !

 

but I got complete commandline args.

# kachikachi --help

Kachikachi - v30.0.20160830.dev

===============================
Kachikachi
==========
--help, -h Print usage and exit.
--command=<file> Use file as the contents of the command line (one arg per line).
--log=<file> Log to file instead of stdout. Defaults to stdout
--ask, -a Ask for a rom and execute it.
--scale=<1..16> Specify the initial scale of the window.
--topmost Do not put window topmost.
--fullscreen Enable full screen display.
--keep-aspect-ratio Stretch the display while keeping the correct aspect ratio. (default)
--stretch Stretch the display to the maximum size available.
--pixel-perfect Stretch source pixels while keeping an integer target size.
--mute Start ROM with mute sound.
--pause-on-lost-focus Pause the emulator when the window loses focus.
--dont-show-debug-infos Disable debug display on screen.
--sync-guest-with-wall Synchronize emulation with wall time.
--sync-guest-with-host Synchronize emulation with host.
--sync-guest-none Don't synchronize emulation, run as fast as possible.
--load-state-slot=<index>, -lss<index> Load save state by index.
--load-state-file=<filename>, -lsf<filename> Load save state by filename.
--delete-after-load Delete save state after a successful load.
--dim-screen-after=<s> Dim screen after <s> seconds of inactivity.
--volume=<0..100> Set sound volume (default: 100).
--nes-version=[ntsc|pal] Specify the NES version (default is NTSC).
--graphic-filter=<index/name> Specify the graphic filter (refer to code for values).
--mem-init-pattern=[zero|type_1|type_0] Memory initialization pattern.
--fds-auto-disk-side-switch Automatic disk side switch detection
--fds-auto-disk-side-switch-on-keypress When a disk side switch is detected, only insert the other disk side on the next keypress
--fds-initial-disk-insert-delay=<value in frame count> Set initial disk insertion delay
--fds-initial-disk-insert-on-keypress Initial disk insertion on keypress
--fds-bios-file-name=<fds bios file name> Specify bios file to load (default to fds_bios.bin)
--fds-disable-host-guest-sync-on-disk-op disable host/guest synchronization during disk operation
--fds-disk-switch-side-delay=<delay in frames> Delay in frames between disk ejection and insertion
--delete-previous-record, Delete previous input records (if it exists).
--record-inputs=<filename>, Start or resume the specified input capture.
--replay-inputs=<filename>, Replay the specified input capture and exit.
--input-record-checkpoint-period=<period>, Save checkpoints during input recording at the specified period, in number of guest frames.
--input-record-exit-frame=<frame>, Save a checkpoint during input recording at the specified guest frame and exit.
--input-record-cache=<directory>, Enable checkpoint cache during input recording and set its path the specified directory.
--input-replay-screenshot-period=<period>, Take guest screenshots during input replay at the specified period, in number of guest frames.
--input-replay-screenshot-path=<path>, The path where replay auto-screenshots will be saved.
--input-replay-screenshot-to-stdout, Put the screenshot to stdout (works only with build that have no other outputs.
--input-capture-cut-path=<directory>, Set the directory where input capture cuts will be saved.
--input-replay-print-total-duration, Print the duration of the input replay.
--save-data-backing-file=<filename> Use the specified file for save data (SRAM or FDS writes), specifying an empty filename disable save data management.
--save-on-quit=<filename> Save state to the desired location on quit event.
--save-screenshot-on-quit=<filename> Save screenshot to the desired location on quit event.
--enable-crt-scanlines, -sc Enable CRT-like scanlines.
--enable-armet Enable Armet filter.
--armet-threshold=<t> Armet Detection Threshold (default is 20).
--set-dac-filters=[APU_FDS_14kHz|APU_14kHz_FDS_2kHz|none] Set DAC filters (default: APU_FDS_14kHz).
--guest-overscan-dimensions=<l,r,t,b> Set the number of black PPU pixels on the four screen borders.
--initial-fadein-durations=<t0,t1> Set the initial fadein durations in 1/10 of seconds. t0=blackscreen duration, t1=fadein duration.
--ppu-palette=<index/name> Specify the PPU palette (refer to code for values).
--ppu-palette-file=<filename> Specify the .pal palette file.

 

Got it!

They will be impelement to my tools next version.

NES差し替えツールの進捗(続き

実装はほぼ終わってるんだけど、まだ細かいところが公開レベルになってない。
本体の使用感が少し悪いのと、
このツールで書き換えるときに内蔵NANDのバックアップを内部に取ってるのを
確実にそれで元に戻せるかどうかの検証とかが残ってる。
あとは、ドライバ導入用の解説Docを書かないとな…(zadigでlibusbKを入れる)

たぶん海外版NESClassicでは動かないので、検証用にだれか本体ください。
そのほか、実装してほしい機能とかあったら早めに教えてね。

どうやら世の中にはHACKROMとかいうジャンルがあるらしいのを知ったので、
その需要向けに使えるかどうかとかも確認してみる。

f:id:honeylab:20170103132945p:plain

f:id:honeylab:20170103133441p:plain

書き換え前に警告

f:id:honeylab:20170103133607j:plain

書き換えFWで起動した後も、電源投入後には必ず「改造品」で「権利の問題」があることを毎回表示するつもり。

 

ロックマンとそのHACKROMしか入ってないファミコンミニ

f:id:honeylab:20170103132810j:plain

 

ROM追加ツールの動作について

ツールを作るにあたって、やることを整理するために図にしてみました。

f:id:honeylab:20161230002948p:plain

初期状態では、上のような動作をしています。
起動後、簡単なrootfsで動作して、暗号化されたrootfsをマウントして、switch_rootします。
このrootfsのサブディレクトリにROMツリーがあります。
「/dev/nandbにある暗号化されたrootfsをマウントする」という情報が、Linuxから書き換えにくいNANDの先頭のほうにあるので、ここを触らず、マウントされるrootfsのほうを書き換えることにします。

 

※このページの内容は、私が公開していた書き換えツールに関係する資料で、
現在公開されているhakchiシリーズの動作とは若干異なります。※

f:id:honeylab:20161230002951p:plain

上記のように書き換えます。
この書き換えをするためのLinuxKernel+ファイルシステムを作るのがROM追加ツールになります。
NANDの後半部分はMTDとしてLinuxから普通に触れるようになっていて、
数百メガ余っているため、ここを使ってもともとのrootfsのバックアップも取っておきます。
これにより、内部からROMを吸い出すことなく、あとで戻せるようになります。

ROM追加ツールを使って上記のように太線で囲まれた部分であるrootfsとROMツリーを書き換えてやると、次からは普通に電源を入れるだけで、追加されたROMが認識できるようになるはずです。
NANDのバックアップからのリストアツールも同様に準備する予定です。

 

で、ちょっと気になってるんだけどbootimg内のkey fileってみんな一緒だよね…?
(誰もわからんて…)