▼ crt0.s
このファイルの設定は特に変更がないので、このままで大丈夫です。自分も理解していないので、内容が理解できたら説明しようと思います。
▼ linker.x
このファイルは、H8のアドレスにベクタ、ROM、RAM、スタック等を、どこにを配置するのか。割り込みの設定はどうなのかなどを設定する場所です。ベクタ、スタック等は勉強不足なので説明ができませんが、
これらのアドレスはマイコンごとに違うので設定を変更する必要があります。また、割り込み要因も種類によっては使う機能も数も違うため、これも再設定の必要があります。
それらをいかにして、変更するのか?それは、秋月の付属CDについてきたファイルを使って修正します。
秋月のCDのh8mbフォルダに、h8mb-0.1-20020506.tar.gzという圧縮ファイルがあると思います。(ファイル名は、買った時期によって若干名前が異なる可能性がありますのでご注意ください。)
これの
解凍方法は、付属CDのサンプルのコンパイル編にて説明されているので、そちらを参照してください。
さて、それを解凍するとh8mbフォルダ中に、h8300フォルダがあります。そのフォルダ内にある、3052.ldsというファイル内を見てください。これから
3052.ldsの内容を、linker.xへ移植します。
[linker.xより]
MEMORY
{
vectors : o = 0x0000, l = 0x0034
rom : o = 0x0034, l = 0x7fcc
ram : o = 0xf780, l = 0x0600 /* 1.5Kbyte */
stack : o = 0xff80, l = 0x0000
}
↓こちらに変更
[3052.ldsより]
MEMORY
{
vectors : o = 0x000000, l = 0x000ff
rom : o = 0x000100, l = 0x7ff00
ram : o = 0x0fdf10, l = 0x02000
stack : o = 0x0fff0e, l = 0x00002
}
| |
次に、割り込みの設定を移植します。
[linker.xより]
SECTIONS
{
.vectors : {
/* 0 */ SHORT(ABSOLUTE(_start))
/* 1 */ SHORT(ABSOLUTE(_halt))
/* 2 */ SHORT(ABSOLUTE(_halt))
/* 3 */ SHORT(ABSOLUTE(_halt))
/* 4 */ SHORT(ABSOLUTE(_halt))
/* 5 */ SHORT(ABSOLUTE(_halt))
/* 6 */ SHORT(ABSOLUTE(_halt))
/* 7 */ SHORT(DEFINED(_int_nmi)?ABSOLUTE(_int_nmi):ABSOLUTE(_halt))
/* 8 */ SHORT(DEFINED(_int_trap0)?ABSOLUTE(_int_trap0):ABSOLUTE(_halt))
/* 9 */ SHORT(DEFINED(_int_trap1)?ABSOLUTE(_int_trap1):ABSOLUTE(_halt))
/* 10 */ SHORT(DEFINED(_int_trap2)?ABSOLUTE(_int_trap2):ABSOLUTE(_halt))
/* 11 */ SHORT(DEFINED(_int_trap3)?ABSOLUTE(_int_trap3):ABSOLUTE(_halt))
/* 12 */ SHORT(DEFINED(_int_break)?ABSOLUTE(_int_break):ABSOLUTE(_halt))
/* 13 */ SHORT(DEFINED(_int_sleep)?ABSOLUTE(_int_sleep):ABSOLUTE(_halt))
/* 14 */ SHORT(DEFINED(_int_irq0)?ABSOLUTE(_int_irq0):ABSOLUTE(_halt))
/* 15 */ SHORT(DEFINED(_int_irq1)?ABSOLUTE(_int_irq1):ABSOLUTE(_halt))
/* 16 */ SHORT(DEFINED(_int_irq2)?ABSOLUTE(_int_irq2):ABSOLUTE(_halt))
/* 17 */ SHORT(DEFINED(_int_irq3)?ABSOLUTE(_int_irq3):ABSOLUTE(_halt))
/* 18 */ SHORT(DEFINED(_int_wkp)?ABSOLUTE(_int_wkp):ABSOLUTE(_halt))
/* 19 */ SHORT(DEFINED(_int_timer_a)?ABSOLUTE(_int_timer_a):ABSOLUTE(_halt))
/* 20 */ SHORT(ABSOLUTE(_halt))
/* 21 */ SHORT(DEFINED(_int_timer_w)?ABSOLUTE(_int_timer_w):ABSOLUTE(_halt))
/* 22 */ SHORT(DEFINED(_int_timer_v)?ABSOLUTE(_int_timer_v):ABSOLUTE(_halt))
/* 23 */ SHORT(DEFINED(_int_sci3)?ABSOLUTE(_int_sci3):ABSOLUTE(_halt))
/* 24 */ SHORT(DEFINED(_int_iic)?ABSOLUTE(_int_iic):ABSOLUTE(_halt))
/* 25 */ SHORT(DEFINED(_int_adi)?ABSOLUTE(_int_adi):ABSOLUTE(_halt))
} > vectors
↓こちらに変更
[3052.ldsより]
SECTIONS
{
.vectors : {
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_nmi)?ABSOLUTE(_int_nmi):ABSOLUTE(_start))
LONG(DEFINED(_int_trap0)?ABSOLUTE(_int_trap0):ABSOLUTE(_start))
LONG(DEFINED(_int_trap1)?ABSOLUTE(_int_trap1):ABSOLUTE(_start))
LONG(DEFINED(_int_trap2)?ABSOLUTE(_int_trap2):ABSOLUTE(_start))
LONG(DEFINED(_int_trap3)?ABSOLUTE(_int_trap3):ABSOLUTE(_start))
LONG(DEFINED(_int_irq0)?ABSOLUTE(_int_irq0):ABSOLUTE(_start))
LONG(DEFINED(_int_irq1)?ABSOLUTE(_int_irq1):ABSOLUTE(_start))
LONG(DEFINED(_int_irq2)?ABSOLUTE(_int_irq2):ABSOLUTE(_start))
LONG(DEFINED(_int_irq3)?ABSOLUTE(_int_irq3):ABSOLUTE(_start))
LONG(DEFINED(_int_irq4)?ABSOLUTE(_int_irq4):ABSOLUTE(_start))
LONG(DEFINED(_int_irq5)?ABSOLUTE(_int_irq5):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_wovi)?ABSOLUTE(_int_wovi):ABSOLUTE(_start))
LONG(DEFINED(_int_cmi)?ABSOLUTE(_int_cmi):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_imia0)?ABSOLUTE(_int_imia0):ABSOLUTE(_start))
LONG(DEFINED(_int_imib0)?ABSOLUTE(_int_imib0):ABSOLUTE(_start))
LONG(DEFINED(_int_ovi0)?ABSOLUTE(_int_ovi0):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_imia1)?ABSOLUTE(_int_imia1):ABSOLUTE(_start))
LONG(DEFINED(_int_imib1)?ABSOLUTE(_int_imib1):ABSOLUTE(_start))
LONG(DEFINED(_int_ovi1)?ABSOLUTE(_int_ovi1):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_imia2)?ABSOLUTE(_int_imia2):ABSOLUTE(_start))
LONG(DEFINED(_int_imib2)?ABSOLUTE(_int_imib2):ABSOLUTE(_start))
LONG(DEFINED(_int_ovi2)?ABSOLUTE(_int_ovi2):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_imia3)?ABSOLUTE(_int_imia3):ABSOLUTE(_start))
LONG(DEFINED(_int_imib3)?ABSOLUTE(_int_imib3):ABSOLUTE(_start))
LONG(DEFINED(_int_ovi3)?ABSOLUTE(_int_ovi3):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_imia4)?ABSOLUTE(_int_imia4):ABSOLUTE(_start))
LONG(DEFINED(_int_imib4)?ABSOLUTE(_int_imib4):ABSOLUTE(_start))
LONG(DEFINED(_int_ovi4)?ABSOLUTE(_int_ovi4):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_dend0a)?ABSOLUTE(_int_dend0a):ABSOLUTE(_start))
LONG(DEFINED(_int_dend0b)?ABSOLUTE(_int_dend0b):ABSOLUTE(_start))
LONG(DEFINED(_int_dend1a)?ABSOLUTE(_int_dend1a):ABSOLUTE(_start))
LONG(DEFINED(_int_dend1b)?ABSOLUTE(_int_dend1b):ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(ABSOLUTE(_start))
LONG(DEFINED(_int_eri0)?ABSOLUTE(_int_eri0):ABSOLUTE(_start))
LONG(DEFINED(_int_rxi0)?ABSOLUTE(_int_rxi0):ABSOLUTE(_start))
LONG(DEFINED(_int_txi0)?ABSOLUTE(_int_txi0):ABSOLUTE(_start))
LONG(DEFINED(_int_tei0)?ABSOLUTE(_int_tei0):ABSOLUTE(_start))
LONG(DEFINED(_int_eri1)?ABSOLUTE(_int_eri1):ABSOLUTE(_start))
LONG(DEFINED(_int_rxi1)?ABSOLUTE(_int_rxi1):ABSOLUTE(_start))
LONG(DEFINED(_int_txi1)?ABSOLUTE(_int_txi1):ABSOLUTE(_start))
LONG(DEFINED(_int_tei1)?ABSOLUTE(_int_tei1):ABSOLUTE(_start))
LONG(DEFINED(_int_adi)?ABSOLUTE(_int_adi):ABSOLUTE(_start))
FILL(0xff)
} > vectors
| |
ちょっと長いですが(長すぎ)、このように変更すれば、このファイルはこれでOKです。3052Fを使う限り、この設定を変更することはありません。
どの部分を変更すれば良いかどうかだけ押さえておけば良いです。
▼ Makefile
さて、普段良く変更するのはこのファイルです。プログラムのファイルが多くなればそれらのファイル名を追加してやる必要があります。さらに、MOTファイルを出力したときのファイル名もMakefileにて決めることができます。では、さきほどと同じようにファイルの内容を変えていこうと思います。
今回コンパイルするファイルは、crt0.s、main.c、Makefile、3052f.h、h8types.hの5種類です。これらを一つにするために、元々の設定を変更します。
[Makefileより]
OBJS = crt0.o \
main.o \
led.o \
sw.o \
#dummy
DEP = $(LNK) \
Makefile \
3664F.h \
h8types.h \
led.h \
sw.h \
#dummy
↓こちらに変更
[新Makefileより]
OBJS = crt0.o \
main.o \
#dummy
DEP = $(LNK) \
Makefile \
3052F.h \
h8types.h \
#dummy
| |
このように、拡張子が[.c]のファイルは拡張子を[.o]、ヘッダファイルの拡張子はそのままで問題ありません。これで設定は終了です。