[Icestudio] Probando el procesador Z80 en la Alhambra II

742 views
Skip to first unread message

Obijuan

unread,
Aug 19, 2019, 4:42:26 PM8/19/19
to FPGAwars: explorando el lado libre
Hola,

Estoy probando a sintetizar el procesador Z80 desde Icestudio, basándome en proyectos ya existentes (Las referencias están al final del mensaje)


Por aquí iré poniendo los avances. De momento ya tengo el "hola mundo" funcionando en icestudio, usando bloques Verilog. El sistema tiene un z80, una RAM de 8K, una ROM de 8K y un puerto (en la dirección 0x40) que está conectado a los 8 leds de la Alhambra II

El programa hola mundo en ensamblador (firmware.s) simplemente envía un valor de 8 bits al puerto 0x40 para verlo en los LEDs y termina

El bloque principal sólo tiene la entrada de reloj (clk) y como salida los 8 bits del puerto. Poco a poco lo iré separando en bloques para que se pueda modificar fácilmente su interior: añadir periféricos, cambiar el mapa de memoria, etc...



De momento estoy trabajando en modo desarrollador, por lo que uso Linux y la línea de comandos. Pero poco a poco lo modificando para hacerlo accesible para todo el mundo y en todas las plataformas

Puesta en marcha

* Clonar el proyecto de github


* Ensamblar el firmware

z80asm -o rom firmware.s

* Generar la memoria rom en verilog:

srec_cat rom -Raw -o rom.list -VMem 8


* Arrancar Icestudio y abrir el fichero Z80-soc.ice

* Conectar la Alhambra II y cargar el circuito

Se trata de un Z80 COMPLETO, por lo que tarda bastante tiempo en sintetizarse (En mi ordenador tarda 1 minuto y medio)

Probar a modificar el firmware (fichero firmware.s) y volver a cargar desde icestudio. El fichero original tiene esto:


org 0x0000

;-- Sacar un valor por el puerto
;-- para verlo en los LEDs
;-- Puerto 0x40: LEDs
ld a, 0x03
out (0x40),a
halt


Se puede invocar a las dos línea anteriores fácilmente con este script en bash:

bash fw.sh


El ensamblador que estoy usando es el z80asm de GNU:   https://www.nongnu.org/z80asm/

sudo apt install z80asm

Para generar la memoria en formato verilog hay que instalar este paquete

sudo apt install srecord


¡Que los micros retro estén con vosotros!!

Saludos, Obijuan

Créditos:

*  [Proyecto iceZ0mb1e project](https://github.com/abnoname/iceZ0mb1e),


Obijuan

unread,
Aug 19, 2019, 5:03:59 PM8/19/19
to FPGAwars: explorando el lado libre

He sacado el nombre del fichero de la rom como parámetro, para que se puedan probar distintas roms:




Cada vez que se cambia el firmware hay que volver a sintetizar (que tarda mucho).  Tengo en el TODO incluir una Uart y un bootloader para poder sintetizar una vez y cargar el firware desde el PC muy rápidamente. Pero bueno, de momento voy a seguir separándolo en módulos para que se pueda modificar sin saber Verilog

Saludos, Obijuan

Eladio Delgado

unread,
Aug 19, 2019, 6:40:24 PM8/19/19
to fpga-wars-explora...@googlegroups.com
¡¡¡Qué épico!!! Esta es la primera CPU que programé y es muy emocionante verla sintetizada en la Alhambra II :o)

Muchas gracias por compartir esto Juan!!

Saludos,
Eladio 

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/c54fbe38-537f-4f52-97eb-bca10e586b56%40googlegroups.com.

charli va

unread,
Aug 20, 2019, 2:01:10 AM8/20/19
to fpga-wars-explora...@googlegroups.com
Ya no es porque el Amstrad 464 fuera mi primer ordenador... esque esto es un paso más a revolucionarlo todo! CPUs en un bloque de arrastrar y listo!

Yo me apunto a echarte una mano en lo que necesites! Mil gracias por este aporte!

charli va

unread,
Aug 20, 2019, 2:13:00 AM8/20/19
to fpga-wars-explora...@googlegroups.com
93 segundos en sintetizar! pero vamos esto es un gran paso!!!

Obijuan

unread,
Aug 20, 2019, 5:18:32 AM8/20/19
to FPGAwars: explorando el lado libre
Acabo de subir al repo una primera separación del SOC en bloques:




Siguen siendo bloques verilog, pero ya se pueden apreciar las diferentes partes:

* Z80: Es la CPU (del proyecto TV80)
* RAM (de 8KB)
* ROM (de 8KB). Aquí es donde se carga el firmware (rom.list)
* PUERTO DE SALIDA: Está conectado a los LEDs
* Lógica de selección (tanto de la RAM como de la ROM y del puerto de salida). Calcula la señal de selección de cada bloque según la dirección y el tipo de acceso del Z80
* Lógica del acceso al bus de datos de entrada: En la FPGA ice40 no hay puertas tri-estado internas, por lo que la gestión quién deposita qué dato en el bus se hace mediante multiplexores y codificadores

El siguiente paso será construir los bloques (con sus dibujos) e implementarlos a su vez con sub-bloques (aunque el bloque Z80 de momento lo dejaré en verilog, con el código del proyecto TV80 original)

RETO: ¿Alguien se anima a hacer un programa en ensamblador del Z80 para hacer parpadear un LED y probarlo en la FPGA? :-)

Saludos, Obijuan






Obijuan

unread,
Aug 20, 2019, 6:39:04 AM8/20/19
to FPGAwars: explorando el lado libre

El bloque Z80 ya está listo:


El sistem completo queda así, de momento:



Hay un LED externo conectado a la señal halt_n. Esta señal está a 1, y cuando el Z80 ejecuta la instrucción halt, se para, y la pone a 0. El LED se apaga

Saludos, Obijuan

El lunes, 19 de agosto de 2019, 22:42:26 (UTC+2), Obijuan escribió:

charli va

unread,
Aug 20, 2019, 10:36:06 AM8/20/19
to fpga-wars-explora...@googlegroups.com
RETO ACEPTADO!

aquí va el código y el vídeo en funcionamiento  :)

led_parpadeo.png


Importante, he detectado que hay instrucciones que no se ejecutan bien, he ido probando diferentes formas de afrontar el reto porque otras no se ejecutaban, lo comento por si alguien lo está probando y no le funciona que puede ser, no por el código ensamblador sino porque está todo en desarrollo! :)

