Conversión código para 6809

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 12:33

Último mensaje de la página anterior:

Hola Luis,

por lo que veo en estos párrafos hay ineficiencias del tipo:
estás usando lbeq y parecidos en lugar de los mejores beq, los saltos cortos ahorran un byte y ciclos de reloj, así que hay que minimizar los saltos largos, si no son imprescindibles.
El compilador ya avisa si son necesarios ...
Hay muchas cosas por comentar en tu código, me voy a descargar los dos mensajes, me los miro con calma y los vuelvo a subir tal como los habría hecho yo.
Por cierto, si eres capaz de hacer un programa que genere, a partir del código Z-80, lo que ya tengo funcionando, me apunto al carro, pero ya te garantizo yo que es imposible.
Programar no es un acto mecánico sistemático (recuerda que lo puede ser al coste de cuadruplicar el espacio necesario), las eficiencias que permite el 6809 se obtienen
analizando y replanteándose lo que hace la rutina muchas veces.

Esta es una buena oportunidad para que te conviertas en un maestro del assembler del 6809.
No desaproveches la oportunidad, olvídate del mundo PC
¿Somos retro-fans o no? I love my -codrg1 -thumbup

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 12:55

luis46coco escribió:continué con la rutina 6EE9 hasta 6FB9
incluye la (#124# OK) y la (#125# OK)
El trabajo es muy grande, la posibilidad de error muy alta, es un trabajo muy fuerte y muy largo, es un programa muy lineal y complejo a pesar de los parámetros.
Debe haber una manera mejor de hacer esto, cada instrucción hay que pensarla mucho, por las pequeñas diferencias con el Z80, los cc no se activan igual, los ROL no son iguales, los bit no los tenemos entre registros, bueno claro hay que ponerlos en RAM primero, y lo que nos podíamos evitar porque es fácilmente convertible no lo estamos haciendo automático por la utilidad, incluso podríamos evitarnos lo del z80 a la derecha si lo hiciéramos mediante programación.
Podría hacer 2 versiones, una con duplicidad de fuentes (derecha e izquierda) y otra versión con solo la parte derecha (que a ti te gusta mas).
yo lo que veo es que es muy largo, puede ser un año.
Preferiría enseñarle a la computadora como pensar y hacer nuestro trabajo, en serio


Al final me quedo con tu última versión y voy a trabajar a partir de aquí.
Iré comentando todos los cambios que haga en el fuente ...

A mi no me da miedo el volumen de código a tratar, ésto ha de ser un entretenimiento mas que trabajo o lo llevamos mal, un curro no pagado es malo -507
Hay muchas diferencias entre Z-80 y 6809 sobre todo en la afectación de las instrucciones sobre los flags y hay que estar atento!
Los desplazamientos, también existen en 6809, todos ellos, lógicos, aritméticos y circulares
El tema de bits en 6809 se hace con AND y OR, por ejemplo
BIT 5,A sería ANDA %00100000 y el resultado distinto de cero si el bit 5 de A esta a 1
SET 5,A sería ORA %00100000 obligando al bit 5 a ser 1
RES 5,A sería ANDA %11011111 o como les gusta a otros ~%00100000 que pasa a cero el bit 5
Todas son simples y afectan al flag Z
De todas ellas la única peligrosa es la primera ya que modifica el registro A. Si debe permanecer vivo, prefiero hacer esto:
TFR A,B
ANDB $00100000
BEQ o bien BNE ... y el registro A no ha sido modificado, pero has necesitado una sentencia adicional (siempre mejor que un PSHS y un PULS)

En fin, ya iremos viendo sobre la marcha cuestiones, digamos, técnicas

saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2413
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Conversión código para 6809

Mensajepor luiscoco » 15 Ene 2015 14:39

lo de los lbra lo se, solo que no sabia como medirlo, usare los cortos
con respecto a los desplazamientos hay un problema el rlca pasa del bit 7 al 0 solo que el C lo toma también, es un ROL de 8 bit, no de 9 como en el 6809, no hay ninguno idéntico.
El problema de los BIT es cuando son de memoria, o este BIT 7, (IX-$01), que hay que reverenciarlo a Reg_IX o algo asi.

Edito:
Yo estimo que hay un 25% a un 50% de instrucciones que un programa podría hacer en forma automática, y utilizaríamos mejor el tiempo en estudiarlo y ponerlo mas eficiente, ademas de alinear los comentarios y abrirnos el espacio.

Si le enseño bien al programa seguro podrá hacer grandes cosas.

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 15:04

luis46coco escribió:lo de los lbra lo se, solo que no sabia como medirlo, usare los cortos
con respecto a los desplazamientos hay un problema el rlca pasa del bit 7 al 0 solo que el C lo toma también, es un ROL de 8 bit, no de 9 como en el 6809, no hay ninguno idéntico.
El problema de los BIT es cuando son de memoria, o este BIT 7, (IX-$01), que hay que reverenciarlo a Reg_IX o algo asi.


el rlca efectivamente pasa el bit7 al bit0 pero también lo pasa al carry
la única solución que se me ocurre ahora mismo es esta:
LSLA con lo cual el bit7 pasa al carry
ADCA #0 al sumarle cero pero con el carry, el bit de C irá copiado en el bit0

El tema de BIT en memoria no se puede, habrá que hacer
LDB - 1,x
ANDB %mascara de bits

Sigo con la rutina. Voy a completarla con las subrutinas.
Yo suelo empezar por las rutinas mas abajo del árbol y voy subiendo hacia arriba.
De esta forma validas que cada rutina reciba los parámetros que requiere

saludos
pere


Pd. Cuando acabemos con esta rutina, haré una parada para echar una ojeada al último mensaje de Chema sobre scripts / comandos
Luego me gustaría hacer un repaso a lo ya convertido para poner escuetamente los parámetros que requiere cada bloque así como los
valores que devuelve.
Será una oportunidad para ver que he hecho con el tema de rotaciones de bits, o no me ha afectado o lo que tengo anotado me pareció
que encajaba con lo que permite el 6809. Vale la pena revisar ahora que hay poca cosa hecha ...

Avatar de Usuario
luiscoco
Mensajes: 2413
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 36 veces
Agradecimiento recibido: 57 veces
Contactar:

Re: Conversión código para 6809

Mensajepor luiscoco » 15 Ene 2015 15:09

Ok perfecto, recuerda que yo ya empece las subrutinas de esta rutina.
Relee la anterior, la edite

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 15:11

Yo estimo que hay un 25% a un 50% de instrucciones que un programa podría hacer en forma automática, y utilizaríamos mejor el tiempo en estudiarlo y ponerlo mas eficiente, ademas de alinear los comentarios y abrirnos el espacio.

Si le enseño bien al programa seguro podrá hacer grandes cosas.


Tu mismo, Luis
yo opino justo todo lo contrario. Los registros a utilizar los defines tu en función de las necesidades en cada rutina, el programa hará lo que hayas programado, nunca hará lo mismo que tu a mano.
Los automatismos pueden introducir errores graves que pueden pasar inadvertidos. No es lo mismo escribir tu una sentencia 6809 que verla ya escrita y pasar a leer la siguiente.
Yo no tengo prisa en acabar ésto, pero tu mismo, haz los experimentos que creas oportunos.
Recuerda la frase: Vísteme despacio que tengo prisa.
Creo que es super-aplicable a esta conversión.

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 16:24

Hola Luis,

efectivamente las cosas empiezan a ser mas complicadas, en esta pequeña parte su utilizan HL, DE, BC , IX así que ya he añadido reg_IX y de paso reg_IY ambas en la página 0 de acceso directo.
He hecho una conversión rápida, ahora toca hacer una revisión para corregir errores. Está completo con sus subrutinas.
El siguiente paso sería verificar si hay zonas en las que un registro está realmente libre para usarlo de comodín para los reg_xx

Te adjunto el documento, míratelo con reparos, voy a empezar la verificación ya mismo, pero de momento tu ya puedes ver el resultado y de paso
podemos empezar a comentar los detalles que creas necesarios ...

saludos
pere
Adjuntos
L_6E97 completado.zip
Borrador primer paso para L_6E97
(4.83 KiB) Descargado 65 veces

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 17:44

no te apresures a contestar ...
He encontrado olvidos (lineas no convertidas) y algun uso de registro de RAM que no tocaba (DE por IX por ejemplo) -banghead
Ya he comentado todas las líneas, ahora compararé el código 6809 con el código Z-80 a ver si encuentro mas tonterías ...
Pronto lo subo de nuevo, mas fiable ;-)

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 15 Ene 2015 19:10

