Bienvenido, Invitado. Por favor Entra
Elije Idioma:
Retrocomputación
09.09.2010 a las 03:55:41
Índice Ayuda Buscar Entrar


Páginas: 1 2 3 
Enviar Imprimir
Sabía Ud. que... (Leído 2559 veces)
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Sabía Ud. que...
10.09.2009 a las 08:38:12
 
Hola a todos,

Se me ocurrió una idea que deriva de otro thread, y la quería compartir con Uds.

Viendo que hay gente interesada en aprender CM del Z80, podemos entre todos, tirar tips del lenguaje de una manera tal para incentivar los que lo estudian y despertar la curiosidad en aquellos que no.

Por mi parte he programado bastante en CM del Z80. Si bien ahora, lamentablemente no me acuerdo mucho, se que a medida que me vaya metiendo en la materia, los recuerdos saldrán a flote. Al igual que con cualquier otro conocimiento. Solo es cuestión de repasarlo para que salga a flote.

Bueno, espero sus comentarios y sugerencias sobre esta idea.

SaludOS/2 a todos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
juan carlos fekete
God Member
*****
Desconectado


BUJE DEL EJE DEL MAL

Mensajes: 3561
Mar del Plata
Re: Sabía Ud. que...
Respuesta #1 - 10.09.2009 a las 09:31:24
 
ld a,0
ret
Subir al inicio
 

Jovatus Electronic´s Trashman,
ANDRES NUMBER ONE FAN

Sony F1XDJ
Talent TPC-310
Talent DPC-200
Spectravideo 738
Spectravideo 728
Toshiba HX-20
Yamaha C5XMII
Sony HB-20P
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #2 - 10.09.2009 a las 09:46:38
 
juan carlos fekete dijo 10.09.2009 a las 09:31:24:
ld a,0
ret


0 / 0
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
Hernan
Ex-miembro


Re: Sabía Ud. que...
Respuesta #3 - 10.09.2009 a las 09:56:43
 
Y, estaría bastante bueno Soutaker. Yo cada vez que veo un listado de assembler de Z80 en una Microhobby, o en algún foro de Spectrum me dan escalofríos Divertido
Subir al inicio
 
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #4 - 11.09.2009 a las 10:59:57
 
Entrega #1


¿Sabía Ud que...

..el contenido del registro BC es devuelto al intérprete BASIC al salir de una rutina ASSEMBLER?

Al usar RANDOMIZE USR lo que hacemos es decir que uso como argumento del RANDOMIZE, el número devuelto por la llamada USR...
Para poder ver el último contenido del registro BC, debemos llamar a la rutina con PRINT.

Para hacer nuestros primeros palitos en ese lenguaje, podemos probar:

Código:

ORG 40000 ; Nuestro código comienza en la direccion de memoria 40000
LD BC,1974  ; Cargo el registro BC con mi año de nacimiento ;o)
RET  ; Salimos al BASIC


y se invoca con:

Código:
PRINT USR 40000 



lo cual imprimiría el citado número por pantalla.

Nota: Recuerden que por ser registros de 16 bits, solo se pueden almacenar numeros en el rango de 0 a 216 es decir 0 a 65535.

Dicho esto, ¡empecemos a experimentar!

Saludos.
Subir al inicio
« Última modificación: 11.09.2009 a las 16:38:13 por soultaker »  

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
El Griego
Moderador MSX
*****
Desconectado


No hay lugar donde esconderse

Mensajes: 618
Re: Sabía Ud. que...
Respuesta #5 - 11.09.2009 a las 12:07:13
 
Muy buena tu iniciativa  Guiño

El assembler, para muchos, es un lenguaje desconocido  indeciso

Subir al inicio
 


    M   M SSSSX   X
   MM MM S    X X
  M M M  S    X
 M   M   S  X X
M   MSSSS X   X

 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #6 - 11.09.2009 a las 16:37:48
 
Entrega #2

¿Sabia Ud. que...

son realmente los registros?

Los famosos registros de los que tanto hablamos parecerían a simple vista variables del procesador y quizás a nivel funcional puedan parecer similares.

Pero en la realidad, son conceptos disímiles:

Una variable representa a una dirección de memoria RAM, la primera de una lista que contiene el valor almacenado. Por ejemplo, la cadena "test", se almacenará en 5 posiciones de memoria consecutivas, 4 para la cadena y el 5 para un fin de string que podrá ser un valor puntual.

Un registro corresponde a una locación (no posición) a una agrupación de celdas de almacenamiento de 8 y/o 16 bits dentro del microprocesador (pastilla) en si mismo.
Los cuales sólo pueden almacenar dependiendo el tipo de registro, valores de 8 o de 16 bits.

Por ejemplo, el registro A guardará valores entre 0 y 255, cuando el BC guardará entre 0 y 65535.

Nótese que los registros de una letra almacenan de 8 bits, cuando los de 2 letras (tambien conocido como par de registros) almacenan 16 bits.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
juan carlos fekete
God Member
*****
Desconectado


BUJE DEL EJE DEL MAL

Mensajes: 3561
Mar del Plata
Re: Sabía Ud. que...
Respuesta #7 - 11.09.2009 a las 16:42:12
 
Ahora va pregunta en serio, a ver si alguien la pega:
Cúantos registros tiene el Z80?
Subir al inicio
 

Jovatus Electronic´s Trashman,
ANDRES NUMBER ONE FAN

Sony F1XDJ
Talent TPC-310
Talent DPC-200
Spectravideo 738
Spectravideo 728
Toshiba HX-20
Yamaha C5XMII
Sony HB-20P
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #8 - 11.09.2009 a las 17:20:25
 
A ver (y sin google)...

Los llamados de uso o propósito general:  14 de 8 bits
Agrupables en pares específicos:
A, B, C, D, E, H, y L
A', B', C', D', E', H' y L'

Los pares aquí son: BC,DE,HL y BC', DE', y HL', el par del A es el F pero ese registro no es de "uso general".

De 16 bits no separables: 4
Indice:  IX / IY
Stack Pointer: SP

EDIT: Contador de Programa: PC

De 8 bits, especiales: 3
Interrupciones: I
Refresco:  R
Flag: F (Z, C, N, P/V, etc).

El F hace pareja con el A, siendo el par "AF".

No se como se contarán/agruparán pero aquí voy:
Total: De 8 bits: 14+3=17, de 16 bits (no separables) = 4
16 bits separables: 7. (6 de uso general + AF)

Creo que no omití nada.

Saludos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #9 - 11.09.2009 a las 17:28:23
 
Entrega #3

¿Sabía Ud que...

...se dice que el Z80 fue el primer procesador pensado para  multitarea?

Ya que tiene duplicados los pares de registros de uso general.

