コナミのスクランブル(カートリッジ版)を実行させた場合、開始時に鳴る音楽のテンポが違うというものです。
確かに、PC-6001初代機と、mk2ではテンポが違って、初代機に比べてmk2のテンポがかなり遅く感じます。
BASIC-ROM の違いかとも思いましたが、エミュレータでは同じテンポで鳴ります(mk2と同じ、遅い方のテンポ)。
FPGA版ではどうかと調べると、実機と同じように鳴りました。
ただ、心当たりがないので、調べてみました。
結論は、2ms タイマの割り込み間隔が違う(時がある)のが原因です。
初代機で、スクランブルを動かした場合、通常 2ms 周期の割り込みタイマが 1ms 周期になります(多分、意図的に 1ms にしているんだと思います)、
では、なぜこうなるか、ですが...
実は、PC-6001初代機と、PC-6001mk2以降では、タイマOFF からタイマON にした直後の、最初の割り込みタイミングが違います。

mk2以降では、タイマON にした直後でも 2ms 後に割り込みが発生します。
しかし、PC-6001初代機では、タイマON にした直後は、1ms 後に割り込みが発生します。
回路のバグというか仕様というか...ディスクリート部品で回路を組んでいる関係上、簡略化した副作用です。
スクランブルですが、割り込みルーチンは以下のようになっています。
4AE0 PUSH AF
4AE1 PUSH BC
:
4B1B LD A,03H
4B1D OUT (0B0H),A
4B1F DEC A
4B20 OUT (0B0H),A
4B22 EI
4B23 POP AF
4B24 RET
割り込みの最後で、タイマON → OFF → ON として、タイマの再起動をしています。
このため、大体1msの間隔で割り込みが入るようになっています。
(実際には、割り込みルーチンの最後の方でタイマOFF/ON をしているため、もうちょっと長いです)
mk2以降で同じようにするには、ポート0xF6 に、03H の代わりに 01H or 02H を出力すると、大体同じになるはずです(ソフトによります。スクランブルなら、02H ぐらいが適当なようです)。
解析お見事です。感服致しました。
エミュレータでは常に2msでぐるぐる回してるだけなので
On/Offのタイミングに関係なく一定の間隔で割込みが発生するのです。
実装を見なおす必要がありますね。
貴重な情報をありがとうございました。
実装の差異で、ちゃんとFPGA版は差異が出たようです。
...ただ、その違いは忘れていましたが(^^;
しかし影響範囲が大きそうなそうでもないような
面白い差異ですね。^^;
拡張RAMの件もありがとうございました。
パーツ買っていろいろやってみようと思います。
カートリッジコネクタの解決が一番大変な気がします。(笑
積極的に 2ms割り込みを短く出来るので、やっているソフトは他にもありそうです。
タイマ割込みはパルスの立ち上がり時に割込み発生となりますが
割込みパルス=カウンタ出力の初期値が L なので
1周期の半分に到達した所でパルスが立ち上がってしまうということですね。
インバータを入れて反転させておくのが正しいのでしょうが
普通は実害がないので省略しちゃったのでしょう。
回路図見てただけでは全く気が付きませんでした。
エミュレータに実装して実機と比較してみたらピッタリ!
mk2も試してみましたが,こちらもちょっと短くなるようです。
フロッガーを例に調べてみた結果,初回は88%くらいでした。
ただ非常に中途半端な数字なので別要因かもしれません。
カウンタで分周された出力は、リセット解除後、L→H→L→H… となりますが、カウンタが満了するのは、H→L の時なので、立ち下がりが正解です。
通常は、タイマON/OFF を頻繁に変更する事はないので、大丈夫だと考えたんでしょう(もしくは気付いてない)。