sanguisorba が 2021年11月10日00時05分14秒 に編集
ウェイトを長くした
メイン画像の変更
本文の変更
ヘッドが摩耗して使えなくなったFD1165(8インチフロッピードライブ)を廃棄することにしたわけですが、基板をみたらこんなものがついていました。  下のμPD52502DはFD1165専用FDCなので使い道がないとして、上のNEC D8748はintel MCS-48互換のワンチップマイコンで、しかも窓付きなので消去して再利用できそうです。 ネットで探したら手軽なライター回路を発見したのでプログラミングしてみることにしました ## 開発環境 チップをプログラミングする上で必要なものは以下のものです * プログラマ * イレーサ * コンパイラ ## プログラマ An easy to build MCS-48 (8748 / 8749 / 8741 / 8742 / 8048 / 8049 / 8050 / 8755) Programmer / Reader http://www.mattmillman.com/projects/hveprom-project/an-easy-to-build-mcs-48-8748-8749-8741-8742-8048-8049-programmer-reader/ 今回はこれを製作しました。3000円ちょっとで作れた気がします。Megaに書き込むためのコード、PC側のプログラマ用プログラムもページ内のリンクを追って行けばあります。  Arduinoへプログラムを転送する時に若干てこずりました。avrdudeを用いて書き込みを行いますが、AVRISPmkIIのような外部書き込みモジュールは必要なく、Arduino Mega側のUSBからArduinoブートローダを介して書き込みます。プログラムの書き込みコマンドが若干異なり、-c wiringとavrdude.confのパスを通す必要がありました。 ``` avrdude -C (path to Arduino-IDE folder)\hardware\tools\avr/etc/avrdude.conf -c wiring -P COM28 -b 115200 -D -p atmega2560 -U flash:w:hveprom.hex:i COMポート番号は適宜変更してください ``` 基板の右側にも書かれていますが、動作には12Vの電源が必要です。 ### 部品 (BOM) 指定されているインダクタと一部半導体部品は日本に無く、海外から取り寄せる必要がありましたが、貧乏学生なので送料を払うのが惜しく、秋葉原で推奨品に近そうな部品を揃えました。 基板はALLPCBで発注、部品は秋葉原の秋月電子と千石電商で全て買いました ``` 推奨部品でないものを★で示しました 〇インダクタ ★L1 220μH (指定は180μH) 可変インダクタも買ってみたが取り回しが面倒くさくてやめた 〇半導体部品 D1 D2 D6 1N4148 ★D3 3.3V 0.5W ツェナー GDZJ3.3B (推奨品は3.3V 1W) ★D4 ERA32-02 (全く違う) Q1-Q4 HTC BC547L ★Q5 ZVP2106A (全く違う) ★Q6-Q8 ZVP2106A (多分違う?) U2 NJM7805FA U3 HTC MC34063A U4 HTC MAX232EN ``` みなさんはちゃんと指定された部品を買ったほうが良いと思います ## イレーサ プログラムを書く前にフロッピードライブの制御プログラムを消す必要があります。 殺菌灯を使用するのがセオリーですが、どんなものか試してみたかったのでUV-LEDで挑戦してみました 基板付5W紫外線パワーLED 365nm https://akizukidenshi.com/catalog/g/gI-16213/ 定格1.4AのハイパワーLEDを使用してどんなものかを見てみました。 使用した電源は5V3Aです。  最初、5Ω(200mA)で2時間照射していましたが、何も変化がなかったので1Ω(1000mA)に変更し、発熱対策にCPUクーラーを使用して冷却しながらやりました。1Ωに変更してからおよそ3時間照射したところで消去完了となりました。(3時間つけっぱなしだったのでどのタイミングでブランクになったかは不明) 殺菌灯もわりと面倒な危険物なのでどちらがいいかは優劣つけにくいです。 ## コンパイラ MCS-48の純正のコンパイラはISIS-IIというOSに含まれています。つまるところ現代のPCで動くものではないということです。 Vectorに落ちているASM48というアセンブラもWindows 10/11では動きません。 https://www.vector.co.jp/soft/dos/prog/se007626.html 現在、動くと思われるコンパイラは同名のASM48 というオープンソースのアセンブラのみと思われます。 https://daveho.github.io/asm48/ ## 試しに書き込んでみた H8/3048の時はLチカのコードが無かったので自分で書きましたが、今回はVectorのほうのASM48にLチカのサンプルコード(FLASH.ASM)とコンパイル済のバイナリファイルがあるのでそれを使用してみました。Vector版のASM48では常に2048バイトで出力されるらしく、コンパイル済のバイナリファイルも2048バイトあるので8048/8748へ書き込む際は後半1024バイトを削除する必要があります。 ライターで書き込んで回路を組んでみたところ、ちゃんと動作しました。  ※内蔵ROMでプログラムを動かす際は、2732A, 74ALS573は不要です。EAピンへの入力を切ると内蔵ROMが有効、入力を入れると内蔵ROMが無効になるのでEAピンには何もつながないようにします。SSピンとINTピンの2つについても同様に何もつながなくても動きました。 このLチカプログラムを書き込んだ後にUVLEDを照射したところ、1時間では半分くらいがビット化けしている程度でまだ完全に消えていなく、2時間でブランクとなりました。フロッピードライブのプログラムはほぼ全領域を埋めていたのに対して、Lチカのサイズが小さかったのも影響しているかもしれません。 冒頭の動画のように、2つのLEDが交互に点滅させるプログラムは以下のようになります。GitHubのほうのasm48でコンパイル可能です ``` .org 0x000 START: MOV R0, 0x01 MOV A, R0 OUTL P1, A INIT: MOV R1, 0x00 LOOP:
MOV R2, 0x4D
MOV R2, 0x00
LOOP2: DEC R2 MOV A, R2 JNZ LOOP2 DEC R1 MOV A, R1 JNZ LOOP MOV A, R0 ADD A, 0xFF JNZ START MOV R0, 0x02 MOV A, R0 OUTL P1, A JMP INIT ``` ## まとめ * ライターは入手困難な部品が多いが、秋葉原で買える部品を組み合わせても動いた(推奨はしません) * UV-LEDはインテルのリテールCPUクーラーが要るレベルに発熱する * 枯れた技術すぎてコンパイラが少ない (やはり後発のMCS-51のほうが情報も作品例も多い) おわり