Por medio de el símbolo "prima" (').

Saludos,
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
juan carlos fekete
God Member
*****
Desconectado


BUJE DEL EJE DEL MAL

Mensajes: 3561
Mar del Plata
Re: Sabía Ud. que...
Respuesta #10 - 11.09.2009 a las 17:55:44
 
soultaker dijo 11.09.2009 a las 17:20:25:
De 16 bits no separables: 4
Indice:  IX / IY



Acá los quise traer, IX e IY son SEPARABLES, las instrucciones que los manejan así figuran entre la información no documentada de Zilog.
El maestro Beto Jas utilizaba las mismas para proteger los programas. Por aquellas épocas ningún desenzamblador las podía reconocer !!!

Subir al inicio
 

Jovatus Electronic´s Trashman,
ANDRES NUMBER ONE FAN

Sony F1XDJ
Talent TPC-310
Talent DPC-200
Spectravideo 738
Spectravideo 728
Toshiba HX-20
Yamaha C5XMII
Sony HB-20P
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #11 - 11.09.2009 a las 18:09:21
 
juan carlos fekete dijo 11.09.2009 a las 17:55:44:
Acá los quise traer, IX e IY son SEPARABLES


Mira vos que loco.  Chocado

No tengo documentación que informe que era separable. Mmmm de ser así como hacés para identificas el "I" del par IX del I del par IY y del I del puntero de las interrupciones.  Huh

EDIT: Ya me imagino como: El código decimal para los distintos "LD I," debe ser distinto.. es por eso que no lo reconocen los ensambladores... para una misma instrucción en assembler, hay por lo menos tres equivalencias distintas de código de máquina. Vale decir que esa protección puede únicamente realizarse escribiendo directamente en Código de Máquina, sin ensamblar... teeerrribleeee.. clap clap clap.

Saludos.
Subir al inicio
« Última modificación: 11.09.2009 a las 19:16:44 por soultaker »  

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #12 - 14.09.2009 a las 11:37:33
 
El feature no documentado de los registros, que fekete nos comentó, también figura en: http://es.wikipedia.org/wiki/Z80

Registros indexados IX e IY

Son 2 registros de 16 bits. Se utilizan como registros base para apuntar a una dirección de memoria de donde se va a tomar un dato. Se indica un byte adicional que implica desplazamiento.

    * Aunque no esta documentado oficialmente, se pueden utilizar como 2 registros de 8 bits independientes, obteniendo un total de 4 registros de 8 bits extras.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
phd
Full Member
***
Desconectado



Mensajes: 154
San Martín, Pcia. Bs. As.
Re: Sabía Ud. que...
Respuesta #13 - 16.09.2009 a las 23:10:48
 
En realidad las instrucciones para acceder a IX e IY son las mismas que para acceder a HL pero anteponiéndoles el código DD y FD respectivamente. Entonces, lo que alguien descubrió es que si anteponíamos estos códigos a instrucciones que accedieran a H o a L, terminaríamos accediendo a la parte alta o baja de estos registros. Más información en "The Undocumented Z80 Documented" (http://www.z80.info/zip/z80-documented.pdf).
Subir al inicio
 
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #14 - 17.09.2009 a las 20:52:34
 
¡Excelente aporte! ¡¡Y encima hecho con LaTex!!  Divertido
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #15 - 17.09.2009 a las 21:08:21
 
Entrega #4

¿Sabía Ud. que...

...se puede acelerar un bloque de código en assembler por medio de DI/EI?

Las instrucciones DI e EI desactivan las interrupciones y activan las interrupciones del Z80 respectivamente, ergo, el bloque de assembler entre DI/EI se ejecutará mas rápido. Esto sucede porque el Z80 durante su funcionamiento, es "interrumpido" para atender a las requisitorias I/O, etc. Al desactivar las mismas, el Z80 no se ve en la obligación de atenderlas y por ende, sólo se dedica a ejecutar el bloque de CM respectivo.

Téngase en cuenta que el bloque no debe ser interactivo, ya que las operaciones I/O se realizan mediante interrupciones.

IMPORTANTE: El teclado es un dispositivo I/O, así que asegúrense de que antes del RET haya un EI. Es más, si sobran, no molestan.

SaluOS/2.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #16 - 30.11.2009 a las 09:17:40
 
Hola a todos, y perdon por la ausencia. Me he tomado unas largas vacaciones.   Sonrisa

Ahora que he vuelto, les cuento que rescaté dos cuadernos míos de la época en que programaba para la spectrum, así que poco a poco transcribiré dichos apuntes para compartirlos.

Hay rutinas en ASSEMBLER y en BASIC.

Un abrazo grande a todos.

Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #17 - 01.12.2009 a las 08:50:39
 
Hola,

Y comenzamos con algunos trucos, (que seguro que ya conocen):

Esta es la primer página del cuaderno:

Algunas direcciones de memoria piolas.
Comienzo área BASIC: 23725
Convertir primera linea de un programa BASIC en 0: POKE 23756,0

Direcciones de memoria donde se almacena la dirección de inicio del juego de caracteres: 23606 y 23607.

Dividir un número de 2 bytes en sus octetos (piola para setear lo anterior):
RANDOMIZE <nro>
PRINT PEEK 23670
PRINT PEEK 23671

Dirección de memoria de comienzo del área de video: 16384
Dirección de memoria de comienzo del área de atributos: 22528

¡Hasta mañana!
Subir al inicio
« Última modificación: 01.12.2009 a las 12:46:39 por soultaker »  

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #18 - 02.12.2009 a las 08:37:24
 
Buen día a todos:

Les envío un par de trucos para hoy:

Input at:
INPUT "" AND USR 65400; AT X,Y LINE S$; "" AND USR 65405

Dumpeo del LM en 65400:
253,54,49,24,201,253,54,49,2,201

Protección Antimerge:
9999 REM
POKE PEEK 23627+256*PEEK 23628-3,255
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #19 - 03.12.2009 a las 08:40:20
 
Hola a todos:

La rutina LM de hoy es SUPERCLS:

Código:
0 REM ** SuperCLS by N&P Software **
10 CLEAR 34999 <--- Area de basic hasta 35000.
20 FOR n = 35000 TO 35027: READ A: POKE N,A: NEXT N <--- Cargo los octetos
30 DATA 243,6,18,237,95,230,15,103,237,95,111,17,0,64,26,166,18,35,19,122,254,8,32,246,16,233,251,201


y se la llama con:

Código:
RANDOMIZE USR 35000 



Que lo disfruten. Sonrisa

PD: N&P Software era "mi compania" de software de Spectrum  Mueca. Las iniciales salen de mi apellido y nombre.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
thierry
Moderador Commodore
*****
Desconectado



Mensajes: 2499
Cordoba Argentina
Re: Sabía Ud. que...
Respuesta #20 - 03.12.2009 a las 11:55:23
 
estaba de paso y era para decir que los aportes de soultaker son muy buenos, los leo siempre , entiendo masomenos pero algun dia ya me voy a poner a aprender bien el lenguaje .
Subir al inicio
 
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #21 - 03.12.2009 a las 13:32:45
 
thierry dijo 03.12.2009 a las 11:55:23:
estaba de paso y era para decir que los aportes de soultaker son muy buenos, los leo siempre , entiendo masomenos pero algun dia ya me voy a poner a aprender bien el lenguaje .


Gracias por tus palabras.  Sonrisa

Es apasionante el LM. Te cambia la cabeza.    Divertido

Saludos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
phd
Full Member
***
Desconectado



Mensajes: 154
San Martín, Pcia. Bs. As.
Re: Sabía Ud. que...
Respuesta #22 - 04.12.2009 a las 00:03:21
 
¿Dónde podemos ubicar nuestro programa para Spectrum en C/M?
1. La más usual: por encima de la RAMTOP: Si cambiamos la variable del sistema  RAMTOP (posiciones 23730 y 23731, recordar siempre que los 8 bits menos significativos van en el primer byte). En vez de tocar la variable del sistema tenemos la instrucción CLEAR, usada como el ejemplo SUPERCLS tres mensajes antes. Si hacemos NEW, el programa no se pierde. Todo se pierde y la computadora reinicia como recién encendida con RANDOMIZE USR 0, PRINT USR 0, LET a=USR 0 o cualquier invocación de USR 0.
2. Esta es buenísima: en las posiciones 23296 hasta la 23551 se encuentra el buffer de impresora (total: 256 bytes). Si no tenemos impresora, estas posiciones no tienen ningún uso y las podemos ocupar para lo que queramos. Ojo que en caso de instrucción NEW, ese espacio se borra.
3. Esta es horrible: en la memoria de pantalla. Para que los bits no se vean como puntos sin sentido aparente, se usan los atributos de color para tapar la mancha (ejemplo, papel y tinta blanca). Si no recuerdo mal, algunos juegos de Commodore hacían algo en pantalla antes de arrancar.
4. Esta era retro en la época: en la ZX-81 se acostumbraba a escribir un programa Basic con una línea REM seguida de tantos espacios como bytes utilizara nuestro programa; con POKE se cambiaban los valores de estos bytes y ejecutábamos desde la dirección. Podemos hacer lo mismo en la Spectrum, pero ojo: no olvidemos que los atributos (tinta, papel, flash) se guardan como bytes y si de casualidad un byte coincide con un control de atributos nos cambia el color para todo el listado.
Subir al inicio
 
 
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #23 - 04.12.2009 a las 08:25:43
 
phd dijo 04.12.2009 a las 00:03:21:
¿Dónde podemos ubicar nuestro programa para Spectrum en C/M?
4. Esta era retro en la época: en la ZX-81 se acostumbraba a escribir un programa Basic con una línea REM seguida de tantos espacios como bytes utilizara nuestro programa; con POKE se cambiaban los valores de estos bytes y ejecutábamos desde la dirección. Podemos hacer lo mismo en la Spectrum, pero ojo: no olvidemos que los atributos (tinta, papel, flash) se guardan como bytes y si de casualidad un byte coincide con un control de atributos nos cambia el color para todo el listado.

Esa es buenísima. Me había olvidado... era un clásico, es mas, hasta se usaban cargadores para volcar un código LM en una línea de BASIC, sabiendo que la longitud de la línea se especificaba en, si bien recuerdo, 1 o 2 bytes luego de la posición de memoria que corresponde al número de línea de la misma.

Por ejemplo en el spectrum, sería, para la primer línea: 23761 y 23762.

Y una vez volcado especificado en esas lineas cuantos bytes son se copian los mismos. Dicho sea de paso, el Z80 dispone de una instrucción para copia de bloques de memoria, LDIR, pero esto es para otro POST  Guiño

¡Muchas gracias por la colaboración!

Saludos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
soultaker
Full Member
***
Desconectado


LD A,63:LD I,A:IM 1:RET

Mensajes: 237
Babylon 5
Re: Sabía Ud. que...
Respuesta #24 - 04.12.2009 a las 09:09:34
 
Para centrar texto en forma dinámica:

Este truco lo ví por primera vez en PP. si bien recuerdo era un programa contable que hizo una persona de Venado Tuerto.

Código:
10 LET T$="Retrocomputacion"
20 LET C=(32 - LEN T$)/2
30 PRINT AT 0,C T$


Escritura con cursor (a lo película USA):

T$: Texto.
F y C: Fila y columna respectivamente.

Código:
1000 FOR n = 1 TO LEN T$: PRINT AT F,C+N-1; T$(N);"_": NEXT N
1010 PRINT AT F,C+N-1;" "; RETURN


Saludos.
Subir al inicio
 

...
La comprensión es una espada de tres filos: Tu versión, mi versión y la verdad.
soultaker 12923297  
IP Registrada
 
Páginas: 1 2 3 
Enviar Imprimir