Subversion Repositories tsfmpro

Rev

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

  1. ;--------------------------------------------------------------------
  2. ; Описание: Модуль отображения анализатора
  3. ; Автор порта: Тарасов М.Н.(Mick),2011
  4. ;--------------------------------------------------------------------
  5.  
  6. ;-------------------------------------------------------------------
  7. ; описание: Обновление параметров анализатора
  8. ; параметры: нет
  9. ; возвращаемое  значение: нет
  10. ;---------------------------------------------------------------------
  11. Analyzer_update:
  12.                 ld      hl,EAmplitude_ch0
  13.  
  14.                 ld      a,(hl)                          ;+00h - Amplitude 0 right/left
  15.                 and     0Fh
  16.                 ld      c,a
  17.                 ld      a,(hl)                          ;+00h - Amplitude 0 right/left                         
  18.                 and     0F0h
  19.                 rrca   
  20.                 rrca   
  21.                 rrca
  22.                 rrca   
  23.                 cp      c
  24.                 jr      nc,Analyzer_up_ch0
  25.                 ld      a,c    
  26. Analyzer_up_ch0:
  27.                 ld      (Analyzer_ch0_vol),a            ;Amplitude 0
  28.  
  29.                 inc     hl
  30.                 ld      a,(hl)                          ;+01h - Amplitude 1 right/left
  31.                 and     0Fh
  32.                 ld      c,a
  33.                 ld      a, (hl)                         ;+01h - Amplitude 1 right/left
  34.                 and     0F0h
  35.                 rrca   
  36.                 rrca   
  37.                 rrca   
  38.                 rrca   
  39.                 cp      c
  40.                 jr      nc,Analyzer_up_ch1
  41.                 ld      a,c    
  42. Analyzer_up_ch1:
  43.                 ld      (Analyzer_ch1_vol),a            ;Amplitude 1
  44.  
  45.                 inc     hl
  46.                 ld      a,(hl)                          ;+02h - Amplitude 2 right/left
  47.                 and     0Fh
  48.                 ld      c,a
  49.                 ld      a,(hl)                          ;+02h - Amplitude 2 right/left
  50.                 and     0F0h
  51.                 rrca   
  52.                 rrca   
  53.                 rrca   
  54.                 rrca   
  55.                 cp      c
  56.                 jr      nc,Analyzer_up_ch2
  57.                 ld      a,c    
  58. Analyzer_up_ch2:
  59.                 ld      (Analyzer_ch2_vol),a            ;Amplitude 2  
  60.  
  61.                 inc     hl
  62.                 ld      a, (hl)                         ;+03h - Amplitude 3 right/left
  63.                 and     0Fh
  64.                 ld      c,a
  65.                 ld      a, (hl)                         ;+03h - Amplitude 3 right/left
  66.                 and     0F0h
  67.                 rrca   
  68.                 rrca   
  69.                 rrca   
  70.                 rrca   
  71.                 cp      c
  72.                 jr      nc,Analyzer_up_ch3
  73.                 ld      a,c    
  74. Analyzer_up_ch3:
  75.                 ld      (Analyzer_ch3_vol),a            ;Amplitude 3  
  76.  
  77.                 inc     hl
  78.                 ld      a, (hl)                         ;+04h - Amplitude 4 right/left
  79.                 and     0Fh
  80.                 ld      c,a
  81.                 ld      a, (hl)
  82.                 and     0F0h
  83.                 rrca   
  84.                 rrca   
  85.                 rrca   
  86.                 rrca   
  87.                 cp      c
  88.                 jr      nc,Analyzer_up_ch4
  89.                 ld      a,c    
  90. Analyzer_up_ch4:
  91.                 ld      (Analyzer_ch4_vol),a          ;Amplitude 4  
  92.  
  93.                 inc     hl
  94.                 ld      a, (hl)                         ;+05h - Amplitude 5 right/left
  95.                 and     0Fh
  96.                 ld      c,a
  97.                 ld      a, (hl)
  98.                 and     0F0h
  99.                 rrca   
  100.                 rrca   
  101.                 rrca   
  102.                 rrca   
  103.                 cp      c
  104.                 jr      nc,Analyzer_up_ch5
  105.                 ld      a,c    
  106. Analyzer_up_ch5:
  107.                 ld      (Analyzer_ch5_vol),a            ;Amplitude 5  
  108.                 ret
  109. ;-------------------------------------------------------------------
  110. ; описание: Отрисовка левого канала анализатора
  111. ; параметры: HL - адрес экрана
  112. ;            C - позиция в индикаторе
  113. ; возвращаемое  значение: нет
  114. ;---------------------------------------------------------------------
  115. Analyzer_draw_flash:
  116.                 ld      a,(Analyzer_ch0_vol)
  117.                 ld      e,a
  118.                 ld      a,(Analyzer_ch3_vol)
  119.                 add     e
  120.                 and     0Fh
  121.                 ld      hl,Analyzer_table
  122.                 ld      e,a
  123.                 ld      d,0
  124.                 add     hl,de
  125.                 ld      a,(hl)
  126.                 ld      hl,5AFEh
  127.                 ld      (hl),a
  128.                 inc     l
  129.                 ld      (hl),a
  130.  
  131.                 ld      a,(Analyzer_ch1_vol)
  132.                 ld      e,a
  133.                 ld      a,(Analyzer_ch4_vol)
  134.                 add     e
  135.                 and     0Fh
  136.                 ld      hl,Analyzer_table
  137.                 ld      e,a
  138.                 ld      d,0
  139.                 add     hl,de
  140.                 ld      a,(hl)
  141.                 ld      hl,5AE4h
  142.                 ld      (hl),a
  143.                 inc     l
  144.                 inc     l
  145.                 ld      (hl),a
  146.                 inc     l
  147.                 ld      (hl),a
  148.  
  149.                 ld      a,(Analyzer_ch2_vol)
  150.                 ld      e,a
  151.                 ld      a,(Analyzer_ch5_vol)
  152.                 add     e
  153.                 and     0Fh
  154.                 ld      hl,Analyzer_table
  155.                 ld      e,a
  156.                 ld      d,0
  157.                 add     hl,de
  158.                 ld      a,(hl)
  159.                 ld      hl,5AEAh
  160.                 ld      (hl),a
  161.                 inc     l
  162.                 ld      (hl),a
  163.                 inc     l
  164.                 ld      (hl),a
  165.                 inc     l
  166.                 ld      (hl),a
  167.                 inc     l
  168.                 ld      (hl),a
  169.                 inc     l
  170.                 ld      (hl),a
  171.                 inc     l
  172.                 ld      (hl),a
  173.                 inc     l
  174.                 ld      (hl),a
  175.                 inc     l
  176.                 ld      (hl),a
  177.                 inc     l
  178.                 ld      (hl),a
  179.                 inc     l
  180.                 ld      (hl),a
  181.                 inc     l
  182.                 ld      (hl),a
  183.  
  184.                 ret
  185.  
  186. ;-------------------------------------------------------------------
  187. ; описание: Обновление параметров анализатора
  188. ; параметры: нет
  189. ; возвращаемое  значение: нет
  190. ;---------------------------------------------------------------------
  191. Analyzer_init:
  192.                 ld      b, 6
  193.                 ld      hl,Analyzer_ch0_vol
  194.  
  195. Analyzer_init_loop:
  196.                 ld      (hl),0
  197.                 inc     hl
  198.                 djnz    Analyzer_init_loop
  199.                 ret
  200. ;-------------------------------------------------------------------
  201. ; описание: Отображение анализатора
  202. ; параметры: нет
  203. ; возвращаемое  значение: нет
  204. ;---------------------------------------------------------------------
  205. Analyzer_view:
  206.  
  207.                 ld      a,(Analyzer_ch0_vol)
  208.                 ld      e,a                             ;амплитуда
  209.                 ld      a,(Analyzer_ch1_vol)
  210.                 cp      e
  211.                 jr      c,Analyzer_max_level_0          ;вычисляем максимальное значение амплитуды
  212.                 ld      e,a                            
  213.  
  214. Analyzer_max_level_0:
  215.                 ld      d,0
  216.                 ld      c,d
  217.                
  218.                 ld      a,(Analyzer_ch0_vol)
  219.                 and     a
  220.                 jr      z, Analyzer_skip_0
  221.                 ld      a,(EFrequency_ch0)
  222.                 ld      d,a                             ;тон
  223.                 ld      a,(EOctave_ch0)
  224.                 and     3
  225.                 ld      c,a
  226. Analyzer_skip_0:
  227.  
  228.                 ld      a,(Analyzer_ch1_vol)
  229.                 and     a
  230.                 jr      z, Analyzer_skip_1
  231.                 ld      a,(EFrequency_ch0 + 1)
  232.                 add     d
  233.                 ld      d,a                             ;тон
  234.                 ld      a,(EOctave_ch0)
  235.                 and     30h
  236.                 rlca
  237.                 rlca
  238.                 rlca
  239.                 rlca
  240.                 add     c
  241.                 ld      c,a
  242.  
  243. Analyzer_skip_1:
  244.  
  245.                 ld      a,c                             ;итоговое значение октавы
  246.                 add     0Fh
  247.                 ld      (loc_0_8D38+1),a
  248.  
  249.                 ld      l,d                             ;итоговое значение тона
  250.                 ld      h,90h
  251.                 ld      a,e
  252.                 add     a,h                            
  253.                 ld      h,a                             ;вычислим ее таблице 8000...8FFFh
  254.  
  255.                 ld      de,5007h
  256.                 call    Analyzer_draw
  257.  
  258.                 ld      a,(Analyzer_ch2_vol)
  259.                 ld      e,a                             ;амплитуда
  260.                 ld      a,(Analyzer_ch3_vol)
  261.                 cp      e
  262.                 jr      c,Analyzer_max_level_1          ;вычисляем максимальное значение амплитуды
  263.                 ld      e,a                            
  264.  
  265. Analyzer_max_level_1:
  266.                 ld      d,0
  267.                 ld      c,d
  268.                
  269.                 ld      a,(Analyzer_ch2_vol)
  270.                 and     a
  271.                 jr      z, Analyzer_skip_2
  272.                 ld      a,(EFrequency_ch2)
  273.                 ld      d,a                             ;тон
  274.                 ld      a,(EOctave_ch2)
  275.                 and     3
  276.                 ld      c,a
  277. Analyzer_skip_2:
  278.  
  279.                 ld      a,(Analyzer_ch3_vol)
  280.                 and     a
  281.                 jr      z, Analyzer_skip_3
  282.                 ld      a,(EFrequency_ch2 + 1)
  283.                 add     d
  284.                 ld      d,a                             ;тон
  285.                 ld      a,(EOctave_ch2)
  286.                 and     30h
  287.                 rlca
  288.                 rlca
  289.                 rlca
  290.                 rlca
  291.                 add     c
  292.                 ld      c,a
  293.  
  294. Analyzer_skip_3:
  295.                 ld      a,c                             ;итоговое значение октавы
  296.                 add     0Fh
  297.                 ld      (loc_0_8D38+1),a
  298.  
  299.                 ld      l,d                             ;итоговое значение тона
  300.                 ld      h,90h
  301.                 ld      a,e
  302.                 add     a,h                            
  303.                 ld      h,a                             ;вычислим ее таблице 8000...8FFFh
  304.  
  305.                 ld      de,48ACh
  306.                 call    Analyzer_draw
  307.  
  308.                 ld      a,(Analyzer_ch4_vol)
  309.                 ld      e,a                             ;амплитуда
  310.                 ld      a,(Analyzer_ch5_vol)
  311.                 cp      e
  312.                 jr      c,Analyzer_max_level_2          ;вычисляем максимальное значение амплитуды
  313.                 ld      e,a                            
  314.  
  315. Analyzer_max_level_2:
  316.                 ld      d,0
  317.                 ld      c,d
  318.                
  319.                 ld      a,(Analyzer_ch4_vol)
  320.                 and     a
  321.                 jr      z, Analyzer_skip_5
  322.                 ld      a,(EFrequency_ch4)
  323.                 ld      d,a                             ;тон
  324.                 ld      a,(EOctave_ch4)
  325.                 and     3
  326.                 ld      c,a
  327. Analyzer_skip_5:
  328.  
  329.                 ld      a,(Analyzer_ch5_vol)
  330.                 and     a
  331.                 jr      z, Analyzer_skip_6
  332.                 ld      a,(EFrequency_ch4 + 1)
  333.                 add     d
  334.                 ld      d,a                             ;тон
  335.                 ld      a,(EOctave_ch4)
  336.                 and     30h
  337.                 rlca
  338.                 rlca
  339.                 rlca
  340.                 rlca
  341.                 add     c
  342.                 ld      c,a
  343.  
  344. Analyzer_skip_6:
  345.  
  346.                 ld      a,c                             ;итоговое значение октавы
  347.                 add     0Fh
  348.                 ld      (loc_0_8D38+1),a
  349.  
  350.                 ld      l,d                             ;итоговое значение тона
  351.                 ld      h,90h
  352.                 ld      a,e
  353.                 add     a,h                            
  354.                 ld      h,a                             ;вычислим ее таблице 8000...8FFFh
  355.  
  356.                 ld      de,4851h
  357.        
  358. Analyzer_draw:
  359.                 ld      b,31
  360.  
  361. loc_0_8D27:
  362.                 xor     a
  363.                 ld      ix,Analyzer_buffer
  364.                 ld      (ix + 0),a
  365.                 ld      (ix + 1),a
  366.                 ld      (ix + 2),a
  367.                 ld      (ix + 3),a
  368.  
  369.                 push    de
  370.                 push    hl
  371.                 ld      l,(hl)                          ;получим смещение
  372.                 ld      h,0A0h                          ;для таблицы FC00h
  373.                 ld      e,(hl)                          ;смещение
  374.                 ld      d,0
  375.                 add     ix,de
  376.                 inc     h                              
  377.                 ld      a,(hl)                          ;байт
  378.                 ld      (ix + 0),a
  379.                 pop     hl
  380.                 pop     de
  381.  
  382.                 ld      ix,Analyzer_buffer
  383.                 ld      a,(de)
  384.                 and     0F0h
  385.                 or      (ix + 0)
  386.                 ld      (de),a
  387.                 inc     de
  388.  
  389.                 ld      a,(ix + 1)
  390.                 ld      (de),a
  391.                 inc     de
  392.  
  393.                 ld      a,(ix + 2)
  394.                 ld      (de),a
  395.                 inc     de
  396.  
  397.                 ld      a,(de)
  398.                 and     0Fh
  399.                 or      (ix + 3)
  400.                 ld      (de),a
  401.                 dec     de
  402.                 dec     de
  403.                 dec     de
  404.  
  405.                 inc     d
  406.                 ld      a,d
  407.                 and     7
  408.                 jr      nz,Analyzer_next_line
  409.                 ld      a,e
  410.                 add     20h
  411.                 ld      e,a
  412.                 jr      c,Analyzer_next_line
  413.                 ld      a,d
  414.                 sub     8
  415.                 ld      d,a
  416.  
  417. Analyzer_next_line:
  418.  
  419.                 ld      a,l
  420. loc_0_8D38:
  421.                 add     a,0                             ;амплитуду увеличиваем
  422.                 ld      l,a
  423.                 djnz    loc_0_8D27
  424.                 ret
  425. ;-------------------------------------------------------------------
  426. ; описание:  Переменные правого и левого каналов анализатора
  427. ;---------------------------------------------------------------------
  428. Analyzer_table:
  429.                 db      47h,47h,47h,46h,46h,46h,45h,45h,45h,44h,44h,44h,43h,43h,42h,42h
  430. ;-------------------------------------------------------------------
  431. ; описание:  Переменные правого и левого каналов анализатора
  432. ;---------------------------------------------------------------------
  433. Analyzer_ch0_vol:
  434.                 db      0
  435. Analyzer_ch1_vol:
  436.                 db      0
  437. Analyzer_ch2_vol:
  438.                 db      0
  439. Analyzer_ch3_vol:
  440.                 db      0
  441. Analyzer_ch4_vol:
  442.                 db      0
  443. Analyzer_ch5_vol:
  444.                 db      0
  445.  
  446. Analyzer_buffer:       
  447.                 db      0,0,0,0
  448.