Joystick 入力 のBIOS解析してみた

おおまかな、流れ

  • CPUが、SUB CPU に、コマンド6を送る
  • SUB CPU は、JOYSTICK 入力されているかどうかを、調査する
  • CPUは、その間何もせずに待っている
  • SUB CPUは、CPU に割り込みをかける
  • CPUは、割り込みルーチンで、データを受け取り、(FECAH)にデータを書く
  • CPUのメインループが、データが来たのを検知して、ループから抜ける。

というのが、ざっとみたところですね。。

CPU → SUB CPU へのコマンド出力

Z0044:	PUSH	AF		;E8F	F5 		.
	LD	A,08H		;E90	3E 08 	送信許可申請
	OUT	(093H),A	;E92	D3 93 		..

Z0320:	IN	A,(092H)	;E94	DB 92 		..
	AND	08H		;E96	E6 08 		..
	JR	Z,0E94H		;E98	28 FA 		(.

	IN	A,(092H)	;E9A	DB 92 		..
	AND	080H		;E9C	E6 80 		..
	JR	Z,0E94H		;E9E	28 F4 		(.

	LD	A,09H		;EA0	3E 09   送信準備完了
	OUT	(093H),A	;EA2	D3 93 		..
	POP	AF		;EA4	F1 		.

	OUT	(090H),A	;EA5	D3 90 	SUB CPUへ出力
	RET			;EA7	C9		.

最後の、out (090h),A が、本来のコマンド出力で、それ以前の処理は、SUB CPU側のREADYをみているのだと思われます。

CPU <- SUB CPU からのデータ受け取り

Z0323:	LD	A,0CH		;E78	3E 0C 	受信許可申請
	OUT	(093H),A	;E7A	D3 93 		..

Z0319:	IN	A,(092H)	;E7C	DB 92 		..
	AND	08H		;E7E	E6 08 		..
	JR	Z,0E7CH		;E80	28 FA 		(.

	IN	A,(092H)	;E82	DB 92 		..
	AND	020H		;E84	E6 20 		. 
	JR	Z,0E7CH		;E86	28 F4 		(.

	LD	A,0DH		;E88	3E 0D 	受信準備完了
	OUT	(093H),A	;E8A	D3 93 		..

	IN	A,(090H)	;E8C	DB 90 		..
	RET			;E8E	C9		.

最後のIN A,(090H) で、データを受け取っているようです。

このREADYのビットの意味も、全然分かってないけど。。(´д⊂)‥ハゥ

たしか、CPUと、SUB CPUは、8255 でつながっていたはず。。