;z80
;zx-spectrum
;assembler

; FULSCREEN PART  -=LD=- X-TRADE
;

        ORG #6000
        DI
        LD SP,#6000
        CALL DPC,SYN
        LD HL,BUF256
        LD BC,#C000
S0      LD (HL),C:INC L:DJNZ S0
        LD HL,MINT:LD (#7F80),HL
;        XOR A:RET C
M0      EI:HALT
        LD HL,(DPOS)
        INC HL
        LD (DPOS),HL
        JP M0

MINT    LD (USP),SP

;        NOP

        CALL PLAY
        LD DE,(DPOS):OR A
        LD HL,#0040:SBC HL,DE
        LD A,0
        JP NC,MINTB:OR A
        LD HL,#00FE:SBC HL,DE
        JP NC,MINTO:OR A
        LD HL,#00FF:SBC HL,DE
        JP NC,REST:OR A
        LD HL,#0200:SBC HL,DE
        JP NC,MINTQ:OR A

        LD A,(DPOS+1):CP #FF
        RLA:AND 1:DEC A:CPL
        LD B,A
        LD A,(DPOS):AND B
        LD (DPOS),A

.7      NOP

MINTM   LD A,(DPOS):CALL SCROLL
        LD DE,3*7
MINT0   DEC DE:LD A,D:OR E
        NOP:NOP:JP NZ,MINT0

        LD A,(DPOS):AND #3F
        LD B,A:RRA
        JR C,MINT1
        LD HL,TABLE1
        LD SP,#5900
        LD A,#50
        JR MINT2

MINT1   JR NC,$
        LD HL,TABLE1+8
        LD SP,#D900
        LD A,#5F
MINT2   OUT (#FD),A
        LD A,B:AND #06
        LD E,A:LD D,0:ADD HL,DE
        LD A,(HL):INC HL
        LD H,(HL):LD L,A
        PUSH HL
        LD A,B:RRA:RRA
        AND #0E:LD E,A
        LD HL,TABLE1+16
        ADD HL,DE
        LD A,(HL):LD LX,A:INC HL
        LD A,(HL):LD HX,A
        EXX
        LD HL,(USTR):LD A,(HL)
        INC A
        LD HL,BUF256+192-8-1
        JR Z,MINT2A
        JR MINT2B

MINT2A  LD H,2
MINT2B  EXX
        LD C,#FE
        LD B,(IX+31)
        LD D,(IX+32)
        LD A,(IX+25)
        LD H,(IX+26)
        LD L,(IX+27)
        LD E,#80
        LD IY,BUF3
        OR A
        RET

MINT3   LD A,0:OUT (#FE),A
        LD SP,(USP)
        RET

MINTQ   LD (USP),SP
        LD A,(DPOS):LD D,A
.4      RRCA
        AND #0E:LD L,A:LD H,0
        LD BC,TBQCOL:ADD HL,BC
        LD A,(HL):LD (QCOL0),A
        LD C,A:INC HL
        LD A,(HL):LD (QCOL1),A
        LD B,A
        LD A,D:AND #1F:LD D,A
        SUB 24:JR NC,MINTQ0
        LD A,B
MINTQ0  LD B,A
        RLCA:RLCA:RLCA
        OR B:LD L,A:LD H,A
        LD B,24:LD SP,#5B00
MINTQ1
.16     PUSH HL
        DJNZ MINTQ1
        LD SP,(USP)
        LD A,D
        CP 24:JR NC,MINTQ3
        LD D,A
        LD A,C:OUT (#FE),A
        LD A,D:LD C,A
        ADD A,A:LD B,A
        LD A,46:SUB B
        LD B,A
        ADD A,A
        ADD A,A:LD D,A
        SUB B:ADD A,D
        LD E,A
        LD A,0:ADC A,0
        LD D,A
.4      NOP
        XOR A:RET C
        LD HL,4*7+5
        ADD HL,DE:EX DE,HL
MINTQ2  DEC DE:LD A,D:OR E
        NOP:NOP:JP NZ,MINTQ2
        LD A,C
        ADD A,A:ADD A,104
        LD D,1:CALL CRM2
        EX DE,HL:LD IX,DE
        LD A,27:SUB C
        LD D,2:CALL CRM2
        EX DE,HL:LD IY,DE
        LD A,27:SUB C
        LD D,0:CALL CRM2
        EX DE,HL
        LD A,C:ADD A,A,A,A
        ADD A,192
        LD B,0:RL B:LD C,A
        SLA C:RL B
        LD HL,BUF570+570-2
        SBC HL,BC
        LD SP,HL
        EX DE,HL
        LD A,(QCOL1):LD B,A
        LD A,(QCOL0)
        LD C,#FE
        RET

MINTQ3  SUB 24:OUT (#FE)
        XOR A:RET C
        RET

MINTQE  LD SP,(USP)
        LD A,0
        RET

MINTC   JP (HL)

MINTB   LD A,COL0:OUT (#FE),A
        XOR A:RET C:RET

REST    INC DE
        LD A,BANKM0:OUT (#FD),A
        LD HL,#C000,DE,#4000
        CALL REST1
        LD HL,#C01E:LD DE,#401E
        CALL REST1
        LD HL,#D0C0,DE,#50C0
        CALL REST1
        LD HL,#D0DE,DE,#50DE
        CALL REST1
        LD H,COL1+8*COL1:RET NZ
        LD L,H
        LD (#5800),HL
        LD (#581E),HL
        LD (#5820),HL
        LD (#583E),HL
        LD (#5AC0),HL
        LD (#5ADE),HL
        LD (#5AE0),HL
        LD (#5AFE),HL
        RET NZ
        LD A,0:LD (PHASE),A
        RET

REST1   LD A,2
REST2   EXA
        LD B,8
REST3   LD A,(HL):LD (DE),A
        INC L,E
        LD A,(HL):LD (DE),A
        DEC L,E
        INC H:INC D
        DJNZ REST3
        LD BC,#F820
        ADD HL,BC
        EX DE,HL
        ADD HL,BC
        EX DE,HL
        EXA
        DEC A:JR NZ,REST2
        RET

MINTO   LD A,COL0:OUT (#FE),A
        LD A,BANK2:OUT (#FD),A
        LD DE,22*7
MINTO0  DEC DE:LD A,D:OR E
        NOP:NOP:JP NZ,MINTO0
        LD A,(DPOS):AND #1F
        CP #10:JR NC,MINTO1
        NOP:NOP:JR MINTO2

MINTO1  LD E,A:LD A,#1F:SUB E
MINTO2  ADD A,A:LD E,A,D,0,H,D
        ADD A,A,A,A,A,A:LD L,A
        ADD HL,HL,HL,HL,HL,DE
        LD DE,BUFADR:ADD HL,DE
        LD E,(HL):INC HL
        LD D,(HL):INC HL
        EX DE,HL:LD SP,HL
        LD HL,#4000,IX,#57E0
        LD C,2
MINTO4  LD B,8
MINTO5  LD A,(DE):INC DE
        LD (HL),A,(IX),A:INC L
        LD A,(DE):INC DE
        LD (HL),A,(IX+1),A
        LD A,L:OR #1F:LD L,A
        LD A,LX:OR #1F:LD LX,A
        LD A,(DE):INC DE
        LD (HL),A,(IX),A:DEC L
        LD A,(DE):INC DE
        LD (HL),A,(IX-1),A
        LD A,L:AND #E0:LD L,A
        LD A,LX:AND #E0:LD LX,A
        INC H:DEC HX
        DJNZ MINTO5
        LD A,C
        LD BC,#F820:ADD HL,BC
        LD BC,#07E0:ADD IX,BC
        LD C,A:DEC C
        JR NZ,MINTO4
        LD H,COL0+8*COL1:LD L,H
        LD (#5800),HL
        LD (#581E),HL
        LD (#5820),HL
        LD (#583E),HL
        LD (#5AC0),HL
        LD (#5ADE),HL
        LD (#5AE0),HL
        LD (#5AFE),HL
        LD D,COL1:LD E,COL0
        LD C,#FE
        XOR A:RET C
        RET

MINTOE  LD SP,(USP)
        INC DE
        RET

SCROLL  LD (USPS),SP
        ADD A,A:AND #02:OR #55
        OUT (#FD),A
        LD A,(MPOS)
        ADD A,12:AND #1F
        LD L,A:LD H,0
        LD DE,TBJUMP
        ADD HL,DE
        LD A,(DPOS+1):CP 3
        JR NC,SR0
        LD A,12:JR SR0A

SR0     LD A,(HL):LD A,(HL)
SR0A    LD (PY),A
.3      RLCA
        LD L,A:LD H,0:ADD HL,HL
        LD DE,BUF784:ADD HL,DE
        EX DE,HL
        LD HL,24*16:ADD HL,DE
        LD (HL),#FD:INC HL
        LD (HL),#E9
        EX DE,HL
        LD IY,SR1:LD SP,BUF256
        JP (HL)

SR1     EX DE,HL
        LD (HL),#22:DEC HL
        LD (HL),#E1

        LD A,(PY):LD C,A
        ADD A,A,A,A,A,A:SUB C
        LD C,A:LD B,0
        LD HL,BUF343
        ADD HL,BC:LD (HL),#E9
        EX DE,HL:LD BC,0
        LD HL,SR2
        JP BUF343

SR2     EX DE,HL:LD (HL),#31

        LD A,(PY):ADD A,24
        LD E,A:LD D,0
        ADD A,A,A,A
        LD L,A:LD H,D
        ADD HL,HL:SBC HL,DE
        LD DE,BUF343:ADD HL,DE
        EX DE,HL:LD IY,DE
        LD HL,SR3
        JP (IY)

SR3     LD SP,(USPS)

        LD A,BANKM0:OUT (#FD),A
        LD HL,(USTR)
        LD A,(HL):ADD A,A
        LD L,A:LD H,0
        LD DE,TBFONT:ADD HL,DE
        LD E,(HL):INC HL
        LD D,(HL):EX DE,HL
        LD C,(HL):INC HL
        LD A,(SBIT):LD B,A
        PUSH BC
        ADD A,A:ADD A,B
        LD C,A:LD B,0
        ADD HL,BC
        LD DE,BUF3:LD C,3:LDIR
        POP BC
        LD A,B:INC A
        CP C:JR Z,SCRL3
        LD B,3
        DJNZ $
        INC DE,DE
        JR SCRL5

SCRL3   LD HL,(USTR)
        LD A,(HL):INC A
        JR Z,SCRL6
        INC HL:LD (USTR),HL
        XOR A
SCRL5   LD (SBIT),A
        RET

SCRL6   LD B,2
        DJNZ $
        INC DE
        RET
;*******************************
MEIRET  EI:RET

; ":______

DPC
;        LD A,#50
;        LD (BANK),A:OUT (#FD),A
;        LD HL,#5B00:LD DE,MEIRET
;        CALL SETINT:EI

        LD HL,#5800,DE,#5801
        LD BC,#02FF,(HL),L:LDIR

        LD HL,LTBBASE
        LD DE,TBBASE
        LD BC,ELTBB-LTBBASE
        LDIR

        LD A,BANKM0
        LD (BANK),A:OUT (#FD),A
        LD HL,SCR0:LD DE,#C000
        LD BC,#1800:LDIR
        PUSH DE
        LD BC,ELFONT-LFONT
        LDIR
        PUSH DE
        LD HL,LMUS
        LD BC,ELMUS-LMUS
        LDIR

        LD A,#57
        LD (BANK),A:OUT (#FD),A
        LD HL,SCR1:LD DE,#C000
        LD BC,#1800:LDIR

        LD IY,TABLE1
        LD BC,TBBASE
        LD HL,#8000,(AMAIN),HL
        LD DE,#1A04,A,BANK0
        CALL DPC2
        LD DE,#1A05,A,BANK1
        CALL DPC2
        LD HL,(AMAIN)
        CALL DPCC0
        LD A,BANK2
        LD (BANK),A:OUT (#FD),A
        LD IX,TABLEA
        LD HL,BUFDEMO
        LD IY,BUFADR
        LD B,16
DPC0    PUSH BC:CALL CRT:POP BC
        DJNZ DPC0
        LD HL,BUF570
        LD DE,MINTC
        LD B,284/2
DPC1    LD (HL),E:INC HL
        LD (HL),D:INC HL
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        DJNZ DPC1
        LD (HL),MINTQE]:INC HL
        LD (HL),MINTQE[

        LD DE,TBASE
        LD HL,TWAIT
        LD A,24
DPT1    EXA:XOR A:LD B,25
DPT2    LD (DE),A:INC E
        LD (DE),A:INC E
        DJNZ DPT2
        LD C,(HL):INC HL
        LDIR
        LD A,E:OR #3F:LD E,A
        INC DE
        EXA:DEC A:JR NZ,DPT1

        LD A,BANKM0
        LD (BANK),A:OUT (#FD),A
        POP HL
        LD BC,ELMUS-LMUS
        LD DE,MUS:LDIR

;        HALT
        LD HL,#7E00
        LD DE,MEIRET
        CALL SETINT

; WAIT PATTERN

;        DI
        LD HL,MUS+#051B
        LD (HL),#C3:INC HL
        LD (HL),WR]:INC HL
        LD (HL),WR[:INC HL
        XOR A:LD (MUS+#030E),A
        LD HL,#FFFF,(MPOS),HL
        CALL MUS
        LD A,BANKM0
        LD BC,#0200:CALL DPCM
        LD A,BANKM1
        LD BC,#0400:CALL DPCM
        LD HL,0:LD (MPOS),HL

        LD A,BANKM0:OUT (#FD),A
        LD HL,#C000,DE,#4000
        LD BC,#1800:LDIR


        POP DE:LD IX,TBSYM
DPF1    LD A,(IX):INC IX
        CP #FF:JR Z,DPF3
        EXA
        LD A,(IX):INC IX
        ADD A,A:LD C,A:LD B,0
        LD HL,TBFONT:ADD HL,BC
        EXA
DPF2    EXA
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        LD A,(DE):INC DE
        LD C,A:ADD A,A,A,C
        LD C,A
        EX DE,HL:ADD HL,BC
        EX DE,HL
        EXA
        DEC A:JR NZ,DPF2
        JR DPF1

DPF3
        LD HL,BUF343
        LD DE,#C834
        LD BC,#30C5
DPS1    LD (HL),#31:INC HL
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        LD (HL),C:INC HL
        LD (HL),C:INC HL
        LD (HL),C:INC HL
        LD (HL),C:INC HL
        INC D:LD A,D:AND 7
        JR NZ,DPS2
        LD A,E:ADD A,#20:LD E,A
        LD A,D:SUB 8:LD D,A
DPS2    DJNZ DPS1
        LD (HL),#E9

        LD HL,BUF784
        LD DE,#C82C
        LD C,#31
DPS3    PUSH DE
        LD B,4
DPS4    LD (HL),#E1:INC HL
        LD (HL),#22:INC HL
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        INC E,E
        DJNZ DPS4
        POP DE
        INC D:LD A,D:AND 7
        JR NZ,DPS5
        LD A,E:ADD A,#20:LD E,A
        LD A,D:SUB 8:LD D,A
DPS5    DEC C:JR NZ,DPS3
        RET

WR      LD DE,(MPOS)
        LD BC,14
        LDDR
        LD (MPOS),DE
        XOR A
        LD (MUS+#0233),A
        LD (MUS+#0239),A
        RET

DPCM    OUT (#FD),A
        LD HL,#FFFF,(MPOS),HL
DPCM1   PUSH BC
        CALL MUS+6
        POP BC
        DEC BC:LD A,B:OR C
        JR NZ,DPCM1
        RET


DPC2    LD H,A
        AND #F7
        LD (BANK),A:OUT (#FD),A
        LD A,H
        EXA
        LD (LRCOL),DE
        LD HL,#C000,(ABANK),HL
        LD DE,TBBASE
        LD A,(BC):INC BC:LD L,A
        LD A,(BC):INC BC:LD H,A
        ADD HL,DE:LD (BSC),HL
        LD A,(BC):INC BC:LD L,A
        LD A,(BC):INC BC:LD H,A
        ADD HL,DE:LD (BLR),HL
        XOR A
DPC3    LD HL,(AMAIN)
        LD (IY),L:INC IY
        LD (IY),H:INC IY
        PUSH IY
        LD LY,A:EXA:LD HY,A
        LD A,(BC),L,A:INC BC
        LD A,(BC),H,A:INC BC
        ADD HL,DE:PUSH HL
        LD A,(BC),L,A:INC BC
        LD A,(BC),H,A:INC BC
        ADD HL,DE:LD (BDW),HL
        POP IX
        PUSH DE,BC
        CALL DPC4
        LD A,HY:EXA:LD A,LY
        POP BC,DE,IY
        INC A:CP 4:JR NZ,DPC3
        RET

DPC4    XOR A:LD (NSCRL),A
        PUSH IX
        CALL DPSCR
        POP IX
        LD HL,(AMAIN)

        LD D,45
        CALL DPUD
        LD IX,(BLR),BC,(LRCOL)
        LD A,224:SUB D:LD D,A
        CALL DPLR
        LD A,224:SUB D:LD D,A
        LD IX,(BDW)
        CALL DPUD
        LD A,D:ADD A,16
        CALL PS
DPC5    LD (HL),#C3:INC HL
        LD (HL),MINT3]:INC HL
        LD (HL),MINT3[:INC HL
        LD (ABANK),HL
        RET


;*******************************

DPSCR   LD IX,(BSC)
        LD HL,BUF768
        PUSH HL
DPSC1   LD B,(IX):INC IX
        INC B:JR Z,DPSC10A:DEC B
        LD A,(IX):INC IX
        CP #FF:JR Z,DPSC10
        ADD A,LY:RRA:RRA:AND #07
        LD C,A
        LD A,(IX):INC IX
        ADD A,LY:RRA:RRA:AND #07
        CP C :JR Z,DPSC9
        SUB C:JR NC,DPSC7
        CP -7
        JR Z,DPSC8
DPSC6   ADD A,#10:ADD A,C
        JR DPSC9

DPSC7   CP 7:JR Z,DPSC6
DPSC8   LD A,C:ADD A,8
DPSC9   LD (HL),A:INC HL
        DJNZ DPSC9
        JR DPSC1

DPSC10  INC IX:LD A,24:JR DPSC9

DPSC10A POP IX
        LD HL,BUF4096,(ASBUF),HL
        LD BC,#FFFF
        LD D,0
DPSC11  INC HX
DPSC11A LD E,16
DPSC12  DEC IX:LD A,(IX)
        CP B:JR Z,DPSC15
        CP C:JR NZ,DPSC13
        LD B,C:LD A,#41
        JR DPSC14

DPSC13  LD B,A
        LD (HL),#DD:INC HL
        LD (HL),#46:INC HL
DPSC14  LD (HL),A:INC HL
DPSC15  DEC IX:LD A,(IX)
        CP C:JR Z,DPSC18
        CP B:JR NZ,DPSC16
        LD C,B:LD A,#48
        JR DPSC17

DPSC16  LD C,A
        LD (HL),#DD:INC HL
        LD (HL),#4E:INC HL
DPSC17  LD (HL),A:INC HL
DPSC18  LD (HL),#C5:INC HL
        DEC E:JR NZ,DPSC12
        INC D
        LD A,D:AND 7
        JR NZ,DPSC11A
        LD A,D:CP 24
        JR Z,DPSC20
        LD (HL),#31:INC HL
        LD (HL),#00:INC HL
        LD A,D:ADD A,8
        RRCA:RRCA:RRCA:ADD A,#58
        LD (HL),A
        LD A,HY:BIT 3,A
        JR Z,DPSC19
        SET 7,(HL)
DPSC19  INC HL
        INC HX
        JR DPSC11

DPSC20  LD (HL),#31:INC HL
        LD (HL),#02:INC HL
        LD (HL),#5B:INC HL
        LD (HL),#FD
        RET

;*******************************
;D-C.LEFT E-C.RIGHT IX+-96 TBL
;LY-PHASE
DPLR    PUSH BC
        EXX:POP DE:LD C,0:EXX
        LD B,0
DPL5    EXX
        BIT 5,(IX-96):JR Z,DPL6
        DEC D:CALL P,DPL6
        LD D,31
DPL6    BIT 5,(IX+96):JR Z,DPL7
        INC E:BIT 5,E:JR Z,DPL7
        LD E,0
DPL7    EXX
        LD A,D:ADD A,32:LD D,A
        EXX:LD B,0:EXX
        LD E,(IX-96):LD A,-32
        CALL DPL10
        CALL DPL15
        EXX:LD B,160:EXX
        LD E,(IX+96):LD A,140
        CALL DPL10A
        INC IX
        PUSH HL:LD HL,(ASBUF)
        LD A,(HL):CP #FD
        JR NZ,DPL9B
        INC (HL)
DPL9B   POP HL
        INC B:LD A,B:CP 192
        JR NZ,DPL5
        RET

DPL10   CP D:JR C,DPL12
DPL10A  SUB D
        CP 4:JR NC,DPL11
        LD A,4
DPL11   PUSH AF
        ADD A,D:LD D,A
        POP AF
        CALL PS
DPL12   LD A,D:ADD A,12:LD D,A
        EXX
        LD A,B:OR A
        LD A,D:JR Z,DPL12A
        LD A,E
DPL12A  EXX
        PUSH DE:CALL PUTCOL
        POP DE:LD A,E
        AND #1F:RET Z
        LD A,E:RLCA:RLCA
        AND 3:CP LY:RET NZ
        LD A,E:AND #1F
        EXX:ADD A,B:EXX
        SUB D:PUSH AF
        CALL PS
        POP AF
        ADD A,12:ADD A,D:LD D,A
        LD A,B:CP 192/2
        LD E,#01:JR C,DPL13
        LD E,#FF
DPL13   EXX
        LD A,B:OR A
        LD A,D:JR Z,DPL14
        LD A,E
DPL14   EXX
        ADD A,E:CALL PUTCOL
        RET

DPL15   PUSH HL
        LD HL,(ASBUF):LD A,(HL)
        CP #FE:JR NZ,DPL16
        INC (HL)
        POP HL
        LD (HL),#08:INC HL
        LD (HL),#3E:INC HL
        LD A,HY
        LD (HL),A : INC HL
        LD (HL),#D3:INC HL
        LD (HL),#FD:INC HL
        LD (HL),#08:INC HL
        LD (HL),#C3:INC HL
        PUSH DE:LD DE,(ABANK)
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        LD (AMAIN),HL
        EX DE,HL:POP DE
        LD A,192 :LD (NSCRL),A
        XOR A:LD (NSCRLM),A
        LD A,36:JR DPL20

DPL16   POP HL:LD A,B
        SUB 94:JR Z,DPL17
        DEC A :JR Z,DPL18
        DEC A :RET NZ
        LD (HL),#DD:INC HL
        LD (HL),#66:INC HL
        LD (HL),#1C:INC HL
        JR DPL19

DPL17   LD (HL),#DD:INC HL
        LD (HL),#7E:INC HL
        LD (HL),#1D:INC HL
        JR DPL19

DPL18   LD (HL),#DD:INC HL
        LD (HL),#56:INC HL
        LD (HL),#1E:INC HL
DPL19   LD A,19
DPL20   ADD A,D:LD D,A
        RET

PUTCOL  LD (HL),#ED:INC HL
        ADD A,LY:RRA:RRA:AND 7
        DEC A:LD E,#61:JR Z,PTC1
        DEC A:LD E,#69:JR Z,PTC1
        DEC A:LD E,#61:JR Z,PTC1
        CP 3 :LD E,#41:JR Z,PTC1
        LD E,#51
PTC1    LD (HL),E:INC HL:RET

;*******************************

DPUD    EXX:LD D,0:EXX
DPU0    LD B,(IX):INC IX
DPU1    LD A,(IX):INC IX
        OR A:CALL M,DPU2
        ADD A,D:CALL PS
        LD (HL),#ED:INC HL
        LD (HL),C : INC HL
        CALL DPU7
        LD D,-12:JR DPU1

DPU2    CP #FE:JR Z,DPU0
        JR NC,DPU6
        AND #7F
        LD C,B:ADD A,D:SUB 32
        JR C,DPU5
        LD D,32-12
        CP 4:JR NC,DPU3
        SUB 4:ADD A,D:LD D,A
        LD A,4
DPU3    CALL PS
DPU4    LD (HL),#ED:INC HL
        LD (HL),C : INC HL
        CALL DPU7
        JR DPU1

DPU5    ADD A,32-12:LD D,A
        JR DPU4

DPU6    ; D-WAIT
        RET

DPU7    LD A,C
        CP #41:JR Z,DPU8
        CP #51:JR Z,DPU9
        CP #79:JR Z,DPU10
        LD C,#69:RET
DPU8    LD C,#51:RET
DPU9    LD C,#79:RET
DPU10   LD C,#61:RET

;*******************************

DPCC0   LD C,0
DPCC1   LD (IY),L:INC IY
        LD (IY),H:INC IY
        LD D,C,E,C
        CALL DPCC3
        LD D,C,E,C:INC E
        CALL DPCC3
        LD D,C,E,C:INC D
        CALL DPCC3
        LD (HL),COLR:INC HL
        LD B,8
        LD A,C
DPCC2   LD (HL),A:INC HL
        INC A:AND 7:DJNZ DPCC2
        INC C:LD A,C
        CP 8:JR NZ,DPCC1
        RET

DPCC3   LD B,8
DPCC4   LD A,E:AND 7:LD E,A
        LD A,D:AND 7
.3      RLCA
        OR E:LD (HL),A:INC HL
        INC E:INC D
        DJNZ DPCC4
        RET

;*******************************

PS      PUSH BC,DE
        CALL PSS
        POP DE,BC
        RET

PSS     CP 19
        CALL NC,PS10
        OR A:RET Z
        CP 167:JR C,PS0A
        PUSH AF
        SRL A:CALL PS0
        POP AF:SRL A:ADC A,0
PS0A    CP 66:CALL NC,PS17
        OR A:RET Z
PS0     CP 31:JR NC,PS5
PS1     CP 15:JR C,PS2:SUB 11
        LD (HL),#34:INC HL
        JR PS1

PS2     CP 6:JR Z,PS3
        SUB 4
        LD DE,TBTIME
        ADD A,A:ADD A,A
        ADD A,E:LD E,A
        JR NC,$+3:INC D
        EX DE,HL
        LD C,(HL):INC HL
        LD B,0:LDIR:EX DE,HL
        RET

PS3     LD A,(DDEMD):XOR #80
        LD (DDEMD),A
        LD (HL),#13
        CALL P,PS4
        LD (HL),#1B
PS4     INC HL:RET

PS5     SUB 31
        LD D,(TBASE[)+4
        JP PS19

PS10    PUSH IX
        LD IX,(ASBUF)
        SUB 8:LD D,A:LD E,0
PS11    LD A,(IX)
        CP #FD:JR NC,PS15
        LD BC,#0313
        CP #DD:JR Z,PS12
        LD BC,#0104
        CP #C5:JR NZ,PS12
        LD C,11
        LD A,(IX+1)
        CP #31:JR NZ,PS12
        LD BC,#0415
PS12    LD A,D:SUB C
        JR C,PS15
        JR Z,PS13
        CP 4:JR C,PS15
PS13    LD D,A
        BIT 0,E:JR NZ,PS14
        LD (HL),#D9:INC HL
        SET 0,E
PS14    LD A,(IX):LD (HL),A
        INC IX,HL:DJNZ PS14
        JR PS11

PS15    BIT 0,E
        LD E,8:JR Z,PS16
        LD (ASBUF),IX
        LD (HL),#D9:INC HL
        LD E,0
PS16    LD A,D:ADD A,E
        POP IX
        RET

PS17

        LD E,A
        LD A,(NSCRL):OR A:LD D,A
        LD A,E
        RET Z
        LD A,192:SUB D:LD D,A
        AND #3F:JR NZ,PS17A
        LD A,(NSCRLM):OR A
        JR NZ,PS18
        LD A,D:RLCA:RLCA
        NEG:ADD A,2
        LD (HL),#D9:INC HL
        LD (HL),#FD:INC HL
        LD (HL),#4E:INC HL
        LD (HL),A:INC HL
        LD (HL),#D9:INC HL
        LD A,E:SUB 27:LD E,A
PS17A   LD A,D:AND 7:JR NZ,PS18
        LD A,(NSCRLM):OR A
        JR NZ,PS18
        LD (HL),#D9:INC HL
        LD (HL),#08:INC HL
        LD (HL),#CB:INC HL
        LD (HL),#11:INC HL
        LD (HL),#08:INC HL
        LD (HL),#D9:INC HL
        LD A,1:LD (NSCRLM),A
        LD A,E:SUB 24
        CP 66:RET C
        LD E,A

PS18    XOR A:LD (NSCRLM),A
        LD A,(NSCRL):DEC A
        LD (NSCRL),A
        LD A,E
        SUB 66
        LD D,(TBASE[)+5
PS19    PUSH HL
        LD H,A
        SRL H:SRL H
        AND 3:RRCA:RRCA
        ADD A,50:SUB H
        LD E,A
        POP HL
        LD (HL),#CD:INC HL
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        XOR A
        RET

;*******************************

SYN     LD HL,SINT:LD (#7F80),HL
        LD HL,BUF256,BC,#FF3C
        PUSH HL
SYN1    LD (HL),C:INC L
        DJNZ SYN1:LD (HL),#E9
        POP HL
SYN2    LD HX,5:CALL SINT1
        LD A,C
        CP #10:JR C,SYN3
        CP #F0:JR C,SYN4
SYN3    LD HL,BUF256+128
        XOR A:EI
        CALL BUF256

SYN4    PUSH BC
        LD H,0:LD L,B
        LD B,0:ADD HL,BC
        LD C,D:ADD HL,BC
        LD C,E:ADD HL,BC
        POP BC
        INC HL:LD A,L
.2      RR H:RRA
        DEC A
        CP E:JR Z,SYN5:INC HL
        CP B:JR Z,SYN5:INC HL
        CP C:JR Z,SYN5:INC HL
SYN5    RET

SINT    LD B,C,C,D,D,E,E,A
        POP AF
        DEC HX:JP Z,SINT2
        INC (HL),(HL)
        DEC (HL),(HL)
SINT1   XOR A:EI
        JP (HL)

SINT2   INC HL:RET

;*******************************

INT     DS 3


CRT     LD (IY),L:INC IY
        LD (IY),H:INC IY
        EXX
        XOR A:EXA:LD L,128
        LD DE,BUF128,C,0
CRT1    LD A,(IX):INC IX
        LD (DE),A:INC DE
        CALL CRT7
        DEC L
        LD A,L:DEC A
        LD A,(IX-1)
        JR Z,CRT2
        LD A,(IX)
CRT2    ADD A,(IX-1):RRA
        LD (DE),A:INC DE
        CALL CRT7
        DEC L:JR NZ,CRT1
        LD L,1,C,L
CRT3    DEC DE:LD A,(DE)
        CALL CRT7
        INC L:LD A,L:CP 129
        JR NZ,CRT3
        EXA:ADD A,30
        LD D,1:CALL CRM1
        EXX
        LD (HL),MINTOE]:INC HL
        LD (HL),MINTOE[:INC HL
        RET

CRT7    CP 68:JR NC,CRT12
        LD H,A
        LD A,L
        CP 97:JR NC,CRT8
        LD A,H:CP #10
        JR NC,CRT13
CRT8    PUSH DE
        LD D,0
        EXA:ADD A,H
        ADD A,10
        CALL CRM1
        LD A,80:SUB H:ADD A,A
        SUB 26
        LD D,1:CALL CRM1
        LD A,H:ADD A,198-160-10
        EXA
        POP DE
CRT9A   LD A,L
        CP 97:RET NC
        CP 81:RET C
CRT9    LD A,C:OR A:RET NZ
        PUSH DE
        LD A,H:SUB #10:LD B,A
        LD A,0,H,A,D,A,E,A
        JR C,CRT11
        JR Z,CRT11
CRT10   SLI E:RL D
        SLI E:RL D
        SCF:RRA:RR H
        SCF:RRA:RR H
        DJNZ CRT10
CRT11   LD (IY),A:INC IY
        LD (IY),H:INC IY
        LD (IY),E:INC IY
        LD (IY),D:INC IY
        POP DE
        RET

CRT13   CALL CRT9A
CRT12   EXX
        LD (HL),WAIT224]:INC HL
        LD (HL),WAIT224[:INC HL
        EXX
        RET

CRM1    PUSH HL:LD H,A
        SRL H:SRL H
        AND 3:RRCA:RRCA
        ADD A,50:SUB H:LD E,A
        LD HL,TBASE:ADD HL,DE
        PUSH HL
        EXX:POP DE
        LD (HL),E:INC HL
        LD (HL),D:INC HL
        EXX
        POP HL
        RET

CRM2    LD H,A
        SRL H:SRL H
        AND 3:RRCA:RRCA
        ADD A,50:SUB H:LD E,A
        LD HL,TBASE+#0200
        ADD HL,DE
        RET

WAIT224 LD A,13
WT2241  DEC A:JR NZ,WT2241
        NOP:RET

SETINT  LD A,H:LD C,H:INC C
        LD B,#00
STINT1  LD (HL),C:INC L
        DJNZ STINT1
        INC H:LD (HL),C
        LD L,H
        LD (HL),#C3:INC L
        LD (HL),E : INC L
        LD (HL),D : INC L
        LD I,A:IM 2
        RET

;____:' #7FFD
PLAY    LD HL,(MPOS)
        LD A,H:CP 2
        JR C,PLAY1
        SUB 2:LD H,A
        LD A,BANKM1
        JR PLAY2

PLAY1   LD A,BANKM0
        INC DE,DE,DE
PLAY2   OUT (#FD),A
        LD D,H:LD E,L
        ADD HL,HL,HL,HL,HL,HL
        SBC HL,DE:ADD HL,HL
        EX DE,HL
        LD HL,#FFFF:SBC HL,DE
        LD DE,#FFBF
        LD C,#FD
        LD A,(HL):OR A
        LD A,#0D
        JR NZ,PLAY3
        DEC HL,HL,HL
        SUB 3
        LD B,6
        DJNZ $
        NOP:NOP
        JR PLAY4

PLAY3   LD B,D:OUT (C),A; 13
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 12
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 11
        LD B,E:OUTD:DEC A
PLAY4   LD B,D:OUT (C),A; 10
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 9
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 8
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 7
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 6
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 5
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 4
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 3
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 2
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 1
        LD B,E:OUTD:DEC A
        LD B,D:OUT (C),A; 0
        LD B,E:OUTD:DEC A
        LD HL,(MPOS)
        INC HL
        LD A,H:CP 6
        JR NZ,PLAY5
        LD H,2
        JR PLAY6

PLAY5   INC DE:NOP:NOP
PLAY6   LD (MPOS),HL
        RET

TBTIME  DB 1:NOP:DS 2
        DB 1:RET C:DS 2
        DS 4
        DB 1:LD (HL),A:DS 2
        DB 2:DS 3
        DB 2:NOP:RET C:DS 1
        DB 2:RET C:RET C:DS 1
        DB 1:INC (HL):DS 2
        DB 2:INC DE:DEC DE:DS 1
        DB 3:NOP:NOP:RET C
        DB 2:LD (HL),A,(HL),A:DI

TWAIT   DB 4
        NOP:OUT (C),D:RET
        DB 4
        RET C:OUT (C),D:RET
        DB 4
        INC HL:OUT (C),D:RET
        DB 5
        LD A,0:OUT (C),D:RET

        DB 4
        NOP:OUT (C),E:RET
        DB 4
        RET C:OUT (C),E:RET
        DB 4
        INC HL:OUT (C),E:RET
        DB 5
        LD A,0:OUT (C),E:RET

        DB 5
        NOP:OUT (C),B:JP (IX)
        DB 5
        RET C:OUT (C),B:JP (IX)
        DB 5
        INC DE:OUT (C),B:JP (IX)
        DB 6
        LD C,#FE:OUT (C),B:JP (IX)

        DB 5
        NOP:OUT (C),A:JP (IY)
        DB 5
        RET C:OUT (C),A:JP (IY)
        DB 5
        INC DE:OUT (C),A:JP (IY)
        DB 6
        LD C,#FE:OUT (C),A:JP (IY)

        DB 2:NOP:RET
        DB 2:RET C :  RET
        DB 2:RET C :  RET NC
        DB 3:LD C,#FE:RET

        DB 9:NOP:EXA
        EXX:RL (HL):DEC L:EXX
        EXA:RET

        DB 9:RET C:EXA
        EXX:RL (HL):DEC L:EXX
        EXA:RET

        DB 9:RET C:EXA
        EXX:RL (HL):DEC L:EXX
        EXA:RET NC

        DB 10:LD C,#FE:EXA
        EXX:RL (HL):DEC L:EXX
        EXA:RET

TBSYM   DB 26,#41,10,#30,26,#61
        DB 1,#2D,1,#3D,1,#20
        DB 1,#2E,1,#2C,1,#3A,#FF

TBQCOL  DB 2,0,5,1,0,6,1,4
        DB 3,7,2,5,4,0,3,2

TBJUMP
_DB 1,1,2,2,3,4,5,6,8,9,11,13,15
_DB 18,20,23,20,18,15,13,11,9
_DB 8,6,5,4,3,2,2,1,1,1

STR
_DB "    So, fullscreen "
_DB "finally "
_DB "part... This demo was "
_DB "coded in 5 weeks by "
_DB "DARK, -=LD=-, -STS- and "
_DB "CACHE, "
_DB "music composed by -LAV-. "
_DB "We used STORM turbo "
_DB "assembler, XAS 9.07, "
_DB "STS 5.1, ART STUDIO 128, "
_DB "DPaint III, "
_DB "PRO TRACKER 2.1 and BASIC "
_DB "48... "
_DB "This demo timed for "
_DB "PENTAGON 128.  "
_DB "For more info, press "
_DB "SPACE after start.  "
_DB "Presented by "
_DB "X-TRADE group, 1997.  "
_DB "         END.",#FF


USP     DW 0
PHASE   DB 0
BSC     DW 0
LRCOL   DW 0
BLR     DW 0
BDW     DW 0
DDEMD   DB 0
ASBUF   DW 0
ABANK   DW 0
AMAIN   DW 0
BANK    DB 0
MPOS    DW 0
DPOS    DW 0
NSCRL   DB 0
USTR    DW STR
SBIT    DW 0
PY      DB 0
USPS    DW 0
NSCRLM  DB 0
QCOL0   DB 0
QCOL1   DB 0

TBNUL
TBASE   EQU $^

FREE    EQU TBASE-TBNUL

TABLEA  INCB "DATA.O";   1024

SCR1    INCB "scr1"

; __"__"!!!
SCR0    INCB "scr0"
LFONT   INCB "F24/16";2729
ELFONT
LMUS    INCB "MUSIC"
ELMUS

LTBBASE INCB "TBMC.EXE"; 4946
ELTBB

ECODE

FONT    EQU #C000+6144
TBFONT  EQU ELFONT-LFONT+FONT
BUFDEMO EQU #C000
BUFADR  EQU 0-1024-32
BUF343  EQU #759B
BUF784  EQU #76F2
BUF196  EQU #7A02
BUF570  EQU #7AC6
BUF128  EQU #7D00
BUF256  EQU #7D00
BUF3    EQU #7DC0
BUF4096 EQU #F000
BUF768  EQU #FD00

BANK0   EQU #50+0
BANK1   EQU #51+8
BANK2   EQU #53
BANKM0  EQU #54
BANKM1  EQU #56

COLR    EQU #07
COL0    EQU #02
COL1    EQU #00

TABLE1  EQU #7F01;   L=2
TBBASE  EQU #4000
MUS     EQU #4000



