Revistas en papel
 Amiga World Nº15 - Noviembre 1990
Anterior
Menú
Logotipo

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

Otra forma de operar con gráficos Amiga World

(Parte III)

Por Francisco Javier Rodríguez

La filosodía seguida en el desarrollo de los ordenadores Amiga, fue la de crear un ordenador personal que facilitase todos los aspectos de comunicación entre la máquina y el usuario. También se encargó, mediante la importante colaboración de Electronic Arts, del desarrollo de un nuevo formato de ficheros gráficos; dicho formato recibió el nombre de IFF (Interchange File Format).

Esta es la última parte de la serie sobre el formato gráfico IFF y el RAW DATA, En éste artículo se encuentra el listado completo con el que podrá convertir sus ficheros IFF en formato RAW DATA (para una carga más rápida de los mismos en sus presentaciones).

Como pequeño comentario del programa decir que el método empleado para realizar la descompresión del fichero IFF es mediante una zona virtual; es decir no se vuelcan los datos directamente a pantalla; sino que ésta operación se realiza una vez descomprimidos todos los datos. Si se realizase el volcado directo a pantalla, no sabríamos cuando llegan los datos a completar la fila de cada BitPlano, por lo que el dibujo quedaría desfigurado.

Ahora es a usted a quien le corresponde seguir indagando y completando el programa según sean sus necesidades; para ello armese de paciencia y con un buen Ensamblador.

Ahora es usted a
quien corresponde
seguir indagando...
armese de
paciencia y con un
buen ensamblador.

A medida que vaya indagando sobre el sistema gráfico del Amiga, y sus posibilidades, irá descubriendo infinidad de recursos con la cual dominará el sistema gráfico y el trabajo con disco (al mismo tiempo que programa en Ensamblador), es la creación de un utilitario para coger partes de un gráfico 'a medida' y salvar éstas a disco en cualquiera de los dos formatos vistos hasta ahora.

Una de las utilidades más prácticas que puede dar el programa publicado en ésta serie de artículos, y si no posee un buen compresor, es la de grabar sus ficheros gráficos mediante éste formato, para que así ocupen menos espacio en sus discos; ya se trate de gráficos o digitalizaciones (si no se encuentran en formato IFF tendrían que realizar unas cuantas variaciones).

Particularmente espero que hayan disfrutado con esta serie de artículos, además de haber comprendido la gestión de los gráficos IFF y su distribución en el fichero.

                    PROGRAMA
'    CONVERTIDOR IFF - RAW DATA  (V1.0) '
'
'
'    (C)  1990 Francisco javier Rodr�guez
'
'    (C)  1990      AMIGA  WORLD
'
'    Programado con: Amiga-500 (2MB)
'    Ensamblador:   DevPack 2.0
OpenLib   = -408
CloseLib  = -414
ExecBase  = 4
Open      = -30
Mode      = 1005
clear     = $10002
Allocmem  = -198
Tama�o    = 32000
Read      =-42
Init:        move.l     execbase,a6
             lea        dosname,a1
             moveq      #0,d0
             jsr        OpenLib(a6)
             move.l     d0,dosBase
             Beq        error
             move.l     d0,a6
             move.l     #name,d1
             move.l     #Mode,d2
             jsr        open(a6)
             move.l     d0,conhandle
             beq        error
error:       rts
             move.l     conhandle,d1
             move.l     #buffer,d2
             move.l     #80,d3
             jsr        read(a6)
Openfichero: move.l     dosBase,a6
             move.l     #buffer,d1
             move.l     #mode,d2
             jsr        open(a6)
             move.l     d0,fichhandle
             beq        error
             move.l     d0,d1
             move.l     #buffer2,d2
             move.l     #32000,d3
             jsr        read(a6)
             beq        error
             lea.l      buffer2,a1
             move.l     #'body',d0
loop1        cmp.l      (a1)+,d0
             bne        loop1
             add.l      #4,a1
             jsr        descomp
             move.l     4,a6
             move.l     #tama�o,d0
             move.l     #clear,d1
             jsr        allocmem(a6)
             move.l     d0,baseplano
             beq        error1
             jsr        initstuff
             move.l     #$4000,d0
             lea        buffer,a0
             move.l     baseplano,a1
la1          move.w     (a0)+,(a1)+
             dbra       d0,la1
loop         btst       #6,$bfe001
             bne.s      loop
             jsr        copend
             move.l     4,a6
             move.l     baseplano,a1
             move.l     #tamano,d0
             jsr        freemem(a6)
fin          rts
initstuff
             clr.l      d0
             move.l     baseplano,d1
             move.w     #$00e0,d2
             move.w     #3,d4
             lea        planos,a0
makecop
             move.w     d2,(a0)+
             swap       d1
             move.w     d1,(a0)+
             add.w      #2,d2
             move.w     d2,(a0)+
             swap       d1
             move.w     d1,(a0)+
             add.w      #2,d2
             add.l      #$2000,d1
             dbf        d4,makecop
             move.w     #$20,$dff09a
             move.w     #-$7c80,$dff096
             lea        copper,a1
             move.l     a1,$dff084
             clr.w      $dff08a
             rts
copend
             move.w     #-$7fe0,$dff09a
             move.w     #$8000,$dff096
             rts
             cnop       0,2
descomp      lea.l     virtual,a0
             move.l    (a1)+,d0
loop2        move.l    (a1)+,d1
             cmp.l     #127,d1
             bmi       nomen
loop3        move.l    (a1)+,(a0)+
             dbf       d1,loop3
nomen        cmp.l     #128,d1
             bpl       loop4
             move.l    d1,(a0)+
             jmp       sigue
             move.l    d0,(a7)+
             move.l    (a1)+,d0
loop4        move.l    (d0),(a0)+
             dbf       d1,loop4
             move.l    (a7)-,d0
             dbf       d0,loop2
             rts
Buffer2:     blk.b     32000
Buffer:      blk.b     80
virtual:     blk.b     32000
dosname:     dc.b "dos.library"
name:        dc.b "CON:20/10/100/200/Mi_ventana",0
             even
dosBase:     dc.l 0
conhandle:   dc.l 0
copper       dc.w  $0100,%0100000000000000
             ds.w  16
             dc.w  $008e,$2c81,$0090,$2cc1
             dc.w  $0092,$0038,$0094,$00d0
             dc.w  $0108,$0040,$010a,$0040
             dc.w  $0180,$000f,$0182,$0eee
             dc.w  $0184,$0bbb,$0186,$0243
             dc.w  $0188,$0499,$018a,$0feb
             dc.w  $ffff,$fffe
coplong      dc.w $0
baseplano:   dc.l 0
baselib:     dc.l 0
filehandle   dc.l 0
nomlib       dc.b "dos.library",0
filename     dc.b "df1:prueba.pc",0
     even
buffer:      ds.w $8000
     even
     end

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal