Curso de Desprotección de Programas – MSX – Capítulo 1

CURSO DE DESPROTECCIÓN DE PROGRAMAS

CAPITULO 1

1.NOCIONES GENERALES.

Todo lo expuesto en este breve e inexacto texto estará referido al MSX-1 (salvo que se diga lo contrario) y al casete. No obstante, podrá aplicarse al MSX-2 si antes los usuarios de estos ordenadores introducen en ellos los famosos “pokes mágicos” que permiten cargar programas de MSX-1 en MSX-2 sin problemas. El POKE “UNIVERSAL” o estándar que nos vale para cualquier MSX-2 sería el siguiente:

POKE -1, (15 – PEEK (-1) / 16) * 17

La utilización de la unidad de disco para cargar y grabar programas desprotegidos, en MSX-1, plantea el problema adicional de que, como sabemos, la unidad de discos resta unos 4Kbs, al estar conectada, a la memoria que se utiliza para el Basic (y por tanto a la memoria que utiliza el Basic MSX para cargar programas), por ello al utilizar la unidad de discos deberá procurarse que el programa a cargar no ocupe direcciones de memoria que utiliza dicha unidad para su control y funcionamiento. En los MSX-2, este problema puede ser fácilmente subsanado si se conocen y se saben utilizar los subslots (o slots expandidos) no presentes normalmente en el MSX-1.

Antes de continuar, definiremos unos cuantos CONCEPTOS BÁSICOS:

  • ROM: (Read Only Memory). Memoria de solo lectura. La ROM puede ser leída pero no podrás escribir nada en ella.
  • RAM: (Random Acces Memory). Memoria de acceso aleatorio o memoria de lectura-escritura.
  • SLOT: Banco de memoria de 64 kb (numerados de 0 a 3).
  • PÁGINA: Cada uno de los bloques de memoria de 16 kb en que se divide un slot (numerados de 0 a 3).
  • S.O.: (Sistema Operativo MSX). Situado en la página 0 del slot 0.

Además de estos conceptos básicos, sería útil, que no imprescindible, que conocieseis algo de CM o ensamblador; además también sería útil que conocieseis el sistema numérico binario y el hexadecimal…

Conforme se vaya desarrollando este texto iré explicando otros conceptos que son necesarios entender.

 

2.LA MEMORIA MSX.

Antes de comenzar con la desprotección en sí, nos detendremos un poco en otro tema capital que es necesario estudiar: la configuración de la memoria de nuestro MSX. Conocer como se dispone y se maneja la memoria es IMPRESCINDIBLE para poder desproteger programas.

Lo primero que deberemos hacer es lo siguiente:

PRINT INP(&hA8) (Pulsar ENTER).

A lo que nuestro MSX responderá con un número (de 0 a 255, que es lo que se llama un Byte), como por ejemplo 80 si lo ejecutamos en un MSX-1 “Panasonic CF2700”. ¡¡¡Este número deberemos anotarlo puesto que es de gran importancia….!!!!

La memoria de nuestro MSX se configura en BANCOS, slots de memoria de 64 kb cada uno; estos bancos a su vez se dividen en 4 Páginas de memoria de 16 kb cada una. Por supuesto tanto los slots como las páginas están numeradas. Todo esto lo entenderás mejor si te fijas en el siguiente esquema:

Esquema 1:

esquema-1

Como observaréis por el gráfico, cada página de memoria tiene 16 kb numerados de la siguiente forma:

  • Página 0:   Desde            0 a 16383     –> (&h3FFF).
  • Página 1:    Desde  16384 a 32767     –> (&h4000 a &h7FFF).
  • Página 2:    Desde  32768 a 49151    –> (&h8000  a &hBFFF).
  • Página 3:    Desde  49152 a 65535    –> (&hC000 a &hFFFF).

Para los más despistadillos, os recuerdo que estos números son direcciones de memoria, como es lógico. Alguno se preguntará por qué he colocado el S.O. y el BASIC en las páginas 0 y 1 del Slot 0 en vez de ponerlos en cualquier otro lugar del esquema: pues bien, este, y otros hechos, son los que garantizan la tan traída y llevada (y puesta en duda) compatibilidad del sistema MSX. O sea, los fabricantes de ordenadores de la norma MSX pueden incorporar en sus aparatos uno, dos, tres o cuatro slots (no hay un número obligatorio ni fijo, aunque siempre como es lógico habrá al menos un slot), pero lo que todos hacen es colocar el S.O. y el BASIC en las páginas antes citadas del Slot 0, que dicho sea de paso son la ROM del MSX. Esto es así, entre otras cosas, porque siempre tiene que existir un slot como mínimo y este debe ser el Slot 0.

Tal vez os preguntareis que es lo que hay en los espacios en blanco de los Slots del esquema 1: lógicamente si estamos hablando de bancos de memoria, en estos lugares no podrá haber otra cosa que no sea memoria. Podrá haber memoria ROM (programas Agenda de algunos SONY por ejemplo), pero lo más normal es que haya memoria RAM, sobre todo si nuestro MSX es de 64 kb o más.

Surge entonces la inevitable pregunta: ¿todos los espacios en blanco están ocupados por RAM?.  A la que sigue la inevitable y ambigua respuesta: NO NECESARIAMENTE, pero puede ocurrir, sobre todo en los MSX-2 (en el MSX-1 no suele ocurrir). Partimos de la hipótesis , no lo olvidéis, de que nuestro MSX tiene 4 Slots, cosa que no tiene porque ser cierta. Si por ejemplo los Slots 2 y 3 no existen no cabe entonces preguntarse si hay o no RAM en estos slots.

Se plantea entonces otra inevitable pregunta (y esto ya parece el “Tiempo es Oro”….): ¿cómo podemos saber que páginas y que slots contienen memoria RAM? (que es la memoria de almacenamiento de datos por si alguno no había caido en ello….). En definitiva, queremos saber qué slots ha incorporado el fabricante de nuestro ordenador, porque si una página de un slot contiene RAM por economía las demás páginas de ese slot también van a contener memoria RAM (excepto en el Slot 0 como ya sabemos). No obstante, no hagáis mucho caso de esta afirmación porque no es del todo cierta, sobre todo en lo referido a los MSX-2, a los cartuchos de ampliación de memoria, etc, etc, etc… No es lógico, ni barato, incorporar un slot que contenga sólo una página útil (que tenga RAM), lo normal en el caso de los MSX-1 es incorporar slots completos (con 64 kb de RAM).

Si alguien se ha perdido – no creo-, que vaya buscándose porque a partir de ahora comienza lo realmente importante: LA PRÁCTICA.

Como todos sabemos, nuestro MSX sólo puede gestionar 64 kb de memoria a la vez, ya sea un MSX-1 o MSX-2, y esto es así porque el “cerebro” de los MSX es el conocido microprocesador Z80A.

Estos 64 kb pueden estar repartidos entre las distintas páginas de los slots. Para que los programadores y el propio S.O. distribuyan a conveniencia las páginas de memoria, los creadores del MSX incluyeron en él un PUERTO (o CANAL) de Entrada/Salida: &hA8, que al leerlo nos informa sobre las páginas de memoria que están activadas y al escribir un dato en él (mandar un dato) se modifica la configuración de las mismas.

¿Cómo sabremos qué dato debemos enviar a ese puerto para modificar la paginación de la memoria?, o lo que es lo mismo, ¿cómo interpretaremos el dato leído desde este puerto para saber cual es la actual paginación de memoria?. Para tales motivos se creó la siguiente convención:

  • 00 –> Indica SLOT 0.
  • 01 –>  Indica SLOT 1.
  • 10 –>  Indica SLOT 2.
  • 11  –> Indica SLOT 3.

Dato a Leer/Escribir:

   Bits 6 y 7  Bits 4 y 5  Bits 2 y 3  Bits 0 y 1
&B      0   0       0   0       0   0       0   0 <--> Byte 0..255
     P á g. 3    P á g. 2    P á g. 1    P á g. 0
  • Bits 0 y 1   –>   Página 0.
  • Bits 2 y 3   –>   Página 1.
  • Bits 4 y 5   –>   Página 2.
  • Bits 6 y 7   –>   Página 3.

Puede parecer muy complicado, pero en realidad no lo es tanto, veámoslo con un Ejemplo:

Supongamos que queremos activar las páginas 0 y 1 en el Slot 0 y las páginas 2 y 3 en el Slot 1. El dato a enviar por el puerto A8 sería el siguiente:

&B   0 1    0 1    0 0    0 0    ---> 80 en decimal
    Pág. Pág. Pág.1  Pág.0
      S L O T 1     S L O T 0

Esta configuración de memoria se activaría con OUT &hA8, 80, pero no os apresuréis a activarla porque lo más seguro es que se os “cuelgue” el ordenador (cosa que suele ocurrir mucho las primeras veces que se trastea con la memoria), a no ser que se trate de un PANASONIC CF2700, como es mi caso.

¿Recordáis el número del principio?. ¿Sí?. ¡Me cuesta creerlo…! Coged ahora ese dato y convertirlo a binario con la instrucción: PRINT BIN$(X). Supongamos que al hacerlo nos da esto:

&B   1 1    1 1    0 0    0 0
    Pág.3  Pág. Pág. Pág.0
      S L O T 3     S L O T 0

Gráficamente:

ram-slot-3

Con este dato sabemos, en este ejemplo, que las páginas 0 y 1 están activadas en el Slot 0, y que las páginas 2 y 3 contienen RAM y están en el Slot 3. Con esta configuración seguro que estamos trabajando en BASIC MSX (a la fuerza, porque si no, ¿cómo íbamos a poder hacer PRINT BIN$(X)…?). Además, con este dato podemos suponer, sin temor a equivocarnos mucho que el Slot 3 contendrá 64 kb de RAM.

Pero, ¿qué sucederá si activásemos las páginas 0 y 1 en otro Slot distinto del 0?, o lo que es lo mismo, ¿qué sucede si desactivamos el BASIC y el S.O.?. Desde luego si desactivamos el BASIC desde el BASIC o el S.O. desde el BASIC, va a suceder lo más obvio: nos quedaremos colgados. 😦 Por ello, deberemos hacerlo con el tan temido CM y con sumo cuidado, dicho sea de paso. Yo personalmente prefiero desactivar el S.O., página 0 del Slot 0, lo menos posible pues en él se encuentran rutinas CM que son importantes y muy útiles para el programador (sobre todo si eres un aficionado como lo soy yo).

A la Memoria RAM que se encuentra situada en las famosas páginas 0 y 1, se la denomina RAM OCULTA, porque normalmente, con el BASIC activo, permanece dicha memoria oculta al usuario.

Ahora viene la primera superpregunta: Hasta el momento hemos supuesto que si un slot tenía una o más páginas de RAM ese slot contenía 64 kb de RAM, pero como ya apunté antes esto NO tiene porque ser así… Se plantea entonces la superpregunta, de difícil respuesta: ¿cómo podemos saber entonces qué páginas de los distintos slots contienen memoria ROM o RAM? (nos interesa sólo la RAM).

Para suministrarnos esa información, usaremos los conocidos ANALIZADORES  DE SLOTS. Un programa de este tipo no es más que un conjunto de rutinas CM que analizan la configuración de memoria de nuestro MSX hasta dar con un slot lleno de RAM (si lo hay), y entonces escriben ese dato (el de la configuración de memoria TODO RAM) en algún lugar de la memoria para que pueda ser leído después. Ésta última parte, la de escribir el dato, no está presente en todos los analizadores, pero sí en los que vamos a usar: los de TOPO SOFT, DINAMIC y GREMLIN.

Crear un ANALIZADOR DE SLOTS, es una tarea que aunque sencilla requiere de ciertos conocimientos de CM y del MSX que puede que algunos no tengáis, por eso vamos a usar los programas comerciales para extraer de ellos el analizador de slots que usaremos.

Cojamos por ejemplo, el programa original “BLACK BEARD” de TOPO. Tras cargar el logotipo de la empresa, hacemos CTRL+BREAK, y tecleamos LOAD”CAS:”, con lo cual aparecerá ante nosotros esto:

10 COLOR 1, 1, 1: SCREEN 2

20 BLOAD”CAS: LOAD.BIN”

30 BLOAD”CAS: TEST.BIN”

40 DEFUSR =55000!

50 A=USR(0)

El bloque de datos llamado TEST.BIN es nuestro objetivo. Procederemos a copiarlo con un copión o lector de cabeceras, en una cinta aparte. Sus direcciones para copiarlo son:

  • Dirección de INICIO en memoria…: &hC350
  • Dirección FINAL del programa…….: &hC44C
  • Dirección de EJECUCIÓN………………: &hC350

Una vez copiado el analizador de slots de TOPO, lo cargaremos con BLOAD”CAS:”, R, y veremos que al parecer “no ha sucedido absolutamente nada”. En realidad el programa ya se ha ejecutado y nos ofrece su valiosa información en memoria:

– En la dirección &hE290, tenemos el dato (byte) que contiene la configuración normal de memoria, o sea, la que tiene el ordenador nada más encenderlo (el dato que leísteis al principio), a la que llamaremos CONFIGURACIÓN  ROM/RAM.

– En la dirección &hE292, tenemos el dato (byte) que nos informa sobre qué slot contiene los 64 kb de RAM. A esta configuración la llamaremos TODO RAM.

Para interpretar correctamente esta información debéis leer los datos con PEEK(&hE290) y PEEK(&hE292) y pasar el dato a binario para interpretarlo como ya sabemos.

Ejemplo: Imaginad que tras ejecutar el TEST leemos el dato contenido en &hE292 y obtenemos 85 (en decimal), la interpretación de este dato se haría así:

&B   0 1    0 1    0 1    0 1   --> 85
    Pág.3  Pág.2  Pág.1  Pág.0
      S L O T 1     S L O T 1

Gráficamente tenemos:

captura-3

Sabremos entonces que el Slot 1 contiene 64 kb de RAM, memoria más que suficiente para cargar los programas “turbo” (esos que presenta “rayitas” de colores durante su carga) que al ser conversiones del SPECTRUM  suelen tener de 40 a 44 kbs.

Vamos ahora a extraer el Analizador de Slots de otro programa original, pero ahora de DINAMIC. El elegido ahora es NAVY MOVES 1. Cargamos el programa normalmente, pero estamos muy atentos para que al salir la portada hagamos CTRL+STOP. Cargamos el siguiente bloque de la cinta, el llamado “RELOC”, y a continuación cargamos el bloque llamado “SLOTS” (es muy amable por su parte el que les pongan nombres tan significativos a los bloques).

Este bloque “SLOTS”, lo grabamos junto con el TEST.BIN de TOPO SOFT, y después lo cargamos con BLOAD”CAS:”,R. En apariencia “nada ocurre”, pero en realidad sucede que:

– En &hDDD5 tenemos el dato llamado ROM/RAM.

– En &hDDD7 tenemos el dato llamado TODO RAM.

Las direcciones de este programa CM, para quien no tenga copión, son:

–    Dirección de INICIO          —-> &h9000
–    Dirección de FIN                —-> &h9092
–    Dirección de EJECUCIÓN  —-> &h9000

Este analizador de slots es más corto que el de TOPO, lo cual no es muy importante, y tiene exactamente la misma longitud y direcciones que el analizador de GREMLIN Graphics (que es el que yo suelo usar). Sucede con el analizador de slots de GREMLIN que todavía no podéis copiarlo puesto que, aunque muchos de sus programas lo incluyen (Future Knight, TrailBlazer, Avenger, Krakout, Aufwiedersen Monty, ….), está colocado justamente al principio de los bloques protegidos. Y ¡todavía no sabemos como desproteger programas…!

Antes de acabar con este primer capitulo, y con el tema de la memoria, voy a daros algunos consejillos generales”, extraídos de mi propia experiencia personal, en cuanto al uso de los slots y de las páginas de memoria:

  1. No desactivar-activar NUNCA páginas de memoria desde el BASIC (el cuelgue es casi seguro).
  2. Al desactivar-activar páginas de memoria no puede NUNCA desactivarse la página de memoria en la que se encuentra el programa CM que está trabajando. Así, por ejemplo, si nuestro programa está en la página 3 del Slot 0 no podemos desactivar esta página del Slot 0 y activarla en otro slot mientras el programa se esté ejecutando porque el cuelgue será total.  Por lo tanto, la única manera de desactivar esta página del slot 0 es hacerlo con un programa situado en las páginas 0, 1 ó 2 activas (de cualquier slot).
  3. Cuidado con cambiar la página 3 de ubicación sin desactivar previamente el S.O. Recuerda que esta página contiene la RAM del S.O. y la Pila, que son necesarios cuando éste está conectado (¡¡¡mucho ojo con la Pila!!!).
  4. Procurad al trabajar en CM no desactivar el S.O., salvo que sea imprescindible, porque al hacerlo os quedaréis sin las utilísimas rutinas CM que éste contiene.
  5. Si es posible, ampliad vuestros conocimientos sobre este tema con cualquier libro que lo trate, o leyendo un artículo aparecido en la MSX-CLUB titulado “EL ORDENADOR POR DENTRO”, de Ramón Salas, o bien si podéis conseguid la INPUT-MSX nº 1, algo difícil, y leed un artículo que incluye sobre este tema.

Antes de pasar a la desprotección en sí de programas, conviene que hayáis entendido perfectamente todo lo anteriormente expuesto. Si es necesario que lo leáis 2 ó 3 veces (no lo creo) hacedlo, hasta que creáis que lo hayáis comprendido bien.

Para ver si lo has entendido todo, todo, TODO, te propongo unos sencillos ejercicios (que convendría que hicieses pues con la práctica se aprende todo mucho mejor).

EJERCICIOS PROPUESTOS:

1.Calcula el dato que debemos enviar al Puerto A8 para activar las 4 páginas de memoria en los Slots 0, 1, 2 y 3.

2.Activa a continuación las siguientes configuraciones:

a) Páginas 0 y 3, en Slot 2.

     Páginas 1 y 2, en Slot 3.

b) Páginas 0 y 2, en Slot 1.

     Páginas 1 y 3, en Slot 3.

   (la página 3 no se activará, su valor nos será desconocido: XX).

3.¿Qué significado puede tener el que el Slot 0 de su ordenador contenga lo siguiente?. (Una pista: HIT-BIT de SONY).

– Páginas 0 a 2 –> ROM.

– Página 3 –> RAM.

4.Con la configuración de memoria del ejercicio anterior, y suponiendo que estamos en el BASIC, ¿cuánta memoria aproximadamente le quedará libre para sus programas en BASIC?. (Ten en cuenta que la RAM del Sistema ocupa unos 4 kb de memoria y va desde &hF380 a &hFFFF).

¿Podrás almacenar tus Programas CM en la página 1? ¿Y en la página 3?. ¿Por qué?.

5.Si queremos hacer un programa CM que desactive las páginas 0 y 1 del slot 3 y las active en otro slot, por ejemplo el 1, ¿Dónde NO deberemos colocar nunca este programa?. ¿Por qué?.

6.¿Cuál sería la cantidad máxima de memoria que podrá tener un MSX-1 si suponemos que los 4 slots primarios contienen RAM en su totalidad?.

¿Sería posible tener, según lo explicado, slots de más de 64 kb?. ¿Por qué?.

7.Si al cargar y ejecutar el Analizador de Slots de DINAMIC, por ejemplo, resulta que el dato que hay en &hDDD5 es igual al contenido en &hDDD7, y lo hemos cargado desde el BASIC, ¿qué podrás deducir de este hecho?.

8.¿Por qué crees que los programadores se molestan en hacer unos programas que simplemente anotan un par de datos en la memoria?. ¿Qué utilidad tendrán (piénsalo bien) estos 2 datos para el programador?.

9.¿Es PROBABLE, que tras ejecutar el Analizador de Slots de DINAMIC, la posición &hDDD5 contenga el valor 80, y la posición &hDDD7 contenga el valor 95?. ¿Por qué?.

10.Si a un MSX-1 de 64 kb, le conectamos una Unidad de Disco: ¿cuánta memoria aproximada nos quedará para cargar programas desde el BASIC?.
(La memoria para cargar programas desde el BASIC comienza lógicamente en &h8000 = 32768).

 


 

P.D. En primer lugar, quiero realizar una aclaración de suma importancia. Este curso fue creado originalmente por FRANCISCO FUERTES LORENZO. El formato original del mismo son fotocopias escritas a máquina, y que yo José Manuel, he intentado pasar a Pdf para luego aplicarle soft de OCR, pero viendo los desastrosos resultados he optado por teclearlo todo letrita a letrita en formato WORD, respetando fielmente el original. 😉

Para cualquier aclaración, comentario, sugerencia, etc, etc… no dudéis en escribirme. Me gustaría que todo aquel que tenga conocimientos sobre el tema, y pueda contribuir a mejorar este curso, ampliarlo, corregirlo, etc, que se anime y me escriba. También me gustaría me escribierais para darme vuestra opinión sobre este curso, si lo habéis leído todo y si tenéis intención de seguirlo.

josemanuel74  —>  GMAIL   punto   COM


 

MATERIAL COMPLEMENTARIO

Analizador SlotsNAVY MOVES 1 (Dinamic)

36864 F3       DI 
36865 DBA8     IN A,(168)
36867 47       LD B,A
36868 1078     DJNZ +120 (36990)
36870 EC3047   CALL PE,18224
36873 DBA8     IN A,(168)
36875 E6F0     AND 240
36877 3D       DEC A
36878 210000   LD HL,0
36881 3C       INC A
36882 D3A8     OUT (168),A
36884 4F       LD C,A
36885 7E       LD A,(HL)
36886 2F       CPL 
36887 77       LD (HL),A
36888 BE       CP (HL)
36889 79       LD A,C
36890 2847     JR Z,+71 (36963)
36892 1E00     LD E,0
36894 79       LD A,C
36895 0F       RRCA 
36896 0F       RRCA 
36897 E6C0     AND 192
36899 B0       OR B
36900 D3A8     OUT (168),A
36902 3AFFFF   LD A,(65535)
36905 2F       CPL 
36906 ECF0B3   CALL PE,46064
36909 32FFFF   LD (65535),A
36912 79       LD A,C
36913 D3A8     OUT (168),A
36915 7E       LD A,(HL)
36916 2F       CPL 
36917 77       LD (HL),A
36918 BE       CP (HL)
36919 79       LD A,C
36920 2809     JR Z,+9 (36931)
36922 1C       INC E
36923 7B       LD A,E
36924 FE04     CP 4
36926 20DE     JR NZ,-34 (36894)
36928 79       LD A,C
36929 18CE     JR -50 (36881)
36931 D604     SUB 4
36933 210040   LD HL,16384
36936 C604     ADD A,4
36938 E3       EX (SP),HL
36939 A8       XOR B
36940 4F       LD C,A
36941 7E       LD A,(HL)
36942 2F       CPL 
36943 77       LD (HL),A
36944 BE       CP (HL)
36945 79       LD A,C
36946 282B     JR Z,+43 (36991)
36948 1E00     LD E,0
36950 79       LD A,C
36951 0F       RRCA 
36952 0F       RRCA 
36953 0F       RRCA 
36954 0F       RRCA 
36955 E6C0     AND 192
36957 B0       OR B
36958 D3A8     OUT (168),A
36960 3AFFFF   LD A,(65535)
36963 2F       CPL 
36964 E6E3     AND 227
36966 B3       OR E
36967 32FFFF   LD (65535),A
36970 79       LD A,C
36971 D3A8     OUT (168),A
36973 7E       LD A,(HL)
36974 2F       CPL 
36975 77       LD (HL),A
36976 BE       CP (HL)
36977 79       LD A,C
36978 280B     JR Z,+11 (36991)
36980 7B       LD A,E
36981 C604     ADD A,4
36983 5F       LD E,A
36984 FE10     CP 16
36986 20DA     JR NZ,-38 (36950)
36988 79       LD A,C
36989 18D1     JR -47 (36944)
36991 08       EX AF,AF'
36992 32D5DD   LD (56789),A
36995 D3A8     OUT (168),A
36997 08       EX AF,AF'
36998 32D7DD   LD (56791),A
37001 3AFFFF   LD A,(65535)
37004 2F       CPL 
37005 62       LD H,D
37006 D6DD     SUB 221
37008 FB       EI 
37009 C9       RET 
37010 00       NOP

 

Analizador SlotsBLACK BEARD (Topo Soft)

50000 F3         DI 
50001 3A0080     LD A,(32768)
50004 F5 PUSH    AF
50005 CD95C3     CALL 50069
50008 212400     LD HL,36
50011 22B3C3     LD (50099),HL
50014 210040     LD HL,16384
50017 CDA7C3     CALL 50087
50020 210080     LD HL,32768
50023 CDA7C3     CALL 50087
50026 21D2C3     LD HL,50130
50029 11C8AF     LD DE,45000
50032 017A00     LD BC,122
50035 EDB0       LDIR 
50037 21C8AF     LD HL,45000
50040 22B3C3     LD (50099),HL
50043 210000     LD HL,0
50046 CDA7C3     CALL 50087
50049 CD9AC3     CALL 50074
50052 3A90E2     LD A,(58000)
50055 D3A8       OUT (168),A
50057 3A91E2     LD A,(58001)
50060 32FFFF     LD (65535),A
50063 F1         POP AF
50064 320080     LD (32768),A
50067 FB         EI 
50068 C9         RET 
50069 2190E2     LD HL,58000
50072 1803       JR +3 (50077)
50074 2192E2     LD HL,58002
50077 DBA8       IN A,(168)
50079 77         LD (HL),A
50080 23         INC HL
50081 3AFFFF     LD A,(65535)
50084 2F         CPL 
50085 77         LD (HL),A
50086 C9         RET 
50087 3E80       LD A,128
50089 0E04       LD C,4
50091 E683       AND 131
50093 0604       LD B,4
50095 F5         PUSH AF
50096 C5         PUSH BC
50097 E5         PUSH HL
50098 CD2400     CALL 36
50101 E1         POP HL
50102 3620       LD (HL),32
50104 7E         LD A,(HL)
50105 FE20       CP 32
50107 2007       JR NZ,+7 (50116)
50109 36FA       LD (HL),250
50111 7E         LD A,(HL)
50112 FEFA       CP 250
50114 280B       JR Z,+11 (50127)
50116 C1         POP BC
50117 F1         POP AF
50118 C604       ADD A,4
50120 10E5       DJNZ -27 (50095)
50122 3C         INC A
50123 0D         DEC C
50124 20DD       JR NZ,-35 (50091)
50126 C9         RET 
50127 C1         POP BC
50128 F1         POP AF
50129 C9         RET 
50130 CDE8AF     CALL 45032
50133 FAD5AF     JP M,45013
50136 DBA8       IN A,(168)
50138 A1         AND C
50139 B0         OR B
50140 D3A8       OUT (168),A
50142 C9         RET 
50143 E5         PUSH HL
50144 CD0CB0     CALL 45068
50147 4F         LD C,A
50148 0600       LD B,0
50150 7D         LD A,L
50151 A4         AND H
50152 B2         OR D
50153 21C5FC     LD HL,64709
50156 09         ADD HL,BC
50157 77         LD (HL),A
50158 E1         POP HL
50159 79         LD A,C
50160 18E0       JR -32 (50130)
50162 F5         PUSH AF
50163 7C         LD A,H
50164 07         RLCA 
50165 07         RLCA 
50166 E603       AND 3
50168 5F         LD E,A
50169 3EC0       LD A,192
50171 07         RLCA 
50172 07         RLCA 
50173 1D         DEC E
50174 F2F1AF     JP P,45041
50177 5F         LD E,A
50178 2F         CPL 
50179 4F         LD C,A
50180 F1         POP AF
50181 F5         PUSH AF
50182 E603       AND 3
50184 3C         INC A
50185 47         LD B,A
50186 3EAB       LD A,171
50188 C655       ADD A,85
50190 10FC       DJNZ -4 (50188)
50192 57         LD D,A
50193 A3         AND E
50194 47         LD B,A
50195 F1         POP AF
50196 A7         AND A
50197 C9         RET 
50198 F5         PUSH AF
50199 7A         LD A,D
50200 E6C0       AND 192
50202 4F         LD C,A
50203 F1         POP AF
50204 F5         PUSH AF
50205 57         LD D,A
50206 DBA8       IN A,(168)
50208 47         LD B,A
50209 E63F       AND 63
50211 B1         OR C
50212 D3A8       OUT (168),A
50214 7A         LD A,D
50215 0F         RRCA 
50216 0F         RRCA 
50217 E603       AND 3
50219 57         LD D,A
50220 3EAB       LD A,171
50222 C655       ADD A,85
50224 15         DEC D
50225 F224B0     JP P,45092
50228 A3         AND E
50229 57         LD D,A
50230 7B         LD A,E
50231 2F         CPL 
50232 67         LD H,A
50233 3AFFFF     LD A,(65535)
50236 2F         CPL 
50237 6F         LD L,A
50238 A4         AND H
50239 B2         OR D
50240 32FFFF     LD (65535),A
50243 78         LD A,B
50244 D3A8       OUT (168),A
50246 F1         POP AF
50247 E603       AND 3
50249 C9         RET 
50250 FF         RST &h38
50251 FF         RST &h38
50252 E1         POP HL

 

DESCARGAS

Imagen “.DSK” que contiene lo siguiente:

  • Ensamblador/Desensamblador “RSC-II” (Se ejecuta con LOAD”RSC-II.BAS”)
  • Analizador de Slots del “Navy Moves” (Dinamic) –> (Es el Fichero NMSLOTS.BIN)
  • Analizador de Slots del “Black Beard” (Topo Soft) –> (Es el Fichero BBSLOTS.BIN)

Revista MSX-EXTRA “Especial Código Máquina” (en la página 7 aparece el Artículo “El Ordenador por Dentro” al que se hace mención en el Curso)

Revista INPUT-MSX número 1 (que aparece mencionada en este Curso)

Capítulo 1 – Curso de Desprotección de Programas MSX en PDF (pues eso, que aquí puedes descargar este Capítulo en Pdf).

¡Pues esto es todo por el momento, nos vemos en el Capítulo 2! 😉

 

Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

2 respuestas a Curso de Desprotección de Programas – MSX – Capítulo 1

  1. misxtor dijo:

    ¡¡¡¡¡ Enhorabuena !!!!!.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s