KOZOS移植のためにブートローダー作ったりH8の割り込み周りを試したりと いろいろ準備していたが,いよいよKOZOSを移植しよう.
まず移植にあたってだが,とりあえず PowerPCへの移植ソースの最新版 をベースにしてみた.
で,移植したのがこれ.とりあえずコマンドプロンプトを出して, コマンド受け付けて動作するようになっている.まあ移植にあたっては いろいろそれなりに苦労したのだけど,詳しい説明は次回に回して, とりあえず公開しよう. ブートローダーにちょこっと手を入れているので,ブートローダーも修正版を公開.
移植なのだけど,まずH8が16ビットマイコンなので,intの16ビット対応が いろんなとこに手が入っている.あと割り込み周りをH8に合わせて書き直してある.まず,OSをビルドしてみよう.ビルド方法は今までと同じ.
hiroaki@teapot:~/h8/os/kozos>% ./make.sh + LOCAL=/usr/local + TARGET=h8300-elf + TARGETDIR=/usr/local/h8300-elf + PATH=/usr/local/h8300-elf/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/pkg/sbin:/usr/pkg/bin:/usr/X11R6/sbin:/usr/X11R6/bin:/home/hiroaki/bin: export PATH + GCC_EXEC_PREFIX=/usr/local/h8300-elf/bin export GCC_EXEC_PREFIX + AR=/usr/local/h8300-elf/bin/ar export AR + AS=/usr/local/h8300-elf/bin/as export AS + CC=/usr/local/h8300-elf/bin/gcc export CC + /usr/local/h8300-elf/bin/gcc -print-prog-name=cpp + CPP=cpp export CPP + CXX=/usr/local/h8300-elf/bin/gcc export CXX + FC=/usr/local/h8300-elf/bin/f77 export FC + LD=/usr/local/h8300-elf/bin/ld export LD + NM=/usr/local/h8300-elf/bin/nm export NM + RANLIB=/usr/local/h8300-elf/bin/ranlib export RANLIB + SIZE=/usr/local/h8300-elf/bin/size export SIZE + ADDR2LINE=/usr/local/h8300-elf/bin/addr2line export ADDR2LINE + GASP=/usr/local/h8300-elf/bin/gasp export GASP + OBJCOPY=/usr/local/h8300-elf/bin/objcopy export OBJCOPY + OBJDUMP=/usr/local/h8300-elf/bin/objdump export OBJDUMP + STRINGS=/usr/local/h8300-elf/bin/strings export STRINGS + STRIP=/usr/local/h8300-elf/bin/strip export STRIP + HOSTED_CC=/usr/bin/cc export HOSTED_CC + NOGCCERROR=yes export NOGCCERROR + OBJECT_FMT=ELF export OBJECT_FMT + MAKE=gmake -f Makefile + export MAKE + set -x + exec gmake -f Makefile /usr/local/h8300-elf/bin/gcc -c startup.s -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c main.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c interrupt.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c lib.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c serial.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c thread.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c syscall.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c memory.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c idle.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c extintr.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c kozos.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc -c command.c -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS /usr/local/h8300-elf/bin/gcc startup.o main.o interrupt.o lib.o serial.o thread.o syscall.o memory.o idle.o extintr.o kozos.o command.o -o kozos -Wall -mh -nostdinc -nostdlib -fno-builtin -I. -Os -DKOZOS -static -T ld.scr -L. cp kozos kozos.elf /usr/local/h8300-elf/bin/strip kozos hiroaki@teapot:~/h8/os/kozos>%では実行してみよう.ブートローダーも修正してあるので,ブートローダーを フラッシュROMに書き込んで起動する.
teapot# cu -l /dev/cuad0 Connected kzboot (kozos boot loader) started. kzboot>ブートローダーの起動メッセージだけど,まあいままでは開発中の名残で Hello World とか出していてそのままでちょっとアレだったので, ついでにちょっと変えてみた.プロンプトもついでに修正.
で,OSをダウンロード.
kzboot> load ~CLocal command? lsx kozos Sending kozos, 56 blocks: Give your local XMODEM receive command now. Bytes Sent: 7296 BPS:767 Transfer complete eceive succeeded. kzboot>けっこうサイズがギリギリになってしまっている.
で,OSを起動してみる.
kzboot> run starting from entry point. kozos boot succeed! command>とりあえず問題なく起動できている.
てきとうにコマンド入力してみよう.
command> echo aaa aaa OK command> threads extintr idle command1 OK command>おー,ちゃんと動作している.すげえ.感動.
うーむ,これでひとまずブートローダーから起動して自作OSをダウンロード, 起動するとこまでひととおりできたわけだ. まあ実作業はたいした時間はかかってないのだけど, 昔むかしに「OS作ってみたい!」とおもっていろいろ勉強してきた成果というか, なんというか,感慨深いなあ.感動だー.
ソースの詳しい説明はとりあえず次回.いやー,動いた動いた.