* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*                                                                           *
*                         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!  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<|
                               <<<<<<< >>>>>>>