|
|
| version 1.1, 2003/12/10 12:48:08 | version 1.4, 2004/02/07 21:23:22 |
|---|---|
| Line 8 | Line 8 |
| xchgbits: push cx ; alのbitを逆転... | _xchgbits: push cx ; alのbitを逆転... |
| mov cx, 8 | mov cx, 8 |
| mov ah, al | xchgbitslp: rcr al, 1 |
| xchgbitslp: rcr ah, 1 | rcl ah, 1 |
| rcl al, 1 | |
| loop xchgbitslp | loop xchgbitslp |
| pop cx | pop cx |
| ret | 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 | INIT_DIPSW: mov byte ptr ds:[DIPSW_1], 01111100b |
| mov byte ptr ds:[DIPSW_3], 05eh | mov byte ptr ds:[DIPSW_2], 11001110b |
| mov byte ptr ds:[DIPSW_3], 11011110b | |
| ret | ret |
| Line 41 INIT_DIPSW: mov word ptr ds:[DIPSW_1], | Line 31 INIT_DIPSW: mov word ptr ds:[DIPSW_1], |
| GET_DIPSW: mov dx, 841eh | GET_DIPSW: mov dx, 841eh |
| in al, dx | in al, dx |
| and al, 0bch | and al, 11111100b |
| xor al, 004h | or al, 00000010b |
| call xchgbits | call _xchgbits |
| mov ds:[DIPSW_1], al | in al, 33h |
| inc dh | test al, 08h |
| in al, dx | jne short getsw1ed |
| and al, 0afh | or ah, 80h |
| call xchgbits | getsw1ed: mov ds:[DIPSW_1], ah |
| mov ds:[DIPSW_2], al | |
| inc dh | mov dh, 85h |
| in al, dx | in al, dx |
| and al, 03fh | and al, 11101111b |
| xor al, 008h | call _xchgbits |
| call xchgbits | mov dh, 87h |
| mov ds:[DIPSW_3], al | |
| inc dh | |
| in al, dx | in al, dx |
| test al, 20h | test al, 20h |
| je short sw25ed | je short getsw2ed |
| or byte ptr ds:[DIPSW_2], 08h | or ah, 08h |
| sw25ed: | getsw2ed: mov ds:[DIPSW_2], ah |
| mov dh, 86h | |
| in al, dx | |
| and al, 01111111b | |
| call _xchgbits | |
| mov dh, 08eh | mov dh, 08eh |
| in al, dx | in al, dx |
| test al, 10h | test al, 10h |
| je sw38ed | je short getsw3ed |
| or byte ptr ds:[DIPSW_3], 01h | or ah, 01h |
| sw38ed: | getsw3ed: mov ds:[DIPSW_3], ah |
| ret | ret |
| SET_DIPSW: mov dx, 841eh | SET_DIPSW: mov dx, 841eh |
| mov al, ds:[DIPSW_1] | mov al, ds:[DIPSW_1] |
| call xchgbits | call _xchgbits |
| xor al, 4 | and ah, 11111100b |
| and al, 0bch | in al, dx |
| call check_p | and al, 00000010b ; soundbios |
| jne short putdipsw1 | or al, ah |
| or al, 01h | jpo short putdipsw1 |
| or al, 00000001b | |
| putdipsw1: out dx, al | putdipsw1: out dx, al |
| inc dh | inc dh |
| mov al, ds:[DIPSW_2] | mov al, ds:[DIPSW_2] |
| call xchgbits | call _xchgbits |
| and al, 0afh | mov al, ah |
| call check_p | and al, 11101111b |
| jne short putdipsw2 | jpo short putdipsw2 |
| or al, 10h | or al, 00010000b |
| putdipsw2: out dx, al | putdipsw2: out dx, al |
| inc dh | inc dh |
| mov al, ds:[DIPSW_3] | mov al, ds:[DIPSW_3] |
| call xchgbits | call _xchgbits |
| and al, 03fh | mov al, ah |
| xor al, 008h | and al, 01111111b |
| call check_p | jpo short putdipsw3 |
| jne short putdipsw3 | or al, 10000000b |
| or al, 80h | |
| putdipsw3: out dx, al | putdipsw3: out dx, al |
| inc dh | inc dh |
| in al, dx | in al, dx |
| and al, 05fh | and al, 01011111b |
| test byte ptr ds:[DIPSW_2], 08h | test byte ptr ds:[DIPSW_2], 08h |
| je short sw25on | je short sw25on |
| or al, 20h | or al, 00100000b |
| sw25on: call check_p | sw25on: test al, al |
| jne putdipsw25 | jpo putdipsw25 |
| or al, 80h | or al, 10000000b |
| putdipsw25: out dx, al | putdipsw25: out dx, al |
| mov dh, 08eh | mov dh, 08eh |
| in al, dx | in al, dx |
| and al, 6fh | and al, 01101111b |
| test byte ptr ds:[DIPSW_3], 1 | test byte ptr ds:[DIPSW_3], 1 |
| je short sw38on | je short sw38on |
| or al, 10h | or al, 00010000b |
| sw38on: call check_p | sw38on: test al, al |
| jne putdipsw38 | jpo putdipsw38 |
| or al, 80h | or al, 10000000b |
| putdipsw38: out dx, al | putdipsw38: out dx, al |
| ret | ret |