--- np2/romimage/DIPSW.X86 2004/02/07 08:01:28 1.3 +++ np2/romimage/DIPSW.X86 2004/02/07 21:23:22 1.4 @@ -8,30 +8,19 @@ -xchgbits: push cx ; alのbitを逆転... +_xchgbits: push cx ; alのbitを逆転... mov cx, 8 - mov ah, al -xchgbitslp: rcr ah, 1 - rcl al, 1 +xchgbitslp: rcr al, 1 + rcl ah, 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], 11000110b + mov byte ptr ds:[DIPSW_2], 11001110b mov byte ptr ds:[DIPSW_3], 11011110b ret @@ -44,60 +33,64 @@ GET_DIPSW: mov dx, 841eh in al, dx and al, 11111100b or al, 00000010b - call xchgbits - mov ds:[DIPSW_1], al - inc dh + call _xchgbits + in al, 33h + test al, 08h + jne short getsw1ed + or ah, 80h +getsw1ed: mov ds:[DIPSW_1], ah + + mov dh, 85h 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 + call _xchgbits + mov dh, 87h in al, dx test al, 20h - je short sw25ed - or byte ptr ds:[DIPSW_2], 08h -sw25ed: mov dh, 08eh + je short getsw2ed + or ah, 08h +getsw2ed: mov ds:[DIPSW_2], ah + + mov dh, 86h + in al, dx + and al, 01111111b + call _xchgbits + mov dh, 08eh in al, dx test al, 10h - je sw38ed - or byte ptr ds:[DIPSW_3], 01h -sw38ed: ret + je short getsw3ed + or ah, 01h +getsw3ed: mov ds:[DIPSW_3], ah + ret SET_DIPSW: mov dx, 841eh mov al, ds:[DIPSW_1] - call xchgbits - and al, 11111100b - mov ah, al + call _xchgbits + and ah, 11111100b in al, dx and al, 00000010b ; soundbios or al, ah - call check_p - jne short putdipsw1 + jpo short putdipsw1 or al, 00000001b putdipsw1: out dx, al inc dh mov al, ds:[DIPSW_2] - call xchgbits + call _xchgbits + mov al, ah and al, 11101111b - call check_p - jne short putdipsw2 + jpo short putdipsw2 or al, 00010000b putdipsw2: out dx, al inc dh mov al, ds:[DIPSW_3] - call xchgbits + call _xchgbits + mov al, ah and al, 01111111b - call check_p - jne short putdipsw3 + jpo short putdipsw3 or al, 10000000b putdipsw3: out dx, al @@ -107,8 +100,8 @@ putdipsw3: out dx, al test byte ptr ds:[DIPSW_2], 08h je short sw25on or al, 00100000b -sw25on: call check_p - jne putdipsw25 +sw25on: test al, al + jpo putdipsw25 or al, 10000000b putdipsw25: out dx, al @@ -118,8 +111,9 @@ putdipsw25: out dx, al test byte ptr ds:[DIPSW_3], 1 je short sw38on or al, 00010000b -sw38on: call check_p - jne putdipsw38 +sw38on: test al, al + jpo putdipsw38 or al, 10000000b putdipsw38: out dx, al ret +