Subversion Repositories tsfmpro

Rev

Rev 547 | 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_up
  33.                 call    Str_draw_symbol_dw
  34.                 ld      b,0
  35. ETunes_wait:
  36.                 djnz    ETunes_wait                    
  37.                 call    Str_play
  38.                 jr      c,ETunes_load
  39.                 call    Str_update_symbol
  40.                 jr      nc,ETunes_loading      
  41. ETunes_load:
  42.                 di                                      ;на всякий пожарный запретим прерывания
  43.                 ld      a,10h                           ;установим начальную страницу памяти
  44.                 ld      (ETunes_page_memory),a
  45.                 ld      bc,7ffdh
  46.                 out     (c),a
  47.                 ld      hl,0C000h                       ;грузим музыкальный пак 1.
  48.                 ld      de,(5CF4h)
  49.                 ld      bc,3A05h
  50.                 call    3d13h
  51.  
  52.                 ld      a,11h
  53.                 ld      bc,7ffdh
  54.                 out     (c),a
  55.                 ld      hl,0C000h                       ;грузим музыкальный пак 2.
  56.                 ld      de,(5CF4h)
  57.                 ld      bc,3805h
  58.                 call    3d13h
  59.  
  60.                 ld      a,13h
  61.                 ld      bc,7ffdh
  62.                 out     (c),a
  63.                 ld      hl,0C000h                       ;грузим музыкальный пак 3.
  64.                 ld      de,(5CF4h)
  65.                 ld      bc,3705h
  66.                 call    3d13h
  67.  
  68.                 ld      a,14h
  69.                 ld      bc,7ffdh
  70.                 out     (c),a
  71.                 ld      hl,0C000h                       ;грузим музыкальный пак 4.
  72.                 ld      de,(5CF4h)
  73.                 ld      bc,3805h
  74.                 call    3d13h
  75.  
  76.                 ld      a,16h
  77.                 ld      bc,7ffdh
  78.                 out     (c),a
  79.                 ld      hl,0C000h                       ;грузим музыкальный пак 5.
  80.                 ld      de,(5CF4h)
  81.                 ld      bc,3D05h
  82.                 call    3d13h
  83.  
  84.                 ld      a,17h
  85.                 ld      bc,7ffdh
  86.                 out     (c),a
  87.                 ld      hl,0C000h                       ;грузим музыкальный пак 6.
  88.                 ld      de,(5CF4h)
  89.                 ld      bc,1105h
  90.                 call    3d13h
  91.  
  92.                 ld      a,10h
  93.                 ld      bc,7ffdh
  94.                 out     (c),a
  95.  
  96.                 ld      sp,5fffh
  97.                 call    Str_init                        ;инициализация бегущей строки
  98.                 call    Analyzer_init
  99.                 ld      a,1
  100.                 ld      (ETunes_number_music),a
  101.                 call    ETunes_view_number
  102.                 call    ETunes_time_init
  103.                 ld      hl,0C000h
  104.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  105.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  106.                 ld      a,0f6h
  107.                 out     (c),a
  108.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  109.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  110.                 ld      de,0fe01h
  111.                 ld      bc,0100h
  112.                 ld      (hl),0fdh
  113.                 ldir
  114.                 ld      a,0c3h                          ;установим вектор прерывания
  115.                 ld      (0fdfdh),a
  116.                 ld      hl,Interrupt_handle
  117.                 ld      (0fdfeh),hl
  118.                 di
  119.                 ld      a,0feh                          ;окончание установки прерывания
  120.                 ld      i,a
  121.                 im      2
  122.                 ei
  123. ETunes_key:            
  124.                 xor     a
  125.                 ld      (ETunes_key_press),a
  126. ETunes_loop:           
  127.                 halt
  128.  
  129.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  130.                 in      a,(0feh)
  131.                 rra    
  132.                 jr      c,ETunes_key
  133.  
  134.                 ld      a,0FEh
  135.                 in      a,(0FEh)
  136.                 rra        
  137.                 jr      nc,ETunes_exit
  138.  
  139.                 ld      a,(ETunes_key_press)
  140.                 and     a
  141.                 jr      nz,ETunes_loop
  142.  
  143.                 di     
  144.                 inc     a
  145.                 ld      (ETunes_key_press),a
  146.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  147.                 ld      bc,7ffdh
  148.                 out     (c),a
  149.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  150.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  151.                 ld      a,0feh
  152.                 out     (c),a
  153.                 ld      a,(ETunes_count_music)
  154.                 inc     a
  155.                 cp      30
  156.                 jr      c,ETunes_next_music
  157.                 xor     a
  158.  
  159. ETunes_next_music:
  160.                 ld      (ETunes_count_music),a
  161.                 ld      l,a
  162.                 ld      e,a
  163.                 ld      h,0
  164.                 ld      d,h
  165.                 add     hl,hl
  166.                 add     hl,de
  167.                 ld      de,ETunes_tabl_music
  168.                 add     hl,de
  169.                 ld      a,(hl)                          ;номер страницы памяти
  170.                 ld      (ETunes_page_memory),a
  171.                 inc     hl
  172.                 ld      a,(hl)                          
  173.                 inc     hl
  174.                 ld      h,(hl)
  175.                 ld      l,a
  176.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  177.                 ld      bc,7ffdh
  178.                 out     (c),a
  179.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  180.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  181.                 ld      a,0f6h
  182.                 out     (c),a
  183.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  184.                 ld      a,10h
  185.                 ld      bc,7ffdh
  186.                 out     (c),a
  187.  
  188.                 ld      a,(ETunes_number_music)
  189.                 inc     a
  190.                 ld      c,a
  191.                 and     0Fh
  192.                 cp      10
  193.                 jr      c,ETunes_number_correct
  194.                 ld      a,6
  195.                 add     c
  196.                 ld      c,a
  197.  
  198. ETunes_number_correct:
  199.                 ld      a,c
  200.                 ld      (ETunes_number_music),a
  201.                 cp      31h
  202.                 jr      c,ETunes_number_valid
  203.                 ld      a,1
  204.  
  205. ETunes_number_valid:
  206.                 ld      (ETunes_number_music),a
  207.                 call    ETunes_view_number
  208.                 call    ETunes_time_init
  209.  
  210.                 ei
  211.                 jp      ETunes_loop
  212.  
  213. ETunes_exit:           
  214.                 di     
  215.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  216.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  217.                 ld      a,0feh
  218.                 out     (c),a
  219.                 ld      hl,0   
  220.                 push    hl
  221.                 jp      3d2fh                           ;выход в TR-DOS
  222.  
  223. ETunes_time_init:
  224.                 xor     a
  225.                 ld      (ETunes_time_int),a
  226.                 ld      (ETunes_time_count),a          
  227.                 ld      (ETunes_time_minute),a
  228.                 jr      ETunes_time_draw
  229.  
  230. ETunes_time_view:
  231.                 ld      a,(ETunes_time_int)
  232.                 inc     a
  233.                 ld      (ETunes_time_int),a
  234.                 cp      50
  235.                 ret     c
  236.                 xor     a
  237.                 ld      (ETunes_time_int),a
  238.                 ld      a,(ETunes_time_count)
  239.                 inc     a
  240.                 ld      c,a
  241.                 and     0Fh
  242.                 cp      10
  243.                 jr      c,ETunes_time_next
  244.                 ld      a,6
  245.                 add     c
  246.                 ld      c,a
  247. ETunes_time_next:
  248.                 ld      a,c
  249.                 ld      (ETunes_time_count),a          
  250.                 cp      60h
  251.                 jr      c,ETunes_time_draw
  252.                 xor     a
  253.                 ld      (ETunes_time_count),a          
  254.                 ld      a,(ETunes_time_minute)
  255.                 inc     a
  256.                 ld      (ETunes_time_minute),a
  257.                 cp      10
  258.                 jr      c,ETunes_time_draw
  259.                 xor     a
  260.                 ld      (ETunes_time_minute),a
  261. ETunes_time_draw:
  262.                 ld      a,(ETunes_time_minute)
  263.                 ld      hl,401Bh
  264.                 and     0Fh
  265.                 call    ETunes_view_symbol
  266.                 ld      a,(ETunes_time_count)
  267.                 ld      c,a
  268.                 and     0F0h
  269.                 rrca
  270.                 rrca
  271.                 rrca
  272.                 rrca
  273.                 ld      hl,401Dh
  274.                 call    ETunes_view_symbol
  275.                 ld      a,c
  276.                 and     0Fh
  277.                 ld      hl,401Eh
  278.                 jr      ETunes_view_symbol
  279.  
  280.  
  281. ETunes_view_number:
  282.                 ld      c,a
  283.                 and     0F0h
  284.                 rrca
  285.                 rrca
  286.                 rrca
  287.                 rrca
  288.                 ld      hl,4007h
  289.                 call    ETunes_view_symbol
  290.                 ld      a,c
  291.                 and     0Fh
  292.                 ld      hl,4008h
  293.  
  294. ETunes_view_symbol:
  295.                 push    hl
  296.                 ld      h,0
  297.                 ld      l,a
  298.                 add     hl,hl
  299.                 add     hl,hl
  300.                 add     hl,hl
  301.                 ld      de,ETunes_table_symbol
  302.                 add     hl,de  
  303.                 ex      de,hl
  304.                 pop     hl
  305.                 ld      b,8
  306.  
  307. ETunes_view_loop:
  308.                 ld      a,(de)
  309.                 ld      (hl),a
  310.                 inc     de             
  311.                 inc     h
  312.                 ld      a,h
  313.                 and     7
  314.                 jr      nz,ETunes_next_line
  315.                 ld      a,l
  316.                 add     a,20h
  317.                 ld      l,a
  318.                 jr      c,ETunes_next_line
  319.                 ld      a,h
  320.                 sub     8
  321.                 ld      h,a
  322. ETunes_next_line:
  323.                 djnz    ETunes_view_loop
  324.                 ret    
  325.  
  326.        
  327. ETunes_tabl_music:
  328.                 db      10h                             ; 1 музыкальное произведение
  329.                 dw      0C000h
  330.                 db      10h                             ; 2 музыкальное произведение
  331.                 dw      0C620h
  332.                 db      10h                             ; 3 музыкальное произведение
  333.                 dw      0CD10h
  334.                 db      10h                             ; 4 музыкальное произведение
  335.                 dw      0D490h
  336.                 db      10h                             ; 5 музыкальное произведение
  337.                 dw      0DA20h
  338.                 db      10h                             ; 6 музыкальное произведение
  339.                 dw      0E0E0h
  340.                 db      10h                             ; 7 музыкальное произведение
  341.                 dw      0E670h
  342.                 db      10h                             ; 8 музыкальное произведение
  343.                 dw      0F290h
  344.  
  345.                 db      11h                             ; 9 музыкальное произведение
  346.                 dw      0C000h
  347.                 db      11h                             ; 10 музыкальное произведение
  348.                 dw      0D8D0h
  349.                 db      11h                             ; 11 музыкальное произведение
  350.                 dw      0E090h
  351.                 db      11h                             ; 12 музыкальное произведение
  352.                 dw      0ED30h
  353.                 db      11h                             ; 13 музыкальное произведение
  354.                 dw      0F020h
  355.  
  356.                 db      13h                             ; 14 музыкальное произведение
  357.                 dw      0C000h
  358.                 db      13h                             ; 15 музыкальное произведение
  359.                 dw      0CAF0h
  360.                 db      13h                             ; 16 музыкальное произведение
  361.                 dw      0DEE0h
  362.                 db      13h                             ; 17 музыкальное произведение
  363.                 dw      0E780h
  364.  
  365.                 db      14h                             ; 18 музыкальное произведение
  366.                 dw      0C000h
  367.                 db      14h                             ; 19 музыкальное произведение
  368.                 dw      0D460h
  369.                 db      14h                             ; 20 музыкальное произведение
  370.                 dw      0EE20h
  371.  
  372.                 db      16h                             ; 21 музыкальное произведение
  373.                 dw      0C000h
  374.                 db      16h                             ; 22 музыкальное произведение
  375.                 dw      0CBD0h
  376.                 db      16h                             ; 23 музыкальное произведение
  377.                 dw      0D340h
  378.                 db      16h                             ; 24 музыкальное произведение
  379.                 dw      0E0A0h
  380.                 db      16h                             ; 25 музыкальное произведение
  381.                 dw      0E830h
  382.                 db      16h                             ; 26 музыкальное произведение
  383.                 dw      0EEC0h
  384.                 db      16h                             ; 27 музыкальное произведение
  385.                 dw      0F700h
  386.  
  387.                 db      17h                             ; 28 музыкальное произведение
  388.                 dw      0C000h
  389.                 db      17h                             ; 29 музыкальное произведение
  390.                 dw      0C740h
  391.                 db      17h                             ; 30 музыкальное произведение
  392.                 dw      0CCD0h
  393.  
  394. ETunes_table_symbol:
  395.                 db      0,3Ch,66h,6Eh,76h,66h,3Ch,0
  396.                 db      0,18h,38h,18h,18h,18h,7Eh,0
  397.                 db      0,3Ch,66h,0Ch,18h,30h,7Eh,0
  398.                 db      0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
  399.                 db      0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
  400.                 db      0,7Eh,60h,7Ch,06h,66h,3Ch,0
  401.                 db      0,3Ch,60h,7Ch,66h,66h,3Ch,0
  402.                 db      0,7Eh,06h,0Ch,18h,30h,30h,0
  403.                 db      0,3Ch,66h,3Ch,66h,66h,3Ch,0
  404.                 db      0,3Ch,66h,3Eh,06h,0Ch,38h,0
  405.  
  406. ETunes_page_memory:
  407.                 db      0              
  408. ETunes_count_music:
  409.                 db      0
  410. ETunes_number_music:
  411.                 db      0
  412. ETunes_key_press:
  413.                 db      0
  414. ETunes_time_int:
  415.                 db      0
  416. ETunes_time_count:
  417.                 db      0              
  418. ETunes_time_minute:
  419.                 db      0
  420.  
  421. Interrupt_handle:
  422.                 push    hl     
  423.                 push    bc     
  424.                 push    de
  425.                 push    af     
  426.  
  427.                 call    Analyzer_update
  428.                 call    Analyzer_draw_flash
  429.                 call    ETunes_time_view
  430.                 call    Str_play
  431.                 call    Analyzer_view
  432.                 call    Str_update_symbol
  433.                 call    Str_draw_symbol_up
  434.                 call    Str_draw_symbol_dw
  435.                 ld      a,(ETunes_page_memory)
  436.                 ld      bc,7ffdh
  437.                 out     (c),a
  438.                 call    EPlayer_Play
  439.                 ld      a,10h
  440.                 ld      bc,7ffdh
  441.                 out     (c),a
  442.  
  443.                 pop     af
  444.                 pop     de
  445.                 pop     bc
  446.                 pop     hl
  447.                 ei
  448.                 ret
  449.  
  450.  
  451.                 .include  analyzer.asm
  452.                 .include  etplayer.asm
  453.                 .include  string.asm
  454. Etunes_end:
  455.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  456.  
  457.                 .end
  458.  
  459.