;　　　　　　プログラム名　　　LA_10M
;;
;開発開始　２００１年４月１日　　　　　　　　　　金野
;                     
;
;５月３１日に完成した４０ＭＨｚロジックアナライザをベースにして
;先に作り上げたこの１０ＭＨｚロジックアナライザのバージョンアップを行う
;
;（１）最高サンプリング周波数　１０ＭＨｚとして最終確定する
;（２）グラフの横軸に時間スケールも描写させる
;
;
;６月１日完成
;
;５．５インチパッシブカラー液晶モジュールＬＭ３２Ｃ０４１を使用した
;８チャンネルロジックアナライザのプログラムである。
;
;アセンブラ言語はマイクロチップ社純正ＭＡＳＭ
;
;画面の使用方法
;　（１）描写の原点（通常左上）が描写に当たって、左下になる配置とする
;
;
;                  _____________________________
;                  :     _____________________     :   
;                  :    |                     |    :   
;                  : ch7|_____________________|    :
;                  :    |                     |    :   
;                  : ch6|_____________________|    :     
;                  :    |                     |    :   
;                  : ch5|_____________________|    :
;                  :    |                     |    :
;                  : ch4|_____________________|    :
;          320     :    |                     |    :
;                  : ch3|_____________________|    :
;                  :    |                     |    :
;                  : ch2|_____________________|    :
;                  :    |                     |    :
;                  : ch1|_____________________|    :
;                  :    |                     |    :
;                  : ch0|_____________________|    :
;              ↑  :     ←       231       →     :
;                  :↑                             : 
;              40  :↑           menu              : 18
;              ↓  : ____________________________  ; 10
;
;                   ←20→      
;                                 240
;
;
;    menu1  triger channel      1  2  3  4  5  6  7  8 
;    
;    menu2  trigger type        up  down  Hig  Low
;
;    menu3  sampling frequency  10M  1.25M  156k  20k  2.5k  313k  39  5
;
;**********************************************************************************************
;
     LIST P=PIC17C756           ;使用するプロセッサの種類を指定する
     #INCLUDE "P17C756.INC"     ;上記のプロセッサ用インクルードファイルを呼び出し、結合する

;PIC本体の初期設定
     __CONFIG  _MC_MODE & _WDT_OFF & _XT_OSC & _BODEN_ON 
                                ;ＰＩＣはマイクロコントローラモード
                                ;これでポートＣその他の端子がＩ／Ｏポートとなる
                                ;ウオッチドックタイマーはオフ
                                ;発信はクリスタル方式
                                ;ブラウンアウトはオン。規定電圧以下となるとリセットする
;**********************************************************************************************
;使用する変数の定義
   CBLOCK h'0020'
      i           ;任意使用のカウンタ変数
      count       ;任意使用のカウンタ変数
      current     ;同上
      temp0       ;カウンター用変数
      temp1       ;カウンター用変数
      temp2       ;カウンター用変数
      temp3       ;カウンター用変数
      linecount   ;行数カウンタ
      retucount   ;列数カウンタ

      modenum     ;文字表示領域番号が入る。初期値＝０としておく
                  ;＝０の時　トリガチャンネル、　＝１の時　トリガ形式、　＝２の時　サンプリング周波数
      modebit     ;選択されているメニュー画面内の残りの文字を白色で表示し、現時点でその領域が指定され
                  ;ていることを示し、他の領域と区別させる。第０ビット目を使用する。
                  ;＝０ならば緑色、　＝１ならば白色。
      jobmode     ;処理の種類の識別用変数
                  ;＝０　初期画面表示、＝１　測定結果の画面表示
      proctype    ;データ表示画面において、各処理操作に対応させる変数
                  ;＝０　リセット、＝１　左移動、＝２　縮小、＝３　拡大、＝４　右移動 
      overflow    ;画面表示において、読み出しメモリアドレスのオーバーフロー
                  ;チェックに使用する　第０ビット　オーバーフロー＝１
      remeasure   ;再測定のために使用する変数　第０ビットを使用
                  ;＝０　グラフ処理モード、　＝１　再測定、

      reducount   ;縮小回数値が入る変数　初期値を０としておく
      addressstep ;アドレスアップの値のはいる変数　初期値は１としておく

      leftaddlow     ;データ表示画面での左端データのアドレス値が入る変数　　低位８ビット
      leftaddhight   ;　　高位３ビット　初期値として　ｂ’１１１１００００’を入れておくこと
      rightaddlow    ;データ表示画面での右端データのアドレス値が入る変数　　低位８ビット
      rightaddhight  ;　　高位３ビット　初期値として　ｂ’１１１１００００’を入れておくこと

      wideaddlow     ;データ表示画面での左右両端間のデータアドレス数の低位８ビットが入る変数
      wideaddhight   ;　　高位３ビットが入る変数

      midaddlow      ;画面に表示されているデータの中間アドレスの低位８ビットが収まる変数
      midaddhight    ;　　　同上　　　　　　　　　　　　　　　　高位３ビット　　

      trigchan    ;トリガチャンネル番号が入る。　初期値＝０としておく。
                  ;チャンネル番号　０，１，２，３，４，５，６，７
      trigtype    ;トリガ形式番号が入る。　　　　初期値＝０（アップ）としておく。
                  ;＝０の時　ｕＰ、　＝１の時　Ｄｏ、　＝２の時　Ｈｉ、　＝３の時　Ｌｏ
                  ;＝４は　スペースに割り当てる
      samptime    ;サンプリング周波数番号が入る。初期値＝５（１０Ｍ）としておく。
                  ;＝５の時　１０Ｍ、＝６の時　１．２５Ｍ、＝７の時　１５６ｋ、＝８の時　２０ｋ、
                  ;＝９の時　２．５ｋ、＝１０の時　３１３，＝１１の時　３９，　＝１２の時　５
      char_number ;メニュー領域に表示する文字分に割り当てる変数
      charcount   ;文字番号カウンタ用変数

      charcode    ;文字の８ビットコードが入る

      addhig      ;１１ビットアドレスの上３ビットが入る変数
      addlow      ;１１ビットアドレスの下８ビットが入る変数

      datacode    ;メモリの８ビットデータが入る変数

      HightbyteA  ;１１ビット減算用変数
      LowbyteA    ;　Ａ－Ｂ＝Ｃ
      HightbyteB  ;
      LowbyteB    ;
      HightbyteC  ;
      LowbyteC    ;

      timescale_wline ;横軸時間幅を表示する変数　初期値を width（＝２３１） と一致させておく
      timebandcount   ;横軸時間幅を描写する際に使用するカウンタ変数

   ENDC

;*********************************
;使用する端子に固有名詞を定義し、わかりやすく（？）する
;末尾の数値はバンク番号を示している
  #define      VSYNC_1  PORTE,0     ;ＬＣＤ制御端子
  #define      HSYNC_1  PORTE,1     ;　同上
  #define      DCK_1    PORTE,2     ;　同上

  #define      LEDmon_1   PORTE,3   ;動作チェック用ＬＥＤ        

  #define      Mainmenu   PORTA,3   ;主メニューの選択ボタンスイッチ
  #define      Submenu    PORTA,4   ;副メニューの選択ボタンスイッチ
  #define      Decide     PORTA,2   ;メニュー決定ボタンスイッチ

  #define    TimebaseA_5  PORTG,5   ;サンプリング周波数決定のための３ビット。smptime の値に従う
  #define    TimebaseB_5  PORTG,6   ;０＝（０００）、１＝（００１）、２＝（０１０）、３＝（０１１）、
  #define    TimebaseC_5  PORTG,7   ;４＝（１１１）、５＝（１０１）、６＝（１１０）、７＝（１１１）

  #define    ChanbaseA_5  PORTG,2   ;トリガチャンネル決定のための３ビット。trigchan の値に従う。
  #define    ChanbaseB_5  PORTG,3   ;０＝（０００）、１＝（００１）、２＝（０１０）、３＝（０１１）、
  #define    ChanbaseC_5  PORTG,4   ;４＝（１１１）、５＝（１０１）、６＝（１１０）、７＝（１１１）

  #define    TypebaseA_1  PORTD,5   ;トリガ形式決定のための２ビット。trigtype の値に従う。
  #define    TypebaseB_1  PORTD,4   ;０＝（００）、１＝（０１）、２＝（１０）、３＝（１１）

  #define    Addresslow_1  PORTC    ;１１ビットアドレス　下８ビット　ＲＣ０～７、上３ビット　ＲＤ０～２
                                    ;　測定時には、アドレスバッファと出力が衝突しないようにするため、
                                    ;　　　　　　　入力端子としておく
                                    ;　メモリからの読み出しの時には、出力端子とし、
                                    ;　アドレスバッファはＨｉ－Ｚとしておく　
  #define    Addresshight_1  PORTD  ;このポートの０，１，２ビット目がアドレス専用。
                                    ;　注意　３ビット目はアドレスカウントのオーバーフローに使用する。
                                    ;　　　　が、この端子は Clear_1 と併用である。
                                    ;　　　　４ビット目以降も他の機能端子と併用である。
  #define    Addoverflow_1  PORTD,3 ;この端子は Clear_1 とも併用

  #define     WE_5        PORTG,0   ;メモリのＷ／Ｒ制御ビット
  #define     OE_5        PORTG,1   ;メモリのイネーブルビット

  #define     HiZcon_1    PORTD,6   ;双方向バスライン制御ビット
  #define     Overflow    PORTA,0   ;アドレスオーバーフローフラッグビット
                                    ;この端子がＨレベルになった時、測定終了とする。
  #define     Clear_1     PORTD,3   ;アドレスカウンタとＦＦのクリアビット
                                    ;　注意　この端子は Addoverflow_1 と併用
  #define     Input0      PORTB,0   ;８チャンネル・デジタルデータビット
  #define     Input1      PORTB,1   ;
  #define     Input2      PORTB,2   ;
  #define     Input3      PORTB,3   ;
  #define     Input4      PORTB,4   ;
  #define     Input5      PORTB,5   ;
  #define     Input6      PORTB,6   ;
  #define     Input7      PORTB,7   ;

  #define     Data        PORTB     ;ポートＢの全体名 

;*********************************
;使用する定数の定義

datanum     equ  2047          ;メモリの最大アドレス値

timebase0   equ     5          ;時間幅設定用定数その０
timebase1   equ   255  ; 64          ;時間幅設定用定数その１
timebase2   equ   255  ;128          ;時間幅設定用定数その２

channum     equ     8          ;測定チャンネル数

dott48      equ    48          ;指定遅延定数　４８ドット分
dott8       equ     8          ;指定遅延定数　　８ドット分
linenum     equ    60          ;描写行数　２４０行   
quadline    equ    60          ;６０行分
hdd32       equ    32          ;１水平線当たりの描写ドット数
hdd10       equ    10          ;　３２０ドット=hdd32*hdd10
hdd16       equ    16          ;
hdd24       equ    24

ini_row     equ     1          ;左側面の塗りつぶす列数
char_row    equ     4          ;左側面に表示する１文字分に割り当てる列数（文字幅）
char_heig   equ     8          ;左側面に表示する１文字分に割り当てる列数（文字高さ）
ini_line    equ    40          ;グラフ領域の最下行
fin_line    equ    40          ;グラフ最上段行と画面最上段行の間の行数
int_line    equ    30          ;チャンネル間の行数

menu_sline  equ    10          ;メニュー文字表示領域の開始行
menu_wline  equ     8  ;20          ;メニュー文字表示領域の行数 

menu_moji1  equ    16  ;15     ;メニュー（パルス形式、サンプリング周波数）の文字群の列数   
menu_moji2  equ    20          ;メニュー欄に表示する横軸時間幅文字の列数

mark_num    equ    32  ;38     ;データ処理での記号群の列数

width       equ   231          ;グラフ幅の列数
height      equ   241          ;グラフ高の行数

timescale_hline    equ  5      ;横軸時間幅描写帯の高さ（ドット数）

;**********************************************************************************************
;**********************************************************************************************;
        org      0               ;
start
        call   initialsetting    ;諸々のパラメータ類の初期設定

mainrepeat
        call   firstsetting      ;測定開始前の前処理

        call   LCDsetup          ;ＬＣＤのセットアップ
        call   firstdisplay      ;初期画面描写

        call   parameterset      ;トリガチャンネル、トリガ形式、サンプリング周波数のソフトでの設定    
        call   secondsetting     ;測定実行前の設定
                                 ;  トリガチャンネル、トリガ形式、サンプリング周波数のハード側の設定
        call   measure           ;測定実行
        call   LCDsetup          ;ＬＣＤのセットアップ
        call   postdisplay       ;測定後の描写

subrepeat

        call   graphjob          ;グラフ処理パラメータの取り込み、そして再描写

        call   LCDsetup          ;
        call   graredisplay      ;メニュー設定に従って、グラフを左右移動、縮小、拡大して再描写
                                 ;
        btfss  remeasure,0       ;
        goto   subrepeat
        goto   mainrepeat

;++++++++++++++++++++++++++++    

       call   LEDon
endless
       goto   endless
;++++++++++++++++++++++++++++

        goto   jobend           ;実行終了

;**********************************************************************************************
;**********************************************************************************************
;初期設定
initialsetting
    ;ポートの設定  
    ;　ポートＡ　ＲＡ０～ＲＡ５　入力端子
    ;　　　　　　　　ＲＡ０　　　　　　　　　オーバーフロー検出ビット
    ;　　　　　　　　ＲＡ１～ＲＡ５　　　　　ボタンキー制御ビット
    ;　ポートＢ　ＲＢ０～ＲＢ７　入力端子　　データ端子
    ;　ポートＣ　ＲＣ０～ＲＣ７　出力端子　　アドレス端子
    ;　ポートＤ　ＲＤ０～ＲＤ７　
    ;　　　　　　　　ＲＤ０，ＲＤ１，ＲＤ２　アドレス高位ビット端子
    ;                                            測定時は、　　　　　　　　入力端子設定
    ;　　　　　　　　　　　　　　　　　　　　　　メモリからの読み出し時は、出力端子設定
    ;
    ;　　　　　　　　ＲＤ４、ＲＤ５　　　　　トリガ形式選択用ビット　
    ;　　　　　　　　ＲＤ７　　　　　　　　　出力端子
    ;　ポートＥ　ＲＥ０～ＲＥ３　出力端子
    ;              　ＲＥ０、ＲＥ１，ＲＥ２　　ＬＣＤ制御ビット
    ;             　 ＲＥ３　　　　　　　　　　モニタＬＥＤ点灯ビット
    ;　ポートＦ　ＲＦ０～ＲＦ７　出力端子

    ;            ＲＦ０，ＲＦ１，ＲＦ２　　　ＬＣＤ赤色強度ビット
    ; 　　 　　　ＲＦ３，ＲＦ４，ＲＦ５　　　ＬＣＤ緑色強度ビット
    ;            ＲＦ６，ＲＦ７，ＲＤ７　　　ＬＣＤ青色強度ビット
    ;　ポートＧ　ＲＧ０～ＲＧ７　出力端子
    ;　　　　　　　　ＲＧ０　　　　　　　　　メモリのＷ／Ｒ制御ビット
    ;　　　　　　　　ＲＧ１　　　　　　　　　メモリのイネーブルビット
    ;　　　　　　　　ＲＧ２～ＲＧ４　　　　　トリガチャンネル選択ビット
    ;　　　　　　　　ＲＧ５～ＲＧ７　　　　　サンプリング周波数選択ビット
    ;関係するポートのバッファをクリア、及び初期設定
        clrf    PORTA        ;ポートＡにはDDRA はない
        clrf    PORTB
        movlw   b'11111111'  ;ポートＢを入力端子に設定
        movwf   DDRB         ;
        movlb   1            ;バンク１に移る
        clrf    PORTC
        clrf    PORTD        ;ポートＣ、Ｄ、Ｅ関係レジスタはバンク１にあるので
        clrf    PORTE        ;ポートＣ、Ｄの設定は再測定を可能とするため、少し下で行っている
        movlw   b'00000000'  ;
        movwf   DDRE         ;ポートＥを出力端子に設定
        movlb   5            ;
        movlw   b'1110'      ;アナログ／デジタル併用端子は全てデジタル端子にする
        movwf   ADCON1       ;
        clrf    PORTF        ;ポートＦ、Ｇ関係レジスタはバンク５にあるので
        movlw   b'00000000'  ;
        movwf   DDRF         ;ポートＦを出力端子に設定
        movwf   DDRG         ;ポートＧを出力端子に設定
        movlb   0            ;元に戻しておく

    ;サンプリング動作に関する初期設定
        movlw   0            ;
        movwf   modenum      ;トリガチャンネル１番を指定
        movwf   trigchan     ;１番チャンネル指定
        movwf   trigtype     ;立ち上がりモードを指定
        movlw   5
        movwf   samptime     ;１０ＭＨｚを指定

     ;測定の際に使用する変数
        bcf    remeasure,0   ;第０ビット目だけを使用する

     ;横軸時間スケール描写に使用する変数
        movlw   width             ;定数値 width の値をＷレジスタに取り込み、
        movwf   timescale_wline   ;timescale_wline に代入する

        return

;*****************************************
;測定開始前の前処理　再測定を可能とするため、初期設定と分離する必要があった
firstsetting
    ;アドレス関係の初期設定
        movlb  1             ;ポートＣ、Ｄはバンク１にある
        movlw   b'11111111'  ;
        movwf   DDRC         ;ポートＣを入力端子に設定
        movlw   b'0000111'   ;
        movwf   DDRD         ;ポートＤは、ＲＤ０～ＲＤ２を入力端子、ＲＤ３～ＲＤ７を出力端子に設定
        bsf    HiZcon_1      ;アドレスバッファをＨｉ－Ｚにしておく
        bcf    Clear_1       ;１２ビットアドレスカウンタをリセット状態にしておく
        movlb  0

    ;メモリの初期設定
        movlb  5
        bsf    WE_5          ;書き込み及び読み出し共に不可としておく。
        bsf    OE_5          ;
        movlb  0
    
    ;データ描写画面における初期設定
        clrf   proctype      ;＝０として、リセット文字に対応させておく
        clrf   reducount     ;縮小回数値は、初期値を０としておく
        movlw  1
        movwf  addressstep   ;アドレスステップの初期値はは１としておく
        clrf   leftaddlow    ;
        clrf   rightaddlow   ;１１ビットアドレス変数の初期設定値
        movlw  b'11110000'   ;１２ビット目はオーバーフローフラッグに使用
        movwf  leftaddhight  ;１３ビット目以降は他の機能と併用しているので、
        movwf  rightaddhight ;安定動作を保証するためＨとする

        clrf   proctype      ;グラフ処理メニューをリセットモードとしておく
        clrf   overflow      ;画面表示で使用するオーバー、アンダーフラッグをクリアしておく

        return

;**********************************************************************************************
;**********************************************************************************************
;ＬＣＤの描写開始前に必須な処理
LCDsetup
        movlb   1
        bcf     VSYNC_1      ;垂直同期準備
        movlb   0
        call    wallpaint    ;３×１行分の時間幅が必要とされているので
        call    wallpaint    ;
        call    wallpaint    ;
        movlb   1
        bsf     VSYNC_1      ;垂直同期開始
        movlb   0
        call    wallpaint    ;水平同期開始まで、４×１行分の時間幅の待機が必要とされているので
        call    wallpaint    ;
        call    wallpaint    ;
        call    wallpaint    ;

        return

;**********************************************************************************************
;**********************************************************************************************
;初期画面描写
firstdisplay
       ;処理の初期設定
        movlw  0
        movwf  jobmode       ;

        call    wallpaint    ;一列の塗りつぶし

        bsf     modebit,0    ;最初は、トリガチャンネル領域の残りの文字を白色としておく
        call    chardisp     ;文字表示
        bcf     modebit,0    ;そして、文字描写を緑色文字描写可能状態に戻しておく

        call    wallpaint    ;１列の塗りつぶし
        call    sideline     ;グラフの測線の描写
        call    dataline     ;各チャンネルの基準横線及びデータ線の描写
        call    sideline     ;グラフの測線の描写
        call    wallpaint    ;二列の塗りつぶし
        call    wallpaint    ;
        
        return

;*********************************************************************************************
;*********************************************************************************************
;各種測定条件選択及び決定
;主キーが押される毎に、白色文字表示の主メニューが移動する
;  トリガチャンネル→トリガ形式→サンプリング周波数→トリガチャンネル→
parameterset

paraloop
        btfsc  Decide          ;決定キーが押されていれば、画面で設定している条件で測定実行に移るため、
                               ;このルーチンを終了する。
        goto   paraend         ;押されていなければ、主メニューキーのチェックに行く。
        btfsc  Mainmenu        ;　　主メニューキーが押されていれば、主メニューのスクロールに行く。
        goto   mainscroll      ;　　押されていなければ、副メニューキーのチェックに行く。
        goto   subscroll       ;

     ;白色文字表示する主メニューを順次変更していく
mainscroll
        incf   modenum         ;modenum を＋１する。
        movfp  modenum,WREG    ;３となったら、０に戻す
        sublw  3               ;
        btfsc  ALUSTA,Z        ;
        clrf   modenum         ;
        call   LCDsetup        ;
        call   redisplay       ;新しい、白色文字表示領域が決まったので、再描写に行く
        goto   paraloop        ;決定キーのチェックに戻る

   ;サブメニュー内での条件選択のスクロール。３系統ある
subscroll
        btfss  Submenu         ;副メニューキーが押されていれば、副メニューのスクロールへ行く
        goto   paraloop        ;押されていなければ、決定キーのチェックに戻る

       ;トリガチャンネル内でのスクロール
chanjump
        movfp  modenum,WREG    ;
        sublw  0               ;modenum=0 の時には、チャンネル内でのスクロールを行う
        btfss  ALUSTA,Z        ;
        goto   typejump        ; 
        incf   trigchan        ; 
        movfp  trigchan,WREG   ;trigchan を＋１する
        sublw  8               ;
        btfsc  ALUSTA,Z        ;８になったならば、０にクリアする
        clrf   trigchan        ;
        call   LCDsetup        ;
        call   redisplay       ;再描写に行く
        goto   paraloop        ;キーの待機状態へと戻る

       ;トリガ形式内でのスクロール
typejump
        movfp  modenum,WREG    ;
        sublw  1               ;modenum=1 の時には、トリガ形式内でのスクロールを行う
        btfss  ALUSTA,Z        ;
        goto   sampjump        ;
        incf   trigtype        ; 
        movfp  trigtype,WREG   ;trigtype を＋１する
        sublw  4               ;
        btfsc  ALUSTA,Z        ;４になったならば、０にクリアする
        clrf   trigtype        ;
        call   LCDsetup        ;
        call   redisplay       ;再描写に行く
        goto   paraloop        ;キーの待機状態へと戻る

       ;サンプリング周波数内でのスクロール
sampjump
        movfp  modenum,WREG    ;
        sublw  2               ;modenum=2 の時には、サンプリング周波数内でのスクロールを行う
        btfss  ALUSTA,Z        ;
        goto   paraend
        incf   samptime        ; 
        movfp  samptime,WREG   ;samptime を＋１する
        sublw  13              ;
        btfsc  ALUSTA,Z        ;１３になったならば、５に戻す
        movlw  5               ;
        btfsc  ALUSTA,Z        ;
        movwf  samptime        ;
        call   LCDsetup        ;
        call   redisplay       ;再描写に行く
        goto    paraloop       ;キーの待機状態へと戻る

paraend
        return

;**********************************************************************************************
;**********************************************************************************************
;トリガチャンネル、トリガ形式、サンプリング周波数のハード側の設定
secondsetting
   ;サンプリング周波数のハード側での設定
       movfp  samptime,WREG ;
       sublw  5             ;samptime=5 の時、１０Ｍ
       btfss  ALUSTA,Z      ;
       goto   stnext1       ;
       movlb  5
       bcf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，０，０）
       bcf    TimebaseB_5   ;
       bcf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext1
       movfp  samptime,WREG ;
       sublw  6             ;samptime=6 の時、１．２５Ｍ
       btfss  ALUSTA,Z      ;
       goto   stnext2       ;
       movlb  5
       bsf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，０，１）
       bcf    TimebaseB_5   ;
       bcf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext2
       movfp  samptime,WREG ;
       sublw  7             ;samptime=7 の時、１５６ｋ
       btfss  ALUSTA,Z      ;
       goto   stnext3       ;
       movlb  5
       bcf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，１，０）
       bsf    TimebaseB_5   ;
       bcf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext3
       movfp  samptime,WREG ;
       sublw  8             ;samptime=8 の時、２０ｋ
       btfss  ALUSTA,Z      ;
       goto   stnext4       ;
       movlb  5
       bsf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，１，１）
       bsf    TimebaseB_5   ;
       bcf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext4
       movfp  samptime,WREG ;
       sublw  9             ;samptime=9 の時、２．５ｋ
       btfss  ALUSTA,Z      ;
       goto   stnext5       ;
       movlb  5
       bcf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，０，０）
       bcf    TimebaseB_5   ;
       bsf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext5
       movfp  samptime,WREG ;
       sublw  10             ;samptime=10 の時、３１３ｋ
       btfss  ALUSTA,Z      ;
       goto   stnext6       ;
       movlb  5
       bsf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，０，１）
       bcf    TimebaseB_5   ;
       bsf    TimebaseC_5   ;
       movlb  0
       goto   stend
stnext6
       movfp  samptime,WREG ;
       sublw  11             ;samptime=11 の時、３９
       btfss  ALUSTA,Z      ;
       goto   stnext7       ;
       movlb  5
       bcf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，１，０）
       bsf    TimebaseB_5   ;
       bsf    TimebaseC_5   ;
       movlb  0
       goto   stend

stnext7
       movfp  samptime,WREG ;
       sublw  12             ;samptime=12 の時、５
       btfss  ALUSTA,Z      ;
       goto   stend         ;
       movlb  5
       bsf    TimebaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，１，１）
       bsf    TimebaseB_5   ;
       bsf    TimebaseC_5   ;
       movlb  0
       goto   stend
stend

   ;トリガチャンネルのハード側での設定
       movfp  trigchan,WREG ;
       sublw  0             ;trigchan=0 の時、第０チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext1       ;
       movlb  5             ;
       bcf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，０，０）
       bcf    ChanbaseB_5   ;
       bcf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext1
       movfp  trigchan,WREG ;
       sublw  1             ;trigchan=1 の時、第１チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext2       ;
       movlb  5             ;
       bsf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，０，１）
       bcf    ChanbaseB_5   ;
       bcf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext2
       movfp  trigchan,WREG ;
       sublw  2             ;trigchan=2 の時、第２チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext3       ;
       movlb  5             ;
       bcf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，１，０）
       bsf    ChanbaseB_5   ;
       bcf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext3
       movfp  trigchan,WREG ;
       sublw  3             ;trigchan=3 の時、第３チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext4       ;
       movlb  5             ;
       bsf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（０，１，１）
       bsf    ChanbaseB_5   ;
       bcf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext4
       movfp  trigchan,WREG ;
       sublw  4             ;trigchan=4 の時、第４チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext5       ;
       movlb  5             ;
       bcf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，０，０）
       bcf    ChanbaseB_5   ;
       bsf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext5
       movfp  trigchan,WREG ;
       sublw  5             ;trigchan=5 の時、第５ャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext6       ;
       movlb  5             ;
       bsf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，０，１）
       bcf    ChanbaseB_5   ;
       bsf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext6
       movfp  trigchan,WREG ;
       sublw  6             ;trigchan=6 の時、第６チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcnext7       ;
       movlb  5             ;
       bcf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，１，０）
       bsf    ChanbaseB_5   ;
       bsf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend
tcnext7
       movfp  trigchan,WREG ;
       sublw  7             ;trigchan=7 の時、第７チャンネル
       btfss  ALUSTA,Z      ;
       goto   tcend         ;
       movlb  5             ;
       bsf    ChanbaseA_5   ;（Ｃ，Ｂ，Ａ）＝（１，１，１）
       bsf    ChanbaseB_5   ;
       bsf    ChanbaseC_5   ;
       movlb  0             ;
       goto   tcend

tcend

   ;トリガ形式のハード側での設定
       movfp  trigtype,WREG ;
       sublw  0             ;trigtype=0 の時、ｕＰレベル
       btfss  ALUSTA,Z      ;
       goto   ttnext1       ;
       movlb  1             ;
       bcf    TypebaseA_1   ;（Ｂ，Ａ）＝（０，０）
       bcf    TypebaseB_1   ;
       movlb  0             ;
       goto   ttend
ttnext1
       movfp  trigtype,WREG ;
       sublw  1             ;trigtype=1 の時、Ｄｏレベル
       btfss  ALUSTA,Z      ;
       goto   ttnext2       ;
       movlb  1             ;
       bsf    TypebaseA_1   ;（Ｂ，Ａ）＝（０，１）
       bcf    TypebaseB_1   ;
       movlb  0             ;
       goto   ttend
ttnext2
       movfp  trigtype,WREG ;
       sublw  2             ;trigtype=2 の時、Ｈｉレベル
       btfss  ALUSTA,Z      ;
       goto   ttnext3       ;
       movlb  1             ;
       bcf    TypebaseA_1   ;（Ｂ，Ａ）＝（１，０）
       bsf    TypebaseB_1   ;
       movlb  0             ;
       goto   ttend
ttnext3
       movfp  trigtype,WREG ;
       sublw  3             ;trigtype=3 の時、Ｌｏレベル
       btfss  ALUSTA,Z      ;
       goto   ttend         ;
       movlb  1             ;
       bsf    TypebaseA_1   ;（Ｂ，Ａ）＝（１，１）
       bsf    TypebaseB_1   ;
       movlb  0             ;
       goto   ttend

ttend
       return

;**********************************************************************************************
;**********************************************************************************************
;測定実行　メモリへの書き込みに進む。
;そして、アドレスのオーバーフローが発生した時点、Overflow がＨレベル、で測定は終了。
;　　注意事項　ＲＣ０～ＲＣ７，ＲＤ０～ＲＤ２は入力端子に設定であること
measure
       movlb  1
       bcf    HiZcon_1      ;１２ビットアドレスバッファからの出力可
       bsf    Clear_1       ;トリガ条件が満たされれば、１２ビットアドレスカウンタがランニングし、
                            ;アドレスがオーバーフローした時点で、自動的に停止する。
       movlb  0             ;

     ;メモリの書き込み処理
       movlb  5
       bcf    WE_5          ;書き込み可としておく
       bsf    OE_5          ;アドレスが進む毎に、順々にじどうてきにメモリに書き込まれるはず 
       movlb  0     
measloop                    ;この間に、アドレスが順当に進んで、メモリにデータが書き込まれるはず
       btfss  Overflow      ;アドレスビットがオーバーフローした時点で測定終了
       goto   measloop

       movlb  1
       bsf    HiZcon_1      ;メモリへの書き込みが終了したので、即バッファをＨｉ－Ｚとする
       movlb  0             ;
       movlb  5
       bsf    WE_5          ;メモリを読み出し可としておく、
       bcf    OE_5          ;
       movlb  0
       bcf    remeasure,0   ;モードをグラフ処理モードに設定する  

       return

;**********************************************************************************************
;**********************************************************************************************
;測定後の画面描写
postdisplay
        movlw   1               ;初期画面表示処理と識別させる
        movwf   jobmode         ;

    ;メモリからデータ読み出すための前処理
       ;メモリを読み出し可能とする
        movlb   5
        bsf     WE_5            ;
        bcf     OE_5            ;
        movlb   0
       ;入力バッファアドレスバッファをＨｉ－Ｚとする
        movlb   1
        bsf     HiZcon_1        ;
        movlb   0
       ;１１ビットアドレスポートＲＣ０～７，ＲＤ０～２を出力端子に変更する（ＲＤ３～７はすでに出力端子）
        movlb   1
        movlw   b'00000000'     ;
        movwf   DDRC            ;
        movwf   DDRD            ;
        bcf     Addoverflow_1   ;オーバーフロービットもクリアしておく
        movlb   0

    ;グラフ描写開始
        ;チャンネル番号などの描写
        call    wallpaint     ;一列の塗りつぶし

        bcf     modebit,0     ;文字を緑色としておく
        movfp   modenum,WREG  ;
        sublw   0             ;
        btfsc   ALUSTA,Z      ;トリガチャンネル文字を
        bsf     modebit,0     ;modenum=0 　の時には、白色表示する
        call    chardisp      ;       =1,2 の時には、緑色表示する
        bcf     modebit,0     ;文字描写を緑色文字描写可能状態に戻しておく
        call    wallpaint     ;一列の塗りつぶし
        call    sideline      ;グラフの測線の描写

        ;データ点の描写　当面、０～２３１番地までのデータを描写する
        call    dataplot      ;操作記号、文字、チャンネル基準線、データ線の描写

        ;後処理描写
        call    sideline      ;グラフの測線の描写
        call    wallpaint     ;２列の塗りつぶし
        call    wallpaint

        ;横軸時間幅描写の際に使用する定数の設定、変数をクリアしておく
        movlw   width
        movwf   timescale_wline  ;初期値に設定する
        clrf    timebandcount    ;

        return

;**********************************************************************************************
;**********************************************************************************************
;グラフ処理パラメータの取り込み、そして再描写
;主キーが押される毎に、白色文字表示の主メニューが移動する
;  サブメニュー内での条件選択のスクロール
;　　Ｒｅｓｅｔ→左移動→縮小→拡大→右移動→Ｒｅｓｅｔ
graphjob

gjloop
        btfsc  Decide             ;決定キーが押された時点で、画面で設定している条件で再描写に入る
        goto   gjnext1            ;ため、このルーチンを抜け出る

        btfsc  Submenu            ;副メニューキーが押されていれば、副メニューのスクロールへ行く
        goto   gjnext0            ;押されていなければ、決定キーのチェックに戻る

        btfss  Mainmenu           ;主キーが押されていればこのルーチンを抜け出し、
        goto   gjloop             ;パラメータ設定画面に戻らせたい
        bsf    remeasure,0        ;モードを再測定モードに設定する
        goto   gjend              ; 

     ;左右移動、拡大、縮小、リセット間でのメニューのスクロール 
gjnext0
        incf   proctype,1         ;graphtype を＋１する 
        movfp  proctype,WREG      ;
        sublw  5                  ;
        btfsc  ALUSTA,Z           ;５になったならば、０にクリアする
        clrf   proctype           ;
        call   LCDsetup           ;
        call   graredisplay       ;再描写に行く
        goto   gjloop             ;キーの待機状態へと戻る
gjnext1
        movlw  0                  ;protype=0 の時、データグラフリセット処理
        cpfseq proctype           ;
        goto   gjnext2            ;
        clrf   leftaddlow         ;左端アドレスを初期値の０に戻す
        clrf   leftaddhight       ;
        movlw  1                  ;アドレスステップを１に戻す
        movwf  addressstep        ;
        clrf   reducount          ;縮小回数をクリアし、初期値に戻す
