;--------------------------------------------------------------------
; Описание: Программа проигрывания модулей 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,4000h ;грузим экран
ld de,(5CF4h)
ld bc,1B05h
call 3d13h
call Str_init_load
ei
ETunes_loading:
halt
ld b,0
ETunes_wait:
djnz ETunes_wait
call Str_draw_symbol
call Str_play
jr c,ETunes_load
call Str_update_symbol
jr nc,ETunes_loading
ETunes_load:
di ;на всякий пожарный запретим прерывания
ld a,10h ;установим начальную страницу памяти
ld (ETunes_page_memory),a
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 1.
ld de,(5CF4h)
ld bc,3C05h
call 3d13h
ld a,11h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 2.
ld de,(5CF4h)
ld bc,3E05h
call 3d13h
ld a,13h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 3.
ld de,(5CF4h)
ld bc,3E05h
call 3d13h
ld a,14h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 4.
ld de,(5CF4h)
ld bc,3A05h
call 3d13h
ld a,16h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 5.
ld de,(5CF4h)
ld bc,3505h
call 3d13h
ld a,17h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим музыкальный пак 6.
ld de,(5CF4h)
ld bc,3A05h
call 3d13h
call ETunes_memory_detect
jr z,ETunes_skip_titler
ld a,90h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим анимацию пак 1.
ld de,(5CF4h)
ld bc,3C05h
call 3d13h
ld a,91h
ld bc,7ffdh
out (c),a
ld hl,0C000h ;грузим анимацию пак 2.
ld de,(5CF4h)
ld bc,3C05h
call 3d13h
ETunes_skip_titler:
ld a,10h
ld bc,7ffdh
out (c),a
ld sp,5fffh
call Star_init_low
call Star_init_middle
call Str_init ;инициализация бегущей строки
call Analyzer_init
call Animation_init
ld a,(ETunes_memory_ok)
and a
call nz,Title_init
ld a,1
ld (ETunes_number_music),a
call ETunes_view_number
call ETunes_time_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 Star_play_low
call Star_play_middle
call Animation_view
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 30
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
ld a,(ETunes_number_music)
inc a
ld c,a
and 0Fh
cp 10
jr c,ETunes_number_correct
ld a,6
add c
ld c,a
ETunes_number_correct:
ld a,c
ld (ETunes_number_music),a
cp 31h
jr c,ETunes_number_valid
ld a,1
ETunes_number_valid:
ld (ETunes_number_music),a
call ETunes_view_number
call ETunes_time_init
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_time_init:
xor a
ld (ETunes_time_int),a
ld (ETunes_time_count),a
ld (ETunes_time_minute),a
jr ETunes_time_draw
ETunes_time_view:
ld a,(ETunes_time_int)
inc a
ld (ETunes_time_int),a
cp 50
ret c
xor a
ld (ETunes_time_int),a
ld a,(ETunes_time_count)
inc a
ld c,a
and 0Fh
cp 10
jr c,ETunes_time_next
ld a,6
add c
ld c,a
ETunes_time_next:
ld a,c
ld (ETunes_time_count),a
cp 60h
jr c,ETunes_time_draw
xor a
ld (ETunes_time_count),a
ld a,(ETunes_time_minute)
inc a
ld (ETunes_time_minute),a
cp 10
jr c,ETunes_time_draw
xor a
ld (ETunes_time_minute),a
ETunes_time_draw:
ld a,(ETunes_time_minute)
ld hl,55D9h
and 0Fh
call ETunes_view_symbol
ld a,(ETunes_time_count)
ld c,a
and 0F0h
rrca
rrca
rrca
rrca
ld hl,55DBh
call ETunes_view_symbol
ld a,c
and 0Fh
ld hl,55DCh
jr ETunes_view_symbol
ETunes_view_number:
ld c,a
and 0F0h
rrca
rrca
rrca
rrca
ld hl,5491h
call ETunes_view_symbol
ld a,c
and 0Fh
ld hl,5492h
ETunes_view_symbol:
push hl
ld h,0
ld l,a
add hl,hl
add hl,hl
add hl,hl
ld de,ETunes_table_symbol
add hl,de
ex de,hl
pop hl
ld b,8
ETunes_view_loop:
ld a,(de)
ld (hl),a
inc de
inc h
ld a,h
and 7
jr nz,ETunes_next_line
ld a,l
add a,20h
ld l,a
jr c,ETunes_next_line
ld a,h
sub 8
ld h,a
ETunes_next_line:
djnz ETunes_view_loop
ret
ETunes_memory_detect:
ld bc,7ffdh
ld a,10h
out (c),a
ld hl,0C000h
ld e,(hl)
ld a,90h
out (c),a
ld a,(hl)
cp e
ld a,1
jr nz,ETunes_memory_flg
xor a
ETunes_memory_flg:
ld (ETunes_memory_ok),a
and a
ret
ETunes_tabl_music:
db 10h ; 1 музыкальное произведение
dw 0C000h
db 10h ; 2 музыкальное произведение
dw 0CBC0h
db 10h ; 3 музыкальное произведение
dw 0DB20h
db 10h ; 4 музыкальное произведение
dw 0F160h
db 11h ; 5 музыкальное произведение
dw 0C000h
db 11h ; 6 музыкальное произведение
dw 0CC10h
db 11h ; 7 музыкальное произведение
dw 0D040h
db 11h ; 8 музыкальное произведение
dw 0D7E0h
db 11h ; 9 музыкальное произведение
dw 0E2C0h
db 13h ; 10 музыкальное произведение
dw 0C000h
db 13h ; 11 музыкальное произведение
dw 0C710h
db 13h ; 12 музыкальное произведение
dw 0CFB0h
db 13h ; 13 музыкальное произведение
dw 0D750h
db 13h ; 14 музыкальное произведение
dw 0E170h
db 13h ; 15 музыкальное произведение
dw 0EDE0h
db 13h ; 16 музыкальное произведение
dw 0F7D0h
db 14h ; 17 музыкальное произведение
dw 0C000h
db 14h ; 18 музыкальное произведение
dw 0DE90h
db 14h ; 19 музыкальное произведение
dw 0E670h
db 14h ; 20 музыкальное произведение
dw 0EBB0h
db 16h ; 21 музыкальное произведение
dw 0C000h
db 16h ; 22 музыкальное произведение
dw 0CA90h
db 16h ; 23 музыкальное произведение
dw 0D2D0h
db 16h ; 24 музыкальное произведение
dw 0DDD0h
db 17h ; 25 музыкальное произведение
dw 0C000h
db 17h ; 26 музыкальное произведение
dw 0CB90h
db 17h ; 27 музыкальное произведение
dw 0D440h
db 17h ; 28 музыкальное произведение
dw 0DA60h
db 17h ; 29 музыкальное произведение
dw 0E0E0h
db 17h ; 30 музыкальное произведение
dw 0EF60h
ETunes_table_symbol:
db 0,3Ch,66h,6Eh,76h,66h,3Ch,0
db 0,18h,38h,18h,18h,18h,7Eh,0
db 0,3Ch,66h,0Ch,18h,30h,7Eh,0
db 0,7Eh,0Ch,18h,0Ch,66h,3Ch,0
db 0,0Ch,1Ch,3Ch,6Ch,7Eh,0Ch,0
db 0,7Eh,60h,7Ch,06h,66h,3Ch,0
db 0,3Ch,60h,7Ch,66h,66h,3Ch,0
db 0,7Eh,06h,0Ch,18h,30h,30h,0
db 0,3Ch,66h,3Ch,66h,66h,3Ch,0
db 0,3Ch,66h,3Eh,06h,0Ch,38h,0
ETunes_page_memory:
db 0
ETunes_count_music:
db 0
ETunes_number_music:
db 0
ETunes_key_press:
db 0
ETunes_time_int:
db 0
ETunes_time_count:
db 0
ETunes_time_minute:
db 0
ETunes_memory_ok:
db 0
Interrupt_handle:
push ix
push hl
push bc
push de
push af
call Analyzer_update
call Analyzer_draw_flash
call Analyzer_view
call ETunes_time_view
ld a,(ETunes_memory_ok)
and a
call nz,Title_view
call Str_play
call Str_update_symbol
call Str_draw_symbol
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
pop ix
ei
ret
.include analyzer.asm
.include star.asm
.include animation.asm
.include etplayer.asm
.include string.asm
.include title.asm
Etunes_end:
.savebin "etunes.bin",ETunes_Start, Etunes_end - ETunes_Start
.include title2.asm
.savebin "title2.bin",Title_phase_04, Title_2_end - Title_phase_04
.include title3.asm
.savebin "title3.bin",Title_phase_17, Title_3_end - Title_phase_17
.end