(ATARI) consulta assembler mac65

Software y Juegos para retro-computadores, bueeeno... casi puros juegos :-)
Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Jue Oct 15, 2015 4:36 pm

vitoco, realice varios cambios respecto al código, de a poco se va armando la cosa, lo deje solo en dos páginas en la $3000, que según esta información que encontré,

Imagen

es la única página que me quedaría limpia para poder trabajar por que desde la $4000 hasta la $FFFF, la ocuparía la generación de la memoria y la $0600 por que me aconsejo que la rutina debe ir ahí.

si revisamos el código, ya mas ordenado todo empieza con la carga del kernel, en la $3000 y después el código de memoria en $0600. donde comienza en INICIO con un GR 0, para limpiar la pantalla, después imprimo un mensaje par ver si funciona el kernel, uso un jsr para llamar la rutina de memoria y volver a imprimir un mensaje de bancos cargados. todo va bien hasta antes del jsr después cuando retorna, todo mal. te dejo el código y una imagen de como se ve al ejecutar.

Imagen

Código: Seleccionar todo

0100 ;SAVE#D:DOG2.ASM
0110 ;ASM,#P:,#D:DOG2.EXE
0120     .OPT LIST
0130     *=  $3000
0140     .INCLUDE #D:KERNEL.M65
0150 INICIO
0160      GR  0
0170      POKE  710,4
0180      POKE  712,4
0190      POS  0,0
0200      PRINT  "CARGO BANCOS"
0210     JSR MEMORIA
0220      POS  0,2
0230      PRINT  "BANCOS CARGADOS"
0240     RTS 
0250     *=  $0600
0260 MAX =   16
0270 M
0280     .BYTE MAX
0290 B
0300     .BYTE 177,161,165,169,173,193,197,201,205,225,229,233,237,129,133,137,141
0310 MEMORIA
0320     LDY #MAX
0330 NEXT3
0340     LDA B,Y
0350     STA 54017
0360     STA 22222
0370     DEY 
0380     BMI NEXT3
0390     LDY #1
0400 NEXT4
0410     LDA B,Y
0420     STA 54017
0430     CMP 22222
0440     BNE DISTINTO
0450     INY 
0460     CPY #MAX+1
0470     BNE NEXT4
0480 DISTINTO
0490     DEY 
0500     STY M
0510     LDA B
0520     STA 54017
0530     RTS 
0540     *=  $02E0
0550     .WORD INICIO


Avatar de Usuario
vitoco
Mensajes: 1970
Registrado: Lun Ene 28, 2013 5:47 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por vitoco » Vie Oct 16, 2015 10:07 am

La rutina necesita estar en una dirección fija porque usa una tabla con los valores para PORTB (54017), y en BASIC se recomienda usar el rango $600-$6FF para eso, pero cuando la incluyes en un programa ASM, no necesita estar ahí, si el programa completo ya está en direcciones fijas.

En la gráfica de la memoria no se muestra el rango $4000-$7FFF para el acceso a los bancos de memoria expandida, y el rando $D000-$DFFF está ocupado por la ROM en los XL/XE (ahí se incluye además el 2do set de caracteres con las letras acentuadas en lugar de gráficos).

Por lo que veo, el problema estaría siendo generado por la rutina para probar los bancos, y trazando a mano tu fuente en Assembler, no le pillo nada malo aparte del CMP que ya corregiste.

¿Podrías compartir el XEX para depurarlo en el emulador? Ojalá con el fuente para estar seguro de cómo se expandieron las macros y rutinas de KERNEL.M65. También sería útil el log de la compilación, eso se obtiene con:

Código: Seleccionar todo

ASM,#D:DOG2.LST,#D:DOG2.EXE

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Vie Oct 16, 2015 10:25 pm

lo primero maestro, trate de compilar el archivo con el comando que me dio, pero con .LST se llena el disco y no termina, te adjunto el atr donde tengo los archivos para que te hagas una idea, e incluso con un disco virgen tampoco alcanza el LST.
Adjuntos
dog2.zip
dog2.asm
(49.28 KiB) Descargado 115 veces

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Sab Oct 17, 2015 11:31 am

estuve realizando algunas pruebas por ahí por allá y me encontré con el problema con el kernel vitoco, resulta que si realizas una operación matemática dentro de un mismo label, incluyendo los prinum y print, no tienes problema alguno, pero si haces un label inicio donde colocas los print y prinum, después aplicas un jsr para un label de calcular donde estará la operación matemática, queda el despelote, se cuelga, ahora comparando con el código tuyo, que no encontre error alguno, juntando al kernel, este ultimo da problema, no la validación de memoria.

ej

código con error

Código: Seleccionar todo

0120     .OPT LIST
0130     *=  $4000
0140     .INCLUDE #D:KERNEL.M65
0150 VAL1 =  160
0160 VAL2 =  100
0170 VAL3 =  10
0180 VAL4 =  384
0190 RESULTADO .WORD 0
0200 INICIO
0210      GR  0
0220      POKE  710,0
0230      POKE  709,14
0240      POS  0,0
0250      PRINUM  0,VAL1,6
0260      POS  0,2
0270      PRINUM  0,VAL2,6
0280      POS  0,4
0290      PRINUM  0,VAL4,6
0300     JSR CALCULO
0310      PRINUM  0,RESULTADO,6
0320     RTS
0330     *=  $02E0
0340     .WORD INICIO
0350 CALCULO
0360      CALC  VAL1
0370      MUL  VAL2
0380      STORE  RESULTADO
0390     RTS
sin error

Código: Seleccionar todo

0120     .OPT LIST
0130     *=  $4000
0140     .INCLUDE #D:KERNEL.M65
0150 VAL1 =  160
0160 VAL2 =  100
0170 VAL3 =  10
0180 VAL4 =  384
0190 RESULTADO .WORD 0
0200 INICIO
0210      GR  0
0220      POKE  710,0
0230      POKE  709,14
0240      POS  0,0
0250      PRINUM  0,VAL1,6
0260      POS  0,2
0270      PRINUM  0,VAL2,6
0280      POS  0,4
0290      PRINUM  0,VAL4,6
0300      CALC  VAL1
0301      MUL  VAL2
0302      STORE  RESULTADO
0310      PRINUM  0,RESULTADO,6
0320     RTS
0330     *=  $02E0
0340     .WORD INICIO
Interesante!!!.

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Dom Feb 19, 2017 3:44 pm

Tengo la siguiente duda, el bmi no cumple con la función correspondiente.

Código: Seleccionar todo

                           *=$8000
;RESERVAMOS MEMORIA PARA DATOS EN $2000

CBANCO=$2000		;1 BIT - CANTIDAD DE BANCOS
TBANK=$2001		;3 BIT - CANTIDAD DE BANCOS
			;EN ASCII $2001 - $2003
DBANK=$2004		;17 BIT - DIRECCION BANCOS 
			;DISPONIBLES A USAR DESDE 177 A 141
			;$2002 - $2014
CBYTES=$2015		;3 BIT - CANTIDAD DE BYTES
			;$2015 - $2017
TBYTES=$2018		;8 BIT - CANTIDAD DE BYTES ASCII
			;$2018 - 201F
VOLATIL=$2019		;VARIABLES VARIAS ENTRE 0-255 PARA SUMAS, RESTAS ETC

MAX=16

B	.BYTE 177,161,165,169,173,193,197,201,205,225,229,233,237,129,133,137,141


LIMPIO
	LDA #'}
	JSR $F2B0
	RTS

;RESETEO BANCOS
INICIO
	LDX #0
	
RESETEO
	LDA #48		;32 SPACE BAR - 48 0
	STA CBANCO,X
	INX
	CPX #255
	BEQ SIGO
	JMP RESETEO
SIGO
	JSR LIMPIO
;INGRESAMOS EOL
	LDA #155
	STA $2003
	LDA #155
	STA $201F
;BUSCO CANTIDAD DE BANCOS DE MEMORIA
MEMORIA
	LDY #MAX
BUSCO1
	LDA B,Y
	STA 54017
	STA 22222
	STA CBANCO
	DEY
	BMI BUSCO1
	
MUESTRO
;MOSTRAMOS EL VALOR DE BANCO
	LDA #171
	STA 54017
	LDX #<CBANCO
	LDY #>CBANCO
	JSR $C642
LOOP
	JMP LOOP
	*=$2E0
	.WORD INICIO

;00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
;10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F
explico. Todo esta en memoria $8000, y en la $2000 en adelante reservo para aplicar varias cosas, en el $2000 lo estoy usando momentáneamente para ver la cantidad de bancos que se pueden encontrar. vamos a la parte de la duda el código comienza en el label memoria, donde cargo el valor 16 en el acumulador Y, por lo tanto con eso registraremos el ultimo banco activo en 22222, pero que me pasa, si supuestamente el banco no existe el BMI debería volver a realizar la operacion para bajar y buscar otro banco, o sea si no existe 141, debería buscar el 137, y asi hasta encontrar uno valido y continuar con la operación, pero el BMI no cumple con la función de volver a BUSCAR1, si no que sigue de largo. ¿Alguna idea muchachos?.....

Avatar de Usuario
vitoco
Mensajes: 1970
Registrado: Lun Ene 28, 2013 5:47 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por vitoco » Dom Feb 19, 2017 4:52 pm

Creo que no es BMI lo que debes usar ahí. En ese contexto dice que vuelve a buscar el siguiente banco sólo cuando ya intentaste el último. Cuec! Error mío en el post antiguo. Mirando el código basic asociado parece que debiera ser BPL.

Ojo que estoy mirando en el fono con tapatalk y no he probado nada ni revisado la rutina que usé en SITRE.

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Dom Feb 19, 2017 5:08 pm

En el caso de BMI, pasa de largo por tanto 22222 queda con el byte 141, cuando uso el BPL, este si produce el bucle pero no se detiene en el caso de memoria rambo, etc byte 237, y en 130xe byte 173, sigue hasta la 177, como si existieran todos como bancos. no se si sera problemas de emulación(ALTIRRA v2.5). Pero usando el XMEM, si funciona. :mmmsi: . Gracias por responder maestro Vitoco.

Avatar de Usuario
vitoco
Mensajes: 1970
Registrado: Lun Ene 28, 2013 5:47 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por vitoco » Dom Feb 19, 2017 10:21 pm

Ojo que si quieres determinar la memoria disponible, necesitas 2 bucles: uno para poner valores en memoria y otro para leer y validar que aún esté lo que pusiste en el primer bucle. Tu rutina sólo tiene el primero.

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Dom Feb 19, 2017 10:29 pm

vitoco escribió:Ojo que si quieres determinar la memoria disponible, necesitas 2 bucles: uno para poner valores en memoria y otro para leer y validar que aún esté lo que pusiste en el primer bucle. Tu rutina sólo tiene el primero.
si vitoco. solo tengo el primero para poder limpiar y determinar la cantidad de bancos que quedarian. por ejemplo si son 17 bytes que tengo que revisar. en el primer bucle debo de eliminar los que no necesito, entonces si uso la memoria rambo son 4 los que quedan afuera y si es 130xe son 12. los quedan afuera. por lo tanto el cbanco si es rambo. debe ser 13. y despues creo el segundo bucle donde ya teniendo el valor empiezo a agregar desde el banco 0 que seria 177 hasta que se cumpla hasta el ultimo bit, 130XE - 173 RAMBO - 237. Y esos van en Dbank. pero si no logro el primer bucle. imposible hacer el segundo.

Avatar de Usuario
dogdark
Mensajes: 594
Registrado: Lun Mar 04, 2013 1:36 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por dogdark » Dom Feb 19, 2017 10:54 pm

Ya vitoco ahora esta funcional.

Código: Seleccionar todo

	*=$8000
;RESERVAMOS MEMORIA PARA DATOS EN $2000

CBANCO=$2000		;1 BIT - CANTIDAD DE BANCOS
TBANK=$2001		;3 BIT - CANTIDAD DE BANCOS
			;EN ASCII $2001 - $2003
DBANK=$2004		;17 BIT - DIRECCION BANCOS 
			;DISPONIBLES A USAR DESDE 177 A 141
			;$2002 - $2014
CBYTES=$2015		;3 BIT - CANTIDAD DE BYTES
			;$2015 - $2017
TBYTES=$2018		;8 BIT - CANTIDAD DE BYTES ASCII
			;$2018 - 201F
VOLATIL=$2019		;VARIABLES VARIAS ENTRE 0-255 PARA SUMAS, RESTAS ETC
DAT00
	.BYTE "PROBANDO BANCOS",$9B
MAX=16
;ASCII        1IN 
B	.BYTE 177,161,165,169,173,193,197,201,205,225,229,233,237,129,133,137,141


LIMPIO
	LDA #'}
	JSR $F2B0
	RTS

;RESETEO BANCOS
INICIO
	LDX #0
	
RESETEO
	LDA #48		;32 SPACE BAR - 48 0
	STA CBANCO,X
	INX
	CPX #255
	BEQ SIGO
	JMP RESETEO
SIGO
	JSR LIMPIO
;INGRESAMOS EOL
	LDA #155
	STA $2003
	LDA #155
	STA $201F
;BUSCO CANTIDAD DE BANCOS DE MEMORIA
MEMORIA
	LDY #MAX
BUSCO1
	LDA B,Y		;Y VALE 16
	STA 54017
	STA 22222
	DEY
	BPL BUSCO1
	LDY #1
BUSCO2
	LDA B,Y
	STA 54017
	CMP 22222
	BNE DISTINTO
	INY
	CPY #MAX+1
	BNE BUSCO2
DISTINTO
	DEY
	STY CBANCO
MUESTRO
;MOSTRAMOS EL VALOR DE BANCO
	
	LDA #171
	STA 54017
	LDX #<DAT00
	LDY #>DAT00
	JSR $C642
	LDX #<CBANCO
	LDY #>CBANCO
	JSR $C642
LOOP
	JMP LOOP
	*=$2E0
	.WORD INICIO
probé con el emulador y funciona

memoria

64k - 0 bancos
128k - 4 bancos
192k - 8 bancos
320k rambo - 16 bancos
320k compy - shop - 8 bancos (a revisar)
576k - 16 bancos (a revisar)
1088k - 16 bancos (a revisar).

gracias maestro por su ayuda.

Avatar de Usuario
vitoco
Mensajes: 1970
Registrado: Lun Ene 28, 2013 5:47 pm
Contactar:

Re: (ATARI) consulta assembler mac65

Mensaje por vitoco » Lun Feb 20, 2017 12:04 am

Para más de 16 bancos tienes que armar lista de todos los valores posibles para el POKE del PORTB y ponerlos ordenados de acuerdo a lo más probable que esté presente en todos los tipos de ampliación que quieras revisar.

En el caso de la rutina que incorporé a SITRE, hice una variación para que se salte los bancos no identificados como tal en vez de abortar al primer banco no identificado.

Responder