lunes, 14 de mayo de 2007

Basic included

Estoy de lleno en el tema del compilador/traductor, despues de meditarlo con la almuada voy a crear instrucciones igualitas al Basic...
SCREEN
LOCATE
COLOR
el porqué:
senzillo de responder

si creará una función de tipo:
def Screen(n1,n2):
codigo a generar

cada vez que se llamara a la rutina se cuela un call screen, con lo cual se entorpece la rapidez de ejecución, unas sentencias transparentes debidamente cogidas de
la bios y parecidas al Basic seran muy útiles.

Imaginad si seria interesante el tema de poder compilar a lenguaje maquina antiguos programas
escritos en basic, con la evidente ganancia de velocidad.

lunes, 30 de abril de 2007

Especulando sobre 'If'

Tras estar deliberando, he llegado a la conclusión que :

en el ejemplo:

if n==0:
n=100
^

en la posición n, no sólo hay que guardar la posición de la columna, sinó que también desde dónde salió.

tuple_a=[4,'if']

se necesita para acabar el código en assembler.

No es lo mismo que:

for j in range(4):
n=100
^

La posición es la misma pero el código a generar es distinto. Y necesitamos saber de que instrucción proviene toda la nueva parrafada.

domingo, 29 de abril de 2007

Preview de Def y Inline Completado

La instrucción Inline ha sido completada con éxito, despúes de mis quebraderos de cabeza con el tema de contar espacios.
Asímismo la instrucción def para definir funciones està en fase preview.
He empezado con la sentencia if. Aquí empieza el marrón!!

sábado, 28 de abril de 2007

Bastante curro

#pyasmsx example, only testing v01

def sumar(n,m):
return n+m

def main():
bx=55
ax=64
cx=sumar(ax,bx)
print cx


if __name__ == '__main__': main()


resultado de hoy...

; Source generated by PyAsmsx 0.1
; Compile with asMSX.exe (www.robsy.net)

;pyasmsx example, only testing v01
;1 #pyasmsx example, only testing v01
;2
;----------definicion funcion-----------
;3 def sumar(n,m):
;4 return n+m
;5
;----------definicion funcion-----------
;6 def main():
;7 bx=55
;8 ax=64
;9 cx=sumar(ax,bx)
;10 print cx
;11
;12
;...sentencia if...
;13 if __name__ == '__main__': main()

Primeros pasos

Estoy programando la version pre-alpha de mi cross-compiler.
Es un programa que genera codigo para assembler z80 (version de asMsx) ---> www.robsy.net
a partir de codigo python.

input args:
pyasmsx.py [file_in.py [file_out]] [/debug]

output:
example.asm
or
file_out.asm

------------------------------------------------------------------
Me pregunto como debería ser el paso de parametros en z80.

ejemplo python:
def sumar(a,b):
return a+b

sumar(3+6)

codigo a generar... para z80

ld af,3
ld bc,6
push af
push bc
call sumar
ret

sumar:
"codigo"

y prescindir de push y pops...
asumiendo claro que los parametros de entrada estan contenidos en los registros...

entonces, tenemos:
ld a,3
ld b,6
call sumar