@Luis

Ahora debería estar bien.
Obviamente habría que añadirlo al fichero actual y hacer algunas pruebas, pero para comentar esta manera de convertir el código de Z-80 a 6809
que es consistente con lo hecho hasta ahora, ya nos puede servir.

Te toca a tí, ¿Por donde quieres que empecemos a comentar?
Hay partes realmente endiabladas (no se parecen nada al Z-80) pero no es lo habitual.

hasta pronto
pere

Pd. No cubre todas las posibilidades, pero junto con lo que yo ya tengo hecho, podrías llegar a sacar un buen montón de ejemplos para enseñar a tu programa de
ayuda a la conversión de Z-80 a 6809. Siempre habrá excepciones que habrá que tratar a mano, ésto es inevitable
Adjuntos
L_6E97 completado revisado.zip
L_6E97 para comentar método de conversión
(5.53 KiB) Descargado 66 veces

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 16 Ene 2015 23:17

una vez detectado que la escritura en la parte superior y el presentar el dibujo de una localización
se lleva a cabo dentro de la rutina "ExecuteUsrCommandsBilboEvents", he empezado a hacer el árbol
de este pequeño monstruo ...

He dibujado hasta el segundo nivel completo y he indicado cerca de cada rutina del segundo nivel
la cantidad de llamadas que hace de tercer nivel.
La mayoría ya están hechas o se hacen en este mismo bloque