gjnext2
        movlw  1                  ;proctype=1 の時、左移動処理
        cpfseq proctype           ;
        goto   gjnext4            ;グラフを画面半分だけ右に移動し、左側のデータを開示する

       ;左端と右端の間隔のデータアドレス件数を算出する　そしてその半値を算出する
         movfp  rightaddlow,WREG  ;
        movwf  LowbyteA           ;
        movfp  rightaddhight,WREG ;
        movwf  HightbyteA         ;rightadd(hight+low)-leftadd(hight+low)
        movfp  leftaddlow,WREG    ;を計算する
        movwf  LowbyteB           ;
        movfp  leftaddhight,WREG  ;
        movwf  HightbyteB         ;

        call   subtract           ;
        movfp  HightbyteC,WREG    ;減算で得られた結果を
        movwf  wideaddhight       ;wideaddhight+wideaddlow に代入
        movfp  LowbyteC,WREG      ;
        movwf  wideaddlow         ;
                                  ;その半分の値を求める
        bcf    ALUSTA,C           ;キャリアビットを０としておく
        rrcf   wideaddhight,1     ;右回転する　第７ビットに０が入り、第０ビットの値は ALUSTA,Cに入る
        rrcf   wideaddlow,1       ;右回転する　第７ビット目には ALUSTA,Cの値が入る
                                  ;wideadd には　半値が入ったことになる
       ;表示するための左端のアドレス値を求める
        movfp  leftaddlow,WREG    ;
        movwf  LowbyteA           ;leftadd(hight+low)-wideadd(hight+low)/2
        movfp  leftaddhight,WREG  ;を計算する
        movwf  HightbyteA         ;
        movfp  wideaddlow,WREG    ;
        movwf  LowbyteB           ;
        movfp  wideaddhight,WREG  ;
        movwf  HightbyteB         ;

        call   subtract
        movfp  HightbyteC,WREG    ;減算で得られた結果を
        movwf  leftaddhight       ;leftaddhight+leftaddlow とする
        movfp  LowbyteC,WREG      ;
        movwf  leftaddlow         ;
        goto   gjend              ;
gjnext4
        movlw  2                  ;proctype=2 のとき、１／２の縮小処理
        cpfseq proctype           ;画面に表示されるデータ領域を２倍とする
        goto   gjnext6            ;縮小が呼ばれる毎に
        rlncf  addressstep,1      ;１ビットずつ左回転し、２乗倍する
        incf   reducount,1        ;縮小が実行される毎に、縮小回数を＋１する  
        bcf    ALUSTA,C           ;安全のため、Ｃビットを０としておく
        rrcf   timescale_wline,1  ;縮小が実行される毎に、timescale_wline を半分とする
gjnext6
        movlw  3                  ;proctype=3 のとき、２倍の拡大処理
        cpfseq proctype           ;画面に表にされるデータ領域を半分とする
        goto   gjnext8            ;
        movlw  0                  ;
        cpfsgt reducount          ;既存の縮小回数が０の時には、拡大処理は行わないこととする
        goto   gjnext8            ;
        rrncf  addressstep,1      ;拡大が呼ばれる毎に、１ビットずつ右回転し、１／２乗倍する
        decf   reducount,1        ;拡大が実行される毎に、－１する

        bcf    ALUSTA,Z           ;
        rlcf   timescale_wline    ;拡大が実行される毎に、timescale_wline を２倍する 
gjnext8
        movlw  4                  ;proctype=4 のとき、右移動処理
        cpfseq proctype           ;
        goto   gjend              ;グラフを画面半分だけ左に移動し、右側のデータを開示する
       ;表示されている１１ビットデータアドレスの中間値を算出する　２つを加算して２で割る
        movfp  leftaddhight,WREG  ;
        addwf  rightaddhight,0    ;左右端の高位３ビットアドレス値の加算
        movwf  midaddhight        ;

        movfp  leftaddlow,WREG    ;
        addwf  rightaddlow,0      ;左右端の低位８ビットアドレスの加算
        movwf  midaddlow          ;
        btfsc  ALUSTA,C           ;低位８ビットの加算でキャリーがあったときの処理
        incf   midaddhight,1      ;　高位３ビットに＋１をする
        rrcf   midaddhight,1      ;右回転する　第０ビットの値は ALUSTA,Cに入る
        rrcf   midaddlow,1        ;右回転する　第７ビット目には ALUSTA,Cの値が入る

       ;算出した中間値を表示画面の左端のアドレス値とする
        movfp  midaddlow,WREG     ;
        movwf  leftaddlow         ;
        movfp  midaddhight,WREG   ;
        movwf  leftaddhight       ;
gjend
        return

;**********************************************************************************************
;**********************************************************************************************
;１１ビット減算　Ａ＞Ｂの時、Ａ－Ｂ＝Ｃ
;　　　　　　　　Ａ＜Ｂの時、Ａ－Ｂの計算はしないでＣ＝０として戻らせる
subtract
        movlw  b'00000111'      ;高位バイトの下３ビット以外は０とする
        andwf  HightbyteA,1     ;
        movlw  b'00000111'
        andwf  HightbyteB,1     ;

        ;Ａ＜Ｂの時、Ａ－Ｂの計算はしないでＣ＝０として戻らせる
        movfp  HightbyteB,WREG  ;
        cpfsgt HightbyteA       ;
        goto   subnext1         ;HightbyteA <= HightbyteB
        goto   subproc          ;HightbyteA >  HightbyteB
subnext1
        movfp  HightbyteB,WREG  ;
        cpfslt HightbyteA       ;
        goto   subnext2         ;HightbyteA = HightbyteB が残っている
        goto   zeroproc         ;HightbyteA < HightbyteB
subnext2
        movfp  LowbyteB,WREG    ;この時点で、HightbyteA=HightbyteB だけが残っている
        cpfsgt LowbyteA         ;
        goto   zeroproc         ;HightbyteA=HightbyteB, LowbyteA<LowbyteB
        goto   subproc          ;HightbyteA=HightbyteB, LowbyteA>LowbyteB
zeroproc
        clrf   HightbyteC       ;
        Clrf   LowbyteC         ;１１ビットを０とする
        goto   subend
subproc
        movfp  LowbyteB,WREG    ;
        cpfsgt LowbyteA         ;LowbyteA>LowbyteB ならばスキップ
        goto   revproc          ;LowbyteA<LowbyteB ならば別の処理へいく
       
        movfp  LowbyteB,WREG
        subwf  LowbyteA,0       ;LowbyteA-LowbyteB を計算し、
        movwf  LowbyteC         ;LowbyteC に代入
        movfp  HightbyteB,WREG  ;
        subwf  HightbyteA,0     ;HightbyteA-HightbyteB を計算し、
        movwf  HightbyteC       ;HightbyteC に代入
        goto   subend
revproc                         ;LowbyteA<LowbyteB の時の処理
        movfp  LowbyteB,WREG    ;
        sublw  255              ;255-LowbyteB の計算をして、Ｗレジスタに保持
        addwf  LowbyteA,0       ;Ｗ＋LowbyteA をＷレジスタに保持
        addlw  1                ;Ｗレジスタに１を加える
        movwf  LowbyteC         ;
        decf   HightbyteA,1     ;キャリー分を引く
        movfp  HightbyteB,WREG  ;
        subwf  HightbyteA,0     ;HightbyteA-HightbyteB を計算し、
        movwf  HightbyteC       ;HightbyteC に代入    
subend
        return

;*********************************************************************************************
;*********************************************************************************************
;グラフ処理画面再描写
graredisplay
        movlw   1
        movwf   jobmode       ;グラフ画面処理モードなので

        call    wallpaint     ;一列の塗りつぶし

        bcf     modebit,0     ;文字を緑色としておく
        movfp   modenum,WREG  ;
        sublw   0             ;
        btfsc   ALUSTA,Z      ;トリガチャンネル文字を
        bsf     modebit,0     ;modenum=0 　の時には、白色表示する
        call    chardisp      ;       =1,2 の時には、緑色表示する
        bcf     modebit,0     ;文字描写を緑色文字描写可能状態に戻しておく
        call    wallpaint     ;一列の塗りつぶし
        call    sideline      ;グラフの測線の描写

        call    dataplot      ;操作記号、文字、チャンネル基準線、データ線の描写

        call    sideline      ;グラフの測線の描写
        call    wallpaint     ;２列の塗りつぶし
        call    wallpaint
        
        return

;**********************************************************************************************
;**********************************************************************************************
;操作記号、文字、チャンネル基準線、データ線の描写
dataplot
        clrf   timebandcount     ;時間幅設定用ドット数設定カウンタ変数をクリアしておく
        clrf    char_number
        clrf    current
        movlw   width
        movwf   linecount

     ;決定された描写する左端データ番号を取り込み、読み出すメモリアドレス値とする
        movfp   leftaddlow,WREG   ;
        movlb   1
        movwf   Addresslow_1      ;決定した１１ビットアドレス値を１１ビットアドレスポートに出力
        movlb   0
        bsf     leftaddhight,6    ;このビットはバスバッファ制御ビットと共通なので特に、Ｈレベルとし、 
                                  ;安定動作を保証しておく必要があるため。 
        movfp   leftaddhight,WREG ;
        movlb   1
        movwf   Addresshight_1     ;
        movlb   0
dploop10
        call    HDISP_INI

       ;メモリからデータを読み出す
        movfp  PORTB,WREG     ;ポートＢのデータをＷレジスタに取り込み
        movwf  datacode       ;変数 datacode に代入する
                              ;メモリのデータが読み出された
        call    lowareaplot   ;画面の下部分の描写（操作記号、文字）

       ;グラフ上に８チャンネル分のデータを描写する
       ;int_line毎にデータが０の時は１個の白色ドット、データは１の時は１５個の白色ドットを描写、
       ;残りの部分は青色ドットで埋める
        movlw   channum
        movwf   temp0
        incf    temp0,1       ;
dploop7
        rrcf    datacode,1    ;datacode の内容を右回転させる。あふれたビットはＣに入る
        btfsc   ALUSTA,C      ;
        call    Higdraw       ;
        btfss   ALUSTA,C
        call    Lowdraw
        decfsz  temp0,1       ;
        goto    dploop7 

        call    higareaplot  ;画面の最上部分の描写

        call    HDISP_FIN

       ;メモリアドレスを進める
        movfp  addressstep,WREG    ;addressstep ずつアドレスを進める
        movlb  1
        addwf  Addresslow_1,1      ;
        movlb  0
        btfsc  ALUSTA,C            ;キャリービットのチェック
        call   carryjump           ;キャリーがあったとき、高ビット側を＋１する

       ;進めたアドレス値がオーバーフローしたときの処理
        movlb   1
        btfss   Addresshight_1,3   ;この時、 Addresshight_1 の第３ビットが１となっている
        goto    dpend
        movlb   0
        movlw   b'11111111'        ;アドレス値をｂ’０１１１　１１１１１１１１’にする
        movlb   1
        movwf   Addresslow_1       ;
        movlb   0
        movlw   b'11110111'        ;
        movlb   1
        movwf   Addresshight_1     ;
        movlb   0
        bsf     overflow,0         ;オーバーフローが発生したので、フラッグを立てる             
dpend
        movlb   0
        decfsz  linecount,1        ;２３１でループ終了。
        goto    dploop10

        movlb  1                   ;
        movfp  Addresslow_1,WREG   ;描写したデータグラフの右端アドレス値を
        movlb  0
        movwf  rightaddlow         ;保持しておく。
        movlb  1
        movfp  Addresshight_1,WREG ;左右移動の時必要となる
        movlb  0
        movwf  rightaddhight       ;
   
        bcf     overflow,0         ;オーバーフローチェッカーをクリアしておく

        return

