Microhobby 23. Año II, del 09 al 15 de abril de 1985

Trucos: Simulación de la instrucción POP

Una de las utilidades del lenguaje Basic que el Spectrum no posee, es la sentencia POP. Este comando tiene la función de impedir que determinada subrutina, que llamemos mediante la sentencia gosub, retorne al programa principal; la utilidad de esta función resulta un tanto oscura y, como siempre, se comprenderá mejor practicándola. Observe que nos permite saltar desde una subrutina a cualquier parte del programa principal.

La rutina se ha escrito en lenguaje máquina y es reubicable, es decir, puede ejecutarse en cualquier parte de la memoria. En principio, se sugiere emplear el buffer de impresora para colocarlo, aunque debe tener en cuenta que si emplea comandos relacionados con la impresora, la rutina se corromperá.

Hemos incluido, someramente comentado, el listado en ensamblador y, para aquellos que prefieran utilizarlo directamente, un cargador Basic que solucionará el programa.

10 REM ************************
20 REM     Esta rutina debe
30 REM   colocarse fuera del
40 REM      sistema Basic
50 REM ************************
60 INPUT "Direccion de ensamblado? "; dir
70 FOR n = dir TO dir + 23: READ a: POKE n, a: NEXT n
50 DATA 237, 123, 61, 92, 59, 59, 193, 225, 209, 122, 254, 62, 202, 54, 31, 59, 227, 235, 237, 115, 61, 92 ,197, 201
10	; SUBRUTINA RELOCALIZABLE
20	;
30		LD	SP,823613)
40		DEC	SP
50		DEC	SP
60	;
70	; PUNTERO DEL STACK SE LE
80	; ASIGNA LA DIRECCION DE
90	; RETORNO DE ERROR -2
100	;
110	;	POP	BC
120	;
130	; TOMA LA DIRECCION DE
140	; RETORNO DE LA ROM QUE
150	; TRATA LA SIGUIENTE
160	; SENTENCIA BASIC
170	;
180		POP	HL
190	;
200	; TOMA DIRECCION RETORNO
210	; DE ERROR
220	;
230		POP	DE
240	;
250	; TOMA EL ULTIMO DATO DE
260	; LA PILA DE GOSUB
270	;
280		LD	A,D
290		CP	62
300		JP	Z,#1F36
310	;
320	; MENSAJE DE "RETURN
330	; without GOSUB" SI ES
340	; FINAL DE LA PILA
350	:
360		DEC	SP
370		EX	(SP),HL
380		EX	DE,HL
390		LD	(23613),SP
400	;
410	; RESTAURA EL PUNTERO DE
420	; ERROR
430	;
440		PUSH	BC
450	;
460	; REPONE EN EL STACK LA
470	; DIRECCION DE RETORNO DE
480	; LA ROM
490	;
500		RET
 
023/trucos.txt · Última modificación: d/m/Y H:i por miguel
Recent changes RSS feed Creative Commons License Driven by DokuWiki Made on Mac