Así, cada una tiene un paréntesis con 0, 1 o 2 cifras
- Si no hay nada, solo un guión, indica que no llama a ninguna rutina mas
- si tiene cifra(s) cada una lleva una letra indicando:
N= es nueva y por tanto puede tener llamadas a cuarto nivel ó mas abajo
H = ya hecha anteriormente o en este mismo bloque

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 23 Ene 2015 19:48

Hola,
terrible, creí que no arreglaría nunca la parte del parseo de palabras!
Luis, es la parte de L_6E97 que, para hacerla a medias, la convertí aprisa y corriendo. He pagado las consecuencias con intereses (usureros) -507

Me creaba un bucle, luego no pasaba nunca por la rutina de entrada de órdenes y para rematar la faena, había palabras que las desechaba sin motivo aparente ...
Os garantizo que ha sido un calvario ... espero haber aprendido la lección (casi todo relativo al uso de un registro para IX y para IY al mismo tiempo)

El fuente lo he dividido en dos partes, el código y los datos, por comodidad
Subo ambos ficheros y, de paso, un VDK para que quien quiera probar, pueda hacerlo.
El programa NO tiene salida (de momento) así que Reset para finalizar ... lo siento, otra vez ya le pondré el control de la letra Q para salir del MainLoop
Basta con hacer RUN"H680907D.BIN"

