考え方を学ぶ
2025.02.21
プログラムの組み方も人それぞれの考え方が反映されます。

組織の中では、属人的ではない方が望ましいかもしれませんけど。(作った人がいなくなったら保守できない・・・では困る)

お手本や周囲の仲間からの学んだことが基本になっていると思います。

Z80を覚えたのは高校生の頃、同じクラスの友人に教わりながらマシン語でプログラムを作っていました。

結果がわかりやすいのは画面表示の操作です。見てわかります。

たとえば白黒反転(MZ-2000だから緑白か)してみるとか。逆さまにするとか。鏡像にするにはどんなふうにプログラムを作るか。
画面の一部を切り抜いて、指定した位置へ移動させるには。
スクロール(タテ、ヨコ)をするには。

最初はループの作り方も知らなかったのですが、試しながら徐々に覚えていきました。

自分なりに考えて、画像を裏返し(鏡像)にしてみようと思い付きました。
それには1バイトごとにビットをひっくり返す必要があります。

最初に考えたルーチンは恥ずかしくて見せられたもんじゃありません。
BIT命令、SET命令、RES命令を使って、ビット0が0だったら結果レジスタのビット7を0にする。1だったら1にする。こんなふうに8ビット分、くそまじめに記述しました。

でも・・・よく考えてみると、結果を入れるレジスタを最初にクリアしておけば、0は書かなくて良いのです。1だけ見て処理すれば良いことに気づき、プログラムは短くなりました。

もう、これ以上考えることはない。自分なりに考えても、これ以上シンプルにはできないはずだ。

ところが友人は、シフト命令を使ってキャリーフラグ経由で1ビットずつ移すプログラムを作りました。まさに目から鱗でした。
私は、そういう使い方を思いつかなかったからです。命令表でキャリーフラグを巻き込んでシフトする命令があるのはたぶん知っていたはずです。でも、使い方(応用)を思いつかなかった。

コピー元のレジスタを左にシフト、最上位のビットがキャリーに入る。これをコピー先のレジスタにキャリーから入れて右にシフトする。この処理を8回繰り返せば1バイトの処理が済む。

でも、世の中にはもっと他の考え方もありました。
あらかじめ、反転データのテーブルを作っておくのです。あるいは、初期化時にRAM上へ展開するのでも良いでしょう。
こうすればアドレスの計算だけで速く変換できます。その代わりメモリを食います。

さらに考えると(考えるまでもないが)そのテーブルを、きりの良いアドレスに配置すればアドレスの計算も簡単かつ速くなるわけです。

これ以上は有るかと言うと、プログラムでやれる方法は思いつきませんが、ハードウェアを使ってよいのなら特定のアドレスなりポートに書くと(配線がクロスしていて)別のアドレスかポートから反転データが得られる、というのは可能です。(あくまでも、CPUにそういう命令がない場合の話です)
マイコンBASIC規格表
2025.02.11
今は新しい物は出版されていないが、トランジスタ規格表のシリーズを揃えていた。

昔はデータシート等は手に入れるのが容易ではなかった。とくに学生はそうだったろう。会社でも、代理店の営業さんが持ってきたり、いちいち代理店やメーカーに頼んで送ってもらっていた。そこで、こうした規格表や秋月で部品を買った時の添付資料なんかは貴重だった。

そういえば昔、勤務先から代理店に頼んで東芝のデータブックを全部もらおうとしたら、冊数が多いので・・・とやんわり断られ、どうしても必要な物だけにしてくださいというのでマイコンとロジックIC、あとは総覧表だけ。

いや、実際その当時は全部といえば相当な冊数が有ったので、使うかどうか不明な物まで送るのは無駄だったのだろう。自分がかつて勤務していた会社には一通り揃っていたのだが・・・。

ところで、

トランジスタ規格表のシリーズに「マイコンBASIC規格表」という変わり種があったのは誰も覚えていないかもしれない。

トランジスタだのダイオードだのの中に、BASICですからね。ハードとソフトの違い。

'80年代に各社がマイコン(パソコン)を売っていたが、それぞれBASICに方言があった。BASICインタプリタを作っていたのはマイクロソフトとか数社だっただろうけど。(だったら同じにしてくれれば良かったのに、と今更思う。各社の差別化のためにバラバラだったのだろうか)

