APPLICATIONSPROGRAMMATION ★ DECODIFICADOR BINARIO (AMSTRAD SEMANAL) ★

Decodificador Binario (Amstrad Semanal)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Ya que tengo que escribir una pequeña introducción a este programa creado por Alberto Súñer, comenzare confesando que no sé muy bien si encuadrarla en la sección de Programación de la revista o en la sección de Amstradmilagros (por desgracia, esta interesante sección no es fija todavía). Todo empezó una tarde de esas en las que uno está harto de programar en general y de transpasar a mano código máquina a DATAS, en particular.

Acariciaba yo el sueño imposible de que esa tarea la realizara el ordenador, y tuve la suerte de que en ese momento pasara Alberto por allí y me viera la cara, entre lánguido y verde. Inmediatamente se acercó a enjugarme las lágrimas, y cuando le conté mis cuitas, me miró fijamente y dijo: «HUM... no sería imposible del todo», y desapareció, dejándome con la miel en los labios. Podía escucharse el ruido que hacia su cabeza según se alejaba.

Dos días después, la rutina estaba lista y funcionando. Aún no me lo puedo creer.

Todos estamos hcbituados a programar en Basic, por lo que es muy común ponerse delante del ordenador y empezar a escribir unas líneas que son las que van a constituir nuestro programa, sin preocuparnos de otra cosa que no sean los posible errores de sintaxis que hayamos podido.

Hasta ahí todo está muy claro, pero seguro que la inmensa mayoría de nosotros nos hemos planteado en alguna ocasión la siguiente pregunta: ¿Cómo es posible que una serie de caracteres introducidos en un orden prefijado, den lugar a determinadas reacciones de nuestro ordenador?

Pues bien, la respuesta está en su propio sistema operativo, que es el encargado de decodificar las líneas que nosotros escribimos desde Basic.

Una vez expuesto el programa deberemos intentar abrir caminos para el estudio de las interioridades de nuestro Amstrad, y averiguar en qué forma introduce un programa realizado en Basic en su memoria.

La primera pregunta que se nos plantea es la siguiente: ¿Dónde introduce el ordenador los datos que le damos desde Basic? Pues bien, la solución es muy sencilla, la dirección de memoria #170 es la elegida como principio de los programas realizados en Basic.

Una vez dicho esto, podemos probar de ver qué datos se encuentran en dicha dirección si nosotros introducimos la siguiente línea de programa:

10 REM HOLA

Si desensamblamos a partir de la dirección #170 nos encontramos con lo siguiente:

#170 12 Longitud
#171 0 de la línea.
#172 10 Número
#173 0 de la línea.
#174 32 Código ASCI del caracte r« »
#175 rem Código del TOKEN «REM».
#176 32 Código ASCI del caracter« ».
#177 h Código ASCI del caracter «H».
#178 o Código ASCI del caracter «O».
#179 l Código ASCI del caracter «L».
#17B a Código ASCI del caracter «A».
#17C 0 Código de fin de línea.

Como vemos, los dos primeros bytes indican-la longitud de la línea y son almacenados de tal forma que el primer byte es el menos significativo y el segundo byte es el más significativo. De la misma forma almacena el número de línea en los dos bytes siguientes.

Observaremos que la posición de memoria #17C contiene un cero y aun así la hemos incluido en el listado; esto es debido a que este byte le indica al sistema que ha acabado una línea Basic.

Como vemos el tema es apasionante, aunque en este artículo no pretendemos estudiar a fondo el problema, sino únicamente dar una introducción para aquellos usuarios que estuvieran interesados en su comprensión y análisis.

A partir de ahora nos centraremos en la explicación del programa que os presentamos, que es una rutina en código máquina que es capaz de generar un programa Basic.

La rutina en cuestión lo que hace es generar líneas «DATA» y luego introducir dentro de ella unos valores. Estos valores son extraídos de la posición de memoria que nosotros le indiquemos, luego son decodifícados convenientemente para ser introducidos en otra posición de memoria en la cual el ordenador los tratara como pertenecientes a un programa Basic.

Como vemos la utilidad del «generador de Datas» es inmensa, ya que es capaz de coger un programa en código máquina que tengamos en memoria y poner todos los bytes que contiene el programa en líneas «DATA» Basic, despreocupándonos así de tener que teclear absolutamente nada.

Lo primero que hace la rutina es tomar varios datos que nosotros tenemos que darle desde Basic al hacer la llamada a la rutina. Para ello se utiliza el registro indexado IX, que apunta al último dato que nosotros damos en la llamada a la rutina.

