Nestor Soriano escribió:
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.
Pues eso habia hecho, pero entonces:
?ASlink-Warning-Undefined Global __moduint_rrx_s referenced by module printf
?ASlink-Warning-Undefined Global __divuint_rrx_s referenced by module printf
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.