Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
;
2
;    Ok, this is the sceleton that MENUET 0.01 understands.
3
;    Do not change the header bits for now. Compile with nasm.
4
;
5
 
6
include 'lang.inc'
7
include 'macros.inc'
8
 
9
use32
10
 
11
    org   0x0
12
    db    'MENUET00'     ; 8 byte id
13
    dd    38             ; required os
14
    dd    START          ; program start
15
    dd    I_END          ; program image size
16
    dd    0x1000         ; reguired amount of memory
17
    dd    0x1000
18
    dd    0x00000000     ; reserved=no extended header
19
 
20
 
21
 
22
START:
23
 
24
    call  draw_window
25
 
26
still:
27
 
28
    mov       eax,10                 ; redraw ?
29
    int       0x40
30
 
31
    cmp    eax,1
32
    jz     red
33
    cmp    eax,3
34
    jz     button
35
    jmp    still
36
 
37
  red:
38
    call   draw_window
39
    jmp    still
40
 
41
  button:
42
    mov  eax,17
43
    int  0x40
44
 
45
    cmp  al,byte 0
46
    jnz  still
47
 
48
    cmp  ah,1
49
    jnz  noexit
50
 
51
    mov  eax,0xffffffff
52
    int  0x40
53
 
54
  noexit:
55
 
56
    cmp  ah,2
57
    jz   note1
58
 
59
    mov  eax,20   ; reset midi device
60
    mov  ebx,1
61
    mov  ecx,0
62
    int  0x40
63
 
64
    cmp  eax,0
65
    jz   noe1
66
 
67
    call printerror
68
 
69
  noe1:
70
 
71
    jmp  still
72
 
73
  note1:
74
 
75
    mov  eax,50
76
 
77
  nn:
78
 
79
    mov  ebx,100
80
    call noteout
81
    pusha
82
    mov  eax,5
83
    mov  ebx,8
84
    int  0x40
85
    popa
86
    mov  ebx,0
87
;    call noteout
88
 
89
    add  eax,3
90
 
91
    mov  ebx,100
92
    call noteout
93
    pusha
94
    mov  eax,5
95
    mov  ebx,8
96
    int  0x40
97
    popa
98
    mov  ebx,0
99
;    call noteout
100
 
101
    add  eax,4
102
 
103
    inc  eax
104
    cmp  eax,90
105
    jbe  nn
106
 
107
    jmp  still
108
 
109
 
110
draw_window:
111
 
112
    pusha
113
 
114
    mov       eax,12                    ; tell os about redraw
115
    mov       ebx,1
116
    int       0x40
117
 
118
    mov       eax,0                     ; define and draw window
119
    mov       ebx,20*65536+250
120
    mov       ecx,20*65536+120
121
    mov       edx,0x02ffffff
122
    mov       esi,0x805070d0;88ccee
123
    mov       edi,0x005070d0;88ccee
124
    int       0x40
125
 
126
                                        ; CLOSE BUTTON
127
     mov       eax,8                     ; function 8 : define and draw
128
     mov       ebx,(250-19)*65536+12     ; [x start] *65536 + [x size]
129
    mov       ecx,5*65536+12            ; [y start] *65536 + [y size]
130
    mov       edx,1                     ; button id
131
    mov       esi,0x5577cc              ; button color RRGGBB
132
    int       0x40
133
 
134
 
135
    mov       eax,4                     ; 4 = write text
136
    mov       ebx,8*65536+8
137
    mov       ecx,dword 0x00ffffff      ; 8b window nro - RR GG BB color
138
    mov       edx,labelt                ; pointer to text beginning
139
    mov       esi,labellen-labelt       ; text length
140
    int       0x40
141
 
142
    mov       eax,8
143
    mov       ebx,10*65536+200          ; button start x & size
144
    mov       ecx,40 *65536+17          ; button start y & size
145
    mov       edx,2                     ; button number
146
    mov       esi,0x4060b0              ; button color
147
    int       0x40
148
 
149
    mov       eax,8
150
    mov       ebx,10*65536+200          ; button start x & size
151
    mov       ecx,60 *65536+17          ; button start y & size
152
    mov       edx,3                     ; button number
153
    mov       esi,0x4060b0              ; button color
154
    int       0x40
155
 
156
    mov       eax,dword 4
157
    mov       ebx,25*65536+45
158
    mov       ecx,dword 0xffffff
159
    mov       edx,buttont
160
    mov       esi,buttontlen-buttont
161
    int       0x40
162
 
163
    mov       eax,dword 4
164
    mov       ebx,25*65536+65
165
    mov       ecx,dword 0xffffff
166
    mov       edx,buttont2
167
    mov       esi,buttontlen2-buttont2
168
    int       0x40
169
 
170
    mov       eax,12                    ; tell os about redraw end
171
    mov       ebx,2
172
    int       0x40
173
 
174
    popa
175
    ret
176
 
177
 
178
noteout:
179
 
180
    pusha
181
 
182
    push ebx
183
    push eax
184
 
185
    mov  eax,20
186
    mov  ebx,2
187
    mov  ecx,0x9f
188
    int  0x40
189
    mov  eax,20
190
    mov  ebx,2
191
    pop  ecx
192
    int  0x40
193
    mov  eax,20
194
    mov  ebx,2
195
    pop  ecx
196
    int  0x40
197
 
198
    cmp  eax,0
199
    jz   noe2
200
 
201
    call printerror
202
 
203
  noe2:
204
 
205
    popa
206
    ret
207
 
208
printerror:
209
 
210
    mov       eax,dword 4
211
    mov       ebx,15*65536+85
212
     mov       ecx,0x000000
213
     mov       edx,error1
214
    mov       esi,errorlen1-error1
215
    int       0x40
216
 
217
    mov       eax,dword 4
218
    mov       ebx,15*65536+95
219
     mov       ecx,0x000000
220
     mov       edx,error2
221
    mov       esi,errorlen2-error2
222
    int       0x40
223
 
224
    ret
225
 
226
 
227
; DATA AREA
228
 
229
 
230
labelt:
231
    db   'MIDI TEST'
232
labellen:
233
 
234
buttont:
235
    db   'PLAY A FEW NOTES'
236
buttontlen:
237
buttont2:
238
    db   'RESET MIDI DEVICE'
239
buttontlen2:
240
 
241
error1:
242
    db   'NO BASE DEFINED FOR MPU-401'
243
errorlen1:
244
 
245
error2:
246
    db   'USE SETUP AND RESET MIDI DEVICE.'
247
errorlen2:
248
 
249
base db 0x0
250
 
251
 
252
I_END:
253