EL SD1


Por Robert Perelegre

 

 

 

El fenómeno de la piratería no es nada nuevo y prueba de ellos son los diferentes sistemas de protección que ya incluían muchos de los títulos de Spectrum: sistemas de carga turbo, anti-merges, cabeceras falsas, checksums... Todos ellos intentando hacer más difícil la vida a los piratas.
Por encima de todos estos sistemas de protección destaco el SD1 de Dinamic. Una protección hardware incluida en las primeras versiones del Camelot Warriors.

En este mini-artículo vamos a intentar mostrar el aspecto físico del SD1, explicar su funcionamiento (tanto a nivel Hardware como Software) y analizar el porqué de su no-continuidad.

 

 

 

Hardware

Dentro de un trozo de conector del bus de expansión de Spectrum se esconde una pequeña resistencia de unos 1000 ohmios. Su misión consiste en conmutar a masa D5, uniendo el Pin10 de la cara de los componentes con el Pin6 de la cara de las pistas. Como consecuencia de ello todos los puertos del Spectrum que no ponga expresamente el bit D5 a 1 pasaran a tener este bit a 0 (por defecto, en el Spectrum, todos los bits de los puertos no usados están a 1). Por ejemplo, si hacemos PRINT IN 255 (por citar un puerto que no se usa) sin el SD1 conectado obtendremos 255 (todos los bits a 1). Si hacemos lo mismo con el SD1 conectado obtendremos 223 (el bit 5 a 0).
Como hemos podido observar no era ningún milagro de la ingeniería; pero funcionaba y además era compatible con la Interface 1.

Para aclarar el tema nada mejor que unas fotos. Originariamente el SD1 tenía los conectores cubiertos completamente por una pasta verde. Mi afán de conocimientos de juventud hizo que pusiese al descubierto la resistencia, tal como se puede apreciar en las fotos.

Texto, Carta

El contenido generado por IA puede ser incorrecto.
El Manual del SD1, cara A

 

Diagrama

El contenido generado por IA puede ser incorrecto.
El Manual del SD1, cara B

 

 

 

Imagen que contiene cerca, exterior, nieve, firmar

El contenido generado por IA puede ser incorrecto.
El Paquete completo del Camelot Warriors

 

Imagen que contiene medidor

El contenido generado por IA puede ser incorrecto.
El SD1 (Vista Superior, aún se aprecía los restos de la pasta verde)

 

 

 


El SD1 (Por el lado del conector)

 

Imagen que contiene tabla, alimentos, cuarto

El contenido generado por IA puede ser incorrecto.
El SD1 (Por el lado de la resistencia)

 

 

 

 

Software

Así de entrada se me ocurren unas cuantas maneras de detectar el SD1. Por ejemplo, al terminar la carga de juego, leer el puerto 255 y si el bit 5 está a 1 hacer un reset. O leer dicho puerto durante la carga del juego y si está a 1 responder con el famoso "R Tape loading error"....

Pero, ¿cómo lo hizo realmente Dinamic?. Ellos no utilizaron ningún puerto extraño, sino que lo hicieron a través del más conocido y utilizado. El puerto 254 ya que sorprendentemente el SD1 es capaz de alterar el bit 5 poniéndolo a 0 (por defecto siempre está a 1). De esta forma detectaron la presencia del SD1 al mismo tiempo que leían el teclado.
Pusieron la detección en tres lugares diferentes del juego :

  1. Al iniciar el juego se ejecuta una presentación donde unos pájaros presentan el nombre del juego y el copyright. Pulsando una tecla podemos iniciar la partida. Ahora bien si no tenemos el SD1 conectado la partida se inicia automáticamente, como si tuviésemos pulsada continuamente una tecla. Este es el código que lo hace posible :

C86C

IN A,(C)

C86E

LD L,A

C86F

LD H,00

C871

EX DE,HL

C872

LD HL,009F

{Normalmente tendría que ser 00BF}

C875

XOR A

C876

SBC HL,DE

C878

JP Z,C87C

C87B

RET

 

Durante el juego si no tenemos el SD1 conectado el teclado no responderá a ningún comando, por lo tanto el primer pájaro acabará con nosotros nada más empezar el juego. Este es el código que lo hace posible :

 

7FC6

LD A,00

 

7FC8

LD 5BD6),A

 

7FCB

LD C,FE

 

7FCD

LD A,00

 

7FCF

OUT (C),A

{Nos aseguramos la compatibilidad de la lectura entre la ISSUE TWO y resto}

7FD1

LD C,DFFE

 

7FD4

IN A,(C)

 

7FD6

CP 9E

{Lectura de la tecla P, normalmente tendría que ser BE}

7FD8

JR NZ,7FDF

 

7FDA

LD A,01

 

7FDC

LD 5BD6),A

 

7FDF

CP 9D

{Lectura de la tecla O, normalmente tendría que ser BD}

7FE1

JR NZ,7FE8

 

7FE3

LD A,02

 

7FE5

LD 5BD6),A

 

7FE8

LD BC,FBFE

 

7FEB

IN A,(C)

 

7FED

CP 9E

{Lectura de la tecla Q, normalmente tendría que ser BE}

7FEF

JR NZ,7FF6

 

7FF1

LD A,03

 

7FF3

LD 5BD6),A

 

7FF6

LD BC,7FFE

 

7FF9

IN A,(C)

 

7FFB

CP 9D

{Lectura de la tecla Symbol Shift, , normalmente tendría que ser BD}

7FFD

JR NZ,8004

 

7FFF

LD A,04

 

8001

LD 5BD6),A

 

8004

RET

 

 

 


Esta rutina coloca en la dirección 5BD6 un :
0 -> Si no hemos pulsado ninguna tecla o si no tenemos conectado el SD1.
1 -> Si pulsamos la P
2 -> Si pulsamos la O
3 -> Si pulsamos la Q
4 -> Si pulsamos el Symbol Shift

 

 

 

  1. Una vez perdamos una vida, sale la pantalla indicando el número de vidas y espera la pulsación de una tecla para continuar con la partida. Si no tenemos el SD1 no detectará la pulsación de una tecla y quedará eternamente en la pantalla donde se muestra el número de vidas restantes. Este es el código que lo hace posible :

B0A8

LD HL,00FE

 

B0AB

PUSH HL

 

B0AC

POP BC

 

B0AD

IN A,(C)

 

B0AF

LD L,A

 

B0B0

LD H,00

 

B0B2

EX DE,HL

 

B0B3

LD HL,009F

{Normalmente tendría que ser 00BF}

B0B6

XOR A

 

B0B7

SBC HL,DE

 

B0B9

JP NZ,B0BD

 

B0BC

RET

 

B0BD

JP B0A5

 


En la dirección B0A5, que es donde salta si no hay ninguna tecla pulsada, hay un CALL 7FC6.

Resumiendo, si el SD1 no está conectado, el juego empieza automáticamente nada más terminar la carga. El primer pájaro nos mata, ya que no nos podemos mover ni usar la espada y el Spectrum entra en un bucle sin fin mostrando el cartelito de las vidas restantes. Interesante, ¿no?.

Interfaz de usuario gráfica, Sitio web

El contenido generado por IA puede ser incorrecto.
La caratula del Juego

 

Una captura de pantalla de un celular

El contenido generado por IA puede ser incorrecto.
Las instrucciones del Juego, cara A

 

Texto

El contenido generado por IA puede ser incorrecto.
Las instrucciones del Juego, cara B

 

Si quieres el TZX original del juego (con la protección activa), haz clic aquí.

 

 

 

 

Compatibilidad

Modelo

Compatibilidad

Spectrum 48K y +

Funciona perfectamente, faltaría más.

Inves Spectrum +

El juego funciona perfectamente, ahora bien, el SD1 no es capaz de cambiar el bit 5 del puerto 254 (sí que lo hace en el 255, por ejemplo). Quedando siempre el bit 5 a 1. Por lo tanto el juego se comporta como si el SD1 no estuviese conectado.

Spectrum 128

En modo 128 el juego tiene errores gráficos, en modo 48 funciona perfectamente. Ahora bien el SD1 tiene el mismo problema que con el Inves Spectrum +.

Spectrum +2

En modo 128 el juego tiene errores gráficos, en modo 48 funciona perfectamente. El SD1 funciona perfectamente tanto en modo 128 como 48.

Spectrum +2A/+2B y +3

El SD1 es totalmente incompatible con estos modelos. No deja arrancar el ordenador, quedando la pantalla negra con el borde blanco (como si el botón de reset estuviese pulsado indefinidamente)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

¿Realmente funcionó?

La respuesta es así de contundente : NO.
Y prueba de ello es que no pusieron el SD1 en ningún otro juego, es más al poco sacaron otra versión del Camelot Warriors sin esta protección.

En el número 5 de MicroHobby especial publicaron una entrevista a diferentes personalidades (entre ellas alguien de Dinamic) donde comentaron el fenómeno de la piratería y el aquí comentado SD1. Estos fueron los párrafos más interesantes :

(...) el primero es el máximo dirigente del al empresa SINCLAIR STORE: José Villar:
(...)
-Sr. Villar, Respecto a los productos de software que precisen algún tipo de hardware para funcionar (por ejemplo en Camelot Warriors), ¿nota alguna diferencia en las ventas?
-Lo primero que hay que decir, es que el pueblo español es uno de los más ricos a nivel mundial en lo respectivo al ingenio. En este programa que necesitaba de un conector final para su funcionamiento, hemos visto en el Rastro que era duplicado de una manera totalmente artesanal fantástica con un artilugio de madera. Fue más difícil pero al final el resultado fue exacatamente igual.

Yo creo que la solución hay que buscarla en la creatividad de origen, es decir, si se quiere erradicar la piratería de forma total hay que hacer el juego en EPROM. En este sentido tendríamos que entrar en un análisis de costos.
(...)

Ahora le toca el turno a Dynamic
(*) :
(...)
- A vosotros en particular, ¿en qué manera os perjudica?
(Se refiere al fenómeno de la pirateria)
- Nosotros no tenemos cifras, pero sabemos las cosas que podemos ver, comprobamos hasta qué punto nuestros programas son blanco de los piratas. Cuando sacamos el Camelot Warriors, la primera versión llevaba el sistema éste del protección del "chirimbolito". Cuando éste fue "polimerizado" empezaron a "comercializar" la copia pirata sin el chirimbolito. Llegamos al Rastro y vimos que las mesas de piratas de Spectrum tenían dos programas: el Gunfright de Ultimate, y el Camelot de Dynamic. Y tenían 100 ó 200 cassettes tirados en cada mesa. Yo lo que me gustaría destacar, es que los lectores se imaginen que escriben un libro, y que cuando lo han acabado, lo ven en la estantería del Corte Inglés muy bonito y bien presentado. Si ese fin de semana van al Rastro y ven que su trabajo está siendo vendido por unos piratas a 200 "pelas", y que él no percibe un sólo duro podrán comprender en qué situación estamos.

(*)En la entrevista original se escribió Dynamic en lugar de Dinamic

 

 

Articulo original:

El SD1