File: protector.asm

package info (click to toggle)
pasmo 0.5.3-6
  • links: PTS, VCS
  • area: main
  • in suites: buster, jessie, jessie-kfreebsd, stretch, wheezy
  • size: 828 kB
  • ctags: 1,531
  • sloc: cpp: 8,508; asm: 3,020; sh: 790; makefile: 114
file content (205 lines) | stat: -rw-r--r-- 2,426 bytes parent folder | download | duplicates (6)
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