ATARI -¿Crear un cain para expansion de 800xl?
ATARI -¿Crear un cain para expansion de 800xl?
Bueno, me asalto la duda para los que somos fanáticos en los atari, estaba creando unos juegos para atari y me encontré con la sorpresa que todos los copiadores que uso no me logran pasar un juego que es solo para el 130xe, entonces me dije a mi mismo, MISMO QUE PASA QUE NO TOMAN LA EXPANSIÓN DE MEMORIA DEL 800XL, para que arme un 800 con expansión si no la puedo usar???, la mayoría de los copiadores que están creados para pasar juegos a los atari, están estructurados para usar los 4 bancos extras que trae el 130xe, pero en este caso por lo que tengo entendido, al expandir un 800xe se crean 6 bancos, entonces quedan 2 libres que no se usan en nada, busque información por la net y lo que encontré mas asemejado a lo que realice, desde la web de space invaders, fue esto.
enlace
por lo que leo acá explican como se usa la extensión bajo códigos, y se ve, que se usa a través del poke 54017(basic), tal como están estructurados los copiadores para 130xe, entonces, como usaríamos los dos bancos que faltan?. dejo la inquietud para quien quiera participar. CAIN IV no seria malo para expansión de 800xl, producto nacional.
enlace
por lo que leo acá explican como se usa la extensión bajo códigos, y se ve, que se usa a través del poke 54017(basic), tal como están estructurados los copiadores para 130xe, entonces, como usaríamos los dos bancos que faltan?. dejo la inquietud para quien quiera participar. CAIN IV no seria malo para expansión de 800xl, producto nacional.
Re: ATARI -¿Crear un cain para expansion de 800xl?
Por lo que se puede ver, es compatible con la expansión del 130XE, ya que usa los mismos bits de selección de banco (al menos para CPU que es lo que necesita CAIN).
Así tal cual, CAIN y otros copiadores para 130XE te van a funcionar en 800XL + Expansión sin ningún tipo de cambio.
Ahora, si quieres modificar CAIN para que ocupe los bancos adicionales de la expansión, necesitas modificar:
a) Linea 1115 del código Basic, que es en donde selecciona el banco durante la carga
b) CAIN.BIN (código de máquina) donde selecciona el banco durante la grabación. Según el código que publiqué, esta es la parte a modificar:
LDA 54017 ; Cambia de banco
CLC
ADC #4
STA 54017
Debes considerar que ya no bastaría multiplicar el número del banco por 4, ya que se ocupan los bits 2, 3, 5 6, saltándose el bit 4.
Saludos
--
Franco
Así tal cual, CAIN y otros copiadores para 130XE te van a funcionar en 800XL + Expansión sin ningún tipo de cambio.
Ahora, si quieres modificar CAIN para que ocupe los bancos adicionales de la expansión, necesitas modificar:
a) Linea 1115 del código Basic, que es en donde selecciona el banco durante la carga
b) CAIN.BIN (código de máquina) donde selecciona el banco durante la grabación. Según el código que publiqué, esta es la parte a modificar:
LDA 54017 ; Cambia de banco
CLC
ADC #4
STA 54017
Debes considerar que ya no bastaría multiplicar el número del banco por 4, ya que se ocupan los bits 2, 3, 5 6, saltándose el bit 4.
Saludos
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
la linea 1115 no la encuentro, en los cain, me referire al cain donde estoy haciendo las pruebas despues pasare a los demas cain, que el más que me interesa es el cain2, por gusto por su pantalla de bienvenida.
linea 1015
poke 54017,221+4*JJ
la cambio por
poke 54017,221+6*JJ
y el bin lo armare en asm , despues lo ensamblo como CAIN.BIN
Y EL ADC #4 lo cambio por ADC #6
linea 1015
poke 54017,221+4*JJ
la cambio por
poke 54017,221+6*JJ
y el bin lo armare en asm , despues lo ensamblo como CAIN.BIN
Y EL ADC #4 lo cambio por ADC #6
Re: ATARI -¿Crear un cain para expansion de 800xl?
yap al modificar el cain bin con editplus me salta el siguiente error
me dice que 8192 no tiene macro definido al igual que 8204???
me dice que 8192 no tiene macro definido al igual que 8204???
Re: ATARI -¿Crear un cain para expansion de 800xl?
Nonnono, recuerda.. Si sólo usarás los 128k como si fuera un 130XE, no necesitas otro Cain.dogdark escribió:la linea 1115 no la encuentro, en los cain, me referire al cain donde estoy haciendo las pruebas despues pasare a los demas cain, que el más que me interesa es el cain2, por gusto por su pantalla de bienvenida.
linea 1015
poke 54017,221+4*JJ
la cambio por
poke 54017,221+6*JJ
y el bin lo armare en asm , despues lo ensamblo como CAIN.BIN
Y EL ADC #4 lo cambio por ADC #6
Si quieres usar los bancos adicionales, los bits son los mismos para los 4 primeros bancos, y ahí basta con multiplicar por 4 igual que en 130XE. Pero para usar el resto de los bancos, usa el bit 5 y 6.
En pseudocódigo, si bank es el número de banco (de 0 a 15 según la documentación)
bankLow = bank % 4;
bankHigh = bank / 4; (entero)
Luego el valor que debes escribir será:
bankLow * 4 + bankHigh * 32
Para hacerlo más claro:
Código: Seleccionar todo
7 6 5 4 3 2 1 0 bits en 54017
| | | |
3 2 1 0 bits que indican el numero de banco
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
Ese código lo desensamblé a mano y lo escribí con un editor de texto (a modo de apuntes)dogdark escribió:yap al modificar el cain bin con editplus me salta el siguiente error
me dice que 8192 no tiene macro definido al igual que 8204???
No va a compilar a la primera.
Te recomiendo tomar el archivo .bin, aplicar un desensamblador y luego ese código modificarlo y volver a ensamblar
E insisto, sólo necesitas modificar CAIN si vas a ocupar los bancos adicionales que no están en el 130XE.
Saludos
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
NOTA: las pruebas realizadas en las fotos son con el emulador repitiendo el paso que hago en el atari real.
vamos por parte como dijo jack el destripador, en el basic de cain, lo primero que cambie es el valor de L(Linea 10) que por defecto esta con 65535 a 192000 aunque tengo 256k, pero mas seguro poner menos. con eso increíblemente aumento los bancos en la carga sin cambiar nada más. Muestra de botón una jotito
obviamente le coloque un stop en la linea 40 para ver si los bancos se llenaban según carga el archivo y channnnnn lleno hasta el banko 5, con 7134 bytes que es lo que necesitaba.
Entonces eliminamos el stop de la linea 40 para ver que pasa y repetimos proceso
biennnnnnn. me permite el ingreso del nombre del juego
tamos eaeae hasta el momento, colocamos el nombre del juego
yyyy presionamos enter y se largo a grabar
pito largo, 1er bloque, 2do bloque, bloque largo stac, bloque cortito yyyy cueccccccccccc
jajajja iba reentusiasmado, 295 X=USR(8192,L):POSITION 34,2:? "000":RETURN, eso debe ser por que no cambie el cain.bin, por lo menos el basic funciona en la carga, pero lo del .bin me supera jajjajja. asm no cacho.
vamos por parte como dijo jack el destripador, en el basic de cain, lo primero que cambie es el valor de L(Linea 10) que por defecto esta con 65535 a 192000 aunque tengo 256k, pero mas seguro poner menos. con eso increíblemente aumento los bancos en la carga sin cambiar nada más. Muestra de botón una jotito
obviamente le coloque un stop en la linea 40 para ver si los bancos se llenaban según carga el archivo y channnnnn lleno hasta el banko 5, con 7134 bytes que es lo que necesitaba.
Entonces eliminamos el stop de la linea 40 para ver que pasa y repetimos proceso
biennnnnnn. me permite el ingreso del nombre del juego
tamos eaeae hasta el momento, colocamos el nombre del juego
yyyy presionamos enter y se largo a grabar
pito largo, 1er bloque, 2do bloque, bloque largo stac, bloque cortito yyyy cueccccccccccc
jajajja iba reentusiasmado, 295 X=USR(8192,L):POSITION 34,2:? "000":RETURN, eso debe ser por que no cambie el cain.bin, por lo menos el basic funciona en la carga, pero lo del .bin me supera jajjajja. asm no cacho.
Re: ATARI -¿Crear un cain para expansion de 800xl?
La variable L es solo informativa en la primera pantalla, no quiere decir que haya más memoria disponible.
En cuanto a la carga en los bloques, podría funcionar por suerte. Atención: Los primeros 4 bloques serán de la expansión de memoria (64k), el quinto bloque que cargue lo hará en el banco primario, es decir, en la memoria que está presente originalmente en la zona de bank switching. Eso es porque al cargar el quinto bloque se pondrá en 1 el bit 4. El problema es que el 6to bloque que cargue, lo hará en el mismo bloque, sobreescribiendo los datos que acabas de leer, lo mismo con el bloque 7mo, y 8vo.
Mira acá las columnas del bit 4 y mira la que dice CPU accesses (CPU accede)
http://www.atariarchives.org/mapping/appendix16.php
El error 3 no lo tengo a mano, pero lo más probable es que sea en el paso de parámetros a la rutina USR. Es posible que soporte parámetros de 16 bit, por lo que cualquier número superior a 65535 falle. Ese error se arrojará justo antes de ejecutar el código de máquina.
Saludos
--
Franco
En cuanto a la carga en los bloques, podría funcionar por suerte. Atención: Los primeros 4 bloques serán de la expansión de memoria (64k), el quinto bloque que cargue lo hará en el banco primario, es decir, en la memoria que está presente originalmente en la zona de bank switching. Eso es porque al cargar el quinto bloque se pondrá en 1 el bit 4. El problema es que el 6to bloque que cargue, lo hará en el mismo bloque, sobreescribiendo los datos que acabas de leer, lo mismo con el bloque 7mo, y 8vo.
Mira acá las columnas del bit 4 y mira la que dice CPU accesses (CPU accede)
http://www.atariarchives.org/mapping/appendix16.php
El error 3 no lo tengo a mano, pero lo más probable es que sea en el paso de parámetros a la rutina USR. Es posible que soporte parámetros de 16 bit, por lo que cualquier número superior a 65535 falle. Ese error se arrojará justo antes de ejecutar el código de máquina.
Saludos
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
3 Value Error: A value expected to be a positive
integer is negative; a value is not within a specific range.
ese es el valor error 3 que me da en la linea 295
X=USR(8192,L):POSITION 34,2:? "000":RETURN
y lo otro maestro, a lo buen chileno y pa que se entienda, para los que no cachamos mucho y estamos en aprendizaje, gracias a vuestros comentarios que son aporte, en el poke 54017 que se debe poner y de ahí explicar por que se hizo y cuales son las variables a seguir, se lo agradecería un montón, porque yo lo que veo, debo aplicar el bit 7 que es lo que veo por la cantidad de memoria, por mas que multiplique no me cuadra nada perrito. Uta y gracias por la paciencia que nos tienen a los duros de mollera.
o sea en buen chileno, se aplica el poke 54017 donde nos referimos el alojamiento de los bytes que cagaremos con el copiador a una posición de memoria limpia, después aplicamos el 7 para poder abrir o posicionar el banco de memoria final por .... algo así maestro.
seria algo así, por que el banco 16 esta reservado y no lo contempla...
integer is negative; a value is not within a specific range.
ese es el valor error 3 que me da en la linea 295
X=USR(8192,L):POSITION 34,2:? "000":RETURN
y lo otro maestro, a lo buen chileno y pa que se entienda, para los que no cachamos mucho y estamos en aprendizaje, gracias a vuestros comentarios que son aporte, en el poke 54017 que se debe poner y de ahí explicar por que se hizo y cuales son las variables a seguir, se lo agradecería un montón, porque yo lo que veo, debo aplicar el bit 7 que es lo que veo por la cantidad de memoria, por mas que multiplique no me cuadra nada perrito. Uta y gracias por la paciencia que nos tienen a los duros de mollera.
o sea en buen chileno, se aplica el poke 54017 donde nos referimos el alojamiento de los bytes que cagaremos con el copiador a una posición de memoria limpia, después aplicamos el 7 para poder abrir o posicionar el banco de memoria final por .... algo así maestro.
Código: Seleccionar todo
bancos 16 KB
130xe 16 kb * 4 bancos = 64 kb
800exp 16 kb * 15 bancos = 240 kb + 1 banco que no se cuenta 16 kb = 256kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX
4 5 6 7
bits
Re: ATARI -¿Crear un cain para expansion de 800xl?
Justamente: "a value is not within a specific range"dogdark escribió:3 Value Error: A value expected to be a positive
integer is negative; a value is not within a specific range.
ese es el valor error 3 que me da en la linea 295
X=USR(8192,L):POSITION 34,2:? "000":RETURN
Es porque L es muy grande. Hay que pasarlo en dos partes, dos números de 16 bit, y por supuesto recibirlo como tal al otro lado. Por otra parte, eso requería manejar ese caso en el código de máquina que espera recibir un único valor de 16 bit.
Ahora tengo una gran duda gran. Si quieres dar soporte para cargar juegos de más de 64KB, tendrías que modificar el cargador y el sistema de carga, porque están hechos para 64KB máximo. Y eso me lleva a otra pregunta.. qué juego quieres cargar?
Sería algo así:dogdark escribió: y lo otro maestro, a lo buen chileno y pa que se entienda, para los que no cachamos mucho y estamos en aprendizaje, gracias a vuestros comentarios que son aporte, en el poke 54017 que se debe poner y de ahí explicar por que se hizo y cuales son las variables a seguir, se lo agradecería un montón, porque yo lo que veo, debo aplicar el bit 7 que es lo que veo por la cantidad de memoria, por mas que multiplique no me cuadra nada perrito. Uta y gracias por la paciencia que nos tienen a los duros de mollera.
o sea en buen chileno, se aplica el poke 54017 donde nos referimos el alojamiento de los bytes que cagaremos con el copiador a una posición de memoria limpia, después aplicamos el 7 para poder abrir o posicionar el banco de memoria final por .... algo así maestro.
seria algo así, por que el banco 16 esta reservado y no lo contempla...
Código: Seleccionar todo
Posición 54017. Considerando que los bancos son de 16KB
Zona compatible con 130XE
7 6 5 4 3 2 1 0
X X X 1 X X X X Banco 1 primario (modo normal)
X 0 0 0 0 0 X X Banco 0 secundario
X 0 0 0 0 1 X X Banco 1 secundario
X 0 0 0 1 0 X X Banco 2 secundario
X 0 0 0 1 1 X X Banco 3 secundario
Zona especifica expansion para 800 XL
X 0 1 0 0 0 X X Banco 4 expansión
X 0 1 0 0 1 X X Banco 5 expansión
X 0 1 0 1 0 X X Banco 6 expansión
X 0 1 0 1 1 X X Banco 7 expansión
X 1 0 0 0 0 X X Banco 8 expansión
X 1 0 0 0 1 X X Banco 9 expansión
X 1 0 0 1 0 X X Banco 10 expansión
X 1 0 0 1 1 X X Banco 11 expansión
X 1 1 0 0 0 X X Banco 12 expansión
X 1 1 0 0 1 X X Banco 13 expansión
X 1 1 0 1 0 X X Banco 14 expansión
X 1 1 0 1 1 X X Banco 15 expansión
En el bit 4 tienes
1: Banco principal (800XL, 65XE y 130XE)
0: Banco secundario (130XE y Expansion 256K)
Los bits 5 y 6 tienen distinta interpretación dependiendo si es 130XE o 256K. Específicamente en la expansión de 256K sirven para acceder a los bancos 4 en adelante. Los que van desde al 0 al 3 son los compatibles con 130XE y como puedes ver, los bits 5 y 6 quedan como 0 0 en ese caso.
Saludos
Re: ATARI -¿Crear un cain para expansion de 800xl?
es un juego exclusivo para cargar para un 130xe o expansion 800xl via cassette , es GOONIES se lo dejo adjunto para que vea, te mando el xex, te lo dejo de mi página mejor, aca no me deja adjuntar archivos
GOONIES130xe
GOONIES130xe
Re: ATARI -¿Crear un cain para expansion de 800xl?
Ahh buena!
Mira, le di un vistazo y no me carga en el emulador. Pero si puedo ver que no sería necesario modificar el cargador, ya que la forma en que carga los bloques se va encargando del cambio de banco de memoria.
Eso si, deberás modificar el basic y la parte de grabación en código de máquina del CAIN para que soporte más de 64KB
Saludos
--
Franco
Mira, le di un vistazo y no me carga en el emulador. Pero si puedo ver que no sería necesario modificar el cargador, ya que la forma en que carga los bloques se va encargando del cambio de banco de memoria.
Eso si, deberás modificar el basic y la parte de grabación en código de máquina del CAIN para que soporte más de 64KB
Saludos
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
Corrección.. ahora si cargó. Cuando era chico no entendí el juego, pero ahora que lo veo, se ve muy interesante!
Re: ATARI -¿Crear un cain para expansion de 800xl?
Revisé el juego Goonies versión XEX de 72670 bytes y descubrí lo siguiente:
Por lo tanto, se observa que cada tramo de datos viene precedido de $FFFF (bytes 255, 255), que usualmente sólo se encuentra en los 2 primeros bytes del archivo, pero no está prohibido que vayan entre bloques. Esto permite concatenar binarios y que corran igual. Es más, recuerdo que el ensamblador MAC/65 genera todo el binario con cabeceras completas cada 256 bytes.
Sin conocer el código de CAIN (ninguna versión), me da la impresión que tal vez no esté ignorando esas cabezeras intermedias, y, por ejemplo, está pensando en cargar (38656-65535+1)=-26878 bytes en lugar de (39167-38656+1)=512 bytes. Si ese es el valor que está metiendo en la variable L que comentaban, puede ser la causa del error 3 en BASIC.
Y yendo más allá, me puse a revisar el resto, sacando la siguiente información:
El programa carga una rutina de inicialización en la página $BB, es decir, en el área de la pantalla cuando no hay BASIC, y luego llama a esa rutina que pone una presentación, para luego retomar la carga. En ese punto debió haber un pito lento.
Después carga 2 trozos más de código o data consecutiva en memoria (512+120=632 bytes) en la página $97.
A continuación comienza a cargar los 4 bancos de memoria del 130XE. Este banco se ubica en la página $40 y lo accede cargando previamente 1 byte en la dirección $D301 (54017). Cada banco mete hasta 16K de datos y/o código, es decir hasta justo antes de la página $80. Qué porción de código carga en qué banco se puede deducir de los bits que arriba se muestran. No tengo claro si sea necesario meter un pito lento al final de cada bloque donde se hace el cambio de banco.
El último cambio de banco es para volver a la memoria normal, y de ese espacio sólo carga a partir de la página $60 (desde la mitad), pero sigue de largo hasta justo antes de la primera data que cargó después de la presentación, 14K en total.
Luego carga otro bloque de 6K a partir de la página $17 hasat justo antes de la página $2F.
El proceso termina cargando código 43 bytes en la página $06 y le pasa el control. De ahí parte el juego...
NOTA: Cuando hablo de "página" de memoria $XX, me refiero que los datos se cargan a partir de la dirección $XX00, que en decimal corresponde a la dirección de memoria del byte equivalente pero multiplicado por 256.
En resumen, para poder cargar correctamente, el loader de CAIN no puede estar ubicado en ninguno de los rangos de memoria mencionados en la lista de arriba. Por lo tanto, le quedan disponibles desde la página $07 hasta la $16 (4 kilos) y desde la $30 a la $3F (otros 4 kilos). Ambas zonas son usuales para cargadores (incluyendo el DOS, pero no lo he probado).
Espero que sirva la info...
Código: Seleccionar todo
65535 [$FFFF] (binhead)
47872-48089 [$BB00-$BBD9] (218) PROG/DATA
738-739 [$02E2-$02E3] (2) -> 47872 [$BB00]
65535 [$FFFF] (binhead)
38656-39167 [$9700-$98FF] (512) PROG/DATA
65535 [$FFFF] (binhead)
39424-39543 [$9A00-$9A77] (120) PROG/DATA
54017-54017 [$D301-$D301] (1) $E3 "11100011"
65535 [$FFFF] (binhead)
16384-31487 [$4000-$7AFF] (15104) PROG/DATA
54017-54017 [$D301-$D301] (1) $E7 "11100111"
65535 [$FFFF] (binhead)
16384-27135 [$4000-$69FF] (10752) PROG/DATA
54017-54017 [$D301-$D301] (1) $EB "11101011"
65535 [$FFFF] (binhead)
16384-32383 [$4000-$7E7F] (16000) PROG/DATA
54017-54017 [$D301-$D301] (1) $EF "11101111"
65535 [$FFFF] (binhead)
16384-25983 [$4000-$657F] (9600) PROG/DATA
54017-54017 [$D301-$D301] (1) $FF "11111111"
65535 [$FFFF] (binhead)
24576-38655 [$6000-$96FF] (14080) PROG/DATA
65535 [$FFFF] (binhead)
5888-12031 [$1700-$2EFF] (6144) PROG/DATA
65535 [$FFFF] (binhead)
1536-1578 [$0600-$062A] (43) PROG/DATA
736-737 [$02E0-$02E1] (2) -> 1536 [$0600]
Sin conocer el código de CAIN (ninguna versión), me da la impresión que tal vez no esté ignorando esas cabezeras intermedias, y, por ejemplo, está pensando en cargar (38656-65535+1)=-26878 bytes en lugar de (39167-38656+1)=512 bytes. Si ese es el valor que está metiendo en la variable L que comentaban, puede ser la causa del error 3 en BASIC.
Y yendo más allá, me puse a revisar el resto, sacando la siguiente información:
El programa carga una rutina de inicialización en la página $BB, es decir, en el área de la pantalla cuando no hay BASIC, y luego llama a esa rutina que pone una presentación, para luego retomar la carga. En ese punto debió haber un pito lento.
Después carga 2 trozos más de código o data consecutiva en memoria (512+120=632 bytes) en la página $97.
A continuación comienza a cargar los 4 bancos de memoria del 130XE. Este banco se ubica en la página $40 y lo accede cargando previamente 1 byte en la dirección $D301 (54017). Cada banco mete hasta 16K de datos y/o código, es decir hasta justo antes de la página $80. Qué porción de código carga en qué banco se puede deducir de los bits que arriba se muestran. No tengo claro si sea necesario meter un pito lento al final de cada bloque donde se hace el cambio de banco.
El último cambio de banco es para volver a la memoria normal, y de ese espacio sólo carga a partir de la página $60 (desde la mitad), pero sigue de largo hasta justo antes de la primera data que cargó después de la presentación, 14K en total.
Luego carga otro bloque de 6K a partir de la página $17 hasat justo antes de la página $2F.
El proceso termina cargando código 43 bytes en la página $06 y le pasa el control. De ahí parte el juego...
NOTA: Cuando hablo de "página" de memoria $XX, me refiero que los datos se cargan a partir de la dirección $XX00, que en decimal corresponde a la dirección de memoria del byte equivalente pero multiplicado por 256.
En resumen, para poder cargar correctamente, el loader de CAIN no puede estar ubicado en ninguno de los rangos de memoria mencionados en la lista de arriba. Por lo tanto, le quedan disponibles desde la página $07 hasta la $16 (4 kilos) y desde la $30 a la $3F (otros 4 kilos). Ambas zonas son usuales para cargadores (incluyendo el DOS, pero no lo he probado).
Espero que sirva la info...
Re: ATARI -¿Crear un cain para expansion de 800xl?
Vaya, veo que franco respondió mientras hacía mi análisis...
Pero sigue siendo válido... que se asegure dogdark que esté usando una versión de CAIN que ignore los $FF,$FF de entremedio... (si existiese una versión que no los ignore).
Pero sigue siendo válido... que se asegure dogdark que esté usando una versión de CAIN que ignore los $FF,$FF de entremedio... (si existiese una versión que no los ignore).
Re: ATARI -¿Crear un cain para expansion de 800xl?
yo estaba revisando la version cain la primera, el cainII y el cainIII ni los e tocado, la idea era experimentar con el primer cain para ver si funcionaba. Cuando comenze las pruebas, el juego siempre me cargo en la memoria del atari, nunca e tenio problemas usando el byte 4 tal como esta el poke, 1015 POKE 54017,221+4*JJ por ende no veia qu habia que cambiarlo, el problema se sucita al traspaso del juego desde el atari hacia el cassette, probare con pasar la imagen de los copiadores de nuevo a un disco y probare con el goonie, y les cuento. armando atari de nuevo. jijijij
Re: ATARI -¿Crear un cain para expansion de 800xl?
Si, si ignora esos marcadores. Extracto del código del cargador:vitoco escribió:Vaya, veo que franco respondió mientras hacía mi análisis...
Pero sigue siendo válido... que se asegure dogdark que esté usando una versión de CAIN que ignore los $FF,$FF de entremedio... (si existiese una versión que no los ignore).
Código: Seleccionar todo
NEXT_EXE_BLOCK:
JSR 2085
STA 2018
JSR 2085
STA 2019
AND 2018
CMP #255
BEQ NEXT_EXE_BLOCK
Los "pitos lentos" se insertan automáticamente cuando se detecta que hay una carga que afecta los vectores de ejecución.
Esto es parte de la rutina de grabación:
Código: Seleccionar todo
putbyte: ; 8285
LDY #0
LDA ($bufptr),Y
JSR writebyte
LDA $blockstart
CMP #226
BNE not_exec_block
LDA $blockstart+1
CMP #2
BNE not_exec_block
; Encontró un bloque ejecutable. Alarga pausa?
LDA #240
STA delayflag
not_exec_block:
Saludos
--
Franco
Re: ATARI -¿Crear un cain para expansion de 800xl?
Me refiero a que sea el grabador el que los ignore... ¿No es ahí donde está la variable L en el USR y da error 3?fcatrin escribió:Si, si ignora esos marcadores. Extracto del código del cargador:
Re: ATARI -¿Crear un cain para expansion de 800xl?
me sigue saliendo el error 3 es ese el problema y va directamente con el usr
Re: ATARI -¿Crear un cain para expansion de 800xl?
No, el grabador interpreta el contenido al mínimo, la copia es prácticamente un dump "raw" del original. Sólo interpreta para saber si tiene que poner o no un "pito lento" como indiqué más arriba.vitoco escribió:Me refiero a que sea el grabador el que los ignore... ¿No es ahí donde está la variable L en el USR y da error 3?fcatrin escribió:Si, si ignora esos marcadores. Extracto del código del cargador:
Ahora vamos con el L y el error 3...