そのBASICの命令ごとに、各機種の互換性とかコメントが書いてある本だった。「移植」をする人にも役立ったかもしれない。
PV-7 (MSX) 修理記
2025.01.23
PV-7は中学生の頃、一番最初に買おうと思ったMSXだったが(主に予算の都合)、買いに行った店に在庫がなく、代わりにHB-101を買ったのでした。結果的には良かった。

実際にPV-7を手に入れたのはずいぶん後のこと。2000年代に入ってから。

ネットオークション(あまり人気がなさそうな某所)に500円で出品されており、誰も入札がなかったので500円で落札した。これが、(うちで呼んでいる)初代PV-7となった。
届いたものを見ると土がついているし、一体どこから拾ってきたのかと言いたくなるような感じ。
それでも動作したので、手元に置いて時々使っていた。なんといっても小さいから場所をとらないし、片付けが簡単にできるのが良い。
その後、あまりにも身辺の物がごちゃごちゃになっていろいろ片付けたくなり、安価で売ってしまった。

それから数年たった、つい先日のこと。出品を見ていたらジャンクのPV-7が気になり始めた。いかんいかん、オークションやフリマは余計な物を買ってしまうから見ないようにしていたのに。

説明: 通電しましたが、画面は表示されませんでした。
ジャンクのわりには値段が高めの感じがしたし、実際、誰も落札しないでずっとそのままになっていた。

数日考えたが、どうも気になって、そんな壊れたPV-7を直して救済したくなった。気がついたらポチった後だった。仕方ない。

前置きが長くなったけれど、とにかく届いたので修理を始めたわけです。
確かに電源を入れてみると、画面は真っ黒で(映像信号は来ている)電源を入れ直しても何も表示されない。

届いた後、先に仕事を片付け、夕方から作業して2時間程度で動作するようになりました。



タイパでコスパな時代なので、先に結論を書くと、
原因はROMで、その内容が化けていました。

どうしてROMと特定できたか、などについては以降に書いていきます。



正常なROMと今回の個体のROMの内容 (文字列が含まれる部分)




ダンプを見てみると、8バイトおきにデータがおかしくなっているのがわかります。文字列だと比較しやすいでしょう。

ROMライタはピンエラーを出していました。そのソケットの接触不良を疑ってソケットを掃除したり、別のICソケットを下駄のように差してからROMライタに装着してみたが結局変わらずで、やはりROM自体の不良です。内部でアドレスピンA3が切れかかっているのか、微妙な状態なのかはわかりません。

原因をつきとめるまではそれなりに手間がかかりました。ある程度は経験とカンでした。

自作のチェッカーと、オシロでアドレスやデータの変化をみると、どうもループしているように見えました。同じパターンで繰り返しているようでした。

修理の流れは、
まず基本的なところから、電源の入口から3端子レギュレータ、各ICの電源ピンをあたってみるとほぼ5Vで正常。

ロジックICに異常は無いか。ひとつひとつ当たりました。目立った問題はなさそうです。
松下のTTLか。松下に限らず、当時は各社がTTLを作っていました。

製造から何十年も経過している為、電解コンデンサの劣化は確実でしょう。そこで全部取り外し、LCRメーターで容量とESRを測定・記録しました。結果的には、意外にもまだまだいけそうな数字でした。
電解コンデンサの不良が原因でおかしくなっているわけではない。この事が確認できました。
でも、今後を考えると新品交換するのが間違いないので新品を付けました。

ハンダ付けの状態も隅々まで見て、クラックなど無いか確認しました。片面基板では時々、よくこれで今まで大丈夫だったな、というハンダ付け状態は有ります。SG-1000IIを調べた時もそうでした。ギリギリ皮一枚?みたいなハンダ付けでつながっているのを見かけました。

ちなみにブラウン管テレビの修理経験では、クラックやハンダ剥がれは良くありました。重量のある部品や発熱の大きい部品は特にその傾向がありました。よくある横一とか。叩くと正常にうつる、ってのもだいたいこれです。

ジョイスティックコネクタを見ると、やはりパターンが剥がれたのか、リード線でつないで修理した痕跡がありました。

抜き差しの多い所だけに、片面基板では強度的に厳しいと思います。電源ジャックやスイッチはその弱点を意識して最初から対策されていましたが・・・。

さて、さっきオシロで調べた時の動きから考えると、どうもおかしい。たとえば、アドレスやデータバスがどこかでひっついていないか。(拡張スロットなども含めて目視で調べました)

あるいは、ひょっとしたらROMじゃないか?と疑ってみたわけです。
調べるためにROMと(ついでに)RAMを取り外し、ソケットを付けました。RAMのほうは後で容量を増やすことを意識しています。

