2026年9月26日土曜日

PS1メモリカードのセーブデータビューアを作った話

PS1セーブデータの中身簡単に確認したかった

まず、PS1メモリーカードビューアを作りました。



LOMの旧式の情報とかを少し検証するのにセーブデータが増えたので、ゲームをいちいち起動するのが面倒臭くなり……バイナリエディタでもある程度読めるけどそれはそれで面倒臭い。

リマスターのセーブ可能数は全部で20個(+オートセーブ1つ)。 PS1は15ブロックで、LOMセーブデータは2ブロック使う。つまり7つしか保存出来ない。

ディスクをバックアップしてエミュレーター起動させるのでセーブデータのバックアップは楽だけどメモカのバックアップが増える。

現代のPS1エミュレーターはHLE BIOS(疑似BIOS)があるのでBIOSを吸いだしたりする必要すらない。
便利な世の中になったものです。

メモリカードの仕様を調べた

そもそも容量って?

サードパーティー製のメモカって1MBって書いてあるから1MByteとかと思う人がいるかと思います。
ですがなんと1MBitしかない。8bitが1byteなので131,072バイトです。

なんで15ブロックなの?

内部のデータ構造は実は16分割されている。つまり16ブロックある。
ただし、うち1ブロックは管理データとなっているため、ゲームデータに使えるのは15ブロックという構造です。

0ブロック目はゲーム製品番号のSLPS-02170などが記述されている他、どのゲームが何ブロックあるのかなどが記載されている。
131,072÷16=1ブロック=8,192バイトです。
バイナリ的には「0~1F FF FF」のデータ2000区切り、2000*16のブロック。

基本的なゲームデータ構造はMagicの53 43「SC」始まり。
このSCはSony Computer Entertainmentの頭文字からきてるらしい。続けてアスキー文字でセーブデータ名が記述される。ここまで汎用仕様。

参考になったサイト

2026年9月1日火曜日

breakを入れてwidth:100%を入れてるのにテーブルはみ出る場合

幅100%レスポンシブテーブルのはみだしを消す方法

要因としては主に2つです。

  • デフォルトで折り返し出来ない文字
  • table幅 auto が幅100%より優先される場合

文字の強制折り返し

一番多いのは英字や一部半角記号、URL等が折り返せない場合です。逆に言えばこれは強制折り返しを入れれば解決します。

overflow-wrap: break-word;

これを入れれば基本単語折り返しせずに狭すぎる場合のみ折り返します。基本的には次の強制折り返しより推奨です。

word-break: break-all;

もう一つはこれで、完全な強制折り返しです。問答無用で狭くなった部分で折り返しします。

幅の最小を100%にする

width: 100%指定かつ「文字の強制折り返しを入れている。または日本語しかない」のにそれでも横幅を突き抜ける場合、問題になっているのはテーブルの幅が width: 100% を無視してデフォルトの幅調整 auto が優先される為です。
その場合、最小幅を100%にすると解決します。

min-width: 100%;

たったこれだけです。
つまり width: 100%; min-width: 100%; を table に指定すれば良いです。

この場合 box-sizing: border-box; を入れても解決はしません。必要なのは min-width: 100%; です。

諦めて横スクロールした方が良い

ただし、100px~200pxとかまで狭くなるならば流石に横スクロールした方が良いです。
日本語や強制breakの場合1文字や2文字でもちゃんと縮まるくらい強制力があります。

そういった場合はテーブルに最小幅を指定した上で、その table を div で囲み

overflow-x: auto;

を div に入れてください。