;--------------------------------------------------------------------
; Описание: Программа проигрывания модулей E-Tracker
; поддержка в железе: ZXM-SoundCard
; Автор порта: Тарасов М.Н.(Mick),2010
;--------------------------------------------------------------------
DEVICE ZXSPECTRUM128
.org 6000h
;-------------------------------------------------------------------
; описание: Точка входа в программу после передачи управления из ОС
;---------------------------------------------------------------------
ETunes_Start:
xor a ;бордер в черный цвет
out (0feh),a
ld (ETunes_count_music),a ;счетчик номера музыки
ld hl,4000h
ld de,4001h
ld bc,1b00h
ld (hl),c
ldir
ld hl,8000h ;грузим экран
ld de,(5CF4h)
ld bc,1B05h
call 3d13h
ld hl,98E1h
ld c,11
ETunes_clear_y:
push hl
ld b,24
ETunes_clear_x:
ld (hl),0
inc hl
djnz ETunes_clear_x
pop hl
ld de,0020h
add hl,de
dec c
jr nz,ETunes_clear_y
ld hl,8000h
ld de,4000h
ld bc,1b00h
ldir
call Str_init_load
ei
ETunes_loading:
halt
ld b,0
Etunes_wait:
djnz Etunes_wait
call Str_play
jr nc,ETunes_loading
di ;на всякий пожарный запретим прерывания
ld a,10h ;установим начальную страницу памяти
ld (ETunes_page_memory),a
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 1.
ld de,(5CF4h)
ld bc,3E05h
call 3d13h
ld hl,59A1h
ld (hl),01h
inc hl
ld (hl),41h
inc hl
ld (hl),02h
ld a,11h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 2.
ld de,(5CF4h)
ld bc,3E05h
call 3d13h
ld hl,59A4h
ld (hl),42h
inc hl
ld (hl),03h
inc hl
ld (hl),43h
ld a,13h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 3.
ld de,(5CF4h)
ld bc,3905h
call 3d13h
ld hl,59A7h
ld (hl),04h
inc hl
ld (hl),44h
inc hl
ld (hl),05h
ld a,14h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 4.
ld de,(5CF4h)
ld bc,3F05h
call 3d13h
ld hl,59A9h
ld (hl),45h
inc hl
ld (hl),06h
inc hl
ld (hl),46h
ld a,16h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 5.
ld de,(5CF4h)
ld bc,1F05h
call 3d13h
ld a,10h
ld bc,7ffdh
out (c),a
ld sp,5fffh
call Str_init ;инициализация бегущей строки
call Analyzer_init
ld hl,0C000h
ld (EPlayer_Init+1),hl ;адрес музыкального произведения
ld bc,0FFFDh ;разрешим работу SAA1099
ld a,0f6h
out (c),a
call EPlayer_Init ;инициализация проигрывающего модуля
ld hl,0fe00h ;создаем таблицу прерывания для im 2
ld de,0fe01h
ld bc,0100h
ld (hl),0fdh
ldir
ld a,0c3h ;установим вектор прерывания
ld (0fdfdh),a
ld hl,Interrupt_handle
ld (0fdfeh),hl
di
ld a,0feh ;окончание установки прерывания
ld i,a
im 2
ei
ETunes_key:
xor a
ld (ETunes_key_press),a
ETunes_loop:
halt
call Analyzer_update
call Analyzer_view
call Str_play
ld a,7fh ;ожидаем пробел - переход к следующей композиции
in a,(0feh)
rra
jr c,ETunes_key
ld a,0FEh
in a,(0FEh)
rra
jr nc,ETunes_exit
ld a,(ETunes_key_press)
and a
jr nz,ETunes_loop
di
inc a
ld (ETunes_key_press),a
ld a,(ETunes_page_memory) ;загрузим номер страницы памяти
ld bc,7ffdh
out (c),a
call EPlayer_Init ;глушим работу проигрывающего модуля
ld bc,0FFFDh ;запрещаем работу SAA1099
ld a,0feh
out (c),a
ld a,(ETunes_count_music)
inc a
cp 40
jr c,ETunes_next_music
xor a
ETunes_next_music:
ld (ETunes_count_music),a
ld l,a
ld e,a
ld h,0
ld d,h
add hl,hl
add hl,de
ld de,ETunes_tabl_music
add hl,de
ld a,(hl) ;номер страницы памяти
ld (ETunes_page_memory),a
inc hl
ld a,(hl)
inc hl
ld h,(hl)
ld l,a
ld a,(ETunes_page_memory) ;загрузим номер страницы памяти
ld bc,7ffdh
out (c),a
ld (EPlayer_Init+1),hl ;адрес музыкального произведения
ld bc,0FFFDh ;разрешим работу SAA1099
ld a,0f6h
out (c),a
call EPlayer_Init ;инициализируем проигрыватель
ld a,10h
ld bc,7ffdh
out (c),a
ei
jp ETunes_loop
ETunes_exit:
di
call EPlayer_Init ;глушим работу проигрывающего модуля
ld bc,0FFFDh ;запрещаем работу SAA1099
ld a,0feh
out (c),a
ld hl,0
push hl
jp 3d2fh ;выход в TR-DOS
ETunes_tabl_music:
db 10h ; 1 музыкальное произведение
dw 0C000h
db 10h ; 2 музыкальное произведение
dw 0C220h
db 10h ; 3 музыкальное произведение
dw 0C600h
db 10h ; 4 музыкальное произведение
dw 0CBB0h
db 10h ; 5 музыкальное произведение
dw 0D260h
db 10h ; 6 музыкальное произведение
dw 0D7D0h
db 10h ; 7 музыкальное произведение
dw 0DCE0h
db 10h ; 8 музыкальное произведение
dw 0E1C0h
db 10h ; 9 музыкальное произведение
dw 0E4F0h
db 10h ; 10 музыкальное произведение
dw 0E870h
db 10h ; 11 музыкальное произведение
dw 0EE70h
db 10h ; 12 музыкальное произведение
dw 0F430h
db 11h ; 13 музыкальное произведение
dw 0C000h
db 11h ; 14 музыкальное произведение
dw 0CC50h
db 11h ; 15 музыкальное произведение
dw 0D440h
db 11h ; 16 музыкальное произведение
dw 0EFC0h
db 11h ; 17 музыкальное произведение
dw 0F4A0h
db 13h ; 18 музыкальное произведение
dw 0C000h
db 13h ; 19 музыкальное произведение
dw 0C220h
db 13h ; 20 музыкальное произведение
dw 0C720h
db 13h ; 21 музыкальное произведение
dw 0D7A0h
db 13h ; 22 музыкальное произведение
dw 0DEC0h
db 13h ; 23 музыкальное произведение
dw 0E120h
db 13h ; 24 музыкальное произведение
dw 0E660h
db 13h ; 25 музыкальное произведение
dw 0ECF0h
db 13h ; 26 музыкальное произведение
dw 0F060h
db 14h ; 27 музыкальное произведение
dw 0C000h
db 14h ; 28 музыкальное произведение
dw 0C8E0h
db 14h ; 29 музыкальное произведение
dw 0CC90h
db 14h ; 30 музыкальное произведение
dw 0D2C0h
db 14h ; 31 музыкальное произведение
dw 0D9F0h
db 14h ; 32 музыкальное произведение
dw 0DE20h
db 14h ; 33 музыкальное произведение
dw 0E450h
db 14h ; 34 музыкальное произведение
dw 0EAF0h
db 14h ; 35 музыкальное произведение
dw 0EE70h
db 14h ; 36 музыкальное произведение
dw 0F730h
db 16h ; 37 музыкальное произведение
dw 0C000h
db 16h ; 38 музыкальное произведение
dw 0C7D0h
db 16h ; 39 музыкальное произведение
dw 0D0D0h
db 16h ; 40 музыкальное произведение
dw 0D8F0h
ETunes_page_memory:
db 0
ETunes_count_music:
db 0
ETunes_key_press:
db 0
ETunes_phase:
db 0
Interrupt_handle:
push hl
push bc
push de
push af
ld a,(ETunes_page_memory)
ld bc,7ffdh
out (c),a
call EPlayer_Play
ld a,10h
ld bc,7ffdh
out (c),a
pop af
pop de
pop bc
pop hl
ei
ret
.include analyzer.asm
.include etplayer.asm
.include string.asm
Etunes_end:
.savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
.end