;
;        WATER INVASION v1.0 - (c) EPSILON 1996
;
ORG #8000
; ENT $
;
SSTONE1 EQU 64*11+#F000+13
SSTONE2 EQU 64*8+#E000+35
SSTONE3 EQU 64*8+#E800+55
SSTONE4 EQU 64*16+#E800+49
SSTONE5 EQU 64*23+#D000+19
SSTONE6 EQU 64*24+#E000+53
NBWATER EQU 1280
VALWATER EQU #CC
;
LD A,(#A700)
PUSH AF
LD HL,#ABFF
LD DE,#40
CALL #BCCB
POP AF
LD (#A700),A
;
XOR A
CALL #BC0E
LD HL,OUT_F
CALL OUT
;
LD HL,TABCOL
LD B,16
XOR A
GOCOL PUSH BC
PUSH AF
PUSH HL
LD C,(HL)
LD B,C
CALL #BC32
POP HL
INC HL
POP AF
INC A
POP BC
DJNZ GOCOL
LD BC,0
CALL #BC38
;
LD HL,#4000
LD DE,#C000
LD B,28
CALL GOSPR
LD HL,#4D4A
LD DE,64*3+#D800
LD B,25*8
CALL GOSPR
LD HL,#4705
LD DE,64*29+#C000
LD B,24
CALL GOSPR
;
LD DE,TABWAT
LD B,NBWATER/10
CLCWAT PUSH BC
LD HL,PRETAB
LD BC,30
LDIR
POP BC
DJNZ CLCWAT
;
LD HL,STONE
LD DE,SSTONE1
LD B,4
CALL AFFSTONE
LD HL,STONE
LD DE,SSTONE2
LD B,4
CALL AFFSTONE
LD HL,STONE
LD DE,SSTONE3
LD B,4
CALL AFFSTONE
LD HL,STONE
LD DE,SSTONE4
LD B,4
CALL AFFSTONE
LD HL,STONE
LD DE,SSTONE5
LD B,4
CALL AFFSTONE
LD HL,STONE
LD DE,SSTONE6
LD B,4
CALL AFFSTONE
;
DI
LD HL,(#38)
LD (END+1),HL
LD HL,#C9FB
LD (#38),HL
EI
;
SYNC LD B,#F5
IN A,(C)
RRA
JR NC,SYNC+2
EI
;
LD B,#FF
DJNZ $
;
HALT
HALT
HALT
HALT
HALT
HALT
;
CALL WATER
;
CALL TESTKEY
LD A,(BUFFKEY+6)
CP #FD
JP Z,STONE5
CP #FE
JP Z,STONE6
LD A,(BUFFKEY+7)
CP #FE
JP Z,STONE4
CP #FD
JP Z,STONE3
LD A,(BUFFKEY+8)
CP #FD
JP Z,STONE2
CP #FE
JP Z,STONE1
LD A,(BUFFKEY)
CP #BF
JP Z,REFLET
;
XOR A
LD (STONE3+1),A
LD (STONE2+1),A
LD (STONE1+1),A
LD (STONE4+1),A
LD (STONE5+1),A
LD (STONE6+1),A
LD (REFLET+1),A
;
LD A,(BUFFKEY+8)
CP #FB
JP NZ,SYNC
;
END_ LD HL,0
LD (#38),HL
;
LD HL,OUT_N
CALL OUT
LD A,2
CALL #BC0E
CALL #BB03
RET
;
TESTKEY LD HL,BUFFKEY
LD BC,#F40E
OUT (C),C
LD B,#F6
IN A,(C)
AND #30
LD C,A
OR #C0
OUT (C),A
OUT (C),C
LD BC,#F792
OUT (C),C
LD C,#40
TESTK LD B,#F6
OUT (C),C
LD B,#F4
IN A,(C)
LD (HL),A
INC HL
INC C
LD A,C
CP #4A
JR NZ,TESTK
LD BC,#F782
OUT (C),C
LD BC,#F600
OUT (C),C
RET
;
BUFFKEY DS 10
;
REFLET LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (REFLET+1),A
GOREFLET LD A,#FF
XOR #FF
LD (GOREFLET+1),A
OR A
JR Z,REF
LD A,#0C
LD (PKVALA+1),A
LD (PKVALC+1),A
LD A,#F0
LD (PKVALB+1),A
JP SYNC
REF LD A,VALWATER
LD (PKVALA+1),A
LD (PKVALC+1),A
LD (PKVALB+1),A
JP SYNC
;
STONE3 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE3+1),A
GOSTONE3 LD A,#FF
XOR #FF
LD (GOSTONE3+1),A
OR A
JR Z,ST3A
LD HL,STONE
JP ST3B
ST3A LD HL,CSTONE
ST3B LD DE,SSTONE3
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE2 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE2+1),A
GOSTONE2 LD A,#FF
XOR #FF
LD (GOSTONE2+1),A
OR A
JR Z,ST2A
LD HL,STONE
JP ST2B
ST2A LD HL,CSTONE
ST2B LD DE,SSTONE2
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE1 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE1+1),A
GOSTONE1 LD A,#FF
XOR #FF
LD (GOSTONE1+1),A
OR A
JR Z,ST1A
LD HL,STONE
JP ST1B
ST1A LD HL,CSTONE
ST1B LD DE,SSTONE1
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE4 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE4+1),A
GOSTONE4 LD A,#FF
XOR #FF
LD (GOSTONE4+1),A
OR A
JR Z,ST4A
LD HL,STONE
JP ST4B
ST4A LD HL,CSTONE
ST4B LD DE,SSTONE4
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE5 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE5+1),A
GOSTONE5 LD A,#FF
XOR #FF
LD (GOSTONE5+1),A
OR A
JR Z,ST5A
LD HL,STONE
JP ST5B
ST5A LD HL,CSTONE
ST5B LD DE,SSTONE5
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE6 LD A,0
OR A
JP NZ,SYNC
LD A,#FF
LD (STONE6+1),A
GOSTONE6 LD A,#FF
XOR #FF
LD (GOSTONE6+1),A
OR A
JR Z,ST6A
LD HL,STONE
JP ST6B
ST6A LD HL,CSTONE
ST6B LD DE,SSTONE6
LD B,4
CALL AFFSTONE
JP SYNC
;
STONE DB #8F,#87,#87,#C7
DB #1E,#96,#69,#69
DB #4B,#2D,#96,#87
DB #8F,#C7,#4B,#4F
CSTONE DS 4*4
;
AFFSTONE PUSH BC
PUSH DE
LDI
LDI
LDI
LDI
POP DE
EX DE,HL
CALL BC26
EX DE,HL
POP BC
DJNZ AFFSTONE
RET
;
OUT LD BC,#BD04
O_INCP DEC B
LD A,(HL)
OUT (C),A
INC B
INC HL
LD A,(HL)
OUT (C),A
INC HL
DEC C
JR NZ,O_INCP
RET
;
OUT_F DB 1,32,2,42,6,32,7,34
OUT_N DB 1,40,2,46,6,25,7,30
;
GOSPR PUSH BC
PUSH DE
LD BC,64
LDIR
POP DE
EX DE,HL
CALL BC26
EX DE,HL
POP BC
DJNZ GOSPR
RET
;
TABCOL DB 0,26,14,5,1,23,25,4
DB 8,16,6,3,9,18,17,13
;
BC26 LD A,H
ADD A,08
LD H,A
AND #38
RET NZ
LD A,H
SUB #40
LD H,A
LD A,L
ADD A,64
LD L,A
RET NC
INC H
LD A,H
AND #07
RET NZ
LD A,H
SUB 8
LD H,A
RET
;
WATER LD IX,TABWAT
OKWAT3 LD BC,0
INC BC
LD A,B
CP #05
JR Z,OKWAT1
LD (OKWAT3+1),BC
;
OKWAT1 LD L,(IX+0)
LD H,(IX+1)
LD A,(HL)
CP #8F
JR Z,OKWAT10
CP #87
JR Z,OKWAT10
CP #C7
JR Z,OKWAT10
CP #1E
JR Z,OKWAT10
CP #96
JR Z,OKWAT10
CP #69
JR Z,OKWAT10
CP #4B
JR Z,OKWAT10
CP #2D
JR Z,OKWAT10
CP #4F
JR Z,OKWAT10
;
LD D,H
LD E,L
;
CALL BC26
;
LD A,(HL)
OR A
JR NZ,OKWAT6
;
EX DE,HL
LD (HL),0
EX DE,HL
;
PKVALA LD A,#0C
PKVALB XOR #F0
PKVALC XOR #0C
LD (PKVALA+1),A
LD (PKVALW+1),A
LD (IX+2),0
JR OKWAT0
;
OKWAT6 LD A,VALWATER
LD (PKVALW+1),A
;
LD A,(IX+2)
OR A
JR NZ,OKWAT5
;
LD H,D
LD L,E
;
INC HL
LD A,(HL)
OR A
JR NZ,OKWAT8
;
EX DE,HL
LD (HL),0
EX DE,HL
JR OKWAT7
;
OKWAT8 LD (IX+2),1
OKWAT5 LD H,D
LD L,E
;
DEC HL
LD A,(HL)
OR A
JR NZ,OKWAT9
;
EX DE,HL
LD (HL),0
EX DE,HL
JR OKWAT0
;
OKWAT9 LD H,D
LD L,E
OKWAT7 LD (IX+2),0
OKWAT0 LD (IX+0),L
LD (IX+1),H
PKVALW LD (HL),VALWATER
OKWAT10 INC IX
INC IX
INC IX
DEC BC
LD A,B
OR C
JP NZ,OKWAT1
RET
;
PRETAB DW 64*4+#D800+3
DB 0
DW 64*4+#D800+3
DB 0
DW 64*4+#D800+3
DB 0
DW 64*4+#D800+3
DB 0
DW 64*3+#F800+2
DB 0
DW 64*4+#D800+3
DB 0
DW 64*4+#D800+3
DB 0
DW 64*3+#F800+2
DB 0
DW 64*3+#F800+2
DB 0
DW 64*4+#D800+3
DB 0
;
TABWAT
;
;
;
;