sanguisorbaのアイコン画像
sanguisorba 2021年11月06日作成 (2021年12月07日更新) © MIT
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 1947
sanguisorba 2021年11月06日作成 (2021年12月07日更新) © MIT セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 1947

MCS-48でLチカ

ヘッドが摩耗して使えなくなった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バイトを削除する必要があります。

ライターで書き込んで回路を組んでみたところ、ちゃんと動作しました。

D8748は5V駆動です

※内蔵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, 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のほうが情報も作品例も多い)

おわり

1
sanguisorbaのアイコン画像
マイコンを使わない低レベルな電子工作とかPCBパターン製作など
ログインしてコメントを投稿する