80系クロスコンパイラ
80系クロスコンパイラ
LSIC-80 ver.3.6
LSIC-80はANSI標準規格に準拠したi8080/i8085/Z80/HD64180/KC80/KC160※1の
ソフトウェア開発をサポートする80系クロスコンパイラです。
LSIC-80 ver.3.6
LSIC-80はANSI標準規格に準拠したi8080/i8085/Z80/HD64180/KC80/KC160※1のソフトウェア開発をサポートする80系クロスコンパイラです。
※1. 川崎マイクロエレクトロニクス株式会社(旧川崎製鉄株式会社)が開発したKC80上位互換高速16ビットCPUコアです。
特長
- ANSI標準規格に準拠したコンパイラ
- KC160用コンパイラとi8080/Z80/HD64180/KC80用コンパイラがセット
- KC160の拡張命令を使用したオブジェクトコードを生成
- i8080/Z80/HD64180のオブジェクトコードを生成
- Z80/HD64180/KC160用コードジェネレータはオートマチック変数のアクセスにインデックスレジスタを使用
- HD64180の乗算命令、KC160の乗除算命令を生成
- i8080/Z80/KC160用アセンブラも付属
- リンカはHD64180/HD64180F/KC80のバンク切り替え*2をサポート
- ライブラリはi8080/Z80/HD64180/KC160の入出力命令や割り込み制御命令をサポート
- 別売のLDB-80X*3で高級言語レベルデバッグが可能
*2. KL5C80A12/KL5C80A16のDRAMコントローラによるバンク切り替えには対応していません。
*3. MS-DOSが動作するPC-9800シリーズ向けZ80用シミュレータデバッガです。
言語仕様
- ANSI標準規格に準拠したコンパイラ(ビットフィールド、多バイト文字 、<local.h> を除く)
- サポートするデータ型
void void* char int unsigned int
short unsigned short long unsigned long float
double long double struct union enum - プリプロセッサ文
#include #if #ifdef #elif #define
#undef #line #pragma # ## - プロトタイプ宣言
パラメタの間違いを防ぐプロトタイプ宣言が可能です。
コンパイラ
- コンパイラの特長
高速かつコンパクトなオブジェクトを生成します。2パス(cf160/cg160またはcf/cg80/cgz80)でアセンブラソースを生成し、付属のアセンブラにてアセンブルします。 - KC160用コンパイラ
KC160プロセッサは16Mバイトのメモリ空間を持っています。このメモリ空間をプログラマが目的に応じて選択できるように、S, Lの2つのメモリモデルを用意しています。さらにfar, nearキーワードをサポートしていますので、Sモデルのプログラムの中で大量のデータを使用することができます。 - i8080/Z80/HD64180/KC80*4用コンパイラ
8080用コードジェネレータ(cg80)に加え、Z80/HD64180用コードジェネレータ(cgz80)も付属しています。Z80/HD64180用コードジェネレータはインデックスレジスタを使ってスタックに置かれた変数をアクセスします。また、オプション指定によりHD64180の乗算命令を生成することもできます。このため若干オブジェクトコードのサイズは大きくなりますが、実行速度は向上します。
*4. KC80はZ80とバイナリレベルで完全互換のため、コード生成上はZ80として扱われます。 - レジスタの自動割り付け
コンパイラが自動的にレジスタの最適な割り付けを行います。また、registerと明示的に宣言しなくても、可能な限りレジスタに割り付けますので、プログラマは意識せずにCPUのもつレジスタをフルに活用できます。これによって驚異的なオブジェクトを生成します。 - パラメタの受け渡し
関数呼び出しのパラメタにおいての最初の3つはレジスタに入れて渡します。このため、関数呼び出しのオーバーヘッドは非常に軽くなっています。図1 パラメタの受け渡し規則パラメータの型1番目2番目3番目4番目5番目char型AEC(SP+2)(SP+4)int, unsigned int, pointer型HLDEBC(SP+2)(SP+3)(SP+4)(SP+5)その他の型すべてスタック上におかれる - 非再帰的関数の導入
nonrec(non-recursive、非再帰的)キーワードの導入により効率のよいコードを生成します。デフォルトでは再帰的なコードを生成しますが、個々の関数に対し再帰的、非再帰的の指定ができます。非再帰的な関数では、レジスタに割り付けられなかったオートマチック変数はスタックではなく固定番地に配置されますから非常に効率が向上します。 - 日本語の扱い
漢字コードのチェックを行いますので、文字列の中に日本語データ(シフトJIS)を入れることができます。もちろんコメントの中にも日本語を書けます。 - インライン関数
アセンブラ命令をCソースプログラム中に記述できます。これにより、ポートの入出力、割り込み許可、不許可の制御などが非常に効率よく実行できます。
リスト
char _asm_ci(char *, int);
char _asm_cic(char *, int, char);
char _asm_c(char *);
#define inp(p) _asm_ci(“\n\tIN\tA,($1)\n”, (p))
#define outp(p, c) _asm_cic(“\n\tOUT\t($1),A\n”, (p), (c))
#define di() _asm_c(“\n\tDI\n”)
#define ei() _asm_c(“\n\tEI\n”)
void putch(char c)
{
di();
while ((inp(0x00) & 1) == 0)
;
ei();
outp(0x01, c);
生成されたコード
putch_:
0000 F5 PUSH AF
0001 F3 DI
0002 __2:
0002 DB00 IN A,(0)
0004 CB47 BIT 0,A
0006 28FA JP Z,__2
0008 FB EI
0009 F1 POP AF
000A D301 OUT (1),A
000C C9 RET
- ROM化に最適
アセンブラとのリンクが簡単に行え、割り込み処理もCで記述できます。定数テーブルはROMに配置するなど、ROM化に対する配慮がされています。さらにオブジェクト効率が非常によいので、ROMプログラムもほとんどCで記述できます。また、LSI C-80をサポートしているマルチタスクモニタは以下のものがあります。
Z80用マルチタスクモニタ (動作環境は各メーカーにお問合せ下さい)
KC160用マルチタスクモニタ
(動作環境は各メーカーにお問い合わせください)
ミスポ | NORTi3/KC160 Standard |
---|
アセンブラ
インテルニーモニックのアセンブラ(r80)は優れたマクロ機能を持っていますので、アセンブラ単体としても十分に使用できます。またザイログニーモニックのアセンブラ(rz80)も付属しています。rz80はZ80やHD64180で拡張された命令をアセンブルできます。ただし、rz80にはマクロ機能はありません。
KC160用アセンブラ(r160)はKC160のすべての命令をサポートしています。
リンカ
8080/Z80/HD64180/KC80用コンパイラのリンカ(knil)は弊社独自のSOF形式またはREL形式のオブジェクトとライブラリを結合して、バイナリ、インテルHEX、拡張インテルHEX、モトローラS(S1, S2)形式のファイルを出力します。また、127文字までの長い外部シンボルを認識でき、大文字と小文字の区別もできますので、Cプログラムの開発に向いています。さらに、HD64180/HD64180F/KC80のバンク切り替えをサポートする機能があります。
KC160用コンパイラのリンカ(lld160)はELF形式*4のオブジェクトとライブラリを結合して、拡張インテルHEX、モトローラS2形式のファイルを出力します。また、KC160の24ビットの全アドレス空間をサポートしています。
*4. オブジェクトファイルはELFフォーマットをベースにしていますが、KC160に対応するために独自の拡張を行っています。厳密にはELFフォーマットではありません。
ライブラリ
ANSI標準規格で定義された関数を用意しています(ビットフィールド、多バイト文字および <locale.h> を除く)。ライブラリ関数は、オブジェクトとソースコードの双方の形式で提供していますので、ライブラリの変更も自由に行えます。もちろんROM化のための便利なライブラリも付いています。さらにCP/M用ライブラリではI/Oリダイレクションとパイプラインが標準で組み込まれていますので、各種ソフトウェアツールが容易に作成できます。パッケージ中には、ライブラリを利用したいくつかのツールがサンプルとして含まれています。
関数一覧表
abort abs access acos alloc asin assert
atan atan2 atexit atof atoi atol atold
bdos bdosh bios biosh brk bsearch btom
calloc ceil cgets chdir chkctype chmod clearerr
close cos cosh cputs creat di div
dup dup2 ecvt ei execl execv exit
exp fabs fclose fcloseall fcvt fdopen fdreopen
feof ferror fflush fgetc fgetchar fgetpos fgets
filelength fileno floor flushall fmod fopen fprintf
fputc fputchar fputs fread free freopen frexp
fscanf fseek fsetbin fsetpos fsettext ftell fwrite
gcvt getc getch getchar getche getcwd getenv
gets getw hantozen im0 im1 im2 inp
inp0 inp0x inpx inpz isalkana isalnmkana isalnum
isalpha isascii isatty iscntrl iscsym iscsymf isdigit
isgraph isgrkana iskana iskanji iskanji2 iskmoji iskpun
islower ispnkana isprint isprkana ispunct isspace iupper
isxdigit itoa jisalpha jisdigit jishir jiskata jiskigou
jisl0 jisl1 jisl2 jislower jisspace jistojms jistoms
jisupper jiszen jmstojis jstradv jstrchr jstrcmp jstrlen
jstrmatch jstrncat jstrncmp jstrncpy jstrrchr jstrrev jstrskip
jstrstr jstrtok jtohira jtokata jtolower jtoupper kbhit
labs ldexp ldiv log log10 longjmp _lrotl
_lrotr lseek ltoa malloc matherr max memccpy
memchr memcmp memcpy memicmp memmove memset min
mkdir modf movmem mstojis mtob nthctype offsetof
onexit open outp outp0 outp0x outpx outpz
perror pow printf putc putch putchar puts
putw qsort rand read realloc remove rename
rewind rim rmdir rmtmp _rotl _rotr sbrk
scanf sensebrk setbuf setjmp setmem setvbuf sim
sin sinh sprintf sqrt srand sscanf stpcpy
strcat strch strcmp strcmpi strcpy strcspn strdup
strerror stricmp strlen strlwr strncat strncmp strncmpi
strncpy strnicmp strnset strpbrk strrchr strrev strset
strspn strstr strtod strtok strtol strtold strtoul
strupr tan tanh tell tmpfile tmpnam toascii
_tolower tolower _toupper toupper ultoa ungetc ungetch
unlink va_arg va_end va_start vfprintf vprintf vsprintf
write xprintf xscanf zentohan
性能
LSIC-80の具体的な性能を例をもとに示します。図2に示すプログラムをZ80用とKC160用にコンパイルしたものが図3です。
また、このプログラムの実行時間を表1に示します。
図2 ソースリスト
int tarai(int x, int y, int z)
{
if (x > y)
return tarai(x - 1, y, z),
tarai(y - 1, z, x),
tarai(z - 1, x, y));
else
return y;
}
表1 図2のプログラムの実行結果
プログラム | 実行速度(秒) | CPU動作クロック |
---|---|---|
図2(a) Z80用 | 20 | HD64180(10MHz) |
図2(b) KC160用 | 1.5 | KC160(16MHz) |
tarai(10, 5, 0)で呼び出したとき
図3(a)アセンブルリスト(Z80用)
0000 tarai_:
0000 DDE5 PUSH IX
0002 DD210000 LD IX,0
0006 DD39 ADD IX,SP
0008 E5 PUSH HL
0009 D5 PUSH DE
000A C5 PUSH BC
000B DD6EFC LD L,(IX-4)
000E DD66FD LD H,(IX-3)
0011 DD5EFE LD E,(IX-2)
0014 DD56FF LD D,(IX-1)
0017 CD0000 CALL CMPHD##
001A 304B JP NC,__2
001C DD4EFC LD C,(IX-4)
001F DD46FD LD B,(IX-3)
0022 DD5EFE LD E,(IX-2)
0025 DD56FF LD D,(IX-1)
0028 DD6EFA LD L,(IX-6)
002B DD66FB LD H,(IX-5)
002E 2B DEC HL
002F CD0000 CALL tarai_
0032 E5 PUSH HL
0033 DD4EFE LD C,(IX-2)
0036 DD46FF LD B,(IX-1)
0039 DD5EFA LD E,(IX-6)
003C DD56FB LD D,(IX-5)
003F DD6EFC LD L,(IX-4)
0042 DD66FD LD H,(IX-3)
0045 2B DEC HL
0046 CD0000 CALL tarai_
0049 E5 PUSH HL
004A DD4EFA LD C,(IX-6)
004D DD46FB LD B,(IX-5)
0050 DD5EFC LD E,(IX-4)
0053 DD56FD LD D,(IX-3)
0056 DD6EFE LD L,(IX-2)
0059 DD66FF LD H,(IX-1)
005C 2B DEC HL
005D CD0000 CALL tarai_
0060 D1 POP DE
0061 C1 POP BC
0062 CD0000 CALL tarai_
0065 1806 JP __3
0067 __2:
0067 DD6EFC LD L,(IX-4)
006A DD66FD LD H,(IX-3)
006D __3:
006D DDF9 LD SP,IX
006F DDE1 POP IX
0071 C9 RET 図3(b) アセンブルリスト(KC160用)
00000000 tarai_:
00000000 DDE5 PUSH IX
00000002 ED06 LD IX,SP
00000004 E5 PUSH HL
00000005 D5 PUSH DE
00000006 C5 PUSH BC
00000007 EDADFC LD HL,(IX-4)
0000000A ED9DFE LD DE,(IX-2)
0000000D 7C LD A,H
0000000E AA XOR D
0000000F F21300 JP P,__2
00000012 EB EX DE,HL
00000013 __2:
00000013 ED52 SBC HL,DE
00000015 D24900 JP NC,__3
00000018 ED8DFC LD BC,(IX-4)
0000001B ED9DFE LD DE,(IX-2)
0000001E EDADFA LD HL,(IX-6)
00000021 2B DEC HL
00000022 CD0000 CALL tarai_
00000025 E5 PUSH HL
00000026 ED8DFE LD BC,(IX-2)
00000029 ED9DFA LD DE,(IX-6)
0000002C EDADFC LD HL,(IX-4)
0000002F 2B DEC HL
00000030 CD0000 CALL tarai_
00000033 E5 PUSH HL
00000034 ED8DFA LD BC,(IX-6)
00000037 ED9DFC LD DE,(IX-4)
0000003A EDADFE LD HL,(IX-2)
0000003D 2B DEC HL
0000003E CD0000 CALL tarai_
00000041 D1 POP DE
00000042 C1 POP BC
00000043 CD0000 CALL tarai_
00000046 C34C00 JP __4
00000049 __3:
00000049 EDADFC LD HL,(IX-4)
0000004C __4:
0000004C DDF9 LD SP,IX
0000004E DDE1 POP IX
00000050 C9 RET
コンパイル処理の流れ
コンパイル処理の流れ(i8080/Z80用)
対応デバッガ
LDB-80X*5やPARTNER-ETII(80)などで使用可能なデバッグ情報を生成します。これにより、高級言語レベルデバッグができ、開発効率が向上します。(一部のデバッガは除く)
*5. MS-DOSが動作するPC-9800シリーズ向けZ80用シミュレータデバッガです。
i8080/Z80/HD64180/KC80用デバッガ(動作環境は各メーカーにお問い合わせください)
京都マイクロコンピュータ | PARTNER-ETII(80) |
---|---|
ソフィアシステムズ | Z80TAT mkII, KC80TAT ICEシステム WATCHPOINT |
横河ディジタルコンピュータ | advicePLUS YZ301 |
エーワン | bug finder BF3000 |
コンピューテックス | ROMiCEmini |
LSI Cを推奨している商品
LSI C-80を推奨している商品(動作環境は各メーカーにお問い合わせください)
エフテック株式会社 | トレースロボット F0093 |
---|---|
エフテック株式会社 | マイクロマウスロボット F0118b-M1 マイクロマウスロボット F0118b-M2 マイクロマウスロボット F0118b-T1 |
株式会社デンジニア | デンコム80ZM |
株式会社エンベデッドテクノロジー | MPCZ-FATLIB |
LSI C-80 Ver.3.6の主な変更点
>LSI C-80 Ver.3.1からVer.3.5までの主な変更点
LSI C-80 Ver.3.6では、川崎マイクロエレクトロニクス株式会社(旧川崎製鉄株式会社)が開発したKC160に対応しました。以下に、その内容を示します。
コンパイラcf160,cg160
- メモリモデルのサポート
KC160用コンパイラは、SとLの2つのメモリモデルを用意しています。このメモリモデルは、プログラマが目的に応じて選択できるようになっています。
Sモデルは、プログラム、データともに64Kバイトに制限したもので、通常はこのモデルを使用します。プログラムの大きさ、速度ともに効率のよいモデルです。
Lモデルは、プログラム、データともに16Mバイトまで使用できます。 - near,farキーワードのサポート
さらに、上記デフォルトの指定を変更できるようにnear,farキーワードを用意しています。たとえば、大きな変数を使用したい場合にはfarを付けて宣言することで、最大64Kバイトまでの変数を使用することができます。 モデル*6プログラムデータポインタnear
(64Kバイト
まで)far
(16Mバイト
まで)*7near
(64Kバイト
まで)far
(16Mバイト
まで)*7near
(64Kバイト
まで)far
(16Mバイト
まで)*7Sデフォルトキーワード
指定デフォルトキーワード
指定デフォルトキーワード
指定Lキーワード
指定デフォルトデフォルトキーワード
指定キーワード
指定デフォルト - インライン関数のサポート
従来のコンパイラと同様に、アセンブラ命令をCソースプログラム中に記述できます。
アセンブラr160
KC160用アセンブラは、KC160用に記述されたアセンブラソースを読み込み、独自のオブジェクトファイルを出力する2パス方式のリロケータブルアセンブラです。オブジェクトフォーマットはELF形式*3をベースにしていますが、KC160に対応するために独自に拡張を行っています。また、KC160のすべての命令をサポートしています。
リンカlld16
KC160用リンカは、ELF形式*8のオブジェクトファイルとライブラリファイルを読み込み、それらを結合して拡張インテルHEX形式、モトローラS2形式のファイルを出力します。また、KC160の24ビットの全アドレス空間をサポートしています。
*6. 各モデルとも、メモリ空間の合計は最大16Mバイトです。
*7. ひとつのモジュール(ファイル)中のプログラムの大きさは64Kバイトに抑えられ、ひとつひとつのデータ(変数)の大きさは、高々64Kバイトまでです。
*8. オブジェクトファイルはELFフォーマットをベースにしていますが、KC160に対応するために独自の拡張を行っています。厳密にはELFフォーマットではありません。
動作環境
ソフトウェア名 | 対応OS |
LSI C-80 Ver3.6 (Windowsパック) | Windows XP Professional, Windows Vista Business (32ビット) / Ultimate (32ビット) |
LSI C-80 Ver3.6 (Solarisパック) | Solaris 2.x for SPARC (SunOS 5.4, SunOS 5.5.1, SunOS 5.6, libc 1以上) |
LSI C-80 Ver3.6 (FreeBSD/Linuxパック) | FreeBSD/i386 (2.2.6-RELEASE, libc3), Linux (x86版, libc5.2.18) |
●CD-ROMドライブ必須 ●libcバージョンは弊社で確認したものです。
商品一覧
商品名 | 型名 | 商品コード | 価格 |
---|---|---|---|
LSI C-80 Ver.3.6(Windowsパック)基本パッケージ 【供給メディア:CD-R】 | LSIC80-11-ST | 4940183051818 | 98,000円(税別) |
LSI C-80 Ver.3.6(Windowsパック) 追加1ライセンス*9 | LSIC80-11-1L | 4940183015001 | 33,000円(税別) |
LSI C-80 Ver.3.6(Solarisパック)基本パッケージ 【供給メディア:CD-R】 | LSIC80-21-ST | 4940183078815 | 98,000円(税別) |
LSI C-80 Ver.3.6(Solarisパック)追加1ライセンス*9 | LSIC80-21-1L | 4940183079003 | 33,000円(税別) |
LSI C-80 Ver.3.6(FreeBSD/Linuxパック)基本パッケージ 【供給メディア:CD-R】 | LSIC80-31-ST | 4940183080818 | 98,000円(税別) |
LSI C-80 Ver.3.6(FreeBSD/Linuxパック) 追加1ライセンス*9 | LSIC80-31-1L | 4940183081006 | 33,000円(税別) |
LSI C-80 Ver.3.6追加ユーザーズマニュアル | LSIC80-11-UM | 4940183016008 | 98,000円(税別) |
*9. 基本パッケージ1本をご購入いただくと、商品別に追加ライセンスの購入ができます。
追加ライセンスは追加1ライセンスをご用意しておりますので、ご使用になるコンピュータの台数に合わせて
必要なライセンス数をご購入いただけます。
スクールパック
商品名 | 型名 | 商品構成 | 価格 |
---|---|---|---|
(Windows)スクールパック 基本10ライセンス | LSIC80SP-11-ST | マスターディスク(1枚) 供給メディア:CD-R、 ライセンスキー(10ユーザー分)、 ユーザーズマニュアル(1冊) | 各300,000円 |
(Solaris)スクールパック 基本10ライセンス | LSIC80SP-21-1L | ||
(FreeBSD/Linux)スクールパック 基本10ライセンス | LSIC80SP-31-ST | ||
(Windows)スクールパック 追加1ライセンス*10 | LSIC80SP-11-1L | ライセンスキー(1ユーザー分) | 各30,000円 |
(Solaris)スクールパック 追加1ライセンス*10 | LSIC80SP-21-1L | ||
(FreeBSD/Linux)スクールパック 追加1ライセンス*10 | LSIC80SP-31-1L | ||
スクールパック 追加ユーザーズマニュアル | LSIC80SP-11-UM | ユーザーズマニュアル(1冊) | 5,000円 |
●Windowsスクールパックの基本10ライセンス、Solarisスクールパックの基本10ライセンス、FreeBSD/Linuxパックの基本10ライセンスは、それぞれ別商品になりますので、予めご了承ください。
●ご注文頂く基本10ライセンス、追加1ライセンスおよび追加ユーザーズマニュアルは、ひとつのパッケージに同朋されます。
*10. 基本10ライセンスをご購入いただくと、商品別に追加ライセンスの購入ができます。追加ライセンスは追加1ライセンスをご用意しておりますのでご使用になるコンピュータの台数に合わせて、必要なライセンス数をご購入いただけます。
商品構成
- コンパイラドライバ(lcc80,lcc160))
- プリプロセッサ(cpp)
- コンパイラ (cf/cg80/cgz80,cf160/cg160)
- アセンブラ(r80/nr80/rz80,r160)
- リンカ(knil,lld160)
- ライブラリアン(sofar,lar160)
- ライブラリ(ソースコード含む)
- ROM化トレーニングプログラム
- UNIXライクなプログラム保守ツール(kmmake)
- lcc80,cpp,kmmakeなどツールのソースコード
- 日本語マニュアル
- 登録カード
●LSI C-80 Ver.3.6の(Windowsパック)基本パッケージ、(Solarisパック)基本パッケージ、(FreeBSD/Linuxパック)基本パッケージは、それぞれ別商品になりますので予めご了承ください。
●本コンパイラを使用して作成されたプログラムの販売については、コンパイラ自身をその中に含んでいない限りロイヤリティ(使用料)は一切不要です。
ご質問はお問い合わせフォームからお問合せください。
販売代理店
株式会社キョードー | 〒101-0021 東京都千代田区外神田1-10-11 東京ラジオデパート2F TEL.(03)3257-0202(代) FAX.(03)3257-0250 http://www.kydsem.co.jp/ |
---|---|
東栄電気株式会社 | 〒101-0041 東京都千代田区神田須田町2-2 須田町藤和ビル TEL.(03)3252-4291(代) FAX.(03)3254-1006 http://www.toei-dk.co.jp/ |
ソフトバンク株式会社 | 各支店までお問い合せください。 https://www.softbank.jp/ |
ダイワボウ情報システム株式会社 | 各支店までお問い合せください。 http://www.pc-daiwabo.co.jp/ |
TD SYNNEX株式会社 | 各支店までお問い合せください。 https://jp.tdsynnex.com/ |
日本電計株式会社 | 各支店までお問い合せください。 http://www.n-denkei.co.jp/ |
株式会社システナ | 各支店までお問い合せください。 http://www.systena.co.jp/ |
ファイルダウンロード
諸注意
- ご使用の際は商品添付の説明書をよくお読みのうえ、正しくお使いください。
- 仕様および外観などは性能向上のため予告なしに変更することがあります。
- 本製品(ソフトウェアを含む)は日本仕様であり、弊社では海外でのサービスおよび技術サポートなどは行っておりません。
- LSI Cはエル・エス・アイ ジャパン株式会社の登録商標です。そのほか、商品名は一般に各開発メーカーの登録商標または商標です。