-
Notifications
You must be signed in to change notification settings - Fork 0
/
F619A_code_sep18.asm
223 lines (202 loc) · 5.97 KB
/
F619A_code_sep18.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
;*****NOTE THAT SOME OF THIS SAVE/RESTORE MAY NOT BE NECESSARY! remove later when all done
;save 2 data registers to RAM addresses next to the points
;10bbb2 = D2
;10bbb3 = D4 (used in P1/P2 check)
;A3 and A5 available for general use
lea $0010BBB2,A3;load byte holder address for D2 into A3
move.b D2,(A3);save the byte in D2 at 10BBB2
;lea $0010BBB3,A3;load byte holder address for D4 into A3
addq #$01,A3;rather than inputting the entire address
move.b D4,(A3);save the byte in D4 at 10BBB3
addq #$01,A3;location where we will save the address from A4
move.l A4,(A3);save the address from A4 to be restored later
;code goes here
;using D2,D7,A0,A3,A4,A5
;D4 also available for use AFTER we have done all necessary P1/P2 checks
move.b $FF,D7;move FF into D7 to later see if we've put something in it after alt chr
lea $0010FDAC,A0;load start button toggle addr into A0
move.b (A0),D2;move start button byte into D2
tst.b D2;is button toggle zero?
beq TableLookup;if start is not held down by either player, go to table check
;code after this line is if start is held down. now let's determine the cost
;of which char they want and put it into D7
;if they can afford, send them to ChoosingSecondCharacterCheck
;if they can't afford, send them out
Kyo:
cmpi.b #$00,D1
bne Yashiro
moveq #$7,D7
bra InitialStartCheck
Yashiro:
cmpi.b #$15,D1
bne Shermie
moveq #$9,D7
bra InitialStartCheck
Shermie:
cmpi.b #$16,D1
bne Chris
moveq #$4,D7
bra InitialStartCheck
Chris:
cmpi.b #$17,D1
bne Terry
moveq #$0B,D7
bra InitialStartCheck
Terry:
cmpi.b #$03,D1
bne Andy
moveq #$5,D7
bra InitialStartCheck
Andy:
cmpi.b #$04,D1
bne Joe
moveq #$3,D7
bra InitialStartCheck
Joe:
cmpi.b #$05,D1
bne Ryo
moveq #$4,D7
bra InitialStartCheck
Ryo:
cmpi.b #$06,D1
bne Robert
moveq #$8,D7
bra InitialStartCheck
Robert:
cmpi.b #$07,D1
bne Yuri
moveq #$6,D7
bra InitialStartCheck
Yuri:
cmpi.b #$08,D1
bne BillyKane
moveq #$4,D7
bra InitialStartCheck
BillyKane:
cmpi.b #$1A,D1
bne Mai
moveq #$3,D7
bra InitialStartCheck
Mai:
moveq #$10,D7
InitialStartCheck:
;01,05=p1.04,05=p2. if it's 04, skip to PlayerTwoAltCheck
cmpi.b #$04,D2;is it P2 only holding start?
beq PlayerTwoStartCheck
PlayerOneStartCheck:
cmpi.b #$05,D4;are we P2? D4 is 05 if so
beq P2hadStartAlso;if we are P2, we don't want to load p1 points address
bra LoadP1PointsAddress
P2hadStartAlso:;we only come here if we are P2
cmpi.b #$05,D2;were both players holding start?
bne BeginRestore;if it was neither $04 (check above) or $05 (check here), then it wasn't P2
PlayerTwoStartCheck:
cmpi.b #$05,D4;are we P2? D4 is 05 if so
bne LoadP1PointsAddress
bra LoadP2PointsAddress;it was $05 (both had start)
TableLookup:
;slot is in D0
;chr ID is in D1
;let's load player's points into D2
cmpi.b #$05,D4;are we P2? D4 is 05 if so
beq LoadP2PointsAddress
LoadP1PointsAddress:
lea $0010BBB0,A3
bra MovePointsIntoRegister
LoadP2PointsAddress:
lea $0010BBB1,A3
MovePointsIntoRegister:
move.b (A3),D2;current player's points are now loaded into D2
DoWeNeedTableLookup:;don't do LoadDesiredCharCost if we are taking an alt char
cmpi.b #$FF,D7
bne ChoosingSecondCharacterCheck
LoadDesiredCharCost:;now we need to load this character's cost into D7
;lea $000FFFDA,A4;table data at EOF
lea (TableData),A4;load table data address into A4
add D1,A4;add char ID number to table pointer
move.b (A4),D7;move cost of character into D7
;WE NEED CHECKS TO DETERMINE IF THIS IS THE 2ND SELECTION! IF SO, THEY
;MUST HAVE 2 PTS LEFT OVER AFTER PICKING CHR 2
;remaining points minus 2 = max a player can spend on character B
;do a check to see if we're in the 2nd character choice
;if we are, subtract 2 from D2 (not the RAM address)
ChoosingSecondCharacterCheck:
cmp #01,D0
bne ContinueToCompare
subq.b #02,D2
ContinueToCompare:
cmp.b D7,D2;D2=points,D7=cost
bge SubtractIfAllowedPrelim;if they are allowed to pick
;code goes here if they are NOT allowed to pick - dump them off
bra CantTake;dont subtract pts
SubtractIfAllowedPrelim:
;we need to check if it's the 2nd character. if so, add BACK 2 points
cmp #01,D0
bne SubtractCost
addq.b #02,D2
SubtractCost:
;we still have this character's points address loaded into A3
sub.b D7,D2;subtract cost from points
move.b D2,(A3);put the new points total into the player's address
;code ends here
;restore registers from RAM begins here
BeginRestore:
lea $0010BBB2,A3;load byte holder address for D2 into A3
move.b (A3),D2;restore saved byte back to D2
;lea $0010BBB3,A3;load byte holder address for D4 into A3
;move.b (A3),D4;save the byte in D4 at 10BBB3
;general restore
lea $00108500,A3
lea $00108000,A5
;per-player restore
cmpi.b #$05,D4;are we P2? D4's byte is 5 if so
beq P2Restoration
P1Restoration:
;P1's A4 is dynamic based on whether P2 is present or not
;if no P2 present, should be 100D00
;if P2 present, should be 100700
lea $0010BBB4,A4
move.l (A4),A4
move.l A4,D7;whatever address is in A4 needs to go into D7
lea $0010A84A,A0
bra Leave
P2Restoration:
lea $00100900,A4
move.l A4,D7;whatever address is in A4 needs to go into D7
lea $0010A85B,A0
;restore ends here
Leave:
jmp $00028730;go back to where we need to return to (if they are allowed to pick)
CantTake:
;restore registers
;need to dynamically restore D4, D7, A4 (A4 gets copied into D7)
;D4 byte saved at at 10BBB3 (D4 was never overwritten)
;A4 longword saved at 10BBB4
;data1
moveq #$08,D0
lea $0000FFFF,A0
move.l A0,D1
moveq #$00,D2
lea $00100D00,A0
move.l A0,D7
;address
lea $000284A0,A0
lea $00108500,A3
;lea $00100D00,A4
lea $0010BBB4,A4 ;longword is stored here
move.l (A4),A4
;data2
move.l A4,D7
;leave
jmp $00028546
TableData:
dc.l $09090B07
dc.l $0407080A
dc.l $05070706
dc.l $0606040C
dc.l $0A050509
dc.l $0609050A
dc.l $0807040B
dc.l $09070408
dc.l $07060502
dc.w $0505