I > O関数の追加

「I/O関数の追加」の編集履歴(バックアップ)一覧はこちら

I/O関数の追加」(2012/01/27 (金) 20:33:15) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

sdccはinp(),outp()関数が無い。Z80用に関数を作成し追加する。 汎用性があるので他のZ80互換ハード用としても利用可能。 iolib.asm ;--------------- ;sdcc Z80 I/O function ;--------------- .area _CODE ; ; ret=inp(port addr) ; _inp:: ld hl,#2 add hl,sp ; ld c,(hl) in a,(c) ; ld l,a ld h,#0 ; ret ; ; outp(port addr,param) ; _outp:: push bc ld hl,#4 add hl,sp ; ld c,(hl) inc hl ld b,(hl) out (c),b ; pop bc ret アセンブルしてオブジェクトファイルを作成。 > sdasz80 -o iolib.rel iolib.asm 別途ライブラリアンで自作ライブラリを作成するのも良し、オブジェクトファイルを そのままCソースとリンクするのも良し。 ライブラリを作成する場合の例↓ > sdcclib portio.lib iolib.rel -C言語とのリンク C言語のinp(),outp()使用例を示す。 この例ではポート入出力を行う。関数は以下の引数を持つ。 return = inp(I/O addr) outp(I/O addr,Param) iotest.c #include <stdio.h> extern unsigned char inp(unsigned char); extern outp(unsigned char,unsigned char); void main(void){ unsigned char rtn; rtn=inp(0x98); putchar(rtn); outp(0x98,0x7f); } コンパイル方法↓。 > sdcc -mz80 -c iotest.c > sdld -b _CODE=0x100 -b _DATA=0x100 -i out.ihx iotest.rel -l portio.lib

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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