86系Cクロスコンパイラ

LSIC-86 ver.3.5

LSIC-86はWindowsまたはUNIX上で動作するi8086のソフトウェア開発をサポートする16ビットCクロスコンパイラです。

特長

  • ANSI標準規格に準拠したコンパイラ
  • コンパイラが最適なレジスタ割り付けを実行
  • i8086の4つのメモリモデルをサポート
  • リンカはMS-DOSで実行可能なEXEファイル、またはROM化可能なバイナリ、あるいは拡張インテルHEXファイルを生成
  • ターゲットシステムのメモリマップにあわせてオブジェクトを配置可能
  • ROM化のための初期設定モジュールおよび全ライブラリ関数のソース付き

言語仕様

  • ANSI標準規格に準拠したコンパイラ(多バイト文字 、<local.h>を除く)
  • サポートするデータ型
    void char signed 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 # ##
  • プロトタイプ宣言
    パラメタの間違いを防ぐプロトタイプ宣言が可能です。

コンパイラ

  • 高速かつコンパクト
    コンパイラがレジスタの最適な自動割り付けを行います。作成したプログラムの実行は高速、オブジェクトコードはコンパクトです。プログラマがregister宣言をあたえなくても、どの変数をレジスタに割り当てるべきかをコンパイラが自動的に判断します。従来のi8086用Cコンパイラはせいぜい2つか3つのレジスタしか割り当てられなかったのに対し、LSI C-86は使用されている変数をax,bx,cx,dx,si,diの6つのレジスタに可能なかぎり割り当てます。さらにLSI C-86は変数の生存期間を調べ、異なる変数に同じレジスタを割り当てることもやってのけます。したがって7つ以上の変数が使われている場合でも、全部レジスタで済ませてしまうこともあります。
  • パラメタの受け渡し
    関数パラメタは可能なかぎり(最大4個)レジスタを使って渡します。そのため関数呼び出しのオーバーヘッドは非常に軽く、アセンブリ言語サブルーチンとのリンクも簡単に行えます。
  • 各種メモリモデルをサポート
    スモール(S)、プログラム(P)、データ(D)、ラージ(L)の4つのメモリモデルをサポートしています。さらにfar,nearキーワードをサポートしていますので、効率の悪いラージモデルを使わずに、スモールモデルのプログラムの中で大量のデータを使用することができます。
  • コンパイラドライバ
    使いやすいコンパイラドライバを用意しています。ソースも含まれていますので、自由にカスタマイズすることができます。
  • アセンブリ・インライン関数
    アセンブリ言語をCのソースプログラム中に記述することができます。inp(ポート入力)のような関数は、Cプログラムの中にインライン展開することができ、効率が非常に良くなります。

図1. ソースプログラム

 char    _asm_c();
 
 #define _qq_(s) #s
 #define _q_(s)  _qq_(s)
 
 #define inp8(p)         _asm_c("\n\tIN\tAL," _q_(__eval__(p)))
 #define outp8(p, c)     _asm_c("\n\tOUT\t" _q_(__eval__(p)) ",AL", (char)(c))
 
 #define di()            _asm_c("\n\tCLI")
 #define ei()            _asm_c("\n\tSTI")
 
 void    putch(char c)
 {
           di();
           while ((inp8(0x00) & 0x01) == 0)
                 ;
           ei();
           outp8(0x01, c);
 }

生成されたコード

 putch_::
         PUSH    CX
         MOV     CL,AL 
         CLI
 _2:
         IN      AL,0
         TEST    AL,1
         JE      _2
         STI
         MOV     AL,CL
         OUT     1,AL
         POP     CX
         RET

アセンブラ

アセンブラはi8086/i80186/i80286およびi8087/i80287の命令をサポートしています。また、ジャンプ命令を最適化する機能があります。通常の条件ジャンプ命令で分岐できるのは-128~+127バイトの範囲ですが、この範囲外への条件ジャンプ命令は逆の条件のジャンプ+無条件ジャンプの2命令に自動的に変換します。同様に、無条件ジャンプ命令もできるだけ短い命令を生成します。

リンカ

EXEファイルはもちろん、バイナリファイルあるいは拡張インテルHEXファイルを生成します。セグメントがロードされるべきアドレスを指定することによって、ターゲットシステムのメモリマップに柔軟に対応することができます。また、MS-LINKと同等のマップファイルを生成しますので、このファイルをICEなどで利用すればシンボリックデバッグが可能です。

プロファイラ

プロファイラはプログラムの実行をモニタするためのツールです。これは計数型プロファイラで、プログラムのどの文を何回実行したかをカウントします。その結果、プログラムのどの部分が実行されたのかが一目瞭然となりますので、条件判定の論理のミスなどを容易に発見することができます。また、実行回数の多い関数を最適化すればプログラム全体の効率を上げることができますが、プロファイラはその指標をあたえてくれます。

ライブラリ

ANSI標準規格で定義された関数のうち、多バイト文字関数とを除く、すべての関数を用意しています。 さらにUNIXで用意されている関数や、MS-DOSとのインタフェース関数など、数多くの関数を用意しています。ライブラリ関数すべてのソースを公開しています。

関数一覧表

 FP_OFF           FP_SEG           MK_FP
 
 _clear87         _control87       _dos_allocmem    _dos_close       _dos_creat
 _dos_creatnew    _dos_findfirst   _dos_findnext    _dos_freemem     _dos_getdate
 _dos_getdiskfree _dos_getdrive    _dos_getfileattr _dos_getftime    _dos_gettime
 _dos_getvect     _dos_keep        _dos_open        _dos_read        _dos_setblock 
 _dos_setdate     _dos_setdrive    _dos_setfileattr _dos_setftime    _dos_settime
 _dos_setvect     _dos_write       _fpreset         _harderr         _hardresume
 _hardretn        _lrotl           _lrotr           _matherr         _nullcheck
 _rotl            _rotr            _status87        _tolower         _toupper
 
 abort            abs              access           acos             asctime
 asin             assert           atan             atan2            atexit
 atof             atoi             atol             bdos             bsearch
 btom             calloc           ceil             cgets            chdir
 chkctype         chmod            chsize           clearerr         clock
 close            cos              cosh             cprintf          cputs
 creat            cscanf           ctime            ctype            daylight
 di               difftime         div              dosexterr        dup
 dup2             ecvt             ei               eof              exec
 execl            execle           execlp           execlpe          execv
 execve           execvp           execvpe          exit             exp
 fabs             far_memccpy      far_memchr       far_memcmp       far_memcpy
 far_memicmp      far_memmove      far_memset       far_movmem       far_setmem
 far_stpcpy       far_strcat       far_strchr       far_strcmp       far_strcmpi
 far_strcpy       far_strcspn      far_strdup       far_stricmp      far_strlen
 far_strlwr       far_strncat      far_strncmp      far_strncmpi     far_strncpy
 far_strnicmp     far_strnset      far_strpbrk      far_strrchr      far_strrev
 far_strset       far_strspn       far_strstr       far_strtok       far_strupr
 farcalloc        farcoreleft      farfree          farmallo         farrealloc
 farstr           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         fstat            ftell            ftime
 ftruncate        fwrite           gcvt             getc             getch
 getchar          getche           getcwd           getenv           getpid
 gets             getw             gftime           gmtime           hantozen
 inp              inp8             inp8w            inpw             int86
 int86x           int86y           intdos           intdosx          intdosy
 isalkana         isalnmkana       isalnum          isalpha          isascii
 isatty           iscntrl          iscsym           iscsymf          isdigit
 isgraph          isgrkana         iskana           iskanji          iskanji2
 iskmoji          iskpun           islower          ispnkana         isprint
 isprkana         ispunct          isspace          isupper          isxdigit
 itoa             jisalpha         jisdigit         jishira          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             localtime        log              log10
 longjmp          lseek            ltoa             malloc           matherr
 max              memccpy          memchr           memcmp           memcpy
 memicmp          memmove          memset           min              mkdir
 mktemp           mktime           modf             movedata         movemem
 mstojis          mtob             nthctype         onexit           open
 outp             outp8            outp8w           outpw            perror
 pow              printf           putc             putch            putchar
 putenv           puts             putw             qsort            raise
 rand             read             realloc          remove           rename
 rewind           rmdir            rmtmp            sbrk             scanf
 segread          setbuf           setjmp           setmem           setvbuf
 signal           sin              sinh             spawn            spawnl
 spawnle          spawnlp          spawnlpe         spawnv           spawnve
 spawnvp          spawnvpe         sprintf          sqrt             srand
 sscanf           stackavail       stat             stime            stpcpy
 strcat           strchr           strcmp           strcmpi          strcpy
 strcspn          strdup           strerror         strftime         stricmp
 strlen           strlwr           strncat          strncmp          strncmpi
 strncpy          strnicmp         strnset          strpbrk          strrchr
 strrev           strset           strspn           strstr           strtod
 strtok           strtol           strtoul          strupr           swab
 system           tan              tanh             tell             tempnam
 time             timezone         tmpfile          tmpnam           toascii
 tolower          toupper          truncate         tzname           tzset
 ultoa            umask            ungetc           ungetch          unlink
 utime            va_arg           va_end           va_list          va_start
 vfprintf         vprintf          vsprintf         write            xprintf
 xscanf          

