        ORG #C000;            FXM Player
;source restored
;from Disassembled code
;(c)BUDDER/MGN
;---------------------------------------
START   JP INIT
        JP STOP
        JP PLAY
;---------------------------------------
INIT    LD DE,(MUZ+4);Only for FXM files
        LD HL,MUZ+6
        OR A:SBC HL,DE
        LD (MKR+1),HL
        LD (MR2+1),HL
        LD (MR3+1),HL
        LD (MR4+1),HL
        LD (MR5+1),HL
        LD (MR6+1),HL
        LD (MR7+1),HL
        EX DE,HL
;-------
        DI
        LD HL,(MUZ+0+6):ADD HL,DE
        LD (AA13),HL
        LD HL,(MUZ+2+6):ADD HL,DE
        LD (AA27),HL
        LD HL,(MUZ+4+6):ADD HL,DE
        LD (AA3B),HL

        LD A,1
        LD (AA15),A
        LD (AA29),A
        LD (AA3D),A
        LD A,8
        LD (AA16),A
        LD (AA2A),A
        LD (AA3E),A

        LD HL,A9D3
        LD DE,#20
        LD (A9AD),HL:ADD HL,DE
        LD (A9AF),HL:ADD HL,DE
        LD (A9B1),HL

        LD HL,0
        LD (AA21),HL
        LD (AA35),HL
        LD (AA49),HL
        LD (AA23),HL
        LD (AA37),HL
        LD (AA4B),HL

        XOR A
        LD (A9A7),A
        EI
        RET

STOP    DI
        LD A,#FF
        LD D,#07
        CALL AB4E
        CALL AB38
        EI
        RET

;---------------------------------------
;                                   DATA
A999    DS 13
A9A6    NOP
A9A7    NOP
A9A8    NOP
A9A9    DS 2
A9AB    DS 2
A9AD    DS 2
A9AF    DS 2
A9B1    DS 34
A9D3    DS 64
AA13    DS 2
AA15    NOP
AA16    DS 11
AA21    DS 2
AA23    DS 4
AA27    DS 2
AA29    NOP
AA2A    DS 11
AA35    DS 2
AA37    DS 4
AA3B    DS 2
AA3D    NOP
AA3E    DS 11
AA49    DS 2
AA4B    DS 4

TABLE   DB #BF,#0F,#DC,#0E
        DB #07,#0E,#3D,#0D
        DB #7F,#0C,#CC,#0B
        DB #22,#0B,#82,#0A
        DB #EB,#09,#5D,#09
        DB #D6,#08,#57,#08
        DB #DF,#07,#6E,#07
        DB #03,#07,#9F,#06
        DB #40,#06,#E6,#05
        DB #91,#05,#41,#05
        DB #F6,#04,#AE,#04
        DB #6B,#04,#2C,#04
        DB #F0,#03,#B7,#03
        DB #82,#03,#4F,#03
        DB #20,#03,#F3,#02
        DB #C8,#02,#A1,#02
        DB #7B,#02,#57,#02
        DB #36,#02,#16,#02
        DB #F8,#01,#DC,#01
        DB #C1,#01,#A8,#01
        DB #90,#01,#79,#01
        DB #64,#01,#50,#01
        DB #3D,#01,#2C,#01
        DB #1B,#01,#0B,#01
        DB #FC,#00,#EE,#00
        DB #E0,#00,#D4,#00
        DB #C8,#00,#BD,#00
        DB #B2,#00,#A8,#00
        DB #9F,#00,#96,#00
        DB #8D,#00,#85,#00
        DB #7E,#00,#77,#00
        DB #70,#00,#6A,#00
        DB #64,#00,#5E,#00
        DB #59,#00,#54,#00
        DB #4F,#00,#4B,#00
        DB #47,#00,#43,#00
        DB #3F,#00,#3B,#00
        DB #38,#00,#35,#00
        DB #32,#00,#2F,#00
        DB #2D,#00,#2A,#00
        DB #28,#00,#25,#00
        DB #23,#00,#21,#00
;---------------------------------------
;                                 Player
PLAY    LD IX,AA13
        LD HL,(A9AD)
        LD A,1:CALL AB63
        LD (A9AD),HL

        LD IX,AA27
        LD HL,(A9AF)
        LD A,2:CALL AB63
        LD (A9AF),HL

        LD IX,AA3B
        LD HL,(A9B1)
        LD A,3:CALL AB63
        LD (A9B1),HL

        LD A,(AA3E)
        RLCA
        LD B,A
        LD A,(AA2A)
        OR B
        RLCA
