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

256 lines
4.4 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 'MENUET00' ; 8 byte id
dd 38 ; required os
dd START ; program start
dd I_END ; program image size
dd 0x1000 ; reguired amount of memory
dd 0x1000
dd 0x00000000 ; reserved=no extended header
START:
call draw_window
still:
mov eax,10 ; redraw ?
int 0x40
cmp eax,1
jz red
cmp eax,3
jz button
jmp still
red:
call draw_window
jmp still
button:
mov eax,17
int 0x40
cmp al,byte 0
jnz still
cmp ah,1
jnz noexit
mov eax,0xffffffff
int 0x40
noexit:
cmp ah,2
jz note1
mov eax,20 ; reset midi device
mov ebx,1
mov ecx,0
int 0x40
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
int 0x40
popa
mov ebx,0
; call noteout
add eax,3
mov ebx,100
call noteout
pusha
mov eax,5
mov ebx,8
int 0x40
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
int 0x40
mov eax,0 ; define and draw window
mov ebx,20*65536+250
mov ecx,20*65536+120
mov edx,0x02ffffff
mov esi,0x805070d0;88ccee
mov edi,0x005070d0;88ccee
int 0x40
; CLOSE BUTTON
mov eax,8 ; function 8 : define and draw
mov ebx,(250-19)*65536+12 ; [x start] *65536 + [x size]
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
mov edx,1 ; button id
mov esi,0x5577cc ; button color RRGGBB
int 0x40
mov eax,4 ; 4 = write text
mov ebx,8*65536+8
mov ecx,dword 0x00ffffff ; 8b window nro - RR GG BB color
mov edx,labelt ; pointer to text beginning
mov esi,labellen-labelt ; text length
int 0x40
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
int 0x40
mov eax,8
mov ebx,10*65536+200 ; button start x & size
mov ecx,60 *65536+17 ; button start y & size
mov edx,3 ; button number
mov esi,0x4060b0 ; button color
int 0x40
mov eax,dword 4
mov ebx,25*65536+45
mov ecx,dword 0xffffff
mov edx,buttont
mov esi,buttontlen-buttont
int 0x40
mov eax,dword 4
mov ebx,25*65536+65
mov ecx,dword 0xffffff
mov edx,buttont2
mov esi,buttontlen2-buttont2
int 0x40
mov eax,12 ; tell os about redraw end
mov ebx,2
int 0x40
popa
ret
noteout:
pusha
push ebx
push eax
mov eax,20
mov ebx,2
mov ecx,0x9f
int 0x40
mov eax,20
mov ebx,2
pop ecx
int 0x40
mov eax,20
mov ebx,2
pop ecx
int 0x40
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
int 0x40
mov eax,dword 4
mov ebx,15*65536+95
mov ecx,0x000000
mov edx,error2
mov esi,errorlen2-error2
int 0x40
ret
; DATA AREA
labelt:
db 'MIDI TEST'
labellen:
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: