Mail has been fixed; you should now be able to confirm your e-mail address, watch pages, and the like.
Please report any issues on Discord.

Exodus (ZX Spectrum, Firebird Software)

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Exodus

Developer: Firebird Software
Publisher: Firebird Software
Platform: ZX Spectrum
Released in EU: 1984


SourceIcon.png This game has uncompiled source code.


Source Code Fragment

Large chunks of code were included in this game. These fragments of code take up almost a quarter of the game's space. The following addresses seen below are for the .tzx dump of the game.

3545:

LMST:
DB 221,54,11,0
DB 221,54,1,0
CALL RA
LD (IX+4),A
DB 221,54,12,0
RET
RMST:
DB 221,54,11,0
DB 221,54,1,0
CALL RA
LD (IX+4),A
DB 221,54,12,0
RET
UM:
DB 221,54,11,0
CALL RA
LD (IX+1), A
DB 221,54,4,0
DB 221,54,12,1
RET
D6:
DB 221,54,11,0
CALL RA
LD (IX+1),A
DB 221,54,4,0
DB 221,54,12,1
RET
RA:;A=255 OR 1
CALL RND
AND 1
CP 1
RET Z
LD A,255
RET
ISC:
CALL IF
LD A,50
DB 50
DW S+25;OPS TO HIT
LD A,(S+53)
CP 2
CALL Z,CH2
LD A,(S+24)
INC A
CP 3
JR Z,N2
DB 50
DW S+24
CALL OFF
CALL TUN
JP WS
N2:
LD A,0
DB 50
DW S+24
CALL INCL
CALL OFF
CALL TUN
JP WS
INCL:
LD A,(S+23)
CP 9
RET Z
INC A
DB 50
DW S+23
RET
CH:
LD E,0
RET
CEB:
LD A,(IX+12)
AND 128
RET NZ
LD A,(S+23)
CP 7
RET C
LD A,(IX+11)
CP 251
JR Z,PCE
CP 255
RET NZ
PCE:
CALL RND
CP 230
RET C
PUSH IY
POP HL
LD B,4
DI
LD IY,BST+11
LD DE,11
FBL:
LD A,(IY+0)
CP 0
JR Z,FND
ADD IY,DE
DJNZ FBL
PUSH HL
POP IY
EI
RET
FND:
;IX=OPST   IY=BST
XOR A
LD A,(IX+3)
SUB 3
RLA
RLA
RLA
CP 170
JR NC,NGD
LD (IY+1),A
XOR A
LD A,255
LD B,(IX+2)
DEC B
DEC B
RL B
RL B(IY+4),A
LD A,(IX+16)
LD (IY+5),A
LD A,(IX+12)
INC A
LD (IY+6),A
XOR A
LD (IY+7),A
LD (IY+8),A
LD (IY+9),A
LD (IY+10),A
PUSH IX
PUSH IY
POP IX
PUSH HL
POP IY
CALL PB
POP IX
EI
RET
NGD:
PUSH HL
POP IY
EI
RET
N1:
PUSH BC
LD A,(S+36)
ADD A,16
OUT (0FEH),A
CALL RND
LD B,A
NS2:
DJNZ NS2
LD A,(S+36)
OUT (0FEH),A
CALL RND
LD B,A
NS3:DJNZ NS3
POP BC
DJNZ N1
RET
SQ2:
;RADIATING SQUARES
CALL SQL;DRAW LINE
SQ4:
DEC B
DEC E
JR Z,FI
PUSH DE
CALL SQ3
POP DE
JR SQ4
FI:
SQL:;DRAW LINE AT BC,DLONG
PUSH DE
CALL 0DD9H
POP DE
PUSH DE
POP HL
Q:
LD A,32
RST 16
LD A,H
CP 0
RET Z
DEC H
JR Q
SQ3:;DRAW AT BC AND BC-D
PUSH DE
CALL 0DD9H
POP DE
LD A,32
RST 16
PUSH BC
LD A,C
SUB D
LD C,A
CALL 0DD9H
LD A,32
RST 16
POP BC
RET
TUN:
LD HL,256*60
LD (23606),HL
CALL O0
LD A,1
LLOOP:
DB 50
DW S+21
LD A,16
RST 16
LD A,(S+21)
RST 16
LD A,17
RST 16
LD A,(S+21)
RST 16
LD B,0
LOOP:
PUSH BC
LD A,B
RLCA
INC A
LD D,A
LD E,A
LD A,22
ADD A,B
LD C,A
LD A,13
ADD A,B
LD B,A
LD A,32
CALL SQ2
LD B,10
CALL N1
POP BC
INC B
LD A,B
CP 12
JR NZ,LOOP
LD A,(S+21)
INC A
AND 7
CP 1
JR NZ,LLOOP
RET
C1:
LD A,(IX+1)
ADD A,(IX+6)
LD (IX+6),A
CP 4
RET C
AND 3
LD (IX+6),A
LD A,(IX+1)
CP 255
LD A,(IX+2)
JR Z,I1
DEC A
DEC A
I1:
INC A
LD (IX+2),A
RET
B9:
LD A,(IX+4)
ADD A,(IX+5)
LD (IX+5),A
CP 4
RET C
AND 3
LD (IX+5),A
LD A,(IX+4)
CP 255
LD A,(IX+3)
JR Z,I2
DEC A
DEC A
I2:
INC A
LD (IX+3),A
RET
COP:;CREATE OPPONENT
CALL RND
AND 7
CP 0
JR Z,COP
CP 1
JR Z,COP
LD (IX+9),A
;DO CHAR SET
CALL RND
AND 15
LD E,A
CALL RND
CP 128
JR C,NO2
LD A,E
ADD A,5
LD E,A
NO2:
;E HAS SPRITE NO
LD A,(S+23);LLEVEL
CP 3
JR NC,OK1
;SPUD NOT ALLOWED
LD A,E
CP 7
CALL Z,CH
LD A,(S+23)
OK1:
CP 5
JR NC,OK2
;LLLAMAS NOT ALOWED
LD A,E
CP 2
CALL Z,CH
LD A,E
CP 14
CALL Z,CH
;NO BUNNIES EITHER
LD A,E
CP 18
CALL NC,CH
OK2:
PUSH DE
XOR A
LD D,A
RL E
RL E
LD HL,OT
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD A,(HL)
LD (IX+11),A;SCORE?
INC HL
LD A,(HL)
CP 0
JR Z,U
LD (IX+9),A
U:
LD HL,0F000H-256-10240
ADD HL,DE
LD (IX+7),L
LD (IX+8),H
AG:
CALL RND
AND 7
CP 0
JR Z,AG
SUB 4
LD C,A
JR Z,S9;??
CALL RND
AND 7
S9:
SUB 4
LD B,A
;CALC GRAD
LD A,C
SUB B
JR C,D7
LD A,B
LD B,C
LD C,A
D7:
LD A,0
LD (IX+12),A
LD H,0
LD L,C
LD A,B
PUSH BC
CALL DIV
POP BC
LD (IX+16),H
LD H,L
LD L,0
LD A,B
CALL DIV
LD (IX+15),H
CALL RND
AND 1
LD (IX+12),A
;GET VALID DIR OR RND
POP DE
LD A,E
CP 2
JR Z,RI
CP 8
JR Z,LEFT
CP 10
JR Z,RI
CP 12
JR Z,RI
CP 13
JR Z,LEFT
CP 14
JR Z,LEFT
CP 16
JR Z,RI
CP 18
JR Z,LEFT
CP 19
JR Z,RI
CP 20
JR Z,LEFT
CALL RND
AND 1
CP 0
JR NZ,Q1
LEFT:
LD A,255
JR Q1
RI:
LD A,1
Q1:
LD (IX+1),A
CALL RND
AND 1
CP 0
JR NZ,Q2
LD A,255
Q2:
LD (IX+4),A
DB 221,54,0,32;PRINTCH
DB 221,54,10,0
DB 221,54,13,0
DB 221,54,14,0
DB 221,54,2,23;ACC
DB 221,54,3,13;DN
DB 221,54,5,0
DB 221,54,6,0
DB 221,54,17,1
LD A,(S+23);LEVEL
CP 7
CALL NC,ZZ
CALL RND
CP 192
JP C,OPPR
DB 221,54,17,2
JP OPPR
ZZ:;CREATE ZIGZAG
LD A,(S+24)
CP 2
RET NZ
LD A,(IX+11)
CP 2;SPHEAR
RET Z
CALL RND
CP 128
RET C
LD A,(IX+12)
OR 128
LD (IX+12),A
DB 221,54,17,2
DB 221,54,13,0
DB 221,54,14,0
DB 221,54,15,2
DB 221,54,16,0
RET
IT:;INC TIM
LD A,(S+12)
LD H,A
LD A,(S+13)
LD L,A
ADD HL,DE
LD DE,100
PUSH HL
XOR A
SBC HL,DE
POP HL
JR C,DOT
LD HL,99
DOT:
LD A,H
DB 50
DW S+12
LD A,L
DB 50
DW S+13
RET
TO:
LD DE,OUTS
CALL TFF
LD A,5
DB 50
DW S+31
JP DED
OUTS:
DB 16,6,17,0,18,1," OUT ",18,0
DB 255
OFF:

4D15:

LD HL,0F000H-256-10240
LD (IX+7),L
LD (IX+8),H
NO:
LD A,(IX+6)
DB 50
DW S+18
LD A,(IX+5)
DB 50
DW S+17
PUSH IX
PUSH BC
XOR A
LD D,A
LD HL,ACS
LD B,72
LD (HL),A
INC HL
DEC B
DW 0FB20H
;DO PIXEL MOVE
LD H,(IX+8)
LD L,(IX+7)
LD IX,ACS
SLA E
RL D
SLA E
RL D
SLA E
RL D
ADD HL,DE
;HL HAS ADDR OF FIRST CHAR
LD B,2
J4:
PUSH BC
LD E,2
J3:
LD D,8
J1:
LD A,(S+18)
INC A
LD B,A
LD C,(HL)
XOR A
CP C
JR Z,J
J2:
SRL C
RRA 
SRL  C
RRA
DEC B
JR NZ,J2
L  (IX+24),A
LD A,(IX+0)
OR C
LD (IX+0),A
J:
INC IX
INC HL
DEC D
JR NZ,J1
PUSH DE
LD DE,8;JOHN?
ADD HL,DE
POP DE
DEC E
JR NZ,J3
LD DE,8
ADD IX,DE
XOR A
LD DE,24
SBC HL,DE;JOHN
POP BC
DEC B
JR NZ,J4
LD HL,ACS-256
LD A,(S+17);B PIX
LD B,A
XOR A
CP B
JR Z,J5
J6:
DEC HL
DEC HL
DEC B
JR NZ,J6
J5:
LD (23606),HL
POP BC;POSITION
LD A,32
DB 50
DW S+16
LD A,3;SQ SIZE
DB 50
DW S+17
LD E,A
LD A,C
DB 50
DW S+18
U7:
LD A,0
CP B
JR Z,FSH
LD A,(S+17)
LD D,A
LD A,(S+18)
LD C,A
LD A,B
CP 25;UP
JR NC,U4
U3:
LD A,33
CP C
JR NC,U2
LD A,(S+16)
ADD A,3
DB 50
DW S+16
DEC D
JR NZ,SO
LD A,(S+16)
SUB 2
DB 50
DW S+16
SO:
DEC C
JR U3
U2:
LD A,9;FADE>
CP C
JR Z,U4
PUSH DE
CALL 0DD9H
POP  DE
U5:
LD A,(S+16)
RST 16
LD A,(S+16)
ADD A,3
DB 50
DW S+16
DEC D
JR Z,U4
DEC C
LD A,9;FADE>
CP C
JR NZ,U5
U4:;LINE PRINTED D LONG
XOR A
CP D
JR Z,U6
LD A,(S+16)
ADD A,D
SLA D
ADD A,D
DB 50
DW S+16
U6:
LD A,(S+16)
SUB 8;WAS 15
DB 50
DW S+16
DEC B
DEC E
JR NZ,U7
FSH:
POP IX
LD A,(IX+0)
SUB 37
RET NC;IE 36 OR 32
POP HL
LD (IX+7),L
LD (IX+8),H
RET
BD:;BDED
LD A,0
DB 50
DW 59998
LD (IX+0),A
JP NB
EMB:
LD A,255
DB 50
DW 59998
LD A,10
SUB B
JP NC,BD
LD A,10
SUB C
JP NC,BD
LD A,170
SUB C
JP C,BD
LD A,170
SUB B
JP C,BD
JP NDED
MB:
XOR A
DB 50
DW S+31
LD A,16
RST 16
LD A,7
RST 16
LD B,5
LD IX,BST
MBL:
PUSH BC
LD A,(IX+0)
CP 0
JP Z,NB
;DELETE BUL
CALL PB
POP BC
PUSH BC
LD A,B
LD B,(IX+1)
LD C,(IX+0)
CP 5
JP NZ,EMB
LD A,95+5
SUB C
CP 10
JR NC,NDED
LD A,80+5
SUB B
CP 10
JR C,BD
NDED:
LD A,(IX+6)
CP 1
CALL Z,DOB
LD A,(IX+6)
CP 2
CALL Z,D1
;INC GRAD COUNT
LD A,(IX+7)
CP (IX+4)
JR NC,YES
JR Z,CU
JR C,NOP
CU:
LD A,(IX+8)
CP (IX+5)
JR C,NOP
YES:
LD H,(IX+7)
LD L,(IX+8)
LD D,(IX+4)
LD E,(IX+5)
XOR A
SBC HL,DE
LD (IX+7),H
LD (IX+8),L
LD A,(IX+6)
CP 1
CALL Z,D1
LD A,(IX+6)
CP 2
CALL Z,DOB
NOP:
LD A,(IX+7)
INC A
LD (IX+7),A
CALL PB
LD A,255
SUB (IX+0)
RRCA
RRCA
RRCA
AND 31
ADD A,2
LD (IX+9),A
LD A,(IX+1)
RRCA
RRCA
RRCA
AND 31
ADD A,3
LD (IX+10),A
;TEST FOR HIT ME
POP BC
PUSH BC
LD A,B
CP 5
JR Z,NB
LD BC,(65500)
LD A,(IX+9)
SUB C
CP 2
JR NC,NB
LD A,(IX+10)
SUB B
CP 2
JR NC,NB
LD A,4
DB 50
DW S+31
NB:
POP BC
LD DE,11
ADD IX,DE
DEC B
JP NZ,MBL
LD A,(S+31)
CP 0
RET Z
POP BC
JP DED
DOB:
LD A,(IX+1)
ADD A,(IX+3)
ADD A,(IX+3)
LD (IX+1),A
LD B,A
RET
D1:
LD A,(IX+0)
ADD A,(IX+2)
ADD A,(IX+2)
LD (IX+0),A
LD C,A
RET
DIV:
;HL / A ANSW IN H REM IN L
PUSH AF
LD D,A
XOR A
LD B,8
LD A,H
D3:

81B:

6,249,8,241
DB 7,239,11,243,16,249
DB 7,250
GG:;GRAPHICS FOR LIVES
DB 0,0,0,0,0,0,0,0,24,90,90,126
DB 126,255,231,195
SC1:
DB 0,0,83,79,0,65,255,0,83,79,0
DB 0,0,61,79,0,65,255,0,83,79
DB 21
DB 0,0,40,79,0,65,255,0,83,79
DB 43
DB 0,0,108,79,0,65,1,0,108,79
DB 0
DB 0,0,130,79,0,65,1,0,108,79
DB 21
DB 0,0,152,79,0,65,1,0,108,79
DB 43
DB 0,0,94,92,0,65,0,1,94,92,0
DB 0,0,94,114,0,65,0,1,94,92,21
DB 0,0,94,136,0,65,0,1,94,92,43
DB 0,0,94,66,0,65,0,255,94,66,0
DB 0,0,94,44,0,65,0,255,94,66
DB 22
DB 0,0,94,22,0,65,0,255,94,66
DB 44
SC2:
DB 0,0,86,90,0,70,255,1,86,90,0
DB 0,0,63,113,0,70,255,1,86,90
DB 23
DB 0,0,40,136,0,70,255,1,86,90
DB 46
DB 0,0,105,89,0,70,1,1,105,89
DB 0
DB 0,0,128,112,0,70,1,1,105
DB 89,23
DB 0,0,151,135,0,70,1,1,105
DB 89,46
DB 0,0,104,71,0,70,1,255,104,71
DB 0
DB 0,0,127,48,0,70,1,255,104,71
DB 23
DB 0,0,150,25,0,70,1,255,104,71
DB 46
DB 0,0,85,71,0,70,255,255,85,71
DB 0
DB 0,0,62,48,0,70,255,255,85,71
DB 23
DB 0,0,39,25,0,70,255,255,85,71
DB 46
HS:
DB 16,6,17,0,22,4,25,48,48,48
DB 48,48,48,16,6,17,0,22,2,25
DB 48,48,48,48,48,48
DB 48,49,48,48,48,48
DB 0,0,0,0,0,0,0,0;FOR ACS
ACS:
ORG 16384
LOAD 16384
DB 255
END
   0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
OPST:
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0
SCSTR:
DB 22,1,25,16,0,17,6
DB "SCORE "
DB 22,3,25,"HIGH  "
DB 22,5,25,"TIME  "
DB 22,9,25,"LIVES "
DB 22,10,25,17,0,16,6
DB "      "
DB 22,6,25,"      "
DB 22,4,25,"      "
DB 22,2,25,"      "
;LEN=96
DB 17,2,22,12,26
DB " ",22,13,26," "
DB 17,6,22,14,26," ",22,15,26
DB " ",22,16,26," ",22,17,26
DB " ",17,4,22,18,26," ",22,19
DB 26," ",22,20,26," ",22,21,26
DB " ",22,22,26," "
DB 255
XS:
DB 0,0,1,1,0,0,1,255,0,0,1,0
DB 0,0,255,1,0,0,255,255,0,0
DB 255,0,0,0,0,1,0,0,0,255
XG:
DB 0,56,100,116,120,56,0,0
DB 60,126,195,253,253,251,126
DB 60
TAB:
;CDISP BDISP
DB 7,0,4,251,0,247,8,241
DB 7,239,11,243,16,249
DB 7,250
GG:;GRAPHICS FOR LIVES
DB 0,0,0,0,0,0,0,0,24,90,90,126
DB 126,255,231,195
SC1:
DB 0,0,83,79,0,65,255,0,83,79,0
DB 0,0,61,79,0,65,255,0,83,79
DB 21
DB 0,0,40,79,0,65,255,0,83,79
DB 43
DB 0,0,108,79,0,65,1,0,108,79
DB 0
DB 0,0,130,79,0,65,1,0,108,79
DB 21
DB 0,0,152,79,0,65,1,0,108,79
DB 43
DB 0,0,94,92,0,65,0,1,94,92,0
DB 0,0,94,114,0,65,0,1,94,92,21
DB 0,0,94,136,0,65,0,1,94,92,43
DB 0,0,94,66,0,65,0,255,94,66,0
DB 0,0,94,44,0,65,0,255,94,66
DB 22
DB 0,0,94,22,0,65,0,255,94,66
DB 44
SC2:
DB 0,0,86,90,0,70,255,1,86,90,0
DB 0,0,63,113,0,70,255,1,86,90
DB 23
DB 0,0,40,136,0,70,255,1,86,90
DB 46
DB 0,0,105,89,0,70,1,1,105,89
DB 0
DB 0,0,128,112,0,70,1,1,105
DB 89,23
DB 0,0,151,135,0,70,1,1,105
DB 89,46
DB 0,0,104,71,0,70,1,255,104,71
DB 0
DB 0,0,127,48,0,70,1,255,104,71
DB 23
DB 0,0,150,25,0,70,1,255,104,71
DB 46
DB 0,0,85,71,0,70,255,255,85,71
DB 0
DB 0,0,62,48,0,70,255,255,85,71
DB 23
DB 0,0,39,25,0,70,255,255,85,71
DB 46
HS:
DB 16,6,17,0,22,4,25,48,48,48
DB 48,48,48,16,6,17,0,22,2,25
DB 48,48,48,48,48,48
DB 48,49,48,48,48,48
DB 0,0,0,0,0,0,0,0;FOR ACS
ACS:
ORG 16384
LOAD 16384
DB 255
END