Subversion Repositories tsfmpro

Rev

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