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,3905h
  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,3905h
  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,3A05h
  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,0C05h
  79.                 call    3d13h
  80.  
  81.                 call    ETunes_memory_detect
  82.                 jp      z,ETunes_skip_animation
  83.                 ld      a,90h
  84.                 ld      bc,7ffdh
  85.                 out     (c),a
  86.                 ld      hl,0C000h                       ;грузим данные анализатора 0.
  87.                 ld      de,(5CF4h)
  88.                 ld      bc,3E05h
  89.                 call    3d13h
  90.  
  91.                 ld      a,91h
  92.                 ld      bc,7ffdh
  93.                 out     (c),a
  94.                 ld      hl,0C000h                       ;грузим данные анализатора 1.
  95.                 ld      de,(5CF4h)
  96.                 ld      bc,3D05h
  97.                 call    3d13h
  98.  
  99.                 ld      a,92h
  100.                 ld      bc,7ffdh
  101.                 out     (c),a
  102.                 ld      hl,0C000h                       ;грузим данные анализатора 2.
  103.                 ld      de,(5CF4h)
  104.                 ld      bc,3D05h
  105.                 call    3d13h
  106.  
  107.                 ld      a,93h
  108.                 ld      bc,7ffdh
  109.                 out     (c),a
  110.                 ld      hl,0C000h                       ;грузим данные анализатора 3
  111.                 ld      de,(5CF4h)
  112.                 ld      bc,3D05h
  113.                 call    3d13h
  114.  
  115.                 ld      a,94h
  116.                 ld      bc,7ffdh
  117.                 out     (c),a
  118.                 ld      hl,0C000h                       ;грузим данные анализатора 4.
  119.                 ld      de,(5CF4h)
  120.                 ld      bc,3E05h
  121.                 call    3d13h
  122.  
  123.                 ld      a,95h
  124.                 ld      bc,7ffdh
  125.                 out     (c),a
  126.                 ld      hl,0C000h                       ;грузим данные анализатора 5.
  127.                 ld      de,(5CF4h)
  128.                 ld      bc,3D05h
  129.                 call    3d13h
  130.  
  131.                 ld      a,96h
  132.                 ld      bc,7ffdh
  133.                 out     (c),a
  134.                 ld      hl,0C000h                       ;грузим данные анализатора 6
  135.                 ld      de,(5CF4h)
  136.                 ld      bc,3D05h
  137.                 call    3d13h
  138.  
  139.                 ld      a,97h
  140.                 ld      bc,7ffdh
  141.                 out     (c),a
  142.                 ld      hl,0C000h                       ;грузим данные анализатора 7.
  143.                 ld      de,(5CF4h)
  144.                 ld      bc,3D05h
  145.                 call    3d13h
  146.  
  147.                 ld      a,17h
  148.                 ld      bc,7ffdh
  149.                 out     (c),a
  150.                 ld      hl,0C000h                       ;грузим данные анализатора 8.
  151.                 ld      de,(5CF4h)
  152.                 ld      bc,0B05h
  153.                 call    3d13h
  154.  
  155. ETunes_skip_animation:
  156.                 ld      a,10h
  157.                 ld      (ETunes_page_memory),a
  158.                 ld      bc,7ffdh
  159.                 out     (c),a
  160.  
  161.                 ld      sp,5fffh
  162.                 call    Str_init                        ;инициализация бегущей строки
  163.                 call    Analyzer_init
  164.                 ld      a,1
  165.                 ld      (ETunes_number_music),a
  166.                 call    ETunes_view_number
  167.                 call    ETunes_time_init
  168.                 ld      hl,0C000h
  169.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  170.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  171.                 ld      a,0f6h
  172.                 out     (c),a
  173.                 call    EPlayer_Init                    ;инициализация проигрывающего модуля
  174.  
  175.                 ld      hl,0fe00h                       ;создаем таблицу прерывания для im 2
  176.                 ld      de,0fe01h
  177.                 ld      bc,0100h
  178.                 ld      (hl),0fdh
  179.                 ldir
  180.                 ld      a,0c3h                          ;установим вектор прерывания
  181.                 ld      (0fdfdh),a
  182.                 ld      hl,Interrupt_handle
  183.                 ld      (0fdfeh),hl
  184.                 di
  185.                 ld      a,0feh                          ;окончание установки прерывания
  186.                 ld      i,a
  187.                 im      2
  188.                 ei
  189. ETunes_key:            
  190.                 xor     a
  191.                 ld      (ETunes_key_press),a
  192. ETunes_loop:           
  193.                 halt
  194.                 call    Str_move_string
  195.                 call    Str_play
  196.  
  197.                 ld      a,7fh                           ;ожидаем пробел - переход к следующей композиции
  198.                 in      a,(0feh)
  199.                 rra    
  200.                 jr      c,ETunes_key
  201.  
  202.                 ld      a,0FEh
  203.                 in      a,(0FEh)
  204.                 rra        
  205.                 jr      nc,ETunes_exit
  206.  
  207.                 ld      a,(ETunes_key_press)
  208.                 and     a
  209.                 jr      nz,ETunes_loop
  210.  
  211.                 di     
  212.                 inc     a
  213.                 ld      (ETunes_key_press),a
  214.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  215.                 ld      bc,7ffdh
  216.                 out     (c),a
  217.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  218.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  219.                 ld      a,0feh
  220.                 out     (c),a
  221.                 ld      a,(ETunes_count_music)
  222.                 inc     a
  223.                 cp      30
  224.                 jr      c,ETunes_next_music
  225.                 xor     a
  226.  
  227. ETunes_next_music:
  228.                 ld      (ETunes_count_music),a
  229.                 ld      l,a
  230.                 ld      e,a
  231.                 ld      h,0
  232.                 ld      d,h
  233.                 add     hl,hl
  234.                 add     hl,de
  235.                 ld      de,ETunes_tabl_music
  236.                 add     hl,de
  237.                 ld      a,(hl)                          ;номер страницы памяти
  238.                 ld      (ETunes_page_memory),a
  239.                 inc     hl
  240.                 ld      a,(hl)                          
  241.                 inc     hl
  242.                 ld      h,(hl)
  243.                 ld      l,a
  244.                 ld      a,(ETunes_page_memory)          ;загрузим номер страницы памяти
  245.                 ld      bc,7ffdh
  246.                 out     (c),a
  247.                 ld      (EPlayer_Init+1),hl            ;адрес музыкального произведения
  248.                 ld      bc,0FFFDh                       ;разрешим работу SAA1099
  249.                 ld      a,0f6h
  250.                 out     (c),a
  251.                 call    EPlayer_Init                    ;инициализируем проигрыватель
  252.                 ld      a,10h
  253.                 ld      bc,7ffdh
  254.                 out     (c),a
  255.  
  256.                 ld      a,(ETunes_number_music)
  257.                 inc     a
  258.                 ld      c,a
  259.                 and     0Fh
  260.                 cp      10
  261.                 jr      c,ETunes_number_correct
  262.                 ld      a,6
  263.                 add     c
  264.                 ld      c,a
  265.  
  266. ETunes_number_correct:
  267.                 ld      a,c
  268.                 ld      (ETunes_number_music),a
  269.                 cp      31h
  270.                 jr      c,ETunes_number_valid
  271.                 ld      a,1
  272.  
  273. ETunes_number_valid:
  274.                 ld      (ETunes_number_music),a
  275.                 call    ETunes_view_number
  276.                 call    ETunes_time_init
  277.  
  278.                 ei
  279.                 jp      ETunes_loop
  280.  
  281. ETunes_exit:           
  282.                 di     
  283.                 call    EPlayer_Init                    ;глушим работу проигрывающего модуля
  284.                 ld      bc,0FFFDh                       ;запрещаем работу SAA1099
  285.                 ld      a,0feh
  286.                 out     (c),a
  287.                 ld      hl,0   
  288.                 push    hl
  289.                 jp      3d2fh                           ;выход в TR-DOS
  290.  
  291. ETunes_time_init:
  292.                 xor     a
  293.                 ld      (ETunes_time_int),a
  294.                 ld      (ETunes_time_count),a          
  295.                 ld      (ETunes_time_minute),a
  296.                 jr      ETunes_time_draw
  297.  
  298. ETunes_time_view:
  299.                 ld      a,(ETunes_time_int)
  300.                 inc     a
  301.                 ld      (ETunes_time_int),a
  302.                 cp      50
  303.                 ret     c
  304.                 xor     a
  305.                 ld      (ETunes_time_int),a
  306.                 ld      a,(ETunes_time_count)
  307.                 inc     a
  308.                 ld      c,a
  309.                 and     0Fh
  310.                 cp      10
  311.                 jr      c,ETunes_time_next
  312.                 ld      a,6
  313.                 add     c
  314.                 ld      c,a
  315. ETunes_time_next:
  316.                 ld      a,c
  317.                 ld      (ETunes_time_count),a          
  318.                 cp      60h
  319.                 jr      c,ETunes_time_draw
  320.                 xor     a
  321.                 ld      (ETunes_time_count),a          
  322.                 ld      a,(ETunes_time_minute)
  323.                 inc     a
  324.                 ld      (ETunes_time_minute),a
  325.                 cp      10
  326.                 jr      c,ETunes_time_draw
  327.                 xor     a
  328.                 ld      (ETunes_time_minute),a
  329. ETunes_time_draw:
  330.                 ld      a,(ETunes_time_minute)
  331.                 ld      hl,40DCh
  332.                 and     0Fh
  333.                 call    ETunes_view_symbol
  334.                 ld      a,(ETunes_time_count)
  335.                 ld      c,a
  336.                 and     0F0h
  337.                 rrca
  338.                 rrca
  339.                 rrca
  340.                 rrca
  341.                 ld      hl,40DEh
  342.                 call    ETunes_view_symbol
  343.                 ld      a,c
  344.                 and     0Fh
  345.                 ld      hl,40DFh
  346.                 jr      ETunes_view_symbol
  347.  
  348.  
  349. ETunes_view_number:
  350.                 ld      c,a
  351.                 and     0F0h
  352.                 rrca
  353.                 rrca
  354.                 rrca
  355.                 rrca
  356.                 ld      hl,40C6h
  357.                 call    ETunes_view_symbol
  358.                 ld      a,c
  359.                 and     0Fh
  360.                 ld      hl,40C7h
  361.  
  362. ETunes_view_symbol:
  363.                 push    hl
  364.                 ld      h,0
  365.                 ld      l,a
  366.                 add     hl,hl
  367.                 add     hl,hl
  368.                 add     hl,hl
  369.                 ld      de,ETunes_table_symbol
  370.                 add     hl,de  
  371.                 ex      de,hl
  372.                 pop     hl
  373.                 ld      b,8
  374.  
  375. ETunes_view_loop:
  376.                 ld      a,(de)
  377.                 ld      (hl),a
  378.                 inc     de             
  379.                 inc     h
  380.                 ld      a,h
  381.                 and     7
  382.                 jr      nz,ETunes_next_line
  383.                 ld      a,l
  384.                 add     a,20h
  385.                 ld      l,a
  386.                 jr      c,ETunes_next_line
  387.                 ld      a,h
  388.                 sub     8
  389.                 ld      h,a
  390. ETunes_next_line:
  391.                 djnz    ETunes_view_loop
  392.                 ret    
  393.  
  394. ETunes_memory_detect:
  395.                 ld      bc,7ffdh
  396.                 ld      a,10h
  397.                 out     (c),a
  398.                 ld      hl,0C000h
  399.                 ld      e,(hl) 
  400.                 ld      a,90h
  401.                 out     (c),a
  402.                 ld      a,(hl)
  403.                 cp      e
  404.                 ld      a,1
  405.                 jr      nz,ETunes_memory_flg
  406.                 xor     a
  407. ETunes_memory_flg:
  408.                 ld      (ETunes_memory_ok),a
  409.                 and     a
  410.                 ret
  411.  
  412. ETunes_tabl_music:
  413.                 db      10h                             ; 1 музыкальное произведение
  414.                 dw      0C000h
  415.                 db      10h                             ; 2 музыкальное произведение
  416.                 dw      0CDA0h
  417.                 db      10h                             ; 3 музыкальное произведение
  418.                 dw      0D510h
  419.                 db      10h                             ; 4 музыкальное произведение
  420.                 dw      0DB60h
  421.                 db      10h                             ; 5 музыкальное произведение
  422.                 dw      0DDB0h
  423.                 db      10h                             ; 6 музыкальное произведение
  424.                 dw      0E740h
  425.                 db      10h                             ; 7 музыкальное произведение
  426.                 dw      0EFA0h
  427.                 db      10h                             ; 8 музыкальное произведение
  428.                 dw      0F500h
  429.  
  430.                 db      11h                             ; 9 музыкальное произведение
  431.                 dw      0C000h
  432.                 db      11h                             ; 10 музыкальное произведение
  433.                 dw      0C560h
  434.                 db      11h                             ; 11 музыкальное произведение
  435.                 dw      0CB20h
  436.                 db      11h                             ; 12 музыкальное произведение
  437.                 dw      0CED0h
  438.                 db      11h                             ; 13 музыкальное произведение
  439.                 dw      0D520h
  440.                 db      11h                             ; 14 музыкальное произведение
  441.                 dw      0D750h
  442.                 db      11h                             ; 15 музыкальное произведение
  443.                 dw      0E170h
  444.                 db      11h                             ; 16 музыкальное произведение
  445.                 dw      0E8B0h
  446.                 db      11h                             ; 17 музыкальное произведение
  447.                 dw      0EE60h
  448.                 db      11h                             ; 18 музыкальное произведение
  449.                 dw      0F100h
  450.  
  451.                 db      13h                             ; 19 музыкальное произведение
  452.                 dw      0C000h
  453.                 db      13h                             ; 20 музыкальное произведение
  454.                 dw      0CA60h
  455.                 db      13h                             ; 21 музыкальное произведение
  456.                 dw      0D640h
  457.                 db      13h                             ; 22 музыкальное произведение
  458.                 dw      0E280h
  459.                 db      13h                             ; 23 музыкальное произведение
  460.                 dw      0E760h
  461.  
  462.                 db      14h                             ; 24 музыкальное произведение
  463.                 dw      0C000h
  464.                 db      14h                             ; 25 музыкальное произведение
  465.                 dw      0C820h
  466.                 db      14h                             ; 26 музыкальное произведение
  467.                 dw      0CA90h
  468.                 db      14h                             ; 27 музыкальное произведение
  469.                 dw      0D750h
  470.                 db      14h                             ; 28 музыкальное произведение
  471.                 dw      0DAD0h
  472.                 db      14h                             ; 29 музыкальное произведение
  473.                 dw      0EA50h
  474.  
  475.                 db      16h                             ; 30 музыкальное произведение
  476.                 dw      0C000h
  477.  
  478. ETunes_table_symbol:
  479.                 db      0,3Ch,66h,6Eh,76h,66h,3Ch,0
  480.                 db      0,18h,38h,18h,18h,18h,7Eh,0
  481.                 db      0,3Ch,66h,0Ch,18h,30h,7Eh,0
  482.                 db      0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
  483.                 db      0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
  484.                 db      0,7Eh,60h,7Ch,06h,66h,3Ch,0
  485.                 db      0,3Ch,60h,7Ch,66h,66h,3Ch,0
  486.                 db      0,7Eh,06h,0Ch,18h,30h,30h,0
  487.                 db      0,3Ch,66h,3Ch,66h,66h,3Ch,0
  488.                 db      0,3Ch,66h,3Eh,06h,0Ch,38h,0
  489.  
  490. ETunes_page_memory:
  491.                 db      0              
  492. ETunes_count_music:
  493.                 db      0
  494. ETunes_number_music:
  495.                 db      0
  496. ETunes_key_press:
  497.                 db      0
  498. ETunes_time_int:
  499.                 db      0
  500. ETunes_time_count:
  501.                 db      0              
  502. ETunes_time_minute:
  503.                 db      0
  504. ETunes_memory_ok:
  505.                 db      0
  506.  
  507. Interrupt_handle:
  508.                 push    hl     
  509.                 push    bc     
  510.                 push    de
  511.                 push    af     
  512.  
  513.                 call    Analyzer_update
  514.                 call    Analyzer_draw_flash
  515.                 call    ETunes_time_view
  516.  
  517.                 ld      a,(ETunes_memory_ok)
  518.                 and     a
  519.                 call    nz,Analyzer_view
  520.  
  521.                 ld      a,(ETunes_page_memory)
  522.                 ld      bc,7ffdh
  523.                 out     (c),a
  524.                 call    EPlayer_Play
  525.                 ld      a,10h
  526.                 ld      bc,7ffdh
  527.                 out     (c),a
  528.  
  529.                 pop     af
  530.                 pop     de
  531.                 pop     bc
  532.                 pop     hl
  533.                 ei
  534.                 ret
  535.  
  536.  
  537.                 .include  analyzer.asm
  538.                 .include  etplayer.asm
  539.                 .include  string.asm
  540. Etunes_end:
  541.                 .savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
  542.  
  543.                 .include  adata_000.asm
  544.                 .savebin "adt000.bin",Analyzer_phase_0000, Analyzer_end_000 - Analyzer_phase_0000
  545.  
  546.                 .include  adata_001.asm
  547.                 .savebin "adt001.bin",Analyzer_phase_1501, Analyzer_end_001 - Analyzer_phase_1501
  548.  
  549.                 .include  adata_002.asm
  550.                 .savebin "adt002.bin",Analyzer_phase_3301, Analyzer_end_002 - Analyzer_phase_3301
  551.  
  552.                 .include  adata_003.asm
  553.                 .savebin "adt003.bin",Analyzer_phase_5101, Analyzer_end_003 - Analyzer_phase_5101
  554.  
  555.                 .include  adata_004.asm
  556.                 .savebin "adt004.bin",Analyzer_phase_6601, Analyzer_end_004 - Analyzer_phase_6601
  557.  
  558.                 .include  adata_005.asm
  559.                 .savebin "adt005.bin",Analyzer_phase_8401, Analyzer_end_005 - Analyzer_phase_8401
  560.  
  561.                 .include  adata_006.asm
  562.                 .savebin "adt006.bin",Analyzer_phase_A201, Analyzer_end_006 - Analyzer_phase_A201
  563.  
  564.                 .include  adata_007.asm
  565.                 .savebin "adt007.bin",Analyzer_phase_C001, Analyzer_end_007 - Analyzer_phase_C001
  566.  
  567.                 .include  adata_008.asm
  568.                 .savebin "adt008.bin",Analyzer_phase_D501, Analyzer_end_008 - Analyzer_phase_D501
  569.                 .end
  570.  
  571.