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