[an error occurred while processing this directive] [an error occurred while processing this directive]
vicky, я не обманщик, чесслово (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Peet_on_B3 17 января 2002 г. 12:03
В ответ на: Народ,может кто юзал MPU401(MIDI) ручками,облагодетельствует подсказкой отправлено vicky 17 января 2002 г. 11:37

Полные исходники уйдут чуть позже (мыло ёк ещё), а пока:

Есть-ли уверенность что базовый адрес 330?
Можно портвьювером поглядеть для уверенности.

На всякий пожарный вот пример автодетекта по основным адресам, работает железно:

Внимание на CHECKPRESENT

;****************************************************************************

LOAD PROC NEAR

LOAD_BEGIN: MOV DX,OFFSET MESS
MOV AH,09H
INT 21H
MOV SI,80H
LODSB
XOR CH,CH
INC AL
MOV CL,AL

SLOOP: LODSB
CMP AL,'/'
JE PRSEARCH
LOOP SLOOP
JMP HELPOUT

PRSEARCH: LODSB
OR AL,20H
CMP AL,'u'
JE UNINSTALL
CMP AL,'i'
JE INSTALL
LOOP PRSEARCH

HELPOUT: MOV DX,OFFSET HELPMESS

STREXIT: MOV AH,09H
INT 21H
MOV AX,4C01H
INT 21H

;****************************************************************************

UNINSTALL: CALL CHECKPRESENT
CMP PRESENT,FALSE
JNE UNINST00
MOV DX,OFFSET NOINSMESS
JMP STREXIT

UNINST00: MOV AX,352FH
INT 21H
ADD BX,02H
MOV AL,ES:[BX]
CMP AL,'S'
JNE UNINST01
INC BX
MOV AL,ES:[BX]
CMP AL,'S'
JNE UNINST01
INC BX
MOV AL,ES:[BX]
CMP AL,'D'
JNE UNINST01
PUSH DS
MOV AH,REQUEST_AH
MOV AL,GETSTATE_AL
INT 2FH
MOV AH,49H
INT 21H
JNC UNINST02
POP DS

UNINST01: MOV DX,OFFSET ERRUNMESS
JMP STREXIT

UNINST02: MOV AX,252FH
INT 21H
POP DS
MOV DX,OFFSET UNINSMESS
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H

;****************************************************************************

INSTALL: CALL CHECKPRESENT
CMP PRESENT,FALSE
JE INST00
MOV DX,OFFSET ALREMESS
JMP STREXIT

INST00: CALL CHECKPORT
CMP BASE_PORT,0
JNE INST01
MOV DX,OFFSET ERRINIMESS
JMP STREXIT

INST01: PUSH DS
MOV AX,352FH
INT 21H
MOV WORD PTR SAVED_INT,BX
MOV AX,ES
MOV WORD PTR (SAVED_INT+2),AX
MOV AX,CS
MOV DS,AX
MOV DX,OFFSET TSR_VECTOR
MOV AX,252FH
INT 21H
POP DS
MOV DX,OFFSET INSTMESS
MOV AH,09H
INT 21H
MOV DX,OFFSET ENDTSR
SHR DX,4
INC DX
MOV AX,3100H
INT 21H
ENDP

;****************************************************************************

CHECKPRESENT PROC NEAR
MOV PRESENT,FALSE
MOV AH,REQUEST_AH
MOV AL,CHECK_AL
INT 2FH
CMP AH,ANSWER_AH
JNE CHKPRES00
MOV PRESENT,TRUE

CHKPRES00: RET
ENDP

;****************************************************************************

CHECKPORT PROC NEAR
MOV BASE_PORT,330H
CALL CHKNUM
JC CHECKPORT00
RET

CHECKPORT00: MOV BASE_PORT,300H
CALL CHKNUM
JC CHECKPORT01
RET

CHECKPORT01: MOV BASE_PORT,320H
CALL CHKNUM
JC CHECKPORT02
RET

CHECKPORT02: MOV BASE_PORT,310H
CALL CHKNUM
JNC CHECKPORT03
MOV BASE_PORT,0

CHECKPORT03: RET
ENDP

;****************************************************************************

CHKNUM PROC NEAR
MOV DX,BASE_PORT
INC DX
MOV AL,0FFH
OUT DX,AL

MOV CX,1000H

TESTIN: IN AL,DX
TEST AL,80H
JNZ CHKNUM00
DEC DX
IN AL,DX
INC DX
LOOP TESTIN
STC
RET

CHKNUM00: DEC DX
IN AL,DX
CMP AL,0FEH
JE CHKNUM01
STC
RET

CHKNUM01: INC DX
MOV CX,1000H

TESTOUT: IN AL,DX
TEST AL,40H
JZ CHKNUM02
LOOP TESTOUT
STC
RET

CHKNUM02: MOV AL,0FFH
OUT DX,AL
MOV AL,3FH
OUT DX,AL
CLC
RET
ENDP

;****************************************************************************

Удачи.

PS: А в uart-mode переводишь? Карта какая?

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru