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