MSXDOS用標準ライブラリprintf関数の修正

sdccはputs(),printf(),putchar()関数が存在する。
組み込み用途を前提としているためかgets(),getc(),scanf()などは実装されていない。

printfにはsmallとfastがある。これらは8051用で他のCPU用ではない。標準ではprintf_large.cを使うが、そのままではprintf_large.cはBool型の部分に問題があるのでソースを修正する。

#ifndef BOOL
#define BOOL _Bool
#endif

printf_large.c上記項目を下記へ変更する。

#ifndef BOOL
/* #define BOOL _Bool */
#define BOOL char
#endif


次に自作ライブラリに必要なファイルをビルドする。
既にMSXDOSシステムコール対応修正済みのputchar()関数を利用し、puts(),printf()関数の
修正を行う。puts(),printf()関数内部ではputchar()を呼び出しているのでライブラリを
再構成するだけ。

ファイルは[drive:\sdccdir]\lib\src\z80\以下のソースをアセンブルする。

> sdasz80 -o putchar.rel putchar.s
> sdasz80 -o shift.rel shift.s
> sdasz80 -o crtcall.rel crtcall.s

[drive:\sdccdir]\lib\src\以下のCソースをコンパイルする。

> sdcc -mz80 -c vprintf.c
> sdcc -mz80 -c puts.c
> sdcc -mz80 -c printf_large.c
> sdcc -mz80 -c _strlen.c

次にライブラリのリンクを行う。

> sdcclib stdlib.lib z80\putchar.rel vprintf.rel puts.rel printf_large.rel z80\shift.rel z80\crtcall.rel _strlen.rel

ライブラリのリンク後作成されるstdlib.libが修正版printf()を含む自作ライブラリ。


  • C言語とのリンク

#include <stdio.h>

void main(void){
	printf("abcdefg 12345");
}

> sdcc -mz80 -c source.c

> sdld -b _CODE=0x100 -b _DATA=0x100 -i out.ihx source.rel -l stdlib.lib

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年01月26日 20:03
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。