SC-3000 BASIC(2)
2023.03.29
VDP(9918)関係のファイルを覗いてみるとMAGのビットを参照していないことが判明しました。内部にスプライトを2倍に拡大する処理がないので設定しても拡大表示しません。ゲームがターゲットなのであれば仕方ない気もします。8x8のスプライトが16x16の拡大表示できないのでスプライトは16x16で作成することになります。
time.png 2023.03.29 20:51 | pmlink.png 固定リンク | folder.png SC-3000
SC-3000 BASIC(1)
2023.03.28
BASICプログラムを学ぶためにMSXのサンプルを参考にしながら打ち込んでみました。スプライト表示ができる単純なものです。がおもわぬ課題を見つけてしまいました。MAG命令を使ってスプライトの種類を指定するのですが値を変更しても効果がありません。例えばMAGに2を設定すると1ドットが2ビットで表示されるのでスプライトは2倍の大きさになるはずです。しかし、1ドットは1ビットのままです。ためしにエミュレータで実行してみるとちゃんと2倍の大きさになりました。うーん、これはVDPプログラムになにかしらの問題があるのかもしれません。他にもなにか課題があるのかもしれませんので、BASICのプログラムを通じて調査していきたいと思います。プログラムはこんな感じです。

100 M=2
110 SCREEN 2,2:CLS:MAG M
120 COLOR 15,4,(1,1)-(255,191),4
130 CURSOR 10,10:PRINT CHR$(17);"MAG";M
140 PATTERN S#0,"0E1D1F1F0E0810E0"
150 FOR I=0 TO 31
160 X=RND(1)*240:Y=RND(1)*176:C=RND(1)*15
170 GOSUB 200
180 NEXT I
190 GOTO 190
200 SPRITE I,(X,Y),0,C
210 RETURN

time.png 2023.03.28 20:26 | pmlink.png 固定リンク | folder.png SC-3000
シン・ESP32評価ボード(3)
2023.03.23
>4.BASICでLLISTのよる印刷時、一部印刷が間に合あっていない

プリンターへの出力処理をシリアル通信による出力に変更しました。物理的な印刷ではなくなるので物足りなさはありますがテキストデータとして保存できるメリットもあります。必要であれば普通のプリンターで印刷もできますので一石二鳥です。
time.png 2023.03.23 20:18 | pmlink.png 固定リンク | folder.png SC-3000
シン・ESP32評価ボード(2)
2023.03.19
>1.キーボードを使ってゲームが操作できない。

これはずいぶん悩みました。キースキャンするための値をチェックすると「7」しか出ていませんでした。これはジョイポートのスキャン値です。他のキーはまったくスキャンされていません。これではキーボードでの操作ができません。ではなぜ?

しばらく考えて気づきました。もしかするとSG-1000とSC-3000の区別を内部で行っている可能性があります。どうやって行っているのか考えてみました。可能性の1つとしては8255のポートを読みだすということです。SG-1000にはありませんのでWRITEしても書き込んだ値は読みだせません。そこでpa,pb,pc,cwのR/Wができるようにしておきました。念のためcwでのビット操作も入れて置きました。

ポートのR/Wができるようになるとキーボードのスキャンが行われるようになりました。これでジョイバッドとキー入力によるゲーム操作ができるようになります。謎のSC-3000エミュレータは正確にはSG-1000+キーボード的な構成です。まあまあSC-3000だと思いますがゲームソフトはそう思ってくれなかったところに落とし穴があった気がします。しかし、今回の修正でうまくSC-3000と思ってくれたようなので一安心です。


> 2.128KBのメモリーが確保できない。

調べるといろいろわかってきました。ESP32のSRAM(512KB)の内訳が、3つのユニットに分かれているということでした。

SRAM 0 192KB
SRAM 1 128KB
SRAM 2 200KB

このうちSRAM2が使えるSRAMだということなので200KB程度しか使えないようなので128KB確保はとうてい無理そうです。SPIで使えるSRAMを外付けするなどして対応も可能だということでした。512KBとい容量に騙されていましたね。当分、48KBでがまんすることにしたいと思います。


>3.ロレッタの肖像のメッセージが一部消えずに残る。

メッセージがスクロール表示される場合に1つ前の表示が残ってしまうケースです。表示処理に問題があると思っていたのですが、思わぬ副作用で尻尾をつかみました。前回のSC-3000化によりキーボード操作でゲームができるようになりましたが、その副作用でスクロール表示の残表示がひどくなったのです。上下左右とHOME、DELボタンをスキャンする処理が増えたためだと考えています。ということはZ80側の処理と表示処理がうまくかみ合っていない可能性があります。エミュレータなのでどうしようもないのですがそれでもキー操作を入れる前のほうがよかったというのはいただけません。でいろいろ調べていろいろ試したところ

z80_execute(227);

の数値を変えると表示が改善することがわかりました。数値を小さくすることで表示が正常に行われます。ただし設定されている値が何を意味しているのか分かっていませんので大きく変えることで別な不具合が発生する可能性があります。少しだけ小さくしほかにおかしな動作が起こっていないか慎重に見極めたいと思います。
time.png 2023.03.19 16:48 | pmlink.png 固定リンク | folder.png SC-3000
シン・ESP32評価ボード
2023.03.19
シン・ESP32評価ボードで動作するSC-3000エミュレータの作業を再開することにしました。おおむねSG-1000のゲームソフト、SC-3000のBASIC LV3は動作することを確認しています。あとは細かな課題が残っています。

1.キーボードを使ってゲームが操作できない。
2.128KBのメモリーが確保できない。
3.ロレッタの肖像のメッセージが一部消えずに残る。
4.BASICでLLISTのよる印刷時、一部印刷が間に合あっていない。

などがあります。3.はVDP周りなので対応が微妙です。2.はファイルをシークして読み込むことで対応しています。他に方法がないのか調査します。1.はSG-1000とSC-3000の違いが影響している可能性がありそうです。4.はプリンターとの通信速度を調整するかバッファを設けるかするなどの対応が必要だと考えています。早めに課題をクリアして完成度を高めたいところですね。
time.png 2023.03.19 16:41 | pmlink.png 固定リンク | folder.png SC-3000

- CafeLog -