0,0 → 1,293 |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
* * |
* Copyright 2003 VaStaNi * |
* vastani@ukr.net * |
* >>>- SIMPLY - QUICKLY - SHORTLY -<<< * |
* * |
* About Player Notes for Speaker PC. * |
* ( PLAYNOTE.INC v.1.1 for MENUET OS ) * |
* * |
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
--- ATTACH --- |
|
>>> Insert string: include "PLAYNOTE.INC" in list file KERNEL32.INC |
......... |
......... ......... ............................. |
......... ......... ............................. |
......... ......... ............................. |
|
; sound |
|
include "SB16.INC" ; playback for Sound Blaster 16 |
include "PLAYNOTE.INC" ; player Note for Speaker PC |
|
......... |
......... ......... ............................. |
......... ......... ............................. |
|
|
|
>>> Insert line --->>> call playNote --->>> in procedure irq0 |
|
( listing file SYS32.INC for KERNEL.ASM ) |
|
.... .... |
.... .... |
.... .... |
|
no_error_in_previous_process: |
|
mov edi,[0x3000] |
imul edi,8 |
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b |
|
inc dword [0xfdf0] |
|
mov eax,[0xfdf0] |
|
call playNote ; <<<--- INSERT THIS LINE !!!!!!!!!! |
|
cmp eax,[next_usage_update] |
jb nocounter |
add eax,100 |
mov [next_usage_update],eax |
call updatecputimes |
|
nocounter: |
.... .... |
.... .... |
.... .... |
|
|
|
>>> file SB16.INC have this label... |
.... .... |
.... .... |
.... .... |
|
no_SB16_data_format: |
|
ret |
|
>>> I suggest add this code for subfunction #55 function #55 OS (player notes) |
.... .... |
.... .... |
.... .... |
|
no_SB16_data_format: |
cmp eax, edi ; this is subfunction #55 ? |
jne retFunc55 ; if no then return. |
movzx eax, byte [countDelayNote] |
or al, al ; player is busy ? |
jnz retFunc55 ; return counter delay Note |
mov eax, [0x3010] |
mov eax, [eax+0x10] ; address application im memory |
add eax, edx ; add offset Delay-Note string |
mov [memAdrNote], eax |
xor eax, eax ; Ok! EAX = 0 |
retFunc55: |
mov [esp+36], eax ; return value EAX for application |
ret |
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
--- USE --- |
|
>>> Example use in your programs: |
.... .... |
.... .... |
.... .... |
mov eax, 55 ; OS function #55 |
mov ebx, eax ; EBX = 55 for subfunction Play Note |
mov esi, MyMusic_1 ; ESI = head string Delay-Note code |
int 0x40 ; start play |
.... .... |
.... .... |
.... .... |
|
|
>>> Very simply OS use. Only put dword adress head string in [memAdrNote] |
|
.... .... |
mov [memAdrNote], dword MyMusic_1 ; IRQ0 -> start play!!! |
.... .... |
|
!!! Example OS use for send: error tone, ring signal, disconnect hardware... |
!!! Saund Card may be OFF, but Speaker PC always IS ON !!! |
|
|
..... .. .. |
..... .. .. |
MyMusic_1 db .., .., .., .., .., 0 ; string Delay-Note code for MUSIC |
... .. .. |
...... .. .. |
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
--- CODE DELAY & NOTEs --- |
|
>>> Format Delay-Note string: |
|
1. Free style play Tone |
|
db 1..0x80 ; !!! only (1..0x80) byte for Delay Tone |
db 1..0xFF ; lower byte (counter for period oscillate) |
db 1..0xFF ; upper byte (counter for period oscillate) |
.. .. \ |
.. .. > 3 bytes for 1 TONE !!! |
.. .. / |
db 0 ; THE END Play! |
|
2. Musical style play Note |
|
db 0x81..0xFE ; !!! 0x80 + byte (1..0x7E) for Delay Note |
db 1..0xFF ; PACK CODE (number Note & number Octave) |
.. .. \ |
.. .. / 2 bytes for 1 Note in 1 Octave !!! |
db 0 ; THE END Play! |
|
|
|
-= DELAY CODE =- |
|
ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÉÍÍ 1 Í»ÉÍÍ 2 Í» |
³¤«¨â¥«ì®á⨳ DELAY NOTE ³ DELAY º DELAY ºº DELAY º |
³ ³ mSec ³ IRQ 0 º CODE ºº CODE º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÌÍÍÍÍÍÍÍ͹ÌÍÍÍÍÍÍÍ͹ |
³ 楫 ï ³ 2000 ³ º 0xC8 ºº absent º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ÇÄÄÄÄÄÄÄĶÇÄÄÄÄÄÄÄĶ |
³ 1/2 ³ 1000 ³ º 0x64 ºº 0xE4 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ÇÄÄÄÄÄÄÄĶÇÄÄÄÄÄÄÄĶ |
³ 1/4 ³ 500 ³ º 0x32 ºº 0xB2 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ 10 ºÄÄÄÄÄÄÄĶºÄÄÄÄÄÄÄĶ |
³ 1/8 ³ 250 ³ mSec º 0x19 ºº 0x99 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ÇÄÄÄÄÄÄÄĶÇÄÄÄÄÄÄÄĶ |
³ 1/16 ³ 125 ³ º 0xC ºº 0x8C º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ºÄÄÄÄÄÄÄĶºÄÄÄÄÄÄÄĶ |
³ 1/32 ³ 62.5 ³ º 6 ºº 0x86 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄ´ ÇÄÄÄÄÄÄÄĶÇÄÄÄÄÄÄÄĶ |
³ 1/64 ³ 31.25 ³ º 3 ºº 0x83 º |
ÀÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÈÍÍÍÍÍÍÍͼÈÍÍÍÍÍÍÍͼ |
|
|
-= PACK CODE =- |
|
!!!!! IF PACK CODE = 0xFF THEN PAUSE = DELAY CODE !!!!! |
|
ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÉÍÍÍÍÍÍÍÍÍÍ» ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÉÍÍÍÍÍÍÍÍÍÍ» |
³ ³number³ code ºupper CODEº ³ ³type³numberºlower CODEº |
³ ³OCTAVE³numberºBit7..Bit4º ³ ³NOTE³ NOTE ºBit3..Bit0º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÌÍÍÍÍÍÍÍÍÍ͹ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÌÍÍÍÍÍÍÍÍÍ͹ |
³ª®âப⠢ ³ -3 ³ 0 º 0000 º ³ ³ C ³ 1 º 0001 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÌÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¡®«ìè ï ³ -2 ³ 1 º 0001 º ³ ¡¥¬®«ì ³ C# ³ 2 º 0010 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÇÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¬ « ï ³ -1 ³ 2 º 0010 º ³
³ D ³ 3 º 0011 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄĺÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¯¥à¢ ï ³ 1 ³ 3 º 0011 º ³
¡¥¬®«ì ³ D# ³ 4 º 0100 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÇÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¢â®à ï ³ 2 ³ 4 º 0100 º ³ ³ E ³ 5 º 0101 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄĺÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ âà¥âìï ³ 3 ³ 5 º 0101 º ³ ³ F ³ 6 º 0110 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÇÄÄÄÄÄÄÄÄÄĶ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ç¥â¢¥àâ ï ³ 4 ³ 6 º 0110 º ³ ¡¥¬®«ì ³ F# ³ 7 º 0111 º |
ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÈÍÍÍÍÍÍÍÍÍͼ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ³ G ³ 8 º 1000 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¡¥¬®«ì³ G# ³ 9 º 1001 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ³ A ³ 10 º 1010 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ¡¥¬®«ì ³ A# ³ 11 º 1011 º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄĶ |
³ ³ B ³ 12 º 1100 º |
ÀÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÁÄÄÄÄÄÄÈÍÍÍÍÍÍÍÍÍͼ |
|
PACK CODE = (number Note) AND ((code number Octave) SHL 4) |
or |
PACK CODE = (number Note) AND ((code number Octave) * 16) |
|
|
-= PERIOD OSCILLATE =- |
|
counter = 1193180 / FREQUENCY; |
(WORD) (sound Hz) |
|
ÚÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÉÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍÍ» |
³ ³number³ code ³ ³type³numberºfrequency PACK º |
³ ³OCTAVE³number³ 1© ³NOTE³ NOTE ºsound Hz CODE º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÌÍÍÍÍÍÍÍÍÍ ÍÍÍÍÍ͹ |
³ ³ ³ ³ ³ C ³ 1 º 523,251 -- 0x31 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | ÄÄÄÄÄĶ |
³ ³ ³ ³ ¡¥¬®«ì ³ C# ³ 2 º 554,365 --|-- 0x32 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³
³ D ³ 3 º 587,33 | | 0x33 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³
¡¥¬®«ì ³ D# ³ 4 º 622,254 | | 0x34 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ³ E ³ 5 º 659,255 | | 0x35 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ³ F ³ 6 º 698,456 | | 0x36 º |
³ ¯¥à¢ ï ³ 1 ³ 3 ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ( first ³ ³ ³ ¡¥¬®«ì ³ F# ³ 7 º 739,989 | | 0x37 º |
³ octave ) ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ³ G ³ 8 º 783,991 0x38 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ x 2 ÄÄÄÄÄĶ |
³ ³ ³ ³ ¡¥¬®«ì³ G# ³ 9 º 830,609 0x39 º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ³ A ³ 10 º 880 | | 0x3A º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ¡¥¬®«ì ³ A# ³ 11 º 932,328 | | 0x3B º |
³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄ×ÄÄÄÄÄÄÄÄÄ | | ÄÄÄÄÄĶ |
³ ³ ³ ³ ³ B ³ 12 º 987,767 | | 0x3C º |
ÃÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÌÍÍÍÍÍÍÍÍÍ | | ÍÍÍÍÍ͹ |
³ ¢â®à ï ³ 2 ³ 4 ³ ³ ³ 1 º1046,502 <- | 0x41 º |
...... .. .. ... .. .. .... ... <---- |
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
|
--- EXAMPLE MUSIC --- |
|
ਬ¥à ¬ã§¨æ¨à®¢ ¨ï ¯® ®â ¬ ¬¥«®¤¨¨ . à¥«îª "®à¨â ®ç £..." |
ª 䨫ì¬ã " ¤¨â᪨© ¥â¥à¡ãà£" |
MyMusic_1: |
db 0xe4,0x35, 0x99,0x33, 0x99,0x31, 0x99,0x33, 0xe4,0x35, 0x99,0x35, 0x99,0x36 |
db 0x99,0x38, 0x99,0x3a, 0xe4,0x36, 0xe4,0x36, 0xb2,0xff, 0xe4,0x33, 0x99,0x31 |
db 0x99,0x2c, 0x99,0x31, 0xe4,0x33, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x35 |
db 0xe4,0x35, 0xb2,0xff, 0x99,0x35, 0x99,0x36, 0xe4,0x33, 0x99,0x35, 0x99,0x36 |
db 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x39 |
db 0xe4,0x39, 0xb2,0xff, 0x99,0x35, 0x99,0x36, 0xe4,0x33, 0x99,0x35, 0x99,0x36 |
db 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x35 |
db 0xe4,0x35, 0 |
|
|
MyMusic_2: |
db 0x90,0x31, 0x90,0x33, 0x90,0x35, 0x90,0x36, 0xA0,0xFF, 0xA0,0x06, 0x90,0xFF |
db 0xA0,0x06, 0x90,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37, 0x90,0x38, 0xA0,0xFF |
db 0xA0,0x18, 0x90,0xFF, 0xA0,0x18, 0x90,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37 |
db 0x90,0x38, 0xA0,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37, 0x90,0x38, 0xA0,0xFF |
db 0x90,0x31, 0x90,0x33, 0x90,0x35, 0x90,0x36, 0xA0,0xFF, 0xA0,0x16, 0x90,0xFF |
db 0xA0,0x16, 0 |
|
|
MyMusic_3: |
db 0x99,0x31, 0xB2,0x36, 0x99,0x3A, 0xB2,0x36, 0x99,0x33, 0xB2,0x28, 0xBC,0x38 |
db 0 |
|
<<<<<<< >>>>>>> |
|>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> !GOOD LUCK! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<| |
<<<<<<< >>>>>>> |
|
|
|
|
|
|
|
|
|
|
|
|
|