AB2E    LD B,A
        LD A,(AA16)
        OR B
        LD D,7
        CALL AB4E
AB38    LD D,#0D
        LD HL,A9A6
AB3D    LD BC,#FFFD,A,D:OUT A
        LD B,#BF,A,(HL):OUT A
        DEC HL,D:JP P,AB3D
        RET

AB4E    LD BC,A999
        LD H,0,L,D
        ADD HL,BC
        LD (HL),A
        RET

AB57    LD (A9AB),SP
        LD HL,(A9AB)
        LD SP,(A9A9)
        RET

AB63    LD (A9A9),SP
        LD SP,HL
        LD (A9A8),A
        DEC (IX+2):JP Z,AC72
AB71    DEC (IX+6):JR NZ,ABAC
UM0     LD L,(IX+4)
        LD H,(IX+5)
        LD A,(HL):CP #80:JR NZ,UM1
        INC HL:LD E,(HL)
        INC HL:LD D,(HL)

        PUSH HL
MKR     LD HL,0:ADD HL,DE:EX DE,HL
        POP HL

        LD (IX+4),E
        LD (IX+5),D
        JR UM0

UM1     CP #1E:JR C,AB9D
        SUB #32
        LD (IX+9),A
        LD (IX+6),1
        INC HL
        JR ABA6

AB9D    LD (IX+9),A:INC HL
        LD A,(HL)
        LD (IX+6),A:INC HL
ABA6    LD (IX+4),L
        LD (IX+5),H
