Subversion Repositories tsfmpro

Rev

Rev 546 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. ;--------------------------------------------------------------------
  2. ; Описание: Программа проигрывания модулей E-Tracker
  3. ; поддержка в железе: ZXM-SoundCard
  4. ; Автор порта: Тарасов М.Н.(Mick),2010
  5. ;--------------------------------------------------------------------
  6.                 DEVICE ZXSPECTRUM128
  7.  
  8.                 .org    6000h
  9.  
  10. ;-------------------------------------------------------------------
  11. ; описание: Точка входа в программу после передачи управления из ОС
  12. ;---------------------------------------------------------------------
  13. ETunes_Start:          
  14.                 xor     a                               ;бордер в черный цвет
  15.                 out     (0feh),a       
  16.                 ld      (ETunes_count_music),a          ;счетчик номера музыки
  17.  
  18.                 ld      hl,4000h
  19.                 ld      de,4001h
  20.                 ld      bc,1b00h
  21.                 ld      (hl),c
  22.                 ldir
  23.                
  24.                 ld      hl,4000h                        ;грузим экран
  25.                 ld      de,(5CF4h)
  26.                 ld      bc,1B05h
  27.                 call    3d13h
  28.                 call    Str_init_load
  29.                 ei
  30. ETunes_loading:
  31.                 halt
  32.                 call    Str_draw_symbol
  33.                 call    Str_play
  34.                 jr      c,ETunes_load
  35.                 call    Str_update_symbol
  36.                 jr      nc,ETunes_loading      
  37. ETunes_load:
  38.                 di                                      ;на всякий пожарный запретим прерывания
  39.                 ld      a,10h                           ;установим начальную страницу памяти
  40.                 ld      (ETunes_page_memory),a
  41.                 ld      bc,7ffdh
  42.                 out     (c),a
  43.                 ld      hl,0C000h                       ;грузим музыкальный пак 1.
  44.                 ld      de,(5CF4h)
  45.                 ld      bc,3A05h
  46.                 call    3d13h
  47.  
  48.                 ld      a,11h
  49.                 ld      bc,7ffdh
  50.                 out     (c),a
  51.                 ld      hl,0C000h                       ;грузим музыкальный пак 2.
  52.                 ld      de,(5CF4h)
  53.                 ld      bc,3A05h
  54.                 call    3d13h
  55.  
  56.                 ld      a,13h
  57.                 ld      bc,7ffdh
  58.                 out     (c),a
  59.                 ld      hl,0C000h                       ;грузим музыкальный пак 3.
  60.                 ld      de,(5CF4h)
  61.                 ld      bc,3D05h
  62.                 call    3d13h
  63.  
  64.                 ld      a,14h
  65.                 ld      bc,7ffdh
  66.                 out     (c),a
  67.                 ld      hl,0C000h                       ;грузим музыкальный пак 4.
  68.                 ld      de,(5CF4h)
  69.                 ld      bc,3E05h
  70.                 call    3d13h
  71.  
  72.                 ld      a,16h
  73.                 ld      bc,7ffdh
  74.                 out     (c),a
  75.                 ld      hl,0C000h                       ;грузим музыкальный пак 5.
  76.                 ld      de,(5CF4h)
  77.                 ld      bc,0F05h
  78.                 call    3d13h
  79.  
  80.                 ld      a,10h
  81.                 ld      bc,7ffdh
  82.                 out     (c),a
  83.                 call    Str_init_clear
  84.                 ei
  85. ETunes_clearing:
  86.                 halt
  87.                 call    Str_draw_symbol
  88.                 call    Str_play
  89.                 jr      c,ETunes_init
  90.                 call    Str_update_symbol
  91.                 jr      nc,ETunes_clearing     
  92. ETunes_init:
  93.                 di                                      ;на всякий пожарный запретим прерывания
  94.  
  95.                 ld      sp,5fffh
  96.                 call    Str_init                        ;инициализация бегущей строки
  97.                 call    Analyzer_init                  
  98.                 ld      a,1
  99.                 ld      (ETunes_number_music),a
  100.                 call    ETunes_view_number
  101.                 ld      hl,0C000h
  102.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  103.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  104.                 ld      a,0f6h
  105.                 out     (c),a
  106.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  107.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  108.                 ld      de,0fe01h
  109.                 ld      bc,0100h
  110.                 ld      (hl),0fdh
  111.                 ldir
  112.                 ld      a,0c3h                          ;установим вектор прерывания
  113.                 ld      (0fdfdh),a
  114.                 ld      hl,Interrupt_handle
  115.                 ld      (0fdfeh),hl
  116.                 di
  117.                 ld      a,0feh                          ;окончание установки прерывания
  118.                 ld      i,a
  119.                 im      2
  120.                 ei
  121. ETunes_key:            
  122.                 xor     a
  123.                 ld      (ETunes_key_press),a
  124. ETunes_loop:           
  125.                 halt
  126.  
  127.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  128.                 in      a,(0feh)
  129.                 rra    
  130.                 jr      c,ETunes_key
  131.  
  132.                 ld      a,0FEh
  133.                 in      a,(0FEh)
  134.                 rra        
  135.                 jr      nc,ETunes_exit
  136.  
  137.                 ld      a,(ETunes_key_press)
  138.                 and     a
  139.                 jr      nz,ETunes_loop
  140.  
  141.                 di     
  142.                 inc     a
  143.                 ld      (ETunes_key_press),a
  144.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  145.                 ld      bc,7ffdh
  146.                 out     (c),a
  147.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  148.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  149.                 ld      a,0feh
  150.                 out     (c),a
  151.                 ld      a,(ETunes_count_music)
  152.                 inc     a
  153.                 cp      30
  154.                 jr      c,ETunes_next_music
  155.                 xor     a
  156.  
  157. ETunes_next_music:
  158.                 ld      (ETunes_count_music),a
  159.                 ld      l,a
  160.                 ld      e,a
  161.                 ld      h,0
  162.                 ld      d,h
  163.                 add     hl,hl
  164.                 add     hl,de
  165.                 ld      de,ETunes_tabl_music
  166.                 add     hl,de
  167.                 ld      a,(hl)                          ;номер страницы памяти
  168.                 ld      (ETunes_page_memory),a
  169.                 inc     hl
  170.                 ld      a,(hl)                          
  171.                 inc     hl
  172.                 ld      h,(hl)
  173.                 ld      l,a
  174.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  175.                 ld      bc,7ffdh
  176.                 out     (c),a
  177.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  178.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  179.                 ld      a,0f6h
  180.                 out     (c),a
  181.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  182.                 ld      a,10h
  183.                 ld      bc,7ffdh
  184.                 out     (c),a
  185.  
  186.                 ld      a,(ETunes_number_music)
  187.                 inc     a
  188.                 ld      c,a
  189.                 and     0Fh
  190.                 cp      10
  191.                 jr      c,ETunes_number_correct
  192.                 ld      a,6
  193.                 add     c
  194.                 ld      c,a
  195.  
  196. ETunes_number_correct:
  197.                 ld      a,c
  198.                 ld      (ETunes_number_music),a
  199.                 cp      31h
  200.                 jr      c,ETunes_number_valid
  201.                 ld      a,1
  202.  
  203. ETunes_number_valid:
  204.                 ld      (ETunes_number_music),a
  205.                 call    ETunes_view_number
  206.  
  207.                 ei
  208.                 jp      ETunes_loop
  209.  
  210. ETunes_exit:           
  211.                 di     
  212.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  213.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  214.                 ld      a,0feh
  215.                 out     (c),a
  216.                 ld      hl,0   
  217.                 push    hl
  218.                 jp      3d2fh                           ;выход в TR-DOS
  219.  
  220. ETunes_view_number:
  221.                 ld      c,a
  222.                 and     0F0h
  223.                 rrca
  224.                 rrca
  225.                 rrca
  226.                 rrca
  227.                 ld      hl,5092h
  228.                 call    ETunes_view_symbol
  229.                 ld      a,c
  230.                 and     0Fh
  231.                 ld      hl,5093h
  232.  
  233. ETunes_view_symbol:
  234.                 push    hl
  235.                 ld      h,0
  236.                 ld      l,a
  237.                 add     hl,hl
  238.                 add     hl,hl
  239.                 add     hl,hl
  240.                 ld      de,ETunes_table_symbol
  241.                 add     hl,de  
  242.                 ex      de,hl
  243.                 pop     hl
  244.                 ld      b,8
  245.  
  246. ETunes_view_loop:
  247.                 ld      a,(de)
  248.                 ld      (hl),a
  249.                 inc     de             
  250.                 inc     h
  251.                 djnz    ETunes_view_loop
  252.                 ret    
  253.  
  254. ETunes_line_border:
  255.                 ld      a,07h
  256.                 out     (0feh),a
  257.                 ld      b,0Ch
  258. ETunes_width_loop:             
  259.                 nop
  260.                 djnz    ETunes_width_loop
  261.                 xor     a
  262.                 out     (0feh),a
  263.                 ret
  264. ;-------------------------------------------------------------------
  265. ; описание: Обновление параметров основной бегущей строки
  266. ; параметры: нет
  267. ; возвращаемое  значение: нет
  268. ;---------------------------------------------------------------------
  269. ETunes_line_select:    
  270.                 ld      hl,(ETunes_line_index)
  271.                 ld      a,(hl)
  272.                 dec     a
  273.                 jr      nz,ETunes_load_index
  274.                 ld      hl,ETunes_table_line
  275. ETunes_load_index:             
  276.                 ld      e,(hl)
  277.                 inc     hl
  278.                 ld      d,(hl)
  279.                 inc     hl
  280.                 ld      (ETunes_line_index),hl
  281.                 ex      hl,de
  282.                 ld      (ETunes_cnst_delay),hl
  283.                 ret
  284.  
  285. ETunes_tabl_music:
  286.                 db      10h                             ; 1 музыкальное произведение
  287.                 dw      0C000h
  288.                 db      10h                             ; 2 музыкальное произведение
  289.                 dw      0C5B0h
  290.                 db      10h                             ; 3 музыкальное произведение
  291.                 dw      0CFD0h
  292.                 db      10h                             ; 4 музыкальное произведение
  293.                 dw      0DC10h
  294.                 db      10h                             ; 5 музыкальное произведение
  295.                 dw      0E210h
  296.                 db      10h                             ; 6 музыкальное произведение
  297.                 dw      0EEC0h
  298.                 db      10h                             ; 7 музыкальное произведение
  299.                 dw      0F770h
  300.  
  301.                 db      11h                             ; 8 музыкальное произведение
  302.                 dw      0C000h
  303.                 db      11h                             ; 9 музыкальное произведение
  304.                 dw      0C700h
  305.                 db      11h                             ; 10 музыкальное произведение
  306.                 dw      0CC70h
  307.                 db      11h                             ; 11 музыкальное произведение
  308.                 dw      0D7C0h
  309.                 db      11h                             ; 12 музыкальное произведение
  310.                 dw      0E550h
  311.                 db      11h                             ; 13 музыкальное произведение
  312.                 dw      0ED60h
  313.                 db      11h                             ; 14 музыкальное произведение
  314.                 dw      0F180h
  315.  
  316.                 db      13h                             ; 15 музыкальное произведение
  317.                 dw      0C000h
  318.                 db      13h                             ; 16 музыкальное произведение
  319.                 dw      0CD80h
  320.                 db      13h                             ; 17 музыкальное произведение
  321.                 dw      0D740h
  322.                 db      13h                             ; 18 музыкальное произведение
  323.                 dw      0DEB0h
  324.                 db      13h                             ; 19 музыкальное произведение
  325.                 dw      0E5C0h
  326.                 db      13h                             ; 20 музыкальное произведение
  327.                 dw      0ED80h
  328.                 db      13h                             ; 21 музыкальное произведение
  329.                 dw      0F450h
  330.  
  331.                 db      14h                             ; 22 музыкальное произведение
  332.                 dw      0C000h
  333.                 db      14h                             ; 23 музыкальное произведение
  334.                 dw      0CCB0h
  335.                 db      14h                             ; 24 музыкальное произведение
  336.                 dw      0D580h
  337.                 db      14h                             ; 25 музыкальное произведение
  338.                 dw      0DFD0h
  339.                 db      14h                             ; 26 музыкальное произведение
  340.                 dw      0E8F0h
  341.                 db      14h                             ; 27 музыкальное произведение
  342.                 dw      0F080h
  343.                 db      14h                             ; 28 музыкальное произведение
  344.                 dw      0F2D0h
  345.  
  346.                 db      16h                             ; 29 музыкальное произведение
  347.                 dw      0C000h
  348.                 db      16h                             ; 30 музыкальное произведение
  349.                 dw      0C630h
  350.  
  351. ETunes_table_symbol:
  352.                 db      0,3Ch,66h,6Eh,76h,66h,3Ch,0
  353.                 db      0,18h,38h,18h,18h,18h,7Eh,0
  354.                 db      0,3Ch,66h,0Ch,18h,30h,7Eh,0
  355.                 db      0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
  356.                 db      0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
  357.                 db      0,7Eh,60h,7Ch,06h,66h,3Ch,0
  358.                 db      0,3Ch,60h,7Ch,66h,66h,3Ch,0
  359.                 db      0,7Eh,06h,0Ch,18h,30h,30h,0
  360.                 db      0,3Ch,66h,3Ch,66h,66h,3Ch,0
  361.                 db      0,3Ch,66h,3Eh,06h,0Ch,38h,0
  362.  
  363. ETunes_table_line:     
  364.                 dw      0Bh
  365.                 dw      0Bh
  366.                 dw      0Bh
  367.                 dw      0Bh
  368.                 dw      13h
  369.                 dw      13h
  370.                 dw      13h
  371.                 dw      1Ch
  372.                 dw      1Ch
  373.                 dw      1Ch
  374.                 dw      25h
  375.                 dw      25h
  376.                 dw      25h
  377.                 dw      2Dh
  378.                 dw      2Dh
  379.                 dw      3Eh
  380.                 dw      3Eh
  381.                 dw      47h
  382.                 dw      47h
  383.                 dw      58h
  384.                 dw      58h
  385.                 dw      69h
  386.                 dw      69h
  387.                 dw      7Bh
  388.                 dw      7Bh
  389.                 dw      8Ch
  390.                 dw      8Ch
  391.                 dw      9Dh
  392.                 dw      9Dh
  393.                 dw      0AEh
  394.                 dw      0AEh
  395.                 dw      0B7h
  396.                 dw      0B7h
  397.                 dw      0B7h
  398.                 dw      0C0h
  399.                 dw      0C0h
  400.                 dw      0C0h
  401.                 dw      0C8h
  402.                 dw      0C8h
  403.                 dw      0C8h
  404.                 dw      0C8h
  405.                 dw      0C0h
  406.                 dw      0C0h
  407.                 dw      0C0h
  408.                 dw      0B7h
  409.                 dw      0B7h
  410.                 dw      0B7h
  411.                 dw      0AEh
  412.                 dw      0AEh
  413.                 dw      9Dh
  414.                 dw      9Dh
  415.                 dw      8Ch
  416.                 dw      8Ch
  417.                 dw      7Bh
  418.                 dw      7Bh
  419.                 dw      69h
  420.                 dw      69h
  421.                 dw      58h
  422.                 dw      58h
  423.                 dw      47h
  424.                 dw      47h
  425.                 dw      3Eh
  426.                 dw      3Eh
  427.                 dw      2Dh
  428.                 dw      2Dh
  429.                 dw      25h
  430.                 dw      25h
  431.                 dw      25h
  432.                 dw      1Ch
  433.                 dw      1Ch
  434.                 dw      1Ch
  435.                 dw      13h
  436.                 dw      13h
  437.                 dw      13h
  438.                 db      1
  439.  
  440. ETunes_line_index:
  441.                 dw      ETunes_table_line
  442. ETunes_cnst_delay:
  443.                 dw      4
  444. ETunes_page_memory:
  445.                 db      0              
  446. ETunes_count_music:
  447.                 db      0
  448. ETunes_number_music:
  449.                 db      0
  450. ETunes_key_press:
  451.                 db      0
  452. ETunes_phase:
  453.                 db      0
  454.  
  455. Interrupt_handle:
  456.                 push    af     
  457.  
  458.                 call    Analyzer_update
  459.                 call    Analyzer_view
  460.                 call    Analyzer_draw_flash
  461.                 call    Str_shift_buf
  462.                 call    Str_play_txt
  463.                 call    Str_update_symstr
  464.  
  465.                 ld      bc,(ETunes_cnst_delay)
  466. MA2BB:         
  467.                 dec     bc
  468.                 ld      a,b
  469.                 or      c
  470.                 jr      nz,MA2BB
  471.                 call    ETunes_line_border
  472.                 call    ETunes_line_select
  473.  
  474.                 ld      b,7Bh
  475. MA2BC:         
  476.                 djnz    MA2BC
  477.                 call    ETunes_line_border
  478.  
  479.                 ld      a,(ETunes_page_memory)
  480.                 ld      bc,7ffdh
  481.                 out     (c),a
  482.                 call    EPlayer_Play
  483.                 ld      a,10h
  484.                 ld      bc,7ffdh
  485.                 out     (c),a
  486.  
  487.                 call    Str_line_clear
  488.                 call    Str_line_select
  489.                 call    Str_copy_scr
  490.  
  491.                 pop     af
  492.                 ei
  493.                 ret
  494.  
  495.                 .include  analyzer.asm
  496.                 .include  etplayer.asm
  497.                 .include  string.asm
  498. Etunes_end:
  499.  
  500.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  501.                 .end
  502.  
  503.