Conversión código para 6809

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Utilidades para ayudar al análisis de "The HOBBIT"

Mensajepor luiscoco » 23 Dic 2014 01:25

Hola a todos
Ya mi des-ensamblador esta listo, he tardado mucho por ocupaciones del curro y navideñas, pero ya se puede decir que esta listo, las únicas diferencias son los códigos erróneos en datos, que otros des-ensambladores toman en forma diferente.

Aca pueden comparar los dos ASM
el original de race y el des-ensamblado de mi programa en base al HOBBIT.BIN
DesAsembler.zip
(332.7 KiB) Descargado 203 veces


Si a alguien le interesa el fuente que me diga y lo subo, esta en Visual basic 2010, es muy sencillo, lo puedo hacer en QB64, o en C++ de visual studio 2010
Me falta lo de las zonas de datos, varios orígenes y otras cosillas.
También los auto comentarios.
Pero aunque falte todo eso ya de puede usar para convertir a 6809, haré mis pinitos a ver que sale, pser1 me ayudas?

Podemos abrir un hilo nuevo de "Conversión Automática z80 a 6809" o solo "Conversión z80 a 6809"

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Utilidades para ayudar al análisis de "The HOBBIT"

Mensajepor luiscoco » 23 Dic 2014 04:35

En este método proponen usar el registro U del 6809 http://www.computer.org/csdl/mags/mi/19 ... 071055.pdf
En principio se puede seguir esta linea, estudiándolo noto que por ejemplo LD A,15 es trasladado no solo como LDA #15 sino que ademas guarda A en 0,U con "STA ACCA,U", donde ACCA equivale a 0, siendo equivalente a STA 0,U.
Esto se hace para no depender del almacenamiento que este en A, pues este cambia mucho, cada registro tiene su posición en memoria a partir del Stack adicional Registro U.
Según el documento.

Conversion de registros Z80 a 6809.PNG
Conversion de registros Z80 a 6809.PNG (40.15 KiB) Visto 4598 veces


Al usar este método puede quedar muy ineficiente y en el articulo sale que se podría optimizar, y mas aun dependiendo del contexto se podría simplificar mas aun, tanto que quedaría casi de la misma cantidad de instrucciones, pero dependería mucho del contexto. esto quiere decir que si se usan debajo otras rutinas y pretendemos usar de nuevo la A el programa fallaría y habría que revisarlo a mano.

Conversión de instrucciones Z80 a 6809.PNG
Conversión de instrucciones Z80 a 6809.PNG (14.69 KiB) Visto 4598 veces


Yo voto por la versión corta, Traslación según contexto, es directa pero tendría errores, tal vez se podría implementar un proceso que advirtiera o resolviera los conflictos de mantener esta sencillez.

Equivalencias iniciales, El registro SP y el AF no estaban en el listado, veremos si hacen falta
ACCA	EQU	0
CCR EQU -1
AF EQU 0
ACCB EQU -2
C EQU -3
BC EQU -2
ACCD EQU -4
E EQU -5
DE EQU -4
H EQU -6
L EQU -7
HL EQU -6
IX EQU -8
IY EQU -10
A_ALT EQU -12
CCR_ALT EQU -13
AF_ALT EQU -12
B_ALT EQU -14
C_ALT EQU -15
BC_ALT EQU -14
D_ALT EQU -16
E_ALT EQU -17
DE_ALT EQU -16
H_ALT EQU -18
L_ALT EQU -19
HL_ALT EQU -18
SP EQU -20

----------------------------

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Conversión código para 6809

Mensajepor pser1 » 23 Dic 2014 09:49

@Luis,

aquí podremos comentar los avances en la conversión a 6809

saludos
pere

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 23 Dic 2014 10:07

@pser Disculpa borre sin querer tu mensaje, en vez de citar le di editar y no pude reversar lo
Z-80         6809
A A
F CC
BC a pringar en U
DE a pringar en U
HL a pringar en U
IX X
IY Y

Avatar de Usuario
Chema
Mensajes: 2664
Registrado: 21 Jun 2012 20:13
Ubicación: Gijón
Agradecido : 3190 veces
Agradecimiento recibido: 926 veces
Contactar:

Re: Conversión código para 6809

Mensajepor Chema » 23 Dic 2014 14:09

Pues no recuerdo haber tenido problemas, la verdad. Skool Daze, también es cierto, no tenía una organización tan complicada... o igual sí, pero no me lo parecía. Lo primero que hice fue implementarme el motor gráfico "a medida", viendo cómo funcionaba el original. Luego reestructuré las áreas de datos para que fuese más fácil y eficiente acceder a ellas. En lugar de tener, por ejemplo, bloques para cada personaje con todos los datos, tenía vectores separados que es más eficiente en 6502... algo como:

En lugar de:

Código: Seleccionar todo

struct personaje{
 byte posx, posy;
 byte * grafico_actual;
 byte estado;
...
};

struct personaje personajes[NUM_PERSONAJES];


Es mejor, en 6502:

Código: Seleccionar todo

byte posx[NUM_PERSONAJES];
byte posy[NUM_PERSONAJES];
byte p_grafico_actual_bajo[NUM_PERSONAJES];
byte p_grafico_actual_alto[NUM_PERSONAJES];
...


Así, poniendo el registro X o el Y al número de personaje, accedo a los datos directamente con lda posx,x (por ejemplo). La otra opción es eficiente para el Z80, pero horrible para el 6502. Necesita más código y ciclos de CPU.

