80系クロスコンパイラ

~Let'S Innovate~


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型 A E C (SP+2) (SP+4)
    int, unsigned int, pointer型 HL DE BC (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用マルチタスクモニタ (動作環境は各メーカーにお問合せ下さい)

イオ研究所 IOL-RMM_Z80, IOK-RMM_64180
ミスポ NORTi3/Z80 Standard

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 mkIIKC80TAT 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バイト
    まで)*7
    near
    (64Kバイト
    まで)
    far
    (16Mバイト
    まで)*7
    near
    (64Kバイト
    まで)
    far
    (16Mバイト
    まで)*7
    S デフォルト キーワード
    指定
    デフォルト キーワード
    指定
    デフォルト キーワード
    指定
    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 東京ラジオデパート4F
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/
ソフトバンクBB株式会社 各支店までお問い合せください。
http://www.softbankbb.co.jp/ja/index.html
ダイワボウ情報システム株式会社 各支店までお問い合せください。
http://www.pc-daiwabo.co.jp/
丸紅インフォテック株式会社 各支店までお問い合せください。
http://www.m-infotec.co.jp/
日本電計株式会社 各支店までお問い合せください。
http://www.n-denkei.co.jp/
株式会社システナ 各支店までお問い合せください。
http://www.systena.co.jp/

ファイルダウンロード


諸注意

  • ご使用の際は商品添付の説明書をよくお読みのうえ、正しくお使いください。
  • 仕様および外観などは性能向上のため予告なしに変更することがあります。
  • 本製品(ソフトウェアを含む)は日本仕様であり、弊社では海外でのサービスおよび技術サポートなどは行っておりません。
  • LSI Cはエル・エス・アイ ジャパン株式会社の登録商標です。そのほか、商品名は一般に各開発メーカーの登録商標または商標です。