BRUCE’S CONTROLLER TESTER

BIOSにSC-3000用入力ルーチンを実装したので、BRUCE'S CONTROLLER TESTERで試しました。

[1][2][3][4][5][6][7][8][9][0][-][^]

f:id:tanam:20140615100403p:image:w360

BIOSにSC-3000用入力ルーチンを追加します。

> copy /b coleco29.bin+sc3k.bin COLECO.ROM

BIOS自身もメモリマップの修正などが必要です。

coleco29.asm

ORG	C000H
ORG	C3B9H
IO_Joy1		EQU	0DCH		; Joystick 1 input port
IO_Joy2		EQU	0DDH		; Joystick 2 input port
IO_Sound		EQU	07FH		; Sound chip output port
A0038		JP	V_NMI
A0066		JP	2000H

入力ルーチンをSC-3000用に置き換えます。

;***************************************
;	1F76	ReadCtlRaw
;
; Update the joystick and keypad shadow bytes.
;***************************************
A114A
_ReadCtlRaw	CALL	2010H ;IN	A,(IO_Joy1)	; Update joystick 1 shadow
		RET
;		CPL
		LD	(Joy1Shad),A
		IN	A,(IO_Joy2)	; Update joystick 2 shadow
		CPL
		OUT	(IO_KP_Select),A ; Select keypad mode
		LD	(Joy2Shad),A	; 13 T-states (wait for mode change)
		PUSH	AF		; 11 T-states
		POP	AF		; 11 T-states, total 35 (original 31)
		IN	A,(IO_Joy1)	; Update keyboard 1 shadow
		CPL
		LD	(Key1Shad),A
		IN	A,(IO_Joy2)	; Update keyboard 2 shadow
		CPL
		OUT	(IO_Joy_Select),A ; Select joystick mode
L1137		LD	(Key2Shad),A
;		RET

SC-3000用の入力ルーチンです。

sc3k.asm

		ORG	2000H
A2000	LD	A,02H
	LD	(0CFFFH),A
	RET
	DB	0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
	DB	0FFH,0FFH
A2010	PUSH	BC
	PUSH	DE
	LD	D,0FFH
	LD	A,07H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	4,A
	JR	Z,SKIP
	LD	D,0BFH
SKIP	LD	B,A
	LD	C,A
	RL	B
	RR	C
	JR	C,A202C
	RR	C
	LD	A,4CH
	AND	B
	LD	B,A
	LD	A,02H
	AND	C
	OR	B
	JR	A2038
A202C	RR	C
	LD	A,4CH
	AND	B
	LD	B,A
	LD	A,02H
	AND	C
	OR	B
	OR	01H
A2038	LD	(0C3EEH),A
	LD	A,(0CFFFH)
	LD	(0C3F0H),A
	LD	A,00H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT 0,A
	JR	Z,KEY8
	LD	A,02H
	JP	TENKEY
KEY8	IN	A,(0DDH)
	CPL
	BIT	0,A
	JR	Z,KEY2
	LD	A,0EH
	JP	TENKEY
KEY2	LD	A,01H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	0,A
	JR	Z,KEY9
	LD	A,08H
	JP	TENKEY
KEY9	IN	A,(0DDH)
	CPL
	BIT	0,A
	JR	Z,KEY3
	LD	A,04H
	JP	TENKEY
KEY3	LD	A,02H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	0,A
	JR	Z,KEY0
	LD	A,03H
	JP	TENKEY
KEY0	IN	A,(0DDH)
	CPL
	BIT	0,A
	JR	Z,KEY4
	LD	A,05H
	JP	TENKEY
KEY4	LD	A,03H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT 0,A
	JR	Z,KEYA
	LD	A,0DH
	JP	TENKEY
KEYA	IN	A,(0DDH)
	CPL
	BIT	0,A
	JR	Z,KEY5
	LD	A,06H
	JP	TENKEY
KEY5	LD	A,04H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	0,A
	JR	Z,KEYS
	LD	A,0CH
	JP	TENKEY
KEYS	IN	A,(0DDH)
	CPL
	BIT	0,A
	JR	Z,KEY6
	LD	A,09H
	JP	TENKEY
KEY6	LD	A,05H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	0,A
	JR	Z,KEY7
	LD	A,01H
	JP	TENKEY
KEY7	LD	A,06H
	OUT	(0DEH),A
	IN	A,(0DCH)
	CPL
	BIT	0,A
	JR	Z,NOKEY
	LD	A,0AH
TENKEY	AND	D
	LD	(0C3F0H),A
	LD	A,00H
	LD	(0CFFFH),A
NOKEY	POP	DE
	POP	BC
	IN	A,(0BFH)
	EI
	RET
END

Enri's Home Pageとは違う結果になりましたのでメモ。

キーパッドマトリックス
0=未使用、1=’6’、2=’1’、3=’3’、
4=’9’、5=’0’、6=’*’、7=’F3’、
8=’2’、9=゜#’、A=’7’、B=’F4’、
C=’5’、D=’4’、E=’8’、F=何も押されていない