Con todo esto, ya podía ir traduciendo las rutinas, viendo qué hacían y haciendo lo mismo en mi código. Generalmente usaban el registro H para el ID del personaje, yo usé el X y en el resto de los casos en que se pasaban cosas como parámetros a través de registros me buscaba la vida. Si podía usar registros del 6502 (A,Y por ejemplo), si no variables en la página cero (tenía unas cuantas de 16 bits llamadas tmp0, tmp1, etc.

Pero me estoy enrollando. En general la cosa es que con el Z80 se pasa muchas veces información de un registro a otro por la particularidad de su juego de instrucciones. En la traducción basta hacerlo de la manera mejor según el procesador. En mi caso el código era casi siempre más grande, pero no menos eficiente (excepto al pintar, pero eso es cosa del Oric).

No hay que traducir el código tal cual, sino lo que hace: ¿que pone un bit de un flag a 1? pues eso, ¿que borra nosequé zona de memoria? pues lo mismo. No hay por qué traducir literalmente con uso de registros y todo... ¿o no?

¿No tenéis un equivalente a la página cero -acceso rápido- para los casos en que no tengáis registros equivalentes?

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 23 Dic 2014 15:08

gracias, Chema

la verdad es que tenemos muchas posibilidades con el 6809.
Existe el registro DP que permite utilizar como página cero (direccionamiento directo) cualquier byte de las 64k
Yo también creo que hay que codificar directamente en 6809, de lo contrario no habría perdido mas que el tiempo necesario para descifrar los bloques de datos
y habría obviado los quebraderos de cabeza que nos hemos ganado a pulso con las acciones por no hablar de los scripts!
Me parece que sabiendo lo que hace cada bloque de código (rutina o lo que sea), hay que convertirla de la forma mas simple posible.
Es cierto que guardar la cantidad de registros que utiliza el Z-80 molesta mas que asusta, pero bastará con usar algunas zonas de la DirectPage como buffer de los registros inexistentes, a menos que se pueda evitar incluso esto.
El otro tema muy molesto es la cuestión de los flags, que, en el 6809, son afectados por operaciones que no los afectan en la Z-80.
Por esto digo que, a mi parecer, hay que traducir bloque a bloque, pero entendiendo bien lo que hace el programa y respetando dicha funcionalidad a rajatabla, pero nunca
convirtiendo sentencia a sentencia.

Al final, creo que un día de estos me voy a liar la manta a la cabeza y empezaré a convertir a partir de Start y ya iremos viendo que piezas hacen falta, sobre la marcha.
Creo que que ya lo he dicho antes esto, así que si me vuelve a pasar por la cabeza ya no valdrá escribirlo aquí, sino empezar a crear código 6809.
Precisamente la parte de lectura de teclado y la salida a pantalla son hardware dependientes, por lo que hay que hacerlas a medida si o si.
Para escribir en pantalla creo que podremos utilizar lo que ya hice tiempo atrás para las primeras pruebas en Dragón y el tratamiento de teclado es simple usando rutinas directas de la ROM.

saludos
pere

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Conversión código para 6809

Mensajepor luiscoco » 24 Dic 2014 15:31

Que compilador hay?, conozco varios pero ambiente coco, cruzados como rainbow IDE son más bien editores complejos, y luego compilan, yo quiero compilar o al menos que me ayude con errores sintácticos y ciclos de reloj.
Yo ya tengo, desensamblador del z80 y el de 6809 listos y a medida, quiero decir que podría medir los ciclos de las rutinas z80 en comparación de las que hagamos en 6809

Este desensamblador esta en VB6, no esta completo, toma un BIN y abre un notepad con el Assembler, se puede pasar a múltiples documentos MDI y colocar las opciones (aun no funcionan).

Como también ya hice el Desdensamblador Z80, podemos hacer cosillas. no están muy probados, así que cuidado.

En primera instancia quiero escribir 6809 cómodamente, alguna idea -nb, si no tratare de hacerlo yo, ya quería hace tiempo -507
Adjuntos
Assembler 6809.zip
(1.38 MiB) Descargado 181 veces

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Conversión código para 6809

Mensajepor luiscoco » 24 Dic 2014 15:58

Yo agregaría el BC como D aunque hay choques porque el D es AB no BA, también choca con el A solo, habría que usarlo con cuidado
Y como tu bien dices se puede usar el DP
Z-80         6809
A A
F CC
BC D
DE a pringar en U
HL a pringar en U
IX X
IY Y


Hay muchas eficiencias que se pueden hacer, como te comente, ya que el Z80 usa casi todo en registros y el 6809 puede hacer mucho directo a memoria

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 24 Dic 2014 18:08

@Luis,

las pruebas hechas hasta ahora con los bloques de datos, las hice con el LWASM.exe
Como acepta cualquier documento de texto, editaré en el PC y compilaré con él.
De hecho he visto que es lo que suelen hacer los compañeros de la otra web para trabajar con Drivewire

saludos
pere

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 29 Dic 2014 19:34

Buenas tardes,

Fase 1 del arranque:
He creado un fichero con todos los datos estructurados para comprobar que se compila correctamente con el LWASM.
Ya se había hecho anteriormente, pero las estructuras de datos han cambiado ostensiblemente desde entonces.
Además, como hay que añadir los DATABLK1 y DATABLK3 y este último contiene los directorios de alto nivel de los scripts
que a su vez llaman a los directorios de scripts de cada personaje, he tenido que añadir la parte de scripts también.
Lo malo es que éstos llaman a un montón de rutinas del programa. Como estas no tendrán una dirección fija hasta que las
compilemos, de momento les he asignado a todas una dirección ficticia ($7777) para evitar errores de compilación por
identificadores no definidos.

El MAPA de memoria que podemos esperar para The Hobbit es el siguiente
Ya veremos si somos capaces de meter todo el código en los 11.436 bytes que nos quedan libres

saludos
pere


CONTENIDO POR BLOQUES DE MEMORIA
===================================================================================================

Bloque Contenido Ocupa en Spectrum Long. en Bytes en Hexa Ubicado en
---------------------------------------------------------------------------------------------------
01 System de $0000-$03FF 1.024 bytes ($0400) $0000-$03FF
02 Text Screen de $0400-$05FF 512 bytes ($0200) $0400-$05FF
03 D.O.S. working area de $0600-$0BFF 1.536 bytes ($0600) $0600-$0BFF
04 RAM Graphics PMode4 de $0C00-$23FF 6.144 bytes ($1800) $0C00-$23FF
---------------
TOTAL SISTEMA . . . . . . . . . . . 9.216 bytes ($2400)


21 Scripts de $C82D-$CA83 599 byes ($0257) $50AC-$5302
22 ROMFONT fonts Spectrum de $3D00-$3FFF 768 bytes ($0300) $5303-$5602
23 MAINFONT 42 chars/lin de $8822-$8B21 768 bytes ($0300) $5603-$5902
24 Text Messages de $AD7D-$B479 1.789 bytes ($06FD) $5903-$5FFF
25 WordIndex de $6000-$603F 64 bytes ($0040) $6000-$603F
26 Dictionaries de $6040-$6BFF 3.008 bytes ($0BC0) $6040-$6BFF
27 Location Help Messages de $83CD-$83EE 34 bytes ($0022) $6C00-$6C21
28 Actions table de $AB53-$AD2C 474 bytes ($01DA) $6C22-$6DFB
29 Determiner table 1 de $AD2D-$AD34 8 bytes ($0008) $6DFC-$6E03
30 Determiner table 2 de $AD35-$AD3C 8 bytes ($0008) $6E04-$6E0B
31 CommonWords de $AD3D-$AD7C 64 bytes ($0040) $6E0C-$6E4B
32 Location Help Messages de $B47A-$B562 233 bytes ($00E9) $6E4C-$6F34
33 Location Text Descrip. de $B563-$B6D9 375 bytes ($0177) $6F35-$70AB
34 LOCATION table (index) de $B9E0-$BA7F 160 bytes ($00A0) $70AC-$714B
35 Preposition Table de $BA80-$BA89 10 bytes ($000A) $714C-$7155
36 OBJECT Index table de $C063-$C11A 184 bytes ($00B8) $7156-$720D

41K OBJECTS de $C11B-$C72F 1.557 bytes ($0615) $720E-$7822
42K Locations de $BA8A-$C062 1.497 bytes ($05D9) $7823-$7DFB
43K DATABLK1 de $B6EB-$B707 29 bytes ($001D) $7DFC-$7E18
44K DATABLK3 de $CA84-$CB42 191 bytes ($00BF) $7E19-$7ED7
----------------
11.820 bytes ($2E2C)

51 STRINGS & STACK de $7ED8-$7FFF 296 bytes ($0128) $7ED8-$7FFF
----------------
TOTAL DATOS . . . . . . . . . . . . 12.116 bytes ($2F54)

================
TOTAL SISTEMA + DATOS . . . . . . . 21.332 bytes ($5354)


11 THE HOBBIT CODE de $2400-$50AB 11.436 bytes ($2CAC) $2400-$50AB

-=-=-=-=-=-=-=-=
TOTAL GLOBAL . . . . . . . . . . . . 32.768 bytes ($8000) $0000-$7FFF

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 29 Dic 2014 19:46

Una vez compilado el fichero que solamente contiene los datos estructurados, se obtiene, como cabía esperar un binario de 11.820 bytes
mas los 10 de cabecera (por ser cabecera y fin de fichero tipo CoCo)
Carga perfectamente en Dragon. Con un pequeño programa Basic se puede ir consultando el contenido de puntos de memoria y
verificar que lo que devuelve el PEEK(x) corresponde al byte indicado el el fichero .lst de la compilación.

Os adjunto:
fichero fuente HBD.asm
fichero binario HBD.bin
listado HBD.lst.txt

saludos
pere
Adjuntos
_Datos Hobbit.zip
(130.7 KiB) Descargado 156 veces

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 03 Ene 2015 23:08

Hola amigos,

recuerdo que para tener la aventura en texto sin gráficos Luis encontró una solución haciendo un POKE en la entrada de la rutina de dibujo de gráficos, poniendo un RET.
Era una buena posibilidad y además muy fácil de aplicar sin modificar el programa ... a gusto del usuario.
Ahora que estoy en plena conversión de Start, Restart y MainLoop, he descubierto que el programa lo hace gratis.
Si al arrancar pulsas la tecla N nunca presenta pantallas gráficas. Con cualquier otra tecla si las presenta ...

Supongo que al ir re-analizando pequeños trozos de código para convertirlos a 6809 iremos descubriendo mas detalles ocultos hasta ahora, por ejemplo
el uso real de las variables ya que habrá que seguir que se hace con ellas. Promete ser interesante -thumbup

Creo que en breve podré subir una primera versión que se limite a arrancar y poco mas.
De entrada todas las subrutinas las estoy creando con un simple RTS o sea que no hacen nada (ni bueno ni malo!). Ya se irán implementando sobre la marcha.
Respecto a las áreas de datos / variables las voy añadiendo cuando el código convertido las requiere ...

Saludos
pere

Avatar de Usuario
ron
Mensajes: 21855
Registrado: 28 Oct 2010 14:20
Ubicación: retrocrypta
Agradecido : 3862 veces
Agradecimiento recibido: 4752 veces

Re: Conversión código para 6809

Mensajepor ron » 03 Ene 2015 23:37

Las versiones de Apple ][ y BBC Micro ( versiones en disco y 6502 ) preguntan al arrancar el programa si se desea tener gráficos. A lo que se responde con un Y/N como antes comentabas.

Pere, que esto va como un cohete. Pronto vamos a empezar a ver cosas. A ver si me pongo al día y le doy un repaso a todas las cosas nuevas.

Muchas gracias

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Conversión código para 6809

Mensajepor luiscoco » 04 Ene 2015 03:04

Decidi dejar el original Z80 como comentario, copiandolo antes de modificarlo
La primera rutina dentro del loop principal es la #83, tratando de traducirla y practicando un poco, no estoy ducho, encuentro lo siguiente
----------------------------------------------------------------------------
.							 ; (#83# --)
L_6DD6: LDD #$0BB8 ;LD HL, $0BB8 ; 6DD6 21 B8 0B ; HL = $0BB8 ; Pasa $0BB8
STD [L_B714] ;LD (L_B714), HL ; 6DD9 22 14 B7 ; (L_B714) = HL ; a (L_B714)
LDA #$01 ;LD A, $01 ; 6DDC 3E 01 ; A = 1 ; A = 1
STA [L_B701] ;LD (L_B701), A ; 6DDE 32 01 B7 ; (L_B701) = 1 ; Puesto a 0 si hay error en RomSave
STA [L_B6FA] ;LD (L_B6FA), A ; 6DE1 32 FA B6 ; (L_B6FA) = 1 ; Puesto a 0 al imprimir
LDA #$3E ;LD A, $3E ; 6DE4 3E 3E ; A = $3E(62)(">")
JSR PutChar ;CALL PutChar ; 6DE6 CD 8B 85 ; llama rutina PutChar
LDA #$20 ;LD A, $20 ; 6DE9 3E 20 ; A = $20(32)(" ")
JSR PutChar ;CALL PutChar ; 6DEB CD 8B 85 ; llama rutina PutChar
---------------------------------------------------------------------------
Un programa puede hacer esta duplicidad de codigo en comentarios para ayudarnos.
hay instrucciones que se pueden traducir automáticamente, veamos algunas
CALL -------> JSR
LD A,$01 -------> LDA #$01
LD (L_B6FA), A -------> STA [L_B6FA]
JR NZ, L_724D -------> BNE L_724D
----------------------------------------------------------------------------
No se si es mejor usar el D o el X para cargar 16 bits y ponerlos en algún sitio

Quisiera saber si la rutina GetKey ya la hicieron

Se necesita DECD que no existe (creo que en 6309 si lo hay), pero se podría usar un macro
Aca por ejemplo si se usa D para HL, se necesitaria DECD
DECD 		;DEC HL			 ; 7253 2B		; Decrementa HL
;LD A, H ; 7254 7C ; Carga A con H
ORA B ;OR L ; 7255 B5 ; Hace OR lógico de A con L

Ya que D = A:B, el comando ORA B seria bueno tenerlo, otro macro?


Tambien se necesita ORA B

Avatar de Usuario
luiscoco
Mensajes: 2414
Registrado: 15 May 2011 04:23
Ubicación: Caracas, Venezuela
Agradecido : 38 veces
Agradecimiento recibido: 59 veces

Re: Conversión código para 6809

Mensajepor luiscoco » 04 Ene 2015 03:54

Rutina #89 semiterminada, hay que revisar
---------------------------------------------------------------------------
; (#89# --)
L_7249: PUSH D ;PUSH HL ; 7249 E5 ; Guarda HL
LDD [L_B714] ;LD HL, (L_B714) ; 724A 2A 14 B7 ; HL = (L_B714) = $08B8
L_724D: JSR GetKey ;CALL GetKey ; 724D CD 93 8B ; llama rutina GetKey
;AND A ; 7250 A7 ; A = A AND A ; Adecua flags
BNE L_7273 ;JR NZ, L_7273 ; 7251 20 20 ; Si Z = 0, Salta a L_7273
DECD ;DEC HL ; 7253 2B ; Decrementa HL
;LD A, H ; 7254 7C ; Carga A con H
ORA B ;OR L ; 7255 B5 ; Hace OR lógico de A con L
BNE L_724D ;JR NZ, L_724D ; 7256 20 F5 ; Si Z = 0, Salta a L_724D
PULS U ;POP HL ; 7258 E1 ; Recupera HL
PUSH U ;PUSH HL ; 7259 E5 ; Guarda HL
JSR L_6E8B ;CALL L_6E8B ; 725A CD 8B 6E ; llama rutina L_6E8B (#91# OK)
LDX L_7291 ;LD DE, L_7291 ; 725D 11 91 72 ; Carga DE con L_7291
LDB #$04 ;LD B, $04 ; 7260 06 04 ; Carga B con $04
L_7262: LDA ,X+ ;LD A, (DE) ; 7262 1A ; Carga A con (DE)
STA ,U+ ;LD (HL), A ; 7263 77 ; Carga (HL) con A
;INC HL ; 7264 23 ; Incrementa HL
;INC DE ; 7265 13 ; Incrementa DE
JSR PutChar ;CALL PutChar ; 7266 CD 8B 85 ; llama rutina PutChar
DEC B
BNE L_7262 ;DJNZ L_7262 ; 7269 10 F7 ; Decrementa B y si no es cero vuelve a L_7262
LDX ,S ;EX (SP), HL ; 726B E3 ; Intercambia (SP) con HL
LDB #$7C ;LD B, $7C ; 726C 06 7C ; Carga B con $7C
LDA #$0D ;LD A, $0D ; 726E 3E 0D ; Carga A con $0D
STX #$FE0C ;LD HL, $FE0C ; 7270 21 0C FE ; Carga HL con $FE0C
L_7273: PUSH A,CC ;PUSH AF ; 7273 F5 ; Guarda AF
LDA #0 ;XOR A ; 7274 AF ; A = A XOR A ; A = 0, borra A, flag Z = 1
LDD #$01F4 ;LD DE, $01F4 ; 7275 11 F4 01 ; Carga DE con $01F4
ADCD ,X ;ADC HL, DE ; 7278 ED 5A ; HL = HL + DE + carry ; Añade DE y el carry a HL
LDD #$0BB8 ;LD DE, $0BB8 ; 727A 11 B8 0B ; Carga DE con $0BB8
BHI L_7284 ;JR C, L_7284 ; 727D 38 05 ; Si C = 1, Salta a L_7284
JSR L_728B ;CALL L_728B ; 727F CD 8B 72 ; llama rutina L_728B (#171# --)
BHI L_7285 ;JR C, L_7285 ; 7282 38 01 ; Si C = 1, Salta a L_7285
L_7284: EX DE, HL ;EX DE, HL ; 7284 EB ; Intercambia DE con HL
L_7285: STD [L_B714] ;LD (L_B714), HL ; 7285 22 14 B7 ; Carga (L_B714) con HL
PULS A,CC ;POP AF ; 7288 F1 ; Recupera AF
PULS D ;POP HL ; 7289 E1 ; Recupera HL
RET ;RET ; 728A C9 ; Retorna


---------------------------------------------------------
Quisiera que me ayudaran a ver mis errores para despues ayudar mas

Avatar de Usuario
pser1
Mensajes: 4094
Registrado: 08 Dic 2012 18:34
Agradecido : 1352 veces
Agradecimiento recibido: 1118 veces

Re: Conversión código para 6809

Mensajepor pser1 » 04 Ene 2015 15:54

Hola Luis,

Yo también estoy guardando el original de Z-80 en el área de comentarios.
Ya lo verás cuando pueda subir lo que ya he convertido ...

luis46coco escribió:Decidi dejar el original Z80 como comentario, copiandolo antes de modificarlo
.							 ; (#83# --)
L_6DD6: LDD #$0BB8 ;LD HL, $0BB8 ; 6DD6 21 B8 0B ; HL = $0BB8 ; Pasa $0BB8
STD [L_B714] ;LD (L_B714), HL ; 6DD9 22 14 B7 ; (L_B714) = HL ; a (L_B714)
No se si es mejor usar el D o el X para cargar 16 bits y ponerlos en algún sitio

Mucho cuidado con los parántesis o corchetes según el ensamblador ( [ ] )
Siempre implican INDIRECCION y no es ésto lo que necesitas en los casos en los que los estás empleando
basta con poner
STD L_B714
para que el valor de D se guarde en la posición de memoria etiquetada como L_B714 y L_B715

En aquellos casos en que necesites que un registro de 16 bits APUNTE a una variable, muy distinto a cargar su contenido, hay que hacer
LDX #L_nnnn
En LWASM ésto cargaría $nnnn en el registro X, mientras que
LDX L_nnnn , tomaria el contenido de L_nnnn y L_nnnn+1 como 16 bits y lo pondría en X
Finalmente la indirección:
LDX (L_nnnn), tomaria en contenido (L_nnnn)(L_nnnn+1) como un puntero (16 bits) y entonces cargaría X con los dos bytes apuntados por el puntero creado
Ya sé que no es trivial, y no tengo claro si me he explicado bien.


Quisiera saber si la rutina GetKey ya la hicieron

No, no se ha hecho NINGUNA. Como dije, solo está hecho desde Start hasta el final de MainLoop

Se necesita DECD que no existe (creo que en 6309 si lo hay), pero se podría usar un macro 
Aca por ejemplo si se usa D para HL, se necesitaria DECD
DECD ;DEC HL ; 7253 2B ; Decrementa HL
;LD A, H ; 7254 7C ; Carga A con H
ORA B ;OR L ; 7255 B5 ; Hace OR lógico de A con L

[/pre]

Aquí dos observaciones:
1) Si realmente necesitas DECD, entonces puedes hacer esto:
decb          resta 1 de B. Si era 0 pasará a $FF y flag C=1
sbca #0 resta 0 mas el carry de A

2) Si el valor lo tuvieras en X,Y,U entonces lo que indicas a continuación se limita a verificar si HL es nulo. Imaginemos en X
leax   - 1,x    resta 1 de X
cmpx #0 mira si es cero

Ya que D = A:B, el comando ORA B seria bueno tenerlo, otro macro?
Tambien se necesita ORA B

Este es mas entretenido, si es imprescindible (posiblemente se pueda hacer de otra forma lo que quiera el programa ...)
pshs  b      guardas B en el stack
ora ,s+ hace OR indexado con B del stack y restaura puntero del stack


saludos
pere


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 4 invitados