ハンダ吸取機は3台持っているけど(業務なのでバックアップも含めている)、片面基板ではハンダ吸取線のほうが手軽です。吸い取り機はズゴーズゴーとうるさいし。

ROMを読み出してみると、おかしいことに気づきました。特に文字列のところを見たら明らかに変で、これはひょっとして・・・

幸い、先代のPV-7からバックアップしておいたROMデータがありました。これを27256に焼いて、差し替えてみます。・・・・・・あっさり動きました。
(MSX1だったら他機種でもROM内容は同じだろうと思います)

ROMのデータが壊れたりしていたのは過去何度か経験がありました。PC-486SE2の時は特定のビットが(全ての番地)1に固定されていて、物理的に壊れていたのだと思います。
窓付きROMなんかそのうち消えるんじゃないかと思っていますが、うちのMZ-2000は今のところ正常に動いています。

マスクROMだったら原理的に(記憶が配線として固定されているから)年数が経過しても消えないだろうという認識です。窓付きROMやフラッシュROMはフローティングゲートに電子を注入し、それが逃げないので記憶が維持されます。絶縁されていてもわずかに電子が漏れ出し、いずれ消えてしまいます。それは何十年ぐらいなのか。温度などの条件によっても左右されると思います。

見た目は窓なしでも、じつは中身は窓付きと同じというROMはありました。1回しか書き込まない前提で、'90年代ごろ製品用に良く使っていました。窓付き(セラミックパッケージ)はコストが高いので、通常のパッケージで1回しか書けないけど製品用にはコストダウンになるというわけです。
このPV-7に載っていたROMはそれなのかどうか確認できていません。

ROMは原理的にビット'0'を書き込むもので、初期(イレース)状態では全ビット'1'です。従って、ゼロを上書きしてみればそれが書き込める物なのかどうか判断できるかもしれません。

こういったMSXなどはオリジナル(マスター)のデータが有るからまだマシです。日常的に産業機器の修理をしていますが、ROMやPLDのデータが化けているのか正常なのか、比較するマスターがないので判断できない時があります。
ラベルにチェックサムが書いてあるだけでも助けになります。

ついでにPV-7の3端子レギュレータと放熱板を撤去しました。
3端子レギュレータは安価なので、大きい放熱板で何とかなったんでしょうけど、いまのエコな時代には合いません。3端子DC-DCコンバータと差し替えました。

でも、すぐそばの電解コンデンサと干渉してしまいました。

3端子DC-DCコンバータは、これも失敗した事があるのだけど、ピンの並びが手前側か奥か、2種類ありますよね。意外と気づかないけど、何種類か調べてみるとわかる。
今回の場合は手前側のほうが良かった。

以前別の仕事で試作をした時、この手前側か奥かというのをうっかり忘れていて失敗しました。
パターンに合うように実装したらじつはINとOUTが逆になっていて、マイコン回路に12Vがかかって高価なマイコンを壊してしまった。MEGA2560だから\3,000ぐらいする。一瞬でパー。
3端子DC-DCコンバータは、OUTからIN方向でダイオードが入っています。これは負荷側の放電目的(7805でも同様にダイオードを付けることがある)と思います。このダイオードを通って12Vがかかってしまったというわけです。(細かい話をすれば順方向電圧分だけ下がるが、その分はせいぜい1ボルト前後だから、5V動作のマイコンに対しては高すぎた電圧)

さて、PV-7の話に戻ります。
DC-DCコンバータに差し替え前・後の消費電流を比較してみると、9V側で200mA程度の差がありました。DC-DCコンバータのほうが200mA少なくなったのです。

7805のようなリニアレギュレータは抵抗で電圧を落としているようなものです。実際は複雑な制御をしていますが、原理は入出力の電圧の差を熱に変えて放出するわけです。

昔、あまりわかっていなかった頃は(別の用途で)24Vから5Vに変換しようとして、やたらに熱くて触ったら指を火傷した、なんて失敗もありました。生半可な放熱板じゃ到底間に合わない。どうしよう、と困ったものでした。結局パチンコのDC-DCを使って解決したっけ。

今回の場合、
9Vから5Vでその差は4V、減った電流は200mA、これで計算すると、今まで約0.8Wを熱として捨てていた事になります。

先代の魂(ROMデータ)を引き継いだ二代目PV-7、これから活躍してくれそうです。

まだキーボードの不調は直しておらず、これからです。

