Bug #16

Error en 03_holaROM

Added by Txinto Vaz about 6 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
Start date:
09/09/2013
Due date:
% Done:

100%

Spent time:

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é :(

nova.png View - captura de pantalla del mío (16 KB) Txinto Vaz, 09/09/2013 04:31 AM

siva.png View - captura de pantalla del original de Alberto (10.5 KB) Txinto Vaz, 09/09/2013 04:31 AM

temp_HelloSC2_zip (13.1 KB) Txinto Vaz, 09/09/2013 07:32 PM

13
14

History

#1 Updated by Txinto Vaz about 6 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 about 6 years ago

13
14

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:

  1. hex2bin del fichero
  2. lo concatena detrás de rom_header.bin
  3. 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 

captura de  pantalla del mío

mientras que si ejecuto el tuyo:

captura de pantalla del original de Alberto

#3 Updated by Txinto Vaz about 6 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 about 6 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 about 6 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 about 6 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 about 6 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 about 6 years ago

  • Status changed from In Progress to Resolved

#9 Updated by Txinto Vaz about 6 years ago

  • Status changed from Resolved to Closed

#10 Updated by Txinto Vaz about 6 years ago

  • Target version set to v0.0.1

#11 Updated by aorante mvac7 over 5 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... :)

Also available in: Atom PDF