HispaMSX

Re: [hispamsx] Problemillas con el SDCC

2004-12-08 22:11:27
C:\ProgMSX\SDCC>sdcc -mz80 --code-loc XXX --data-loc YYY --no-std-crt0 
./crt0msx
_msxdos.o ./putchar.o ./getchar.o ./files.o ejfile.c

?ASlink-Warning-Undefined Global _printf referenced by module ejfile

Alguna idea?, eso no esta en stdio??

Una cosa es que el prototipo de la funcion este referenciado en stdio.h
(con lo cual el compilador sabe cuales son sus parametros de entrada y
el tipo de valor devuelto), y otra cosa es que enlaces el fichero que
contiene la implementacion de la funcion (printf.o) a la hora de crear
el ejecutable.

Te falta el segundo paso. Para ello puedes anyadir ./printf.o a la linea
de comandos al compilar (acuerdate de usar el printf.o que incluyo con
inlib). Pero para mayor comodidad es mejor anyadir este fichero a la
libreria estandar z80.lib, asi el fichero se enlazara automaticamente.
Para ello copia printf.o al directorio sdcc/lib/z80 y ejecuta: "sdcclib
-a z80.lib printf.o". Y mejor haz lo mismo tambien con el putchar,o.

Te faltara tambien un puts.o. Si la memoria no me f@lla, este codigo
dara el pego, grabalo como puts.asm, compilalo con: "as-z80 -go puts.o
puts.asm", e insertalo en z80.lib como con los otros ficheros:

;void puts(char* str)

_puts::
        ld      ix,#4
        add     ix,sp
        ld      l,(ix)
        ld      h,1(ix)
puts2:  ld      a,(hl)
        or      a
        ret     z
        ld      e,a
        ld      c,#2
        push    hl
        call    5
        pop     hl
        inc     hl
        jr      puts2

E insisto: tienes que usar el crt0_msxdos_advanced que hay en la pagina
de Avelino. Compilalo con: "as-z80 -go crto0_msxdos_advanced.o
crt0_msxdos_advanced.s".

Hala, espero que esto solucione todos tus problemas. :-)

Voy a ir sacando los libros de C....

Pegale un repasillo que a veces tiene sus truqillos.

-- 
Nestor Soriano <konamiman(_en_)konamiman(_punto_)com>


<Anterior en la conversación] Conversación actual [Siguiente en la conversación>