aboutsummaryrefslogtreecommitdiff
path: root/lib/cpcrslib/GphStrStd.s
blob: 08c19ecc41eb847cf3e736314dc64b7196100474 (plain)
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
; ******************************************************
; **       Librer�a de rutinas SDCC para Amstrad CPC  **
; **       Ra�l Simarro (Artaburu)    -   2009, 2012  **
; ******************************************************

cpc_GetScrAddress0:			;en HL est�n las coordenadas
		
	;LD A,H
	LD (#inc_ancho+1),A
	LD A,L
	SRL A
	SRL A
	SRL A
	; A indica el bloque a multiplicar x &50
	LD D,A						;D
	SLA A
	SLA A
	SLA A
	SUB L
	NEG
	; A indica el desplazamiento a multiplicar x &800
	LD E,A						;E
	LD L,D
	LD H,#0
	ADD HL,HL
	LD BC,#bloques
	ADD HL,BC
	;HL APUNTA AL BLOQUE BUSCADO
	LD C,(HL)
	INC HL
	LD H,(HL)
	LD L,C
	;HL TIENE EL VALOR DEL BLOQUE DE 8 BUSCADO
	PUSH HL
	LD D,#0
	LD HL,#sub_bloques
	ADD HL,DE
	LD A,(HL)
	POP HL
	ADD H
	LD H,A
inc_ancho:
	LD E,#0
	ADD HL,DE
	RET

bloques:
.DW #0XC000,#0XC050,#0XC0A0,#0XC0F0,#0XC140,#0XC190,#0XC1E0,#0XC230,#0XC280,#0XC2D0,#0XC320,#0XC370,#0XC3C0,#0XC410,#0XC460,#0XC4B0,#0XC500,#0XC550,#0XC5A0,#0XC5F0,#0XC640,#0XC690,#0XC6E0,#0XC730,#0XC780
sub_bloques:
.DB #0X00,#0X08,#0X10,#0X18,#0X20,#0X28,#0X30,#0X38




.globl _cpc_PrintGphStrStd

_cpc_PrintGphStrStd::
	ld ix,#2
	add ix,sp
	ld l,3  (ix)
	ld h,4 (ix)	;destino
	ld e,1  (ix)
	ld d,2 (ix)	;texto origen
	ld a,0 (ix) ;color
	ld (#color_uso+1),a
	JP cpc_PrintGphStrStd0
	

.globl _cpc_PrintGphStrStdXY

_cpc_PrintGphStrStdXY::
;preparaci�n datos impresi�n. El ancho y alto son fijos!
	ld ix,#2
	add ix,sp
	ld L,4 (ix)
	ld A,3 (ix)	;pantalla
	call cpc_GetScrAddress0   
	ld e,1 (ix)
	ld d,2 (ix)	;texto origen
	ld a,0 (ix) ;color
	ld (#color_uso+1),a
	JP cpc_PrintGphStrStd0

color0:
	XOR A
	CALL metecolor
	JP sigue
color1:
	LD A,#0B00001000
	CALL metecolor
	JP sigue
color2:
	LD A,#0B10000000
	CALL metecolor
	JP sigue
color3:
	LD A,#0b10001000
	CALL metecolor
	JP sigue
metecolor:
	LD (#cc0_gpstd-1),A
	LD (#cc4_gpstd-1),A
	SRL A
	LD (#cc1_gpstd-1),A
	LD (#cc5_gpstd-1),A
	SRL A
	LD (#cc2_gpstd-1),A
	LD (#cc6_gpstd-1),A
	SRL A
	LD (#cc3_gpstd-1),A
	LD (#cc7_gpstd-1),A
	RET

cpc_PrintGphStrStd0: 
;; marcar� el color con que se imprime
color_uso:
	LD A,#1
	OR A 
	JP Z,color0
	CP #1
	JP Z,color1
	CP #2
	JP Z,color2
	CP #3
	JP Z,color3
sigue:

	;trabajo previo: Para tener una lista de trabajos de impresi�n. No se interrumpe
	;la impresi�n en curso.
	LD A,(#imprimiendo)
	CP #1
	JP Z,add_elemento
	LD (#direcc_destino),HL
	EX DE,HL
	CALL bucle_texto0

;antes de terminar, se mira si hay algo en cola.
bucle_cola_impresion:
	LD A,(#elementos_cola)
	OR A
	JP Z,terminar_impresion
	CALL leer_elemento
	JP bucle_cola_impresion

terminar_impresion:
	XOR A
	LD (#imprimiendo),A
	RET
entrar_cola_impresion:
	;si se est� imprimiendo se mete el valor en la cola
	RET
add_elemento:
	DI
	LD IX,(#pos_cola)
	LD 0 (IX),L
	LD 1 (IX),H
	LD 2 (IX),E
	LD 3 (IX),D
	INC IX
	INC IX
	INC IX
	INC IX
	Ld (#pos_cola),IX
	LD HL,#elementos_cola
	INC (HL)
	EI
	RET
leer_elemento:
	DI
	LD IX,(#pos_cola)
	LD L,0 (IX)
	LD H,1 (IX)
	LD E,2 (IX)
	LD D,3 (IX)
	DEC IX
	DEC IX
	DEC IX
	DEC IX
	LD (#pos_cola),IX
	LD HL,#elementos_cola
	DEC (HL)
	EI
	RET

elementos_cola: 
	.DW #0
pos_cola:
	.DW cola_impresion
cola_impresion:
	.DB #0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0 ; defs 12
bucle_texto0:
	LD A,#1
	LD (#imprimiendo),A
	LD A,(#first_char8)
	LD B,A		;resto 48 para saber el n�mero del caracter (En ASCII 0=48)
	LD A,(HL)
	OR A ;CP 0
	RET Z
	SUB B
	LD BC,#cpc_Chars8	;apunto a la primera letra
	PUSH HL
	LD L,A		
	LD H,#0
	ADD HL,HL
	ADD HL,HL
	ADD HL,HL	
	ADD HL,BC	
	CALL escribe_letra_gpstd
	LD HL,(#direcc_destino)
	
	LD DE,#letra_decodificada
	CALL cpc_PutSp0_gpstd
	LD HL,(#direcc_destino)
	INC HL
	INC HL
	LD (#direcc_destino),HL
	POP HL
	INC HL
	JP bucle_texto0

imprimiendo: 
	.db #0
direcc_destino:
	.dw #0


cpc_PutSp0_gpstd:
	.DB #0XFD
	LD H,#8	
	LD B,#7
	LD C,B
loop_alto_2_gpstd:
loop_ancho_2_gpstd:		
	EX DE,HL
	LDI
	LDI
	.DB #0XFD
	DEC H
	RET Z	
	EX DE,HL   	   
salto_linea_gpstd:
	LD C,#0XFE			
	ADD HL,BC
	JP NC,loop_alto_2_gpstd 
	LD BC,#0XC050
	ADD HL,BC
	LD B,#7	
	JP loop_alto_2_gpstd	
		
		
		
escribe_letra_gpstd:		;; lee el byte y lo interpreta
	LD IY,#letra_decodificada
	LD B,#8
bucle_alto_gpstd:
	PUSH BC 	;leo el byte... ahora se miran sus bits y se rellena el caracter a imprimir
	XOR A
	LD B,(HL)
	BIT 7,B
	JP Z,cc0_gpstd
	OR #0b10001000
cc0_gpstd:
	BIT 6,B
	JP Z,cc1_gpstd
	OR #0b01000100
cc1_gpstd:
	BIT 5,B
	JP Z,cc2_gpstd
	OR #0b00100010
cc2_gpstd:
	BIT 4,B
	JP Z,cc3_gpstd
	OR #0b00010001
cc3_gpstd:
	;primer byte
	LD 0 (IY),A
	INC IY
	XOR A
	BIT 3,B
	JP Z,cc4_gpstd
	OR #0b10001000
cc4_gpstd:
	BIT 2,B
	JP Z,cc5_gpstd
	OR #0b01000100
cc5_gpstd:
	BIT 1,B
	JP Z,cc6_gpstd
	OR #0b00100010
cc6_gpstd:
	BIT 0,B
	JP Z,cc7_gpstd
	OR #0b00010001
cc7_gpstd:
	;segundo byte
	LD 0 (IY),A
	INC IY
	INC HL
	POP BC
	DJNZ bucle_alto_gpstd
	RET



byte_tmp: ;DEFS 2
	.DB #0,#0
letra_decodificada:
	.DB #0,#0,#0,#0,#0,#0,#0,#0 		;DEFS 16	
	.DB #0,#0,#0,#0,#0,#0,#0,#0			;USO ESTE ESPACIO PARA GUARDAR LA LETRA QUE SE DECODIFICA

;DEFC direcc_destino0s_m1 = direcc_destino  

first_char8: 
	.DB #32	;first defined char number (ASCII)
cpc_Chars8:   ;each bit of each byte is a pixel,#same way as SYMBOL function of Locomotive BASIC.
	;; KEY SET BY ANJUEL & NA_TH_AN FROM NANAKO CPC GAME.
   .DB #0,#0,#0,#0,#0,#0,#0,#0
   .DB #28,#8,#8,#8,#28,#0,#8,#0
   .DB #10,#10,#0,#0,#0,#0,#0,#0
   .DB #36,#126,#36,#36,#36,#126,#36,#0
   .DB #16,#62,#32,#60,#4,#124,#8,#0
   .DB #0,#50,#52,#8,#22,#38,#0,#0
   .DB #0,#16,#40,#58,#68,#58,#0,#0
   .DB #16,#16,#0,#0,#0,#0,#0,#0
   .DB #16,#112,#80,#64,#80,#112,#16,#0
   .DB #8,#14,#10,#2,#10,#14,#8,#0
   .DB #0,#42,#28,#28,#42,#0,#0,#0
   .DB #0,#8,#8,#62,#8,#8,#0,#0
   .DB #0,#0,#0,#0,#12,#12,#0,#0
   .DB #0,#0,#0,#62,#0,#0,#0,#0
   .DB #0,#0,#0,#0,#12,#12,#16,#0
   .DB #0,#4,#8,#16,#32,#64,#0,#0
   .DB #62,#34,#34,#34,#34,#34,#62,#0
   .DB #12,#4,#4,#4,#4,#4,#4,#0
   .DB #62,#34,#2,#62,#32,#34,#62,#0
   .DB #62,#36,#4,#28,#4,#36,#62,#0
   .DB #32,#32,#36,#62,#4,#4,#14,#0
   .DB #62,#32,#32,#62,#2,#34,#62,#0
   .DB #62,#32,#32,#62,#34,#34,#62,#0
   .DB #62,#36,#4,#4,#4,#4,#14,#0
   .DB #62,#34,#34,#62,#34,#34,#62,#0
   .DB #62,#34,#34,#62,#2,#34,#62,#0
   .DB #0,#24,#24,#0,#0,#24,#24,#0
   .DB #0,#24,#24,#0,#0,#24,#24,#32
   .DB #4,#8,#16,#32,#16,#8,#4,#0
   .DB #0,#0,#126,#0,#0,#126,#0,#0
   .DB #32,#16,#8,#4,#8,#16,#32,#0
   .DB #64,#124,#68,#4,#28,#16,#0,#16
   .DB #0,#56,#84,#92,#64,#60,#0,#0
   .DB #126,#36,#36,#36,#60,#36,#102,#0
   .DB #124,#36,#36,#62,#34,#34,#126,#0
   .DB #2,#126,#66,#64,#66,#126,#2,#0
   .DB #126,#34,#34,#34,#34,#34,#126,#0
   .DB #2,#126,#66,#120,#66,#126,#2,#0
   .DB #2,#126,#34,#48,#32,#32,#112,#0
   .DB #2,#126,#34,#32,#46,#36,#124,#0
   .DB #102,#36,#36,#60,#36,#36,#102,#0
   .DB #56,#16,#16,#16,#16,#16,#56,#0
   .DB #28,#8,#8,#8,#8,#40,#56,#0
   .DB #108,#40,#40,#124,#36,#36,#102,#0
   .DB #112,#32,#32,#32,#34,#126,#2,#0
   .DB #127,#42,#42,#42,#42,#107,#8,#0
   .DB #126,#36,#36,#36,#36,#36,#102,#0
   .DB #126,#66,#66,#66,#66,#66,#126,#0
   .DB #126,#34,#34,#126,#32,#32,#112,#0
   .DB #126,#66,#66,#74,#126,#8,#28,#0
   .DB #126,#34,#34,#126,#36,#36,#114,#0
   .DB #126,#66,#64,#126,#2,#66,#126,#0
   .DB #34,#62,#42,#8,#8,#8,#28,#0
   .DB #102,#36,#36,#36,#36,#36,#126,#0
   .DB #102,#36,#36,#36,#36,#24,#0,#0
   .DB #107,#42,#42,#42,#42,#42,#62,#0
   .DB #102,#36,#36,#24,#36,#36,#102,#0
   .DB #102,#36,#36,#60,#8,#8,#28,#0
   .DB #126,#66,#4,#8,#16,#34,#126,#0
   .DB #4,#60,#36,#32,#36,#60,#4,#0
   .DB #0,#64,#32,#16,#8,#4,#0,#0
   .DB #32,#60,#36,#4,#36,#60,#32,#0
   .DB #0,#16,#40,#68,#0,#0,#0,#0
   .DB #0,#0,#0,#0,#0,#0,#0,#0
   .DB #0,#100,#104,#16,#44,#76,#0,#0
   .DB #126,#36,#36,#36,#60,#36,#102,#0
   .DB #124,#36,#36,#62,#34,#34,#126,#0
   .DB #2,#126,#66,#64,#66,#126,#2,#0
   .DB #126,#34,#34,#34,#34,#34,#126,#0
   .DB #2,#126,#66,#120,#66,#126,#2,#0
   .DB #2,#126,#34,#48,#32,#32,#112,#0
   .DB #2,#126,#34,#32,#46,#36,#124,#0
   .DB #102,#36,#36,#60,#36,#36,#102,#0
   .DB #56,#16,#16,#16,#16,#16,#56,#0
   .DB #28,#8,#8,#8,#8,#40,#56,#0
   .DB #108,#40,#40,#124,#36,#36,#102,#0
   .DB #112,#32,#32,#32,#34,#126,#2,#0
   .DB #127,#42,#42,#42,#42,#107,#8,#0
   .DB #126,#36,#36,#36,#36,#36,#102,#0
   .DB #126,#66,#66,#66,#66,#66,#126,#0
   .DB #126,#34,#34,#126,#32,#32,#112,#0
   .DB #126,#66,#66,#74,#126,#8,#28,#0
   .DB #126,#34,#34,#126,#36,#36,#114,#0
   .DB #126,#66,#64,#126,#2,#66,#126,#0
   .DB #34,#62,#42,#8,#8,#8,#28,#0
   .DB #102,#36,#36,#36,#36,#36,#126,#0
   .DB #102,#36,#36,#36,#36,#24,#0,#0
   .DB #107,#42,#42,#42,#42,#42,#62,#0
   .DB #102,#36,#36,#24,#36,#36,#102,#0
   .DB #102,#36,#36,#60,#8,#8,#28,#0
   .DB #126,#66,#4,#8,#16,#34,#126,#0
   .DB #4,#60,#36,#96,#96,#36,#60,#4
   .DB #0,#16,#16,#16,#16,#16,#16,#0
   .DB #32,#60,#36,#6,#6,#36,#60,#32
   .DB #0,#0,#16,#40,#68,#0,#0,#0
   .DB #126,#66,#90,#82,#90,#66,#126,#0