CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

Cygwin環境でGCC(4)

テスト用ソースが問題なくコンパイルできるようなので、実際にボードに転送して動作確認できるプログラムで実験してみます
 
まずはソース。16進コード00~FFを16×16のマトリクスで画面出力するだけのものです。
 
イメージ 1
 
ここで画面への整形出力にprintfを使用していますが標準GCCライブラリlibc.aに含まれるものをコールするとシステム系の関数で収集つかなくなるのでELMhttp://elm-chan.org/で公開してい汎用printfモジュールを使わさせてもらいました
 
コマンドスクリプトコンパイルアセンブル→リンク→オブジェクト変換を記述しています。
 
#!/bin/bash
m68k-coff-gcc -O -S -c -v -m68000 -I/usr/local/m68k/include $1.c
m68k-coff-as -R -m68000 -o$1.o $1.s
m68k-coff-ld -N -M -Tm68kcoff.x -o$1.obj io.o $1.o xprintf.o -lgcc -lc >$1.lst
m68k-coff-objcopy -Osrec $1.obj $1.hex
 
ただしセクション、メモリ配置に関するリンカスクリプトはm68kcoff.xとして読込みにしました
ボード上の128kbyte×2のSRAMの先頭からコード領域、データ領域を連続して配置させます
 
SEARCH_DIR(/usr/local/m68k/lib/gcc/m68k-coff/3.4.2/m68000)
STARTUP(start.o)
OUTPUT_FORMAT(coff-m68k)
OUTPUT_ARCH(m68k:68000)
MEMORY {
 text    : ORIGIN = 0x40000, LENGTH = 0x40000
}
SECTIONS
{
   .text : { *(.text) }>text
   .data : { *(.data) }>text
   .bss  : { *(.bss) *(COMMON) }>text
}
 
これをCygwin上で実行。瞬時にビルドは終了します
 
$ ./gc00.sh test00
Reading specs from /usr/local/m68k/lib/gcc/m68k-coff/3.4.2/specs
Configured with: ./configure --prefix=/usr/local/m68k --target=m68k-coff --with-newlib
Thread model: single
gcc version 3.4.2
 /usr/local/m68k/libexec/gcc/m68k-coff/3.4.2/cc1.exe -quiet -v -I/usr/local/m68k/include test00.c -quiet -dumpbase test00.c -m68000 -auxbase test00 -O -version -o test00.s
ignoring nonexistent directory "/usr/local/m68k/lib/gcc/m68k-coff/3.4.2/../../../../m68k-coff/sys-include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/m68k/include
 /usr/local/m68k/lib/gcc/m68k-coff/3.4.2/include
 /usr/local/m68k/lib/gcc/m68k-coff/3.4.2/../../../../m68k-coff/include
End of search list.
GNU C version 3.4.2 (m68k-coff)
        compiled by GNU C version 4.9.3.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
 
OBJCOPYコマンドでモトローラSフォーマットに変換、出力されます
 
S00D00007465737430302E6865785F
S2140400004EB900041EDC4E4F4E560000207C00E421
S214040010002B10106CFC103900E4002F0280000046
S21404002000FF4E5E4E754E560000122E000B207CCE
S21404003000E4002D10106CFC13C100E4002F4E5E8B
S2140400404E754E560000103900E4002B727F4601B0
S214040050C0814E5E4E754E560000103900E4002FE7
S214040060488048C04E5E4E754E56000048E738003D
S2140400704240102E000B726402800000FFFF80C115
S2140400802800484442401004C0FCCCCD42404840BE
      :
      :
      :
 
最終的なバイナリ仕上がりサイズは0x26a0(9888)バイトになりました。
これをMC68000ボードに転送して実行させた様子です

イメージ 2