Subversion Repositories tsfmpro

Rev

Rev 544 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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,8000h                        ;грузим экран
  25.                 ld      de,(5CF4h)
  26.                 ld      bc,1B05h
  27.                 call    3d13h
  28.                 ld      hl,98E1h
  29.                 ld      c,11
  30. ETunes_clear_y:
  31.                 push    hl
  32.                 ld      b,24
  33. ETunes_clear_x:
  34.                 ld      (hl),0
  35.                 inc     hl
  36.                 djnz    ETunes_clear_x
  37.                 pop     hl
  38.                 ld      de,0020h
  39.                 add     hl,de
  40.                 dec     c
  41.                 jr      nz,ETunes_clear_y
  42.                 ld      hl,8000h
  43.                 ld      de,4000h
  44.                 ld      bc,1b00h
  45.                 ldir   
  46.  
  47.                 call    Str_init_load
  48.                 ei
  49. ETunes_loading:
  50.                 halt
  51.                 ld      b,0
  52. Etunes_wait:
  53.                 djnz    Etunes_wait                    
  54.                 call    Str_play
  55.                 jr      nc,ETunes_loading      
  56.  
  57.                 di                                      ;на всякий пожарный запретим прерывания
  58.                 ld      a,10h                           ;установим начальную страницу памяти
  59.                 ld      (ETunes_page_memory),a
  60.                 ld      bc,7ffdh
  61.                 out     (c),a
  62.                 ld      hl,0C000h                       ;грузим музыкальный пак 1.
  63.                 ld      de,(5CF4h)
  64.                 ld      bc,3E05h
  65.                 call    3d13h
  66.  
  67.                 ld      hl,59A1h
  68.                 ld      (hl),01h
  69.                 inc     hl
  70.                 ld      (hl),41h
  71.                 inc     hl
  72.                 ld      (hl),02h
  73.                
  74.                 ld      a,11h
  75.                 ld      bc,7ffdh
  76.                 out     (c),a
  77.                 ld      hl,0C000h                       ;грузим музыкальный пак 2.
  78.                 ld      de,(5CF4h)
  79.                 ld      bc,3E05h
  80.                 call    3d13h
  81.  
  82.                 ld      hl,59A4h
  83.                 ld      (hl),42h
  84.                 inc     hl
  85.                 ld      (hl),03h
  86.                 inc     hl
  87.                 ld      (hl),43h
  88.  
  89.                 ld      a,13h
  90.                 ld      bc,7ffdh
  91.                 out     (c),a
  92.                 ld      hl,0C000h                       ;грузим музыкальный пак 3.
  93.                 ld      de,(5CF4h)
  94.                 ld      bc,3905h
  95.                 call    3d13h
  96.  
  97.                 ld      hl,59A7h
  98.                 ld      (hl),04h
  99.                 inc     hl
  100.                 ld      (hl),44h
  101.                 inc     hl
  102.                 ld      (hl),05h
  103.  
  104.                 ld      a,14h
  105.                 ld      bc,7ffdh
  106.                 out     (c),a
  107.                 ld      hl,0C000h                       ;грузим музыкальный пак 4.
  108.                 ld      de,(5CF4h)
  109.                 ld      bc,3F05h
  110.                 call    3d13h
  111.  
  112.                 ld      hl,59A9h
  113.                 ld      (hl),45h
  114.                 inc     hl
  115.                 ld      (hl),06h
  116.                 inc     hl
  117.                 ld      (hl),46h
  118.  
  119.                 ld      a,16h
  120.                 ld      bc,7ffdh
  121.                 out     (c),a
  122.                 ld      hl,0C000h                       ;грузим музыкальный пак 5.
  123.                 ld      de,(5CF4h)
  124.                 ld      bc,1F05h
  125.                 call    3d13h
  126.  
  127.                 ld      a,10h
  128.                 ld      bc,7ffdh
  129.                 out     (c),a
  130.  
  131.                 ld      sp,5fffh
  132.                 call    Str_init                        ;инициализация бегущей строки
  133.                 call    Analyzer_init                  
  134.                 ld      hl,0C000h
  135.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  136.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  137.                 ld      a,0f6h
  138.                 out     (c),a
  139.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  140.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  141.                 ld      de,0fe01h
  142.                 ld      bc,0100h
  143.                 ld      (hl),0fdh
  144.                 ldir
  145.                 ld      a,0c3h                          ;установим вектор прерывания
  146.                 ld      (0fdfdh),a
  147.                 ld      hl,Interrupt_handle
  148.                 ld      (0fdfeh),hl
  149.                 di
  150.                 ld      a,0feh                          ;окончание установки прерывания
  151.                 ld      i,a
  152.                 im      2
  153.                 ei
  154. ETunes_key:            
  155.                 xor     a
  156.                 ld      (ETunes_key_press),a
  157. ETunes_loop:           
  158.                 halt
  159.                
  160.                 call    Analyzer_update
  161.                 call    Analyzer_view
  162.                 call    Str_play
  163.  
  164.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  165.                 in      a,(0feh)
  166.                 rra    
  167.                 jr      c,ETunes_key
  168.  
  169.                 ld      a,0FEh
  170.                 in      a,(0FEh)
  171.                 rra        
  172.                 jr      nc,ETunes_exit
  173.  
  174.                 ld      a,(ETunes_key_press)
  175.                 and     a
  176.                 jr      nz,ETunes_loop
  177.  
  178.                 di     
  179.                 inc     a
  180.                 ld      (ETunes_key_press),a
  181.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  182.                 ld      bc,7ffdh
  183.                 out     (c),a
  184.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  185.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  186.                 ld      a,0feh
  187.                 out     (c),a
  188.                 ld      a,(ETunes_count_music)
  189.                 inc     a
  190.                 cp      40
  191.                 jr      c,ETunes_next_music
  192.                 xor     a
  193.  
  194. ETunes_next_music:
  195.                 ld      (ETunes_count_music),a
  196.                 ld      l,a
  197.                 ld      e,a
  198.                 ld      h,0
  199.                 ld      d,h
  200.                 add     hl,hl
  201.                 add     hl,de
  202.                 ld      de,ETunes_tabl_music
  203.                 add     hl,de
  204.                 ld      a,(hl)                          ;номер страницы памяти
  205.                 ld      (ETunes_page_memory),a
  206.                 inc     hl
  207.                 ld      a,(hl)                          
  208.                 inc     hl
  209.                 ld      h,(hl)
  210.                 ld      l,a
  211.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  212.                 ld      bc,7ffdh
  213.                 out     (c),a
  214.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  215.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  216.                 ld      a,0f6h
  217.                 out     (c),a
  218.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  219.                 ld      a,10h
  220.                 ld      bc,7ffdh
  221.                 out     (c),a
  222.                 ei
  223.                 jp      ETunes_loop
  224.  
  225. ETunes_exit:           
  226.                 di     
  227.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  228.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  229.                 ld      a,0feh
  230.                 out     (c),a
  231.                 ld      hl,0   
  232.                 push    hl
  233.                 jp      3d2fh                           ;выход в TR-DOS
  234.  
  235. ETunes_tabl_music:
  236.                 db      10h                             ; 1 музыкальное произведение
  237.                 dw      0C000h
  238.                 db      10h                             ; 2 музыкальное произведение
  239.                 dw      0C220h
  240.                 db      10h                             ; 3 музыкальное произведение
  241.                 dw      0C600h
  242.                 db      10h                             ; 4 музыкальное произведение
  243.                 dw      0CBB0h
  244.                 db      10h                             ; 5 музыкальное произведение
  245.                 dw      0D260h
  246.                 db      10h                             ; 6 музыкальное произведение
  247.                 dw      0D7D0h
  248.                 db      10h                             ; 7 музыкальное произведение
  249.                 dw      0DCE0h
  250.                 db      10h                             ; 8 музыкальное произведение
  251.                 dw      0E1C0h
  252.                 db      10h                             ; 9 музыкальное произведение
  253.                 dw      0E4F0h
  254.                 db      10h                             ; 10 музыкальное произведение
  255.                 dw      0E870h
  256.                 db      10h                             ; 11 музыкальное произведение
  257.                 dw      0EE70h
  258.                 db      10h                             ; 12 музыкальное произведение
  259.                 dw      0F430h
  260.  
  261.                 db      11h                             ; 13 музыкальное произведение
  262.                 dw      0C000h
  263.                 db      11h                             ; 14 музыкальное произведение
  264.                 dw      0CC50h
  265.                 db      11h                             ; 15 музыкальное произведение
  266.                 dw      0D440h
  267.                 db      11h                             ; 16 музыкальное произведение
  268.                 dw      0EFC0h
  269.                 db      11h                             ; 17 музыкальное произведение
  270.                 dw      0F4A0h
  271.  
  272.                 db      13h                             ; 18 музыкальное произведение
  273.                 dw      0C000h
  274.                 db      13h                             ; 19 музыкальное произведение
  275.                 dw      0C220h
  276.                 db      13h                             ; 20 музыкальное произведение
  277.                 dw      0C720h
  278.                 db      13h                             ; 21 музыкальное произведение
  279.                 dw      0D7A0h
  280.                 db      13h                             ; 22 музыкальное произведение
  281.                 dw      0DEC0h
  282.                 db      13h                             ; 23 музыкальное произведение
  283.                 dw      0E120h
  284.                 db      13h                             ; 24 музыкальное произведение
  285.                 dw      0E660h
  286.                 db      13h                             ; 25 музыкальное произведение
  287.                 dw      0ECF0h
  288.                 db      13h                             ; 26 музыкальное произведение
  289.                 dw      0F060h
  290.  
  291.                 db      14h                             ; 27 музыкальное произведение
  292.                 dw      0C000h
  293.                 db      14h                             ; 28 музыкальное произведение
  294.                 dw      0C8E0h
  295.                 db      14h                             ; 29 музыкальное произведение
  296.                 dw      0CC90h
  297.                 db      14h                             ; 30 музыкальное произведение
  298.                 dw      0D2C0h
  299.                 db      14h                             ; 31 музыкальное произведение
  300.                 dw      0D9F0h
  301.                 db      14h                             ; 32 музыкальное произведение
  302.                 dw      0DE20h
  303.                 db      14h                             ; 33 музыкальное произведение
  304.                 dw      0E450h
  305.                 db      14h                             ; 34 музыкальное произведение
  306.                 dw      0EAF0h
  307.                 db      14h                             ; 35 музыкальное произведение
  308.                 dw      0EE70h
  309.                 db      14h                             ; 36 музыкальное произведение
  310.                 dw      0F730h
  311.  
  312.                 db      16h                             ; 37 музыкальное произведение
  313.                 dw      0C000h
  314.                 db      16h                             ; 38 музыкальное произведение
  315.                 dw      0C7D0h
  316.                 db      16h                             ; 39 музыкальное произведение
  317.                 dw      0D0D0h
  318.                 db      16h                             ; 40 музыкальное произведение
  319.                 dw      0D8F0h
  320.  
  321. ETunes_page_memory:
  322.                 db      0              
  323. ETunes_count_music:
  324.                 db      0
  325. ETunes_key_press:
  326.                 db      0
  327. ETunes_phase:
  328.                 db      0
  329.  
  330. Interrupt_handle:
  331.                 push    hl     
  332.                 push    bc     
  333.                 push    de
  334.                 push    af     
  335.                 ld      a,(ETunes_page_memory)
  336.                 ld      bc,7ffdh
  337.                 out     (c),a
  338.                 call    EPlayer_Play
  339.                 ld      a,10h
  340.                 ld      bc,7ffdh
  341.                 out     (c),a
  342.                 pop     af
  343.                 pop     de
  344.                 pop     bc
  345.                 pop     hl
  346.                 ei
  347.                 ret
  348.  
  349.                 .include  analyzer.asm
  350.                 .include  etplayer.asm
  351.                 .include  string.asm
  352. Etunes_end:
  353.  
  354.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  355.                 .end
  356.  
  357.