Nuevo core: Apple II

Avatar de Usuario
Quest
Mensajes: 900
Registrado: 27 Sep 2015, 00:20

Nuevo core: Apple II

Mensaje por Quest » 08 Nov 2015, 19:08

Recién salido del horno, ya tenemos core para el Apple II :D

Aún le faltan cosillas y el manejo de discos no es el mejor del mundo, pero es funcional y usable. Está basado en el original de Stephen A. Edwards (http://www.cs.columbia.edu/~sedwards/apple2fpga/) y en la adaptación de vlait a las placas Papilio (https://github.com/vlait/papilio-duo/tr ... papilioduo). Como es habitual, remapeo de pines, nuevos relojes, quitados switches, etc, etc.

Ya lo tenéis disponible en el repositorio habitual, en /cores/Apple2_spartan6

El proyecto ISE está por defecto para las placas v3, pero he dejado un UCF para las v2 para el que quiera sintetizarlo por su cuenta en una v2. En la carpeta "build" hay .bit para ambas placas (la de v2 no probada).

Funciones actuales del core:

- Salida VGA solamente por el momento
- Sonido funcional
- Teclado PS/2
- No dispone de soporte de Joystick por el momento
- Carga de imágenes de disco por SD (sistema engorroso, pero funcional, explicado luego)
- Led de actividad de lectura de la SD

Para hacerlo funcionar con discos de Apple II, necesitas:

- Una imagen de disco en formato .nib, si no está en ese formato (suelen estar en .dsk o .do), puedes usar en windows la utilidad dsk2nib.exe disponible en la carpeta "roms" del core para convertirlo. He dejado un par de imágenes preparadas en la carpeta "roms", el DOS 3.3 (apple33.nib) y el juego Spy vs. Spy (SpyVsSpy.nib).
- Una tarjeta SD que no vayas a usar para ninguna otra cosa (importante).
- Una utilidad de volcado RAW de archivos a disco, como DD de linux o HDD Raw Copy Tool de Windows (http://hddguru.com/software/HDD-Raw-Copy-Tool/)

Procedimiento:

- Antes de nada: el procedimiento destruirá todo lo que tengas en la tarjeta SD. Sólo se puede grabar una única imagen de disco por tarjeta SD.
- Usando el programa preferido (DD, HDD Raw Copy tool o el que quieras), volcar el archivo .nib a la tarjeta SD.

Para que funcione en el ZX-UNO, meter la SD ya preparada, y grabar el .bit
Arrancará directamente del disco.

Fotillos en marcha:
Apple_II_ZXUNO.jpg
AppleII_spy1.jpg
AppleII_spy2.jpg
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core: Apple II

Mensaje por mcleod_ideafix » 08 Nov 2015, 20:01

¡Dios! ¡¡Esto ya se nos está yendo de las manos!! :O Tíos, ¡que he perdido la cuenta de los cores que llevamos hechos/portados!
Aunque aún faltan algunos sistemas míticos: Dragon, Commodore, Amstrad y MSX. Ya caerán... ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
Radastan
Mensajes: 389
Registrado: 05 Oct 2015, 14:39

Re: Nuevo core: Apple II

Mensaje por Radastan » 08 Nov 2015, 20:29

ZX Uno con Amstrad CPC 6128, C64, MSX, ZX Spectrum, y SAM Coupé, todos intercambiables a golpe de teclado... y se acaba el Mundo para mi. Tremendo.

Avatar de Usuario
Hark0
Mensajes: 683
Registrado: 27 Sep 2015, 00:31
Ubicación: Cornellà de Llobregat - BCN
Contactar:

Re: Nuevo core: Apple II

Mensaje por Hark0 » 10 Nov 2015, 06:46

Ay.... un CPC 6128... mi otra máquina de juventud.... ;)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA.

Avatar de Usuario
gacaffe
Mensajes: 17
Registrado: 20 Nov 2015, 19:53
Contactar:

Re: Nuevo core: Apple II

Mensaje por gacaffe » 20 Nov 2015, 20:18

Hola,

Acabo de registrarme en el foro. En primer lugar deciros que esto del ZX-Uno me tiene como loco. Un gran trabajo. Ya van dos eventos retros a los que asisto y no os pillo, en el próximo habrá más suerte.

Quería contaros una historia curiosa respecto a la implementación de Steve Edwards. Hace justo un año descargué la versión 1.1. del core, que era la única que había disponible en la página de Edwards, con la idea de probarla en la placa DE2-115. Hice el cambio de pines y el disco emulado mediante SD-card no tiraba. Escribió al señor este, que sorprendentemente me escribió bastante rápido y me comentó que había otra versión con el disco mejorado (la 1.2., en la que contribuyó Michel Stempin) y me la envío. Con la versión 1.2. todo fue rodado. A raíz de esto Steve colgó la versión 1.2. en su web. No sé si es esta la que descargasteis o la de github (que no conocía).

Bueno, solo quería contaros mi historia al respecto y resaltar lo majo que es este hombre.

También tengo una pregunta respecto al joystick (gamepad). El joystick del Apple II es analógico, ¿cómo se podría gestionar esto con el ZX-Uno? ¿Habéis conectado algún joystick analógico con otro core?

Estoy dándole vueltas a hacer un adaptador analógico/digital basado en PWM para utilizar con joysticks analógicos (gamepad del apple II, joystick del Dragon, etc.). Bueno, si tenéis experiencia o ideas os agradecería algún consejo.
A bit of this, a byte of that

http://biolab.uspceu.com/~gabriel/retro.htm
@gacaffe

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core: Apple II

Mensaje por mcleod_ideafix » 20 Nov 2015, 22:55

gacaffe escribió:También tengo una pregunta respecto al joystick (gamepad). El joystick del Apple II es analógico, ¿cómo se podría gestionar esto con el ZX-Uno? ¿Habéis conectado algún joystick analógico con otro core?
Se me ocurren dos formas: o usar un ratón, o pasar directamente del modo analógico y usar un joystick Atari de toda la vida (los únicos que se pueden usar en el ZX-Uno). Esto último es por ejemplo lo que se hace con los adaptadores que permiten usar un joystick Atari a un Dragon, por ejemplo.
gacaffe escribió:Estoy dándole vueltas a hacer un adaptador analógico/digital basado en PWM para utilizar con joysticks analógicos (gamepad del apple II, joystick del Dragon, etc.). Bueno, si tenéis experiencia o ideas os agradecería algún consejo.
Para implementar un conversor A/D en una FPGA que lo tenga de serie (creo que los Artix 7 de Xilinx ya lo tienen), lo único que se me ocurre es un truco que he visto por algún sitio, que consiste en usar los amplificadores diferenciales de las señales que son diferenciales: en una de las entradas pondrías la señal analógica a convertir, y en el otro pin, una señal que vendría de un DAC hecho dentro de la propia FPGA usando por ejemplo un codificador sigma-delta. El conjunto funcionaría como un conversor A/D por aproximaciones sucesivas. No tengo ni idea de si esto realmente podría funcionar o no.

En el IBM PC, los joysticks analógicos se implementan usando un NE555 que usan como un oscilador de frecuencia variable, en donde la variación viene dada por la posición del potenciómetro interno del joystick. Así, diferentes posiciones del joystick darían diferentes frecuencias, que pueden medirse fácilmente desde la FPGA consiguiendo así un valor proporcional a la posición del joystick.
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Avatar de Usuario
antoniovillena
Mensajes: 2621
Registrado: 27 Sep 2015, 20:41

Re: Nuevo core: Apple II

Mensaje por antoniovillena » 20 Nov 2015, 23:34

mcleod_ideafix escribió: En el IBM PC, los joysticks analógicos se implementan usando un NE555 que usan como un oscilador de frecuencia variable, en donde la variación viene dada por la posición del potenciómetro interno del joystick. Así, diferentes posiciones del joystick darían diferentes frecuencias, que pueden medirse fácilmente desde la FPGA consiguiendo así un valor proporcional a la posición del joystick.
Pues los que yo llegué a programar (los que iban a la tarjeta de sonido) tenían un circuito RC donde la R era el potenciómetro de cada eje. Desde ensamblador tú metías un 1 para cargar el condensador y luego esperabas a que se descargara (el tiempo iba en función de la posición del potenciómetro). En función de ese tiempo calculabas la posición. Antes de jugar había que calibrar los ejes para que la posición intermedia tuviese un valor conocido.

Avatar de Usuario
gacaffe
Mensajes: 17
Registrado: 20 Nov 2015, 19:53
Contactar:

Re: Nuevo core: Apple II

Mensaje por gacaffe » 21 Nov 2015, 06:32

Muchas gracias. Muy interesante.
mcleod_ideafix escribió:
gacaffe escribió:También tengo una pregunta respecto al joystick (gamepad). El joystick del Apple II es analógico, ¿cómo se podría gestionar esto con el ZX-Uno? ¿Habéis conectado algún joystick analógico con otro core?
Se me ocurren dos formas: o usar un ratón, o pasar directamente del modo analógico y usar un joystick Atari de toda la vida (los únicos que se pueden usar en el ZX-Uno). Esto último es por ejemplo lo que se hace con los adaptadores que permiten usar un joystick Atari a un Dragon, por ejemplo.
[/quote]
He encontrado un circuito que adapta un joystick Atari al interfaz analógico del Dragon. Esto me va a venir genial para mi Dragon: http://vrai.net/retro/?p=112
mcleod_ideafix escribió:
gacaffe escribió:Estoy dándole vueltas a hacer un adaptador analógico/digital basado en PWM para utilizar con joysticks analógicos (gamepad del apple II, joystick del Dragon, etc.). Bueno, si tenéis experiencia o ideas os agradecería algún consejo.
Para implementar un conversor A/D en una FPGA que lo tenga de serie (creo que los Artix 7 de Xilinx ya lo tienen), lo único que se me ocurre es un truco que he visto por algún sitio, que consiste en usar los amplificadores diferenciales de las señales que son diferenciales: en una de las entradas pondrías la señal analógica a convertir, y en el otro pin, una señal que vendría de un DAC hecho dentro de la propia FPGA usando por ejemplo un codificador sigma-delta. El conjunto funcionaría como un conversor A/D por aproximaciones sucesivas. No tengo ni idea de si esto realmente podría funcionar o no.

En el IBM PC, los joysticks analógicos se implementan usando un NE555 que usan como un oscilador de frecuencia variable, en donde la variación viene dada por la posición del potenciómetro interno del joystick. Así, diferentes posiciones del joystick darían diferentes frecuencias, que pueden medirse fácilmente desde la FPGA consiguiendo así un valor proporcional a la posición del joystick.
[/quote]

Lo de la Artix, aunque tiene una pinta impresionante, lo descarto porque está ligado a una familia de FPGA concreta. Escarbando en el tema del 555 he encontrado este enlace sobre cómo reconstruir un gamepad de Apple II.

http://quinndunki.com/blondihacks/?p=2225

Por lo visto el Apple II tiene un 555 internamente que varía su frecuencia de oscilación según varía el potenciómetro. Esto está bien, pero emular la parte analógica del 555 para que interactúe con una resistencia externa no creo que sea viable.

Precisamente lo que tenía en mente es lo que comenta Antonio Villena en el siguiente post.

Genial. En cuanto tenga algo funcional os lo cuento.

Creo que no deberíais descartar los mandos analógicos, porque la sensación de juego es muy diferente a una emulación con un mando digital. Pongo como ejemplo el Pong (valga la redundancia :) ).

