Bug #16
Error en 03_holaROM
Description
Al intentar compilar el proyecto según el tutorial nos da un error y la ROM generada no funciona:
$ sdcc -mz80 --no-std-crt0 --code-loc 0x4010 --data-loc 0xC000 HelloSC2.c Warning: z80instructionSize() failed to parse line node ld sp, (#0xFC4A) HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'size' HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'address' HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'i' HelloSC2.c:190: warning 59: function 'vpeek' must return value HelloSC2.c:227: warning 59: function 'inkey' must return value HelloSC2.c:239: warning 59: function 'peek' must return value $ hex2bin HelloSC2.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00004010 Highest address = 00004D3A Pad Byte = FF 8-bit Checksum = 6F $ mv HelloSC2.bin HelloSC2.rom $ openmsx HelloSC2.rom Fatal error: Error in "ROM" extension: (uncompressed) ROM image filesize must be a multiple of 8 kB (for this mapper type). $ ls -la total 216 drwxrwxr-x. 2 txinto txinto 4096 sep 9 05:35 . drwxrwxr-x. 3 txinto txinto 4096 sep 5 22:06 .. -rw-rw-r--. 1 txinto txinto 27593 sep 9 05:33 HelloSC2.asm -rw-rw-r--. 1 txinto txinto 6060 sep 9 05:25 HelloSC2.c -rw-rw-r--. 1 txinto txinto 8026 sep 9 05:33 HelloSC2.ihx -rw-rw-r--. 1 txinto txinto 152 sep 9 05:33 HelloSC2.lk -rw-rw-r--. 1 txinto txinto 87706 sep 9 05:33 HelloSC2.lst -rw-rw-r--. 1 txinto txinto 4282 sep 9 05:33 HelloSC2.map -rw-rw-r--. 1 txinto txinto 1172 sep 9 05:33 HelloSC2.noi -rw-rw-r--. 1 txinto txinto 17972 sep 9 05:33 HelloSC2.rel -rw-rw-r--. 1 txinto txinto 3371 sep 9 05:34 HelloSC2.rom -rw-rw-r--. 1 txinto txinto 16384 sep 5 22:28 HelloSC2.rom2 -rw-rw-r--. 1 txinto txinto 16384 abr 13 2010 HelloSC2.rom.old -rw-rw-r--. 1 txinto txinto 3913 sep 9 05:33 HelloSC2.sym
En el listado final, HelloSC2.rom es lo que acabamos de generar, rom2 es el que (creo) que compilé el otro día sin problemas, y rom.old es el que venía con el ejemplo.
¿Alguna idea?
La frase: (al resultado faltaría aplicarle el hex2bin y convertirlo en una ROM de 16k)
¿convertirlo en una ROM de 16k es algún tipo de proceso que no conozco? Si eso fuera así, seguramente tuve un error el otro día y ese rom2 no lo generé yo, sino que seguramente lo copié
History
#1
Updated by Txinto Vaz over 9 years ago
He descubierto las opciones de hex2bin, pero me sale un fichero de 16368 en vez de uno de 16384:
$ hex2bin -l 4000 HelloSC2.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00000010 Highest address = 00003FFF Pad Byte = FF 8-bit Checksum = AA $ ls -la total 228 drwxrwxr-x. 2 txinto txinto 4096 sep 9 05:43 . drwxrwxr-x. 3 txinto txinto 4096 sep 5 22:06 .. -rw-rw-r--. 1 txinto txinto 27593 sep 9 05:33 HelloSC2.asm -rw-rw-r--. 1 txinto txinto 6060 sep 9 05:25 HelloSC2.c -rw-rw-r--. 1 txinto txinto 8026 sep 9 05:33 HelloSC2.ihx -rw-rw-r--. 1 txinto txinto 152 sep 9 05:33 HelloSC2.lk -rw-rw-r--. 1 txinto txinto 87706 sep 9 05:33 HelloSC2.lst -rw-rw-r--. 1 txinto txinto 4282 sep 9 05:33 HelloSC2.map -rw-rw-r--. 1 txinto txinto 1172 sep 9 05:33 HelloSC2.noi -rw-rw-r--. 1 txinto txinto 17972 sep 9 05:33 HelloSC2.rel -rw-rw-r--. 1 txinto txinto 16368 sep 9 05:44 HelloSC2.bin -rw-rw-r--. 1 txinto txinto 16384 sep 5 22:28 HelloSC2.rom2 -rw-rw-r--. 1 txinto txinto 16384 abr 13 2010 HelloSC2.rom.old -rw-rw-r--. 1 txinto txinto 3913 sep 9 05:33 HelloSC2.sym
#2
Updated by Txinto Vaz over 9 years ago
He visto la web de Nerlaska, y sus instrucciones.
http://www.nerlaska.com/msx/PROGRAMAR_MSXROMS_CON_SDCC.rar
(las añado a la sección documentos como document#2)
Él hace lo siguiente:
- hex2bin del fichero
- lo concatena detrás de rom_header.bin
- lo rellena hasta 16384 bytes con una aplicación de él mismo.
El paso 3 ya lo estoy haciendo (creo) con el hex2bin
hex2bin -l 4000 HelloSC2.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00000010 Highest address = 00003FFF Pad Byte = FF 8-bit Checksum = AA
Ahora el tamaño es el que dije antes:
$ ls -la *.bin -rw-rw-r--. 1 txinto txinto 16368 sep 9 06:19 HelloSC2.bin -rw-rw-r--. 1 txinto txinto 16 sep 9 06:09 rom_header.bin
Si lo vuelco veo que ha rellenado por el final:
$ cat HelloSC2.bin ??{J?????W?? ?????*@?7M???!?9!(?9?!9?>?kb#6?kb##6?kb###6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?! 6?! 6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!6?!6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6??!?>?3L?3>?3?L3> ?3??!&??L???L!9?!?K!??L??3?kb????!??=L!9??kb????! ??=L!9??!???!??=L!9?!?K ??! ??L!9??M?????HELLO WORLD!HOLA MUNDO!?~?_?!???~w#?~w#?~w?b??n?f?~?M??n?f?J&o????!?9???N?F?~?w??~?w???V33?~???(1 g??n??f??????4? ?4??~??w?~??w???3???#L?3?????????n?f?N?F??V????!?9???n&))))) ?^?u??t??^?V??F 33? ?~???(%g??n??f??????4? ?4????3???#L?3?????????&o??n?f~&o??n?f?~w????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ..... (como vemos ha rellenado al final) ?????????????????????????
Ahora concateno y vuelvo a comprobar
$ cat rom_header.bin AB@ $ cat rom_header.bin HelloSC2.bin > HelloSC2_1.rom $ cat HelloSC2_1.rom AB@??{J?????W?? ?????*@?7M???!?9!(?9?!9?>?kb#6?kb##6?kb###6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?! 6?! 6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!6?!6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6??!?>?3L?3>?3?L3> ?3??!&??L???L!9?!?K!??L??3?kb????!??=L!9??kb????! ??=L!9??!???!??=L!9?!?K ??! ??L!9??M?????HELLO WORLD!HOLA MUNDO!?~?_?!???~w#?~w#?~w?b??n?f?~?M??n?f?J&o????!?9???N?F?~?w??~?w???V33?~???(1 g??n??f??????4? ?4??~??w?~??w???3???#L?3?????????n?f?N?F??V????!?9???n&))))) ?^?u??t??^?V??F 33? ?~???(%g??n??f??????4? ?4????3???#L?3?????????&o??n?f~&o??n?f?~w?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? .... (y así hasta el final)
Parece que lo ha hecho bien!
Sin embargo el programa no funciona
$ openmsx HelloSC2_1.rom

mientras que si ejecuto el tuyo:
#3
Updated by Txinto Vaz over 9 years ago
Descartado que sea el paso del hex2bin o el paso a 16k (que parece estar bien) todo apunta a que el problema se da durante la compilación. La versión del SDCC que estoy usando es la 3.2.0.
Aquí tenemos un volcado (entero) del original:
$ cat HelloSC2_orig.rom AB@??{J?????O?? ??Gy???,@??D???!?9!(?9?!9MD?i`?CD?? ??????????????????????????????????????????????Áå????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????P??????????????????????????????????????????????????????????????????????????????!?>?3?B?3>?3?B3> ?3!?&??xC??3>O?3!??!!??xC??3?!????!?B?!?!??C??!??! ??C???!9MD!???!??C??! ?!?B?! ??C???D?????HELLO WORLD!HOLA MUNDO!???!?9?~?_??????!?9!???~w#?~w#?~w?b??????!?9?n?f?~?M??????!?9?n?f?J&o??????!?9!??9??~?w??~?w??^?V??w??~ ?w??n??f??n??f?+?u??t?}?(*?n??f?~?w??4? ?4?KB?s?r??~??3???B?3??????????!?9?n?f?N?F??V??????!?9!??9??n&)))))}O|?G?n& ?N?F?u??t???w??~ ?w??n??f??n??f?+?u??t?}?(" ?w??^??V??4? ?4???~??3???B?3????????&o????!?9?n?f~&o??????!?9?n?f?~w?????MD?^#?{?XD~#?OD?FD???hD~#?]D?FD??
Y aquí sólo un trozo del generado por mí:
$ cat HelloSC2_1.rom AB@??{J?????W?? ?????*@?7M???!?9!(?9?!9?>?kb#6?kb##6?kb###6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?! 6?! 6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!6?!6?!6?!6?!6?!6?6?! 6?! 6?! 6?! 6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?!6?! 6?!!6?!"6?!#6?!$6?!%6?!&6?!'6?!(6?!)6?!*6?!+6?!,6?!-6?!.6?!/6?!06?!16?!26?!36?!46?!56?!66?!76?!86?!96?!:6?!;6?!<6?!=6?!>6?!?6?!@6?!A6?!B6?!C6?!D6?!E6?!F6?!G6?!H6?!I6?!J6?!K6?!L6?!M6?!N6?!O6?!P6?!Q6?!R6?!S6?!T6?!U6?!V6?!W6?!X6?!Y6?!Z6?![6?!\6?!]6?!^6?!_6?!`6?!a6?!b6?!c6?!d6?!e6?!f6?!g6?!h6?!i6?!j6?!k6?!l6?!m6?!n6?!o6?!p6?!q6?!r6?!s6?!t6?!u6?!v6?!w6?!x6?!y6?!z6?!{6?!|6?!}6?!~6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!6?!6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6?!?6??!?>?3L?3>?3?L3> ?3??!&??L???L!9?!?K!??L??3?kb????!??=L!9??kb????! ??=L!9??!???!??=L!9?!?K ??! ??L!9??M?????HELLO WORLD!HOLA MUNDO!?~?_?!???~w#?~w#?~w?b??n?f?~?M??n?f?J&o????!?9???N?F?~?w??~?w???V33?~???(1 g??n??f??????4? ?4??~??w?~??w???3???#L?3?????????n?f?N?F??V????!?9???n&))))) ?^?u??t??^?V??F 33? ?~???(%g??n??f??????4? ?4????3???#L?3?????????&o??n?f~&o??n?f?~w??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? ...... (y sigue)
Parece como si un programa careciera de un final de fichero que otro sí tiene (recordemos que tienen la misma longitud)
]$ ls -la *.rom -rw-rw-r--. 1 txinto txinto 16384 sep 9 06:24 HelloSC2_1.rom -rw-rw-r--. 1 txinto txinto 16384 abr 13 2010 HelloSC2_orig.rom
Pero, aparte de eso, el código generado por mí tiene mucho más código al principio antes de llegar a la frase HELLO HORLD!HOLA MUNDO!.
#4
Updated by Txinto Vaz over 9 years ago
- File temp_HelloSC2_zip added
- Assignee changed from aorante mvac7 to Txinto Vaz
- % Done changed from 0 to 50
Después de todas las pesquisas, revisar la información, etc... hemos llegado a la conclusión de que ha habido cambios entre la versión usada en su día por Alberto (2.9.7) y la actual de la distribución oficial de Fedora (3.2.0). Habrá que ver si se debe a algún tipo de error corregido en la más nueva (3.3.0) o de un cambio pensado para quedarse. En éste último caso deberíamos actualizar el código fuente.
A continuación pego extractos de la conversación mantenida con Alberto via e-mail:
El sistema de Nerlaska, que es el que utilizo yo, en realidad es el más engorroso por que hay que añadir externamente la cabecera de la ROM que son 16Bytes: DEFB "AB" ; expansion ROM header DEFW initcode ; start of the init code, 0 if no initcode DEFW callstat; pointer to CALL statement handler, 0 if no such handler DEFW device; pointer to expansion device handler, 0 if no such handler DEFW basic ; pointer to the start of a tokenized basicprogram, 0 if no basicprogram DEFS 6,0 ; room reserved for future extensions http://www.msx.org/forum/msx-talk/general-discussion/header-rom-cartridge Ha de empezar con "AB" y luego ha de tener el initcode que es la dirección de ejecución de nuestro programa. El resto si no se utiliza ha de ser ceros. si utilizas un startup te ahorras todo esto. Cuando hizo el tutorial Nerlaska no se habían creado los startups para ROMs. http://msx.atlantes.org/sdcc_msx/msxsdcc03.zip Una vez compilado, lo que faltará es ampliar el fichero al tamaño de ROM exacto. Alberto
El tema es si a ti también te daba el warning q dice algo como can no parse ld (#0x4...) He mirado los binarios resultantes y creo q mi ihx es muy diferente al q te debió salir a tí. Tú podrías enviarme tu ihx para compararlo? Puede haber diferencias entre tu versión de sdcc y la mía? 3.2.0 Txinto
Warning: z80instructionSize() failed to parse line node ld sp, (#0xFC4A) se corresponde al código: __asm di ld sp, (#0xFC4A) ei __endasm; habrán cambiado algo relacionado con el inline assembler... :P He mirado los binarios resultantes y creo q mi ihx es muy diferente al q te debió salir a tí. te mando los ficheros de salida. Tú podrías enviarme tu ihx para compararlo? Puede haber diferencias entre tu versión de sdcc y la mía? 3.2.0 yo utilizo la 2.9.7 la última es la versión 3.3.0 probé con la ultima pero me dio problemas con mi GUI. Yo redirecciono la salida a un fichero que luego leo y muestro en una caja del GUI. Parece que no funciona y la GUI se queda bloqueada esperando el fichero. Tengo pendiente buscar una solución... Alberto
Muchas gracias, voy a ver si con tu ihx funciona mi copypaste, y luego voy a ver q han cambiado y te informo del resultado. Un saludo!!! Txinto
Comprobado, es el compilador, he hecho los pasos a partir del ihx y ha funcionado como una seda. En cuanto tenga un rato lo documento y así ya sabes hacer ROMs a la Nerlaska con aroma de Linux o Mac. Un saludo! Tx.
#5
Updated by Txinto Vaz over 9 years ago
Investigando en: http://sourceforge.net/p/sdcc/bugs/2142/#328d
Vemos lo siguiente:
The issue with ld is fixed in revision #8451. The issue with uppercase asm remains. Philipp
Nosotros estamos probando la versión 3.2.0 #8008, o sea que seguramente es un bug que se arregla instalando la versión más nueva. Lo intentaremos a continuación.
#6
Updated by Txinto Vaz over 9 years ago
Hemos instalado el 3.3.0, probamos a ver la compilación:
$ make sdcc -D_MSX_CROSS_COMPILER -mz80 --no-std-crt0 --code-loc 0x4010 --data-loc 0xC000 -I .. -I ../../../retrolib/computers/msx/system/include -I ../../../retrolib/computers/msx/targets/rom/include -I ../../../retrolib/computers/msx/versions/msx1/include -I ../../../retrolib/cpus/z80/include -I /usr/share/sdcc/include -o HelloSC2.ihx ../src/HelloSC2.c ../src/HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'size' ../src/HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'address' ../src/HelloSC2.c:131: warning 85: in function mainWindow unreferenced local variable : 'i' ../src/HelloSC2.c:190: warning 59: function 'vpeek' must return value ../src/HelloSC2.c:227: warning 59: function 'inkey' must return value ../src/HelloSC2.c:239: warning 59: function 'peek' must return value $ hex2bin -l 4000 HelloSC2.ihx hex2bin v1.0.10, Copyright (C) 2012 Jacques Pelletier & contributors Lowest address = 00000010 Highest address = 00003FFF Pad Byte = FF 8-bit Checksum = 97
Ya no sale el warning!
Pero sigue sin funcionar
#7
Updated by Txinto Vaz over 9 years ago
- Status changed from New to In Progress
- % Done changed from 50 to 100
Lo tenemos!!! La clave estaba en que ha cambiado el mecanismo para asignar los registros. Por suerte han mantenido un flag que nos permite compilar con el sistema antiguo:
--oldralloc
Recomendamos estudiar en qué consiste el cambio. Debería ser una mejora con respecto a lo anterior, y ser transparente para el usuario (o dar un warning al respecto). Hay que evaluar por qué el código es sensible a dicho cambio, y modificarlo. ¿Posiblemente se esté asumiendo que el compilador va a actuar de una determinada manera? ¿Puede haberse estudiado en qué registros ha colocado algo (examinando el asm generado) para así programar alguna de las partes de ensamblador? Si no es posible, habría que ver si es necesaria alguna directiva de compilador o linkador para poder especificar algo que el compilador no debería poder escoger.
#8
Updated by Txinto Vaz over 9 years ago
- Status changed from In Progress to Resolved
#9
Updated by Txinto Vaz over 9 years ago
- Status changed from Resolved to Closed
#10
Updated by Txinto Vaz over 9 years ago
- Target version set to v0.0.1
#11
Updated by aorante mvac7 almost 9 years ago
investigando un poco este problema, me he encontrado en los foros de Amstrad.es, con coders que han tropezado con lo mismo:
http://www.amstrad.es/forum/viewtopic.php?f=7&t=2742
el usuario Mochilote ha reportado el problema a los foros del grupo de desarrollo de SDCC:
http://sourceforge.net/p/sdcc/mailman/message/29548243/
El problema se encuentra en la compilación, en la forma que utiliza para acceder a las variables en las llamadas a las funciones, que ha sido cambiado, entiendo que buscando una forma de optimizar el código, pero que no acaba de funcionar bien para todos los casos...
* Many small improvements in the z80, hc08 and r2k code generation, reducing code size.
habrá que tirar de --oldralloc, pero es bueno saber que están trabajando en mejorar...