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