PIC16F628でGKA-98ATを動かす


GKA-98AT

まごの手本舗さんのお造りになった、PC-98用のキーボードをPC/AT互換機のPS/2ジャックに挿して使う変換アダプタGKA-98ATをもう一つ作りたい。GKA-98ATに必要な部品は、PIC16F84以外は手持ちので間に合う。もうちょい新しくて付加機能のある手元にPIC16F628が幾つも残っている(とはいえ何年も前に買ったものですが)。大変ありがたいことにソースを公開して下さっています。PIC16F84をわざわざ買うのも面倒ですしピン互換ぽいので置き換えてみました。したことはPIC16F628A事始に解説頂いてるまんましただけです。レジスタファイルの先頭アドレス書き換えと、EEPROMアクセスの箇所だけ書き換えたら動きました。当然ながら自己責任で、トラブルが起きてもまごの手本舗さんにご迷惑おかけしないようにお願いします。

書き換え箇所

プロセッサ選択(108〜112行目)

	RADIX		DEC
	PROCESSOR	16F84A
	INCLUDE		"P16F84A.INC"
	__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON
	__IDLOCS	H'0001'

☆☆☆書き換え後☆☆☆
	RADIX		DEC
	PROCESSOR	16F628
	INCLUDE		"P16F628.INC"
	__CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON & _MCLRE_ON & _LVP_OFF
	__IDLOCS	H'0001'

システムクロック(116行目)

#DEFINE	SYS_CLK 	0	; システムクロック 0=6.144MHz 1=10MHz

☆☆☆書き換え後☆☆☆
#DEFINE	SYS_CLK 	1	; システムクロック 0=6.144MHz 1=10MHz

ワークエリアの割り当て(142〜184行目)

WAIT0		EQU	0Ch
(中略)
PS2_DBAK	EQU	25h	; 直前に送信されたPS/2データ
☆☆☆書き換え後☆☆☆
WAIT0		EQU	20h
(中略)
PS2_DBAK	EQU	39h	; 直前に送信されたPS/2データ

スタートアップ(307〜308行目)

	ORG	00h
	BSF	STATUS,RP0	; SELECT PAGE 1

☆☆☆書き換え後☆☆☆
	ORG	00h

        clrf    PORTA           ; @Chg
        movlw   0x07            ; @Chg コンパレータOFF
        movwf   CMCON           ; @Chg ディジタルI/Oとして定義

	BSF	STATUS,RP0	; SELECT PAGE 1

EEPROM処理関連(1735〜1766行目)

EE_WRITE
	BCF	STATUS,RP0	; PAGE 0
	MOVWF	EEDATA
	MOVF	E_ADR,0
	MOVWF	EEADR
	BSF	STATUS,RP0	; PAGE 1
	BSF	EECON1,B2	; WRITE ENABLE
	MOVLW	55h		; EEPROM WRITE 1st PASSWORD 1
	MOVWF	EECON2
	MOVLW	0AAh		; EEPROM WRITE 2nd PASSWORD 2
	MOVWF	EECON2
	BSF	EECON1,B1	; WR BEGIN WRITE
WAIT_EEW
	BTFSC	EECON1,B1	; WAIT FOR WRITING
	GOTO	WAIT_EEW
	BCF	STATUS,RP0	; PAGE 0
	RETURN
;
; DATA EEPROM READ
; IN: W=EEPROM ADDRESS OUT: W=EEPROM DATA
;
EE_READ
	BCF	STATUS,RP0	; PAGE 0
	MOVWF	EEADR		; SET ADDRESS
	BSF	STATUS,RP0	; PAGE 1
	BSF	EECON1,B0	; READ BEGIN
WAIT_EER
	BTFSC	EECON1,B0	; WAIT FOR READING
	GOTO	WAIT_EER
	BCF	STATUS,RP0	; PAGE 0
	MOVF	EEDATA,0
	RETURN

☆☆☆書き換え後☆☆☆
EE_WRITE
	BSF	STATUS,RP0	; PAGE 1
	MOVWF	EEDATA
	BCF	STATUS,RP0	; PAGE 0
	MOVF	E_ADR,0
	BSF	STATUS,RP0	; PAGE 1
	MOVWF	EEADR
	BSF	EECON1,B2	; WRITE ENABLE
	MOVLW	55h		; EEPROM WRITE 1st PASSWORD 1
	MOVWF	EECON2
	MOVLW	0AAh		; EEPROM WRITE 2nd PASSWORD 2
	MOVWF	EECON2
	BSF	EECON1,B1	; WR BEGIN WRITE
WAIT_EEW
	BTFSC	EECON1,B1	; WAIT FOR WRITING
	GOTO	WAIT_EEW
	BCF	STATUS,RP0	; PAGE 0
	RETURN
;
; DATA EEPROM READ
; IN: W=EEPROM ADDRESS OUT: W=EEPROM DATA
;
EE_READ
;	BCF	STATUS,RP0	; PAGE 0
	BSF	STATUS,RP0	; PAGE 1
	MOVWF	EEADR		; SET ADDRESS
	BSF	EECON1,B0	; READ BEGIN
WAIT_EER
	BTFSC	EECON1,B0	; WAIT FOR READING
	GOTO	WAIT_EER
	MOVF	EEDATA,0
	BCF	STATUS,RP0	; PAGE 0
	RETURN

パッチファイル

Winmergeで作ったパッチファイルをうpして置きます。


Valid HTML 4.01 Strict