;**************************
;下位８ビットからのキャリーがあったときの処理
carryjump
        movlb 1
        incf  Addresshight_1,1
        movlb 0

        return

;**************************
;画面の下部分の描写（操作記号、文字）
lowareaplot
        movlw   menu_sline
        movwf   temp0        ;最下段１０行を青色で塗りつぶす
dploop1
        call    bludotto     ;
        decfsz  temp0,1      ;
        goto    dploop1

       ;左移動、縮小、拡大、右移動、リセットの各記号ビットを描写する

        movlw   0
        movwf   charcount
        movfp   char_number,WREG
        sublw   0                ;
        btfss   ALUSTA,Z         ;
        goto    mark1
        call    Leftdisp         ;左移動記号の描写
        goto    markdispend
mark1
        movlw   1
        movwf   charcount
        movfp   char_number,WREG
        sublw   1                ;
        btfss   ALUSTA,Z         ;
        goto    mark2
        call    Redudisp         ;縮小記号の描写
        goto    markdispend
mark2
        movlw   2
        movwf   charcount
        movfp   char_number,WREG
        sublw   2                ;
        btfss   ALUSTA,Z         ;
        goto    mark3
        call    Extidisp         ;拡大記号の描写
        goto    markdispend
mark3
        movlw   3
        movwf   charcount
        movfp   char_number,WREG
        sublw   3                ;
        btfss   ALUSTA,Z         ;
        goto    mark4
        call    Rightdisp        ;右移動の描写
        goto    markdispend
mark4
        movlw   4
        movwf   charcount
        movfp   char_number,WREG
        sublw   4                ;
        btfss   ALUSTA,Z         ;
        goto    mark5
        call    Resetdisp        ;リセット文字の描写
        goto    markdispend

       ;トリガ形式、サンプリング周波数の文字を描写する
mark5
        movlw   5
        movwf   charcount
        movfp   char_number,WREG
        sublw   5                ;
        btfss   ALUSTA,Z         ;
        goto    mark6
        call    seltrigtype
        goto    markdispend
mark6
        movlw   6
        movwf   charcount
        movfp   char_number,WREG
        sublw   6                ;
        btfss   ALUSTA,Z         ;
        goto    mark7
        call    selsamptime
        goto    markdispend

       ;横軸時間幅数値文字を描写するが、そのまえに空欄を描写しておく
mark7
        movlw   7
        movwf   charcount
        movfp   char_number,WREG
        sublw   7                ;
        btfss   ALUSTA,Z         ;
        goto    mark8
        call    selspace
        goto    markdispend
mark8
        movlw   8
        movwf   charcount
        movfp   char_number,WREG
        sublw   8
        btfss   ALUSTA,Z
        goto    mark9
        call    seltimespan
        goto    markdispend

      ;右端に空き桁が残っている。その処理をする
mark9
       ;４桁分を青ドットで埋める
        call   bludotto
        call   bludotto
        call   bludotto
        call   bludotto

       ;記号描写後、グラフ領域の下途中まで、青ドットで塗りつぶす
markdispend
        movlw   menu_sline       ;
        addlw   menu_wline       ;
        addlw   timescale_hline  ;
        sublw   ini_line         ;ini_line-(menu_sline+menu_wline+timescale_hline) を計算し、
        movwf   temp0            ;temp0 に代入
mdloop1
        call    bludotto
        decfsz  temp0,1
        goto    mdloop1

       ;時間スケール描写帯を原点から一定の幅を黄色で、残りを青色で塗りつぶす
        incf    timebandcount,1       ;カウンタ変数を＋１する

        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   0                ;
        btfss   ALUSTA,Z         ;
        goto    mdnext1               ;reducount=0 の時は、
        call    yellowbanddraw        ;横軸時間幅の全長を黄色で塗りつぶす
        goto    mdnextend
mdnext1 
        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   1                ;
        btfss   ALUSTA,Z         ;
        goto    mdnext2               ;reducount=1 の時の処理
        movfp   timescale_wline,WREG  ;
        cpfsgt  timebandcount         ;timebandcount>timescale_wline の時、下の命令を飛ばす
        goto    mdn11
        goto    mdn12
mdn11   call    yellowbanddraw        ;横軸時間幅の全長／２を黄色で塗りつぶす
        goto    mdnextend
mdn12   call    bluebanddraw          ;残りを青色で塗りつぶす
        goto    mdnextend
mdnext2 
        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   2                ;
        btfss   ALUSTA,Z         ;
        goto    mdnext3               ;reducount=2 の時の処理
        movfp   timescale_wline,WREG  ;
        cpfsgt  timebandcount         ;timebandcount>timescale_wline の時、下の命令を飛ばす
        goto    mdn21
        goto    mdn22
mdn21   call    yellowbanddraw        ;横軸時間幅の全長／２を黄色で塗りつぶす
        goto    mdnextend
mdn22   call    bluebanddraw          ;残りを青色で塗りつぶす
        goto    mdnextend
mdnext3 
        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   3                ;
        btfss   ALUSTA,Z         ;
        goto    mdnext4               ;reducount=3 の時の処理
        movfp   timescale_wline,WREG  ;
        cpfsgt  timebandcount         ;timebandcount>timescale_wline の時、下の命令を飛ばす
        goto    mdn31
        goto    mdn32
mdn31   call    yellowbanddraw        ;横軸時間幅の全長／２を黄色で塗りつぶす
        goto    mdnextend
mdn32   call    bluebanddraw          ;残りを青色で塗りつぶす
        goto    mdnextend
mdnext4 
        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   4                ;
        btfss   ALUSTA,Z         ;
        goto    mdnext5               ;reducount=4 の時の処理
        movfp   timescale_wline,WREG  ;
        cpfsgt  timebandcount         ;timebandcount>timescale_wline の時、下の命令を飛ばす
        goto    mdn41
        goto    mdn42
mdn41   call    yellowbanddraw        ;横軸時間幅の全長／２を黄色で塗りつぶす
        goto    mdnextend
mdn42   call    bluebanddraw          ;残りを青色で塗りつぶす
        goto    mdnextend
mdnext5 
        movfp   reducount,WREG        ;縮小回数をＷレジスタに取り込む
        sublw   5                ;
        btfss   ALUSTA,Z         ;
        goto    mdnextend             ;reducount=5 の時の処理
        movfp   timescale_wline,WREG  ;
        cpfsgt  timebandcount         ;timebandcount>timescale_wline の時、下の命令を飛ばす
        goto    mdn51
        goto    mdn52
mdn51   call    yellowbanddraw        ;横軸時間幅の全長／２を黄色で塗りつぶす
        goto    mdnextend
mdn52   call    bluebanddraw          ;残りを青色で塗りつぶす
mdnextend 

       return

;**************************
       ;グラフ領域の最下部まで、黄色ドットで塗りつぶす
yellowbanddraw
        movlw   timescale_hline  ;
        movwf   temp0            ;temp0 に代入
mdloop5
        call    yeldotto
        decfsz  temp0,1
        goto    mdloop5
        return
;**************************
       ;グラフ領域の最下部まで、青色ドットで塗りつぶす
bluebanddraw
        movlw   timescale_hline  ;
        movwf   temp0            ;temp0 に代入
mdloop8
        call    bludotto
        decfsz  temp0,1
        goto    mdloop8
        return

;**************************
;画面の最上部分の描写
higareaplot
        movlw   fin_line       ;
        movwf   temp0 
dploop9
        call    bludotto       ;青色ドット列の描写
        decfsz  temp0,1
        goto    dploop9

        return

;***********************
Lowdraw
        btfsc   overflow,0     ;
        call    reddotto       ;オーバーフローした時点で
        btfss   overflow,0     ;データ線は赤色で描写

        call    whidotto       ;１個の白色ドット
        movlw   29
        movwf   temp1          ;空き領域を青色で塗りつぶす
ldloop
        call    bludotto
        decfsz  temp1,1
        goto    ldloop

        return

;***********************
Higdraw
        movlw   15
        movwf   temp1
hdloop1
        btfsc   overflow,0     ;
        call    reddotto       ;オーバーフローした時点で
        btfss   overflow,0     ;データ線は赤色で描写

        call    whidotto       ;１５個の白色ドット
        decfsz  temp1,1
        goto    hdloop1     

        movlw   15
        movwf   temp1          ;空き領域を青色で塗りつぶす
hdloop2
        call    bludotto
        decfsz  temp1,1
        goto    hdloop2

        return

;********************************
;リセット記号の描写
Resetdisp
        movfp   current,WREG
        call    characterReset
        movwf   charcode

        movfp   proctype,WREG    ;
        sublw   0                ;proctype=0 の時、
        btfsc   ALUSTA,Z         ;
        call    seldottojob      ;赤文字描写する
        btfss   ALUSTA,Z
        call    dottojob

        incf    current,1
        movfp   current,WREG
        sublw   mark_num         ;current=mark_num となったときには
        btfss   ALUSTA,Z         ;Ｚ＝１となる。その時点で current をクリアする
        goto    resetend
        clrf    current
        incf    char_number      ;表示文字番号を＋１する
resetend
        return

;********************************
;左移動記号の描写
Leftdisp
        movfp   current,WREG
        call    characterLeft
        movwf   charcode

        movfp   proctype,WREG    ;
        sublw   1                ;proctype=1 の時、
        btfsc   ALUSTA,Z         ;
        call    seldottojob      ;赤文字描写する
        btfss   ALUSTA,Z
        call    dottojob

        incf    current,1
        movfp   current,WREG
        sublw   mark_num         ;current=mark_num となったときには
        btfss   ALUSTA,Z         ;Ｚ＝１となる。その時点で current をクリアする
        goto    leftend
        clrf    current
        incf    char_number      ;表示文字番号を＋１する
leftend
        return

;********************************
;縮小記号の描写
Redudisp
        movfp   current,WREG
        call    characterRedu
        movwf   charcode

        movfp   proctype,WREG    ;
        sublw   2                ;proctype=2 の時、
        btfsc   ALUSTA,Z         ;
        call    seldottojob      ;赤文字描写する
        btfss   ALUSTA,Z
        call    dottojob

        incf    current,1
        movfp   current,WREG
        sublw   mark_num         ;current=mark_num となったときには
        btfss   ALUSTA,Z         ;Ｚ＝１となる。その時点で current をクリアする
        goto    reduend
        clrf    current
        incf    char_number      ;表示文字番号を＋１する
reduend
        return

;********************************
;拡大記号の描写
Extidisp
        movfp   current,WREG
        call    characterExti
        movwf   charcode

        movfp   proctype,WREG    ;
        sublw   3                ;proctype=3 の時、
        btfsc   ALUSTA,Z         ;
        call    seldottojob      ;赤文字描写する
        btfss   ALUSTA,Z
        call    dottojob

        incf    current,1
        movfp   current,WREG
        sublw   mark_num         ;current=mark_num となったときには
        btfss   ALUSTA,Z         ;Ｚ＝１となる。その時点で current をクリアする
        goto    extiend
        clrf    current
        incf    char_number      ;表示文字番号を＋１する
extiend
        return

;********************************
;右移動記号の描写
Rightdisp
        movfp   current,WREG
        call    characterRight
        movwf   charcode

        movfp   proctype,WREG    ;
        sublw   4                ;proctype=4 の時、
        btfsc   ALUSTA,Z         ;
        call    seldottojob      ;赤文字描写する
        btfss   ALUSTA,Z
        call    dottojob

        incf    current,1
        movfp   current,WREG
        sublw   mark_num         ;current=mark_num となったときには
        btfss   ALUSTA,Z         ;Ｚ＝１となる。その時点で current をクリアする
        goto    rightend
        clrf    current
        incf    char_number      ;表示文字番号を＋１する
rightend
        return

;********************************
;選択されたトリガ形式文字を抽出する
seltrigtype
        movfp  trigtype,WREG ;
        sublw  0             ;trigtype=0 ならば、
        btfsc  ALUSTA,Z      ;ｕＰ文字を描写する
        call   charuPdisp
        movfp  trigtype,WREG ;
        sublw  1             ;trigtype=1 ならば、
        btfsc  ALUSTA,Z      ;Ｄｏ文字を描写する
        call   charDodisp
        movfp  trigtype,WREG ;
        sublw  2             ;trigtype=2 ならば、
        btfsc  ALUSTA,Z      ;Ｈｉ文字を描写する
        call   charHidisp
        movfp  trigtype,WREG ;
        sublw  3             ;trigtype=3 ならば、
        btfsc  ALUSTA,Z      ;Ｌｏ文字を描写する
        call   charLodisp

        return

;********************************
;選択されたサンプリング周波数文字を抽出する
selsamptime
        movfp  samptime,WREG ;
        sublw  5             ;samptime=5 ならば、
        btfsc  ALUSTA,Z      ;１０Ｍ文字を描写する
        call   char10Mdisp
        movfp  samptime,WREG ;
        sublw  6             ;samptime=6 ならば、
        btfsc  ALUSTA,Z      ;１．２５Ｍ文字を描写する
        call   char1.25Mdisp
        movfp  samptime,WREG ;
        sublw  7             ;samptime=7 ならば、
        btfsc  ALUSTA,Z      ;１５６ｋ文字を描写する
        call   char156kdisp
        movfp  samptime,WREG ;
        sublw  8             ;samptime=8 ならば、
        btfsc  ALUSTA,Z      ;２０ｋ文字を描写する
        call   char20kdisp
        movfp  samptime,WREG ;
        sublw  9             ;samptime=9 ならば、
        btfsc  ALUSTA,Z      ;２．５ｋ文字を描写する
        call   char2.5kdisp
        movfp  samptime,WREG ;
        sublw  10             ;samptime=10 ならば、
        btfsc  ALUSTA,Z      ;３１３文字を描写する
        call   char313disp
        movfp  samptime,WREG ;
        sublw  11             ;samptime=11 ならば、
        btfsc  ALUSTA,Z      ;３９文字を描写する
        call   char39disp
        movfp  samptime,WREG ;
        sublw  12             ;samptime=12 ならば、
        btfsc  ALUSTA,Z      ;５文字を描写する
        call   char5.0disp
        return

;********************************
;空欄文字を抽出する
selspace
        call   charspacedisp
        return

;********************************
;選択された横軸時間幅数値文字を抽出する
seltimespan
        movfp  samptime,WREG ;
        sublw  5             ;samptime=5 ならば、１０ＭＨｚなので
        btfsc  ALUSTA,Z      ;２３μ文字を描写する
        call   char23udisp
        movfp  samptime,WREG ;
        sublw  6             ;samptime=6 ならば、１．２５ＭＨｚなので
        btfsc  ALUSTA,Z      ;１８５μ文字を描写する
        call   char185udisp
        movfp  samptime,WREG ;
        sublw  7             ;samptime=7 ならば、１５６ｋＨｚなので
        btfsc  ALUSTA,Z      ;１．５ｍ文字を描写する
        call   char1.5mdisp
        movfp  samptime,WREG ;
        sublw  8             ;samptime=8 ならば、２０ｋＨｚなので
        btfsc  ALUSTA,Z      ;１２ｍ文字を描写する
        call   char12mdisp
        movfp  samptime,WREG ;
        sublw  9             ;samptime=9 ならば、２．５ｋＨｚなので
        btfsc  ALUSTA,Z      ;９５ｍ文字を描写する
        call   char95mdisp
        movfp  samptime,WREG ;
        sublw  10             ;samptime=10 ならば、３１３Ｈｚなので
        btfsc  ALUSTA,Z      ;７５０ｍ文字を描写する
        call   char750mdisp
        movfp  samptime,WREG ;
        sublw  11             ;samptime=11 ならば、３９Ｈｚなので
        btfsc  ALUSTA,Z      ;６．０ｓ文字を描写する
        call   char6.0sdisp
        movfp  samptime,WREG ;
        sublw  12             ;samptime=12 ならば、５Ｈｚなので
        btfsc  ALUSTA,Z      ;４６ｓ文字を描写する
        call   char46sdisp
        return

;*********************************************************************************************
;*********************************************************************************************
;画面再描写
redisplay
        movlw   0
        movwf   jobmode       ;初期画面表示と同じなので

        call    wallpaint     ;一列の塗りつぶし

        bcf     modebit,0     ;文字を緑色としておく
        movfp   modenum,WREG  ;
        sublw   0             ;
        btfsc   ALUSTA,Z      ;トリガチャンネル文字を
        bsf     modebit,0     ;modenum=0 　の時には、白色表示する
        call    chardisp      ;       =1,2 の時には、緑色表示する
        bcf     modebit,0     ;文字描写を緑色文字描写可能状態に戻しておく

        call    wallpaint     ;一列の塗りつぶし
        call    sideline      ;グラフの測線の描写
        call    dataline      ;トリガチャンネル、サンプリング周波数文字、チャンネル基準線、データ線の描写
        call    sideline      ;グラフの測線の描写
        call    wallpaint     ;２列の塗りつぶし
        call    wallpaint
        
        return

;*****************************************
;一列を青色で塗りつぶす
wallpaint
        call    red000
        call    gre000
        call    blu111
        call    HDISP_INI

        movlw   hdd32        ;１行３２０ドット分を実行する
        movwf   temp0
        movlw   hdd10
        movwf   temp1        ;
wploop
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0
        decfsz  temp0,1
        goto    wploop
        movlw   hdd32
        movwf   temp0
        decfsz  temp1,1
        goto    wploop

        call    HDISP_FIN
       
        return

;*****************************************
;チャンネル番号領域の描写　４列
;選択文字は赤色、残りは緑色、又は白色で表示。空きビットは青色
chardisp
        movlw   4              ;
        movwf   count          ;文字の列数
        clrf    current
cdloop0    
        call    HDISP_INI

        movlw   ini_line       ;
        movwf   temp0
cdloop1
        call    bludotto       ;下面を青色ドットで埋める
        decfsz  temp0,1
        goto    cdloop1

        movfp   current,WREG   ;文字ビットを表示する
        call    character0
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   0              ;trigchan=0 のとき、
        btfsc   ALUSTA,Z       ;文字１を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw      ;空白を塗りつぶす

        movfp   current,WREG
        call    character1
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   1              ;trigchan=1 のとき、
        btfsc   ALUSTA,Z       ;文字２を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        movfp   current,WREG
        call    character2
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   2              ;trigchan=2 のとき、
        btfsc   ALUSTA,Z       ;文字３を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        movfp   current,WREG
        call    character3
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   3              ;trigchan=3 のとき、
        btfsc   ALUSTA,Z       ;文字４を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob 
        call    spacedraw

        movfp   current,WREG
        call    character4
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   4              ;trigchan=4 のとき、
        btfsc   ALUSTA,Z       ;文字５を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        movfp   current,WREG
        call    character5
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   5              ;trigchan=５ のとき、
        btfsc   ALUSTA,Z       ;文字６を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        movfp   current,WREG
        call    character6
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   6              ;trigchan=6 のとき、
        btfsc   ALUSTA,Z       ;文字７を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        movfp   current,WREG
        call    character7
        movwf   charcode
        movfp   trigchan,WREG  ;
        sublw   7              ;trigchan=7 のとき、
        btfsc   ALUSTA,Z       ;文字８を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
        call    dottojob
        call    spacedraw

        incf    current,1

        movlw   fin_line       ;
        movwf   temp0 
cdloop4
        call    bludotto       ;最上画面を青色ドット列で埋める
        decfsz  temp0,1
        goto    cdloop4

        call    HDISP_FIN

        decfsz  count,1
        goto    cdloop0
   
        return

;******************************************************
;選択されていない設定文字処理　
;副メニュー選択可能な場合には文字ビットを白色、空きを青色とする
;副メニュー選択不可の場合には文字ビットを緑色、空きを青色とする
dottojob
      btfss   modebit,0      ;このビットが１ならば、白色文字を描写する
      goto    greendraw      ;０ならば、ジャンプして、緑色文字を描写しに行く

        btfsc   charcode,7
          call    whidotto
        btfss   charcode,7
          call    bludotto
        btfsc   charcode,6
          call    whidotto
        btfss   charcode,6
          call    bludotto
        btfsc   charcode,5
          call    whidotto
        btfss   charcode,5
          call    bludotto
        btfsc   charcode,4
          call    whidotto
        btfss   charcode,4
          call    bludotto
        btfsc   charcode,3
          call    whidotto
        btfss   charcode,3
          call    bludotto
        btfsc   charcode,2
          call    whidotto
        btfss   charcode,2
          call    bludotto
        btfsc   charcode,1
          call    whidotto
        btfss   charcode,1
          call    bludotto
        btfsc   charcode,0
          call    whidotto
        btfss   charcode,0
          call    bludotto

        goto    dottojobend
greendraw
        btfsc   charcode,7
          call    gredotto
        btfss   charcode,7
          call    bludotto
        btfsc   charcode,6
          call    gredotto
        btfss   charcode,6
          call    bludotto
        btfsc   charcode,5
          call    gredotto
        btfss   charcode,5
          call    bludotto
        btfsc   charcode,4
          call    gredotto
        btfss   charcode,4
          call    bludotto
        btfsc   charcode,3
          call    gredotto
        btfss   charcode,3
          call    bludotto
        btfsc   charcode,2
          call    gredotto
        btfss   charcode,2
          call    bludotto
        btfsc   charcode,1
          call    gredotto
        btfss   charcode,1
          call    bludotto
        btfsc   charcode,0
          call    gredotto
        btfss   charcode,0
          call    bludotto

dottojobend
        return

;******************************************************
;横軸時間文字処理　
;文字ビットを黄色、空きを青色とする
timespandottojob
        btfsc   charcode,7
          call    yeldotto
        btfss   charcode,7
          call    bludotto
        btfsc   charcode,6
          call    yeldotto
        btfss   charcode,6
          call    bludotto
        btfsc   charcode,5
          call    yeldotto
        btfss   charcode,5
          call    bludotto
        btfsc   charcode,4
          call    yeldotto
        btfss   charcode,4
          call    bludotto
        btfsc   charcode,3
          call    yeldotto
        btfss   charcode,3
          call    bludotto
        btfsc   charcode,2
          call    yeldotto
        btfss   charcode,2
          call    bludotto
        btfsc   charcode,1
          call    yeldotto
        btfss   charcode,1
          call    bludotto
        btfsc   charcode,0
          call    yeldotto
        btfss   charcode,0
          call    bludotto
        return

;******************************************************
;選択された設定文字処理　　文字ビットを赤、空きを青とする
seldottojob
        btfsc   charcode,7
          call    reddotto
        btfss   charcode,7
          call    bludotto
        btfsc   charcode,6
          call    reddotto
        btfss   charcode,6
          call    bludotto
        btfsc   charcode,5
          call    reddotto
        btfss   charcode,5
          call    bludotto
        btfsc   charcode,4
          call    reddotto
        btfss   charcode,4
          call    bludotto
        btfsc   charcode,3
          call    reddotto
        btfss   charcode,3
          call    bludotto
        btfsc   charcode,2
          call    reddotto
        btfss   charcode,2
          call    bludotto
        btfsc   charcode,1
          call    reddotto
        btfss   charcode,1
          call    bludotto
        btfsc   charcode,0
          call    reddotto
        btfss   charcode,0
          call    bludotto

        return

;*****************************************
;各チャネル欄に表示するチャネル番号描写文字ビットの残り部分を青で塗りつぶす
spacedraw
        movlw   char_heig
        sublw   int_line      ;int_line-char_heig　を計算し、
        movwf   temp1        ;temp1　に代入
cdloop3
        call    bludotto    ;各欄内の文字空きスペースを青色ドットで埋める
        decfsz  temp1,1
        goto    cdloop3

        return

;*****************************************
;グラフの側線を描写する
;ini_lineで指定される数だけ青色ドットを、中間を白色線分、残りを青色として描写する
sideline
        movlw   1             ;
        movwf   linecount     ;
slloop1 
        call    HDISP_INI

        movlw   ini_line     ;
        movwf   temp0
slloop2
        call    bludotto    ;青色ドット列の描写
        decfsz  temp0,1
        goto    slloop2

       ;中間の２４０ドット分を白色として描写
        call    red111       ;白色の指定。
        call    gre111
        call    blu111
        movlw   hdd24        ;
        movwf   temp0
        movlw   hdd10        
        movwf   temp1        ;２４×１０回のループを行う
slloop3
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0
        decfsz  temp0,1
        goto    slloop3
        movlw   hdd24
        movwf   temp0
        decfsz  temp1,1
        goto    slloop3

        movlw   ini_line     ;
        movwf   temp0
slloop4
        call    bludotto    ;青色ドット列の描写
        decfsz  temp0,1
        goto    slloop4

        call    HDISP_FIN

        decfsz  linecount,1   ;
        goto    slloop1

        return

;************************************************************************************
;トリガチャンネル文字、サンプリング周波数文字、各チャンネルの基準線、データ線の描写
;１行分として赤色ドット、文字ドットは赤又は緑又は白、各チャンネル位置に白色ドット１個、最後は青色ドットを描写
dataline
        clrf    char_number
        clrf    current
        movlw   width
        movwf   linecount

dlloop10
        call    HDISP_INI

        movlw   menu_sline
        movwf   temp0        ;最下段に青色ドットを描写
dlloop1
        call    bludotto     ;
        decfsz  temp0,1      ;
        goto    dlloop1

       ;文字の表示部分　　開始  +++++++++++++++++++++++++++++++++++++++++++
       ;　トリガ形式
        movfp   modenum,WREG     ;トリガ形式文字は
        sublw   1                ;　　modenum=1 　の時には、白色
        btfsc   ALUSTA,Z         ;　　modenum=0,2 の時には、緑色
        bsf     modebit,0        ;


        movlw   0
        movwf   charcount
        movfp   char_number,WREG
        sublw   0                ;0-char_number を計算
        btfss   ALUSTA,Z         ;演算結果がゼロの時のみ、Ｚ＝１
        goto    moji1
        call    charuPdisp       ;char_number=0 のとき、ｕＰのビット表示処理に入る
        goto    chardispend
moji1
        movlw   1
        movwf   charcount
        movfp   char_number,WREG
        sublw   1                ;1-char_number を計算
        btfss   ALUSTA,Z         ;演算結果がゼロの時のみ、Ｚ＝１
        goto    moji2
        call    charDodisp       ;char_number=1 のとき、Ｄｏのビット表示処理に入る
        goto    chardispend
moji2
        movlw   2
        movwf   charcount
        movfp   char_number,WREG
        sublw   2                ;2-char_number を計算
        btfss   ALUSTA,Z         ;演算結果がゼロの時のみ、Ｚ＝１
        goto    moji3
        call    charHidisp       ;char_number=2 のとき、Ｈｉのビット表示処理に入る
        goto    chardispend
moji3
        movlw   3
        movwf   charcount
        movfp   char_number,WREG
        sublw   3                ;3-char_number を計算
        btfss   ALUSTA,Z         ;演算結果がゼロの時のみ、Ｚ＝１
        goto    moji4
        call    charLodisp       ;char_number=3 のとき、Ｌｏのビット表示処理に入る
        goto    chardispend
moji4
        movlw   4
        movwf   charcount
        movfp   char_number,WREG
        sublw   4                ;
        btfss   ALUSTA,Z         ;
        goto    moji5
        call    charNLdisp       ;
        goto    chardispend
moji5
        bcf     modebit,0        ;元に戻しておく

       ;サンプリング周波数
        movfp   modenum,WREG     ;サンプリング周波数文字は
        sublw   2                ;　　modenum=2 　の時には、白色
        btfsc   ALUSTA,Z         ;　　modenum=0,1 の時には、緑色
        bsf     modebit,0        ;

        movlw   5
        movwf   charcount
        movfp   char_number,WREG
        sublw   5                ;5-char_number を計算
        btfss   ALUSTA,Z         ;演算結果がゼロの時のみ、Ｚ＝１
        goto    moji6
        call    char10Mdisp       ;char_number=5 のとき、１０Ｍのビット表示処理に入る
        goto    chardispend
moji6
        movlw   6
        movwf   charcount
        movfp   char_number,WREG
        sublw   6                ;
        btfss   ALUSTA,Z         ;
        goto    moji7
        call    char1.25Mdisp     ;１．２５Ｍ
        goto    chardispend
moji7
        movlw   7
        movwf   charcount
        movfp   char_number,WREG
        sublw   7                ;
        btfss   ALUSTA,Z         ;
        goto    moji8
        call    char156kdisp     ;１５６ｋ
        goto    chardispend
moji8
        movlw   8
        movwf   charcount
        movfp   char_number,WREG
        sublw   8                ;
        btfss   ALUSTA,Z         ;
        goto    moji9
        call    char20kdisp      ;２０ｋ
        goto    chardispend
moji9
        movlw   9
        movwf   charcount
        movfp   char_number,WREG
        sublw   9                ;
        btfss   ALUSTA,Z         ;
        goto    moji10
        call    char2.5kdisp     ;２．５ｋ
        goto    chardispend
moji10
        movlw   10
        movwf   charcount
        movfp   char_number,WREG
        sublw   10               ;
        btfss   ALUSTA,Z         ;
        goto    moji11
        call    char313disp     ;３１３
        goto    chardispend
moji11
        movlw   11
        movwf   charcount
        movfp   char_number,WREG
        sublw   11               ;
        btfss   ALUSTA,Z         ;
        goto    moji12
        call    char39disp      ;３９
        goto    chardispend
moji12
        movlw   12
        movwf   charcount
        movfp   char_number,WREG
        sublw   12               ;
        btfss   ALUSTA,Z         ;
        goto    moji13
        call    char5.0disp       ;５．０
        goto    chardispend
moji13
        movlw   13
        movwf   charcount
        movfp   char_number,WREG
        sublw   13
        btfss   ALUSTA,Z
        goto    moji14
        call    dottojob         ;青ドットの空白を表示させる
        goto    chardispend
moji14
        bcf     modebit,0        ;元に戻しておく


       ;文字の表示部分　　終了　++++++++++++++++++++++++++++++++++++++++++++

chardispend
        movlw   menu_sline       ;menu_slineとmenu_wlineを加算し、
        addlw   menu_wline       ;結果はＷレジスタに
        sublw   ini_line         ;ini_lineからＷレジスタの内容を引く
        movwf   temp0            ;残りグラフの最下段まで青で塗りつぶす
dlloop6
        call    bludotto         ;
        decfsz  temp0,1          ;
        goto    dlloop6

       ;int_line毎に白色ドットを描写、その間は青色ドットを描写
        movlw   channum
        movwf   temp0
        incf    temp0,1          ;
dlloop7
        call    whidotto         ;白色の指定。

        movlw   int_line
        movwf   temp1
        decf    temp1,1          ;
dlloop8
        call    bludotto
        decfsz  temp1,1
        goto    dlloop8
        decfsz  temp0,1
        goto    dlloop7

        movlw   fin_line         ;
        movwf   temp0
dlloop9
        call    bludotto         ;青色ドット列の描写
        decfsz  temp0,1
        goto    dlloop9

        call    HDISP_FIN

        decfsz  linecount,1
        goto    dlloop10
 
enddatadisp

        return

;*****************************************
;*****************************************
;メニュー文字描写
;トリガ形式
charuPdisp
        movfp   current,WREG   ;
        call    characteruP
        call    comtrigtype
        return

charDodisp
        movfp   current,WREG   ;
        call    characterDo
        call    comtrigtype
        return

charHidisp
        movfp   current,WREG   ;
        call    characterHi
        call    comtrigtype
        return   

charLodisp
        movfp   current,WREG   ;
        call    characterLo
        call    comtrigtype
        return   

charNLdisp
        movfp   current,WREG   ;
        call    characterNL
        call    comtrigtype
        return   

;サンプリング周波数
char10Mdisp 
        movfp   current,WREG   ;
        call    character10M
        call    comsamptime
        return

char1.25Mdisp
        movfp   current,WREG   ;
        call    character1.25M
        call    comsamptime
        return

char156kdisp
        movfp   current,WREG   ;
        call    character156k
        call    comsamptime
        return

char20kdisp
        movfp   current,WREG   ;
        call    character20k
        call    comsamptime
        return

char2.5kdisp
        movfp   current,WREG   ;
        call    character2.5k
        call    comsamptime
        return

char313disp
        movfp   current,WREG   ;
        call    character313
        call    comsamptime
        return

char39disp
        movfp   current,WREG   ;
        call    character39
        call    comsamptime
        return

char5.0disp
        movfp   current,WREG   ;
        call    character5.0
        call    comsamptime
        return

;空欄
charspacedisp
        movfp   current,WREG   ;
        call    characterNL
        call    comsamptime
        return

;横軸時間幅
char23udisp 
        movfp   current,WREG   ;
        call    character23u
        call    comtimespan
        return

char185udisp
        movfp   current,WREG   ;
        call    character185u
        call    comtimespan
        return

char1.5mdisp
        movfp   current,WREG   ;
        call    character1.5m
        call    comtimespan
        return

char12mdisp
        movfp   current,WREG   ;
        call    character12m
        call    comtimespan
        return

char95mdisp
        movfp   current,WREG   ;
        call    character95m
        call    comtimespan
        return

char750mdisp
        movfp   current,WREG   ;
        call    character750m
        call    comtimespan
        return

char6.0sdisp
        movfp   current,WREG   ;
        call    character6.0s
        call    comtimespan
        return

char46sdisp
        movfp   current,WREG   ;
        call    character46s
        call    comtimespan
        return

;*****************************************
;文字描写部分の共通部分をサブルーチン化
;トリガ形式部分
comtrigtype
        movwf   charcode

        movfp   jobmode,WREG
        sublw   1              ;jobmode=1 の時は、トリガ形式の文字
        btfsc   ALUSTA,Z       ;を緑色で表示する
        goto    cttjump         ;

        movfp   trigtype,WREG  ;
        subwf   charcount,0    ;trigtype=charcount のとき、
        btfsc   ALUSTA,Z       ;対応する文字を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
cttjump
        call    dottojob       ;

        incf    current,1
        movfp   current,WREG
        sublw   menu_moji1     ;current=menu_moji1 となったときには
        btfss   ALUSTA,Z       ;Ｚ＝１となる。その時点でcurrent をクリアする
        goto    comttend   
        clrf    current
        incf    char_number,1  ;表示文字番号を＋１する
comttend
        return  

;サンプリング時間部分
comsamptime
        movwf   charcode

        movfp   jobmode,WREG
        sublw   1              ;jobmode=1 の時は、
        btfsc   ALUSTA,Z       ;サンプリング時間の文字を緑色で表示する
        goto    cstjump         ;

        movfp   samptime,WREG  ;
        subwf   charcount,0    ;samptime=charcount のとき、
        btfsc   ALUSTA,Z       ;対応する文字を赤色で表示
        call    seldottojob    ;
        btfss   ALUSTA,Z       ;