¡Saludos!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
IMG_0542.MOV

Obijuan

unread,
Aug 20, 2019, 11:05:21 AM8/20/19
to FPGAwars: explorando el lado libre

RETO CONSEGUIDO!!!!!!  :-)  Acabo de bajar tu firmware y lo he probado. Funciona perfecto!!!!!

Gracias!  :-)
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.

Obijuan

unread,
Aug 20, 2019, 11:29:06 AM8/20/19
to FPGAwars: explorando el lado libre
Ya tenemos la ROM en un bloque, con su icono


El sistema completo está así, de momento:



Antes de convertir la RAM en otro bloque, voy a hacer programas asm de prueba para comprobar que funciona bien, así como configurar la pila para poder hacer llamadas a subrutinas


Esto de mezclar hardware y software es muy adictivo :-)

Saludos, Obijuan


anunez

unread,
Aug 20, 2019, 11:30:08 AM8/20/19
to fpga-wars-explora...@googlegroups.com
Yo estoy de vacas y no me traje la Alhambra ii, solo el icestick. He intentado bajar los requisitos de Ram y rom a 256bytes (no 8k) para ver si entraba,  pero el icestudio se lo traga y sl final da un bloque rojo sin código de error. El RAM_LOC tv lo bajé.. pero no queda claro si falta algún otro parámetro por tocar. Las salidas las puse s los 5 leds y 3 pmods.
Una lástima pq casi no necesito ensamblador pues me sabia los hex de código maquina casi de memoria :-)
Me molaría mucho tener un z80 en el icestick por usb a mi pc :-@

Hay por ahí unn ensamblador de z80 en python muy bueno, así que se podría portar todo a windows,  para los que no tenemos nuestro linux a mano..

Gracias Obijuan 

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/e3dc9352-ece1-4fd6-8721-fad62471cc84%40googlegroups.com.

Juan Gonzalez Gomez

unread,
Aug 20, 2019, 11:40:59 AM8/20/19
to FPGA-WARS: explorando el lado libre
Hola Anunez,

Para este core del Z80, como es completo, no cabe en una ice40. Puedes visualizar los recursos que consume desde icestudio en Ver/Recursos FPGA. En la Alhambra II lo más crítico son los bloques lógicos PLBs, que están como al 50%

screenshot.png

La memoria no es problema, se puede bajar mucho, pero me temo que los PLBs no.

Sin embargo, sí veo factible hacer una versión reducida del Z80 que quepa en la ice40. Para programar en código máquina y aprender a mezclar hw/sw sería suficiente

Pero bueno, acabamos de empezar con esto. Está todo por hacer. Es el típico frikeo veraniego jajjajaja

Saludos, Obijuan

Obijuan

unread,
Aug 21, 2019, 3:53:15 AM8/21/19
to FPGAwars: explorando el lado libre

He encontrado un bug imporante en los acceso a memoria. Una instrucción tan sencilla como:

ld A, (0x0000)

No funciona bien.  En el core original del proyecto Z0mb1e funciona sin problemas, pero  al pasarlo a Icestudio he cometido algún error

Durante estos días lo voy a depurar concienzudamente para encontrarlo y os voy contando

Saludos, Obijuan

Obijuan

unread,
Aug 21, 2019, 11:40:23 AM8/21/19
to FPGAwars: explorando el lado libre
El acceso a memoria ya funciona. Había un bug en la selección de los chips de memoria (la lógica estaba invertida)

Seguro que aparecerán más bugs, pero de momento podemos seguir adelante.

Os paso un ejemplo hola mundo de lectura de una variable en memoria:

;-- Ejemplo 2: Lectura de una variable almacenada en memoria
;-- Se lee la variable var (con direccionamiento directo)
;-- y se saca por el puerto de LEDs

;-- Puerto de los LEDs
PORT_LEDS: equ 0x40


    org 0x0000

    ;-- Leer la variable var
    ld    A, (var)

    ;-- Sacar su valor por los LEDs
      out    (PORT_LEDS), A

    ;-- Terminar
    halt

;----- Variable var. Inicializada con un valor
var: db 0xF0

Estos ejemplos están en el repo en el directorio roms:


Carlos también ha subido ejemplos de prueba. Están en el directorio bench_asm:


Más adelante los unificamos

Voy a seguir haciendo pruebas para comprobar si la escritura en memoria funciona, así como la pila y los call

Saludos, Obijuan


asdfasdf

charli va

unread,
Aug 21, 2019, 11:47:37 AM8/21/19
to fpga-wars-explora...@googlegroups.com
Fenomenal! yo voy a seguir preparando firmwares que testéen todos los opcodes y así nos permitan hacer pruebas de regresión según vayamos haciendo cambios poder chequear que no hemos roto nada.

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

martin ribelotta

unread,
Aug 21, 2019, 12:53:12 PM8/21/19
to fpga-wars-explora...@googlegroups.com
El mié., 21 ago. 2019 a las 12:47, charli va (<char...@gmail.com>) escribió:
Fenomenal! yo voy a seguir preparando firmwares que testéen todos los opcodes y así nos permitan hacer pruebas de regresión según vayamos haciendo cambios poder chequear que no hemos roto nada.

Hay unos testbench realizados para los emuladores de Z80:
Tal vez se pueda portar a algo mas simple como lo que estan haciendo (por lo que vi, algunas cosas requieren un hardware mas completo con salida de terminal y demas)
 

Obijuan

unread,
Aug 21, 2019, 2:33:54 PM8/21/19
to FPGAwars: explorando el lado libre
He hecho un ejemplo de llamada a subrutina. Está funcionando bien

La pila hay que configurarla al final de la RAM, en la dirección 0x9FFF

Este test llama a la subrutina test que a su vez llama a test2. Al retornar de todas se escribe un valor en los LEDs. Así se comprueba que se llama y que se retorna correctamente 
Si en la pila se pone un valor incorrecto, por ejemplo 0x7000, como ahí no hay ram, el ejemplo no funcionará

;-- Ejemplo 3: Prueba de llamada a subrutina. Se llama a una subrutina
;-- que a su vez llama a otra, para comprobar que retorna correctamente
;-- A retorna saca un valor por los LEDs


;-- Puerto de los LEDs
PORT_LEDS: equ 0x40

;-- Valor a sacar por los LEDs
VALOR: equ 0x18


  org 0x0000

  ;-- Situar la cima de la pila al final de la RAM
  ;-- La pila crece hacia direcciones bajas de memoria
  ;-- (sp se decrementa al introducir elementos)
  ld    sp, 0x9FFF

  ;-- Llamar a la subrutina de test
  call test

  ;-- Sacar un valor por los LEDs para comprobar
  ;-- si ha retornado correctamente de la subrutina
  ld    A, VALOR
  out    (PORT_LEDS), A

  ;-- Termminar
  halt


;-------------
;-- Subrutina de pruebas
;-- Llama a test 2 y retorna
;-------
test:
  call test2
  ret

;------------------------------
;-- Subrutina que solo retorna
;------------------------------
test2:
  ret

Ahora ya podemos convertir en subrutina la rutina de delay de Carlos, para reutilizarla en otras pruebas

asdfasdf

Obijuan

unread,
Aug 21, 2019, 2:56:17 PM8/21/19
to FPGAwars: explorando el lado libre
Ya he añadido al blink de Carlos la pila para que funcione la subrutina. Lo he probado y va OK  :-)

Está subido al repo


org 0x0000

;-- Configurar la pila
ld sp, 0x9FFF

; Sacamos un 1 por el puerto 0x40 para encender el led0 de la Alhambra-II
ENCENDIDO:  ld    A, 0x01
            out (0x40),A
            CALL TIMER500ms

; Apagamos el led mandando un 0 por el puerto 0x40
APAGADO:    ld A,0x00
            out (0x40),A
            CALL TIMER500ms

            JP ENCENDIDO ; Volvemos al inicio (bucle infinito de encendido y apagado)

; Timer de aproximadamente 500ms para los 12MHz de la Alhambra
TIMER500ms: ld E,0xFF
J1:         ld B,0xFF
J2:         djnz J2
            dec E
            jr nz,J1
RET ; END TIMER500ms

Saludos, Obijuan

charli va

unread,
Aug 21, 2019, 3:38:15 PM8/21/19
to fpga-wars-explora...@googlegroups.com
Muy interesante! muchas gracias por los ejemplos, seguro que algo sacaremos de ahí :)

Inicialmente vamos a crear un testbench propio que nos valga para ir depurando poco a poco todas las features del procesador y periféricos que muchos serán cosas a medida (displays lcd,etc).

En el repo de Obijuan, he añadido en el directorio bench_asm el fichero 00-all.s  que ahora mismo tiene sólo dos tests, pero los iré ampliando.

La idea es en ese único fichero poder probar todos los opcodes o todo lo que veamos crítico de probar, se empieza mandando simplemente un 1 a los led para encender el primero y luego se van ejecutando el resto de ejemplos, cada ejemplo va incrementando el contador que se va mostrando por los leds, de forma que si un ejemplo falla, sabremos en qué punto nos hemos quedado.

Si el test pasa completo acabará mostrando el 0xFF con todos los leds encendidos

De momento como os digo sólo hay dos tests porque quería verlo con Juan antes de seguir adelante y en principio vamos adelante, así que en los próximos días iré completándolo. y si alguno se anima, mirad el concepto y dadle caña, mandadnos las propuestas y las iremos añadiendo.

Saludos!

Obijuan

unread,
Aug 21, 2019, 5:09:42 PM8/21/19
to FPGAwars: explorando el lado libre
He modificado la rutina de delay de Carlos para que se graben los registro usados en la pila, con push y pop. Así de paso ya probaba estas instrucciones

Al guardar los registros en la pila ya podemos invoca a esta rutina con seguridad desde cualquier parte de nuestros programas

También he calculado los valores para que el delay sea de aproximadamente 100ms  (es de 100.044ms)



Lo he subido al repo, junto a un ejemplo:


Saludos, Obijuan


Obijuan

unread,
Aug 22, 2019, 4:11:22 AM8/22/19
to FPGAwars: explorando el lado libre
Así es como va nuestro sistema Z80 por el momento. He corregido algunos bugs y he modificado la RAM para que sea un bloque estándar de icestudio


Lo siguiente será modificar el bloque del puerto de salida para hacerlo sin verilog, a partir de bloques icestudio 
Cada vez se ven más claras las diferentes partes de nuestro sistema digital Z80. Eso es importante para que se pueda modificar fácilmente, añadiendo puertos, periféricos, etc...

Saludos, Obijuan

Obijuan

unread,
Aug 22, 2019, 4:58:59 AM8/22/19
to FPGAwars: explorando el lado libre
Bueno, pues aquí tenemos ya el puerto de salida implementado con bloques (sin verilog). No es más que un registro que lee del bus de datos cuando se cumple el siguiente requisito:

* El puerto está seleccionado (señal port_cs_n a 0)
* Es una escritura (wr_n a 0)
* NO es una lectura (rd_n a 1)  (Esto último es redudante, y no debería ocurrir, pero de momento lo dejo porque estaba en el original)



Lo siguiente será pasar a circuitos la lógica de selección del puerto. Posiblemente haga un bloque Puerto que incluya todo: tanto su lógica de selección como el registro, y que tenga como parámetro la dirección del puerto donde se quiere mapear

Si podéis probar con los ejemplos ya hechos (u otros) sería genial, por si hay bugs en la transición a bloques. Yo con los que he probado ha ido bien, pero cuantas más pruebas mucho mejor :-)

Saludos, Obijuan

ddd

Obijuan

unread,
Aug 23, 2019, 5:34:00 AM8/23/19
to FPGAwars: explorando el lado libre
Ya he añadido la lógica de selección del puerto de salida mediante bloques



Me he limitado simplemente a transcribir a bloques el verilog que ya había, y comprobar que funciona. Esto se puede simplificar, por supuesto, pero de momento me estoy centrando en migrar el proyecto Z0mbie tal cual a Icestudio

Fijaros lo fácil que es ahora re-mapear el puerto de salida a otra dirección. Ahora mismo el número de puerto es 0x40, y desde el software sacamos información por los LEDs con out (0x40), A

¿Queremos que el puerto de salida sea el 0x60? No hay más que cambiarlo en el parámetro PUERTO, y desde nuestro sofware accederemos mediante out (0x60), A

Ya sólo queda añadir la lógica de selección de la ROM y RAM, y la migración estará completa. A partir de ahí ya podemos crear nuestros propios sistemas digitales basados en Z80

Saludos, Obijuan

Obijuan

unread,
Aug 23, 2019, 7:37:49 AM8/23/19
to FPGAwars: explorando el lado libre
Esta es la parte con la lógica de selección de la ROM.  Está siempre mapeada a partir de la dirección 0 (esto no lo modificamos) porque el Z80 empieza a ejecutar instrucciones a partir de la dirección 0, por lo que debe haber memoria siempre ahí

Como la ROM que hemos puesto es de 8KB, se debe seleccionar simpre que haya un acceso a cualquier posición de memoria menor de 0x2000 (Cualquiera entre 0000 y 0x1FFF)


La selección de la RAM en bloques ocupa más porque hay que hacer más operaciones. Lo que hace es activar el chip de ram siempre que el acceso a memoria esté entre las posiciiones de memoria 0x8000 y 0x8000 + 8KB. Con el parámetro RAM_LOC podomos cambiar la posición de este bloque de RAM


Más adelante lo podemos almacenar en submódulos para simplificarlo, pero de mmomento  nuestro sistema Z80 queda así:






La parte del Z80 sigue estando en verilog. Lo pasaremos a bloques más adelante para aprender su funcionamiento interno y poder modificarlo, pero de momento lo dejamos así. 

Saludos, Obijuan

Obijuan

unread,
Aug 23, 2019, 10:23:26 AM8/23/19
to FPGAwars: explorando el lado libre
Las salidas del Z80 del proyecto TV80 son en lógica negativa. En nuestro diseño he añadido puertas not y estoy utilizando lógica positiva, que a mí me resulta más intuitiva. Ahora las señales de chip select de rom, ram y el puerto son en lógica positivoa 

También he cambiado los colores de las etiquetas para distinguier las diferentes partes




Saludos, Obijuan

Obijuan

unread,
Aug 23, 2019, 3:10:04 PM8/23/19
to FPGAwars: explorando el lado libre

La lógica de selección de cada parte las he separado en submódulos:




Con esto concluyo la primera fase: portar el z80 y parte del proyecto Z0mbie a Icestudio

En los próximos días me voy a centrar en las pruebas de Icestudio 0.5-dev para que Carlos pueda sacar la nueva nightly y que todos lo podáis probar

Saludos, Obijuan

charli va

unread,
Aug 23, 2019, 3:35:19 PM8/23/19
to fpga-wars-explora...@googlegroups.com
Gracias por todo Juan! 😁a ver si esta semana sacamos ya la nueva relegase!!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Democrito

unread,
Aug 24, 2019, 1:52:16 AM8/24/19
to FPGAwars: explorando el lado libre
Lo que a continuación comento es expresar una idea, por si a alguien le parece interesante.

Tengo intención de experimentar con este proyecto (que es la leche!) aunque de momento no podré, pero mi intención es recopilar información para una cosa que querré hacer más adelante. Hace muchísimos años toqué este entrañable microprocesador con su ensamblador correspondiente y que ya apenas recuerdo. Para evitar(me) complicaciones se me ocurrió la idea de buscar por Internet un programa que hiciese lo siguiente: Escribir un programa en un lenguaje de alto nivel y que el "IDE" (el traductor) lo transformarse directamente en código máquina (o ensamblador) para el Z80, para luego meterlo en la ROM directamente.

No he encontrado exactamente lo que buscaba (o si parecía que existía me costaba mucho comprender los procedimientos), pero he dado con una web que me ha parecido muy interesante por la sencillez que transmite el autor de ese proyecto. La única pega que le veo es que me ha parecido que es un "interprete" (en vez de compilador) :

charli va

unread,
Aug 24, 2019, 2:23:18 AM8/24/19
to fpga-wars-explora...@googlegroups.com
Hola democrito! Para el z80 en Linux tenemos el sdcc que es un compilador de c

Con el tiempo la idea es que hagamos un flujo completo . Es decir un bootloader con una uart que nos permita cargar firmares dentro de la rom sin sintetizar y que se pueda hacer esta operación desde cualquier ide .

Por otro lado se podría buscar o hacer 😎 un sistema interpretado para poder programar cosas sin compilar, esto también es muy interesante 😉

Comienza una nueva era!! 

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Democrito

unread,
Aug 24, 2019, 9:26:49 AM8/24/19
to FPGAwars: explorando el lado libre
Ahora lo he entendido Charliva. En post anteriores se mencionó la palabra "bootloader" pero no sabía, o no comprendí en ese momento lo que significaba en este proyecto. Es justo lo que buscaba!

Jose Pico

unread,
Aug 24, 2019, 7:17:38 PM8/24/19
to FPGAwars: explorando el lado libre

Leches!
Como os cunden las vacaciones!
Qué locura.

Enhorabuena!

anunez

unread,
Aug 25, 2019, 5:20:21 AM8/25/19
to fpga-wars-explora...@googlegroups.com
Como ya comenté en un mensaje anterior,  me encanta este proyecto tanto como un ensamblador que hay en python, (http://www.intensity.org.uk/samcoupe/pyz80.php)
Porque con las 2 piezas se puede enseñar/aprender muy bien todo el proceso, pudiendo retocar a gusto lo que queramos. 
La ventaja de python es que corre en cualquier sitio (linux, windows, osx) y podemos mantenerlo en la comunidad sin excluir a nadie, además de ser un lenguaje con menos barrera de entrada que el el ensamblador en C.

Gracias a todos, en especial a Juan, claro, por su preciado tiempo vacacional.

Agustín
@agnuca

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Jose Pico

unread,
Aug 25, 2019, 2:20:15 PM8/25/19
to FPGAwars: explorando el lado libre
 He intentado abrir z80-soc.ice pero no puedo abrirlo, se queda indefinidamente pensando.

Saludos

Juan Gonzalez Gomez

unread,
Aug 25, 2019, 3:35:51 PM8/25/19
to FPGA-WARS: explorando el lado libre
Asegúrate de que tienes una versión de icestudio que soporta etiquetas. Con la 0.4-dev Nigthly se te debería abrir bien:

La tienes que instalar desde aquí:


(no la estable, sino la nightly)

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Jose Pico

unread,
Aug 26, 2019, 3:15:58 AM8/26/19
to FPGAwars: explorando el lado libre
Ok Gracias.
La volveré a instalar
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.

Obijuan

unread,
Sep 1, 2019, 2:47:23 PM9/1/19
to FPGAwars: explorando el lado libre
Os cuento los últimos avances con el Z80:  ¡Ya funciona el bootloader Hardware!

La velocidad de desarrollo del software es altísima ahora :-)

