--- np2/romimage/DIPSW.X86 2003/12/10 12:48:08 1.1 +++ np2/romimage/DIPSW.X86 2004/02/07 21:23:22 1.4 @@ -8,30 +8,20 @@ -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 word ptr ds:[DIPSW_1], 0ce7ch - mov byte ptr ds:[DIPSW_3], 05eh +INIT_DIPSW: mov byte ptr ds:[DIPSW_1], 01111100b + mov byte ptr ds:[DIPSW_2], 11001110b + mov byte ptr ds:[DIPSW_3], 11011110b ret @@ -41,86 +31,89 @@ INIT_DIPSW: mov word ptr ds:[DIPSW_1], GET_DIPSW: mov dx, 841eh in al, dx - and al, 0bch - xor al, 004h - call xchgbits - mov ds:[DIPSW_1], al - inc dh - in al, dx - and al, 0afh - call xchgbits - mov ds:[DIPSW_2], al - inc dh - in al, dx - and al, 03fh - xor al, 008h - call xchgbits - mov ds:[DIPSW_3], al - inc dh + and al, 11111100b + or al, 00000010b + 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 dh, 87h in al, dx test al, 20h - je short sw25ed - or byte ptr ds:[DIPSW_2], 08h -sw25ed: + 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: + 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 - xor al, 4 - and al, 0bch - call check_p - jne short putdipsw1 - or al, 01h + call _xchgbits + and ah, 11111100b + in al, dx + and al, 00000010b ; soundbios + or al, ah + jpo short putdipsw1 + or al, 00000001b putdipsw1: out dx, al inc dh mov al, ds:[DIPSW_2] - call xchgbits - and al, 0afh - call check_p - jne short putdipsw2 - or al, 10h + call _xchgbits + mov al, ah + and al, 11101111b + jpo short putdipsw2 + or al, 00010000b putdipsw2: out dx, al inc dh mov al, ds:[DIPSW_3] - call xchgbits - and al, 03fh - xor al, 008h - call check_p - jne short putdipsw3 - or al, 80h + call _xchgbits + mov al, ah + and al, 01111111b + jpo short putdipsw3 + or al, 10000000b putdipsw3: out dx, al inc dh in al, dx - and al, 05fh + and al, 01011111b test byte ptr ds:[DIPSW_2], 08h je short sw25on - or al, 20h -sw25on: call check_p - jne putdipsw25 - or al, 80h + or al, 00100000b +sw25on: test al, al + jpo putdipsw25 + or al, 10000000b putdipsw25: out dx, al mov dh, 08eh in al, dx - and al, 6fh + and al, 01101111b test byte ptr ds:[DIPSW_3], 1 je short sw38on - or al, 10h -sw38on: call check_p - jne putdipsw38 - or al, 80h + or al, 00010000b +sw38on: test al, al + jpo putdipsw38 + or al, 10000000b putdipsw38: out dx, al ret +