Z80に手持ちのLCDを接続してみました。
物はHardOffで手にいれたROHMのRCM2010Rです。
インターフェースはHD44780の互換のようです。
LCDにコネクタを付けようかとも考えたのですが、フラットケーブルのパターンがあったので、直にハンダ付けしました。反対側はコネクタにしました。
最初にバスに直接ぶら下げてみたのですがうまくいきません。RCM2010Rで使われているコントローラは東芝のT7934でデーターシートを読んでみると4種類ありRCM2010Rに使われているT7934は0000で68系のインターフェースでした。
68系のチップイネーブルはEで書かれていて、80系はCSと書かれていることが多いようです。
HD44780やその互換チップは68系のインターフェースがほとんどのようです。
思案して8255のPortAに4Bitインターフェースで接続することにしました。書き込みしか必要ないので、R/WはGNDに落としてRSとEだけを制御します。計6本の制御になります。
8255ピン | 接続 |
---|---|
PA0 | LED |
PA1 | 空き |
PA2 | LCD RS |
PA3 | LCD E |
PA4 | LCD D4 |
PA5 | LCD D5 |
PA6 | LCD D6 |
PA7 | LCD D7 |
配線を勘違いしてちょっと手こずりましたが、表示できるようになりました。
テストプログラムは以下になります。
;
;
;
PORTA EQU 0E0H
PORTB EQU 0E1H
PORTC EQU 0E2H
CTL EQU 0E3H
; on EfexMon
ORG 8000H
LD A, 80H
OUT CTL
LD B, 0FFH
CALL LWAIT
LD A, 030H
CALL LCDW4
LD B, 080H
CALL LWAIT
LD A, 030H
CALL LCDW4
LD B, 080H
CALL LWAIT
LD A, 030H
CALL LCDW4
LD B, 080H
CALL LWAIT
; Set Function
LD A, 020H
CALL LCDW4
LD B, 010H
CALL SWAIT
; Set Function
LD A, 020H
CALL LCDW4
LD A, 080H
CALL LCDW4
LD B, 010H
CALL SWAIT
; Dispay ON
LD A, 000H
CALL LCDW4
LD A, 0C0H
CALL LCDW4
LD B, 010H
CALL SWAIT
; Display Clear
LD A, 000H
CALL LCDW4
LD A, 010H
CALL LCDW4
LD B, 010H
CALL LWAIT
; Set Entory Mode
LD A, 000H
CALL LCDW4
LD A, 060H
CALL LCDW4
LD B, 010H
CALL SWAIT
LXI H, HELLO
CALL PRINT
LOOP1
LD A, 01H
OUT PORTA
LD B, 0FFH
CALL LWAIT
LD A, 00H
OUT PORTA
LD B, 0FFH
CALL LWAIT
JMP LOOP1
LCDW4 ANI 0F0H
OUT PORTA
NOP
NOP
NOP
ORI 08H
OUT PORTA
NOP
NOP
NOP
ANI 0F0H
OUT PORTA
RET
PUTC MOV B, A
ANI 0F0H
ORI 0CH
OUT PORTA
NOP
NOP
NOP
ANI 0F4H
OUT PORTA
MOV A, B
RLCA
RLCA
RLCA
RLCA
ANI 0F0H
ORI 0CH
OUT PORTA
NOP
NOP
NOP
ANI 0F4H
OUT PORTA
RET
PRINT MOV A, M
CP 0
RET Z
CALL PUTC
LD B, 10H
CALL SWAIT
INC HL
JMP PRINT
SWAIT DCR B
JP NZ, SWAIT
RET
LWAIT
LD A, 0FFH
WLOOP
NOP
NOP
NOP
DEC A
JP NZ, WLOOP
DEC B
JP NZ, LWAIT
RET
HELLO DB 'Hello Z80'
DB 00H
昔の本を見ていたら、80系のCSを68系のEにする回路がありました。140nsの遅延回路のようです。