CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

プログラムサイズ

今回、データバッファ用の3.3V動作SRAMに手持ちのTC55V1001を使いました。これは1Mbitなので4MbitのフラッシュROMのどこに割り当てるかという指示が必要になります

f:id:O3I:20220410084326j:plain

そのため、DLL(シリアルからSRAMに転送)、LOAD(ROMからSRAMに転送)、PROGRAMSRAMからROMに書込み)、VERIFY(ROMとSRAM内容の比較)の各コマンドに転送元アドレス、転送先アドレス、転送サイズの引数を持つようにして、コマンドラインから引数の分離、解析処理を追加したら一気に4kWのプログラムエリアから溢れてしまいました。

リンカが出力するエラーがオーバーフローそのものずばりでなくなんかわかりにくいのですが。

:0:: error: (1347) can't find 0x12 words (0x12 withtotal) for psect "text8" in class "CODE" (largest unused contiguous range 0xC)

 

まずはサイズを食っている書式付き文字列変換printf系の組込み関数はヘキサ表示のためにしか使ってないので自前の関数に差し替え

f:id:O3I:20220410090254j:plain

 

大量の固定文字列リテラルを含むヘルプメッセージもざっくり削除。こういった文字列出力系はコマレスI/Fにしたらそもそも要りませんけど。あと処理の中で同じような記述をしているところを共通関数で括りだしたりしてチマチマとサイズを削りました。これでギリ収まってプログラムスペース消費は99%になりました

f:id:O3I:20220410082456j:plain


ここはケチらないで本来はデバイス自体をメモリの大きいものに交換すればいいですね

40ピンのPICで35ピンのGPIOが確保できるものであればピン配置は変わらないのでプログラムはそのままで置き換えできそうです。最近のデバイスは容量が大きく低電圧でも動作し、入手し易そうなものでも

 PIC16F1939   プログラムエリア16kW

 PIC18F47Q43  プログラムエリア128kW

が使えそうです。PIC18F47Q43だとRAMエリアも8kbyteあるので簡単なコードであれば外付けのバッファSRAMもいらないかもしれません。

これ買ってこようかと思ったらPIC18F47Q43PICKIT3がサポートしてないみたいです。残念、