zaczalem przygode z C na male Atari
program ktory chcialem skompilowac to:
#include <conio.h>
#include <stdlib.h>
int main (void)
{
printf ("Hello world!n");
return EXIT_SUCCESS;
}
bacik na PC (zestaw cc65 dla OS win32) ktory to kompiluje wyglada tak:
cc65 -O -t atari %1 -o %1.s
ca65 -t atari %1.s
ld65 -t atari -S $2000 -o %1.xex %1.o
compiler i linker cl65.exe nie dzialal do konca, wiec dlatego jest wszystko w tym baciku rozpisane
kompilator (cc65) kompiluje do pliku z rozszerzeniem *.s
;
; File generated by cc65 v 2.10.0
;
.fopt compiler,"cc65 v 2.10.0"
.setcpu "6502"
.smart on
.autoimport on
.case on
.debuginfo off
.importzp sp, sreg, regsave, regbank, tmp1, ptr1, ptr2
.macpack longbranch
.import _printf
.export _main
.segment "RODATA"
L0001:
.byte $48,$65,$6C,$6C,$6F,$20,$77,$6F,$72,$6C,$64,$21,$9B,$00
; ---------------------------------------------------------------
; int __near__ main (void)
; ---------------------------------------------------------------
.segment "CODE"
.proc _main: near
.segment "CODE"
lda #<(L0001)
ldx #>(L0001)
jsr pushax
ldy #$02
jsr _printf
ldx #$00
txa
rts
.endproc
makroassembler (ca65) tworzy z tego plik o rozszerzeniu *.o, ktorego struktura jest pewnie zrozumiala tylko dla linkera
no i wszystko idzie dobrze, dopoki nie nastepuje linkowanie (ld65), wtedy:
G:>ld65 -t atari -S $2000 -o G:hello.c65.xex G:hello.c65.o
ld65.exe: Warning: [builtin config](7): Segment `EXEHDR' does not exist
ld65.exe: Warning: [builtin config](13): Segment `AUTOSTRT' does not exist
Unresolved external `_printf' referenced in:
G:hello.c65.s(12)
Unresolved external `pushax' referenced in:
G:hello.c65.s(32)
ld65.exe: Error: 2 unresolved external(s) found - cannot create output file
no i dupa blada, co jest nie tak ?
pewnie nie rozumiem do konca, czemu ten C wymaga az tylu programikow do szczescia, albo trzeba jaki plik konfiguracyjny stworzyc ?
moze ktos sie juz bawil cc65 na Atari i przeszedl ten etap :)?
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C