Lo he subido todo al repositorio:


El circuito principal lo he modificado. Ahora tiene sólo una meoria de 16KB, mapeada en la dirección (0x0000) y termina en la 0x4000, con el bootloader hardware. También tiene el puerto de salida con los LEDs. He hecho un nuevo bloque del Z80 que sólo saca los pines mínimos

Aquí os paso un vídeo de las primeras pruebas:



Al hacer reset arranca un programa mínimo, que simplemente saca el valor 0xAA por los LEDs. Luego se cargan dos programas mediante el bootloader hardware, sin tener que apretar ningún botón

Saludos, Obijuan


gerardo Loeches

unread,
Sep 3, 2019, 1:59:11 AM9/3/19
to FPGAwars: explorando el lado libre
Es un excelente trabajo Juan, además un muy buen complemento a tu proyecto SAP 1 FPGA donde describías con todo detalle la arquitectura de ese procesador tan simple.

¿Crees que sería posible en este proyecto tener más detalles de.la arquitectura l del z80 que se ha utilizado en este desarrollo¿, Por ejemplo cómo funciona la unidad de control, los registros ..etc

De nuevo agradecerte tu enorme aportación al mundo libre de las FPGAs

Obijuan

unread,
Sep 3, 2019, 2:06:07 AM9/3/19
to FPGAwars: explorando el lado libre
¡Gracias!

En este primera fase estamos poniendo en marcha el Z80 usando la descripción verilog del proyecto TV80, probando programas, el bootloader, solucionando errores, explorando, etc... La idea es que lo podáis incluir fácilmente en vuestros proyectos

La segunda fase será comprender las tripas del z80, para lo que habrá que hacer bloques icestudio para sus diferentes partes, que ahora están en ficheros verilog

Si quieres empezar a aprender el funcionamiento de este tipo de micros, puedes empezar por el SAP-1 (Simple As Possible). Lo migré a Icestudio para que se pueda entender y estudiar:


Me gustaría hacer algo parecido con el Z80

Saludos, Obijuan

Obijuan

unread,
Sep 3, 2019, 2:32:44 AM9/3/19
to FPGAwars: explorando el lado libre
ups, perdona, no había visto la frase que mencionas al SAP-1 :-)

Con el Z80 haremos algo parecido

Gracias :-)

Saludos, Obijuan

gerardo Loeches

unread,
Sep 3, 2019, 2:07:15 PM9/3/19
to FPGAwars: explorando el lado libre
Gracias Juan, me mantendré a la espera de nuevas noticias

Obijuan

unread,
Sep 5, 2019, 3:11:04 AM9/5/19
to FPGAwars: explorando el lado libre
Hola,

He sacado la release V1.3.0


El código verilog está metido en bloques verilog de icestudio. De esta forma ya no se tiene la dependencia externa hacia los ficheros verilog y todo está auto-contenido. Así es más fácil usarlo y compartirlo



Más adelante lo desglosaré y re-implementaré en bloques icestudio, para explicar su funcionamiento interno, y que se pueda modificar fácilmente sin saber verilog (pero esto de momento tardará, tengo otras cosas más prioritarias)

En esta nueva versión también he añadido otro ejemplo en el que hay mapeada una UART en los puertos 0x10 y 0x11. Esto nos permite que nuestros programas del z80 puedan "imprimir", y también recibir información del terminal serie:



He mapeado otro puerto, el 0x00, de entrada. El pulsador SW2 está en el bit 0. Con esto ya podemos hacer programas que lean este pulsador

He añadido ejemplos básicos de la UART y el pulsador en el directorio roms

He detectado que a veces no se hace correctmente el auto-reset al descargar los programas desde el PC. Voy a buscar el bug y mejorar la parte del bootloader, pero de momento podéis frikear con esta release, que va bastante bien

Saludos, Obijuan

charli va

unread,
Sep 5, 2019, 3:14:59 AM9/5/19
to fpga-wars-explora...@googlegroups.com
VAMOSSS!!! esto ya va cogienda pinta de sistema!! :)

Muchísimas gracias!!!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/49936743-ae18-4a27-88d1-83468dc3b30c%40googlegroups.com.

Obijuan

unread,
Sep 5, 2019, 3:23:12 AM9/5/19
to FPGAwars: explorando el lado libre
Esta es la pinta que tiene el sistema con la UART y el puerto de entrada. No está documentado de momento:

En la próxima release lo voy a integrar todo en un único bloque, y hacer una especie de Z80-microcontrolador, que incluya el core, la memoria, la uart y algunos puertos I/O. Todo en un bloque para que sea muy fácil de integrar en nuestros proyectos

Saludos, Obijuan

Vicent Colomar Prats

unread,
Sep 5, 2019, 6:18:19 AM9/5/19
to fpga-wars-explora...@googlegroups.com
¡Que gran proyecto Obijuan!

Tengo una pregunta, ¿el reloj de 12 MHz puede modificarse a frecuencias mas bajas? Lo digo por si sería factible llegar a implementar algún microordenador tipo zx80/81 o incluso spectrum...



Missatge de Obijuan <obijua...@gmail.com> del dia dj., 5 de set. 2019 a les 9:23:
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Juan Gonzalez Gomez

unread,
Sep 5, 2019, 6:26:11 AM9/5/19
to FPGA-WARS: explorando el lado libre

¡Gracias! 😊

Si, en principio si se puede bajar la velocidad. No lo he probado (y ya sabes que el diablo está en los detalles). Pero debería funcionar sin demasiados problemas

Si conseguimos reproducir un zx80/81 la verdad es que sería LA CAÑA!!!!

Saludos, Juan

anunez

unread,
Sep 5, 2019, 4:52:41 PM9/5/19
to fpga-wars-explora...@googlegroups.com
Pedazo de proyecto.. Muchas gracias. He instalado en otro PC con windows 10 el icestudio 0.5-dev y esta version de Z80 1.3.0, pero aunque se carga en la Alhambra II y se programa bien, esafortunadamente solo se crean los devices Alhambra II v1.0A - B06-118 (Interface 0 y 1), pero no se crea ningun puerto COMx, por lo que no se puede cargar las ROM con el python loader.
Creo que otro PC si se crearon los puertos COMx pero no se si fue con otra version de icestudio. Alguien tiene este problema, o sabe la solucion?

Gracias,
Agustin
@agnuca

Virus-free. www.avast.com

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Virus-free. www.avast.com

Democrito

unread,
Sep 5, 2019, 5:39:06 PM9/5/19
to FPGAwars: explorando el lado libre
Hola Agustín,

Ese problema era muy habitual al comienzo, no sé por qué hoy en día sigue sucediendo. Y en aquella época la solución era la siguiente (a ver si hay suerte) :

Busca "Administrador de Dispositivos" y una vez dentro sigue los números de la imagen.

admin_dispositivos_puertos_com.PNG


En "Controladoras de bus serie universal" lo despliegas y haces clic derecho con el ratón sobre "USB Serial Converter B" le das a propiedades, lo demás es seguir la numeración de la imagen hasta llegar a lo importante, que habilites (sin no estuviera habilitado) "Cargar VCP". Si no estuviera habilitado seguramente el problema sería resuelto. De lo contrario no sé de dónde puede venir.

Un saludo.

anunez

unread,
Sep 5, 2019, 10:23:09 PM9/5/19
to fpga-wars-explora...@googlegroups.com
Gracias Juan,
Es muy curioso, en la boca usb del hub donde he programado sin problema la Alhambra II no salia USB Serial Converter B:
image.png
(El Device Manager está en modo de visualización View->Device by Container, que me resulta mas facil para encontrar cosas asociadas al mismo dispositivo).
Pero cuando lo he cambiado de boca usb a otra del mismo Hub (es un Hub 3.0 con alimentación), si ha aparecido y por supuesto el VCP estaba precargado y la COM4 definida:
image.png
Por alguna razón, supongo que cuando cargué la ToolChain y el Driver de icestudio, lo tenia en un conector y hoy lo he conectado en otro con una serialización distinta del arbol de USB Hub.
El problema está resuelto, pero la recomendación (que creo ya habias hecho) es siempre volverlo a conectar al mismo USB. Hay que acordarse, sobre todo para los que cacharreamos muchos con placas distintas constantemente :-)
image.png
Gracias por la ayuda y disculpas si era algo trivial.
PD. Para cargar las Roms ejecuando en Windows el script Python hay que instalar el módulo PySerial, y no Serial con pip3 en Python3, no con python 2.7, como instala el icestudio.
image.png
Saludos,
Agustin
@agnuca
 


Virus-free. www.avast.com

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

anunez

unread,
Sep 6, 2019, 10:55:08 AM9/6/19
to fpga-wars-explora...@googlegroups.com, Agnuca
Bueno, sigo peleandome para que el Z80... y ahora con TinyBasic!!! funcione en windows. El problema ahora es que el COMx funciona para programar (cargar la rom) desde el script python, pero luego desde cualquier terminal serie de windows (putty, mobaXterm, Ardiono Monitor, RealTerm), no funcionan las demos y por supuesto, tampovo el basic. El led de rx de la alambra si parpadea cuando se le envia un caracter, pero no se interacciona con el port del Z80 y por tanto el procesador no se comporta. He visto en el video de demo del Basic, que tienes un terminal abierto mientras programas con el script the python, y en seguida sale el prompt del basic. Eso en windows no es posible porque cualquier terminal serie bloquea el COM, por lo que python da un error al intentar cargar la rom si ya hay un terminal conectado. He intentado programar la rom desde el propio terminal (ej: realterm) enviando un fichero una vez conectado (el .bin), pero claro, esta en ascii, no en binario y no carga.. seguire intentando.

Gracias por TinyBasic.. esto progresa adecuadamente!
Agustin

Virus-free. www.avast.com

Juan Gonzalez Gomez

unread,
Sep 6, 2019, 1:12:10 PM9/6/19
to FPGA-WARS: explorando el lado libre, Agnuca
Hola Agustín!

Todavía no te preocupes mucho, porque el Z80 lo tengo en modo desarrollador. Es decir, que no lo tengo documetando ni he hecho el esfuerzo de facilitar las cosas ni de probalor en otros S.O (lo haré, por supuesto).

Mientras tanto, te doy alguna pista por si quieres indagar. Primero cargas con el bootloader (z80-loader.py). Luego arrancas el terminal serie (el que uses). Al hacerlo lo que ocurre es que ese terminal modifica el DTR por lo que entras en Modo Bootloader (y el firmware deja de ejecutarse). Si Pulsas SW1 sales del modo bootloader, hace un reset y arranca tu firmaware.

Hay muchos detalles a tener en cuenta, pero prueba eso de momento

Saludos, Obijuan

Democrito

unread,
Sep 21, 2019, 8:40:47 PM9/21/19
to FPGAwars: explorando el lado libre
Hola Agustín,

He probado a subir al Z80 (Alhambra II) dos de los muchos programas de test que puso Obijuan en el github y me funcionó perfecto. le metí el programa contador y otro llamado "seq.bin". Al subirlo aparentemente no sucede nada pero al darle al pulsador "SW1" se ejecuta. SW1 hace la función de reset.

Ya tenía hecho un programa en FreeBasic que envía un fichero al puerto serie, así que he estado usándolo para subir los programas a la Alhambra. Por si alguien siente curiosidad dejo el código:

Dim As String  arg = Command()
Dim As Integer cont
Dim As Byte    cad

Open Com "COM4:115200, N, 8, 1, CD0, CS0, DS0, RS" For Binary As #1
Open arg                                           For Binary As #2

If (Lof(2) = 0) Then
Print "No existe el fichero."
Close #2
   Close #1
   Sleep
End
EndIf

cad = 0
While Not Eof(2)
Get #2,, cad
Put #1,, cad
Print Hex(cad); " ";
Wend

Close #2
Close #1

Print 
Print "Enviado!"

End

El programa es muy sencillo, abre el fichero que quieres enviar (el nombre del fichero lo pasa como argumento a través de "command") y toma byte a byte y lo envía por el puerto COM que corresponda.

Después le metí el TinyBasic (está en la carpeta con el mismo nombre), y lo mismo, para que se ejecute hay que darle al pulsador "SW1". En esa misma carpeta hay un manual con extensión PDF que explica cómo utilizar "RealTerm" para que funcione bien con TinyBasic. Rápidamente te comento cómo configurarlo rápido.

1.png


En la pestaña "Display" señalas "Ansi" y opcionalmente (no es necesario) puedes poner en "Rows" 24.

