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