;1.10+CHECKDOTS+TEMPO IN COUNTER
;VER 1.9+MUL_BXC SPEED UP
;VER 1.8 +MULS+GENXX
;VER1.7 +TAKESIN
;VER1.6 +SHUT_UP

;---HL=HL*A 8.8*8
;---CHECKDOTS
;-- MULS ;8*8=16 HL=L*E (ALL SIGNED)
;---TAKESIN
;---SHUT_UP
;---ON_INT
;---PRINT HEX NUMBER
;CHANNEL SWAP
;XPLOT
;L1
;SCR_FIL
;PTABFIL
; Depacker Laser Compact 5.2
; ,   HRUST
;UP_DE
;UP_HL
;FRSP_HL
;FRMSP_HL
;----PAG_128------
;----TST_SPR--------
;-----COUNTER-------
;+-----------------------+
;|       ADRES_P         |
;+-----------------------+
;+-----------------------+
;|       HL=B*C          |
;+-----------------------+
;+-----------------------+
;|    HL=RND*#FFFF       |
;+-----------------------+
;+-----------------------+
;|    L=C/B, A=REST      |
;+-----------------------+
;+-----------------------+
;|  A,HL=(A,HL)/(B,DE)   |
;+-----------------------+
;+-----------------------+
;|      HL = HL/DE       |
;+-----------------------+
;+-----------------------+
;|     HL = DE*DE        |
;+-----------------------+
;+-----------------------+
;|     HL = DE*BC        |
;+-----------------------+
;+-----------------------+
;|    HL = SQR (HL)      |
;+-----------------------+
;       + SQR BY ALCO
;+-----------------------+
;|     HL = HL*A         |
;+-----------------------+
;+-----------------------+
;|      HL = A!          |
;+-----------------------+
;+-----------------------+
;|      HL = BC^A        |
;+-----------------------+
;+-----------------------+
;|HL = (DE*PI)/180       |
;+-----------------------+
;+-----------------------+
;|HL = (DE*180)/PI       |
;+-----------------------+
;+-----------------------+
;|     A = SIN           |
;+-----------------------+
;+-----------------------+
;|     A = COS           |
;+-----------------------+
;+---------+
;| DOWN_HL |
;+---------+
;+---------+
;| DOWN_DE |
;+---------+
;+---------+
;| SET_ADR |
;+---------+
;+---------+
;| SET_ATR |
;+---------+
;+---------+
;| SET_INT |
;+---------+
;+-----------------------+
;|       SINMAKE         |
;+-----------------------+



;-----------------------------------------
;+-----------------------+
;|       HL=B*C          |
;+-----------------------+
MUL_BXC
        LD HL,0
        LD E,B
        LD D,H
        DUP 8
        SRL C
        JP NC,$+3+1
        ADD HL,DE
        SLA E
        RL D
        EDUP 
        RET 

;+-----------------------+
;|    HL=RND*#FFFF       |
;+-----------------------+

RND_32  LD    HL,(SEED)
        CALL  RND
RND     LD    A,H
        ADD   HL,HL
        XOR   H
        ADD   HL,HL
        ADD   HL,HL
        ADD   HL,HL
        XOR   H
        ADD   HL,HL
        ADD   HL,HL
        XOR   H
        ADD   HL,HL
        ADD   HL,HL
        LD    L,A
        LD    (SEED),HL
        RET 
SEED    DEFW  #FFFF ;  !

;+-----------------------+
;|    L=C/B, A=REST      |
;+-----------------------+


DIVIS
        XOR     A
DIVIS2
        LD      L,1
D1
        RL      C
        RLA 
        CP      B
        JR      C,ZER
        SUB     B
        SLI     L
        JR      NC,D1
        RET 
ZER
        SLA     L
        JR      NC,D1
        RET 


;+-----------------------+
;|  A,HL=(A,HL)/(B,DE)   |
;+-----------------------+

DIVISIO
        LD      C,A
        XOR     A
        EXX 
        LD      HL,1
        LD      B,H
        EXX 
DIV1
        SLA     L
        RL      H
        RL      C
        RLA 
        CP      B
        JR      C,DIV2
        JR      NZ,DIV3
        EX      AF,AF'
        LD      A,C
        CP      D
        JR      C,DIV22
        JR      NZ,DIV32
        LD      A,H
        CP      E
        JR      C,DIV22
DIV32
        EX      AF,AF'
DIV3
        EX      AF,AF'
        LD      A,L
        LD      L,H
        LD      H,C
        AND     A
        SBC     HL,DE
        LD      C,H
        LD      H,L
        LD      L,A
        JR      NC,DIV33
        EX      AF,AF'
        SUB     B
        DEC     A
DIV34
        EXX 
        SLI     L
        RL      H
        RL      B
        EXX 
        JP      NC,DIV1
        JP      DIVEXIT
DIV22
        EX      AF,AF'
DIV2
        EXX 
        SLA     L
        RL      H
        RL      B
        EXX 
        JP      NC,DIV1
DIVEXIT
        EXX 
        PUSH    HL
        LD      A,B
        EXX 
        POP     HL
        RET 
DIV33
        EX      AF,AF'
        SUB     B
        JP      DIV34


;+-----------------------+
;|      HL = HL/DE       |
;+-----------------------+
;1.DIV - 
;
;INPUT : HL <-- 
;        DE <--  
;OUTPUT: HL = HL/DE
;
;  DE,HL,A

DIV     LD      A,D
        OR      E
        RET     Z
        PUSH    DE
        PUSH    BC
        LD      A,1
DIV_0   PUSH    HL
        SBC     HL,DE
        JP      C,HL0
        SBC     HL,DE
        JP      C,DIV_1
DIV_01  INC     A
        SLA     E
        RL      D
        POP     HL
        JP      DIV_0
DIV_1   POP     HL
        LD      BC,0
DIV_2   AND     A
        JP      NZ,DIV_3
        LD      H,B
        LD      L,C
        POP     BC
        POP     DE
        RET 
DIV_3   SBC     HL,DE
        JP      NC,DIV_4
        ADD     HL,DE
DIV_4   CCF 
        RL      C
        RL      B
        SRL     D
        RR      E
        DEC     A
        JP      DIV_2
HL0     CP      1
        JP      NZ,DIV_01
        POP     HL
        POP     BC
        POP     DE
        LD      HL,0
        RET 
;+-----------------------+
;|     HL = DE*DE        |
;+-----------------------+
;2.KARE -   
;
;INPUT : DE <-- 
;OUTPUT: HL = DE*DE
;
;  DE,HL,BC,A

KARE    LD      B,D
        LD      C,E
;+-----------------------+
;|     HL = DE*BC        |
;+-----------------------+
;3.MUL16 - 
;
;INPUT : DE <-- 
;        BC <--  
;OUTPUT: HL = DE*BC
;
;  DE,HL,BC,A

MUL16   LD      HL,0
MUL16_2 LD      A,B
        OR      C
        RET     Z
        SRL     B
        RR      C
        JP      NC,MUL16_0
        ADD     HL,DE
MUL16_0 SLA     E
        RL      D
        JP      MUL16_2
        RET 

;+-----------------------+
;|HL = SQR (HL)          |
;+-----------------------+
;4.RAS -  
;
;INPUT : HL <--  
;OUTPUT: HL = SQR (HL)
;
;  DE,HL,BC,A

RAS     LD      A,H
        OR      L
        JR      Z,RAS_4
RAS1
        LD      A,H
        AND     A
        JP      NZ,RAS11
        LD      A,L
        CP      1
        JP      NZ,RAS11
        LD      HL,1
        RET 
RAS11   LD      B,H
        LD      C,L
        SRL     B
        RR      C
RAS_1   PUSH    HL
        LD      D,B
        LD      E,C
        CALL    DIV
        ADD     HL,BC
        SRL     H
        RR      L
        PUSH    HL
        LD      D,B
        LD      E,C
        SBC     HL,DE
        JP      NC,RES_10
        ADD     HL,DE
        EX      DE,HL
        SBC     HL,DE
RES_10  LD      A,H
        AND     A
        JP      NZ,RAS_0
        LD      A,L
        CP      2
        JP      NC,RAS_0
        POP     HL
        POP     BC
        RET 
RAS_0   POP     BC
        POP     HL
        JP      RAS_1
RAS_4   LD      HL,0
        RET 

SQR
        OR A
        LD A,L
        LD L,H
        LD DE,64
        LD H,D
        LD B,7
SQR0
        SBC HL,DE
        JR NC,$+3
        ADD HL,DE
        CCF 
        RL D
        RLA 
        ADC HL,HL
       JP C,0
        RLA 
        ADC HL,HL
       JP C,0
        DJNZ SQR0
        SBC HL,DE
       ;JR NC,$+3
       ;ADD HL,DE
        CCF 
        RL D
       ;RLA
       ;ADC HL,HL
       ;RLA
       ;ADC HL,HL
        RET 


;+-----------------------+
;|     HL = HL*A         |
;+-----------------------+
;5.MHLA  - 
;
;INPUT : HL <-- 
;        A <--  
;OUTPUT: HL = HL*A
;
;  DE,HL,A

MHLA    AND     A
        JR      Z,M1H  ;FASTED bY CREATOR
        EX      DE,HL
        LD      HL,0
M2H     SRL     A
        JP      NC,M3H
        ADD     HL,DE
M3H     SLA     E
        RL      D
        AND     A
        JP      NZ,M2H
        RET 
M1H     LD      H,A
        LD      L,A
        RET 

;+-----------------------+
;|      HL = A!          |
;+-----------------------+
;6.FACT - 
;
;INPUT : A<--  
;OUTPUT: HL = A!
;
;  DE,HL,A

FACT    LD      HL,1
        EX      DE,HL
FACT_   AND     A
        RET     Z
        PUSH    AF
        CALL    MULT_N
        EX      DE,HL
        POP     AF
        DEC     A
        JP      FACT_

;+-----------------------+
;|      HL = BC^A        |
;+-----------------------+
;7.MULT_N -  
;           
;
;INPUT : BC <-- 
;        A<-- 
;OUTPUT: HL = BC^A
;
;  DE,HL,BC,A

MULT_N  LD      D,B
        LD      E,C
MULT_N0 DEC     A
        AND     A
        JP      Z,MULT_N1
        PUSH    AF
        CALL    MUL16
        POP     AF
        EX      DE,HL
        JP      MULT_N0
MULT_N1 EX      DE,HL
        RET 

;+-----------------------+
;|HL = (DE*PI)/180       |
;+-----------------------+



;8.PER -  -> 
;
;INPUT : DE <-- 
;OUTPUT: HL = (DE*PI)/180
;
;  DE,HL,BC,A

PER     LD      BC,314
        CALL    MUL16
        LD      DE,180
        CALL    DIV
        RET 

;+-----------------------+
;|HL = (DE*180)/PI       |
;+-----------------------+
;9.PER_INV -  -> 
;
;INPUT : DE <-- 
;OUTPUT: HL = (DE*180)/PI
;
;  DE,HL,BC,A

PER_INV LD      BC,180
        CALL    MUL16
        LD      DE,314
        CALL    DIV
        RET 

;+-----------------------+
;|     A = SIN           |
;+-----------------------+
;10.SIN - f  
;
;INPUT : C <-- ,C = (0,180)
;OUTPUT: A = SIN
;
;  DE,HL,BC,A

SIN     LD      A,90
        CP      C
        JP      NC,SIN0
        RLA 
        SUB     C
        LD      C,A
SIN0    LD      E,C
        LD      D,0
        LD      HL,TABLESC
        ADD     HL,DE
        LD      A,(HL)
        RET 

;+-----------------------+
;|     A = COS           |
;+-----------------------+
;11.COS - f  
;
;INPUT : C <--  C = (0,180)
;OUTPUT: A = COS
;
;  DE,HL,BC,A

COS     LD      A,90
        CP      C
        JP      NC,COS0
        RLA 
        SUB     C
        LD      C,A
COS0    LD      E,C
        LD      D,0
        LD      HL,TABLESC+90
        SBC     HL,DE
        LD      A,(HL)
        RET 

; TABLESC   f-
;SIN  COS

TABLESC DEFB 0,1,3,5,7,9,10,12,14
        DEFB 16,17,19,21,23,24
        DEFB 26,28,29,31,33,34,36
        DEFB 37,39,41,42,44,45,47
        DEFB 48,50,52,53,54,56,57
        DEFB 59,60,62,63,64,66,67,68
        DEFB 69,71,72,73,74,75,77,78
        DEFB 79,80,81,82,83,84,85
        DEFB 86,87,87,88,89,90,91,91
        DEFB 92,93,93,94,95,95,96
        DEFB 96,97,97,97,98,98,98,99
        DEFB 99,99,99,100,100,100
        DEFB 100,100,100

;+---------+
;| DOWN_HL |
;+---------+

DOWN_HL
        INC H
        LD A,H
        AND 7
        JR NZ,$+2+1+2+1+2+1+2+1
        LD A,L
        ADD A,#20
        LD L,A
        JR C,$+2+1+2+1
        LD A,H
        SUB 8
        LD H,A
        RET 

 ;+---------+
;| DOWN_DE |
;+---------+

DOWN_DE
        INC D
        LD A,D
        AND 7
        RET NZ
        LD A,E
        ADD A,#20
        LD E,A
        RET C
        LD A,D
        SUB 8
        LD D,A
        RET 


UP_DE
        DEC D
        LD A,D
        AND 7
        CP 7
        JR NZ,$+2+1+2+1+2+1+2+1
        LD A,E
        SUB #20
        LD E,A
        JR C,$+2+1+2+1
        LD A,D
        ADD A,8
        LD D,A
        RET 
UP_HL
        DEC H
        LD A,H
        AND 7
        CP 7
        JR NZ,$+2+1+2+1+2+1+2+1
        LD A,L
        SUB #20
        LD L,A
        JR C,$+2+1+2+1
        LD A,H
        ADD A,8
        LD H,A
        RET 

;+---------+
;| SET_ADR |
;+---------+

SET_ADR

;B-Y,C-X
        LD A,B
        RRCA 
        RRCA 
        RRCA 
        AND #E0
        LD L,A
        LD A,B
        AND #18
        OR #40
        LD H,A
        LD B,0
        ADD HL,BC
        RET 
;+---------+
;| SET_ATR |
;+---------+

SET_ATR
;HL-SCREEN ADRESS
        LD A,H
        RRCA 
        RRCA 
        RRCA 
        AND #0B
        OR #50
        LD H,A
        RET 

ON_INT
        DI 
        PUSH HL,DE,BC,AF
        EXX 
        EXA 
        PUSH HL,DE,BC,AF,IX,IY

PAG_OUT LD A,#10
        CALL PAG_128
        POP IY,IX,AF,BC,DE,HL
        EXA 
        EXX 
        POP AF,BC,DE,HL
        EI 
        RET 

;+---------+
;| SET_INT |
;+---------+
SET_INT DI 
        LD HL,INT
        LD A,H
        LD I,A
        INC A
        IM 2
        LD (HL),A
        INC L
        JR NZ,$-2
;       EI
        INC H
        LD (HL),A
        LD L,H
        LD (HL),#C3
        INC L
        LD (HL),.ON_INT
        INC L
        LD (HL),'ON_INT
        RET 
;+-----------------------+       ;MOD.
;|       ADRES_P         |
;+-----------------------+

;IN D-Y, E-X

ADRES_P LD A,D
        AND A
        RRA 
        SCF 
        RRA 
        AND A
        RRA 
        XOR D
        AND #F8
        XOR D
        LD H,A
        LD A,E
        RLCA 
        RLCA 
        RLCA 
        XOR D
        AND #C7
        XOR D
        RLCA 
        RLCA 
        LD L,A
        LD A,E
        AND 7
        RET 

;+-----------------------+      ;ORIGINAL
;|       ADRES_P         |
;+-----------------------+
;IN E-Y
;IN D-X

ADRES_P
        LD A,E
        AND A
        RRA 
        SCF 
        RRA 
        AND A
        RRA 
        XOR E
        AND #F8
        XOR E
        LD H,A
        LD A,D
        RLCA 
        RLCA 
        RLCA 
        XOR E
        AND #C7
        XOR E
        RLCA 
        RLCA 
        LD L,A
        RET 

;+-----------------------+
;|       SINMAKE         |
;+-----------------------+

;IN:    DE-ADR OF TAB
;       B-DX
;       C-AMPLITUDE

SINMAKE
        INC C
        LD HL,SIN_DAT
        PUSH BC
        LD B,E
LP_SMK1 PUSH HL
        LD H,(HL)
        LD L,B
        LD A,#08
LP_SMK2 ADD HL,HL
        JR NC,$+3
        ADD HL,BC
        DEC A
        JR NZ,LP_SMK2
        LD A,H
        LD (DE),A
        POP HL
        INC HL
        INC E
        BIT 6,E
        JR Z,LP_SMK1
        LD H,D
        LD L,E
        DEC L
        LD A,(HL)
        LD (DE),A
        INC E
LP_SMK3 LD A,(HL)
        LD (DE),A
        INC E
        DEC L
        JR NZ,LP_SMK3
LP_SMK4 LD A,(HL)
        NEG 
        LD (DE),A
        INC L
        INC E
        JR NZ,LP_SMK4
        POP BC
LP_SMK5 LD A,(DE)
        ADD A,B
        LD (DE),A
        INC E
        JR NZ,LP_SMK5
        RET 
;
SIN_DAT
DB  #00,#06,#0D,#13,#19,#1F,#25,#2C
DB  #32,#38,#3E,#44,#4A,#50,#56,#5C
DB  #62,#67,#6D,#73,#78,#7E,#83,#88
DB  #8E,#93,#98,#9D,#A2,#A7,#AB,#B0
DB  #B4,#B9,#BD,#C1,#C5,#C9,#CD,#D0
DB  #D4,#D7,#DB,#DE,#E1,#E4,#E7,#E9
DB  #EC,#EE,#F0,#F2,#F4,#F6,#F7,#F9
DB  #FA,#FB,#FC,#FD,#FE,#FE,#FF,#FF
;------------------------