2.png


En la pestaña "Port" hay que poner 115200 baud y en "Port" el puerto COM que esté conectada la Alhambra II. Para que se quede con esa configuración hay que hacer clic en "Change". Asegúrate de que en la esquina inferior derecha sale la configuración que le acabas de meter.

3.png


Al pulsar "SW1" de la Alhambra te saldrá el mensaje de presentación y el prompt. No sé por qué cuando cierras este programa y lo vuelves a abrir no se queda con la configuración que le metemos, así que cada vez que lo ejecuto he de hacer esos pasos. He buscado opciones a guardar la configuración pero no la he encontrado y tampoco le he dedicado mucho tiempo.

El problema que yo he tenido es que no he sido capaz de ejecutar ninguna instrucción, es decir, escribo, pero al darle al "enter" me sale el mensaje de "What?", y si lo hago de la forma de meter instrucciones con un número de línea, al darle "enter" se cuelga.

Sea como fuere me he alegrado de poder llegar al menos hasta aquí.

Saludos.

Democrito

unread,
Sep 22, 2019, 1:23:42 PM9/22/19
to FPGAwars: explorando el lado libre
Hola!

Mi primer proyecto chulo (en un sentido pedagógico) con FPGA fue hacer el movimiento de luces estilo KITT de "El coche fantástico" (electrónico puro). Entonces se me ocurrió hacer ahora eso mismo pero con el ensamblador del Z80.

El código es este:

; El programa arranca en la dirección 0 de la ROM
org 0x0000

; Sacamos un 1 por el puerto 0x40 para encender el led0 de la Alhambra-II
INICIO:    ld   A, 0x01
           out (0x40),A

; Timer de aproximadamente 60ms para los 12MHz de la Alhambra
J50:       ld E,0xFF
J51:       ld B,0xFF
J52:       djnz J52
           dec E
           jr nz,J51

; Rotamos el bit encendido a la izquierda.
ROTIZQ:    sla A
           out (0x40),A

           CP 0X80
           jr nz,J50
           
; Timer de aproximadamente 60ms para los 12MHz de la Alhambra
J60:       ld E,0xFF
J61:       ld B,0xFF
J62:       djnz J62
           dec E
           jr nz,J61
; Rotamos el bit encendido a la derecha.          
ROTDER:    srl A
           out (0x40),A
           
           CP 0x01
           jr nz, J60
           
; Volvemos al inicio (bucle infinito)
JP J50

He utilizado como base el programa de encender y apagar un led que creo que puso Carlos, utilizando especialmente el temporizador. Le he metido unas instrucciones más para hacer el movimiento de derecha/izquierda y vice-versa. Me costó unas cuantas horas sacarlo porque apenas recuerdo lo que hacía exactamente las instrucciones. Donde más tiempo perdí fue que al comienzo usaba rotaciones de bits tipo RR y RL, pero así no iba como esperaba. Luego me di cuenta que había otras formas de rotar y finalmente utilicé para este caso (que un sólo led esté encendido) SLA y SRL. Confieso que esta parte lo hice a base de prueba y error, y si resultaba pues perfecto y así fue.

He utilizado un IDE online que encontré aquí: https://www.asm80.com/ y de forma rápida os comento cómo programar desde allí:
  • Clic en "New File"
  • Se abrirá una nueva ventana.
  • Eliges el tipo de microprocesador con el que quieres programar (Z80 en nuestro caso) y le pones un nombre a tu proyecto.
  • Escribes tu código o el que quieras probar.
  • Le das a "Compile" y te saldrá un mensaje en el que te dirá si tu código se ha compilado, o bien te señalará los errores que tenga.
  • Finalmente le das a "Download BIN" y tendrás dicho BIN en tu disco duro.

Yo renombro el fichero porque es muy largo y lleva dos puntos, y esto último según cómo puede dar problemas. Renombro a nombres muy sencillos: a.bin o b.bin... etc.

Luego está el tema de subir el bin a la FPGA (Z80). Para los que usan Windows y tienen problemas (o no conocen Python) dejo el .exe del código que puse en el post anterior.

El ejecutable se llama send.exe. Ahora imaginemos que tenemos un binario para subir a la FPGA llamado a.bin. Ambos ficheros han de estar en una misma carpeta (en mi caso es en el escritorio). Tomas con el ratón a.bin y sin soltarlo lo arrastras hasta ponerlo encima de send.exe y ahí lo sueltas, y te lo subirá.

Como rellena con ceros el resto del espacio de la memoria, no te hará falta hacer reset y se pondrá automáticamente en marcha.

Saludos!

Democrito

unread,
Sep 22, 2019, 4:01:30 PM9/22/19
to FPGAwars: explorando el lado libre
Ahora me he entretenido en hacer el segundo proyecto "chulo", que es un PWM para los leds de la Alhambra, variando el brillo de forma triangular. Está probado y funciona perfectamente. Seguramente se podría mejorar.

Saludos!

; El programa arranca en la dirección 0 de la ROM
org 0x0000

INICIO:    ld   A, 0x00   ; Registro de propósito general (esencialmente contador para el PWM).
           ld   B, A      ; Registro para temporizar incrementos.
           ld   C, A      ; Registro para temporizar incrementos.
           ld   D, A      ; Registro para la intensidad lumínica. 
           out (0x40), A  ; Comienza con la salida de los leds a 0.

PWM:       inc  A         ; El registro A se va a ir incrementando muy rápido (PWM).
IF:        cp   D         ; Comparamos con el valor que tenga D.
           jr nc, ELSE    ; Si no hay carry salta a ELSE.

THEN:      ld E, A        ; Guardamos el valor del registro A (el contador rápido PWM).
           ld A, 0xFF     ; Ahora el registro A vale todos los Leds a 1.
           out (0x40), A  ; Saca dicho valor por el puerto de los Leds de la Alhambra II.
           ld A, E        ; Recuperamos el valor de A, es decir, el contador.
           jp ENDIF       ; Salta a ENDIF

ELSE:      ld E, A        ; Guardamos el valor del registro A.
           ld A, 0x00     ; Ahora el registro A vale todos los Leds a 0.
           out (0x40), A  ; Saca dicho valor por el puerto de los Leds de la Alhambra II.
           ld A, E        ; Recuperamos el valor de A, es decir, el contador.
ENDIF:

TEMP:      inc B          ; Esta parte hace de temporización para ir incrementado poco
           jr nz, PWM     ; a poco el registro D, que es el que se encarga de la intensidad
           inc C          ; lumínica de un momento dado.
           jr nz, PWM     ; Hacemos contar a los registros B y C y cuando se cumple un número
           inc D          ; de ciclos dado, es cuando se incrementa D.
           ld E, A        ; En esta parte se evita que el registro C sea demasiado bajo, porque
           ld A, 0xFC     ; si tiene un valor demasiado bajo tarda mucho tiempo en verse la
           ld C, A        ; variación del brillo.
           ld A, E
           
; Volvemos al PWM (bucle infinito)
JP PWM


Democrito

unread,
Sep 22, 2019, 4:55:53 PM9/22/19
to FPGAwars: explorando el lado libre

Juan Gonzalez Gomez

unread,
Sep 23, 2019, 2:37:21 AM9/23/19
to FPGA-WARS: explorando el lado libre
Woala!!!! Muchísimas gracias Demócrito! Ya tienes el Z80 dominado! :-)

Me ha encantado el ensamblador web que has enviado. Eso facilita mucho las cosas a la gente

Todavía tengo pendiente modificar las herramientas para hacerlo todo más sencillo. En cuanto pueda seguiré con ello.

Los comandos del tinybasic me funconan bien. Sí puedo escribirlos en la consola y se ejecutan bien. Pero la parte de introducir los números de linea y almacenar el programa no funciona: se queda colgado. Tengo que depurarlo y mirar qué pasa. El mapa de memoria lo modifiqué para adaptarlo al que tenemos en la Alhambra II, y he cometido algún error que tengo que encontrar

Muchas gracias por compartir todo lo que has descubierto :-)

Saludos, Obijuan

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

charli va

unread,
Sep 23, 2019, 3:00:23 AM9/23/19
to fpga-wars-explora...@googlegroups.com
Grande Demócrito! tenemos que ver como organizar todo esto para que tenga visibiilidad! 

Juan como ves añadir estos ejemplos al repo y añadir a Demócrito como contribuidor?, creo que deberíamos ir concentrando todo loq ue se haga par que no se pierda.

Saludos!

Democrito

unread,
Sep 23, 2019, 3:37:24 AM9/23/19
to FPGAwars: explorando el lado libre
Muchísimas gracias a vosotros! Hace sólo 3 años no podía ni imaginar que se pudieran hacer todo este tipo de cosas. Era como vivir en una pecera y de un salto hacia lo desconocido lanzarse a un basto océano de posibilidades... Es una auténtica pasada lo que puede dar de sí las FPGAs...

Intentaré subir los proyectos a GitHub.

Un abrazo!

Democrito

unread,
Sep 23, 2019, 4:32:18 PM9/23/19
to FPGAwars: explorando el lado libre
En un anterior post puse un enlace (en azul) para descargar un archivo para Windows, para que subiera el archivo .bin a la FPGA, llamado "Send.exe". Lo puse tal cual yo lo estaba usando, con configuración para enviar al puerto COM4. Y sólo iría si coincide el número de puerto, cosas muy rara.

He creado otro nuevo que te preguntará el número de puerto, y enviará el .bin ahí. Sólo hay que poner el número, no hay que escribir "COM27" (por ejemplo), sino sólo "27", sin las comillas.

Recuerda que has de coger el .bin con el ratón y arrastrar y soltar sobre "Send.exe". Recomiendo renombrar el fichero para cargar el Z80 (FPGA) a un nombre sencillo. Por ejemplo "a.bin"


Cosas que te pasará en Windows 10 ----> No te dejará ejecutarlo, entonces hay que obligar tocando algunas opciones poco evidentes. El Antivirus Avast lo paraliza un momento y lo escanea, y finalmente te dejará ejecutarlo.
Si haces doble clic sobre Send.exe no hará nada, sólo trabaja cuando le sueltas un archivo encima (esta es la manera más sencilla).

Por otra parte, si alguien prefiere compilar el programa que puse y añadirle el puerto COM a mano, aquí dejo un pequeño tutorial para seguir los pasos. Se trata de descargar Freebasic y el IDE, mide menos de 10 megas, y es muy sencillo:



Juan Gonzalez Gomez

unread,
Sep 24, 2019, 1:18:59 PM9/24/19
to FPGA-WARS: explorando el lado libre
Woala!!!!! Demócrito!!! Me encanta!!!!  ¡Gracias! 😊




--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Democrito

unread,
Sep 25, 2019, 3:46:31 AM9/25/19
to FPGAwars: explorando el lado libre
Una pregunta,

La pila (SP), según he leído en los primeros post, está en la posición 9FFF.
Necesito dar una posición de la memoria al registro IX, pero no sé qué poner. Sería para almacenar valores temporalmente en la ram en vez de usar los registros internos del z80.

Saludos!

Demócrito

unread,
Sep 25, 2019, 4:41:38 AM9/25/19
to FPGAwars: explorando el lado libre
Me autorespondo:

Por debajo de la pila, teniendo presente que la pila no ha de "chafa" esas posiciones.

Saludos!

charli va

unread,
Sep 25, 2019, 5:08:59 AM9/25/19
to fpga-wars-explora...@googlegroups.com
Hola Demócrito!!, efectivamente la pila debería ir de ahí hacia arriba (en la pila las cosas entran y se "apilan") por lo que por debajo de esa dirección tus datos deberían estar "seguros" todo entre comillas porque por un error tanto tú te podrías comer la pila , como la pila se podría pasar y bajar pero eso siepmre será debido a bugs y no a un funcionamiento correcto.

Un abrazo!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.

Demócrito

unread,
Sep 25, 2019, 5:52:06 AM9/25/19
to FPGAwars: explorando el lado libre
Muchas gracias Carlos por aclararlo aún más!

Otro abrazo fuerte!

charli va

unread,
Sep 25, 2019, 5:57:13 AM9/25/19
to fpga-wars-explora...@googlegroups.com
Tengo pendiente hacer un tutorial de programación de z80, ¡no me da la vida!! y muchas gracias a ti por estar echándole tiempo  y compartiendo tus avances ¡mil gracias!!

El mié., 25 sept. 2019 a las 11:52, Demócrito (<coesis...@gmail.com>) escribió:
Muchas gracias Carlos por aclararlo aún más!

Otro abrazo fuerte!

--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages