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