Los datos necesarios para que la rutina funcione correctamente, deben ser los siguientes:

  1. Número de línea en la cual queremos que empiecen a generarse las líneas «DATA».
  2. Dirección a partir de la cual tenemos nuestro programa en código máquina.
  3. Longitud de dicho programa.

Estos datos debremos entrarlos de la forma que se indica a continuación:

CALL &A000,(N.LINEA), (INICIO), (LONGITUD)

Una vez que la rutina coge estos datos iniciales, lo primero que hace es cargar en el registro HL, la dirección donde acaba el Basic, para empezar a colocar las líneas a partir de esa dirección.

Para obtener la dirección de final de Basic, apuntamos a la variable #AE83 (siposeemos un Amstrad 464) o a la variable #AE66 (si tenemos una Amstrad 664 o un 128), esa dirección nos dirá dónde termina el programa Basic que tenemos en memoria.

El siguiente paso, será colocar a partir de esa dirección la primera línea «DATA», para ello colocamos en los dos primeros bytes la longitud de la línea, en los dos siguientes, el número de línea, luego colocamos el código del TOKEN «DATA» y por último colocamos los números correspondientes que son leídos de la dirección donde tenemos nuestro programa en código máquina.

Los bytes leídos a partir de la dirección indicada, son decodificados, y luego son trasladados a la dirección del programa Basic, para que éste los interprete convenientemente.

Una vez colocadas todas las líneas «DATA», el programa calcula la última dirección del programa Basic y la incrementa en dos unidades para luego colocarla en las variables que indican al sistema donde acaba el programa Basic.

Dado que estas variables son distintas según el ordenador que estemos utilizando, (464, 664 ó 128), deberemos tenerlo en cuenta al introducir el listado.

Para un ordenador Amstrad 464, las etiquetas utilizadas deberán ser:

BAS1 EQU #AE83
BAS2 EQU #AE85
VARI EQU #AE87
VAR2 EQU #AE89

Para los ordenadores Amstrad 664 y 128, las etiquetas serán las siguientes:

BAS1 EQU #AE66
BAS2 EQU #AE68
VARI EQU #AE6A
VAR2 EQU #AE6C

Estas son las direcciones donde almacena cada uno de los ordenadores, la dirección de final de programa Basic y la dirección de las variables.

El programa cargador contiene la rutina que funcionará correctamente en los ordenadores Amstrad 664 y 128. Para que la rutina sea utilizable en el Amstrad 464, deberemos cambiar las líneas que se indican por las que siguen:

50 IF SUMA < > &7459 THEN PRINT «ERROR EN DATAS»
100 DATA 60, 145, 42, 131, 174, 43, 43
170 DATA 228, 35, 35, 34, 131, 174, 34
180 DATA 133, 174, 34, 135, 174, 34, 137

Por último decir que el programa Basic generado por dicha rutina en código máquina, se podrá salvar sin ningún tipo de problema en cinta o disco, para su posterior utilización. Esto quiere decir que a partir de ahora, podemos plantearnos crear un programa mezcla de Basic y máquina sin ningún problema.

La parte en código máquina puede ser desarrollada y depurada con cualquier ensamblador, ensamblada y convertida en DATAS con nuestra rutina. Una vez generado el programa, lo salvamos en cinta/disco con formato ASCII:

SAVE "DATAS", A

y luego de renumerarlo adecuadamente, hacemos un MERGE con el programa Basic que creamos primero. De esta forma tan sencilla reunimos en un solo programa Basic y máquina en DATAS.
  • NOTA: Como nos habéis imaginado el programa Basic cargador está hecho con esta rutina.

SA

★ PUBLISHERS: HOBBY PRESS, Amstrad Semanal
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: AMSTRAD SEMANAL 1986
★ AUTHOR(S): ???
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listings:
» Decodificador  Binario    (Amstrad  Semanal)    (ASM-Source)    SPANISH    LISTINGDATE: 2024-05-17
DL: 16
TYPE: PDF
SiZE: 581Ko
NOTE: 6 pages/PDFlib v1.6

» Decodificador  Binario    (Amstrad  Semanal)    SPANISHDATE: 2024-05-17
DL: 20
TYPE: ZIP
SiZE: 4Ko
NOTE: 40 tracks
.DSK: √

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Deconnect Lecteur de Disquette
» Applications » Edito a la découverte du Clavier
» Applications » Decodeur Fichiers 17k de la Multiface
» Applications » Decompact Ocp v2
» Applications » Zenith Decompacter
» Applications » Datei Codierer-Decodierer (Computer Schau)
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 423 millisecondes et consultée 76 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.