6502CPUでマイコンボード(3)

6502

前回、6502CPUのマイコンボードで機械語モニターが動きました。
機械語でプログラミングできる環境ができましたので、LEDチカチカ(Lチカ)させてみたいとおもいます。

68系SBC用のI/Oボード

LEDをつないでチカチカさせるためにパラレルI/O LSIが載ったI/Oボードがほしいところです。こんなこともあろうかと、私の6502マイコンは68系SBCシリーズ SBC6303とほぼ互換のバス端子を装備しておきました。

68系SBCシリーズ用のI/Oボードとしては、オレンジピコさんTomi9さん作のSBC-IO REV2という68系SBCシリーズ用のI/Oボードがあります。もともとはSBC6800、SBC6809ボードに外部端子アダプタをつけたとき用のボードであります。SBC6303にもパターンカット等すればつながります。

SBC-IO Rev02 専用基板 :PICO-A-009:オレンジピコショップ - 通販 - Yahoo!ショッピング
SBC-IO Rev02 基板です。SBC6800/SBC6809ルーズキットAdapter拡張版用のIOボードです。SBC6303ルーズキットで使用される場合はSBC6303ルーズキットに2本のジャンパー配線が必要になります。SBC6800/SBC6809ルーズキットAdapter拡張版などで使用できます。必要なIO...

Tomi9さんのBLOGのSBC-IOの説明記事はこちらです。なんともう2年前。いつか作ろう作ろうと思いつつ2年経ってしまいました。

SBC-IO Rev02
オレンジピコさんにて販売をしていただきましたのでお知らせします。商品ページはこちらです。 SBC6800/SB…

SBC-IOは上記記事を見てもわかるとおり、パラレルI/O(MC6821 PIA)の他に、シリアル(MC6850)、タイマーIC(MC6840)、メモリー(SRAM)と盛りだくさんです。今回、メモリーとシリアルは6502マイコンに搭載済みでしたので、パラレルI/O(PIA)を搭載してみます。

残念ながら手持ちのタイマーIC(MC6840)は正しく動作しなかったので、動作 未確認です。ちょっとした音楽を演奏できたらと思ったのですが….

SBC-IOへの部品組付けとアドレスデコーダー作成

SBC-IOへパラレルI/O(PIA)とタイマーIC(PTM)を組み付けた写真がこちらです。

手持ちのタイマーIC(PTM)が動作しなかったのでちょっと残念ですが、圧電スピーカをとりつける場所に手持ちの圧電スピーカが大きすぎてつながらなかったのでXHコネクタのジャックをとりつけました。

SBC-IOのバスはSBC6303ボードのバスとほぼ一緒ですが、ちょっとちがいます。Tomi9さんのSBC-IO REV2の回路図の抜粋は以下になります。
SBC6303では汎用I/OポートとなっているところにSBC6800/6809 ルーズキット(CPUボード)のアドレスデコーダ(74HC138)の信号線が出ています。

https://sbc738827564.files.wordpress.com/2018/08/sbcio_rev021.pdf

残念ながら、わたしの6502マイコンはアドレスデコーダーを搭載する場所がなくてこの信号線が出ていません。74HCT138 1つあれば作れる回路なので、別基板として作成ました。回路は、SBC6809ルーズキットに搭載されている回路と同じです。アドレスバスA15、A14、A13をデコードします。チップイネーブル端子はそれぞれVcc/GNDへつなぎます。
空いている場所には、そのうち何かを搭載したいですね。

LED点滅プログラムの作成

いままで出てきた基板を組み合わせて、SBC-IOのパラレルI/O(PIA)用外部端子のAポート側にLEDを接続してみます。
SBC-IOの回路図を見るとわかりますが、PIAの外部端子にVCCも出てますので、VCC→集合抵抗→LEDx8→PIAのAポート(PA0〜7)という感じで接続します。PIAのポートがLに落ちたら(つまりビットがゼロになったら)点灯します。

K65-SBC/src/LED_BLINK/LED_BLINK.asm at master · kuninet/K65-SBC
6502CPU Single Board Computer Project. Contribute to kuninet/K65-SBC development by creating an account on GitHub.

プログラムはこんな感じです。githubにも添付しました。
いつものThe Macroassembler ASでアセンブリ可能です。

;
; LED BLINK for SBC-IO(PIA)
;   KUNI-NET


	CPU	6502

TARGET:	EQU	"6502"

;
; PIA ADDRESS
;
PIACTLB         EQU     $8053
PIADATB         EQU     $8052
PIACTLA         EQU     $8051
PIADATA         EQU     $8050
;
WORK_AD         EQU     $30
;
        ORG     $200

START:
        JSR PIA_INIT
        LDA     #$20
        STA     CNT
LED_LOOP:
        LDA     #$55
        STA     PIADATA
        JSR     WAIT
        LDA     #$AA
        STA     PIADATA
        JSR     WAIT
        DEC     CNT
        BNE     LED_LOOP
;
        BRK
;
; PIA INIT
;
PIA_INIT:
        LDA     #$00
        STA     PIACTLA
        STA     PIACTLB
        LDA     #$FF
        STA     PIADATA
        LDA     #$00
        STA     PIADATB
        LDA     #$04
        STA     PIACTLA
        STA     PIACTLB
        RTS
;
; WAIT
;
WAIT:
        LDA     #$FF
        STA     WAIT_CNT
WAIT_LOOP:
        JSR     WAIT2
        DEC     WAIT_CNT
        BNE     WAIT_LOOP        
        RTS
;
WAIT2:
        LDA     #$FF
        STA     WAIT_CNT2
WAIT2_LOOP:
        DEC     WAIT_CNT2
        BNE     WAIT2_LOOP
        RTS
;
; WORK AREA
;
        ORG WORK_AD
CNT:	RMB	1		; COUNTER
WAIT_CNT:   RMB     1               ; WAIT COUNTER
WAIT_CNT2:   RMB     1               ; WAIT COUNTER
WAIT_CNT3:   RMB     1               ; WAIT COUNTER

こちらの初6502アセンブラプログラムを作ったときは、Universal MonitorでL(ロード)コマンドが未実装でしたので、Sコマンド(メモリーを1バイトづつ変更)にゆっくりとTeraTERMでWaitをかけながら流し込んでLEDチカチカさせることに成功しました!!やたっ。

おまけ:Universal MonitorのL(ロード)コマンド

The Macroassembler ASでアセンブリした結果は、p2hexコマンドでIntelHex形式で出力できます。
上記のLEDチカチカプログラムにトライしたあと、作者のElectrelicさんがUniversal MonitorにL(ロード)コマンドを装備してくれましたので、最新版のUniversal Monitor for 6502を使うとIntelHex形式のままTeraTERM経由でロードできるのでたいへん便利です!!

ダウンロード | Electrelic
ソースコード Universal Monitor のソースコードは以下からダウンロードできます。 HTTP 最新版は unimon-latest.tar.gz で取得できます。 過去のものが必要な場合は にあります。毎晩、subversion リポジトリに変化があった場合に tarball を生成しています。ブランチ...

最新のUniversal MonitorのLコマンドで お約束の”HELLO”メッセージ表示プログラムを書いてみました。

I/O基板も装備できて、アセンブラによる開発環境も整いました。
そのうちこのマイコンのSBC68系バスにFM音源LSIをつないでみたいと思います。
これまた久々にVGM音楽プレーヤーを6502CPUのアセンブラで移植してみたいと思っています。(だいぶ先かも…)

コメント