Autor Tema: Empezando con ensamblador  (Leído 52059 veces)

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13698
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Empezando con ensamblador
« Respuesta #30 en: Junio 04, 2012, 08:32:06 »
¿El dasm hace lo mismo que Python con la tabulacion??
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

Manu

  • Commodoremaníaco
  • ****
  • Mensajes: 118
  • SYS 0
    • Ver Perfil
    • Manuel Sagra
Re:Empezando con ensamblador
« Respuesta #31 en: Junio 04, 2012, 10:22:13 »
Algo similar sí, aunque no es tan exigente :)
The legend will never die

Zonacas

  • Commodoremaníaco
  • ****
  • Mensajes: 111
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #32 en: Junio 06, 2012, 13:49:40 »
He copiado el texto tal cual esta en el tutorial...

    processor   6502
    org    $1000

loop:    inc $d021
             jmp loop

y ahora compila perfecto, no da error

pero cuando pongo sys 4096 en el emulador...

no hace nada :o

Manu

  • Commodoremaníaco
  • ****
  • Mensajes: 118
  • SYS 0
    • Ver Perfil
    • Manuel Sagra
Re:Empezando con ensamblador
« Respuesta #33 en: Junio 07, 2012, 09:09:11 »
¿Y has cargado el emulador con x64 PROGRAMA.prg? Es raro, a mí me salen las rayitas :P
The legend will never die

Zonacas

  • Commodoremaníaco
  • ****
  • Mensajes: 111
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #34 en: Junio 07, 2012, 10:34:54 »
vale, después de hacer muchas pruebas ya lo he conseguido :D

ponía esto copiado del tutorial, ahí tiene como varios espacios..

Código: [Seleccionar]
     processor   6502
    org    $1000

loop:    inc $d021
             jmp loop

Compilaba.. pero no funcionaba el SYS 4096

pero poniendo sólo un espacio para en las instrucciones , para el loop no, si que funciona

Código: [Seleccionar]
processor 6502
 org $1000
loop: inc $d021
 jmp loop

Gracias, Si, era un tema de tabulación.
« última modificación: Junio 08, 2012, 19:48:46 por josepzin »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 672
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #35 en: Junio 12, 2012, 21:32:10 »
Buenas, esta semana que estoy de vacaciones estoy dandole Al Hierro un poco, la verdad es que este Mini Curso que habeis enlazado esta muy bien, es sencillo y directo, en este sentido me ha interesado muchisimo el tema de cargar una Bitmap (Capitulo 7),.aqui os dejo el enlace especifico...

http://digitalerr0r.wordpress.com/2011/04/30/commodore-64-programming-7-creating-and-rendering-bitmaps/

Incluso he aparcado el Gang-Ed y estoy utilizando el Editor Grafico que recomienda y ya he creado una Bitmap que quiero cargar,...es importante recordar que yo utilizo el 64TASS como Compilador Cruzado...

No se que leches pasa que no soy capaz de arrancar una bitmap, de hecho al compilar el Listado con el 64Tass me alude a "Palabras que no entiende", imagino que seran comandos que no son compatibles con el 64 Tass como por ejemplo el inicio del alojamiento de graficos que si en el curso lo hace como:

ORG    $1FFE   ; para el inicio de bitmap
ORG    $1000   ;inicio de programa

en el 64 Tass esto se haria así:

*=$1FFE
*=$1000

  Pero cambiando esto en el listado me lo compila pero me da luego error en el programa en el emulador...en el listado del curso la carga del archivo de bitmap la llama con:

INCBIN “DCC.PRG”

 A mi esta orden el 64Tass no me la entiende, cambio la que yo utilizo en dicho compilador que es .binary con el nombre de la bitmap que he creado yo con el editor que recomienda quedando de esta forma, pero aun compilado me da error en el programa en el emulador

.BINARY   BITMAP.PRG

Aqui el listado original (que viene en el capitulo 7 que enlazo al principio) y que no consigo compilar con el 64 tass, a ver si alguien me pued decir que tengo que cambiar o me pasa algun listado sencillo de carga de Bitmap que me valga para el 64tass,.

 PROCESSOR 6502
      ORG $1000
              LDA $4710
              STA $D020
              STA $D021
              LDX #$00
LOADDCCIMAGE:
              LDA $3F40,X
              STA $0400,X
              LDA $4040,X
              STA $0500,X
              LDA $4140,X
              STA $0600,X
              LDA $4240,X
              STA $0700,X
              LDA $4328,X
              STA $D800,X
              LDA $4428,X
              STA $D900,X
              LDA $4528,X
              STA $DA00,X                                                                               
              LDA $4628,X
              STA $DB00,X
              INX
              BNE LOADDCCIMAGE

              LDA #$3B
              STA $D011
              LDA #$18
              STA $D016
              LDA #$18
              STA $D018
 LOOP:   JMP LOOP
      ORG $1FFE
 INCBIN "DCC.PRG"

  Hoy llevo todo el dia a puñetazos con esto, cualquier ayuda la agradezco, Muchas Gracias!!! en este correo adjunto la bitmap que quiero cargar y que he creado con el editor que recomienda en el curso.
              

« última modificación: Junio 12, 2012, 21:49:24 por R. INTERNATIONAL »

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #36 en: Junio 13, 2012, 07:38:40 »
Puedes pegar el error que te da? no tengo instalado el 64TASS para poder probar el listado.

De todas formas el error podría estar a la hora de incluir el bitmap, deberías hacer algo así:

Código: [Seleccionar]
*=$1FFE
.binary "bitmap.prg",2

para ignorar los dos primeros bytes de cabecera.

« última modificación: Junio 13, 2012, 07:43:13 por Carlos »

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 672
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #37 en: Junio 13, 2012, 08:57:41 »
Si yo compilo el listado tal y como lo ponen en el curso, (que es el listado que adjunte en el post anterior), el 64Tass me da cuatro errores

Assembling file:   original.asm
original.asm:1: General syntax "PROCESSOR 6502"
original.asm:17592186044418: General syntax "ORG $1000"
original.asm:17592186044451: Double defined org "ORG $1FFE"
original.asm:17592186044452: General syntax "INCBIN "BITMAP.PRG""

Que son las instrucciones a las que aludia enteriormente,...modifico el listado para que el 64Tass me lo entiendo, es decir hago esto:

- Lo de PROCESSOR 6502 lo borro
- Cambio ORG $1000 por *=$1000
- Cambio ORG $1FFE por *=$1FFE
- Cambio INCBIN "BITMAP.PRG" por .BINARY "BITMAP.PRG" o por .BINARY "BITMAP.PRG",2

 Hecho esto el 64Tass entonces si me lo compila con exito, pero cuando arranco en el emulador si bien no me da ya error como antes, se me queda que no hace nada, aun tecleando RUN, LIST o lo que sea

  Aqui dejo una foto en la que se ve el NotePad con el Listado y las modificaciones, tambien se ve el Simbolo del Sistema con el Programa recien compilado y luego se ve en el emulador funcionando, pero no hace nada (pulsando sobre la foto con boton izquierdo se amplia un poco)..


  SALUDOS.
« última modificación: Junio 13, 2012, 09:00:25 por R. INTERNATIONAL »

Laddh

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 240
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #38 en: Junio 13, 2012, 09:37:39 »
Has probado a arrancarlo con SYS 4096 desde el emulador?

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #39 en: Junio 13, 2012, 11:03:05 »
Has probado a arrancarlo con SYS 4096 desde el emulador?

Como dice Laddh, estas colocando el código del programa en la dirección $1000 por lo que para ejecutarlo desde BASIC deberías poner SYS 4096 (que es $1000 en decimal).

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 672
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #40 en: Junio 13, 2012, 13:42:18 »
SOLUCIONADO!!!,lo habia hecho bien..simplemente era eso, el programa no se autoarrancaba!!, tecleando SYS 4096, el programa arranca!!,...solo me queda una ultima pregunta,..¿que agrego al programa para que se arranque solo al cargarlo y no tenga que teclear el sys 4096...

Os copio pego la cabecera de otro programa que tengo que arranca solo, quizas agregandole alguna linea de él, consigo que la bitmap se vea automatica sin llamarla con SYS!!!

   *=$0801         ; INICIO BASIC
   .WORD   NEXT,10      ; PUNTERO SIGUIENTE LINEA Y NUM. LINEA 10
   .NULL   $9E,^START   ; SENTENCIA "SYS START" (START=INICIO C.M.)
NEXT   .WORD   0      ; FIN DE PROGRAMA BASIC
   .INCLUDE   HARDWARE.INC   ;DIRECTIVA CON ETIQUETAS
   *=$2000         ; INICIO GRAFICOS
;    CARGA GRAFICOS
   .BINARY   SPRITES.BIN   ; BANCO DE SPRITES
   .BINARY   CHARS.RAW   ; BANCO DE CARACTERES

;   VARIABLES (DEFINIDAS CON ".BYTE" O ".WORD" SEGUN OCUPEN 1 O 2 BYTES)
FRAMES   .BYTE   0   ; CONTADOR DE FRAMES DE VIDEO

;    START
   START   SEI      ; DESHABILITAR INTERRUPCIONES

  Me contais y muchas gracias, a ver si hoy puedo ingresar la rutina de carga de bitmap en otro programa y puedo enseñaros ya algo de mis humildes avances en ensamblador...

  Una ultima cosa Carlos en relacion a la resta de los dos primeros bytes, si te fijas la posicion de carga de graficos esta en $2000 y desde el programa original se la llama en

ORG $1FFE (*=$1FFE en el 64Tass)

Esto es asi porque esos dos bytes ya van restados...

$2000-$02=$1FFE   no me hizo falta teclearlo así:    .BINARY "BITMAP.PRG",2

Bueno, lo dicho, a ver si os puedo mostrar algo hoy y a ver si sabe alguien que incluyo en el listado para que arranque automatico sin necesidad de teclear el SYS, tambien me estoy dando cuenta de una ultima cosa,..cuando meta esa rutina de carga de bitmap en otro programa tendre que eliminar la linea

LOOP:   JMP LOOP

  Para que una vez mostrada el programa no se me quede "colgado" y continue su curso animando sprites y todo el tinglado que contenga.

  AL HIERRO!!!
« última modificación: Junio 13, 2012, 16:45:41 por R. INTERNATIONAL »

josepzin

  • Administrador
  • Commodore Master
  • *****
  • Mensajes: 13698
  • Commodoreador web
    • Ver Perfil
    • Mi blog
Re:Empezando con ensamblador
« Respuesta #41 en: Junio 13, 2012, 14:43:40 »
¡Que ganas de ponerme a hacer algo de todo esto!!

Me alegro verte de nuevo por aquí, Raúl.

Un consejo, si al código lo marcas como "código" se ve mucho mejor (es el ícono #)
www.retroinvaders.com | www.commodoreplus.org  | josepzin.blogspot.com

R. INTERNATIONAL

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 672
  • THE NEW IRON AGE HAS COME!!
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #42 en: Junio 13, 2012, 15:59:40 »
Ya que estoy aquí os dejo otra pregunta con permiso de la moderacion,..resulta que al insertar la rutina de carga de bitmap en un programa me he dado cuenta que la bitmap se comienza a hubicar en la posicion $2000 (8192) que es la misma donde yo ponia los Sprites (que solo son 4)
Lo que quiere decir que tengo que mover los sprites,..el programa por otro lado se inicia en la posicion $801 (2049, que creo que esta bien),..el caso es que no se donde poner los Sprites ahora, tendria dos opciones:
- comerme cuatro bloques del bufer de cassette (lo que son 4 sprites) desde la posicion $400 (1024) hacia atras,..utilizando como punteros de sprites los bloques: 16,15,14,13
- llevarlos al Banco 1, pero no se como direccionar los punteros en este banco o si necesita alguna rutina adicional
- o buscarles algun sitio en el Banco 0 donde entre todo, el programa, la bitmap y los sprites

  Bueno me contais, adjunto foto orientativa...



AL HIERRO!!!
« última modificación: Junio 13, 2012, 22:40:57 por R. INTERNATIONAL »

Manu

  • Commodoremaníaco
  • ****
  • Mensajes: 118
  • SYS 0
    • Ver Perfil
    • Manuel Sagra
Re:Empezando con ensamblador
« Respuesta #43 en: Junio 14, 2012, 08:51:55 »
A ver, varias cosas :)

Para que se auto arranque, tienes que hacer algo así (te pongo la sintaxis dasm):

Código: [Seleccionar]
  .org $800
   
; make a SYS call in BASIC to start the intro (10 SYS2061)
  .byte $0
  .word $080b ; pointer to the next instruction
  .word $0a ; 10
  .byte $9e ; SYS
  .byte $34 ; 4
  .byte $30 ; 0
  .byte $39 ; 9
  .byte $36 ; 6
  .byte 0
  .byte 0,0 ; end ($080b)

Esto hace que se añada un listado de basic que luego se autoejecuta en emuladores como Vice al cargar el PRG.

Los sprites o los colocas después de la imagen (y luego los referencias los punteros adecuados), o en otro banco (pero es más movida). Tendrás que tocar el registro en $d018 adecuadamente.

En cuanto al jmp loop, si lo haces todo por interrupciones de raster no hay que quitarlo.
The legend will never die

Carlos

  • Desarrolladores
  • Commodore Master
  • ******
  • Mensajes: 652
    • Ver Perfil
Re:Empezando con ensamblador
« Respuesta #44 en: Junio 14, 2012, 09:23:57 »
A ver, el tema de la ubicación de los sprites....

El chip gráfico (VIC-II) del C64 solo es capaz de 'ver' 16k de la memoria total de 64k que tiene la máquina, lo bueno es que le puedes decir que 16k quieres que vea. Cada uno de estos bloques de 16k se denomina banco y logicamente hay 4 diferentes (16k x 4 = 64k). Si no me equivoco el banco por defecto es el 0 (los primeros 16k de la máquina).

Citar
bank0: $0000-$3fff   (defecto)
bank1: $4000-$7fff
bank2: $8000-$bfff
bank3: $c000-$ffff

Todo lo que vayas a mostrar por pantalla sea un bitmap, chars o sprites tiene que estar en el mismo banco, no puedes tener el bitmap en un banco y los sprites en otro por ejemplo. El banco que vayas a usar es una de las decisiones de diseño de tu programa, lo normal es usar el bank 1 o el 3 para no interferir con el juego de caracteres de la ROM.

Sí puedes tener bitmap, sprites o caracteres en el rango de memoria de otro banco pero sólo a modo de almacenamiento, en el momento en que desees mostrarlos por pantalla los tienes que llevar al banco que tengas como activo.

Para que no se te solape el bitmap con los sprites pues haz lo que comenta Manu, pon los sprites antes o después del bitmap (pero sin salirte del banco recuerda).

Para cambiar de banco es muy sencillo, sólo tienes que jugar con el registro $dd00 que es el que lo controla.

« última modificación: Junio 14, 2012, 09:26:51 por Carlos »