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