Subversion Repositories tsfmpro

Rev

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