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