;z80
;zx-spectrum
;assembler

;INTRO+BUMPMAP   Dark/X-Trade'97
;*******************************
;*     BUMPMAP KILL STS!!!     *
;*    SELF-KILLING CODE        *
;* ONE ASSEMBLY - ONE START    *
;*******************************
;***** REMOVED INT-TABLE *******

;- TIME CONSTANTS --------------
TFLBEG  EQU 360;FLAME BEGIN
TFLEND  EQU 575;FLAME END
TLGBEG  EQU 145;SHOW LOGO
TPRES   EQU 199;SHOW "PRESENTS"
TFLEXIT EQU 672;EXIT INTRO 672
TRGBEG  EQU 767;START RAGE
TRGHIDE EQU 1392;HIDE RAGE
TRGEND  EQU 1442;END RAGE

LGCOLR  EQU #47;LOGO COLOR
BMCOLR  EQU #06;BUMP COLOR
;SHARED
INT     EQU #5E00
INT2    EQU INT+#0100+(INT[)+1
INTSP   EQU #5B90
MUSICI  EQU #C000
MUSIC   EQU MUSICI+6

;- INTRO SPECIFIC --------------
WDT     EQU 64
HGT     EQU 20;----CHANGE
FSTR    EQU #1C;FLAME START Y
LSTR    EQU #00
LOGOX   EQU 3
LWDT    EQU 26
LHGT    EQU 10
CHUNKY  EQU #8000
DTBASE  EQU #9400;,288
LSATB   EQU #9E00
LOGODT  EQU #A000;
FDTAB   EQU #B000;1K -DITHER TAB
FSATB   EQU #B400;SCR ADDRESS
FLBASE  EQU #B500;,#680

;- BUMPMAP SPECIFIC ------------
CSTB    EQU #F800;COS/SIN [512]
BUMPSRC EQU #C000;SOURCE BUMPMAP
BMOTMP  EQU #8000;XY OFFS TEMP
LSRC    EQU #6400;LIGHT SRC SPRT
;SIZE=#1800 ;X/Y/X/Y IN SEGMENT
LSCNT   EQU #2E
TMPCOS  EQU LSRC+(LSCNT')
BSATB   EQU #DB00;SCR0 ADR
BDTAB   EQU #DC00;1K -DITHER TAB
BMOFFS  EQU #E000;X/Y OFFSETS
BMBASE  EQU #F800;BUMPMAP CODE
LSL4    EQU #FF00;C<<4
SMOOTH  EQU 21;_<_'__''_
OFFSET  EQU #3E;ADR CORRECTION
LZ      EQU 8;'>'_'_ _''.'':'_
;__"_"'> "'_+:___ _''-__ '':'_
SCALE   EQU 1
RADX    EQU 18*SCALE
RADY    EQU 7*SCALE
STEPX   EQU #02A2
STEPY   EQU #0333
HSTEP   EQU 1
;__"_"'> "':<_-:_> ' SCALE __+
;_T_ SCALING
;_____:'_> _-__
WSTRT   EQU #00;*8 PIX
WHGT    EQU #18;MAX=#18
BBANK   EQU #57

BANKM   EQU #56;MUSIC BANK

;-------------------------------

; SCREEN 0, ATTR #00
; MUSIC WAS INSTALLED

        ORG #6000
        DI
        LD (MAINSP),SP

;        LD A,BANKM:OUT (#FD)
;        LD HL,LMUS
;        LD BC,ELMUS-LMUS
;        LD DE,MUSICI:LDIR

        LD A,#57:OUT (#FD)
        LD A,LGCOLR
        CALL CLSCR

        LD HL,INT
        LD A,H:LD I,A
        IM 2
        INC A
        LD (HL),A:INC L
        JR NZ,$-2
        INC H:LD (HL),A
        LD A,#C3
        LD (INT2),A
        LD HL,INTSRV
        LD (INT2+1),HL

        XOR A:LD (USTAT),A
        LD H,A,L,A:LD (TIME),HL

        LD A,#37:LD (ISV2A),A
        LD A,#5F:LD (BANK),A
        EI

        CALL PART0
        LD HL,USTAT:SET 0,(HL)
        LD A,BMCOLR
        CALL CLATTR

        LD A,BBANK:CALL SBANK
        CALL BINIT
LOOP7   HALT
        LD HL,(TIME)
        LD DE,TRGBEG
        OR A:SBC HL,DE
        JR C,LOOP7
        LD HL,0
        LD (ISV1+1),HL
        LD HL,#8000
        LD (ISV2+1),HL
        LD A,BBANK:CALL SBANK
LOOP8   LD HL,BANK
        LD A,(HL)
        XOR 8:LD (HL),A
        EI:HALT

LSPOS   LD DE,0;INT-MODIFIED
        CALL BUMPMAP
        JR LOOP8

MAINSP  EQU $+1
EXIT    LD SP,0
        LD HL,#C9FB,(INTSRV),HL
        LD A,BANKM:OUT (#FD)
        CALL HATR0
        EI:HALT
        CALL MUSIC
        RET

;H,L-LIGHT SOURCE Y,X POS
BUMPMAP LD (BMP2+1),SP
        LD A,OFFSET+LSCNT:ADD A,D
        NEG:LD D,A
        LD A,E:OR #80:NEG:LD E,A
        LD B,LSL4[
        EXX
        LD B,BDTAB[
        LD HL,BSATB+WSTRT*4
        LD A,(BANK)
        AND 8:JR Z,BMP1
        LD L,#80+WSTRT*4
BMP1    LD LX,WHGT*2
        LD SP,BMOFFS+(WSTRT')
        JP BMBASE
BMP2    LD SP,0
        RET

INTSRV  LD (ISP+1),SP
        LD (ISP1+1),SP
        LD SP,INTSP
        PUSH AF,HL,DE,BC,IX
        EXX:EXA
        PUSH AF,HL,DE,BC,IY
        LD A,(BANK):XOR 8
        PUSH AF
        LD (ISP2+1),SP
ISP     LD SP,0
        POP HL:LD (INTJP+1),HL
        LD (ISP3+1),SP
        LD SP,(ISP2+1)
        AND 8:OR BANKM:OUT (#FD),A

        CALL MUSIC

        LD HL,(TIME)
        LD DE,TRGEND
        OR A:SBC HL,DE
        JP NC,EXIT

        LD HL,USTAT:BIT 0,(HL)
        JP Z,ISV
        LD A,#50:OUT (#FD),A

ISV1    LD HL,0
        LD BC,STEPY
        ADD HL,BC
        LD (ISV1+1),HL
        LD L,H:LD H,CSTB[
        LD D,(HL)
ISV2    LD HL,0
        LD BC,STEPX
        ADD HL,BC
        LD (ISV2+1),HL
        LD L,H:LD H,(CSTB[)+1
        LD E,(HL)
;.2      SRL E:SRL D;SCALING
        LD HL,LSPOS+2
        LD (HL),D:DEC HL
ISV2A   SCF:JR NC,ISV2B
        LD (HL),E
ISV2B   LD HL,(TIME)
        LD DE,TRGHIDE
        OR A:SBC HL,DE
        JR C,ISP1
        LD A,#B7:LD (ISV2A),A

        LD HL,LSPOS+1
        LD A,(HL)
        ADD A,HSTEP
        CP #80:JR C,$+4:LD A,#80
        LD (HL),A

;RESTORE BUMP OFFSETS (BANK #50)
        LD HL,0:LD (#BFBE),HL
ISP1    LD HL,0:LD A,H
        SUB BMOFFS[:JR C,ISV0
        CP #18:JR NC,ISV0
        LD SP,HL:POP HL
        LD A,BBANK:OUT (#FD),A
        PUSH HL
ISV0    LD HL,(TIME)
        INC HL
        LD (TIME),HL
ISP2    LD SP,0
        POP AF:OUT (#FD),A
        POP IY,BC,DE,HL,AF
        EXX:EXA
        POP IX,BC,DE,HL,AF
ISP3    LD SP,0
        EI
INTJP   JP 0

;A-COLOR
CLATTR  CALL HIDEATR
CLSCR   LD HL,#57FF
        LD B,A:LD C,0
        CALL CLATR
        LD HL,#D7FF
CLATR   LD (HL),C:DEC HL
        BIT 6,H:JR NZ,CLATR
        INC HL
        LD A,H:ADD A,#18:LD H,A
CLAT1   LD (HL),B:INC HL:LD A,H
        RRA:JR NC,CLAT1
        RRA:JR NC,CLAT1
        RET

HIDEATR LD HL,BANK
        LD (HL),#5F
        EI:HALT
HATR0   LD HL,#5800
        LD DE,#5801
        LD BC,#02FF
        LD (HL),L
        LDIR
        RET

BINIT   ;BUMP INIT PROG
        CALL VECTRZ
        LD DE,BDTAB
        LD HL,DTDAT2
        CALL CRDTB
        LD IX,BSATB
        CALL CRSATB
        CALL DCRBMC
        CALL CRCOS

        LD A,#50:CALL SBANK
        LD HL,TMPCOS+#0100
        LD DE,CSTB
        LD BC,512
        LDIR
        LD HL,LSRC+((LSCNT-1)')
        LD DE,HL:INC D
        LD A,LSCNT
CCOS3   LD BC,256:LDIR
        DEC H,H
        DEC A:JR NZ,CCOS3
        RET

SBANK   LD (BANK),A
        OUT (#FD),A
        RET

;VARS
BANK    DB 0
LOGOCOL DB 0
TIME    DW 0
USTAT   DB 0
;PART   (0)
;RNDENA (1)
;PRES   (2)

;*****************************
; CURRENT ADDRESS #61CC
;THIS CODE WILL B KILLED BY cstb
; AND CLEAR MEM UP TO #6400 !
;*****************************

;__'":_ '':'_'_: __'__ _ '__"'>
CRCOS   LD HL,COSDAT
        LD DE,TMPCOS
        LD BC,#0100
        LDIR

;CLEAR LIGHT SRC - LSRC,#2700
        LD HL,0
        LD DE,HL
        ADD HL,SP
        LD SP,LSRC+(LSCNT')
_LD BC,((LSCNT<<4)[)+((LSCNT)<<12)+1
CLSRC
.8      PUSH DE
        DJNZ $-8
        DEC C:JR NZ,CLSRC
        LD SP,HL

        LD IX,OCTSTEP
        LD HL,LSRC+((LSCNT-1)')+#80
        LD DE,HL:DEC E
        EXX
        LD LY,0
CCOS1   LD A,LY:LD L,A
        LD H,TMPCOS[
        LD A,(HL):AND #F0
        LD (CCOS2A+1),A;RADIUS
        LD C,(IX),B,(IX+1)
        INC IX,IX
        LD HL,0:LD (CCOS2+1),HL
CCOS2   LD HL,0:ADD HL,BC
        LD (CCOS2+1),HL
        LD A,H:EXA
        LD L,H:LD H,TMPCOS[
        LD E,(HL)
CCOS2A  LD H,0
        LD D,0:LD L,D
        CALL MUL+4*4
        EXX
        LD (HL),A:INC L
        LD (DE),A:DEC E
        EXX
        EXA:CP #80
        JR C,CCOS2
        EXX
        DEC H:LD L,#80
        DEC D:LD E,#7F
        EXX
        LD A,LY:ADD A,4:LD LY,A
        CP #80:JR C,CCOS1

        LD HL,TMPCOS
        LD DE,TMPCOS+#0100
        LD BC,TMPCOS+#0240
CCOS4   LD A,(HL):INC L
        EXX
        LD E,A
        LD H,(RADX*2)<<2
        EXA
        LD D,0:LD L,D
        CALL MUL+2*4
        ADD A,32*SCALE-RADX
        EXA
        LD E,A
        LD H,(RADY*2)<<2
        LD L,D
        CALL MUL+2*4
        ADD A,24*SCALE-RADY
        EXX
        LD (DE),A:EXA
        LD (BC),A
        INC C,E
        JR NZ,CCOS4
        RET

MUL
.8      ADD HL,HL:JR NC,$+3:ADD HL,DE
        LD A,H
        RET

;128/WIDTH
OCTSTEP DS 8,"@2104"
        DS 4,"@3104"
        DS 8,"@4404"
        DS 6,"@6A04"
        DS 4,"@9204"
        DS 4,"@BE04"
        DW #04EC,#051F
        DS 4,"@5505"
        DW #0591,#05D1,#0618
        DW #0666,#071C,#0788
        DW #0800,#0925,#0AAB
        DW #0E39,#199A

COSDAT  INCB "COSFF"

PART0   LD HL,SCRDAT
        LD DE,LOGODT
        LD BC,#0820
        LDIR

        CALL FINIT
        LD A,#0F
        LD (LOGOCOL),A

LOOP    LD HL,BANK
        LD A,(HL)
        XOR #0A:LD (HL),A
        EI:HALT

        LD HL,(TIME)
        LD DE,TLGBEG
        OR A:SBC HL,DE
        JR C,LOOP1
        LD HL,(TIME)
        LD DE,TLGBEG+2
        OR A:SBC HL,DE
        JR NC,LOOP1
        CALL DITLOGO
LOOP1   LD HL,(TIME)
        LD DE,TFLBEG
        OR A:SBC HL,DE
        JR C,LOOP5
        LD HL,(TIME)
        LD DE,TFLEND
        XOR A:SBC HL,DE
        JR C,LOOP4
        LD HL,USTAT:SET 1,(HL)
LOOP4   CALL FLAME
LOOP5   LD HL,(TIME)
        LD DE,TPRES
        OR A:SBC HL,DE
        JR C,LOOP6
        LD HL,USTAT:SET 2,(HL)
LOOP6   LD HL,(TIME)
        LD DE,TFLEXIT
        OR A:SBC HL,DE
        JP C,LOOP
        RET

FLAME   LD HL,USTAT:BIT 1,(HL)
        JR NZ,RNDOFF
        CALL RND
FLAM    LD DE,CHUNKY
        LD HL,CHUNKY+256+255
        LD B,#0F
        EXX
        LD HL,FSATB+FSTR*2
FLM1    LD B,FDTAB[
        LD LX,HGT-1
FLM2    LD E,(HL):INC L
        LD D,(HL):INC L
        CALL FLBASE
        EXX
        INC H:LD L,#FF
        INC D:LD E,0
        EXX
        DEC LX:JR NZ,FLM2
        RET

RNDOFF  LD A,(LOGOCOL)
        SUB 1:JR NC,$+3
        XOR A
        LD (LOGOCOL),A
        CALL DITLOGO
        LD HL,CHUNKY+(HGT-1)*256
        LD B,WDT:XOR A
        LD (HL),A:INC L
        DJNZ $-2
        JR FLAM

RND     LD DE,CHUNKY+(HGT-1)*256
RND0    LD HL,#1021
        LD B,WDT
RND1    ADD HL,HL
        JR NC,RND2
        LD A,R:XOR L
        OR 10:LD L,A
RND2    LD A,L
        AND #3F
        LD (DE),A:INC E
        DJNZ RND1
        LD (RND0+1),HL
        RET

;SP-DATA
;C-MASK
;HL-SCR
;IY-JUMP

DITLOGO DI
        LD (DLG5+1),SP
        LD HL,LSATB+LSTR*2
DLG1    LD (DLG3+1),HL
        LD LX,LHGT*8/4
        LD IY,DLG4
        LD A,(LOGOCOL)
        CP #0F
        JR C,$+4:LD A,#0F
        ADD A,A,A,A
        ADD A,DTDAT]:LD E,A
        ADC A,DTDAT[:SUB E
        LD D,A
        LD BC,DE
        EXX
        LD SP,LOGODT

DLG2    LD B,4
DLG3    LD HL,0
        LD E,(HL):INC L
        LD D,(HL):INC L
        LD (DLG3+1),HL
        EX DE,HL
        EXX
        LD A,(DE):INC DE
        EXX
        LD C,A
        JP DTBASE
DLG4    DJNZ DLG3
        EXX
        LD DE,BC
        EXX
        DEC LX:JR NZ,DLG2
DLG5    LD SP,0
        EI
        RET

;-FLAME PART OF INTSERVER

ISV     LD A,(BANK):XOR #0A
        OUT (#FD),A
ISVA    LD A,#42;FLAME
        XOR #40
        LD (ISVA+1),A
        LD E,A,D,A
        LD SP,#DB00
        LD B,20
.8      PUSH DE
        DJNZ $-8
        LD SP,#D937
        XOR A
        LD HL,USTAT:BIT 2,(HL)
        JR Z,PRSN0
PRSN    LD A,#42
        XOR 1
        LD (PRSN+1),A
PRSN0   LD E,A:LD D,A
        LD B,2
PRSN1
.6      PUSH DE
        LD HL,11-32
        ADD HL,SP:LD SP,HL
        DJNZ PRSN1
        JP ISV0

;----------------
FINIT   LD HL,0:LD DE,HL
        ADD HL,SP
        LD SP,CHUNKY+(HGT')
        LD C,HGT
FILL1   LD B,#10
.8      PUSH DE
        DJNZ $-8
        DEC C:JR NZ,FILL1
        LD SP,HL

        CALL DCFLM
        LD DE,FDTAB
        LD HL,DTDAT
        CALL CRDTB
        LD IX,FSATB
        LD HL,#C000
        CALL CSAT

;SCREEN ADR TABS
;1*1+LOGOX
        LD HL,#C000+LOGOX
        LD IX,LSATB
CLSAT   LD B,128
CLSAT0  LD (IX+0),L
        LD (IX+1),H
.2      INC IX
        INC H:LD A,H
        AND 7:JR NZ,CLSAT1
        LD A,L:ADD A,#20:LD L,A
        JR C,CLSAT1
        LD A,H:SUB 8:LD H,A
CLSAT1  DJNZ CLSAT0
        RET

;DEPACKING BUMP DATA
;2 DEPTH (4b) PACKED IN ONE BYTE
DPCBMAP LD HL,BUMPDAT
        LD DE,BUMPSRC
        LD C,48
DPBM1   LD B,32
DPBM2   LD A,(HL)
.4      RRCA
        AND #0F :CP 9
        JR C,$+4:LD A,8
        LD (DE),A:INC E
        LD A,(HL):INC HL
        AND #0F :CP 9
        JR C,$+4:LD A,8
        LD (DE),A:INC E
        DJNZ DPBM2
        XOR A:LD (DE),A
        INC D:LD E,A
        DEC C:JR NZ,DPBM1
        LD (DE),A:INC E
        JR NZ,$-2
        RET

;':_'___+_-__
;X/Y OFFSET=(LZ-Z1)*(Z2-Z1)+X/Y

VECTRZ  LD A,#50:CALL SBANK
        CALL DPCBMAP
        LD HL,BUMPSRC
        LD IX,BMOTMP
        PUSH HL,IX
VCT1    LD C,(HL):INC L;Z1
        CALL VCTX
        ADD A,L:DEC A
        LD (IX+0),A
        INC LX,LX
        BIT 6,L
        JR Z,VCT1
        DEC LX:INC IX
        INC H:LD L,0
        LD A,H:CP (BUMPSRC[)+48
        JR C,VCT1
        POP IX,HL
        INC LX
        LD LY,64
VCT3    LD B,48
VCT4    LD C,(HL):INC H;Z1
        CALL VCTX
        LD C,A
        LD A,H:DEC A
        AND #3F
        ADD A,C
        LD (IX+0),A
        LD DE,#80
        ADD IX,DE
        DJNZ VCT4
        INC L:LD H,BUMPSRC[
        INC LX,LX:LD HX,BMOTMP[
        DEC LY:JR NZ,VCT3
        LD HL,BMOTMP
        LD DE,BMOFFS
        LD BC,#1800
        PUSH HL,DE,BC
        LDIR
        LD A,BBANK:CALL SBANK
        POP BC,DE,HL
        LDIR
        LD HL,LSL4
        LD C,#0F
MLSL    LD A,L:AND C
.4      RLCA
        LD (HL),A:INC L
        JR NZ,MLSL
        RET

VCTX    LD A,(HL);Z2
        SUB C
        EXA;Z2-Z1 [+-]
        LD A,LZ
        SUB C;LZ-Z1
        PUSH HL
        LD E,A
        EXA;+-SIGN
        JR NC,$+6:NEG:RR C
        LD L,0:LD D,L
.3      ADD A,A
        LD H,A
.5      ADD HL,HL:JR NC,$+3:ADD HL,DE
        LD A,L
        CP SMOOTH:JR C,$+4:LD A,SMOOTH
        RL C:JR C,$+4:NEG
;BUMP OUT=C (IN=NC)
        POP HL
        RET

;SCREEN ADDRESS TABLE 4*4
;IX-TABLE ADR (___'_'>%)
CRSATB  LD HL,#4000
        CALL CSAT
        LD HL,#C000
        LD LX,#80

CSAT    LD B,48
CSAT0   LD (IX+0),L
        LD (IX+1),H
.2      INC IX
        LD A,H:ADD A,4:LD H,A
        AND 7:JR NZ,CSAT1
        LD A,L:ADD A,#20:LD L,A
        JR C,CSAT1
        LD A,H:SUB 8:LD H,A
CSAT1   DJNZ CSAT0
        RET

;CREATE DITHER TABLE
;DE-TABLE ADR
;HL-DITHER DAT
CRDTB   LD (CRDD1+1),HL
        LD BC,4:ADD HL,BC
        LD (CRDD2+1),HL
        EX DE,HL
CRDT0   LD A,L:AND #F0
.2      RRCA
CRDD1   LD DE,DTDAT
        ADD A,E:LD E,A
        ADC A,D:SUB E:LD D,A
        LD B,4
CRDT1   LD A,(DE):INC DE
        AND #F0
        LD (HL),A:INC H
        DJNZ CRDT1
        LD A,L:AND #0F
.2      RLCA
CRDD2   LD DE,DTDAT+4
        ADD A,E:LD E,A
        ADC A,D:SUB E:LD D,A
        LD B,4
CRDT2   DEC DE:LD A,(DE)
        AND #0F
        DEC H:OR (HL)
        LD (HL),A
        DJNZ CRDT2
        INC L:JR NZ,CRDT0
        RET

;DCR FLAME CODE
DCFLM   LD DE,FLBASE
        LD B,0
        LD A,WDT/4
DCFLM1  LD HL,FLCD
        LD C,EFLCD-FLCD
        LDIR
        LD HL,DTCD1
        LD C,DTCD2-DTCD1
        LDIR
        LD HL,FLCD
        LD C,EFLCD-FLCD
        LDIR
        LD HL,DTCD2
        LD C,EDCD-DTCD2
        LDIR
        DEC A:JR NZ,DCFLM1
        DEC DE
        LD A,#C9:LD (DE),A
        LD A,LWDT/2
        LD DE,DTBASE
DCDIT1  LD HL,DTCD
        LD C,EDTCD-DTCD
        LDIR
        DEC A
        JR NZ,DCDIT1
        DEC DE:EX DE,HL
        LD (HL),#FD:INC HL
        LD (HL),#E9
        RET

;DCR BUMPMAP CODE
DCRBMC  LD DE,BMBASE
        LD HL,BMPC
        LD BC,BMPC1-BMPC
        LDIR
        PUSH HL
        LD A,16
DCRBC   LD HL,BMCD
        LD C,EBMCD-BMCD
        LDIR
        LD HL,DTCD1
        LD C,DTCD2-DTCD1
        LDIR
        LD HL,BMCD
        LD C,EBMCD-BMCD
        LDIR
        LD HL,DTCD2
        LD C,EDCD-DTCD2
        LDIR
        DEC A:JR NZ,DCRBC
        DEC DE
        POP HL
        LD C,BMPC2-BMPC1
        LDIR
        LD A,#C9:LD (DE),A
        RET

;FLAME MAIN LOOP
;HL-CHUNKY+64
;DE-CHUNKY
;B=#0F-MASK
;DE'-SCR
;B'-DTAB

;LITTLE PIECE OF LAME CODE
;TRY TO RIP X-PLAYER2.1 4 GS!
;WHICH I START TO CODE
;AT THE END OF THIS DEMO

FLCD    EXX
        LD A,(DE)
        ADD A,(HL):INC L
        ADD A,(HL):INC L
        ADD A,(HL):DEC L
        LD C,A
        RRA:SRL A
        JR Z,$+3:DEC A
        LD (DE),A:INC E
        LD A,(DE)
        ADD A,(HL):INC L
        ADD A,(HL):INC L
        ADD A,(HL):DEC L
        RRA:SRL A
        JR Z,$+3:DEC A
        LD (DE),A:INC E
        RRA:RRA
        XOR C
        AND B;#0F
        XOR C
        EXX
        LD C,A
EFLCD

;DITLOGO MAIN LOOP
;SP-DATA
;C-MASK
;HL-SCR

DTCD    POP DE
        LD A,E:AND C
        LD (HL),A:INC L
        LD A,D:AND C
        LD (HL),A:INC L
EDTCD

;BUMPMAP MAIN LOOP (64 PIX)
;DE - SCREEN
;BC - DTAB
;E' - LIGHT SOURCE X POS
;D' - -(#3E+LSCNT+LS Y POS)
;B' - TABLE "<<4"

BMCD    EXX
        POP HL
        ADD HL,DE
        LD C,(HL)
        LD A,(BC)
        POP HL
        ADD HL,DE
        OR (HL)
        EXX
        LD C,A
EBMCD
DTCD1
.3      LD A,(BC),(DE),A:INC B,D
        LD A,(BC),(DE),A:INC E
DTCD2
.3      LD A,(BC),(DE),A:DEC B,D
        LD A,(BC),(DE),A:INC E
EDCD

BMPC    LD E,(HL):INC L
        LD D,(HL):INC L
BMPC1   DEC LX:JP NZ,BMBASE
        JP BMP2
BMPC2

DTDAT   ;16 COLORS DITHER DATA
        DB #00,#00,#00,#00
DTDAT2  DB #00,#00,#00,#00
        DB #88,#00,#00,#00
        DB #88,#00,#22,#00
        DB #AA,#00,#22,#00
        DB #AA,#00,#AA,#00
        DB #AA,#44,#AA,#00
        DB #AA,#44,#AA,#11
        DB #AA,#55,#AA,#55
        DB #AA,#DD,#AA,#77
        DB #AA,#77,#AA,#FF
        DB #AA,#FF,#AA,#FF
        DB #AA,#FF,#BB,#FF
        DB #EE,#FF,#BB,#FF
        DB #EE,#FF,#FF,#FF
        DB #FF,#FF,#FF,#FF
        DB #00,#00,#00,#00

BUMPDAT INCB "RAGE16"
SCRDAT  INCB "intrc"
LMUS    INCB "M.EXE"
ELMUS
ECODE

