Category : Files from Magazines
Archive   : CUJ9201.ZIP
Filename : 1001066A
; Musical Instrument Digital Interface
; Assembler routines for an OS/2 Device
; Driver written in C.
;
; Copyright Carl M. Benda 1991
EXTRN _main:near
EXTRN _DevHlp:dword
EXTRN _interrupt_handler:near
PUBLIC _STRAT
PUBLIC _INT_HNDLR
PUBLIC _SetIRQ
PUBLIC _ReadBytes
PUBLIC _WriteBytes
PUBLIC _int3
PUBLIC __acrtused
_DATA segment word public 'DATA'
_DATA ends
CONST segment word public 'CONST'
CONST ends
_BSS segment word public 'BSS'
_BSS ends
DGROUP group CONST, _BSS, _DATA
_TEXT segment word public 'CODE'
ASSUME cs:_TEXT, ds:DGROUP, es:NOTHING, ss:NOTHING
.286P
;
; C startup routine for mididrv.c
; _Strat is called by OS/2 during
; boot time.
;
_STRAT proc far
__acrtused: ;prevent startup C
push 0 ;used as the dev value
push es ;send request packet address
push bx
call _main ;call driver main function
pop bx ;restore bx
pop es ;restore es
add sp,2 ;get rid of pushed 0
retf
_STRAT endp
_INT_HNDLR proc far
pusha ;save registers
push ds
push es
call _interrupt_handler ;handle interrupts
mov al,9h ;int value ;interrupt number.
mov dl,31h ;devhlp EOI ;DevHlp End of int
call [_DevHlp] ;call DevHlp entry
pop es
pop ds
popa ;restore everything
retf ;return to C function.
_INT_HNDLR endp
;
; These next routines are used by the C code
; because these procedures need to call special
; device driver helper routines requiring
; hardware registers of specific values.
;
_SetIRQ proc near
push bp
mov bp,sp
; flag located at bp + 8
; fnc located at bp + 6
; irq irq number at + 4
mov bx,WORD PTR [bp+4] ;irq number
mov ax,WORD PTR [bp+6] ;fnc entry
mov dh,BYTE PTR [bp+8] ;share flag
mov dl,1Bh ;SetIRQ DevHlp
call [_DevHlp]
leave
ret
_SetIRQ ENDP
_ReadBytes proc near
push bp
mov bp,sp
pusha
push es
push ds
; Physical Offset = 4
; Physical Segment = 6
; Device Driver = 8
; count = 12
mov ax,WORD PTR [bp+6]
mov bx,WORD PTR [bp+4]
mov dl,15h ;PhysToVirt
mov dh,01h ;result in es:di
call [_DevHlp] ;useable addr.
lds si,DWORD PTR [bp+ 8] ;source
mov cx, WORD PTR [bp+12] ;bytes to move
rep movsb ;copy data!
mov dl,32h ;Must UnPhys!
call [_DevHlp]
pop ds
pop es
popa
leave
ret
_ReadBytes ENDP
_WriteBytes proc near
push bp
mov bp,sp
pusha
push es
push ds
; Physical Offset = 4
; Physical Segment = 6
; Device Driver = 8
; count = 12
mov ax,WORD PTR [bp+6]
mov bx,WORD PTR [bp+4]
mov dl,15h ;PhysToVirt
mov dh,00h ;result in ds:si
call [_DevHlp] ;useable addr.
les di,DWORD PTR [bp+ 8] ;source
mov cx, WORD PTR [bp+12] ;bytes to move
rep movsb ;copy data!
mov dl,32h ;Must UnPhys!
call [_DevHlp]
pop ds
pop es
popa
leave
ret
_WriteBytes ENDP
_int3 proc near
int 3
ret
_int3 endp
_TEXT ends
end
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/