?? hd.asm
字號(hào):
delay1 macro
push cx
mov cx,0ffffh
@@: out 0ebh,al
out 0ebh,al
loop @b
pop cx
endm
delay2 macro
push cx
mov cx,00ffh
@@: delay1
delay1
loop @b
pop cx
endm
PRINTSTR MACRO X
push dx
push ax
LEA DX,X
MOV AH,09H
INT 21H
pop ax
pop dx
ENDM
.model small
.586
.stack 100
.stack
.data
HDBase dd 0 ;HD base address
CAd db 0
index1 db 0
index2 db 0
index3 db 0
sub1 db 'Subsystem ID: $'
sub2 db 'New Subsystem ID: $'
errorS db 'error occurs!$'
enters db 10,13,'$'
bit0 equ 1
bit1 equ 2
bit2 equ 4
bit3 equ 8
bit4 equ 16
bit5 equ 32
bit6 equ 64
bit7 equ 128
bit8 equ 256
bit9 equ 512
bit10 equ 1024
bit11 equ 2048
bit12 equ 4096
bit13 equ 8192
bit14 equ 16384
bit15 equ 32768
.code
.startup
mov ax,0
mov es,ax
mov eax,8000d810h
mov dx,0cf8h
out dx,eax
mov dx,0cfch
in eax,dx
and eax,0ffffc000h
mov HDBase,eax ;get HDBase address
call show_eax
printstr enters
;reset ==========================
mov ebx,HDBase
add ebx,08h
mov eax,es:[ebx]
and eax, 0fffffffeh
mov es:[ebx],eax
delay1
delay1
mov eax,es:[ebx]
or eax,bit0
mov es:[ebx],eax
@@:
mov eax,es:[ebx]
test eax,bit0
jz @b
;check codec ready
mov ebx,HDBase
add ebx,0eh
mov ax,es:[ebx]
push ax
call show_ax
printstr enters
pop ax
checkCAd: shr ax,1
cmp ax,0
je out1
inc CAd
jmp checkCAd
out1:
mov al,CAd
call show_al
printstr enters
;; get subsystem ID
mov dh,CAd
mov dl,01h
mov si,0f20h
mov cl,0
call make_command1
printstr sub1
call show_eax
printstr enters
;;;;;========= set subsystem
mov dh,CAd
mov dl,01h
mov si,723h
mov cl,78h
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
mov dh,CAd
mov dl,01h
mov si,722h
mov cl,56h
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
mov dh,CAd
mov dl,01h
mov si,721h
mov cl,34h
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
mov dh,CAd
mov dl,01h
mov si,720h
mov cl,12h
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;; get subsystem ID
mov dh,CAd
mov dl,01h
mov si,0f20h
mov cl,0
call make_command1
printstr sub2
call show_eax
printstr enters
;;;=======connect line 0bh
mov dh,CAd
mov dl,0bh
mov si,0f02h
mov cl,0
call make_command1 ;eax keep the value
; mov eax,00000000h
mov cl,0
@@: cmp al,1ch
je out2
cmp cl,4
jae tonext1
inc index1
shr eax,8
inc cl
jmp @b
tonext1: mov dh,CAd
mov dl,0bh
mov si,0f02h
mov cl,4
call make_command1 ;eax keep the value
@@: cmp al,1ch
je out2
inc index1
shr eax,8
jmp @b
out2: mov al,index1
call show_al
; printstr enters
mov dh,CAd
mov dl,0bh
mov si,701h
mov cl,index1
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;;;;;;;;;====== connect line 0ch
mov dh,CAd
mov dl,0ch
mov si,0f02h
mov cl,0
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
@@: cmp al,0bh
je out3
inc index2
shr eax,8
jmp @b
out3:
mov al,index2
call show_al
; printstr enters
mov dh,CAd
mov dl,0ch
mov si,701h
mov cl,index2
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;;;;;;;;=========connetc line 14h
mov al,index3
call show_al
printstr enters
mov dh,CAd
mov dl,14h
mov si,701h
mov cl,index3
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;;; set amplifier gain obh
mov dh,CAd
mov dl,0bh
mov si,3h
mov al,index1
mov ah,0
mov di,ax
shl di,8
or di,bit12+bit13+bit14+bit15+bit0+bit1+bit2+bit3+bit4+bit5+bit6
mov ax,di
call show_ax
printstr enters
call make_command2 ;input: dh:CAd, dl:Node ID, si:verb ID,di:payload output:eax
; ;;; set pin widget control
; mov dh,CAd
; mov dl,0bh
; mov si,707h
; mov cl,0e0h
; call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;;; set amplifier gain och
mov dh,CAd
mov dl,0ch
mov si,3h
mov al,index2
mov ah,0
mov di,ax
shl di,8
or di,bit12+bit13+bit14+bit15+bit0+bit1+bit2+bit3+bit4+bit5+bit6
mov ax,di
call show_ax
printstr enters
call make_command2 ;input: dh:CAd, dl:Node ID, si:verb ID,di:payload output:eax
; ;;; set pin widget control
; mov dh,CAd
; mov dl,0ch
; mov si,707h
; mov cl,0e0h
; call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
;;; set amplifier gain 14h
mov dh,CAd
mov dl,14h
mov si,3h
mov al,index3
mov ah,0
mov di,ax
shl di,8
or di,bit12+bit13+bit14+bit15+bit0+bit1+bit2+bit3+bit4+bit5+bit6
mov ax,di
call show_ax
printstr enters
call make_command2 ;input: dh:CAd, dl:Node ID, si:verb ID,di:payload output:eax
;;; set pin widget control
mov dh,CAd
mov dl,14h
mov si,707h
mov cl,0e0h
call make_command1 ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
end1:
.exit
make_command1 proc ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
call set_command1
mov ebx,hdbase
add ebx,60h
mov es:[ebx],eax ;command data
mov ebx,hdbase
add ebx,68h
mov ax,es:[ebx]
or ax,bit0+bit1
mov es:[ebx],ax
@@: mov ax,es:[ebx]
and ax,03h
cmp ax,2
jne @B
mov ebx,hdbase
add ebx,64h
mov eax,es:[ebx]
ret
make_command1 endp
make_command2 proc ;input: dh:CAd, dl:Node ID, si:verb ID,di:payload output:eax
call set_command2
push eax
call show_eax
pop eax
printstr enters
mov ebx,hdbase
add ebx,60h
mov es:[ebx],eax ;command data
mov ebx,hdbase
add ebx,68h
mov ax,es:[ebx]
or ax,bit0+bit1
mov es:[ebx],ax
@@: mov ax,es:[ebx]
and ax,03h
cmp ax,2
jne @B
mov ebx,hdbase
add ebx,64h
mov eax,es:[ebx]
ret
make_command2 endp
set_command1 proc ;input: dh:CAd, dl:Node ID, Si:verb ID,cl:payload output:eax
mov ah,dh
mov al,dl
shl eax,20
push ebx
xor ebx,ebx
mov bx,si
shl ebx,8
or eax,ebx
pop ebx
mov al,cl
ret
set_command1 endp
set_command2 proc ;input: dh:CAd, dl:Node ID, si:verb ID,di:payload output:eax
mov ah,dh
mov al,dl
shl eax,4
xor ax,si
shl eax,16
mov ax,di
ret
set_command2 endp
show_ax proc
push ax
mov al,ah
call show_al
pop ax
call show_al
ret
show_ax endp
show_eax proc
push eax
shr eax,16
call show_ax
pop eax
call show_ax
ret
show_eax endp
show_al proc far public
push ax
push dx
mov dh,al
and al,0f0h
shr al,4
add al,30h
cmp al,3ah
jb doing
add al,7
doing: mov dl,al
mov ah,2
int 21h
mov al,dh
and al,0fh
add al,30h
cmp al,3ah
jb doing1
add al,7
doing1: mov dl,al
mov ah,2
int 21h
pop dx
pop ax
ret
show_al endp
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -