-
Notifications
You must be signed in to change notification settings - Fork 0
/
newstone.inc
174 lines (164 loc) · 2.86 KB
/
newstone.inc
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
; -*-asm-*-
;----------------------------------------
;- Random
;-
;- IN: -
;- OUT: r0 - new random value
;- DESTROY: r0,r1
;----------------------------------------
PTR REG 15
SEED3 REG 6
SEED2 REG 5
SEED1 REG 4
Random::
PUSH r2,r3,r4,r5,r6,r15
movei #seed1,PTR
movei #206,r2
load (PTR),r0
move r0,SEED1 ; retten
div r2,r0 ; r0 = (seed1 / 206)
sub r0,SEED1 ; r2 = (seed1 mod 206)
movei #157,r2
moveq #21,r3
mult r2,SEED1 ; r2 = r2*157
mult r3,r0 ; r0 = r0*21
sub r0,SEED1
jr nn,.cont
load (PTR+4),SEED2
movei #206*157,r0
add r0,SEED1
.cont
movei #217,r2
store SEED1,(PTR)
move SEED2,r0
div r2,r0
sub r0,SEED2
movei #146,r2
movei #45,r3
mult r2,SEED2
mult r3,r0
sub r0,SEED2
jr nn,.cont1
load (PTR+8),SEED3
movei #31727,r0
add r0,SEED2
.cont1
movei #222,r2
store SEED2,(PTR+4)
move SEED3,r0
div r2,r0
sub r0,SEED3
movei #142,r2
movei #133,r3
mult r2,SEED3
mult r3,r0
sub r0,SEED3
jr nn,.cont2
sub SEED2,SEED1
movei #31657,r0
add r0,SEED3
.cont2
store SEED3,(PTR+8)
movei #706,r0
cmp SEED1,r0 ; SEED1-SEED2>706
movei #32362,r1
jr nn_nz,.cont3
add SEED3,SEED2
sub r1,SEED2
.cont3
cmpq #1,SEED2
jr nn,.cont4
nop
add r1,SEED2
.cont4
move SEED2,r0
POP r2,r3,r4,r5,r6,r15
jump (LR)
nop
UNREG PTR,SEED1,SEED2,SEED3
;----------------------------------------
;- NewStone
;-
;- IN: -
;- OUT: new stone in StoneType.a
;- DESTROY: r0,r1,r2,r3
;----------------------------------------
NewStone::
PUSH LR
movei #Random,r3
.loop
BL (r3)
shrq #1,r0
shlq #29,r0
shrq #29,r0
cmpq #7,r0
jr nn,.loop
moveta r0,StoneType.a
shlq #2,r0
movei #stone_stat,r1
add r0,r1
load (r1),r3
shlq #3,r0
addqt #1,r3
store r3,(r1)
moveq #0,r1
moveta r1,Rotation.a
moveq #20,r1
shlq #1,r1
moveta r1,x_pos.a
movei #steine+4,r1
add r0,r1
load (r1),r0
neg r0
//-> subq #8,r0 ;; TODO: start off screen => need to fix checknewpos
jr ShowStat2
moveta r0,y_pos.a
;----------------------------------------
;- ShowStat
;-
;- IN: -
;- OUT: new stone in StoneType.a
;- DESTROY: r0,r1,r2,r3,r4,r5,r6,r7
;----------------------------------------
SUM REG 7
COUNTER REG 6
PRINTDEZ REG 5
PTR REG 4
SCREEN REG 3
TXT_YX REG 2
STAT_X EQU 50
ShowStat::
PUSH LR
ShowStat2:
movei #stone_stat,PTR
movei #DrawDigitDez3,PRINTDEZ
moveq #7,COUNTER
moveq #1+2,TXT_YX
moveq #1,SCREEN
moveq #0,SUM
.loop
shlq #16,TXT_YX
movei #STAT_X,r1
or r1,TXT_YX
load (PTR),r1
add r1,SUM
BL (PRINTDEZ)
shrq #16,TXT_YX
subq #1,COUNTER
addqt #22,TXT_YX
jr nz,.loop
addqt #4,PTR
movei #9999,r0
cmp r0,SUM
.stop
jr z,.stop
nop
addqt #4,TXT_YX
shlq #16,TXT_YX
movei #STAT_X-digit_w,r1
movei #DrawDigitDez4,PRINTDEZ
or r1,TXT_YX
POP LR
jump (PRINTDEZ)
move SUM,r1
UNREG PRINTDEZ,SCREEN,TXT_YX,COUNTER,PTR,SUM