File:  [RetroPC.NET] / np2 / romimage / DIPSW.X86
Revision 1.2: download - view: text, annotated - select for diffs
Sat Feb 7 16:53:44 2004 JST (21 years, 8 months ago) by yui
Branches: MAIN
CVS tags: HEAD
fix dipsw (T.Yui)



; ソフトディップスイッチ関係

; ds:[DIPSW_1]	DIPSW-1
; ds:[DIPSW_2]	DIPSW-2
; ds:[DIPSW_3]	DIPSW-3



xchgbits:		push	cx					; alのbitを逆転...
				mov		cx, 8
				mov		ah, al
xchgbitslp:		rcr		ah, 1
				rcl		al, 1
				loop	xchgbitslp
				pop		cx
				ret

check_p:		push	bx					; パリティの計算
				mov		bx, 80h
check_plp:		test	al, bl
				je		short check_p1
				inc		bh
check_p1:		shr		bl, 1
				jne		short check_plp
				test	bh, 1
				pop		bx
				ret

; ---------------------------------------------------------------------------

INIT_DIPSW:		mov		byte ptr ds:[DIPSW_1], 01111100b
				mov		byte ptr ds:[DIPSW_2], 11001110b
				mov		byte ptr ds:[DIPSW_3], 01011110b
				ret




; NP2依存部分

GET_DIPSW:		mov		dx, 841eh
				in		al, dx
				and		al, 11111100b
				or		al, 00000010b
				call	xchgbits
				mov		ds:[DIPSW_1], al
				inc		dh
				in		al, dx
				and		al, 11101111b
				call	xchgbits
				mov		ds:[DIPSW_2], al
				inc		dh
				in		al, dx
				and		al, 01111111b
				call	xchgbits
				mov		ds:[DIPSW_3], al
				inc		dh
				in		al, dx
				test	al, 20h
				je		short sw25ed
				or		byte ptr ds:[DIPSW_2], 08h
sw25ed:			mov		dh, 08eh
				in		al, dx
				test	al, 10h
				je		sw38ed
				or		byte ptr ds:[DIPSW_3], 01h
sw38ed:			ret



SET_DIPSW:		mov		dx, 841eh
				mov		al, ds:[DIPSW_1]
				call	xchgbits
				and		al, 11111100b
				mov		ah, al
				in		al, dx
				and		al, 00000010b				; soundbios
				or		al, ah
				call	check_p
				jne		short putdipsw1
				or		al, 00000001b
putdipsw1:		out		dx, al

				inc		dh
				mov		al, ds:[DIPSW_2]
				call	xchgbits
				and		al, 11101111b
				call	check_p
				jne		short putdipsw2
				or		al, 00010000b
putdipsw2:		out		dx, al

				inc		dh
				mov		al, ds:[DIPSW_3]
				call	xchgbits
				and		al, 01111111b
				call	check_p
				jne		short putdipsw3
				or		al, 10000000b
putdipsw3:		out		dx, al

				inc		dh
				in		al, dx
				and		al, 01011111b
				test	byte ptr ds:[DIPSW_2], 08h
				je		short sw25on
				or		al, 00100000b
sw25on:			call	check_p
				jne		putdipsw25
				or		al, 10000000b
putdipsw25:		out		dx, al

				mov		dh, 08eh
				in		al, dx
				and		al, 01101111b
				test	byte ptr ds:[DIPSW_3], 1
				je		short sw38on
				or		al, 00010000b
sw38on:			call	check_p
				jne		putdipsw38
				or		al, 10000000b
putdipsw38:		out		dx, al
				ret

RetroPC.NET-CVS <cvs@retropc.net>