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