Giter VIP home page Giter VIP logo

pyz80's Introduction

Bindings python de un emulador del procesador Z80.

Esto es una prueba de concepto, todo muy pre-alfa.

El emulador está escrito en C (https://github.com/anotherlin/z80emu) con lo que la velocidad de python no es un problema.

Python por su parte proporciona la facilidad de programación y la posibilidad de experimentar con el emulador desde el intérprete interactivo.

El binding permite asociar al emulador una función (escrita en python) que será llamada en ciertos momentos. Esto permite simular hardware adicional o llamadas al sistema sin necesidad de escribir C. En el ejemplo zexall.py se muestra como utilizar esto para simular llamadas al sistema CP/M y poder ejecutar en el emulador un binario compilado para ese sistema.

Tutorial

Crear un emulador:

from pyz80 import Z80

emu = Z80()

Leer la memoria, un byte:

emu.memory(0x1234)

Escribir la memoria, un byte:

emu.memory(0x1234, 0xAB)

Escribir un bloque de memoria, n bytes, desde una cadena (str py2, byte py3):

data = "\0x01\0x02\0x03"
emu.load_memory(data, 0x1234)

Escribir un bloque de memoria, n bytes, desde un bytearray:

data = bytearray([0x01, 0x02, 0x03])
emu.load_memory(data, 0x1234)

Leer un registro:

emu.register("A")

Escribir un registro:

emu.register("A", 0xAB)

Asignar syscall:

def my_syscall(z):
    print "SYSCALL"

emu.syscall(my_syscall)

Comprobar si la emulación ha finalizado:

if emu.is_done:
    print "Fin"

Obtener el número de ciclos emulados:

print emu.cycles

Ejemplos

El directorio src/examples contiene varios ejemplos:

  • demo.py: ejemplo sencillo en el que se muestra como cargar un programa y ejecutarlo.
  • zexall.py: muestra como implementar llamadas al sistema.

TODO

  • Mejorar syscall. Actualmente es la adaptación directa del programa de ejemplo que viene con el emulador. En ese sentido me da que es una solución especializada que podria mejorarse, pero antes necesito aprender mas del Z80.
  • Mejorar la API, no es muy pythonica.
  • Añadir profiling. Por el momento añadir contadores para las lecturas i escrituras de la RAM.

pyz80's People

Contributors

patxoca avatar

Stargazers

yeti avatar

Watchers

 avatar yeti avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.