Archivos para Septiembre, 2006

Resumen septiembre

Septiembre 30, 2006

Ahora que estamos a un poco de abandonar el mes de septiembre, hago una mínima valoración de los proyectos que he ido trabajando hasta ahora y que, ya adelanto, por motivos laborales, no han avanzado tal como uno podría esperar.

Está parado el desarrollo de dos tutoriales de VGA y UART con la FPGA, tal como os prometí. Espero poder retomarlo pronto en octubre y tenerlo acabado para últimos del mes que viene.

En cuanto al Z80/Ruby ha sido el trabajo del cual estoy más contento y del que he puesto más horas en estás dos últimas semanas. Aunque pienso reescribir el core, las pruebas que he ido haciendo han dado buenos resultados con sólo un 60% de opcodes del Z80 implementados. La idea ahora será reescribir, limpiar y mejorar el código del core para este mes.

Tengo completamente abandonado las señales de video con el PIC16F84 :(

Nada, a ver si estoy un poco más libre, menos cansado, y puedo continuar con más fuerza…

jsMSX

Septiembre 23, 2006

Si os atrevéis a cruzar la gimnasia con la magnesia, os encontraréis el proyecto jsMSX, es decir, un emulador del MSX en javascript! Interesante proyecto y, no menos extraño, del que disponemos -afortunadamente- del código, especialmente el z80.js, donde se resuelven los opcodes del micro. De interés para aquellos que estéis jugando a la creación de retro-emuladores.

Mini Système Z80

Septiembre 19, 2006

Le système proposé ici est un système expérimental tournant autour d’un Z80. Ce système est semi autonome. Pour communiquer avec le système il faut passer par un terminal (un vrai ou une émulation sur une plate forme quelconque, comme l’Hyper Terminal de Windows…).

Link

Southern Cross Kit

Septiembre 18, 2006

The Southern Cross 1 is a Z80 based Single Board Computer System which has been designed to teach beginning students modern code development techniques. After construction, you can move straight into programming to gain immediate confidence. The system is not a copy of early single board computers – this is a 1990’s rethink of what a single board computer system should be. It grows with the student to connect to a PC to aid and demonstrate modern methods of code development. NOTE: all software code including the Monitor is supplied with comments. PCB size: 227mm x 130mm (9.75″ x 5.15″) (BB010).

Link

bb010.jpg

DIY 6502 Computers

Septiembre 18, 2006

Artículo en formato hipertexto de la fabricación de un prototipo de ordenador con micro 6502. El artículo apareció en la revista “The Computer Journal”, ahora desaparecida.

http://www.hytherion.com/beattidp/comput/x65tools/diy6502/diy6502.htm 

Interesados en ejemplos de prototipos de ordenadores con micro 6502, en la línea DIY (Do It Yourself):

http://www.6502.org/homebuilt/ 

Minimig: Amiga in One!

Septiembre 15, 2006

Aquí tenéis el prototipo a partir de la Spartan3 Starter Board. Una gozada :) ! Tendré que espabilar con el Z80inOne! Descripción del autor:

This is my minimig development board. It is built around a Spartan-3 FPGA evaluation board. This board contains the FPGA, 1MByte SRAM, power regulators, PS/2 interface and lots of leds and swithches. To this i’ve added 3 boards of my own to get a complete sytem. On top you can see the processor board. Next to the LED displays is a small silvery board with the clock circuitry and to the left is a board with the MMC flashcard interface, joystick interface, videodac/connector and audiodac/connector.

Programming the…

Septiembre 15, 2006

Rodney Zaks fue un autor prolífico en lo que se refiere a la literatura técnica de informática de finales de los 70 y ancho de los 80, Dentro de la extensa bibliografía, encontramos títulos que pueden resultar de gran ayuda a los “retro-programmers”, especialmente la serie “Programming the…

Personalmente seleccioné dos: “Programming the Z80” y “Programming the 6502“, dos micros responsables de formar parte de muchas de las máquinas y consolas importantes de 8 bits. Todavía se pueden encontrar de segunda mano en lugares como Amazon o Abebooks.

La estructura de los dos libros es muy similar: se introduce al lector en conceptos básicos como la representación numérica, qué significa la programación, pasando por el cuerpo del libro, dedicado al conjunto de instrucciones del micro y, teminando, técnicas de programación.

Si tenéis pensado programar un emulador, no dudéis en buscar un ejemplar. La manera de cómo se describen los procesos de cada instrucción es magnífica y realmente aclaradora. E igualmente imprescindibles si estáis sumergidos en la programación de juegos para Commodore 64 o el ZX Spectrum!

Diseño digital con VHDL | Z80Ruby

Septiembre 10, 2006

Hace un par de días, me llegó el libro “Digital Logic and Microprocessor Design with VHDL”, de Enoch O. Hwang. He tomado la decisión de incluir un par de libros de VHDL prácticos para tener, al menos, un referente más académico del tema y, por lo tanto, estructurado en una secuencia de aprendizaje habitual de menos a más. En este sentido, Hwang muestra de manera ordenada, con ejemplos muy claros en VHDL, el campo del diseño digital, de las puertas lógicas, circuitos secuenciales y combinacionales hasta el diseño e implementación en VHDL de un microprocesador.

Por otro lado, esta semana he trabajado bastante en, por el momento, emulador del micro Z80 en el lenguaje Ruby. Creo haber implementado ya un 40% de los opcodes y, las pruebas que he ido realizando, contratadas con el fantástico y libre debugger del Z80, Z80-Asm, han acabado con éxito. Como dije, la idea era tener un emulador del ZX Spectrum en Ruby, ineficiente en cuanto a rendimiento, pero más didáctico en cuanto implementación del código. No pierdo de vista que, una vez implementado el core del Z80, también pasaría a una tercera fase de trabajo en la realización de un micro kernel en Forth.


 

UART primitivo en VHDL

Septiembre 3, 2006

Después de días de quebraderos de cabeza, consultas a Torlus (gracias, gracias!, visitar varias páginas, he conseguido implementar una UART primitiva que transmite una “A” cada segundo. Mola!. Aquí tenéis el código, ejemplo todavía de absoluto novato. Pero funciona! :D Ya lo mejoraremos próximamente :)

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

—- Uncomment the following library declaration if instantiating
—- any Xilinx primitives in this code.
–library UNISIM;
–use UNISIM.VComponents.all;

entity rs232vhdl is
port(clk50 : in std_logic;
TXD : out std_logic);
end rs232vhdl;

architecture Behavioral of rs232vhdl is
signal clk_serial : std_logic; –reloj para el puerto serial
signal flagDATA, flagSTOP, flagSTART, unlock : std_logic;
signal index: std_logic_vector (2 downto 0) :=”000″;
signal count : std_logic_vector (11 downto 0);
signal serial_data : std_logic_vector(7 downto 0);
signal count9600 : std_logic_vector (13 downto 0) :=”00000000000000″;
begin

CLK: process (clk50)
begin
if clk50′event and clk50=’1′ then
count <= count + “000000000001″;
if count = “101000101001″ then — 2602 ma o meno
if clk_serial = ‘0′ then
clk_serial <= ‘1′;
else
clk_serial <= ‘0′;
end if;
count <= “000000000000″;
end if;
end if;
end process CLK;

TRX: process (clk_serial)
begin
serial_data <= “01000001″;

if clk_serial’event and clk_serial =’1′ then
count9600 <=count9600 + “00000000000001″;
if count9600>= “10010101110111″ then — 9591
if (flagSTART= ‘1′ and unlock=’0′) then
TXD<=’0′;
flagDATA<=’1′;
flagSTOP <= ‘0′;
flagSTART<=’0′;
unlock<=’1′;
end if;
if (flagDATA = ‘1′ and unlock=’1′) then
TXD <= serial_data(conv_integer(index));
if index=”111″ then
index<=”000″;
flagDATA<=’0′;
flagSTOP<=’1′;
unlock<=’0′;
end if;
index<= index+”001″;
end if;

if (flagSTOP=’1′ and unlock=’0′) then
TXD <=’1′;
flagSTOP<=’0′;
flagSTART<=’1′;
unlock<=’0′;
end if;

if count9600 =”10010110000000″ then –9600?
count9600 <=”00000000000000″;
end if;
end if; –end TXD

if (flagSTART = ‘0′ and unlock=’0′) then
TXD <= ‘1′;
flagSTART<=’1′;
end if;

end if; –end clk
end process TRX;
end Behavioral;

Pequeños avances…

Septiembre 1, 2006

En el anterior mensaje colgué un plan de trabajo, entre ambicisio y apasionante, de cómo debería ir aprendiendo a trabajar con VHDL y experimentar con la Spartan3. Bien, he estad trabajando en los módulos 1 y 4 dedicados al manejo elemental del VGA y la implementación primaria (a partir de un código de Torlus) de una UART.

Los resultados, para alguien que ha comenzado de cero, son alentadores. Lo cierto es que hace un mes que el universo FPGA era un terrible misterio y el VHDL un lenguaje anodino y marciano! Todavía he de mejorar y refinar mejor las prácticas que he realizado hasta ahora.

Por otro lado, hace unos días, me puse manos a la obra con un emulador-ensamblador del Z80 generado con un lenguaje no propio de emuladores al ser interpretado: Ruby! Pero como macro ensamblador para mi futuro Forth es posible. Además, Ruby -como Python- son lenguajes de programación muy recomendables para aquellos que busquen vida más allá de Java, C++ o C#. Y qué narices!, Ruby rules!!