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