Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 10009 → Rev 9992

/programs/media/midiplay/trunk/midiplay.asm
3,6 → 3,7
; Do not change the header bits for now. Compile with nasm.
;
 
include 'lang.inc'
include '..\..\..\macros.inc'
 
use32
16,21 → 17,8
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
 
42,43 → 30,53
cmp eax, 1
jz red
cmp eax, 3
jnz still
jz button
jmp still
 
;button:
button:
mov eax, 17
mcall
 
cmp al, 0
cmp al,byte 0
jnz still
 
cmp ah, 1
jz exit
jnz noexit
 
mov eax,0xffffffff
mcall
 
noexit:
 
cmp ah, 2
jz .play_note
jz note1
 
; reset midi device
call midi_reset
mov eax,20 ; reset midi device
mov ebx,1
mov ecx,0
mcall
 
cmp eax, 0 ; check error code
jz still
cmp eax,0
jz noe1
 
call printerror
 
noe1:
 
jmp still
 
.play_note:
note1:
 
mov eax, 50
.nn:
 
nn:
 
mov ebx, 100
call noteout
pusha
 
mov eax, 5
mov ebx, 8
mcall
 
popa
mov ebx, 0
; call noteout
88,11 → 86,9
mov ebx, 100
call noteout
pusha
 
mov eax, 5
mov ebx, 8
mcall
 
popa
mov ebx, 0
; call noteout
101,14 → 97,11
 
inc eax
cmp eax, 90
jbe .nn
jbe nn
 
jmp still
 
exit:
mcall -1
 
 
draw_window:
 
pusha
156,32 → 149,38
 
 
noteout:
 
pusha
 
push ebx
push eax
 
mov eax,20
mov ebx,2
mov ecx, 0x9f
call midi_output_byte
 
mcall
mov eax,20
mov ebx,2
pop ecx
call midi_output_byte
 
mcall
mov eax,20
mov ebx,2
pop ecx
call midi_output_byte
mcall
 
cmp eax, 0
jz @f
jz noe2
 
call printerror
 
@@:
noe2:
 
popa
ret
 
printerror:
 
mov eax, 4
mov eax,dword 4
mov ebx, 15*65536+85
mov ecx, 0x000000
mov edx, error1
188,7 → 187,7
mov esi, errorlen1-error1
mcall
 
mov eax, 4
mov eax,dword 4
mov ebx, 15*65536+95
mov ecx, 0x000000
mov edx, error2
197,81 → 196,7
 
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