kolibrios-fun/programs/media/midiplay/trunk/midiplay.asm

226 lines
3.2 KiB
NASM
Raw Normal View History

;
; Ok, this is the sceleton that MENUET 0.01 understands.
; Do not change the header bits for now. Compile with nasm.
;
include 'lang.inc'
include '..\..\..\macros.inc'
use32
org 0x0
db 'MENUET01' ; header
dd 0x01 ; header version
dd START ; entry point
dd I_END ; image size
dd 0x1000 ; required memory
dd 0x1000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Path
START:
red:
call draw_window
still:
mov eax,10 ; redraw ?
mcall
cmp eax,1
jz red
cmp eax,3
jz button
jmp still
button:
mov eax,17
mcall
cmp al,byte 0
jnz still
cmp ah,1
jnz noexit
mov eax,0xffffffff
mcall
noexit:
cmp ah,2
jz note1
mov eax,20 ; reset midi device
mov ebx,1
mov ecx,0
mcall
cmp eax,0
jz noe1
call printerror
noe1:
jmp still
note1:
mov eax,50
nn:
mov ebx,100
call noteout
pusha
mov eax,5
mov ebx,8
mcall
popa
mov ebx,0
; call noteout
add eax,3
mov ebx,100
call noteout
pusha
mov eax,5
mov ebx,8
mcall
popa
mov ebx,0
; call noteout
add eax,4
inc eax
cmp eax,90
jbe nn
jmp still
draw_window:
pusha
mov eax,12 ; tell os about redraw
mov ebx,1
mcall
mov eax,0 ; define and draw window
mov ebx,20*65536+250
mov ecx,20*65536+120
mov edx,0x13ffffff
mov edi,title
mcall
mov eax,8
mov ebx,10*65536+200 ; button start x & size
mov ecx,40 *65536+17 ; button start y & size
mov edx,2 ; button number
mov esi,0x4060b0 ; button color
mcall
mov ecx,60 *65536+17 ; button start y & size
mov edx,3 ; button number
mcall
mov eax,4
mov ebx,25*65536+45
mov ecx,dword 0xffffff
mov edx,buttont
mov esi,buttontlen-buttont
mcall
mov ebx,25*65536+65
mov edx,buttont2
mov esi,buttontlen2-buttont2
mcall
mov eax,12 ; tell os about redraw end
mov ebx,2
mcall
popa
ret
noteout:
pusha
push ebx
push eax
mov eax,20
mov ebx,2
mov ecx,0x9f
mcall
mov eax,20
mov ebx,2
pop ecx
mcall
mov eax,20
mov ebx,2
pop ecx
mcall
cmp eax,0
jz noe2
call printerror
noe2:
popa
ret
printerror:
mov eax,dword 4
mov ebx,15*65536+85
mov ecx,0x000000
mov edx,error1
mov esi,errorlen1-error1
mcall
mov eax,dword 4
mov ebx,15*65536+95
mov ecx,0x000000
mov edx,error2
mov esi,errorlen2-error2
mcall
ret
; DATA AREA
title db 'MIDI TEST',0
buttont:
db 'PLAY A FEW NOTES'
buttontlen:
buttont2:
db 'RESET MIDI DEVICE'
buttontlen2:
error1:
db 'NO BASE DEFINED FOR MPU-401'
errorlen1:
error2:
db 'USE SETUP AND RESET MIDI DEVICE.'
errorlen2:
base db 0x0
I_END: