tmoffs dd 0
musptr dd 0
frame dd 0
-pnote dd 0
fval dd 0
cmap dd 0
tmoffs equ 7e04h
musptr equ 7e08h
frame equ 7e0ch
-pnote equ 7e18h
fval equ 7e10h
cmap equ 7e14h
%endif
mov ss, ax
mov sp, 7c00h
- mov di, nticks
- mov cx, 16
- rep stosw
-
cli
mov word [32], tintr
mov [34], ax
mov [es:34], ax
%endif
+ mov di, nticks
+ mov cx, 16
+ rep stosw
+
stimer 0, 5966
%ifdef MIDI
call resetmidi
textout:
mov al, [si]
and al, al
- jz .done
+ jz textout_done
mov ah, 0eh
mov bx, 82
int 10h
inc si
jmp textout
-.done: ret
+textout_done:
+ ret
%ifdef MIDI
note_on:
- mov [pnote], ax
+ push ax
mov ax, 90h ; note-on command for channel 0
call sendmidi
- mov ax, [pnote]
+ pop ax
call sendmidi
mov ax, 127
- call sendmidi
- ret
-
-note_off:
- mov ax, 80h ; note-off command for channel 0
- call sendmidi
- mov ax, [pnote]
- call sendmidi
- mov ax, 64
- call sendmidi
- ret
+ jmp sendmidi
all_notes_off:
mov ax, 0b0h ; channel mode message for channel 0...
mov ax, 7bh ; all notes off
call sendmidi
xor ax, ax
- call sendmidi
- ret
+ jmp sendmidi
waitmidi:
- mov ax, 331h
+ mov dx, 331h
.wait: in al, dx ; read status port
test al, 40h ; test output-ready bit (0: ready)
jnz .wait
jb .end
%ifdef MIDI
- call note_off
mov al, [music + 1 + bx]
xor ah, ah
add bx, 2
mov word [cmap + bx + 1], 2f2fh
%ifdef MIDI
+ push ax
+ call all_notes_off
+ pop ax
call note_on
%else
mov bx, ax