Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. *                                                                           *
  3. *                         Copyright 2003  VaStaNi                           *
  4. *                             vastani@ukr.net                               *
  5. *                   >>>- SIMPLY - QUICKLY - SHORTLY -<<<                    *
  6. *                                                                           *
  7. *                    About Player Notes for Speaker PC.                     *
  8. *                  ( PLAYNOTE.INC v.1.1  for  MENUET OS )                   *
  9. *                                                                           *
  10. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  11.  
  12.                               --- ATTACH ---
  13.  
  14. >>> Insert string: include "PLAYNOTE.INC"  in list file KERNEL32.INC
  15. .........
  16. ......... .........      .............................
  17. ......... .........      .............................
  18. ......... .........      .............................
  19.  
  20. ; sound
  21.  
  22. include "SB16.INC"     ; playback for Sound Blaster 16
  23. include "PLAYNOTE.INC" ; player Note for Speaker PC
  24.  
  25. .........
  26. ......... .........      .............................
  27. ......... .........      .............................
  28.  
  29.  
  30.  
  31. >>> Insert line --->>>   call  playNote   --->>>  in procedure irq0
  32.  
  33.     ( listing file SYS32.INC for KERNEL.ASM )
  34.  
  35.         ....  ....
  36.         ....  ....
  37.         ....  ....
  38.  
  39.      no_error_in_previous_process:
  40.  
  41.         mov    edi,[0x3000]
  42.         imul   edi,8
  43.         mov    [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
  44.  
  45.         inc   dword [0xfdf0]
  46.  
  47.         mov   eax,[0xfdf0]
  48.  
  49.         call  playNote           ; <<<--- INSERT THIS LINE !!!!!!!!!!
  50.  
  51.         cmp   eax,[next_usage_update]
  52.         jb    nocounter
  53.         add   eax,100
  54.         mov   [next_usage_update],eax
  55.         call  updatecputimes
  56.  
  57.       nocounter:
  58.         ....  ....
  59.         ....  ....
  60.         ....  ....
  61.  
  62.  
  63.  
  64. >>> file SB16.INC have this label...
  65.    ....  ....
  66.    ....  ....
  67.    ....  ....
  68.  
  69.  no_SB16_data_format:
  70.  
  71.    ret
  72.  
  73. >>> I suggest add this code for subfunction #55 function #55 OS (player notes)
  74.    ....  ....
  75.    ....  ....
  76.    ....  ....
  77.  
  78.  no_SB16_data_format:
  79.    cmp   eax, edi                      ; this is subfunction #55 ?
  80.     jne  retFunc55                     ; if no then return.
  81.    movzx eax, byte [countDelayNote]
  82.    or    al, al                        ; player is busy ?
  83.     jnz  retFunc55                     ; return counter delay Note
  84.    mov   eax, [0x3010]
  85.    mov   eax, [eax+0x10]               ; address application im memory
  86.    add   eax, edx                      ; add offset Delay-Note string
  87.    mov   [memAdrNote], eax
  88.    xor   eax, eax                      ; Ok!  EAX = 0
  89.  retFunc55:
  90.    mov   [esp+36], eax                 ; return value EAX for application
  91.    ret
  92.  
  93. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  94.  
  95.                                --- USE ---
  96.  
  97. >>> Example use in your programs:
  98.         ....  ....
  99.         ....  ....
  100.         ....  ....
  101.         mov   eax, 55            ; OS function #55
  102.         mov   ebx, eax           ; EBX = 55 for subfunction Play Note
  103.         mov   esi, MyMusic_1     ; ESI = head string Delay-Note code
  104.         int   0x40               ; start play
  105.         ....  ....
  106.         ....  ....
  107.         ....  ....
  108.  
  109.  
  110. >>> Very simply OS use. Only put dword adress head string in [memAdrNote]
  111.  
  112.         ....  ....
  113.         mov   [memAdrNote], dword MyMusic_1  ; IRQ0 -> start play!!!
  114.         ....  ....
  115.  
  116. !!! Example OS use for send: error tone, ring signal, disconnect hardware...
  117. !!! Saund Card may be OFF, but Speaker PC always IS ON !!!
  118.  
  119.  
  120. .....          ..  ..
  121. .....          ..  ..
  122. MyMusic_1      db  .., .., .., .., .., 0   ; string Delay-Note code for MUSIC
  123. ...            ..  ..
  124. ......         ..  ..
  125.  
  126. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  127.  
  128.                      --- CODE DELAY & NOTEs ---
  129.  
  130. >>> Format Delay-Note string:
  131.  
  132.     1. Free style play Tone
  133.  
  134.                db  1..0x80       ; !!! only (1..0x80) byte for Delay Tone
  135.                db  1..0xFF       ; lower byte (counter for period oscillate)
  136.                db  1..0xFF       ; upper byte (counter for period oscillate)
  137.                ..  ..        \
  138.                ..  ..          > 3 bytes for 1 TONE !!!
  139.                ..  ..        /
  140.                db  0             ; THE END Play!
  141.  
  142.     2. Musical style play Note
  143.  
  144.                db  0x81..0xFE    ; !!! 0x80 + byte (1..0x7E) for Delay Note
  145.                db  1..0xFF       ; PACK CODE (number Note & number Octave)
  146.                ..  ..         \
  147.                ..  ..         /  2 bytes for 1 Note in 1 Octave !!!
  148.                db  0             ; THE END Play!
  149.  
  150.  
  151.  
  152.                              -=  DELAY CODE  =-
  153.  
  154.            ┌────────────┬────────────┬───────╔══  1  ═╗╔══  2  ═╗
  155.            │длительности│ DELAY NOTE │ DELAY ║  DELAY ║║  DELAY ║
  156.            │    НОТ     │    mSec    │ IRQ 0 ║  CODE  ║║  CODE  ║
  157.            ├────────────┼────────────┼───────╠════════╣╠════════╣
  158.            │   целая    │    2000    │       ║  0xC8  ║║ absent ║
  159.            ├────────────┼────────────┤       ╟────────╢╟────────╢
  160.            │    1/2     │    1000    │       ║  0x64  ║║  0xE4  ║
  161.            ├────────────┼────────────┤       ╟────────╢╟────────╢
  162.            │    1/4     │    500     │       ║  0x32  ║║  0xB2  ║
  163.            ├────────────┼────────────┤  10   ║────────╢║────────╢
  164.            │    1/8     │    250     │  mSec ║  0x19  ║║  0x99  ║
  165.            ├────────────┼────────────┤       ╟────────╢╟────────╢
  166.            │    1/16    │    125     │       ║  0xC   ║║  0x8C  ║
  167.            ├────────────┼────────────┤       ║────────╢║────────╢
  168.            │    1/32    │    62.5    │       ║  6     ║║  0x86  ║
  169.            ├────────────┼────────────┤       ╟────────╢╟────────╢
  170.            │    1/64    │    31.25   │       ║  3     ║║  0x83  ║
  171.            └────────────┴────────────┴───────╚════════╝╚════════╝
  172.  
  173.  
  174.                               -=  PACK  CODE  =-
  175.  
  176.   !!!!!  IF  PACK CODE = 0xFF  THEN  PAUSE = DELAY CODE  !!!!!
  177.  
  178.  ┌───────────┬──────┬──────╔══════════╗  ┌───────────┬────┬──────╔══════════╗
  179.  │   ТИПЫ    │number│ code ║upper CODE║  │ НОТЫ      │type│number║lower CODE║
  180.  │   ОКТАВ   │OCTAVE│number║Bit7..Bit4║  │ ОКТАВЫ    │NOTE│ NOTE ║Bit3..Bit0║
  181.  ├───────────┼──────┼──────╠══════════╣  ├───────────┼────┼──────╠══════════╣
  182.  │контроктава│  -3  │  0   ║   0000   ║  │ ДО        │ C  │  1   ║   0001   ║
  183.  ├───────────┼──────┼──────╠──────────╢  ├───────────┼────┼──────╫──────────╢
  184.  │ большая   │  -2  │  1   ║   0001   ║  │ ДО бемоль │ C# │  2   ║   0010   ║
  185.  ├───────────┼──────┼──────╟──────────╢  ├───────────┼────┼──────╫──────────╢
  186.  │ малая     │  -1  │  2   ║   0010   ║  │ РЕ        │ D  │  3   ║   0011   ║
  187.  ├───────────┼──────┼──────║──────────╢  ├───────────┼────┼──────╫──────────╢
  188.  │ первая    │  1   │  3   ║   0011   ║  │ РЕ бемоль │ D# │  4   ║   0100   ║
  189.  ├───────────┼──────┼──────╟──────────╢  ├───────────┼────┼──────╫──────────╢
  190.  │ вторая    │  2   │  4   ║   0100   ║  │ МИ        │ E  │  5   ║   0101   ║
  191.  ├───────────┼──────┼──────║──────────╢  ├───────────┼────┼──────╫──────────╢
  192.  │ третья    │  3   │  5   ║   0101   ║  │ ФА        │ F  │  6   ║   0110   ║
  193.  ├───────────┼──────┼──────╟──────────╢  ├───────────┼────┼──────╫──────────╢
  194.  │ четвертая │  4   │  6   ║   0110   ║  │ ФА бемоль │ F# │  7   ║   0111   ║
  195.  └───────────┴──────┴──────╚══════════╝  ├───────────┼────┼──────╫──────────╢
  196.                                          │ СОЛЬ      │ G  │  8   ║   1000   ║
  197.                                          ├───────────┼────┼──────╫──────────╢
  198.                                          │СОЛЬ бемоль│ G# │  9   ║   1001   ║
  199.                                          ├───────────┼────┼──────╫──────────╢
  200.                                          │ ЛЯ        │ A  │  10  ║   1010   ║
  201.                                          ├───────────┼────┼──────╫──────────╢
  202.                                          │ ЛЯ бемоль │ A# │  11  ║   1011   ║
  203.                                          ├───────────┼────┼──────╫──────────╢
  204.                                          │ СИ        │ B  │  12  ║   1100   ║
  205.                                          └───────────┴────┴──────╚══════════╝
  206.  
  207.        PACK CODE = (number Note)  AND  ((code number Octave) SHL 4)
  208.     or
  209.        PACK CODE = (number Note)  AND  ((code number Octave) * 16)
  210.  
  211.  
  212.                            -=  PERIOD OSCILLATE  =-
  213.  
  214.                         counter = 1193180 / FREQUENCY;
  215.                          (WORD)             (sound Hz)
  216.  
  217. ┌───────────┬──────┬──────┬───────────┬────┬──────╔═════════          ══════╗
  218. │   ТИП     │number│ code │ НОТЫ      │type│number║frequency           PACK ║
  219. │   ОКТАВЫ  │OCTAVE│number│ 1й ОСТАВЫ │NOTE│ NOTE ║sound Hz            CODE ║
  220. ├───────────┼──────┼──────┼───────────┼────┼──────╠═════════          ══════╣
  221. │           │      │      │ ДО        │ C  │  1   ║ 523,251   --       0x31 ║
  222. │           │      │      ├───────────┼────┼──────╫─────────    |     ──────╢
  223. │           │      │      │ ДО бемоль │ C# │  2   ║ 554,365   --|--    0x32 ║
  224. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  225. │           │      │      │ РЕ        │ D  │  3   ║ 587,33      |  |   0x33 ║
  226. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  227. │           │      │      │ РЕ бемоль │ D# │  4   ║ 622,254     |  |   0x34 ║
  228. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  229. │           │      │      │ МИ        │ E  │  5   ║ 659,255     |  |   0x35 ║
  230. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  231. │           │      │      │ ФА        │ F  │  6   ║ 698,456     |  |   0x36 ║
  232. │   первая  │  1   │  3   ├───────────┼────┼──────╫─────────    |  |  ──────╢
  233. │ ( first   │      │      │ ФА бемоль │ F# │  7   ║ 739,989     |  |   0x37 ║
  234. │  octave ) │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  235. │           │      │      │ СОЛЬ      │ G  │  8   ║ 783,991            0x38 ║
  236. │           │      │      ├───────────┼────┼──────╫─────────    x 2   ──────╢
  237. │           │      │      │СОЛЬ бемоль│ G# │  9   ║ 830,609            0x39 ║
  238. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  239. │           │      │      │ ЛЯ        │ A  │  10  ║ 880         |  |   0x3A ║
  240. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  241. │           │      │      │ ЛЯ бемоль │ A# │  11  ║ 932,328     |  |   0x3B ║
  242. │           │      │      ├───────────┼────┼──────╫─────────    |  |  ──────╢
  243. │           │      │      │ СИ        │ B  │  12  ║ 987,767     |  |   0x3C ║
  244. ├───────────┼──────┼──────┼───────────┼────┼──────╠═════════    |  |  ══════╣
  245. │   вторая  │  2   │  4   │ ДО        │ С  │  1   ║1046,502   <-   |   0x41 ║
  246.     ......     ..     ..    ...         ..    ..   .... ...   <----
  247.  
  248. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  249.  
  250.                           --- EXAMPLE MUSIC ---
  251.  
  252. Пример музицирования по нотам мелодии И.Карнелюка "Горит очаг..."
  253.                                               к фильму "Бандитский Петербург"
  254. MyMusic_1:
  255. db 0xe4,0x35, 0x99,0x33, 0x99,0x31, 0x99,0x33, 0xe4,0x35, 0x99,0x35, 0x99,0x36
  256. db 0x99,0x38, 0x99,0x3a, 0xe4,0x36, 0xe4,0x36, 0xb2,0xff, 0xe4,0x33, 0x99,0x31
  257. db 0x99,0x2c, 0x99,0x31, 0xe4,0x33, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x35
  258. db 0xe4,0x35, 0xb2,0xff, 0x99,0x35, 0x99,0x36, 0xe4,0x33, 0x99,0x35, 0x99,0x36
  259. db 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x39
  260. db 0xe4,0x39, 0xb2,0xff, 0x99,0x35, 0x99,0x36, 0xe4,0x33, 0x99,0x35, 0x99,0x36
  261. db 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xb2,0x33, 0x99,0x35, 0x99,0x36, 0xe4,0x35
  262. db 0xe4,0x35, 0
  263.  
  264.  
  265. MyMusic_2:
  266. db 0x90,0x31, 0x90,0x33, 0x90,0x35, 0x90,0x36, 0xA0,0xFF, 0xA0,0x06, 0x90,0xFF
  267. db 0xA0,0x06, 0x90,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37, 0x90,0x38, 0xA0,0xFF
  268. db 0xA0,0x18, 0x90,0xFF, 0xA0,0x18, 0x90,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37
  269. db 0x90,0x38, 0xA0,0xFF, 0x90,0x33, 0x90,0x35, 0x90,0x37, 0x90,0x38, 0xA0,0xFF
  270. db 0x90,0x31, 0x90,0x33, 0x90,0x35, 0x90,0x36, 0xA0,0xFF, 0xA0,0x16, 0x90,0xFF
  271. db 0xA0,0x16, 0
  272.  
  273.  
  274. MyMusic_3:
  275. db 0x99,0x31, 0xB2,0x36, 0x99,0x3A, 0xB2,0x36, 0x99,0x33, 0xB2,0x28, 0xBC,0x38
  276. db 0
  277.  
  278.                                <<<<<<< >>>>>>>
  279. |>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  !GOOD LUCK!  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<|
  280.                                <<<<<<< >>>>>>>
  281.  
  282.  
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291.  
  292.  
  293.  
  294.