Subversion Repositories tsfmpro

Rev

Rev 547 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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