ABAC    LD A,(IX+7):OR (IX+8):JP Z,AC35
        BIT 2,(IX+#0E):JP NZ,AC35
        LD L,(IX+#0C)
        LD H,(IX+#0D)
ABC2    LD A,(HL):INC HL
        LD (IX+#0C),L
        LD (IX+#0D),H
        CP #80:JR NZ,ABD4
        LD A,(HL):INC HL
        LD H,(HL)
        LD L,A

        PUSH DE
MR2     LD DE,0:ADD HL,DE
        POP DE
        JR ABC2

ABD4    CP #82:JP NZ,ABE0
        SET 3,(IX+#0E)
        JP ABC2

ABE0    CP #83:JP NZ,ABEC
        RES 3,(IX+#0E)
        JP ABC2

ABEC    CP #84:JP NZ,ABFC
        LD A,9
        XOR (IX+#03)
        LD (IX+#03),A
        JP ABC2

ABFC    BIT 3,(IX+#0E):JP Z,AC1E
        ADD A,(IX+#12)
        LD (IX+#12),A
        DEC A
        ADD A,A
        LD E,A
        LD D,0
        LD HL,TABLE
        ADD HL,DE
        LD A,(HL),(IX+7),A:INC HL
        LD A,(HL),(IX+8),A
        JP AC35

AC1E    LD E,A
        LD D,0
        LD L,(IX+7)
        LD H,(IX+8)
        AND #80:JP Z,AC2E
        LD D,#FF
AC2E    ADD HL,DE
        LD (IX+7),L
        LD (IX+8),H
AC35    LD A,(A9A7)
        LD D,6
        CALL AB4E
        RES 2,(IX+#0E)
        LD A,(A9A8)
        ADD A,7
        LD D,A
        LD A,(IX+7):OR (IX+8):JR Z,AC52
        LD A,(IX+9)
AC52    CALL AB4E
        LD A,(A9A8)
        DEC A
        ADD A,A
        LD D,A
        LD A,(IX+7)
        CALL AB4E
        INC D
        LD A,(IX+8)
        CALL AB4E
        JP AB57

AC6B    LD (IX+0),L
        LD (IX+1),H
        RET

AC72    LD L,(IX+0)
        LD H,(IX+1)
        LD A,(HL):INC HL

        CALL AC6B:BIT 7,A:JP NZ,ACEF

        LD (A9AB),HL
        OR A:JR Z,ACA3

        ADD A,(IX+#0F):LD (IX+#12),A
        RES 3,(IX+#0E)

        DEC A:ADD A,A

        LD E,A
        LD D,0
        LD HL,TABLE:ADD HL,DE

        LD E,(HL):INC HL
        LD D,(HL)
        LD HL,(A9AB)
        JR ACA6

ACA3    LD DE,0
ACA6    LD A,(HL)
        INC HL
        CALL AC6B
        LD (IX+2),A
        LD (IX+7),E
        LD (IX+8),D

        LD A,(IX+#10),(IX+#0C),A
        LD A,(IX+#11),(IX+#0D),A

        SET 2,(IX+#0E)
        BIT 1,(IX+#0E):JP NZ,AB71
        BIT 0,(IX+#0E):JP Z,ACD6
        SET 1,(IX+#0E)

ACD6    LD C,(IX+#0A)
        LD B,(IX+#0B)
        LD A,(BC),(IX+9),A
        INC BC
        LD A,(BC):INC BC
        LD (IX+6),A
        LD (IX+4),C
        LD (IX+5),B
        JP AC35

ACEF    AND #7F
        LD (A9AB),HL
        ADD A,A
        LD E,A
        LD D,0
        LD HL,AD05:ADD HL,DE
        LD A,(HL):INC HL
        LD H,(HL)
        LD L,A

        PUSH HL
        LD HL,(A9AB)
        RET

AD05    DW AD23
        DW AD2F
        DW AD3D
        DW AD47
        DW AD59
        DW AD64
        DW AD91
        DW AD6F
        DW AD7F
        DW AD8A
        DW ADA1
        DW ADAF
        DW ADBD
        DW ADCA
        DW ADDA
;---------------------------------------
AD23    PUSH DE
        LD E,(HL):INC HL
        LD D,(HL)
        PUSH HL
MR3     LD HL,0:ADD HL,DE
        LD (IX+0),L
        LD (IX+1),H
        POP HL
        POP DE
        JP AC72

AD2F    PUSH DE
        LD E,(HL):INC HL
        LD D,(HL):INC HL
        PUSH HL
MR4     LD HL,0:ADD HL,DE
        LD (IX+0),L
        LD (IX+1),H
        POP HL
        POP DE

        PUSH HL
        JP AC72

AD3D    LD B,(HL)
        PUSH BC
        INC HL
        PUSH HL
        CALL AC6B
        JP AC72

AD47    POP DE
        POP BC
        DJNZ AD4E
        JP AC72

AD4E    PUSH BC
        PUSH DE
        LD (IX+0),E
        LD (IX+1),D
        JP AC72

AD59    LD A,(HL):INC HL
        LD (A9A7),A
        CALL AC6B
        JP AC72

AD64    LD A,(HL):INC HL
        CALL AC6B
        LD (IX+3),A
        JP AC72

AD6F    PUSH DE
        LD E,(HL):INC HL
        LD D,(HL):INC HL
        PUSH HL
MR5     LD HL,0:ADD HL,DE
        LD (IX+#0A),L
        LD (IX+#0B),H
        POP HL
        POP DE

        CALL AC6B
        JP AC72

AD7F    LD A,(HL)
        INC HL
        CALL AC6B
        LD (IX+#0F),A
        JP AC72

AD8A    POP HL
        CALL AC6B
        JP AC72

AD91    PUSH DE
        LD E,(HL):INC HL
        LD D,(HL):INC HL
        PUSH HL
MR7     LD HL,0:ADD HL,DE
        LD (IX+#10),L
        LD (IX+#11),H
        POP HL
        POP DE

        CALL AC6B
        JP AC72

ADA1    SET 0,(IX+#0E)
        RES 1,(IX+#0E)
        CALL AC6B
        JP AC72

ADAF    RES 0,(IX+#0E)
        RES 1,(IX+#0E)
        CALL AC6B
        JP AC72

ADBD    LD E,(HL):INC HL
        LD D,(HL):INC HL
        PUSH HL
MR6     LD HL,0:ADD HL,DE:EX DE,HL
        POP HL

        CALL AC6B
        LD BC,AC72
        PUSH BC
        PUSH DE
        RET

ADCA    LD A,(A9A7)
        ADD A,(HL):AND #1F:LD (A9A7),A
        INC HL
        CALL AC6B
        JP AC72

ADDA    LD A,(HL)
        ADD A,(IX+#0F)
        LD (IX+#0F),A
        INC HL
        CALL AC6B
        JP AC72
;---------------------------------------
;                                 Module
MUZ     
;---------------------------------------