cstjump
        call    dottojob       ;

        incf    current,1
        movfp   current,WREG
        sublw   menu_moji1     ;current=menu_moji1 となったときには
        btfss   ALUSTA,Z       ;Ｚ＝１となる。その時点でcurrent をクリアする
        goto    comstend   
        clrf    current
        incf    char_number,1  ;表示文字番号を＋１する
comstend
        return  

;横軸時間幅部分
comtimespan
        movwf   charcode

        call   timespandottojob

        incf    current,1
        movfp   current,WREG
        sublw   menu_moji2     ;current=menu_moji2 となったときには
        btfss   ALUSTA,Z       ;Ｚ＝１となる。その時点でcurrent をクリアする
        goto    comtsend   
        clrf    current
comtsend
        return  

;*********************************************************************************************
;*********************************************************************************************
;１行描写するための必須な初期処理
HDISP_INI
        movlb   1
        bcf     HSYNC_1        ;水平同期準備
        bsf     DCK_1          ;３×DCK_1以上の時間幅が必要と指定されているので
        bcf     DCK_1          ;
        bsf     DCK_1          ;
        bcf     DCK_1
        bsf     DCK_1
        bcf     DCK_1
        bsf     DCK_1
        bcf     DCK_1
        bsf     HSYNC_1        ;水平同期開始
        movlb   0

       ;行の先頭分の空の４８ドット分を実行する
        movlw   dott48
        movwf   temp0
hiloop   
        movlb   1
        bsf     DCK_1          ;ドットクロックを
        bcf     DCK_1          ;１パルス出力
        movlb   0
        decfsz  temp0,1        ;
        goto    hiloop
        
        return

;*********************************************************************************************
;*********************************************************************************************
;１行描写した際に必須な終了処理
HDISP_FIN
       ;行の最後分の空きの８ドット分を実行する
        movlw   dott8
        movwf   temp0
hfloop   
        movlb   1
        bsf     DCK_1          ;ドットクロックを
        bcf     DCK_1          ;１パルス出力
        movlb   0
        decfsz  temp0,1        ;
        goto    hfloop

        return

;*****************************************
;赤色ドットの描写
reddotto
        call    red111         ;赤色の指定。
        call    gre000
        call    blu000
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;緑色ドットの描写
gredotto
        call    red000         ;緑色の指定。
        call    gre111
        call    blu000
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;青色ドットの描写
bludotto
        call    red000         ;青色の指定。
        call    gre000
        call    blu111
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;白色ドットの描写
whidotto
        call    red111         ;白色の指定。
        call    gre111
        call    blu111
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;黄色ドットの描写
yeldotto
        call    red111         ;黄色の指定。
        call    gre111
        call    blu000
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;紫色ドットの描写
viodotto
        call    red111         ;紫色の指定。
        call    gre000
        call    blu111
        movlb   1
        bsf     DCK_1
        bcf     DCK_1
        movlb   0

        return

;*****************************************
;配色ルーチン
    ;赤色データ
red000  
       movlb   5
       bcf     PORTF,0
       bcf     PORTF,1
       bcf     PORTF,2
       movlb   0
       return

red111  
       movlb   5
       bsf     PORTF,0
       bsf     PORTF,1
       bsf     PORTF,2
       movlb   0
       return

    ;緑色データ
gre000  
       movlb   5
       bcf     PORTF,3
       bcf     PORTF,4
       bcf     PORTF,5
       movlb   0
       return

gre111  
       movlb   5
       bsf     PORTF,3
       bsf     PORTF,4
       bsf     PORTF,5
       movlb   0
       return

    ;青色データ
blu000  
       movlb   5
       bcf     PORTF,6
       bcf     PORTF,7
       movlb   1
       bcf     PORTD,7
       movlb   0
       return

blu111  
       movlb   5
       bsf     PORTF,6
       bsf     PORTF,7
       movlb   1
       bsf     PORTD,7
       movlb   0
       return

;*********************************************************************************************
;*********************************************************************************************
;チャンネル番号表示用表
;数字”０”
character0
       addwf   PCL,1
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'10000001'
       retlw   b'01111110'
       return

;数字”１”
character1
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000001'
       retlw   b'11111111'
       retlw   b'00000000'
       return

;数字”２”
character2
       addwf   PCL,1
       retlw   b'11100001'
       retlw   b'10010001'
       retlw   b'10010001'
       retlw   b'10001110'
       return

;数字”３”
character3
       addwf   PCL,1
       retlw   b'01001001'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       return

;数字”４”
character4
       addwf   PCL,1
       retlw   b'00011111'
       retlw   b'00010000'
       retlw   b'11111111'
       retlw   b'00010000'
       return

;数字”５”
character5
       addwf   PCL,1
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       return

;数字”６”
character6
       addwf   PCL,1
       retlw   b'01111110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       return

;数字”７”
character7
       addwf   PCL,1
       retlw   b'00000001'
       retlw   b'11100001'
       retlw   b'00011001'
       retlw   b'00000111'
       return

;*****************************************
;トリガ形式表示用文字群　　１２列
;文字”ｕＰ”
characteruP
       addwf   PCL,1  
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'01111000'
       retlw   b'10000000'
       retlw   b'10000000'
       retlw   b'01111000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00010001'
       retlw   b'00010001'
       retlw   b'00001110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;文字”Ｄｏ”
characterDo
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'10000001'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'01111000'
       retlw   b'10000100'
       retlw   b'10000100'
       retlw   b'01111000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return
 
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop

;文字”Ｈｉ”
characterHi
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00010000'
       retlw   b'00010000'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11110011'
       retlw   b'10000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return
 
;文字”Ｌｏ”
characterLo
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'10000000'
       retlw   b'10000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'01111000'
       retlw   b'10000100'
       retlw   b'10000100'
       retlw   b'01111000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
      return


;文字”空白”
characterNL
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
      return

;*****************************************
;サンプリング周波数表示用文字（１６列）と横軸時間幅数値表示文字（２０列）
;文字”１０Ｍ”
character10M
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10000001'
       retlw   b'11111111'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00000110'
       retlw   b'00000110'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;文字”２３μ”
character23u
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11000001'
       retlw   b'10100001'
       retlw   b'10010001'
       retlw   b'10001110'
       retlw   b'00000000'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'01000000'
       retlw   b'01000000'
       retlw   b'11111000'  
       retlw   b'00000000'
       return

;文字”１．２５Ｍ”
character1.25M
       addwf   PCL,1
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'11000001'
       retlw   b'10100001'
       retlw   b'10011110'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00000110'
       retlw   b'11111111'
       retlw   b'00000000'
       return

;文字”１８５μ”
character185u
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000001'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'01110110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'01000000'
       retlw   b'01000000'
       retlw   b'11111000'  
       retlw   b'00000000'
       return

;文字”１５６ｋ”
character156k
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000001'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00100100'
       retlw   b'11000011'
       return

;文字”１．５ｍ”
character1.5m
       addwf   PCL,1
       retlw   b'00000000'  
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10000001'
       retlw   b'11111111'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'00001000'
       retlw   b'11110000'
       retlw   b'00001000'
       retlw   b'11110000'
       retlw   b'00000000'
       return

;文字”２０ｋ”
character20k
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11000001'
       retlw   b'10100001'
       retlw   b'10011110'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00010100'
       retlw   b'00100010'
       retlw   b'11000001'
       retlw   b'00000000'
       return

;文字”１２ｍ”
character12m
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10000001'
       retlw   b'11111111'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11000001'
       retlw   b'10100001'
       retlw   b'10010001'
       retlw   b'10001110'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'00001000'
       retlw   b'11110000'
       retlw   b'00001000'  
       retlw   b'11110000'
       retlw   b'00000000'
       return

;文字”２．５ｋ”
character2.5k
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11000001'
       retlw   b'10100001'
       retlw   b'10011110'
       retlw   b'00000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00100100'
       retlw   b'11000011'
       retlw   b'00000000'
       return

       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop

;文字”９５ｍ”
character95m
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10000110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'00001000'
       retlw   b'11110000'
       retlw   b'00001000'  
       retlw   b'11110000'
       retlw   b'00000000'
       return

;文字”３１３”
character313
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
      return

;文字”７５０ｍ”
character750m
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000111'
       retlw   b'11100001'
       retlw   b'00011111'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'00001000'
       retlw   b'11110000'
       retlw   b'00001000'  
       retlw   b'11110000'
       return
     
;文字”３９”
character39
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10000110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;文字”６．０ｓ”
character6.0s
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'10010000'
       retlw   b'10101000'  
       retlw   b'10101000'  
       retlw   b'01001000'
       retlw   b'00000000'
       return

;文字”５．０”
character5.0
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'10001111'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01111001'
       retlw   b'00000000'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10000001'
       retlw   b'10000001'
       retlw   b'01111110'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;文字”４６ｓ”
character46s
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00011111'
       retlw   b'00010000'
       retlw   b'00010000'
       retlw   b'11111111'
       retlw   b'00010000'
       retlw   b'00000000'
       retlw   b'01111110'
       retlw   b'10001001'
       retlw   b'10001001'
       retlw   b'01110001'
       retlw   b'00000000'
       retlw   b'10010000'
       retlw   b'10101000'  
       retlw   b'10101000'
       retlw   b'01001000'
       retlw   b'00000000'
       retlw   b'00000000'
       return


;*********************************************************************************************
;*********************************************************************************************
;左移動記号　
characterLeft
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;縮小記号　
characterRedu
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop
       nop

;拡大記号　
characterExti
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;右移動記号　
characterRight
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'01111110'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00111100'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00011000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'11111111'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;リセット記号　
characterReset
       addwf   PCL,1
       retlw   b'00000000'
       retlw   b'10000001'
       retlw   b'11111111'
       retlw   b'10000001'
       retlw   b'00000000'
       retlw   b'11111000'
       retlw   b'00001000'
       retlw   b'00001000'
       retlw   b'11111000'
       retlw   b'00000000'
       retlw   b'11111010'
       retlw   b'00000000'
       retlw   b'00001000'
       retlw   b'11111100'
       retlw   b'10001000'
       retlw   b'00000000'
       retlw   b'11111010'
       retlw   b'00000000'
       retlw   b'01110010'
       retlw   b'10001010'
       retlw   b'10001010'
       retlw   b'11111100'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'11111111'
       retlw   b'10000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       retlw   b'00000000'
       return

;*********************************************************************************************
;*********************************************************************************************
;一定時間幅設定ルーチン　その０　長時間幅用　約１秒
;timebase0 の値で変更可能　
timewidlong
      movlw   timebase0    ;＝５　　　約１．０秒
      movwf   temp0        ;
twloop3
      clrf    temp1        ;
      clrf    temp2        ;
twloop0
      decfsz  temp1,1      ;
      goto    twloop0
      decfsz  temp2,1      ;
      goto    twloop0
      decfsz  temp0,1      ;
      goto    twloop3 
      return

;******************************************
;一定時間幅設定ルーチン　その１　短時間幅用
;timebase1 timebase2 の値で設定自在　
timewidshort
      movlw   timebase1    ;２５６×２５６　約０．４秒
      movwf   temp1        ;１２８×１２８　約０．１秒
      movlw   timebase2    ;
      movwf   temp2        ;　
twloop1
      decfsz  temp1,1      ;
      goto    twloop1
      movlw   timebase1    ;
      movwf   temp1        ;
      decfsz  temp2,1      ;
      goto    twloop1
      return

;***********************************************************************************
;***********************************************************************************
;モニタＬＥＤの点灯　検査用に使用できる
LEDon
      movlb   1
      bsf     LEDmon_1
      movlb   0
      return

;***********************************************************************************
;***********************************************************************************
;プログラムの実行終了
jobend
limit
      goto limit

      end