De entrada ya acepta la orden LOOK inicial (sin efecto, por falta de mas rutinas) y luego espera que escribamos órdenes.
Si tardamos mas de 20 segundos en pulsar una tecla, borra lo que hayamos entrado y pone "WAIT"
Si damos Enter, parsea las palabras y si alguna NO está en el diccionario-1 (Word_A hasta Word_Z), la da por mala y la escribe debajo ... (falta la rutina que imprima I do not know the word " ... )

Como cosa rara, he visto que si escribo una palabra con una letra mas que alguna que exista en este diccionario (de 4 letras de longitud mínima), también la acepta.
Quiero pensar que ésto se evitará mas adelante cuando compruebe si es una posible declinación ó conjugación de la palabra que está en el diccionario.

Cualquier observación será muy bien recibida -drinks

saludos
pere
Adjuntos
25 - The Hobbit 6809 v07d.zip
El VDK para pruebas
(17.12 KiB) Descargado 73 veces
H6809-7d.zip
Los fuentes (código y datos)
(73.85 KiB) Descargado 70 veces

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 25 Ene 2015 13:12

Hola,

ya tenía una forma simple de evitar que el programa aceptara palabras MAS largas que alguna de las existentes en el diccionario-1
Pero al hacer mas pruebas, he detectado que también las acepta mas cortas!!
Por ejemplo si escribes:
OPEN C, entonces te responde con:
I DO NOT SEE THE CACHE HERE
Resulta que CACHE es la primera palabra del diccionario-1 que empieza por C, así que la acepta por la jeta

Menos mal que tenia fama de disponer de un buen parser, que sino ni me imagino -507

¿Valdría la pena corregir ésto también?
El bug de las lineas repetidas (mas de una cenefa, etc) ya está solucionado en la versión para 6809 ...

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 25 Ene 2015 13:38

puedo estar equivocado ...
He encontrado una forma de controlar (evitar) los dos casos feos:
OPEN HALLOWEEN, cuya respuesta es: I DO NOT SEE THE HALL HERE
OPEN CA, cuya respuesta es: I DO NOT SEE THE CACHE HERE
La versión para 6809, da como no aceptables las palabras HALLOWEEN y CA

Para conseguir ésto, no se requiere ni un solo byte extra, solo dos modificaciones leves en dos tests de bifurcación.
Lo dejo así, ya iré viendo si esta intolerancia resulta perjudicial mas adelante.

saludos
pere

Avatar de Usuario
ron
Mensajes: 18951
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 2030 veces
Agradecimiento recibido: 1745 veces

Re: Conversión código para 6809

Mensajepor ron » 25 Ene 2015 23:28

Finalmente casi recuperado de una megaGripe que me ha tenido postrado toda la semana, a ver si me pongo al día con todos los avances que hay, que son muchos y muy significativos y a ver si a partir de mañana me pongo las "pilas" y podemos darle a pser1 un empujón y mucho ánimo.

He estado leyendo todos los avances y novedades y no quepo dentro de mi, esto es loable del todo, congratulations.

Avatar de Usuario
Chema
Mensajes: 2412
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 2291 veces
Agradecimiento recibido: 714 veces
Contactar:

Re: Conversión código para 6809

Mensajepor Chema » 27 Ene 2015 10:27

Ya te digo. El curro que se está pegando pser1 es BRUTAL. Estaría genial que se sumase gente al proyecto para echar una mano.... Yo estoy últimamente siendo un colaborador bastante pésimo porque no me queda mucho tiempo libre :(

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 27 Ene 2015 11:45

Hola amigos,

no os preocupéis por el tema de codificar a 6809.
A mi no me molesta lo mas mínimo ir haciendo tranquilamente bloque por bloque. Como hay que hacer muchas pruebas, no se gana nada codificando muchas cosas a la vez.
La verdad es que tengo algunas partes ya convertidas que todavía no he podido probar por falta de otras partes que están en bloques todavía no empezados ...
Ya tengo finalizado el SayWhat con su PrintMsg, pero quiero revisarlo un par de veces antes de echarme al ruedo con el.
Será guapo empezar a ver respuestas del programa -thumbup

Ahora, solamente quedan DOS modulazos por convertir que deben representar casi un 60% del código
La parte positiva del asunto es que si éstas cifras son correctas, implica que ya tenemos convertido el 40% del total, que me parece mucho ahora mismo!

saludos
pere

Avatar de Usuario
pser1
Mensajes: 2991
Registrado: 08 Dic 2012 18:34
Agradecido : 697 veces
Agradecimiento recibido: 771 veces

Re: Conversión código para 6809

Mensajepor pser1 » 27 Ene 2015 18:53

Hola de nuevo,

he acabado, a lápiz por supuesto, el diagrama del bloque SayWhat que contiene la parte de PrintMsg con su tabla L_7295 que apunta a 20 entradas de código.
Lo he hecho, sobre la marcha, lo mejor que he podido
He necesitado mover tres rutinas del bloque ExecuteUsrCommandsBilboEvents para traerlas a éste, ya que me decidí a hacer éste antes que el otro ... un día de éstos
actualizaré el otro diagrama y lo subiré de nuevo.

Ya lo tengo convertido y verificado, solo me queda añadir al bloque de datos las variables particulares de este bloque, compilar y empezar a probar ... -thumbup

saludos
pere

27-01-2015 23h29m EDITO: He cambiado el diagrama para que refleje los cambios realizados

56 - Arbol de SayWhat con PrintMsg.jpg


Volver a “Proyecto The Hobbit 6809 por pser1”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado