POKE -1,170

Door Tolemac

Expert (87)

afbeelding van Tolemac

17-01-2010, 19:57

Hola,

alguien me puede explicar que es lo que hace la siguiente instrucción: POKE -1,170 ?. Se que la instrucción POKE sirve para escribir un valor en una dirección de memoria. La pregunta es debido a que un juego que no me cargaba, si añado al cargador la instrucción de referencia el juego funciona a la perfección. Me ha dejado un poco intrigado el tema.

He visto tambien: POKE -1,(15-PEEK(-1)\16)*17 , que justamente la segunda parte (15-PEEK(-1)\16)*17 devuelve el valor 170 si hago un print.

PRINT (15-PEEK(-1)\16)*17
170
OK

Que es lo que hay en la dirección -1 ?. Por que (15-PEEK(-1)\16)*17 ?

Saludos.

Aangemeld of registreer om reacties te plaatsen

Van KNIGHTMARE

Champion (382)

afbeelding van KNIGHTMARE

18-01-2010, 10:17

Buf soy un negao en programación....el caso es que sin saber exactamente lo que hacia
Question entraban muchos juegos que daban problemas de carga, eran 2 pokes: el -1,170 y el
65535,168

Saludos.

Van chaostar

Supporter (6)

afbeelding van chaostar

18-01-2010, 14:31

dependía del tipo de ordenador msx2 por cierto. Recuerdo también el poke -1,171. Yo dispongo de un Sony MSX2 F9S y por lo general cargaba todo sin necesitar usar pokes, pero en ordenadores mayores como el sony F700s si que eran necesarios con muchos juegos de cinta.

Van kabish

Master (223)

afbeelding van kabish

18-01-2010, 14:40

Lo teneis explicado aqui.
http://dhost.info/konamiman/msx/easymb4.txt

Esta justo al final.

Van mesiasmsx

Prophet (3171)

afbeelding van mesiasmsx

18-01-2010, 23:24

Yo conozco hasta 3, cuando tenia los MSX2 usaba el -1,170 que para muchos jeugos de cinta era milagroso. Para los ordenadores japoneses, no se si todas las generaciones, pero en principio parece que funciona es el -1,0 y para los Sony al menos MSX1 que tengo uso el -1,255 .

Van jrcp_kun

Paragon (1410)

afbeelding van jrcp_kun

19-01-2010, 21:58

para sony es -1,255
para philips -1,170

jeje genericamente el de arriba para todos

Van mohai

Paladin (841)

afbeelding van mohai

22-01-2010, 18:01

Arrojo un poco de luz:

Depenende de en que sub-slot tega tu MSX la RAM. Como solo hay 4 posibles sub slots, pues solo hay 4 posible valores. Si no pones el correcto, tu MSX se colgara sin mas. Si vale mas de uno, es que tu MSX no lo necesita. Para verlo mas claro, estos son los valores en binario:

POKE -1,0
POKE -1,&B01010101
POKE -1,&B10101010
POKE -1,&B11111111

La direccion -1 es la misma que 65535 o &HFFFF

La formula del primer post es para calcular que valor poner e incluirlo en el cargador, para que el MSX no se cuelgue.

Van Tolemac

Expert (87)

afbeelding van Tolemac

22-01-2010, 23:29

Muchas gracias a todos por las respuestas. kabish, el manual de ensamblador que has vinculado está muy bien. Ya me lo estoy leyendo.

Por otro lado en referencia a la respuesta de mohai, si yo hago un print en binario del contenido del registro &HFFFF, obtengo el valor:

PRINT BIN$(PEEK(&HFFFF))
01010011
OK

Con este resultado, como puedo saber en que sub-slot tengo la RAM?. Según he leido, los primeros BITs se corresponden con el sub-slot para la página cero, los dos segundos BITs para en de la página 1, .....

Si miro el contenido de la dirección de memoria &H00A8 (Primary Slot Select Register), el resultado que me devuelve es:

PRINT BIN$(PEEK(&H00A8))
11000011
OK

Según he leido los 64K de la memoria principal del MSX están divididos en bloques de 16K (páginas). Este registro controla que slot será mapeado para cada página. Además cada slot puede ser expandido en 4 sub-slots (dirección &HFFFF). Con estos ambos valores (primary slot select register y el seconray slot select register) como está mapeada la memoria de mi MSX?. Dispongo de 128K.

PRIMARY SLOT (&H00A8) --> 11000011
SECONDARY SLOT (&HFFFF) --> 01010011

Gracias.

Van mohai

Paladin (841)

afbeelding van mohai

27-01-2010, 11:57

El comando

PRINT BIN$(PEEK(&HFFFF))
01010011

Te devuelve el subslot seleccionado para cada página de el SLOT primario que tengas seleccionado para la página 3, PERO INVERTIDO. En tu caso, el valor real que tiene el registro es 10101100, lo que te dice que tienes la ram en el subslot 2 y una rom (DISKROM?) en la página 1, subslot 3.

Dicho de otra manera, primero seleccionas con el REGISTRO &HA8 (OUT &HA8,algo) un slot primario para leer su registro de subslot (&HFFFF). Luego lo lees como más arriba, lo complementas y, sabes que subslot está seleccionado para cada página.

Para leer el registro de slot principal, tienes que leer el puerto A8:

PRINT BIN$(INP(&HA8))
11000011
OK

Trabajando desde BASIC, tendrás una configuración para las 64K (más o menos) como la siguiente:

banco:  3  -  2  -   1   -  0
tipo:  RAM - RAM - BASIC - BIOS
slot:   3  -  3  -   0   -  0
sslot:  2  -  2  -   0   -  0
 

El BIOS y el BASIC siempre estarán en el slot 0-0, pero la RAM puede variar según el modelo de MSX. En el ejemplo es la de un Philips MSX2.

Luego, si usas memoria mapeada, tendrás que usar los puertos &HFC-&HFF, pero eso es otra historia...

Van manolito74

Paladin (1013)

afbeelding van manolito74

27-01-2010, 15:15

Hola:

Si quieres ampliar conocimientos al respecto y de paso aprender más cosillas sobre el MSX, la memoria, etc, etc, etc, te paso el siguiente enlace:

http://www.konamito.com/curso-de-desproteccion-de-programas/

Ahí puedes encontrar un "pdf" de una especie de curso Teórico-Práctico. El curso en sí era para "desproteger" juegos y programas de msx, ententiéndose por desproteger el hecho de poder "manipular-modificar" el código de los programas con el fin de poder pasar los juegos que estaban en cinta a disco.

El curso es muy fácil de seguir ya que empieza desde cero patatero y explica de forma didáctica el funcionamiento del MSX, la memoria, la carga desde el cassette, y también unos conocimientos mínimos de ensamblador.

Te invito, os invito, a que le echéis un vistazo ya que además también incluye ejercicios prácticos.

Saludetes. ;-)

pd. El curso no es mío, yo lo pasé a formato "word" y posteriormente konamito lo convirtió a "pdf" y lo colgó en la web.

pd. En el curso se menciona al autor original.

Van Tolemac

Expert (87)

afbeelding van Tolemac

14-02-2010, 19:39

Hola,

gracias a todos. A partir de los manuales que me habéis dicho y vuestros comentarios estoy ampliando mis conocimientos sobre este sistema.

Un saludo.