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.


El Manual del SD1, cara A
 

El Manual del SD1, cara B
     

El Paquete completo del Camelot Warriors
 

El SD1 (Vista Superior, aún se aprecía los restos de la pasta verde)
     

El SD1 (Por el lado del conector)
 

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  

  2. 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 BC,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

  3. 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?.


La caratula del Juego
 

Las instrucciones del Juego, cara A
 

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