Bueno, muchas gracias, ya os voy contando.

Gabriel
A bit of this, a byte of that

http://biolab.uspceu.com/~gabriel/retro.htm
@gacaffe

Avatar de Usuario
gacaffe
Mensajes: 17
Registrado: 20 Nov 2015, 19:53
Contactar:

Re: Nuevo core: Apple II

Mensaje por gacaffe » 21 Nov 2015, 06:40

antoniovillena escribió:
mcleod_ideafix escribió: En el IBM PC, los joysticks analógicos se implementan usando un NE555 que usan como un oscilador de frecuencia variable, en donde la variación viene dada por la posición del potenciómetro interno del joystick. Así, diferentes posiciones del joystick darían diferentes frecuencias, que pueden medirse fácilmente desde la FPGA consiguiendo así un valor proporcional a la posición del joystick.
Pues los que yo llegué a programar (los que iban a la tarjeta de sonido) tenían un circuito RC donde la R era el potenciómetro de cada eje. Desde ensamblador tú metías un 1 para cargar el condensador y luego esperabas a que se descargara (el tiempo iba en función de la posición del potenciómetro). En función de ese tiempo calculabas la posición. Antes de jugar había que calibrar los ejes para que la posición intermedia tuviese un valor conocido.
¡Esa era la idea que tenía en mente, pero me parecía demasiado simple! La calibración no parece muy complicada, máximo, mínimo y valor central (habría que ver si es necesario este último). También se podría calibrar analíticamente teniendo en cuenta la impedancia (compleja) de salida de los pines de la FPGA.

En realidad hay varios frentes abiertos, pero voy cacharreando y os cuento. Se me ocurren los siguientes:
- Usar red RC y utilizar dos pines de la FPGA para sensar el estado del potenciómetro (que sería la R de la red RC)
- Diseñar circuitos de adaptación de mando reales (por otra parte difíciles de conseguir) al interfaz digital de la FPGA

Gracias
A bit of this, a byte of that

http://biolab.uspceu.com/~gabriel/retro.htm
@gacaffe

Avatar de Usuario
mcleod_ideafix
Mensajes: 831
Registrado: 27 Sep 2015, 00:14
Ubicación: Jerez de la Frontera
Contactar:

Re: Nuevo core: Apple II

Mensaje por mcleod_ideafix » 21 Nov 2015, 13:43

gacaffe escribió:He encontrado un circuito que adapta un joystick Atari al interfaz analógico del Dragon. Esto me va a venir genial para mi Dragon: http://vrai.net/retro/?p=112
Tiene toda la pinta de ser el mismo que diseñé hace ya un tiempo ;) Había uno diseñado (circuito de arriba), pero no podría funcionar con un joystick digital sin modificarlo, así que propuse otra forma de usar el 4066 (circuito de abajo)
http://www.cocopedia.com/wiki/index.php ... ck_Adapter
gacaffe escribió:Creo que no deberíais descartar los mandos analógicos, porque la sensación de juego es muy diferente a una emulación con un mando digital. Pongo como ejemplo el Pong (valga la redundancia :) ).
Miraremos a ver si es posible usando una solución como la de Antonio, pero implementando la medición en hardware. Si no se puede (o no cabe), siempre queda la opción de usar un driving controller como los del Indy 500, que esos sí funcionan perfectamente en el ZX-Uno :)
http://www.zxuno.com
ZX-Uno · Clon de ordenador ZX Spectrum basado en FPGA

Responder