「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