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