DivUSB, un interfaz USB para el Spectrum

Cursos, reparaciones, fichas, tutoriales, etc.

Moderador: Fundadores

Responder
Avatar de Usuario
Kyp
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2993
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 102 times
Been thanked: 383 times
Contactar:

DivUSB, un interfaz USB para el Spectrum

Mensaje por Kyp » 27 Ene 2016, 19:18

Bueno. Al final me he picado y voy a intentar construir un interface USB basado en el chip CH376. No se hasta donde llegaré ni cuanto tardaré.

De momento, mientras me llega una placa de desarrollo voy a ir preparando el software.

Mi intención es hacer algo similar al DivIDE con esxDOS, es decir, extender los comandos de la ROM interceptando comandos que empiezan con punto. Para no reinventar la rueda, me voy a basar en el hardware del DivIDE y para poder probarlo, voy a usar el emulador ZX-Spin que emula dicho hardware.

Primer paso: Preparando la ROM alternativa

Para empezar, voy a preparar una ROM que permita arrancar el Spectrum con el DivUSB conectado, de forma que cuando se activa el mapeado automático del HW se restaura la ROM original.

El procedimiento es el siguiente. El HW detecta cuando se ejecuta una instrucción en seis direcciones de la ROM: 0000h (reset), 0008h (error), 0038h (int), 0066h (nmi), 04c6h (save) y 0562h (load). Esa instrucción se ejecuta normalmente pero la siguiente, en vez de leerse en la ROM original, se lee en la ROM alternativa. Para volver a la ROM original hay que ejecutar alguna instrucción en las direcciones $1ff8 a $1fff.

Este es el código de la ROM alternativa:

Código: Seleccionar todo

	org	$0000		; $00 : reset
	;
	di				; la misma instrucción que en la ROM original, la siguiente instrucción es la que se ejecuta realmente
	ld	hl,$0001		; se continuará la ejecución a partir de la dirección $0001
	jp	$1ff9			; restauramos la ROM original

	org	$0008		; $08 : error
	;
	ld	hl,(0x5c5d)	; la misma instrucción que en la ROM original, la siguiente instrucción es la que se ejecuta realmente
	push	hl			; guardamos HL en el stack
	ld	hl,$000b		; se continuará la ejecución a partir de la dirección $000b
	ex	(sp),hl		; intercambiamos el contenido del stack por HL (restauramos HL a su valor original y metemos en el stack la dirección de salto)
	jp	$1ff8			; restauramos la ROM original

	org	$0038		; $38 : int
	;
	push	af			; la misma instrucción que en la ROM original, la siguiente instrucción es la que se ejecuta realmente
	push	hl			; igual que $08 pero saltamos a $0039
	ld	hl,$0039
	ex	(sp),hl
	jp	$1ff8

	org	$0066		; $66 : nmi
	;
	push	af			; la misma instrucción que en la ROM original, la siguiente instrucción es la que se ejecuta realmente
	push	hl			; igual que $08 pero saltamos a $0071
	ld	hl,$0071
	ex	(sp),hl
	jp	$1ff8

	org	$1ff8			; retorno a la ROM original
	;
	ret				; $1ff8 : salimos volviendo a la dirección guardada en el stack
	jp	(hl)			; $1ff9 : salimos saltando a la dirección indicada por HL
	nop
	nop
	nop
	nop
	nop
	nop
Se usan dos métodos para continuar la ejecución en la ROM original:
- El método más sencillo es salir saltando a $1ff9. Previamente habremos guardado en HL la dirección por la que continuará la ejecución.
- Si necesitamos preservar el valor de HL salimos por $1ff8. Previamente tenemos que haber guardado en el stack la dirección por la que continuará el programa.

Ensamblamos con: PASMO --bin usb.s usb.bin

Y para probar configuramos en zx-Spin:
- En Hardware/Peripherals marcamos 'DivIDE'.
- En Hardware/ROM Images seleccionamos usb.bin como DivIDE firmware.

Arrancamos y vemos que no hace nada de especial. Para comprobar que funciona simulamos una NMI (F5) y veremos que no pasa nada :|
Con la ROM original se resetearía el Spectrum y con la ROM del FATware o del esxDOS saldría la pantalla de detección de discos al arrancar y, si tenemos algún disco, la de selección de archivos al activar la NMI.

En el próximo capítulo intentaré que salga algo en pantalla para que no se a tan soso.

Continuara...

Avatar de Usuario
España_Comunidad_Valenciana wilco2009
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 7890
Registrado: 01 Abr 2013, 23:47
Ubicación: Valencia
Has thanked: 101 times
Been thanked: 156 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por wilco2009 » 27 Ene 2016, 19:25

Esto promete! :)
"Aprender a volar es todo un arte. Aunque sólo hay que cogerle el truco. Consiste en tirarse al suelo y fallar".

Douglas Adams. Guía del autoestopista galáctico.

Avatar de Usuario
España Ben-kenobi
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 3419
Registrado: 12 Nov 2013, 10:00
Has thanked: 2 times
Been thanked: 61 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por Ben-kenobi » 27 Ene 2016, 20:02

Muy interesanre! Lo seguire de cerca y si necesitas testeadores aqui estoy .
Quieres vinilos para makear tu spectrum? Mira Aqui

Avatar de Usuario
GroovyDrifter
Seguidor infernal
Seguidor infernal
Mensajes: 39
Registrado: 02 Oct 2014, 17:29
Ubicación: Mañolandia
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por GroovyDrifter » 27 Ene 2016, 20:14

Molaaaaaa

¿Podrias subir los datasheet del CH376? uno creo que lo tengo pero el mas interesante solo lo encuentro en chino...
ImagenDave... this conversation can serve no purpose anymore... Goodbye.

Avatar de Usuario
España_Comunidad_Valenciana flopping
Fundador
Fundador
Mensajes: 9645
Registrado: 29 Mar 2013, 15:26
Ubicación: Valencia
Has thanked: 2 times
Been thanked: 297 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por flopping » 27 Ene 2016, 20:33

Mola mucho, por cierto ademas del exdos, puedes usar el residos, que ya tiene soporte para USB, jejejejeje...
No me hago responsable de mis post pues estan escritos bajo la influencia del alcohol y drogas psicotropicas, por la esquizofrenia paranoide que padezco.
(C) 1982-2021, 39 años de ZX Spectrum.
http://www.va-de-retro.com/ un foro "diferente".

Avatar de Usuario
Scooter
Demonio tercer orden
Demonio tercer orden
Mensajes: 815
Registrado: 27 Feb 2014, 11:33
Ubicación: Alicates
Has thanked: 3 times
Been thanked: 33 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por Scooter » 27 Ene 2016, 22:48

Luego subo el datasheet.

Enviado desde mi fnac 5.7 mediante Tapatalk
Solo se que no se nada (algunos no saben eso)

Avatar de Usuario
España_Comunidad_Valenciana Mikes
Moderador
Moderador
Mensajes: 2752
Registrado: 08 Nov 2013, 14:15
Ubicación: Benaguasil (València)
Been thanked: 137 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por Mikes » 27 Ene 2016, 23:46

Ánimo
"Mikes solo hay uno"
Mi 'Paraeta'

Avatar de Usuario
Querubin
Demonio tercer orden
Demonio tercer orden
Mensajes: 635
Registrado: 15 Ene 2016, 00:01
Ubicación: Totana
Been thanked: 5 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por Querubin » 28 Ene 2016, 10:19

Estupenda iniciativa.

A ver si alguien se animara a lo mismo para Amstrad CPC.
poco a poco

Avatar de Usuario
España_Castilla_y_León primy
Demonio segundo orden
Demonio segundo orden
Mensajes: 1135
Registrado: 03 Nov 2014, 11:41
Has thanked: 372 times
Been thanked: 78 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por primy » 28 Ene 2016, 13:50

Kyp ya sabes que lo que necesites, tanto para hacer pruebas como para lo que den mis conocimientos.
Visita nuestra web y descarga nuestra revista gratis

http://www.yoteniaunjuego.com/

Avatar de Usuario
Kyp
Hermano de Lucifer
Hermano de Lucifer
Mensajes: 2993
Registrado: 30 Sep 2013, 14:54
Ubicación: Madrid
Has thanked: 102 times
Been thanked: 383 times
Contactar:

Re: DivUSB, un interfaz USB para el Spectrum

Mensaje por Kyp » 29 Ene 2016, 17:43

Parte dos: un poco de infraestructura

Lo bueno y lo malo de sustituir la ROM original por una alternativa es que tenemos un ordenador completamente vacío, cualquier cosa que quera hacer tengo que hacerla por mi cuenta, por ejemplo, borrar la pantalla, escribir texto, ni siquiera hay un tipo de letra con el que escribir. Todo hay que hacerlo de cero.

Pues nada, me he puesto manos a la obra y ya tengo una rutina para borrar la pantalla y otra para escribir textos.

No creo que merezca la pena ir poniendo trozos de código difícil de seguir sin un contexto y que abultan un montón así que si a alguien le interesa que me pregunte.

De momento, un pantallazo:
Imagen

Adjunto la ROM por si alguien quiere probarla en un emulador o incluso grabarla en la flash del DivIDE y probarla en hardware real.
No es que haga gran cosa, pero mola ver que funciona :D :D :D
Adjuntos
DivUSB.zip
DivUSB.zip (830 Bytes) Visto 480 veces

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados