CM en sentencias REM
Moderador: CEZ
-
esteban.platz
- 8 bits

- Mensajes: 14
- Registrado: 24 May 2007 21:11
CM en sentencias REM
Siempre me pregunté como podría lograrse escribir Codigo de Maquina en sentencias REM...alguién sabe como?
saludos y gracias
saludos y gracias
- Iperezg
- 32 bits

- Mensajes: 377
- Registrado: 23 Dic 2004 21:18
- Ubicación: Sevilla
- Contactar:
A grosso modo, primero se escribe una sentencia REM seguida de una cadena de caracteres cualesquiera, tal que el tamaño de la misma coincida con el tamaño de la rutina CM que se quiera escribir. Después, sabiendo la dirección de memoria en la que está almacenada esta cadena, se van haciendo POKES a la dirección de cada caracter para cambiarlos por los de la rutina.
Como ves, es bastante fácil; lo único que hay que saber es la dirección de memoria en la que se guardan los caracteres del REM.
Como ves, es bastante fácil; lo único que hay que saber es la dirección de memoria en la que se guardan los caracteres del REM.
¡Ché, ché... Ché, documentación!
¡Ché, ché, los papeles del camión!
¡¿Que no de qué?!
¡Ché, ché, los papeles del camión!
¡¿Que no de qué?!
- Benway
- Site Admin

- Mensajes: 9241
- Registrado: 24 Dic 2005 10:18
- Ubicación: Madrid
- Contactar:
Pues, por ejemplo...
.- Pones la primera linea del programa como REM y tantos asteriscos (p.ej.) como bytes tenga la rutina en C/M
.- Calculas dónde empieza el programa en BASIC: PEEK 23635 + 256 * PEEK 23636 (Esta variable del sistema se llama PROG).
.- Empiezas a "pokear" en esa dirección + 5. Esos 5 bytes son: 2 que constituyen el número de línea, dos que indican la longitud de la línea, y otro para la instrucción REM.
.- Haces el RANDOMIZE USR a PROG + 5
Un ejemplo sacado del curso de C/M de MicroHobby:
Cuando lo ejecutes, la línea 10 cambiará por...
.
El listado en assembler del programa es este:
Es decir, devuelve el valor de la RAMTOP (0x5CB2) en BC, y como la línea 70 del BASIC es PRINT USR, te la pone en la pantalla.
.- Pones la primera linea del programa como REM y tantos asteriscos (p.ej.) como bytes tenga la rutina en C/M
.- Calculas dónde empieza el programa en BASIC: PEEK 23635 + 256 * PEEK 23636 (Esta variable del sistema se llama PROG).
.- Empiezas a "pokear" en esa dirección + 5. Esos 5 bytes son: 2 que constituyen el número de línea, dos que indican la longitud de la línea, y otro para la instrucción REM.
.- Haces el RANDOMIZE USR a PROG + 5
Un ejemplo sacado del curso de C/M de MicroHobby:
Código: Seleccionar todo
10 REM ******
20 LET prog = PEEK 23635 + 256 * 23636
30 FOR n = 5 TO 10
40 READ a: POKE prog + n, a
50 NEXT n
60 DATA 42, 178, 92, 229, 193, 201
70 PRINT USR (prog + 5)Código: Seleccionar todo
10 REM *SIN \ RESTORE STR$ <>El listado en assembler del programa es este:
Código: Seleccionar todo
LD HL, (#5CB2)
PUSH HL
POP BC
RET-
esteban.platz
- 8 bits

- Mensajes: 14
- Registrado: 24 May 2007 21:11
-
DonBizarre
-
esteban.platz
- 8 bits

- Mensajes: 14
- Registrado: 24 May 2007 21:11
-
DonBizarre
A ver, un ensamblador es un programa que convierte las líneas escritas en ASM a sus valores numéricos (por ejemplo RET por 201).
Para meter el CM en el spectrum tienes básicamente 2 formas. Pokeándolo en basic, o cargándolo desde cinta, como todo.
Puedes pokear el cm y luego grabarlo a cinta, o puedes usar un ensamblador, ensamblar, y grabar a cinta. El resultado final es el mismo, pero el segundo método es mucho más cómodo, además de las infinitas ventajas de usar un ensamblador (etiquetas)
Lo más cómodo a día de hoy es usar un ensamblador cruzado para Z80 en el PC, y cargarlo luego en el speccy
Para meter el CM en el spectrum tienes básicamente 2 formas. Pokeándolo en basic, o cargándolo desde cinta, como todo.
Puedes pokear el cm y luego grabarlo a cinta, o puedes usar un ensamblador, ensamblar, y grabar a cinta. El resultado final es el mismo, pero el segundo método es mucho más cómodo, además de las infinitas ventajas de usar un ensamblador (etiquetas)
Lo más cómodo a día de hoy es usar un ensamblador cruzado para Z80 en el PC, y cargarlo luego en el speccy
-
esteban.platz
- 8 bits

- Mensajes: 14
- Registrado: 24 May 2007 21:11
-
DonBizarre