ROM化

ROM化のための初期設定モジュールのソースが含まれています。これをターゲットシステム用に修正することによって、どのようなシステムにも対応することができます。また、アセンブラとのリンクが簡単に行え、割り込み処理もCで記述できます。さらに、オブジェクト効率がよく、ROMプログラムもほとんどCで記述できます。

性能

図1-a,bは、ベンチマークプログラムのソースとオブジェクトです。すべての変数がレジスタに割り当てられ、まだdiレジスタが余っていることにご注目ください。ソースの左端の数字はプロファイラによる実行回数です。

図1-a ベンチマークプログラムのソースリスト

         #include <stdio.h>
 
         #define SIZE  8190
         #define TRUE  1
         #define FALSE 0
 
         char flags[SIZE + 1];
 
       1 void main()
       1 {
       1        int k, i, prime, count, iter;
       1
       1        printf("100 iterations\n");
       1        for (iter = 1; iter <= 100; iter++) {
     100               count = 0;
     100               for (i = 0; i <= SIZE; i++)
  819100                       flags[i] = TRUE;
     100               for (i = 0; i <= SIZE; i++)
  819100                       if (flags[i]) {
  189900                             prime = i + i + 3;
  189900                             for (k = i + prime; k <= SIZE; k += prime) 
 1499900                                       flags[k] = FALSE;
  189900                               count++;
  819100                       }
     100        }
       1        printf("%d primes\n", count);
      1 } zentohan

図1-b ベンチマークプログラムのオブジェクトコード

 CGROUP  GROUP   TEXT
 DGROUP  GROUP   DATA,BSS
 
 TEXT    CSEG
 DATA    DSEG
 BSS     DSEG
 flags_:         RS      8191
 
 DATA    DSEG
 Z6      DB      '100 iterarions', 10,0 
 Z25:    DB      '%d primes',10,0
 
 TEXT    CSEG
 
 main_::
         PUSH    CX
         PUSH    DX
         PUSH    SI
         MOV     AX,Z6
         PUSH    AX
         CALL    printf_
         ADD     SP,2
         MOV     DX,1
         JMP     _1
 _2:
         XOR     CX,CX
         XOR     BX,BX
         JMP     _6
 _7:
         MOV     [flags_+BX].B,1
         INC     BX
 _6:
         CMP     BX,8190
         JNG     _7
         XOR     SI,SI
         JMP     _11
 _12:
         CMP     [flags_+SI].B,0
        JE      _17
           MOV     AX,SI
           ADD     AX,SI
           ADD     AX,3
           MOV     BX,SI
           ADD     BX,AX
           JMP     _18
 _19:
           MOV     [flags_+BX].B,0
           ADD     BX,AX
 _18:
           CMP     BX,8190
           JNG     _19
           INC     CX
 _17:
           INC     SI
 _11:
           CMP     SI,8190
           JNG     _12
           INC     DX
 _1:
           CMP     DX,100
           JNG     _2
           PUSH    CX
           MOV     AX,Z25
           PUSH    AX
           CALL    printf_
           ADD     SP,4
           POP     SI
           POP     DX
           POP     CX
           RET
 
           EXTRN   printf_
           END
 

コンパイル処理の流れ

※Windows Vista以降では日本語表示および日本語入力はできません。

動作環境

