-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathprotector.asm
205 lines (165 loc) · 2.37 KB
/
protector.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
; protector.asm
; Rutinas RSX para un juego de Amstrad CPC.
; Revista "El Ordenador Personal" num. 52, octubre 1986
org #0A000
extcom equ #0BCD1
askcur equ #0BBC6
linrel equ #0BBF9
linabs equ #0BBF6
movrel equ #0BBC3
movabs equ #0BBC0
setpen equ #0BBDE
tstrel equ #0BBF3
ld bc, rsx
ld hl, kernal
jp extcom
rsx defw table
jp boum
jp vise
jp choc
table defm 'BOU', 'M' + 80H
defm 'VIS', 'E' + 80H
defm 'CHO', 'C' + 80H, 0
; Cambiado esto para que coincida con las DATA de la revista
; y asi poder comprobar el checksum.
;kernal defs 4
kernal defb #FC, #A6, #09, #A0
boum cp 1
ret nz
call askcur
push hl
push de
ld a, 1
call setpen
ld a, (ix + 0)
; and #0Fh ; Debe ser par - ERRATA
and #FE ; Debe ser par
push af ; Memoriza este valor
ld d, 0
ld e, a
ld h, 0
ld l, a
call movrel
pop af
add a, a ; Longitud de un lado
ld h, 0
ld l, a
push hl ; Memoriza la longitud
call invers
push hl ; Memoriza -L
ld de, 0 ; 0, -L
call linrel
pop de ; -L, 0
ld hl, 0
call linrel
ld de, 0 ; 0, L
pop hl
push hl
call linrel
pop de ; L, 0
ld hl, 0
call linrel
jp centre
vise cp 2
ret nz
ld d, (ix + 3)
ld e, (ix + 2)
ld h, (ix + 1)
ld l, (ix + 0)
push hl
push de
call movabs
ld a, 3 ; Pen 3
call setpen
ld de, 0 ; mover 0, 6
ld hl, 6
push hl
push de
call movrel
pop de ; drawr 0, 6
pop hl
push de
call linrel
pop de ; mover 0, 24
ld hl, 24
call invers
call movrel
ld de, 0 ; draw 0, 6
ld hl, 6
push hl
call linrel
pop de ; mover -12, 6
ld hl, 12
call invers
ex de, hl
call movrel
ld de, 6 ; draw 6, 0
ld hl, 0
push hl
call linrel
ld de, 12 ; mover 12, 0
pop hl
push hl
call movrel
ld de, 6 ; draw 6, 0
pop hl
call linrel
jp centre
choc cp 2
ret nz
ld d, (ix + 3)
ld e, (ix + 2)
ld h, (ix + 1)
ld l, (ix + 0)
push hl
push de
call movabs
ld a, 0
ld (result), a
ld de, 0 ; testr (0, 0)
push de
pop hl
call tstrel
call ajout
ld de, 12 ; testr (12, 0)
ld hl, 0
call tstrel
call ajout
ld hl, 6 ; testr (-6, -8)
call invers
push hl
pop de
dec hl
dec hl
call tstrel
call ajout
ld de, 0 ; testr (0, 2)
ld hl, 2
call tstrel
call ajout
jp centre
ajout cp 1
jr z, suite1
cp 2
ret nz ; Si rojo
ld a, 10
suite1 ld hl, result
add a, (hl)
ld (hl), a
ret
centre pop de
pop hl
jp movabs
invers xor a
sub l
ld l, a
sbc a, h
sub l
cp h
ld h, a
scf
ret nz
cp 1
ret
result defb 0
end #0A000