Subversion Repositories tsfmpro

Rev

Rev 544 | 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_play
  36.                 jr      nc,ETunes_loading      
  37.  
  38.                 di                                      ;на всякий пожарный запретим прерывания
  39.                 ld      a,10h                           ;установим начальную страницу памяти
  40.                 ld      (ETunes_page_memory),a
  41.                 ld      bc,7ffdh
  42.                 out     (c),a
  43.                 ld      hl,0C000h                       ;грузим музыкальный пак 1.
  44.                 ld      de,(5CF4h)
  45.                 ld      bc,3505h
  46.                 call    3d13h
  47.  
  48.                 ld      a,11h
  49.                 ld      bc,7ffdh
  50.                 out     (c),a
  51.                 ld      hl,0C000h                       ;грузим музыкальный пак 2.
  52.                 ld      de,(5CF4h)
  53.                 ld      bc,3005h
  54.                 call    3d13h
  55.  
  56.                 ld      a,13h
  57.                 ld      bc,7ffdh
  58.                 out     (c),a
  59.                 ld      hl,0C000h                       ;грузим музыкальный пак 3.
  60.                 ld      de,(5CF4h)
  61.                 ld      bc,3E05h
  62.                 call    3d13h
  63.  
  64.                 ld      a,14h
  65.                 ld      bc,7ffdh
  66.                 out     (c),a
  67.                 ld      hl,0C000h                       ;грузим музыкальный пак 4.
  68.                 ld      de,(5CF4h)
  69.                 ld      bc,3B05h
  70.                 call    3d13h
  71.  
  72.                 ld      a,16h
  73.                 ld      bc,7ffdh
  74.                 out     (c),a
  75.                 ld      hl,0C000h                       ;грузим музыкальный пак 5.
  76.                 ld      de,(5CF4h)
  77.                 ld      bc,3705h
  78.                 call    3d13h
  79.  
  80.                 ld      a,17h
  81.                 ld      bc,7ffdh
  82.                 out     (c),a
  83.                 ld      hl,0C000h                       ;грузим музыкальный пак 6.
  84.                 ld      de,(5CF4h)
  85.                 ld      bc,2D05h
  86.                 call    3d13h
  87.  
  88.                 ld      a,10h
  89.                 ld      bc,7ffdh
  90.                 out     (c),a
  91.  
  92.                 ld      sp,5fffh
  93.                 call    Str_init                        ;инициализация бегущей строки
  94.                 call    Analyzer_init                  
  95.                 ld      a,1
  96.                 ld      (ETunes_number_music),a
  97.                 call    ETunes_view_number
  98.                 ld      hl,0C000h
  99.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  100.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  101.                 ld      a,0f6h
  102.                 out     (c),a
  103.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  104.                 call    Attribute_init
  105.  
  106.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  107.                 ld      de,0fe01h
  108.                 ld      bc,0100h
  109.                 ld      (hl),0fdh
  110.                 ldir
  111.                 ld      a,0c3h                          ;установим вектор прерывания
  112.                 ld      (0fdfdh),a
  113.                 ld      hl,Interrupt_handle
  114.                 ld      (0fdfeh),hl
  115.                 di
  116.                 ld      a,0feh                          ;окончание установки прерывания
  117.                 ld      i,a
  118.                 im      2
  119.                 ei
  120. ETunes_key:            
  121.                 xor     a
  122.                 ld      (ETunes_key_press),a
  123. ETunes_loop:           
  124.                 halt
  125.                
  126.                 call    Analyzer_update
  127.                 call    Analyzer_view
  128.                 call    Str_play
  129.                 call    Attribute_update
  130.  
  131.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  132.                 in      a,(0feh)
  133.                 rra    
  134.                 jr      c,ETunes_key
  135.  
  136.                 ld      a,0FEh
  137.                 in      a,(0FEh)
  138.                 rra        
  139.                 jr      nc,ETunes_exit
  140.  
  141.                 ld      a,(ETunes_key_press)
  142.                 and     a
  143.                 jr      nz,ETunes_loop
  144.  
  145.                 di     
  146.                 inc     a
  147.                 ld      (ETunes_key_press),a
  148.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  149.                 ld      bc,7ffdh
  150.                 out     (c),a
  151.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  152.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  153.                 ld      a,0feh
  154.                 out     (c),a
  155.                 ld      a,(ETunes_count_music)
  156.                 inc     a
  157.                 cp      40
  158.                 jr      c,ETunes_next_music
  159.                 xor     a
  160.  
  161. ETunes_next_music:
  162.                 ld      (ETunes_count_music),a
  163.                 ld      l,a
  164.                 ld      e,a
  165.                 ld      h,0
  166.                 ld      d,h
  167.                 add     hl,hl
  168.                 add     hl,de
  169.                 ld      de,ETunes_tabl_music
  170.                 add     hl,de
  171.                 ld      a,(hl)                          ;номер страницы памяти
  172.                 ld      (ETunes_page_memory),a
  173.                 inc     hl
  174.                 ld      a,(hl)                          
  175.                 inc     hl
  176.                 ld      h,(hl)
  177.                 ld      l,a
  178.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  179.                 ld      bc,7ffdh
  180.                 out     (c),a
  181.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  182.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  183.                 ld      a,0f6h
  184.                 out     (c),a
  185.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  186.                 ld      a,10h
  187.                 ld      bc,7ffdh
  188.                 out     (c),a
  189.  
  190.                 ld      a,(ETunes_number_music)
  191.                 inc     a
  192.                 ld      c,a
  193.                 and     0Fh
  194.                 cp      10
  195.                 jr      c,ETunes_number_correct
  196.                 ld      a,6
  197.                 add     c
  198.                 ld      c,a
  199.  
  200. ETunes_number_correct:
  201.                 ld      a,c
  202.                 ld      (ETunes_number_music),a
  203.                 cp      41h
  204.                 jr      c,ETunes_number_valid
  205.                 ld      a,1
  206.  
  207. ETunes_number_valid:
  208.                 ld      (ETunes_number_music),a
  209.                 call    ETunes_view_number
  210.        
  211.                 ei
  212.                 jp      ETunes_loop
  213.  
  214. ETunes_exit:           
  215.                 di     
  216.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  217.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  218.                 ld      a,0feh
  219.                 out     (c),a
  220.                 ld      hl,0   
  221.                 push    hl
  222.                 jp      3d2fh                           ;выход в TR-DOS
  223.  
  224. ETunes_view_number:
  225.                 ld      c,a
  226.                 and     0F0h
  227.                 rrca
  228.                 rrca
  229.                 rrca
  230.                 rrca
  231.                 ld      hl,4068h
  232.                 call    ETunes_view_symbol
  233.                 ld      a,c
  234.                 and     0Fh
  235.                 ld      hl,4069h
  236.  
  237. ETunes_view_symbol:
  238.                 push    hl
  239.                 ld      h,0
  240.                 ld      l,a
  241.                 add     hl,hl
  242.                 add     hl,hl
  243.                 add     hl,hl
  244.                 ld      de,ETunes_table_symbol
  245.                 add     hl,de  
  246.                 ex      de,hl
  247.                 pop     hl
  248.                 ld      b,8
  249.  
  250. ETunes_view_loop:
  251.                 ld      a,(de)
  252.                 ld      (hl),a
  253.                 inc     de             
  254.                 inc     h
  255.                 djnz    ETunes_view_loop
  256.                 ret    
  257.  
  258. ETunes_tabl_music:
  259.                 db      10h                             ; 1 музыкальное произведение
  260.                 dw      0C000h
  261.                 db      10h                             ; 2 музыкальное произведение
  262.                 dw      0C3D0h
  263.                 db      10h                             ; 3 музыкальное произведение
  264.                 dw      0C9D0h
  265.                 db      10h                             ; 4 музыкальное произведение
  266.                 dw      0CC00h
  267.                 db      10h                             ; 5 музыкальное произведение
  268.                 dw      0CDB0h
  269.                 db      10h                             ; 6 музыкальное произведение
  270.                 dw      0CF70h
  271.                 db      10h                             ; 7 музыкальное произведение
  272.                 dw      0DFC0h
  273.                 db      10h                             ; 8 музыкальное произведение
  274.                 dw      0EAB0h
  275.                 db      10h                             ; 9 музыкальное произведение
  276.                 dw      0EE20h
  277.  
  278.                 db      11h                             ; 10 музыкальное произведение
  279.                 dw      0C000h
  280.                 db      11h                             ; 11 музыкальное произведение
  281.                 dw      0CA60h
  282.                 db      11h                             ; 12 музыкальное произведение
  283.                 dw      0D220h
  284.                 db      11h                             ; 13 музыкальное произведение
  285.                 dw      0D870h
  286.                 db      11h                             ; 14 музыкальное произведение
  287.                 dw      0E540h
  288.  
  289.                 db      13h                             ; 15 музыкальное произведение
  290.                 dw      0C000h
  291.                 db      13h                             ; 16 музыкальное произведение
  292.                 dw      0CF00h
  293.                 db      13h                             ; 17 музыкальное произведение
  294.                 dw      0DA30h
  295.                 db      13h                             ; 18 музыкальное произведение
  296.                 dw      0E6D0h
  297.                 db      13h                             ; 19 музыкальное произведение
  298.                 dw      0EEB0h
  299.  
  300.                 db      14h                             ; 20 музыкальное произведение
  301.                 dw      0C000h
  302.                 db      14h                             ; 21 музыкальное произведение
  303.                 dw      0C860h
  304.                 db      14h                             ; 22 музыкальное произведение
  305.                 dw      0CF10h
  306.                 db      14h                             ; 23 музыкальное произведение
  307.                 dw      0D5C0h
  308.                 db      14h                             ; 24 музыкальное произведение
  309.                 dw      0DF40h
  310.                 db      14h                             ; 25 музыкальное произведение
  311.                 dw      0E9D0h
  312.                 db      14h                             ; 26 музыкальное произведение
  313.                 dw      0EF50h
  314.                 db      14h                             ; 27 музыкальное произведение
  315.                 dw      0F3F0h
  316.  
  317.                 db      16h                             ; 28 музыкальное произведение
  318.                 dw      0C000h
  319.                 db      16h                             ; 29 музыкальное произведение
  320.                 dw      0C5B0h
  321.                 db      16h                             ; 30 музыкальное произведение
  322.                 dw      0CD10h
  323.                 db      16h                             ; 31 музыкальное произведение
  324.                 dw      0D360h
  325.                 db      16h                             ; 32 музыкальное произведение
  326.                 dw      0D620h
  327.                 db      16h                             ; 33 музыкальное произведение
  328.                 dw      0E0C0h
  329.                 db      16h                             ; 34 музыкальное произведение
  330.                 dw      0EEF0h
  331.  
  332.                 db      17h                             ; 35 музыкальное произведение
  333.                 dw      0C000h
  334.                 db      17h                             ; 36 музыкальное произведение
  335.                 dw      0C700h
  336.                 db      17h                             ; 37 музыкальное произведение
  337.                 dw      0D5A0h
  338.                 db      17h                             ; 38 музыкальное произведение
  339.                 dw      0DBC0h
  340.                 db      17h                             ; 39 музыкальное произведение
  341.                 dw      0E270h
  342.                 db      17h                             ; 40 музыкальное произведение
  343.                 dw      0E720h
  344.  
  345. ETunes_table_symbol:
  346.                 db      0,3Ch,66h,6Eh,76h,66h,3Ch,0
  347.                 db      0,18h,38h,18h,18h,18h,7Eh,0
  348.                 db      0,3Ch,66h,0Ch,18h,30h,7Eh,0
  349.                 db      0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
  350.                 db      0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
  351.                 db      0,7Eh,60h,7Ch,06h,66h,3Ch,0
  352.                 db      0,3Ch,60h,7Ch,66h,66h,3Ch,0
  353.                 db      0,7Eh,06h,0Ch,18h,30h,30h,0
  354.                 db      0,3Ch,66h,3Ch,66h,66h,3Ch,0
  355.                 db      0,3Ch,66h,3Eh,06h,0Ch,38h,0
  356.  
  357. ETunes_page_memory:
  358.                 db      0              
  359. ETunes_count_music:
  360.                 db      0
  361. ETunes_number_music:
  362.                 db      0
  363. ETunes_key_press:
  364.                 db      0
  365. ETunes_phase:
  366.                 db      0
  367.  
  368. Interrupt_handle:
  369.                 push    hl     
  370.                 push    bc     
  371.                 push    de
  372.                 push    af     
  373.                 ld      a,(ETunes_page_memory)
  374.                 ld      bc,7ffdh
  375.                 out     (c),a
  376.                 call    EPlayer_Play
  377.                 ld      a,10h
  378.                 ld      bc,7ffdh
  379.                 out     (c),a
  380.                 pop     af
  381.                 pop     de
  382.                 pop     bc
  383.                 pop     hl
  384.                 ei
  385.                 ret
  386.  
  387.                 .include  analyzer.asm
  388.                 .include  etplayer.asm
  389.                 .include  attribute.asm
  390.                 .include  string.asm
  391. Etunes_end:
  392.  
  393.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  394.                 .end
  395.  
  396.