Subversion Repositories tsfmpro

Rev

Rev 546 | 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.                 call    Str_draw_symbol
  33.                 ld      b,0
  34. ETunes_wait:
  35.                 djnz    ETunes_wait                    
  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,3C05h
  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,4005h
  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,3C05h
  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,3C05h
  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,3A05h
  89.                 call    3d13h
  90.  
  91.                 ld      a,12h
  92.                 ld      bc,7ffdh
  93.                 out     (c),a
  94.                 ld      hl,0EC00h                       ;грузим музыкальный пак 7.
  95.                 ld      de,(5CF4h)
  96.                 ld      bc,1405h
  97.                 call    3d13h
  98.  
  99.                 call    ETunes_memory_detect
  100.                 jr      z,ETunes_skip_titler
  101.                 ld      a,90h                          
  102.                 ld      bc,7ffdh
  103.                 out     (c),a
  104.                 ld      hl,0C000h                       ;грузим анимацию пак 1.
  105.                 ld      de,(5CF4h)
  106.                 ld      bc,3505h
  107.                 call    3d13h
  108.  
  109. ETunes_skip_titler:
  110.                 ld      a,10h
  111.                 ld      bc,7ffdh
  112.                 out     (c),a
  113.  
  114.                 ld      sp,5fffh
  115.                 call    Star_init
  116.                 call    Str_init                        ;инициализация бегущей строки
  117.                 call    Analyzer_init
  118.                 ld      a,(ETunes_memory_ok)
  119.                 and     a
  120.                 call    nz,Title_init                  
  121.                 ld      a,1
  122.                 ld      (ETunes_number_music),a
  123.                 call    ETunes_view_number
  124.                 call    ETunes_time_init
  125.                 ld      hl,0C000h
  126.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  127.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  128.                 ld      a,0f6h
  129.                 out     (c),a
  130.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  131.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  132.                 ld      de,0fe01h
  133.                 ld      bc,0100h
  134.                 ld      (hl),0fdh
  135.                 ldir
  136.                 ld      a,0c3h                          ;установим вектор прерывания
  137.                 ld      (0fdfdh),a
  138.                 ld      hl,Interrupt_handle
  139.                 ld      (0fdfeh),hl
  140.                 di
  141.                 ld      a,0feh                          ;окончание установки прерывания
  142.                 ld      i,a
  143.                 im      2
  144.                 ei
  145. ETunes_key:            
  146.                 xor     a
  147.                 ld      (ETunes_key_press),a
  148. ETunes_loop:           
  149.                 halt
  150.                 call    Star_play_one
  151.                 call    Star_play_one
  152.                 call    Star_play
  153.  
  154.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  155.                 in      a,(0feh)
  156.                 rra    
  157.                 jr      c,ETunes_key
  158.  
  159.                 ld      a,0FEh
  160.                 in      a,(0FEh)
  161.                 rra        
  162.                 jr      nc,ETunes_exit
  163.  
  164.                 ld      a,(ETunes_key_press)
  165.                 and     a
  166.                 jr      nz,ETunes_loop
  167.  
  168.                 di     
  169.                 inc     a
  170.                 ld      (ETunes_key_press),a
  171.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  172.                 ld      bc,7ffdh
  173.                 out     (c),a
  174.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  175.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  176.                 ld      a,0feh
  177.                 out     (c),a
  178.                 ld      a,(ETunes_count_music)
  179.                 inc     a
  180.                 cp      30
  181.                 jr      c,ETunes_next_music
  182.                 xor     a
  183.  
  184. ETunes_next_music:
  185.                 ld      (ETunes_count_music),a
  186.                 ld      l,a
  187.                 ld      e,a
  188.                 ld      h,0
  189.                 ld      d,h
  190.                 add     hl,hl
  191.                 add     hl,de
  192.                 ld      de,ETunes_tabl_music
  193.                 add     hl,de
  194.                 ld      a,(hl)                          ;номер страницы памяти
  195.                 ld      (ETunes_page_memory),a
  196.                 inc     hl
  197.                 ld      a,(hl)                          
  198.                 inc     hl
  199.                 ld      h,(hl)
  200.                 ld      l,a
  201.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  202.                 ld      bc,7ffdh
  203.                 out     (c),a
  204.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  205.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  206.                 ld      a,0f6h
  207.                 out     (c),a
  208.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  209.                 ld      a,10h
  210.                 ld      bc,7ffdh
  211.                 out     (c),a
  212.  
  213.                 ld      a,(ETunes_number_music)
  214.                 inc     a
  215.                 ld      c,a
  216.                 and     0Fh
  217.                 cp      10
  218.                 jr      c,ETunes_number_correct
  219.                 ld      a,6
  220.                 add     c
  221.                 ld      c,a
  222.  
  223. ETunes_number_correct:
  224.                 ld      a,c
  225.                 ld      (ETunes_number_music),a
  226.                 cp      31h
  227.                 jr      c,ETunes_number_valid
  228.                 ld      a,1
  229.  
  230. ETunes_number_valid:
  231.                 ld      (ETunes_number_music),a
  232.                 call    ETunes_view_number
  233.                 call    ETunes_time_init
  234.  
  235.                 ei
  236.                 jp      ETunes_loop
  237.  
  238. ETunes_exit:           
  239.                 di     
  240.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  241.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  242.                 ld      a,0feh
  243.                 out     (c),a
  244.                 ld      hl,0   
  245.                 push    hl
  246.                 jp      3d2fh                           ;выход в TR-DOS
  247.  
  248. ETunes_time_init:
  249.                 xor     a
  250.                 ld      (ETunes_time_int),a
  251.                 ld      (ETunes_time_count),a          
  252.                 ld      (ETunes_time_minute),a
  253.                 jr      ETunes_time_draw
  254.  
  255. ETunes_time_view:
  256.                 ld      a,(ETunes_time_int)
  257.                 inc     a
  258.                 ld      (ETunes_time_int),a
  259.                 cp      50
  260.                 ret     c
  261.                 xor     a
  262.                 ld      (ETunes_time_int),a
  263.                 ld      a,(ETunes_time_count)
  264.                 inc     a
  265.                 ld      c,a
  266.                 and     0Fh
  267.                 cp      10
  268.                 jr      c,ETunes_time_next
  269.                 ld      a,6
  270.                 add     c
  271.                 ld      c,a
  272. ETunes_time_next:
  273.                 ld      a,c
  274.                 ld      (ETunes_time_count),a          
  275.                 cp      60h
  276.                 jr      c,ETunes_time_draw
  277.                 xor     a
  278.                 ld      (ETunes_time_count),a          
  279.                 ld      a,(ETunes_time_minute)
  280.                 inc     a
  281.                 ld      (ETunes_time_minute),a
  282.                 cp      10
  283.                 jr      c,ETunes_time_draw
  284.                 xor     a
  285.                 ld      (ETunes_time_minute),a
  286. ETunes_time_draw:
  287.                 ld      a,(ETunes_time_minute)
  288.                 ld      hl,4014h
  289.                 and     0Fh
  290.                 call    ETunes_view_symbol
  291.                 ld      a,(ETunes_time_count)
  292.                 ld      c,a
  293.                 and     0F0h
  294.                 rrca
  295.                 rrca
  296.                 rrca
  297.                 rrca
  298.                 ld      hl,4016h
  299.                 call    ETunes_view_symbol
  300.                 ld      a,c
  301.                 and     0Fh
  302.                 ld      hl,4017h
  303.                 jr      ETunes_view_symbol
  304.  
  305.  
  306. ETunes_view_number:
  307.                 ld      c,a
  308.                 and     0F0h
  309.                 rrca
  310.                 rrca
  311.                 rrca
  312.                 rrca
  313.                 ld      hl,400Eh
  314.                 call    ETunes_view_symbol
  315.                 ld      a,c
  316.                 and     0Fh
  317.                 ld      hl,400Fh
  318.  
  319. ETunes_view_symbol:
  320.                 push    hl
  321.                 ld      h,0
  322.                 ld      l,a
  323.                 add     hl,hl
  324.                 add     hl,hl
  325.                 add     hl,hl
  326.                 ld      de,ETunes_table_symbol
  327.                 add     hl,de  
  328.                 ex      de,hl
  329.                 pop     hl
  330.                 ld      b,8
  331.  
  332. ETunes_view_loop:
  333.                 ld      a,(de)
  334.                 ld      (hl),a
  335.                 inc     de             
  336.                 inc     h
  337.                 ld      a,h
  338.                 and     7
  339.                 jr      nz,ETunes_next_line
  340.                 ld      a,l
  341.                 add     a,20h
  342.                 ld      l,a
  343.                 jr      c,ETunes_next_line
  344.                 ld      a,h
  345.                 sub     8
  346.                 ld      h,a
  347. ETunes_next_line:
  348.                 djnz    ETunes_view_loop
  349.                 ret    
  350.  
  351. ETunes_memory_detect:
  352.                 ld      bc,7ffdh
  353.                 ld      a,10h
  354.                 out     (c),a
  355.                 ld      hl,0C000h
  356.                 ld      e,(hl) 
  357.                 ld      a,90h
  358.                 out     (c),a
  359.                 ld      a,(hl)
  360.                 cp      e
  361.                 ld      a,1
  362.                 jr      nz,ETunes_memory_flg
  363.                 xor     a
  364. ETunes_memory_flg:
  365.                 ld      (ETunes_memory_ok),a
  366.                 and     a
  367.                 ret
  368.        
  369. ETunes_tabl_music:
  370.                 db      10h                             ; 1 музыкальное произведение
  371.                 dw      0C000h
  372.                 db      10h                             ; 2 музыкальное произведение
  373.                 dw      0C490h
  374.                 db      10h                             ; 3 музыкальное произведение
  375.                 dw      0CE70h
  376.                 db      10h                             ; 4 музыкальное произведение
  377.                 dw      0D470h
  378.                 db      10h                             ; 5 музыкальное произведение
  379.                 dw      0DCD0h
  380.                 db      10h                             ; 6 музыкальное произведение
  381.                 dw      0EC50h
  382.                 db      10h                             ; 7 музыкальное произведение
  383.                 dw      0F200h
  384.  
  385.                 db      11h                             ; 8 музыкальное произведение
  386.                 dw      0C000h
  387.                 db      11h                             ; 9 музыкальное произведение
  388.                 dw      0CBF0h
  389.                 db      11h                             ; 10 музыкальное произведение
  390.                 dw      0E960h
  391.  
  392.                 db      13h                             ; 11 музыкальное произведение
  393.                 dw      0C000h
  394.                 db      13h                             ; 12 музыкальное произведение
  395.                 dw      0D950h
  396.                 db      13h                             ; 13 музыкальное произведение
  397.                 dw      0E4D0h
  398.                 db      13h                             ; 14 музыкальное произведение
  399.                 dw      0EB30h
  400.                 db      13h                             ; 15 музыкальное произведение
  401.                 dw      0F550h
  402.  
  403.                 db      14h                             ; 16 музыкальное произведение
  404.                 dw      0C000h
  405.                 db      14h                             ; 17 музыкальное произведение
  406.                 dw      0C980h
  407.                 db      14h                             ; 18 музыкальное произведение
  408.                 dw      0D780h
  409.                 db      14h                             ; 19 музыкальное произведение
  410.                 dw      0E870h
  411.  
  412.                 db      16h                             ; 20 музыкальное произведение
  413.                 dw      0C000h
  414.                 db      16h                             ; 21 музыкальное произведение
  415.                 dw      0D8F0h
  416.                 db      16h                             ; 22 музыкальное произведение
  417.                 dw      0EAF0h
  418.                 db      16h                             ; 23 музыкальное произведение
  419.                 dw      0F330h
  420.                 db      16h                             ; 24 музыкальное произведение
  421.                 dw      0F740h
  422.  
  423.  
  424.                 db      17h                             ; 25 музыкальное произведение
  425.                 dw      0C000h
  426.                 db      17h                             ; 26 музыкальное произведение
  427.                 dw      0D860h
  428.                 db      17h                             ; 27 музыкальное произведение
  429.                 dw      0DE70h
  430.                 db      17h                             ; 28 музыкальное произведение
  431.                 dw      0E6A0h
  432.                 db      17h                             ; 29 музыкальное произведение
  433.                 dw      0F090h
  434.  
  435.                 db      12h                             ; 30 музыкальное произведение
  436.                 dw      0EC00h
  437.  
  438. ETunes_table_symbol:
  439.                 db      0,3Ch,66h,6Eh,76h,66h,3Ch,0
  440.                 db      0,18h,38h,18h,18h,18h,7Eh,0
  441.                 db      0,3Ch,66h,0Ch,18h,30h,7Eh,0
  442.                 db      0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
  443.                 db      0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
  444.                 db      0,7Eh,60h,7Ch,06h,66h,3Ch,0
  445.                 db      0,3Ch,60h,7Ch,66h,66h,3Ch,0
  446.                 db      0,7Eh,06h,0Ch,18h,30h,30h,0
  447.                 db      0,3Ch,66h,3Ch,66h,66h,3Ch,0
  448.                 db      0,3Ch,66h,3Eh,06h,0Ch,38h,0
  449.  
  450. ETunes_page_memory:
  451.                 db      0              
  452. ETunes_count_music:
  453.                 db      0
  454. ETunes_number_music:
  455.                 db      0
  456. ETunes_key_press:
  457.                 db      0
  458. ETunes_time_int:
  459.                 db      0
  460. ETunes_time_count:
  461.                 db      0              
  462. ETunes_time_minute:
  463.                 db      0
  464. ETunes_memory_ok:
  465.                 db      0
  466.  
  467. Interrupt_handle:
  468.                 push    ix
  469.                 push    hl     
  470.                 push    bc     
  471.                 push    de
  472.                 push    af     
  473.  
  474.                 call    Analyzer_update
  475.                 call    Analyzer_draw_flash
  476.                 call    ETunes_time_view
  477.                 ld      a,(ETunes_memory_ok)
  478.                 and     a
  479.                 call    nz,Title_view
  480.                 call    Str_play
  481.  
  482.                 call    Analyzer_view
  483.  
  484.                 call    Str_update_symbol
  485.                 call    Str_draw_symbol
  486.  
  487.                 ld      a,(ETunes_page_memory)
  488.                 ld      bc,7ffdh
  489.                 out     (c),a
  490.                 call    EPlayer_Play
  491.                 ld      a,10h
  492.                 ld      bc,7ffdh
  493.                 out     (c),a
  494.  
  495.                 pop     af
  496.                 pop     de
  497.                 pop     bc
  498.                 pop     hl
  499.                 pop     ix
  500.                 ei
  501.                 ret
  502.  
  503.  
  504.                 .include  analyzer.asm
  505.                 .include  star.asm
  506.                 .include  etplayer.asm
  507.                 .include  string.asm
  508.                 .include  title.asm
  509. Etunes_end:
  510.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  511.  
  512.  
  513.                 .include  title_1.asm
  514.                 .include  title_2.asm
  515.                 .include  title_3.asm
  516.                 .include  title_4.asm
  517.                 .include  title_5.asm
  518.                 .include  title_6.asm
  519.                 .include  title_7.asm
  520.                 .savebin "title.bin",Title_table_E10, Title_end - Title_table_E10
  521.  
  522.                 .end
  523.  
  524.