Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9992 → Rev 10009

/programs/media/midiplay/trunk/midiplay.asm
3,7 → 3,6
; Do not change the header bits for now. Compile with nasm.
;
 
include 'lang.inc'
include '..\..\..\macros.inc'
 
use32
17,8 → 16,21
dd 0x0 , 0x0 ; I_Param , I_Path
 
 
MIDI_PORT = 0x330
 
midisp: dw MIDI_PORT + 1
mididp: dw MIDI_PORT
 
 
START:
mov dx, word[midisp]
mov cx, word[mididp]
mcall 46, 0
 
test eax, eax
jne exit
 
 
red:
call draw_window
 
30,53 → 42,43
cmp eax,1
jz red
cmp eax,3
jz button
jmp still
jnz still
 
button:
;button:
mov eax,17
mcall
 
cmp al,byte 0
cmp al, 0
jnz still
 
cmp ah,1
jnz noexit
jz exit
 
mov eax,0xffffffff
mcall
 
noexit:
 
cmp ah,2
jz note1
jz .play_note
 
mov eax,20 ; reset midi device
mov ebx,1
mov ecx,0
mcall
; reset midi device
call midi_reset
 
cmp eax,0
jz noe1
cmp eax, 0 ; check error code
jz still
 
call printerror
 
noe1:
 
jmp still
 
note1:
.play_note:
 
mov eax,50
 
nn:
 
.nn:
mov ebx,100
call noteout
pusha
 
mov eax,5
mov ebx,8
mcall
 
popa
mov ebx,0
; call noteout
86,9 → 88,11
mov ebx,100
call noteout
pusha
 
mov eax,5
mov ebx,8
mcall
 
popa
mov ebx,0
; call noteout
97,11 → 101,14
 
inc eax
cmp eax,90
jbe nn
jbe .nn
 
jmp still
 
exit:
mcall -1
 
 
draw_window:
 
pusha
149,38 → 156,32
 
 
noteout:
 
pusha
 
push ebx
push eax
 
mov eax,20
mov ebx,2
mov ecx,0x9f
mcall
mov eax,20
mov ebx,2
call midi_output_byte
 
pop ecx
mcall
mov eax,20
mov ebx,2
call midi_output_byte
 
pop ecx
mcall
call midi_output_byte
 
cmp eax,0
jz noe2
jz @f
 
call printerror
 
noe2:
 
@@:
popa
ret
 
printerror:
 
mov eax,dword 4
mov eax, 4
mov ebx,15*65536+85
mov ecx,0x000000
mov edx,error1
187,7 → 188,7
mov esi,errorlen1-error1
mcall
 
mov eax,dword 4
mov eax, 4
mov ebx,15*65536+95
mov ecx,0x000000
mov edx,error2
196,7 → 197,81
 
ret
 
; MPU401 interface
 
midi_reset:
@@:
; reset device
call is_output
test al, al
jnz @b
mov dx, word [midisp]
mov al, 0xff
out dx, al
@@:
mov dx, word [midisp]
mov al, 0xff
out dx, al
call is_input
test al, al
jnz @b
call get_mpu_in
cmp al, 0xfe
jnz @b
@@:
call is_output
test al, al
jnz @b
mov dx, word [midisp]
mov al, 0x3f
out dx, al
ret
 
midi_output_byte:
; output byte
@@:
call get_mpu_in
call is_output
test al, al
jnz @b
mov al, cl
call put_mpu_out
ret
 
is_input:
push edx
mov dx, word [midisp]
in al, dx
and al, 0x80
pop edx
ret
 
is_output:
push edx
mov dx, word [midisp]
in al, dx
and al, 0x40
pop edx
ret
 
get_mpu_in:
push edx
mov dx, word [mididp]
in al, dx
pop edx
ret
 
put_mpu_out:
push edx
mov dx, word [mididp]
out dx, al
pop edx
ret
 
 
 
 
 
; DATA AREA