This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [z80-coff-ld] how can I use ld for creating an exe from z80-coff-as ?
.org doesn't do what you think it does. gas isn't an absolute
assembler, but instead produces relocatable object files. .org just
adds space to make the offset from the start of the current section
equal to its argument.
Ok, i did what you've said, and deleted .org argument in source file.
I've also named sections, with :
«.stub» for the header.
«.mycode» for the real code, which should be loaded at 0xC000
1 .section .stub
2 0000 FE db $fe
3 0001 0000 1B00 dw debut,fin,debut
3 0000
4
5 ; don't use .ORG directive
6 ; .ORG $C000
7
8 .section .mycode
9 ;
10 debut:
11 0000 210D 00 LD HL,LABEL
12 0003 7E AFF: LD A,(HL)
13 0004 23 INC HL
14 0005 A7 AND A
15 0006 C8 RET Z
16 0007 CDA2 00 CALL $A2 ; HFDA4 ;CHPUT
17 ;
18 000a 18F7 JR AFF
19 000c C9 RET
20 000d 4865 6C6C LABEL: DEFB "Hello World",13,10,0
20 6F20 576F
20 726C 640D
20 0A00
21 fin:
22 END
And then, i've written this script:
OUTPUT_FORMAT(binary)
SECTIONS
{
.stub 0xC000 - 7 : { *(.stub) }
.code : { *(.mycode) }
}
Using this, i got correct output, working in emulator
00000000 fe 00 c0 1b c0 00 c0 21 0d c0 7e 23 a7 c8 cd a2
|.......!..~#....|
00000010 00 18 f7 c9 48 65 6c 6c 6f 20 57 6f 72 6c 64 0d
|....Hello World.|
00000020 0a 00
You see the stub at the beginning:
FE (magic)
00C0 (start adress of code: 0xC000)
1BC0 (end address: 0xC0B1)
00C0 (entry point, same as start)
And then,code following with correct relocation for execution at 0xC000.
The ld script is not very nice (the magic number «7»), but i couldn't
manage to do better.
I you have a suggestion, it will be welcome.
Thank you for helping.