ソフトウェア名 対応OS
LSI C-86 Ver3.5 (Windowsパック) Windows XP Professional, Windows Vista※1 Business (32ビット) / Ultimate (32ビット)
LSI C-86 Ver3.5 (Solarisパック) Solaris 2.x for SPARC (SunOS 5.4, SunOS 5.5.1, SunOS 5.6, libc 1以上)
LSI C-86 Ver3.5 (FreeBSD/Linuxパック) FreeBSD/i386 (2.2.6-RELEASE, libc3), Linux (x86版, libc5.2.18)

※1.Windows Vistaでは日本語表示および日本語入力はできません。
●CD-ROMドライブ必須 ●libcバージョンは弊社で確認したものです。

商品一覧

商品名 型名 商品コード 価格
LSI C-86 Ver.3.5(Windowsパック)基本パッケージ
【供給メディア:CD-R】
LSIC86-10-ST 4940183061817 48,000円(税別)
LSI C-86 Ver.3.5(Windowsパック)
追加1ライセンス*2
LSIC86-10-1L 4940183022009 19,000円(税別)
LSI C-86 Ver.3.5(Solarisパック)基本パッケージ
【供給メディア:CD-R】
LSIC86-20-ST 4940183082812 48,000円(税別)
LSI C-86 Ver.3.5(Solarisパック)追加1ライセンス*2 LSIC86-20-1L 4940183083000 19,000円(税別)
LSI C-86 Ver.3.5(FreeBSD/Linuxパック)基本パッケージ
【供給メディア:CD-R】
LSIC86-30-ST 4940183084816 48,000円(税別)
LSI C-86 Ver.3.5(FreeBSD/Linuxパック)
追加1ライセンス*2
LSIC86-30-1L 4940183085004 19,000円(税別)
LSI C-86 Ver.3.5追加ユーザーズマニュアル LSIC86-10-UM 4940183023006 9,800円(税別)

※2.基本パッケージ1本をご購入いただくと、商品別に追加ライセンスの購入ができます。追加ライセンスは追加1ライセンスをご用意しておりますので、ご使用になるコンピュータの台数に合わせて必要なライセンス数をご購入いただけます。

スクールパック

商品名 型名 商品構成 価格
(Windows)スクールパック
基本10ライセンス
LSIC86SP-10-ST マスターディスク(1枚)
供給メディア:CD-R、
ライセンスキー(10ユーザー分)、
ユーザーズマニュアル(1冊)
各150,000円(税別)
(Solaris)スクールパック
基本10ライセンス
LSIC86SP-20-1L
(FreeBSD/Linux)スクールパック
基本10ライセンス
LSIC86SP-30-ST
(Windows)スクールパック
追加1ライセンス*3
LSIC86SP-10-1L ライセンスキー(1ユーザー分) 各15,000円(税別)
(Solaris)スクールパック
追加1ライセンス*3
LSIC86SP-20-1L
(FreeBSD/Linux)スクールパック
追加1ライセンス*3
LSIC86SP-30-1L
スクールパック
追加ユーザーズマニュアル
LSIC86SP-10-UM ユーザーズマニュアル(1冊) 5,000円

Windowsスクールパックの基本10ライセンス、Solarisスクールパックの基本10ライセンス、FreeBSD/Linuxパックの基本10ライセンスは、それぞれ別商品になりますので、予めご了承ください。
ご注文頂く基本10ライセンス、追加1ライセンスおよび追加ユーザーズマニュアルは、ひとつのパッケージに同朋されます。

基本10ライセンスをご購入いただくと、商品別に追加ライセンスの購入ができます。追加ライセンスは追加1ライセンスをご用意しておりますのでご使用になるコンピュータの台数に合わせて、必要なライセンス数をご購入いただけます。

商品構成

  • コンパイラドライバ(lcc86)
  • プリプロセッサ(cpp)
  • コンパイラ(cf/cg86)
  • アセンブラ(r86)
  • リンカ(lld)
  • ライブラリ
  • ライブラリのソースコード(Cおよびアセンブリ言語)
  • ROM化トレーニングプログラム
  • UNIXライクなプログラム保守ツール(kmmake)
  • lcc86,cpp,kmmakeなどツールのソースコード
  • 日本語マニュアル
  • 登録カード

LSI C-86 Ver.3.5の(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はエル・エス・アイ ジャパン株式会社の登録商標です。そのほか、商品名は一般に各開発メーカーの登録商標または商標です。