当時「よいパソコン、悪いパソコン」という自動車評論の本のマネみたいな本がありまして、PV-7は「ついに出た使い捨てパソコン」と酷評されていました。キーボードに関しては「キャラメルかヌガーを並べたような」と書かれていて、それで今でも覚えています。
当時ヌガーってのは何なのか知りませんでした。そういうお菓子か何かあるのかなと。今でもよく知りません。

まあ、その筆者の独断と偏見で言いたい放題でしたが、こんなキーボードでも慣れれば普通に使えるのですから不思議です。
ポケコンを熱心に使っていた頃も、あの細かいキーボードで素早く入力していました。特にテンキー部分には、軽く押して反応するように紙を挟んで調節していました。
連続用紙とドットプリンタ用インクリボン
2025.01.07
昔はドットプリンタが多くて、あの独特のジャージャー音を出しながら印字していたものだが、すっかり見かけなくなった。

ATMの通帳記帳はドットプリンタと思われる。今は、これぐらいか。
伝票など、ドットプリンタで印字したような物は時々見かける。

調べてみると、連続用紙は今でも売っている。だけどずいぶん値段が高い。
MZ-1P07で使っていたのは10インチ幅のもの。

学生時代は汎用コンピュータ(メインフレーム)でCOBOL実習をしたけど、もうちょっと幅の広い用紙だったと思う。

誰かが(意図せず)無限ループにしてしまって、いつまでも印刷が止まらない、紙が出続けるなんてハプニングは度々あった。

さすがにMZ-1P07のインクリボンは手に入らないだろうけど、ドットプリンタ用のインクリボンは各社あるので、寸法など合うものがあれば中身だけ詰め替えて使えないものか。

手や周囲が真っ黒になるので、あまりやりたくない作業であるが・・・

文字を重ね打ちして濃度を調整し、アニメのキャラをプリントするプログラムがあって、また出力してみたい。(まほーの天使とか)
ゲーム作り
2025.01.04
自分はゲームが作れなかった。

そもそもゲームは苦手だったし、パソコン(MSX)を買ったのはプログラミングを覚えたかった為で、本体購入時のゲームソフト1本付きは断り、その分は値引きしてもらった。

反射神経が要求されるようなゲームは全然ダメ。
リアル世界でも体育の球技なんか全然ダメ。よく、みんなはボールを追いかけ続ける事ができるなあ、って不思議に思っていた。当てられるのは得意だったんだがな・・・当てられるのは。
運動もダメなら運転もダメ。臨機応変に素早く判断してパッと操作するなんてのは私に求めないで。

そんな調子だもんで、そもそもゲームのアイデアは湧いて来ないから作ろうにも作れない。

でも、作れるやつが羨ましかった。特に専門学校の同級生のF君はベーマガやMファン、Mマガに何度も投稿・掲載されていた。
在学中にも何本か作って掲載され、彼とそのゲームで対戦もしてみたが、身近にそんなすごいやつがいるのはなかなかできない体験だった。まあ、それまでの自分は井の中の蛙だったのだろう。田舎で周囲に仲間がいなかったから、刺激も受けなかった。切磋琢磨がなかった。

そしてまた、専門学校の担任の先生もI/Oに作品が掲載され、賞金をもらって1年遊んでいたというお方。商品化され、長い間I/Oの広告などに載って市販されていた。

ところでゲームと言っても色々ある。分野は広い。

インベーダーのように自分がいて敵がいて、敵が攻めてくるので攻撃してやっつける、なんてのはリアルタイムに処理しないといけないのだけど、
最初そういうプログラムの作り方を知らないから、そこでひっかかったりもした。初心者の頃。

キー入力をそこで待つような処理しか知らなかったわけよ。HIT ANY KEY とか。

基本は、
キー入力を監視して、操作があれば自機を動かし、敵を(ある規則に基づいて)動かし、あるいは攻撃をさせたりする。弾を発射したらその動きも並行して行う。
基本的な考え方は、この処理の流れを途中で止める事なく、グルグルと(できるだけ高速に)回す。この考えを、ずいぶん後になるまで知らなかった。

ベーマガのプログラムをずいぶんたくさん打ち込んだけど、細かく解析したり読み込んだり、他人の考えを理解するのが苦手で、なかなかそういう大きな流れまでは読み取れなかった。

あとは、なんといってもセンスか。一応そういうゲームは作れても、面白いゲームとなれば、センスが問われるんだと思う。センスって何だって。暑い時にパタパタするやつだろ、たぶん。

- CafeLog -