L1
        EI 
        HALT 
        LD A,1
        OUT (#FE),A
        CALL BACMOVE
        XOR A
        OUT (#FE),A
        LD A,#7F
        IN A,(#FE)
        RRCA 
        JR C,L1
        RET 
PAG128
        LD BC,#7FFD
PAG1281 OR 0
        OUT (C),A
        RET 

TST_SPR
        LD      A,SCR_PAG
        CALL    PAG_128
        LD      DE,#4000
        LD      HL,#DB00
        LD      LX,#C0
TST_SP2
        PUSH    DE
        LD      BC,#20
        LDIR 
        POP     DE
        CALL    DOWN_DE
        DEC     LX
        JR      NZ,TST_SP2
        RET 

;--------------------------
MUS_SPD EQU     3

        LD HL,(ACT_TAB)
        LD (COUNTER+1),HL


WAITPATTERN
WAITP2
WAITP1  LD C,#FF
        EI 
        HALT 
        LD A,(PCOUNT+1)
        CP C
        JR Z,WAITP2
        RET 
        RET 
        RET 
COUNTPLAY
        LD A,PG6
        CALL PAG_128
        CALL #C005
        LD HL,(#C49A)   ;POS
COUNTP1 LD DE,0
        AND A
        SBC HL,DE
        LD A,L
        DEC A
        LD (PCOUNT+1),A
PCOUNT  LD A,0

COUNTER LD HL,#40
NCOUNT  LD DE,0
SPD_CNT LD A,MUS_SPD
        DEC A
        JR NZ,SPD_CN1
        LD A,(#C464)    ;CURRENT TEMPO
        INC DE
        LD (NCOUNT+1),DE
SPD_CN1
        LD (SPD_CNT+1),A
        AND A
        SBC HL,DE
        RET NZ
JUMPER  LD HL,ACT_TAB+2
        LD A,(HL)
        CP #FF
        RET Z
        INC HL
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD (JUMPER+1),HL
        LD (COUNTER+1),DE
        ADD A,A
        LD C,A
        LD B,0
        LD HL,JMP_ACT
        ADD HL,BC
        LD E,(HL)
        INC HL
        LD D,(HL)
        EX DE,HL
        LD A,(PCOUNT+1)
        LD (WAITP1+1),A
        JP (HL)



ACT_TAB
NOTENUM EQU    0

        DW      #0+NOTENUM
        DB      6       ;ATR_FX

        NOTENUM=NOTENUM+#2C

        DW      #0+NOTENUM-6
        DB      0       ;STUBS
        DW      #FF,#FF


FOR_SP  DW      0
FRSP_HL
        LD      (HL),#ED
        INC     HL
        LD      (HL),#73
        INC     HL
        LD      (HL),.FOR_SP
        INC     HL
        LD      (HL),'FOR_SP
        INC     HL
        RET 
FRMSP_HL
        LD      (HL),#ED
        INC     HL
        LD      (HL),#7B
        INC     HL
        LD      (HL),.FOR_SP
        INC     HL
        LD      (HL),'FOR_SP
        INC     HL
        LD      (HL),#C9
        INC     HL
        RET 
;---------------------------------------
; Depacker Laser Compact 5.2
; +0(5): "LCMP5"
; +5(2): Length screen without header
; +7(1): Additional info length:
;-------
; 11 byte - File name
; N byte - Comment.
;-------
;(C) Hrumer. 06.12.99. Hrumer@inbox.ru
;
; IN: HL - Address of compressed screen
;---------------------------------------


ADR     EQU #4000;#8000;#C000

DECOMPR
        LD DE,7;SKIP "LCMP5" & LENGTH
        ADD HL,DE

        LD A,(HL)
        INC HL
        LD E,A
        ADD HL,DE

        LD A,(HL)
        LD E,A;

        AND 3
        RLCA 
        RLCA 
        RLCA 
ADR256  OR ADR/256

        EXX 
        LD D,A;
        LD E,0
        EXX 

        LD A,(HL)
        INC HL
ADR18   XOR ADR/256+#18
        AND #FC
        LD HX,A; . .

DLC1    LD A,(HL)
        INC HL
        LD LX,#FF
DLC2
        EXX 
        JR NZ,DLC10
        LD B,1

DLC3    EX AF,AF'
        SLA D
        JR NZ,$+6
        LD D,(HL)
        INC HL
        SLI D

        DJNZ DLC7

        JR C,DLC1

        INC B
;-----------
DLC4    LD C,%01010110
        LD A,#FE
DLC5    SLA D
        JR NZ,$+6
        LD D,(HL)
        INC HL
        RL D
        RLA 
        SLA C
        JR Z,DLC6
        JR C,DLC5
        RRCA 
        JR NC,DLC5
        SUB 8
DLC6    ADD A,9
;---------
        DJNZ DLC3

        CP 0-8+1
        JR NZ,$+4
        LD A,(HL)
        INC HL

        ADC A,#FF
        LD LX,A
        JR C,DLC4
        LD HL,#2758
        EXX 
        RET 
;-------------
DLC7    LD A,(HL)
        INC HL

        EXX 
        LD L,A
        EX AF,AF'
        LD H,A
        ADD HL,DE

        CP #FF-2
        JR NC,DLC8
        DEC LX
DLC8
        LD A,H
        CP HX
        JR NC,DLC13
        XOR L
        AND #F8
        XOR L
        LD B,A
        XOR L
        XOR H
        RLCA 
        RLCA 
        LD C,A

DLC9    EX AF,AF'
        LD A,(BC)
DLC10   EX AF,AF'
        LD A,D
        CP HX
        JR NC,DLC14
        XOR E
        AND #F8
        XOR E
        LD B,A
        XOR E
        XOR D
        RLCA 
        RLCA 
        LD C,A

DLC11   EX AF,AF'
        LD (BC),A

        INC DE
        JR NC,$+4
        DEC HL
        DEC HL
        INC HL
        EX AF,AF'
        INC LX
        JR NZ,DLC8
        JR DLC2

DLC13   SCF 
DLC14   PUSH AF
        EXX 
        ADD A,E
        EXX 
        LD B,A
        POP AF
        LD C,E
        JR NC,DLC11
        LD C,L
        JR DLC9
LENGDEC EQU $-DECOMPR

PTABFIL
        LD HL,PTABLE+#100
        LD DE,#E0F8
        LD BC,#FF80
PTF1    INC B
        LD A,B
        SRL A
        SCF 
        RRA 
        SRL A
        XOR B
        AND E
        XOR B
;       OR  #C0
        LD (HL),A
        DEC H
        LD A,B
        RLCA 
        RLCA 
        AND D
        LD (HL),A
        INC H
        INC L
        LD A,B
        CP #BF
        JR NZ,PTF1
PTF2    XOR A
        LD (HL),A
        DEC H
        LD (HL),A
        INC H
        INC L
        JR NZ,PTF2
        INC H
PTF3    LD A,L
        AND E
        RRCA 
        RRCA 
        RRCA 
        LD (HL),A
        INC H
        LD (HL),C
        DEC H
        RRC C
        INC L
        JR NZ,PTF3
        RET 

XPLOT
        LD H,'PTABLE       ;7
        LD L,D             ;4
        LD A,(HL)          ;7
        INC H               ;4
        LD D,(HL)          ;7
        INC H               ;4
        LD L,E             ;4
        ADD A,(HL)          ;7
        LD E,A             ;4
        INC H               ;4
        LD A,(DE)          ;7
        OR (HL)            ;7
        LD (DE),A          ;7=73!!!
        RET 
SCR_FIL
        LD HL,#C000
        LD DE,#C001
        LD BC,#1800
        LD (HL),L
        LDIR 
        LD (HL),A
        LD BC,#2FF
        LDIR 
        RET 

; ,  
;Hrust1:  ( Hrust1.0, Hrust1.1)
;
;   SP,   -
;      -
; .  #121(289) .
;         !!!!!!
;
;  "", -
;   256 .
;    SP.
;
; :
;+0(2):"HR" -  
;+2(2) -   
;+4(2) -   
;
;     :
;HL -  
;DE -  
;   (CALL DEHRUST).
; /  
;,   .
;    , 
;    .
;    
; ( 6   ).
;
;Example:
;1) LD HL,#8000:LD DE,#8000:CALL DEHRUST
;2) LD HL,#C000:LD DE,#8000:CALL DEHRUST
;
;              ?
;
;**************************************
;*    E-mail: dp@fmf.gasu.gorny.ru    *
;*    tel:(38822) 244-21. .    *
;*     . . - .     *
;*         01.03.97 - 28.12.98        *
;**************************************



DEHRUST PUSH DE
        PUSH HL
        INC HL
        INC HL
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        DEC BC
        EX DE,HL
        ADD HL,BC
        EX DE,HL
        LD C,(HL)
        INC HL
        LD B,(HL)
        DEC BC
        POP HL
        ADD HL,BC
        SBC HL,DE
        ADD HL,DE
        JR C,LL4019
        LD D,H
        LD E,L
LL4019  LDDR 
        EX DE,HL
        POP DE
        LD C,#0C
        ADD HL,BC
        PUSH HL
        POP IX
        LD A,#03
LL4025  DEC HL
        LD B,(HL)
        DEC HL
        LD C,(HL)
        PUSH BC
        DEC A
        JR NZ,LL4025
        LD B,A
        EXX 
        LD D,#BF
        LD C,#10
        CALL LL4115
LL4036  LD A,(IX+#00)
        INC IX
        EXX 
LL403C  LD (DE),A
        INC DE
LL403E  EXX 
LL403F  ADD HL,HL
        DJNZ LL4045
        CALL LL4115
LL4045  JR C,LL4036
        LD E,#01
LL4049  LD A,#80
LL404B  ADD HL,HL
        DJNZ LL4051
        CALL LL4115
LL4051  RLA 
        JR C,LL404B
        CP #03
        JR C,LL405D
        ADD A,E
        LD E,A
        XOR C
        JR NZ,LL4049
LL405D  ADD A,E
        CP #04
        JR Z,LL40C4
        ADC A,#FF
        CP #02
        EXX 
LL4067  LD C,A
LL4068  EXX 
        LD A,#BF
        JR C,LL4082
LL406D  ADD HL,HL
        DJNZ LL4073
        CALL LL4115
LL4073  RLA 
        JR C,LL406D
        JR Z,LL407D
        INC A
        ADD A,D
        JR NC,LL4084
        SUB D
LL407D  INC A
        JR NZ,LL408D
        LD A,#EF
LL4082  RRCA 
        CP A
LL4084  ADD HL,HL
        DJNZ LL408A
        CALL LL4115
LL408A  RLA 
        JR C,LL4084
LL408D  EXX 
        LD H,#FF
        JR Z,LL409B
        LD H,A
        INC A
        LD A,(IX+#00)
        INC IX
        JR Z,LL40A6
LL409B  LD L,A
        ADD HL,DE
        LDIR 
LL409F  JR LL403E
LL40A1  EXX 
        RRC D
        JR LL403F
LL40A6  CP #E0
        JR C,LL409B
        RLCA 
        XOR C
        INC A
        JR Z,LL40A1
        SUB #10
LL40B1  LD L,A
        LD C,A
        LD H,#FF
        ADD HL,DE
        LDI 
        LD A,(IX+#00)
        INC IX
        LD (DE),A
        INC HL
        INC DE
        LD A,(HL)
        JP LL403C
LL40C4  LD A,#80
LL40C6  ADD HL,HL
        DJNZ LL40CC
        CALL LL4115
LL40CC  ADC A,A
        JR NZ,LL40F3
        JR C,LL40C6
        LD A,#FC
        JR LL40F6
LL40D5  LD B,A
        LD C,(IX+#00)
        INC IX
        CCF 
        JR LL4068
LL40DE  CP #0F
        JR C,LL40D5
        JR NZ,LL4067
        LD B,#03
        EX DE,HL
LL40E7  POP DE
        LD (HL),E
        INC HL
        LD (HL),D
        INC HL
        DJNZ LL40E7
        LD HL,#2758
        EXX 
        RET 
LL40F3  SBC A,A
        LD A,#EF
LL40F6  ADD HL,HL
        DJNZ LL40FC
        CALL LL4115
LL40FC  RLA 
        JR C,LL40F6
        EXX 
        JR NZ,LL40B1
        BIT 7,A
        JR Z,LL40DE
        SUB #EA
        ADD A,A
        LD B,A
LL410A  LD A,(IX+#00)
        INC IX
        LD (DE),A
        INC DE
        DJNZ LL410A
        JR LL409F
LL4115  LD B,C
        LD L,(IX+#00)
        INC IX
        LD H,(IX+#00)
        INC IX
        RET 
LCODE   EQU $-DEHRUST

SHUT_UP
        LD DE,#E00
SHUT    DEC D
        LD BC,-3
        OUT (C),D
        LD B,#BF
        OUT (C),E
        JR NZ,SHUT
        RET 


;CHANNEL SWAP
        LD A,(23608)
        RES 5,A
        CP "B"
        JR Z,NOCHAN
        PUSH AF
        CP "A"
        CALL Z,A2B
        POP AF
        CP "C"
        CALL Z,B2C
NOCHAN
        CALL INITMUS

MODSTART=#CC00 ;SET ON ProTracker Compilation OF

A2B     ;SWAP A AND B CHANNELS
        LD      A,197
        LD      (L35996),A
        LD      A,193
        LD      (L35998),A
B2C     ;SWAP B AND C CHANNELS
        LD      HL,MODSTART
        DI 
        LD      (L36016),SP
        LD      D,H
        LD      E,L
        LD      BC,100
        ADD     HL,BC
        INC     HL
        LD      SP,HL
        ADD     HL,BC
        XOR     A
L35978  LD      C,(HL)
        INC     C
        JR      Z,L35990
        DEC     C
        INC     HL
        CP      C
        JR      NC,L35978
        LD      A,C
        JR      L35978
L35990  POP     HL
        POP     HL
        ADD     HL,DE
        LD      SP,HL
L35994  POP     BC
        POP     DE
L35996  POP     HL
        PUSH    DE
L35998  PUSH    HL
        POP     DE
        POP     HL
        SUB     3
        JR      NC,L35994
        LD      A,225
        LD      (L35996),A
        LD      A,229
        LD      (L35998),A
        LD      SP,0
L36016  EQU     $-2
        EI 
        RET 

;---PRINT HEX NUMBER
        LD A,#17
        CALL PAG_128
        LD A,(ROTX)
        LD DE,#C000
        CALL HEX_BYT
        RET 
HEX_BYT
        PUSH AF
        RRA 
        RRA 
        RRA 
        RRA 
        CALL OUT_H
        POP AF
OUT_H
        AND #F
        CP #A
        JR C,O_H1
        ADD A,7
O_H1
        ADD A,48
        LD L,A
        LD H,0
        ADD HL,HL
        ADD HL,HL
        ADD HL,HL
        LD BC,#3C00
        ADD HL,BC
        PUSH DE
        DUP 3
        LD A,(HL)
        LD (DE),A
        RES 7,D
        LD (DE),A
        INC L
        INC D
        LD A,(HL)
        LD (DE),A
        SET 7,D
        LD (DE),A
        INC L
        INC D
        EDUP 
        LD A,(HL)
        LD (DE),A
        RES 7,D
        LD (DE),A
        INC L
        INC D
        LD A,(HL)
        LD (DE),A
        SET 7,D
        LD (DE),A

        POP DE
        INC E
        RET 

;IN
;B-AMPLITUDE
;C-PHASE
;E-ADDNUM

;OUT
;A-SINUS

TAKESIN
        LD      D,C
        LD      A,C
        RES     7,A
TAKESN3
        CP      #40
        JR      C,TAKESN1
        SUB     #3F
        LD      C,A
        LD      A,#40
        SUB     C
TAKESN1
        LD      C,A
        LD      H,'SIN_DAT
        LD      L,C
        LD      H,(HL)
        LD      L,0
        LD      C,B
        LD      B,L
        DUP     8
        ADD     HL,HL
        JR      NC,$+3
        ADD     HL,BC
        EDUP 
        LD      A,D
        CP      #80
        LD      A,H
        JR      C,TAKESN2
        NEG 
TAKESN2
        ADD     A,E
        RET 

;8*8=16 HL=L*E  (ALL SIGNED)
MULS    LD H,'TBXX
        LD C,(HL)
        INC H
        LD B,(HL)
        LD A,L
        ADD A,E
        JP PE,MUL
        LD L,E
        LD D,(HL)
        DEC H
        LD E,(HL)
        LD L,A
        LD A,(HL)
        INC H
        LD H,(HL)
        LD L,A
        SBC HL,BC,HL,DE
        SRA H
        RR L
        RET 
MUL     LD A,L
        SUB E
        LD L,E
        LD D,(HL)
        DEC H
        LD E,(HL)
        LD L,A
        LD A,(HL)
        INC H
        LD H,(HL)
        LD L,A
        EX DE,HL
        ADD HL,BC
        SBC HL,DE
        SRA H
        RR L
        RET 

;GEN TABLE Y.W=X*X   X=(-128;127)
GENXX   LD DE,TBXX
        LD IX,TBXX
        LD L,E,H,E,B,E,C,E
GNXX    CALL GNXX1
        LD (IX),L
        INC HX
        LD (IX),H
        DEC HX
        ADD HL,BC
        INC C
        ADD HL,BC
        DEC LX
        INC E
        JP P,GNXX
GNXX1   LD A,L
        LD (DE),A
        INC D
        LD A,H
        LD (DE),A
        DEC D
        RET 

CHECKDOTS
        LD A,PG7
        LD (PAG_OUT+1),A
        CALL PAG128
        LD LX,ONELEVEL*LEVELS
        LD BC,BLOBTAB
CHECKD1
        LD A,(BC)
        LD E,A
        INC BC
        LD A,(BC)
        LD D,A
        INC BC
        LD H,'PTABLE       ;7
        LD L,D             ;4
        LDA,(HL)          ;7
        INC H               ;4
        LD D,(HL)          ;7
        INC H               ;4
        LD L,E             ;4
        ADD A,(HL)          ;7
        LD E,A             ;4
        INC H               ;4
        LD A,(DE)          ;7
        OR (HL)            ;7
        LD (DE),A          ;7=73!!!
        DEC LX
        JR NZ,CHECKD1
        RET 

;HL=HL*A        8.8*8

MLW0    LD HL,0
        RET 

MULWB   EX DE,HL
        LD HL,0
        LD C,L
MULW1   OR A
        JR Z,MLW2
        DUP 8
        RRA 
        JR NC,$+3
        ADD HL,DE
        RR H,L
        EDUP 
        RRA 
        LD D,A,E,C
        RET 


MLW3    LD A,L,L,H,H,0
        LD C,A,A,B
        JR MULW1
MLW2    LD A,L,L,H,H,0
        LD D,A,E,C
        RET 

