Changes

PROTRACKER372 PT3X0A H

21,573 bytes added, 23:52, 14 February 2020
Created page with "PT3x0A C��┴O�P�з;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ;$ $ ;$ PRO TRACKE..."
PT3x0A C��┴O�P�з;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;$ $
;$ PRO TRACKER 3.X PLAYER v3x0A by Dr.Lion/RSM (c) 2004 $
;$ $
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
;Редактирование: 8.07.2004
;Файл исходника: PT3x0A (оптимизирован для малого размера)
;Основные технические параметры плеера:
; - базирован на ядре проигрывателя RC367 by Alone Coder;
; - версия ядра проигрывателя: [0] универсальное,малого размера;
; - максимальное время работы: 8864 такта (тестовый спецмодуль);
; - среднее время работы : 5440 такта (тестовый спецмодуль);
; - размер проигрывателя : 1742 (#06CE) байт;
; - качество звука : среднее
;------ Основные точки входа в плеер ------
ORG #C000 ;Адрес компиляции
Compile LD HL,module ;Адрес модуля
JR INSTALL
JP PLAY
JP STOP
;------ Процедура инсталляции ------
INSTALL DI
PUSH HL
LD BC,99
ADD HL,BC
LD A,(HL)
INC HL
PUSH HL
LD HL,Tb_PT-24
LD C,24
Find_FT ADD HL,BC
DEC A
JP P,Find_FT
LD IX,tab_frq
;------ Frequency Table Generator ------
LD (SP_SV+1),SP
LD SP,HL
LD C,12
MkFT_L0 POP HL
LD DE,24
LD B,8
MkFT_L1 SRL H
RR L
LD A,L
ADC A,D
LD (IX+0),A
LD A,H
ADC A,D
LD (IX+1),A
ADD IX,DE
DJNZ MkFT_L1
LD DE,-8*24+2
ADD IX,DE
DEC C
JR NZ,MkFT_L0
SP_SV LD SP,0
;------ продолжение инсталляции ------
POP HL
LD A,(HL)
LD (temp+1),A
INC HL
INC HL
LD A,(HL)
INC HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD (smpPP+1),HL
LD C,64
ADD HL,BC
LD (ornPP+1),HL
LD C,32
ADD HL,BC
LD (Psa_beg+1),HL
LD C,A
ADD HL,BC
LD (Psa_lop+1),HL
POP HL
ADD HL,DE
LD (Psa_chn+1),HL
LD A,B
LD (Am_vol),A
LD (Bm_vol),A
LD (Cm_vol),A
INC A
LD (A_qty),A
LD (B_qty),A
LD (C_qty),A
LD HL,ZERO_M
LD (Ao_adr),HL
LD (Bo_adr),HL
LD (Co_adr),HL
LD (As_adr),HL
LD (Bs_adr),HL
LD (Cs_adr),HL
LD (Ach_adr),HL
SUB 16+1
LD (Ag_vol),A
LD (Bg_vol),A
LD (Cg_vol),A
SBC A,A
LD (Avb_lok),A
LD (Cvb_lok),A
LD (Bvb_lok),A
STOP LD DE,#0E00
DEC D
LD BC,#FFFD
OUT (C),D
LD B,#BF
OUT (C),E
JR NZ,STOP+3
res RET
;------ Вычисление адреса орнамента/сэмпла ------
ornPP LD HL,ZERO_M
ADD A,A
JR sm_or_P
smpPP LD HL,ZERO_M
sm_or_P LD C,A
XOR A
LD B,A
ADD HL,BC
LD C,(HL)
INC HL
LD B,(HL)
LD HL,(Compile+1)
ADD HL,BC
RET
;------ Установка формы и частоты ENV ------
EiPP LD (E_form),A
EX DE,HL
LD D,(HL)
INC HL
LD E,(HL)
INC HL
EX DE,HL
LD (Env_frq+1),HL
XOR A
LD L,A
LD H,A
LD (Esl_frq+1),HL
JR Eipp
;------ Special Effects COM.9XXX ------
Eef_sld LD A,(DE) ;sld_env
INC DE
EX DE,HL
LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
LD (Esl_sds+1),HL ;sds
LD (Esl_sts+1),A
Eipp LD (Esl_stp+1),A ;stp
LD A,%00010000
RET
;------ #C100 Таблица громкости (логарифмическая) ------
DISPLAY "Volume Table :",$
frq_A DW 0
frq_B DW 0
frq_C DW 0
Noise DB 0
Mixer DB 0
vol_A DB 0
vol_B DB 0
vol_C DB 0
frq_E DW 0
E_form DB 0
ZERO_M DW 0
DB 0,0,0,0,0,0,0,0,01,01,01,01,01,01,01,01
DB 0,0,0,0,1,1,1,1,01,01,01,01,02,02,02,02
DB 0,0,0,1,1,1,1,1,02,02,02,02,02,03,03,03
DB 0,0,1,1,1,1,2,2,02,02,03,03,03,03,04,04
DB 0,0,1,1,1,2,2,2,03,03,03,04,04,04,05,05
DB 0,0,1,1,2,2,2,3,03,04,04,04,05,05,06,06
DB 0,0,1,1,2,2,3,3,04,04,05,05,06,06,07,07
DB 0,1,1,2,2,3,3,4,04,05,05,06,06,07,07,08
DB 0,1,1,2,2,3,4,4,05,05,06,07,07,08,08,09
DB 0,1,1,2,3,3,4,5,05,06,07,07,08,09,09,10
DB 0,1,1,2,3,4,4,5,06,07,07,08,09,10,10,11
DB 0,1,2,2,3,4,5,6,06,07,08,09,10,10,11,12
DB 0,1,2,3,3,4,5,6,07,08,09,10,10,11,12,13
DB 0,1,2,3,4,5,6,7,07,08,09,10,11,12,13,14
DB 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15
;------ #C200 Область таблицы частот нот -------
tab_frq EQU $
Test_AY LD DE,#FFBF
LD C,#FD
LD A,#02
LD B,D
OUT (C),A
LD B,E
OUT (C),E
LD B,D
IN A,(C)
CP E
LD HL,DC_StrA
JR NZ,AY_Exit
AY_Pres LD A,#10
OUT (C),A
IN A,(C)
CP D
LD HL,AY_StrA
JR NZ,AY_Exit
LD HL,YM_StrA
AY_Exit JP STOP
DS 8
DB "Pro Tracker 3.x Player v3x0A"
DB " by Dr.Lion (C) 2004 LEN:6CE"
DS 8
DC_StrA DB "Disconnected",0
AY_StrA DB "AY-3-8910",0
YM_StrA DB "YM2149F",0
DS 192-($-tab_frq)
;------ Таблица подпрограмм комманд ------
X_eff DW Xef_slT ;1xxx,2xxx - sld_tone
DW Xef_nsT ;3xxx - port_note
DW Xef_dSm ;4.xx - dsp_smp
DW Xef_dOr ;5.xx - dsp_orn
DW Xef_vib ;6.xx - vibrato
DW res
DW res
DW Eef_sld ;9xxx,Axxx - sld_env
DW eff_tmp ;B.xx - temp
;------ Все переменные канала A ------
Ach_adr DW ZERO_M ;-04 POSITION ADR
Ai_qty DB #01 ;-02 STEP COUNTER PRESET
A_qty DB #01 ;-01 STEP COUNTER
Afrq_Ad DW frq_A ;+00 ADR IN MEM OF FRQ REG
Avol_Ad DW vol_A ;+02 ADR IN MEM OF VOL REG
As_adr DW ZERO_M ;+04 SAMPLE ADR
Ao_adr DW ZERO_M ;+06 ORNAMENT ADR
ACh_IDN DB 4 ;+08 CHANNEL ROLL FOR MIXER
Asl_plk DB Xsl_sts-Xsl_plk ;+09 DSP FOR PORT ON/OFF
Avb_lok DB #FF ;+10 SOUND LOCK (VIBRATO)
As_Vsl DB #10 ;+11 VOLUME SLIDE ACC
Ag_vol DB #F0 ;+12 GLOBAL VOLUME
Am_vol DB 0 ;+13 ENVELOPMENT MASK
As_Nsl DB 0 ;+14 NOISE SLIDE ACC
As_Esl DB 0 ;+15 ENVELOPMENT SLIDE ACC
As_dtn DW 0 ;+16 SAMP FRQ DSP ACC
As_dsp DB 0 ;+18 SAMPLE POSITION
Ao_dsp DB 0 ;+19 ORNAMENT POSITION
Asl_dsp DW 0 ;+20 SLIDE DSP
Asl_stp DB 0 ;+22 SLIDE STEP (DELAY)
Asl_tfr DW 0 ;+23 SLIDE ADD DSP
Asl_not DB 0 ;+25 SLIDE TO NOTE
As_note DB 0 ;+26 SAMPLE NOTE
Asl_sts DB 0 ;+27 SLIDE COUNTER PRESET
Avb_stp DB 0 ;+28 VIBRATO COUNTER
Avb_frq DB 0 ;+29 SOUND OFF DELAY (VIBRATO)
Avb_sts DB 0 ;+30 VIBRATO COUNTER PRESET
;------ Все переменные канала B ------
Bch_adr DW ZERO_M
Bi_qty DB #01
B_qty DB #01
Bfrq_Ad DW frq_B
Bvol_Ad DW vol_B
Bs_adr DW ZERO_M
Bo_adr DW ZERO_M
BCh_IDN DB 3
Bsl_plk DB Xsl_sts-Xsl_plk
Bvb_lok DB #FF
Bs_Vsl DB #10
Bg_vol DB #F0
Bm_vol DB 0
Bs_Nsl DB 0
Bs_Esl DB 0
Bs_dtn DW 0
Bs_dsp DB 0
Bo_dsp DB 0
Bsl_dsp DW 0
Bsl_stp DB 0
Bsl_tfr DW 0
Bsl_not DB 0
Bs_note DB 0
Bsl_sts DB 0
Bvb_stp DB 0
Bvb_frq DB 0
Bvb_sts DB 0
;------ Все переменные канала C ------
Cch_adr DW ZERO_M
Ci_qty DB #01
C_qty DB #01
Cfrq_Ad DW frq_C
Cvol_Ad DW vol_C
Cs_adr DW ZERO_M
Co_adr DW ZERO_M
CCh_IDN DB 2
Csl_plk DB Xsl_sts-Xsl_plk
Cvb_lok DB #FF
Cs_Vsl DB #10
Cg_vol DB #F0
Cm_vol DB 0
Cs_Nsl DB 0
Cs_Esl DB 0
Cs_dtn DW 0
Cs_dsp DB 0
Co_dsp DB 0
Csl_dsp DW 0
Csl_stp DB 0
Csl_tfr DW 0
Csl_not DB 0
Cs_note DB 0
Csl_sts DB 0
Cvb_stp DB 0
Cvb_frq DB 0
Cvb_sts DB 0
;------ Play One Frame of Module ------
PLAY PUSH IY
int_qty LD A,1
DEC A
JR NZ,SamplIT
;------ Просчет следующей строки паттерна ------
LD IY,Afrq_Ad
CALL Get_Pos
LD IY,Bfrq_Ad
CALL Get_Pos
LD IY,Cfrq_Ad
CALL Get_Pos
temp LD A,3 ;temp
SamplIT LD (int_qty+1),A
;------ Проигрывание сэмплером каналов ABC ------
N_add LD IX,0 ;HX=noise LX=mix
LD BC,0 ;smp_sl_env
EXX
LD IY,Afrq_Ad
CALL OneChan
LD IY,Bfrq_Ad
CALL OneChan
LD IY,Cfrq_Ad
CALL OneChan
;------ Модифицированый сэмплер Envelopment ------
Sampl_E EXX
Esl_frq LD DE,0 ;stp_sl_env
Env_frq LD HL,0 ;frq_env
ADD HL,BC
ADD HL,DE
LD (frq_E),HL
;------ Просчет Slide DSP для Envelopment ------
Esl_stp LD A,0
DEC A
JP M,MPU_Out
JR NZ,Esl_n0
Esl_sds LD HL,0
ADD HL,DE
LD (Esl_frq+1),HL
Esl_sts LD A,0
Esl_n0 LD (Esl_stp+1),A
;---- Update Noise & Mixer Than Out ----
MPU_Out LD A,HX ;noise value
LD (N_add+3),A
N_frq ADD A,0
LD (Noise),A
LD A,LX ;mixer bits
LD (Mixer),A
POP IY ;old IY value
LD HL,frq_A
LD DE,#FFBF
LD C,#FD
LD A,14
AY_Out LD B,D
OUT (C),L
LD B,E
DEC A
JR Z,EN_Out
OUTI
JR AY_Out
EN_Out OR (HL)
RET Z
OUT (C),A
LD (HL),0
RET
;------ Универсальный сэмплер для каналов ABC ------
OneChan LD (Quit_S+1),SP
LD SP,IY
POP HL
LD (FrqR_A+1),HL
POP HL
LD (VolR_A+1),HL
POP HL
LD (Xs_adr+1),HL
POP HL
LD (Xo_adr+1),HL
POP HL
LD A,L
LD (Ch_Roll+1),A
LD A,H
LD (Xsl_plk-1),A
;------ Переделанный под переменные сэмплер PT3.67 ------
tab_vol EQU frq_A
LD A,(IY+10) ;Xvb_lok
LD H,A
INC A
JP Z,Xvb_n0
Xs_adr LD SP,0 ;sample
POP DE ;loop E=beg D=end
LD A,(IY+18) ;Xs_dsp
LD L,A
INC A
CP D
JR C,Xs_n0
LD A,E
Xs_n0 LD (IY+18),A
ADD HL,HL
ADD HL,HL
ADD HL,SP
LD SP,HL
POP DE ;D= Nm ts ns Tm v3 v2 v1 v0
LD A,D ;E= sv +- N4 N3 N2 N1 N0 Em
OR #F0
LD L,A
LD A,E
ADD A,A
LD A,(IY+11) ;Xs_Vsl
JR NC,Xs_VslG
JP M,Xs_n2
SUB 1
JR Xs_n3
Xs_n2 CP 31
Xs_n3 ADC A,0
LD (IY+11),A
Xs_VslG ADD A,L
JR C,Xs_n4
XOR A
Xs_n4 CP 16
JR C,Xg_vol
LD A,15
Xg_vol ADD A,(IY+12) ;Xg_vol
LD L,A
LD H,'tab_vol
LD A,(HL)
SRL E
JR C,Xm_vo0
OR (IY+13) ;Xm_vol
Xm_vo0 EXA
LD A,D
RLCA
JR C,Xs_n5
LD A,(IY+14) ;Xs_Nsl
ADD A,E
BIT 5,D
JR Z,Xs_n6
LD (IY+14),A
Xs_n6 LD HX,A
JR Xs_n7
Xs_n5 LD A,E
AND 31
CP 16
JR C,Xs_Esl
OR #F0
Xs_Esl ADD A,(IY+15) ;Xs_Esl
BIT 5,D
JR Z,Xs_n9
LD (IY+15),A
Xs_n9 EXX
ADD A,C
LD C,A
EXX
Xs_n7 LD A,D
AND %10010000
Ch_Roll LD B,0
MixLoop RRCA
DJNZ MixLoop
OR LX
LD LX,A
POP BC ;smp_frq_dsp
LD L,(IY+16) ;накопитель dsp
LD H,(IY+17)
ADD HL,BC
BIT 6,D
JR Z,Xs_n10
LD (IY+16),L ;новое значение
LD (IY+17),H ;накопителя dsp
Xs_n10 EX DE,HL
Xo_adr LD SP,0 ;ornament
POP BC ;loop C=beg B=end
LD A,(IY+19) ;Xo_dsp
LD L,A
INC A
CP B
JR C,Xo_n0
LD A,C
Xo_n0 LD (IY+19),A
LD H,0
ADD HL,SP
LD A,(IY+26) ;Xs_note
ADD A,(HL) ;dsp_orn (ORNAMENTS ON/OFF)
ADD A,A
JR NC,Xo_n1 ;;
XOR A ;;
Xo_n1 LD L,95*2 ;;
CP L ;;
JR NC,Xo_n2 ;;
LD L,A ;;
Xo_n2 LD H,'tab_frq
LD SP,HL
POP HL ;частота ноты+
ADD HL,DE ;+накопитель сэмпла (смещение)+
LD C,(IY+20)
LD B,(IY+21)
ADD HL,BC ;+накопитель SLIDE TONE/PORT
FrqR_A LD (frq_A),HL
LD A,(IY+22) ;Xsl_stp
DEC A
JP M,Xsl_s0 ;If Xsl_stp=0 then SLIDE OFF
JR NZ,Xsl_s1
LD E,(IY+23) ;Xsl_tfr-приращение накопителя
LD D,(IY+24) ;SLIDE TONE/PORT при его изме-
ADD HL,DE ;нении.
EX DE,HL
ADD HL,BC
LD (IY+20),L ;новое значение измененного
LD (IY+21),H ;накопителя SLIDE TONE/PORT
JR Xsl_sts ;переключатель PORT ON/OFF!
Xsl_plk EQU $
LD A,(IY+25) ;нота, к которой стремится
LD L,A ;команда PORT.
ADD HL,HL
LD H,'tab_frq
LD SP,HL
POP HL
CP (IY+26) ;последняя встреченая нота, в HL
JR NC,Xsl_n0 ;вычесленная по ней частота.
EX DE,HL
Xsl_n0 SBC HL,DE
JR C,Xsl_sts
LD (IY+26),A ;частоты нот совпали и теперь:
XOR A ;- Xs_note=Xsl_not
LD (IY+20),A ;- Xsl_dsp=0
LD (IY+21),A
JR Xsl_s1
Xsl_sts LD A,(IY+27)
Xsl_s1 LD (IY+22),A
Xsl_s0 EXA
Xvb_n0 EQU $
VolR_A LD (vol_A),A
LD A,(IY+28)
DEC A
JP M,Quit_S
JR NZ,Xvb_n1
DEC A ;A=#FF
XOR (IY+10) ;A XOR Xvb_lok
LD (IY+10),A
LD A,(IY+29)
JR NZ,Xvb_n1
LD A,(IY+30)
Xvb_n1 LD (IY+28),A
Quit_S LD SP,0
RET
;------ Get Position + Next Pattern ------
Get_Pos DEC (IY-01) ;X_qty
RET NZ
LD E,(IY-04) ;adr_chan
LD D,(IY-03)
LD A,(DE)
AND A
JR NZ,Cont_0
LD (N_frq+1),A
LD D,A
LD (Sv_SP0+1),SP
Psa_beg LD HL,module+201
LD A,(HL)
INC A
JR NZ,Cont_1
Psa_lop LD HL,module+201
Cont_1 LD E,(HL)
INC HL
LD (Psa_beg+1),HL
Psa_chn LD HL,0
ADD HL,DE
ADD HL,DE
LD SP,HL
ia_pos0 LD BC,(Compile+1)
POP HL
ADD HL,BC
EX DE,HL ;DE=adr_chn_A
POP HL
ADD HL,BC ;HL=adr_chn_B
LD (Bch_adr),HL
POP HL
ADD HL,BC ;HL=adr_chn_C
LD (Cch_adr),HL
Sv_SP0 LD SP,0
Cont_0 CALL Xn_clc1
LD (IY-04),E
LD (IY-03),D
LD A,(IY-02) ;Xi_qty
LD (IY-01),A ;X_qty
RET
;------ Дешифрация позиции по одному каналу ------
Xni_not LD (IY+26),A ;Xs_note
XOR A
LD (IY+10),A ;Xvb_lok
LD (IY+18),A ;Xs_dsp
LD (IY+11),#10 ;Xs_Vsl
LD (IY+14),A ;Xs_Nsl
LD (IY+15),A ;Xs_Esl
LD (IY+16),A ;Xs_dtn low
LD (IY+17),A ;Xs_dtn High
LD (IY+19),A ;Xo_dsp
LD (IY+20),A ;Xsl_dsp low
LD (IY+21),A ;Xsl_dsp High
LD (IY+22),A ;Xsl_stp
LD (IY+28),A ;Xvb_stp
RET
Xni_vol JR NZ,Xni_v0
LD (IY+28),A ;Xvb_stp=#00
DEC A
LD (IY+10),A ;Xvb_lok=#FF
RET
Xni_v0 ADD A,A
ADD A,A
ADD A,A
ADD A,A
LD (IY+12),A ;Xg_vol=A*16
JR Xn_clc2
Xni_s_o CALL ornPP
LD (IY+06),L ;Xo_adr=HL
LD (IY+07),H
Xni_vse CALL NZ,EiPP
Xni_sm0 LD (IY+13),A ;Xm_vol
XOR A
LD (IY+19),A ;Xo_dsp=0
LD A,(DE)
INC DE
JR Xnism0U
Xni_smp RET Z
ADD A,A
Xnism0U CALL smpPP
LD (IY+04),L ;Xs_adr
LD (IY+05),H
Xn_clc1 LD BC,#1020
Xn_clc2 LD A,(DE)
INC DE
ADD A,B
JR C,Xni_s_o
ADD A,C
JR C,Xni_smp
ADD A,B
JR C,Xni_vol
ADD A,B
JR C,Xni_vqe
ADD A,96
JR C,Xni_not
ADD A,B
JR C,Xni_orn
ADD A,C
JR C,Xni_noi
ADD A,B
JR C,Xni_vse
ADD A,B
LD HL,X_eff-2
ADD A,A
ADD A,L
LD L,A
LD C,(HL)
INC L
LD B,(HL)
PUSH BC
LD A,(IY+26) ;Xs_note
EXA
JR Xn_clc1
Xni_noi LD (N_frq+1),A ;GLOBALnoise
JR Xn_clc2
Xni_vqe JR Z,Xni_v1
DEC A
JR NZ,Xni_e0
LD A,(DE)
LD (IY-02),A ;Xi_qty
INC DE
JR Xn_clc2
Xni_e0 CALL EiPP
Xni_v1 LD (IY+13),A ;Xm_vol
JR Xn_clc2
Xni_orn CALL ornPP
LD (IY+06),L ;Xo_adr=HL
LD (IY+07),H
LD (IY+19),A ;Xo_dsp=0
JR Xn_clc1
;------ Special Effects COM.XXXX ------
Off_PRT EQU Xsl_sts-Xsl_plk
Xef_slT LD A,(DE)
INC DE
LD (IY+22),A ;Xsl_stp
LD (IY+27),A ;Xsl_sts
LD A,(DE)
INC DE
LD (IY+23),A ;Xsl_tfr (LOW)
LD A,(DE)
INC DE
LD (IY+24),A ;Xsl_tfr (HIGH)
LD (IY+28),0 ;Xvb_stp
LD (IY+09),Off_PRT ;Xsl_plk=PORT_OFF
RET
Xef_nsT CALL Xef_slT
LD A,(DE)
INC DE
LD (IY+23),A ;Xsl_tfr (LOW)
LD A,(DE)
INC DE
LD (IY+24),A ;Xsl_tfr (HIGH)
LD (IY+09),0 ;Xsl_plk=PORT_ON
LD A,(IY+26) ;Xs_note
LD (IY+25),A ;Xsl_not
EXA
LD (IY+26),A
RET
Xef_dSm LD A,(DE)
INC DE
LD (IY+18),A ;Xs_dsp
RET
Xef_dOr LD A,(DE)
INC DE
LD (IY+19),A ;Xo_dsp
RET
Xef_vib LD A,(DE)
INC DE
LD (IY+28),A
LD (IY+30),A
LD A,(DE)
INC DE
LD (IY+29),A
LD (IY+22),0 ;Xsl_stp отключение SLIDE
RET
eff_tmp LD A,(DE)
INC DE
LD (temp+1),A
RET
;------ Frequency Tables for Generate ------
Tb_PT DW #0C22*2,#0B72*2,#0ACF*2,#0A33*2
DW #09A1*2,#0917*2,#0894*2,#0819*2
DW #07A4*2,#0737*2,#06CF*2,#066D*2
Tb_ST DW #0EF8*2,#0E10*2,#0D60*2,#0C80*2
DW #0BD8*2,#0B28*2,#0A88*2,#09F0*2
DW #0960*2,#08E0*2,#0858*2,#07E0*2
Tb_REAL DW #0CDA*2,#0C22*2,#0B72*2,#0ACF*2
DW #0A33*2,#09A1*2,#0917*2,#0894*2
DW #0819*2,#07A4*2,#0737*2,#06CF*2
Tb_ASM DW #0D10*2,#0C55*2,#0BA4*2,#0AFC*2
DW #0A5F*2,#09CA*2,#093D*2,#08B8*2
DW #083B*2,#07C5*2,#0755*2,#06EC*2
;------ Конец плеера-начало модуля ------
module DISPLAY "Module Adress:",module
DISPLAY "Player Lenght:",module-Compile

;------ пример использования -------
INCBIN "ace.m"
ORG #7000
DI
CALL Compile
play_l EI
HALT
CALL Compile+5
LD A,#7F
IN A,(-2)
RRA
JR C,play_l
JP Compile+8
ADD A,B
JR C,Xni_orn
ADD A,C