Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

Applilet EZ PL for RL78 改善要望

Applilet EZ PL for RL78 V1.0J, V2.00J を試してみました。

デジタル回路版電子ブロックという感じで興味深いツールと思いましたが、少々使いづらい点もあったので改善要望として挙げておきます。

> 本ツールは評価版です。本ツールに関するテクニカルサポートは受け付けておりません。

と明記されていることは理解しており、返答等を求めているものではありません。

  • ・パネル配置ウィンドウが狭い

    パネル配置ウィンドウは横16×縦40個のブロックで構成されていますが、10ピンの RL78/G10 を使用してちょっとパネルを配置するだけで案外余裕がない感じです。パネル配置のレイアウトを変更したい場合には複数パネルを選択しカットアンドペーストが役立ちますが、それを行うにもパネル配置ウィンドウに余裕があると便利です。

    パネル配置ウィンドウを広くする機能があれば便利と思います。最初から広いと環境によってはスクロールを多用する必要が出てきて不便ともなりかねないので、ユーザーの操作で任意に変更できるのが良いと思います。

  • In reply to fujita nozomu:

    検証その 1」の .map ファイルの出力を見てみると、NoMay さんの報告されてる「(3) 機能しないパターンその2」と同様の「謎の空隙(くうげき)」が出来ていることに気付いた。

    *** Mapping List ***
    
    SECTION                            START      END         SIZE   ALIGN
    
    .vect
                                      00000000  0000007f        80   0
    .const
                                      00000080  0000008f        10   2
    .constf
                                      00000080  00000080         0   2
    .sdata
                                      00000080  00000080         0   2
    .option_byte
                                      000000c0  000000c3         4   1
    .security_id
                                      000000c4  000000cd         a   1
    .textf
                                      000000c4  000000c4         0   1
    .SLIB
                                      000000c4  000000c4         0   1
    .data
                                      000000ce  0000013c        6f   2
    .text
                                      00000143  00000961       81f   1
    .RLIB
                                      00000a25  00000a8a        66   1
    .bss
                                      000ffce0  000ffceb         c   2
    .dataR
                                      000ffcec  000ffd5a        6f   2
    .sbss
                                      000ffe20  000ffe26         7   2
    .sdataR
                                      000ffe28  000ffe28         0   2
    
    *** Total Section Size ***
    
    RAMDATA SECTION:  00000082 Byte(s)
    ROMDATA SECTION:  0000010d Byte(s)
    PROGRAM SECTION:  00000885 Byte(s)

    リンクの際に使用している rlink.exe へのサブコマンド・ファイル knight2000.plk に

    -STARt=.text,.textf,.RLIB,.SLIB,.sdata,.data/000ce,.dataR,.bss/FFCE0,.sdataR,.sbss/FFE20
    

    を追加してビルドした結果、

    *** Mapping List ***
    
    SECTION                            START      END         SIZE   ALIGN
    
    .vect
                                      00000000  0000007f        80   0
    .const
                                      00000080  0000008f        10   2
    .constf
                                      00000080  00000080         0   2
    .option_byte
                                      000000c0  000000c3         4   1
    .security_id
                                      000000c4  000000cd         a   1
    .text
                                      000000ce  000008ec       81f   1
    .textf
                                      000008ed  000008ed         0   1
    .RLIB
                                      000008ed  00000952        66   1
    .SLIB
                                      00000953  00000953         0   1
    .sdata
                                      00000954  00000954         0   2
    .data
                                      00000954  000009c2        6f   2
    .dataR
                                      000ffce0  000ffd4e        6f   2
    .bss
                                      000ffd50  000ffd5b         c   2
    .sdataR
                                      000ffe20  000ffe20         0   2
    .sbss
                                      000ffe20  000ffe26         7   2
    
    *** Total Section Size ***
    
    RAMDATA SECTION:  00000082 Byte(s)
    ROMDATA SECTION:  0000010d Byte(s)
    PROGRAM SECTION:  00000885 Byte(s)
    

    謎の空隙は解消した。

  • ・入出力ポートの設定が分かりづらい

    入出力ポートの設定方法が分かりづらいと思います。入力ポートの設定は入力パネル/出力パネルに配置したデジタル入力/デジタル出力のプロパティか、表示(V)→入出力ポート一覧(P) で表示されるダイアログにて行いますが、内蔵プルアップ抵抗の設定は入出力ポート一覧の方でしかできず分かりづらいデザインとなっている気がします。どちらの方法でも設定可能な項目は設定できる様機能するべきです。

    また、入出力ポート一覧のダイアログで入力ポートに内蔵プルアップ抵抗を「使用する」に設定した後そのポートを出力ポートに変更すると、実際機能はしませんが出力ポートであるにも関わらず内蔵プルアップ抵抗が有効化されるようで、実行(R)→生成(C) を行うとプルアップ抵抗オプション・レジスタへの設定にそのような値が使用されます。機能しない出力ポートへの内蔵プルアップ抵抗は有効化されないのが望ましいと思います。

    あと、『Applilet® EZ PL for RL78 For Ver.2.00 ユーザーズマニュアル』の「図6-8 [プロパティの設定]ダイアログの例([デジタル入力]パネルの場合」の画像ですが、Ver 2.00 以前のものが使用されているようです(内蔵 → 内臓)。ユーザーの混乱を招く元であり、Ver.2.00 のものを使用すべきです。

  • ・コメントを書きたい

    単純な作例でも、作業をして日数を置けば内容は忘れてしまいがちです。パネル配置ウィンドウの中にコメントとして文字が書けると良いのではないかと思います。パネル配置ウィンドウの中で複数パネルを選択してのカットアンドペーストで機能ブロックの移動を行った場合にもコメントも一緒に移動してくれると良いですね。

  • ・CPU は創れるか?

    刊行から既に10年以上が経っていて未だ販売されている『CPUの創りかた』という本があります。ロジック IC を並べて 4bit CPU を自作しようという本ですが、この本に解説されていることが Applilet EZ PL for RL78 でできるとちょっと面白いですね。

    この本の内容に限りませんが機能と規模でその程度のことはできて欲しいと思います。

  • ・パネル配置ウィンドウでのユーザーパネルが分かりづらい

    ユーザーパネルを作成しパネル配置ウィンドウに配置すると

    パネル配置ウィンドウでの表示が全て 'USER' となるので複数のユーザーパネルを作成した場合に分かりづらいです。ユーザーパネルにはパネル名が付いている筈なので其方を表示すべきと思います。

    あと、ユーザーパネルの各ピンは任意に名前が付けられるとロジック IC パネルにない IC を追加する際などに実在のものと対応が取れて便利と思います。

    ユーザーパネルを一旦エクスポートし、エクスポートされた XML ファイルをエディットするとユーザーパネルや各ピンの名前は変更できるようですが、標準の機能として任意に名前を付けられるものがあれば良いと思います。また、例えば入力 4本、出力 4本のユーザーパネルを作成したとして、各ピンの名前は

      

    入力が A~D、出力が V~Y となりますが、パネル編集でソースの編集を行おうとすると、テンプレートとして用意されるソースが

    /*--- Variable declaration ---*/
        /* ここに変数を記述してください */
        /* 例
        UCHAR work;
        */
    
    /*--------------------------------*/
    
    /* Function Declaration */
    void PANEL_test2(UCHAR In_1, UCHAR In_2, UCHAR In_3, UCHAR In_4, UCHAR *Out_1, UCHAR *Out_2, UCHAR *Out_3, UCHAR *Out_4)
    {
        /* ここに処理を記述してください */
    }
    

    入力が In_1~In_4、出力が *Out_1~*Out_4 となり対応がとれてない感じです。同一の名前か、あるいは対応が簡単に連想できるものにすべきと思います。

  • ・ユーザーパネルのソース編集のエディタが低機能すぎる

    ユーザーパネルのソース編集を行う際に使用されるテキストエディタが低機能すぎて使用しづらいです。

    Java の基本的なコンポーネントを使用しているだけだと思いますが、もう少しなんとかなったのではないかと思います。ソース編集と目的は最初から明確なのだからオートインデントくらいはあっても良いでしょう。 ^a で全選択ができないのには驚きました。

  • ・hdwinit() を 2度呼んでいて無駄

    Applilet EZ PL for RL78 V2.00 で生成されるコードの cstart.asm は CC-RL の標準の cstart.asm の内容そのまゝで、中で hdwinit() を呼び出していますが、

    	;--------------------------------------------------
    	; hardware initialization
    	;--------------------------------------------------
    	CALL	!!_hdwinit
    

    main.c の中の main() からも hdwinit() を呼び出しており、無駄な感じです。

    void main( void )
    {
    	/* Hardware Initiate */
    	hdwinit();
    
    	/* Panel Initiate */
    	panel_init0();
    
    	/* Main Loop */
    	main_loop();
    }
    

    どちらかを削除するべきと思います。標準の cstart.asm に手を加えないという前提では main.c の方が削除するのは易しいですが、現状の cstart.asm では RAM の初期化の前に割り込みを許可する問題があり、どちらかというと cstart.asm の方を修正していただきたい感じです。

    あるいは、hdwinit() はダミーとして空の関数を用意しておき、main() から hdwinit() を呼ぶ代わりに

    	SystemInit( );
    	__EI( );
    

    とすれば、

    • cstart.asm を変更せずに済む
    • ハードウェアの初期化が 1回のみとなる
    • ハードウェアの初期化が RAM の初期化の後となる

    安全かつ変更箇所を少なくできると思われます。

  • In reply to fujita nozomu:

    fujitaさん、こんにちは、NoMaYです。

    かなり時間が経ってしまっていて申し訳ありませんが、CC-RL V1.04で確認して頂きまして、どうもすみませんでした。

    それで、knight2000lite2のcstart.asmですが、試してみると以下の画面コピーのように期待通りには動きませんでした。調べてみると、ROMコピールーチンでROMから読み出す時にESプレフィクス(ES=0にした上での)が付いていませんでした。或いは、0xF8○○○のミラー領域からの読み出しになるようにアドレスに0x8000だけ下駄を履かせて読み出すようにするか、どちらかの必要があると思います。CC-RLで以下のような記述が出来るとすっきりするのですが、どうも出来ないようです。(出来たとして、ここでしか出番が無さそうな記法ですが、、、)

    例えば

        MOVW    HL,#LOWW(STARTOF(.data) + 0x8000)

        MOVW    HL,#LOWW(STARTOF(.sdata) + 0x8000)

    とか

        MOVW    HL,#MIRLW(STARTOF(.data))

        MOVW    HL,#MIRLW(STARTOF(.sdata))

    とか、、、

    プロジェクトのファイル一式
    CCRLv102andCStartG10Fujita.NG.zip

    画面コピー


    [追記]

    あっ、すみません、、、

    誤) /* sdatavar ==> 0x5648 --> 正常 */
    正) /* sdatavar ==> 0x5678 --> 正常 */

    さらに、今更ながら、かつ、我ながら、何を考えていたのか思い出せないのですが、どうしてhdwinit()とmain()の2箇所に分けて違うもの(bssの変数とdataの変数)を別々にチェックしたのだろうか、と思わずにはいられません。hdwinit()かmain()の片方だけでbssの変数とdataの変数の両方をチェックすれば良かったのに、と今は思います、、、

  • In reply to NoMaY:

    > 調べてみると、ROMコピールーチンでROMから読み出す時にESプレフィクス(ES=0にした上での)が付いていませんでした。

    ああ、そうか。RL78/G10 はミラー領域がなくて全部そのまま読めるような勘違いをして ES: を削除してました。オフセットが付くのでしたね。
  • In reply to NoMaY:

    宜しければ以下の添付の cstart.asm をお試し下さい。

    cstart.asm.zip

  • ・1.25MHz と 2.5MHz 動作時のタイマー割り込みの周期間違い

    コード生成される timer.c の中の TM00_Init() で 0.25ms 周期のタイマー割り込みの初期化がされますが

    	ucsysclocksrc = SYS_CLOCK_SRC;
    	ucsysclockfreq = SYS_CLOCK_FREQ;
    	if( (ucsysclocksrc == CLOCK_SRC_INTERNAL)
    	 && ((ucsysclockfreq == 1)||(ucsysclockfreq == 2))){
    		if(ucsysclockfreq == 1){
    			usTMR00 = TM_250US_1250K;
    		}else{
    			usTMR00 = TM_250US_2500K;
    		}
    	}else{
    		usTMR00 = SYS_CLOCK_FREQ * 250 - 1;
    	}
    	TDR00H = (UCHAR)(usTMR00 >> 8) & 0x00FF;	/* 0.25ms */
    	TDR00L = (UCHAR)usTMR00 & 0x00FF;
    

    高速オンチップオシレータを使用して 1.25MHz か 2.5MHz を選んだ際に使用される定数 TM_250US_1250K と TM_250US_2500K の定義は 

    #define	TM_250US_1250K	312			/* 250us = 1/1.25MHz * 312 */
    #define	TM_250US_2500K	625			/* 250us = 1/2.5MHz  * 625 */
    

    となっており、-1 するのを忘れているようです。

  • ・もっと高速なクロックが欲しい

    クロックパネルの出力できる周波数は 0.01秒間隔で LOW/HIGH を切り替える 50Hz が上限のようですが、もっと高速なクロックが使いたいです。

    作例では LED の残像の表現を

    • 点灯しっぱなし
    • 1/8 期間のみ点灯
    • 1/64 期間のみ点灯

    で行っており、可能な限り高速なクロックが使いたかったために

    ということをしていました。実際のデジタル回路ではこれは宜しくないですね。Applilet EZ PL for RL78 はデジタル回路入門のための教育ソフトを志向していると思いますが、行儀の悪いことは避けたいところです。数kHz 程度のクロックが使えたらと思います。

  • In reply to fujita nozomu:

    cstart.asm を小変更して 5バイト縮小。

    6403.cstart.asm.zip

  • In reply to fujita nozomu:

    fujitaさん、こんにちは。NoMaYです。

        ;--------------------------------------------------
        ; call main function
        ;--------------------------------------------------
        CALL    !_main      ; main();

        ;--------------------------------------------------
        ; call exit function
        ;--------------------------------------------------
        CLRW    AX      ; exit(0);
    _exit:
        BR  $_exit

    ここ↑を、こう↓しませんか?

        ;--------------------------------------------------
        ; call main function
        ;--------------------------------------------------
    $IF (1)
        BR      !_main      ; main();
    $ELSE
        CALL    !_main      ; main();
    $ENDIF

    $IF (1)
    $ELSE
        ;--------------------------------------------------
        ; call exit function
        ;--------------------------------------------------
        CLRW    AX      ; exit(0);
    _exit:
        BR  $_exit
    $ENDIF

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page