(このファイルはアセンブル実行で出力される「リスティングファイル」の一部で、文字コードはShift JIS codeを使用しています) '---------------------------------------------------------------- 'No.100 ASCII CODE '---------------------------------------------------------------- '名称:ASCII CODE定義 '機能:ASCIIコードにシンボルを割り当てる '入力: '出力: '---------------------------------------------------------------- :CH_BS EQU %08 'BS :CH_LF EQU %0A 'LF :CH_CR EQU %0D 'CR :CH_ESC EQU %1B 'ESC :CH_SP EQU %20 'SP :CH_EXC EQU %21 '! :CH_QUO EQU %22 '" :CH_NUM EQU %23 '# :CH_PER EQU %25 '% :CH_AMP EQU %26 '& :CH_LFT EQU %28 '( :CH_RIT EQU %29 ') :CH_AST EQU %2A '* :CH_PLS EQU %2B '+ :CH_MIN EQU %2D '- :CH_DOT EQU %2E '. :CH_SLS EQU %2F '/ :CH_COL EQU %3A ': :CH_SCO EQU %3B '; :CH_LT EQU %3C '< :CH_EQ EQU %3D '= :CH_GT EQU %3E '> :CH_QUE EQU %3F '? :CH_CAT EQU %40 '@ :CH_TIL EQU %7E '~ ' :CH_0 EQU %30 '0 :CH_1 EQU %31 '1 :CH_2 EQU %32 '2 :CH_3 EQU %33 '3 :CH_4 EQU %34 '4 :CH_5 EQU %35 '5 :CH_6 EQU %36 '6 :CH_7 EQU %37 '7 :CH_8 EQU %38 '8 :CH_9 EQU %39 '9 ' :CH_A EQU %41 'A :CH_B EQU %42 'B :CH_C EQU %43 'C :CH_D EQU %44 'D :CH_E EQU %45 'E :CH_F EQU %46 'F :CH_G EQU %47 'G :CH_H EQU %48 'H :CH_I EQU %49 'I :CH_J EQU %4A 'J :CH_K EQU %4B 'K :CH_L EQU %4C 'L :CH_M EQU %4D 'M :CH_N EQU %4E 'N :CH_O EQU %4F 'O :CH_P EQU %50 'P :CH_Q EQU %51 'Q :CH_R EQU %52 'R :CH_S EQU %53 'S :CH_T EQU %54 'T :CH_U EQU %55 'U :CH_V EQU %56 'V :CH_W EQU %57 'W :CH_X EQU %58 'X :CH_Y EQU %59 'Y :CH_Z EQU %5A 'Z ' :CH_SP2 EQU %DB '空白記号(カナの"ロ"で代用) :CH_SM EQU %6D 'm(小文字) '---------------------------------------------------------------- 'No.101 REGISTER '---------------------------------------------------------------- '名称:レジスタ定義 '機能:マイコンの各種レジスタを定義(RAM空間) '入力: '出力: '---------------------------------------------------------------- :U0TXD EQU %F40 'UART0 TXD :U0RXD EQU %F40 'UART0 RXD :U0STAT0 EQU %F41 'UART0 STAT0 :U0CTL0 EQU %F42 'UART0 CTRL0 :U0CTL1 EQU %F43 'UART0 CTRL1 :U0BRH EQU %F46 'UARTO BAUD HIGH :U0BRL EQU %F47 'UARTO BAUD LOW ' :I2CDATA EQU %F50 'I2C DATA :I2CSTAT EQU %F51 'I2C STATUS :I2CCTL EQU %F52 'I2C CONTROL :I2CBRH EQU %F53 'I2C BAUD HIGH :I2CBRL EQU %F54 'I2C BAUD LOW ' :PAADDR EQU %FD0 'PORT A ADDRESS(01H:DATA DIRECTION,02H:PACTL=ALTEMATE FUNCTION) :PACTL EQU %FD1 'PORT A CONTROL :PAIN EQU %FD2 'PORT A INPUT DATA :PAOUT EQU %FD3 'PORT A OUTPUT DATA ' :PCADDR EQU %FD8 'PORT C ADDRESS(01H:DATA DIRECTION,02H:PACTL=ALTEMATE FUNCTION) :PCCTL EQU %FD9 'PORT C CONTROL :PCIN EQU %FDA 'PORT C INPUT DATA :PCOUT EQU %FDB 'PORT C OUTPUT DATA ' :FLAGS EQU %FFC 'FLAGS :RP EQU %FFD 'REGISTER POINTER :SPH EQU %FFE 'STK POINTER H :SPL EQU %FFF 'STK POINTER L '---------------------------------------------------------------- 'No.102 WORKING AREA '---------------------------------------------------------------- '名称:BASIC作業変数定義 '機能:BASICインタプリタ作業変数を定義(RAM空間000h-0FFh) '入力: '出力: '---------------------------------------------------------------- '****************************** 'ワーキングレジスタ '****************************** '%00〜%0F ワーキングレジスタr0〜r15に使用 '****************************** 'BASIC 作業変数 '****************************** '%10〜%1F 各種変数、フラグ :RUNF EQU %10 '実行モードフラグ(0:DIRECTモード,1:RUNモード) ' :LNBIN EQU %12 'バイナリ行番号(1〜65535) :LNBINL EQU %13 ' :LNDIG EQU %14 '行番号桁(0〜5) :LBUFZ EQU %15 '入力行文字数(0〜32)、CRを含む ' :PC EQU %16 'プログラムカウンタ(PC)、DIRECT/RUN両モードで使用 :PCL EQU %17 ' :VNM EQU %18 '左辺変数名(ASCII) ' :VEA EQU %1A '左辺変数実効アドレス :VEAL EQU %1B '%20〜%2F 数式処理サブルーチン(CALC)作業変数(*1は入力、*2は出力、無印は作業変数) :DLMT EQU %20 '式終端記号(*1) :ARYF EQU %21 '配列フラグ(0:通常の右括弧、1:配列の右括弧) :PTR EQU %22 '数式ポインタ(*1,*2) :PTRL EQU %23 :LR EQU %24 '左項レジスタ(*2) :LRL EQU %25 :RR EQU %26 '右項レジスタ :RRL EQU %27 :LR2 EQU %28 '第2左項レジスタ :LR2L EQU %29 :OP EQU %2A '演算子レジスタ :OP2 EQU %2B '第2演算子レジスタ '%30〜%63 変数(A-Z) :VA EQU %30 '変数Aの上位バイト(〜変数Zの下位バイト) '%64〜%71 特殊変数(#,!,&,:,他) :XLN EQU %64 '実行行番号(#) :XLNL EQU %65 :RLN EQU %66 'リターン行番号(!) :RLNL EQU %67 :EOP EQU %68 '未プログラム先頭ポインタ(&)、初期値は&=264 :EOPL EQU %69 :EOM EQU %6A '配列先頭ポインタ(:) :EOML EQU %6B :MOD EQU %6C '除算の余り :MODL EQU %6D :OTH EQU %6E '上記以外の変数(?など) :OTHL EQU %6F :TOP EQU %70 'プログラム先頭ポインタ(変数名なし)、固定値264 :TOPL EQU %71 '%80〜%9F 文字入力行バッファ(32バイト) :LBUF EQU %80 '%A0〜%AF 数字入力行バッファ(16バイト) :NBUF EQU %A0 '****************************** 'BIOS作業変数 '****************************** '%B0〜%DF 各種変数、フラグ :SMODE EQU %B0 'システムモード(b0=1/0:オンボードキー/外部端末キー、b1=1/0:BASIC/ユーザプログラム) 'キースイッチ :KYANK EQU %B1 '文字系列(0:英字、1:数字、2:記号1、3:記号2) :KYCA EQU %B2 '英字コード候補(41H〜5AH) :KYCN EQU %B3 '数文コード候補(30H〜39H) :KYCK1 EQU %B4 '記号1コード候補(2AH〜2FH,3AH〜41H) :KYCK2 EQU %B5 '記号2コード候補(20H〜29H) :KY1B EQU %B6 'スイッチ1履歴(b0が最新) :KY2B EQU %B7 'スイッチ2履歴(〃) :KY3B EQU %B8 'スイッチ3履歴(〃) :KY4B EQU %B9 'スイッチ4履歴(〃) 'LCD表示器 :DRAM EQU %C0 'LCD表示器下1行×15文字イメージ :CSOR EQU %CF 'カーソル位置(0〜14) '****************************** 'ユーザ開放セロページ '****************************** '%D0〜%DF ユーザ開放セロペーシ '****************************** 'スタックエリア '****************************** '%E0〜%FF スタックエリア '---------------------------------------------------------------- 'No.103 OPT&VECTOR '---------------------------------------------------------------- '名称:オプションビット・ベクター定義 '機能: '入力: '出力: '---------------------------------------------------------------- ORG %0000 '以降、0番地からコード展開 'DB文で、ROM空間のメモリに数値を置くことが可能 0000 EF DB %EF 'オプションビット設定(OSC SEL=10) 0001 FF DB %FF ' 0002 00 DB %00 'リセットベクター(0038番地へジャンプ) 0003 38 DB %38 0004 10 DB %10 'その他のベクター(1004番地へジャンプ) 0005 04 DB %04 0006 10 DB %10 'その他のベクター(1006番地へジャンプ) 0007 06 DB %06 0008 10 DB %10 'その他のベクター(1008番地へジャンプ) 0009 08 DB %08 000A 10 DB %10 'その他のベクター(100A番地へジャンプ) 000B 0A DB %0A 000C 10 DB %10 'その他のベクター(100C番地へジャンプ) 000D 0C DB %0C 000E 10 DB %10 'その他のベクター(100E番地へジャンプ) 000F 0E DB %0E 0010 10 DB %10 'その他のベクター(1010番地へジャンプ) 0011 10 DB %10 0012 10 DB %10 'その他のベクター(1012番地へジャンプ) 0013 12 DB %12 0014 10 DB %10 'その他のベクター(1014番地へジャンプ) 0015 14 DB %14 0016 10 DB %10 'その他のベクター(1016番地へジャンプ) 0017 16 DB %16 0018 10 DB %10 'その他のベクター(1018番地へジャンプ) 0019 18 DB %18 001A 10 DB %10 'その他のベクター(101A番地へジャンプ) 001B 1A DB %1A 001C 10 DB %10 'その他のベクター(101C番地へジャンプ) 001D 1C DB %1C 001E 10 DB %10 'その他のベクター(101E番地へジャンプ) 001F 1E DB %1E 0020 10 DB %10 'その他のベクター(1020番地へジャンプ) 0021 20 DB %20 0022 10 DB %10 'その他のベクター(1022番地へジャンプ) 0023 22 DB %22 0024 10 DB %10 'その他のベクター(1024番地へジャンプ) 0025 24 DB %24 0026 10 DB %10 'その他のベクター(1026番地へジャンプ) 0027 26 DB %26 0028 10 DB %10 'その他のベクター(1028番地へジャンプ) 0029 28 DB %28 002A 10 DB %10 'その他のベクター(102A番地へジャンプ) 002B 2A DB %2A 002C 10 DB %10 'その他のベクター(102C番地へジャンプ) 002D 2C DB %2C 002E 10 DB %10 'その他のベクター(102E番地へジャンプ) 002F 2E DB %2E 0030 10 DB %10 'その他のベクター(1030番地へジャンプ) 0031 30 DB %30 0032 10 DB %10 'その他のベクター(1032番地へジャンプ) 0033 32 DB %32 0034 10 DB %10 'その他のベクター(1034番地へジャンプ) 0035 34 DB %34 0036 10 DB %10 'その他のベクター(1036番地へジャンプ) 0037 36 DB %36 'システムコール38h〜65h 0038 8D0068 JP :START 'システムコール38h(56) START (非公開)システムスタート 003B 8D0841 JP :OUTCHX 'システムコール3Bh(59) OUT1C 出力装置へ1文字出力 003E 8D012F JP :INPCH 'システムコール3Eh(62) INP1C 入力装置から1文字入力 0041 8D02C9 JP :CKESC 'システムコール41h(65) CKESC (非公開)ESCキー入力チェック 0044 8D02F0 JP :LOAD 'システムコール44h(68) LOAD BASICプログラムをEEPROMからロード 0047 8D0310 JP :SAVE 'システムコール47h(71) SAVE BASICプログラムをEEPROMへセーブ 004A 8D0330 JP :BLINK 'システムコール4Ah(74) BLINK LEDを5秒間点滅させる 004D 8D0539 JP :T1S 'システムコール4Dh(77) T1S ループによる1秒ディレイ 0050 8D052B JP :T100MS 'システムコール50h(80) T100MS ループによる0.1秒ディレイ 0053 8D0345 JP :NUL 'システムコール53h(83) (NUL) 未定義 0056 8D0345 JP :NUL 'システムコール56h(86) (NUL) 未定義 0059 8D0345 JP :NUL 'システムコール59h(89) (NUL) 未定義 005C 8D0345 JP :NUL 'システムコール5Ch(92) (NUL) 未定義 005F 8D0345 JP :NUL 'システムコール5Fh(95) (NUL) 未定義 0062 8D0345 JP :NUL 'システムコール62h(98) (NUL) 未定義 0065 8D0345 JP :NUL 'システムコール65h(101) (NUL) 未定義 '---------------------------------------------------------------- 'No.104 START '---------------------------------------------------------------- '名称:システムスタート '機能:初期設定後、スイッチの状態によりBASICインタプリタ起動または1000h番地へジャンプ '入力: '出力: '---------------------------------------------------------------- :START 0068 8F DI '割込禁止 0069 0100 SRP #%00 'RP=0(ワーキングレジスタを000h〜00Fh番地に割り当てる) 006B E9010FFE LDX :SPH,#%01 'スタックポインタ設定(100h) 006F E9000FFF LDX :SPL,#%00 0073 E9000F46 LDX :U0BRH,#0 'BR=26(4MHzのとき、9600bps) 0077 E91A0F47 LDX :U0BRL,#26 'PA0-PA3初期化(キースイッチ) 007B E9010FD0 LDX :PAADDR,#%01 'DATA DIRECTION選択 007F E90F0FD1 LDX :PACTL,#%0F 'PA3,PA2,PA1,PA0=1(INPUT) 'PC2-PC5初期化(EEPROM) 0083 E9010FD8 LDX :PCADDR,#%01 'DATA DIRECTION選択 0087 E9200FD9 LDX :PCCTL,#%20 'PC5=1(INPUT),PC6,PC4,PC3,PC2=0(OUTPUT) 008B E9000FD8 LDX :PCADDR,#%00 '選択保護 008F D60547 CALL :ROMINI 'EEPROM制御線初期状態 '周辺機器(表示器、キースイッチ)の起動待ち 0092 D6052B CALL :T100MS '0.1sディレイ 'キースイッチ読込 0095 E8FD20B0 LDX :SMODE,:PAIN 'システムモード 0099 56B007 AND :SMODE,#%07 'bb0=1/0:スタンドアロン/ターミナル、b1=1/0:BASIC/機械語,b2=1/0:LCD ON/LCD OFF 'UART1初期化 009C E9020FD0 LDX :PAADDR,#%02 'ALTEMATE FUNCTION選択 00A0 E9F00FD1 LDX :PACTL,#%F0 'PA7,PA6,PA5,PA4=ALTEMATE FUNCTION(SDA,SCL,TXD0,RXD0) 00A4 E9000FD0 LDX :PAADDR,#%00 '選択保護 00A8 E9C00F42 LDX :U0CTL0,#%C0 '送受信有効、CTS無効、パリティなし、1ストップビット 00AC E9020F43 LDX :U0CTL1,#%02 'I2C初期化 00B0 E9000F53 LDX :I2CBRH,#0 'BR=40(4MHzのとき100kHz) 00B4 E9280F54 LDX :I2CBRL,#40 00B8 E9800F52 LDX :I2CCTL,#%80 'I2C有効(IEN=1) 'LCD初期化 00BC 0C38 LD r0,#%38 '命令実行(ディプレイON/OFF、IS=0) 00BE D60386 CALL :LCDWC 00C1 0C39 LD r0,#%39 '命令実行(ディスプレイON/OFF、IS=1) 00C3 D60386 CALL :LCDWC ' 00C6 0C14 LD r0,#%14 '命令実行14(内部OSC周波数) 00C8 D60386 CALL :LCDWC 00CB 0C74 LD r0,#%74 '命令実行74(コントラスト) 00CD D60386 CALL :LCDWC 00D0 0C54 LD r0,#%54 '命令実行54(電源/アイコン/コントラスト) 00D2 D60386 CALL :LCDWC 00D5 0C6F LD r0,#%6F '命令実行6F(フォロワー) 00D7 D60386 CALL :LCDWC ' 00DA 0C0C LD r0,#%0C '命令実行0C(ディスプレイON/OFF、IS=0) 00DC D60386 CALL :LCDWC 00DF 0C01 LD r0,#%01 '命令実行01(クリアディスプレイ) 00E1 D60386 CALL :LCDWC ' 00E4 0CC0 LD r0,#%C0 '命令実行0C(アドレスC0)自動インクメント 左端下 00E6 D60386 CALL :LCDWC ' 00E9 E90000CF LDX :CSOR,#0 'カーソル初期化 'オンボードキー変換初期化 00ED E6B100 LD :KYANK,#0 'オンボードキー変換モード初期化(英字モード) 00F0 E6B241 LD :KYCA,#%41 '英字コード候補(41H) 00F3 E6B330 LD :KYCN,#%30 '数字コード候補(30H) 00F6 E6B42A LD :KYCK1,#%2A '記号1コード候補(2AH) 00F9 E6B520 LD :KYCK2,#%20 '記号1コード候補(20H) 00FC E4B200 LD 0,:KYCA '変換候補文字(A)を右上に表示 00FF D604CE CALL :LCDRT 'LEDインジケータ点滅 0102 D60330 CALL :BLINK 'LEDを5秒間点滅 'START BASIC :L1040 0105 76B002 TM :SMODE,#%02 'BASICインタプリタ/ユーザプログラム判別 0108 6B05 JR /Z,:L1041 010A D6062D CALL :BASIC 'BASICインタプリタ実行 010D 8BF6 JR :L1040 :L1041 010F 8D1000 JP %1000 'ユーザプログラム実行(1000H番地の機械語) '---------------------------------------------------------------- 'No.200 OUTCH '---------------------------------------------------------------- '名称:1文字出力 '機能:端末装置へ1文字出力、実行後不変(r0) '入力:出力データ(r0) '出力:端末装置 '---------------------------------------------------------------- :OUTCH 0112 7000 PUSH 0 'モードによらず端末、液晶表示器の両方に表示 :L2000 0114 840F41 LDX r0,:U0STAT0 'TRN REG FULL? 0117 F620FA BTJZ 2,r0,:L2000 011A 5000 POP 0 011C 940F40 LDX :U0TXD,r0 'TRN ' 011F 7000 PUSH 0 0121 7002 PUSH 2 0123 7003 PUSH 3 0125 D603F0 CALL :LCDCH '液晶表示器データ書込 0128 5003 POP 3 012A 5002 POP 2 012C 5000 POP 0 012E AF RET '---------------------------------------------------------------- 'No.201 INCH '---------------------------------------------------------------- '名称:1文字入力 '機能:端末装置から1文字入力、エコーバックなし '入力:端末装置 '出力:入力データ(r0) '---------------------------------------------------------------- :INPCH 012F 76B001 TM :SMODE,#%01 'オンボードキー/外部端末キー判別 0132 EB0A JR /NZ,:L20110 '外部端末キー(電源投入時にSW1を押していた場合) :L2010 0134 840F41 LDX r0,:U0STAT0 'REC REG EMPTY? 0137 F670FA BTJZ 7,r0,:L2010 013A 840F40 LDX r0,:U0RXD 'REC 013D AF RET 'オンボードキー(デフォルト) :L20110 013E E6B6FF LD :KY1B,#%FF 'キースイッチ1バッファ初期化(FF) 0141 E6B7FF LD :KY2B,#%FF 'キースイッチ2バッファ初期化(FF) 0144 E6B8FF LD :KY3B,#%FF 'キースイッチ3バッファ初期化(FF) 0147 E6B9FF LD :KY4B,#%FF 'キースイッチ4バッファ初期化(FF) ' 014A D602AD CALL :L20190 'キー状態読取、バッファに保存(シフト)後、10msディレイ 014D D602AD CALL :L20190 'キー状態読取、バッファに保存(シフト)後、10msディレイ :L20111 0150 D602AD CALL :L20190 'キー状態読取、バッファに保存(シフト)後、10msディレイ 0153 E4B600 LD 0,:KY1B 'キースイッチ1押下か? 0156 560007 AND 0,#%07 0159 A60004 CP 0,#%04 015C 6B1A JR /EQ,:L20120 015E E4B700 LD 0,:KY2B 'キースイッチ2押下か? 0161 560007 AND 0,#%07 0164 A60004 CP 0,#%04 0167 6D01A1 JP /EQ,:L20140 016A E4B800 LD 0,:KY3B 'キースイッチ3押下か? 016D 560007 AND 0,#%07 0170 A60004 CP 0,#%04 0173 6D0252 JP /EQ,:L20160 0176 8BD8 JR :L20111 'キー状態読取へ戻る 'ANK/BSキー(1)押下 :L20120 0178 E4B900 LD 0,:KY4B 'シフトキー(4)押下中か? 017B 560007 AND 0,#%07 017E A60000 CP 0,#%00 0181 6B1A JR /EQ,:L20130 '(ANK処理) 0183 20B1 INC :KYANK '文字系列を更新(・・・→0→1→2→3→0→・・・) 0185 A6B104 CP :KYANK,#4 0188 EB02 JR /NE,:L20129 018A B0B1 CLR :KYANK :L20129 018C E6B241 LD :KYCA,#%41 '英字コード候補(41H) 018F E6B330 LD :KYCN,#%30 '数字コード候補(30H) 0192 E6B42A LD :KYCK1,#%2A '記号コード候補(2AH) 0195 E6B520 LD :KYCK2,#%20 '記号コード候補(20H) :L20121 0198 D60282 CALL :L20180 'モード判別付キー表示 019B 8BB3 JR :L20111 'キー入力に戻る '(BS処理) :L20130 019D E60008 LD 0,#:CH_BS 'R0=08H(BS) 01A0 AF RET 'UP/DOWNキー(2)押下 :L20140 01A1 E4B900 LD 0,:KY4B 'シフトキー(4)押下中か? 01A4 560007 AND 0,#%07 01A7 A60000 CP 0,#%00 01AA 6B53 JR /EQ,:L20150 '(UP処理) 01AC A6B100 CP :KYANK,#0 '英字系列か? 01AF 6B0C JR /EQ,:L20141 01B1 A6B101 CP :KYANK,#1 '数字系列か? 01B4 6B14 JR /EQ,:L20143 01B6 A6B102 CP :KYANK,#2 '記号1系列か? 01B9 6B1C JR /EQ,:L20144 01BB 8B35 JR :L20147 '記号2系列 '(UP処理-英字) :L20141 01BD 20B2 INC :KYCA '英字コードを+1 01BF A6B25B CP :KYCA,#%5B '範囲上限オーバー? 01C2 EB03 JR /NE,:L20142 01C4 E6B241 LD :KYCA,#%41 '範囲下限に置換 :L20142 01C7 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(UP処理-数字) :L20143 01CA 20B3 INC :KYCN '数字コードを+1 01CC A6B33A CP :KYCN,#%3A '範囲上限オーバー? 01CF EBF6 JR /NE,:L20142 01D1 E6B330 LD :KYCN,#%30 '範囲下限に置換 01D4 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(UP処理-記号1) :L20144 01D7 20B4 INC :KYCK1 '記号コードを+1 01D9 A6B430 CP :KYCK1,#%30 '範囲1上限オーバー? 01DC 6B08 JR /EQ,:L20145 01DE A6B441 CP :KYCK1,#%41 '範囲2上限オーバー? 01E1 6B09 JR /EQ,:L20146 01E3 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る :L20145 01E6 E6B43A LD :KYCK1,#%3A '範囲2下限に置換 01E9 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る :L20146 01EC E6B42A LD :KYCK1,#%2A '範囲1下限に置換 01EF 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(UP処理-記号2) :L20147 01F2 20B5 INC :KYCK2 '記号2コードを+1 01F4 A6B52A CP :KYCK2,#%2A '範囲3上限オーバー? 01F7 EB03 JR /NE,:L20148 01F9 E6B520 LD :KYCK2,#%20 '範囲下限に置換 :L20148 01FC 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(DOWN処理) :L20150 01FF A6B100 CP :KYANK,#0 '英字系列か? 0202 6B0C JR /EQ,:L20151 0204 A6B101 CP :KYANK,#1 '数字系列か? 0207 6B14 JR /EQ,:L20153 0209 A6B102 CP :KYANK,#2 '記号1系列か? 020C 6B1C JR /EQ,:L20154 020E 8B35 JR :L20157 '記号2系列 '(DOWN処理-英字) :L20151 0210 30B2 DEC :KYCA '英字コードを-1 0212 A6B240 CP :KYCA,#%40 '範囲下限オーバー? 0215 EB03 JR /NE,:L20152 0217 E6B25A LD :KYCA,#%5A '範囲上限に置換 :L20152 021A 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(DOWN処理-数字) :L20153 021D 30B3 DEC :KYCN '数字コードを-1 021F A6B32F CP :KYCN,#%2F '範囲下限オーバー? 0222 EBF6 JR /NE,:L20152 0224 E6B339 LD :KYCN,#%39 '範囲上限に置換 0227 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(DOWN処理-記号1) :L20154 022A 30B4 DEC :KYCK1 '記号コードを-1 022C A6B429 CP :KYCK1,#%29 '範囲1下限オーバー? 022F 6B08 JR /EQ,:L20155 0231 A6B439 CP :KYCK1,#%39 '範囲2下限オーバー? 0234 6B09 JR /EQ,:L20156 0236 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る :L20155 0239 E6B440 LD :KYCK1,#%40 '範囲2上限に置換 023C 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る :L20156 023F E6B42F LD :KYCK1,#%2F '範囲1上限に置換 0242 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る '(DOWN処理-記号2) :L20157 0245 30B5 DEC :KYCK2 '記号2コードを-1 0247 A6B51F CP :KYCK2,#%1F '範囲3下限オーバー? 024A EB03 JR /NE,:L20158 024C E6B529 LD :KYCK2,#%29 '範囲3上限に置換 :L20158 024F 8D0198 JP :L20121 'モード判別付キー表示後、キー入力に戻る 'ENT/CRキー(3)押下 :L20160 0252 E4B900 LD 0,:KY4B 'シフトキー(4)押下中か? 0255 560007 AND 0,#%07 0258 A60000 CP 0,#%00 025B 6B21 JR /EQ,:L20170 '(ENT処理) 025D A6B100 CP :KYANK,#0 '英字系列か? 0260 6B0C JR /EQ,:L20161 0262 A6B101 CP :KYANK,#1 '数字系列か? 0265 6B0B JR /EQ,:L20162 0267 A6B102 CP :KYANK,#2 '記号1系列か? 026A 6B0A JR /EQ,:L20163 026C 8B0C JR :L20164 '記号2系列 :L20161 026E E4B200 LD 0,:KYCA 'R0=英字系列の現在コード 0271 AF RET :L20162 0272 E4B300 LD 0,:KYCN 'R0=数字系列の現在コード 0275 AF RET :L20163 0276 E4B400 LD 0,:KYCK1 'R0=記号1系列の現在コード 0279 AF RET :L20164 027A E4B500 LD 0,:KYCK2 'R0=記号2系列の現在コード 027D AF RET '(CR処理) :L20170 027E E6000D LD 0,#:CH_CR 'R0=0DH(CR) 0281 AF RET 'モード判別付キー表示サブルーチン :L20180 0282 A6B100 CP :KYANK,#0 '英字モードか? 0285 EB07 JR /NE,:L20181 0287 E4B200 LD 0,:KYCA 'R0=現在の英字コード 028A D604CE CALL :LCDRT '右上端液晶表示 028D AF RET :L20181 028E A6B101 CP :KYANK,#1 '数字モードか? 0291 EB07 JR /NE,:L20182 0293 E4B300 LD 0,:KYCN 'R0=現在の数字コード 0296 D604CE CALL :LCDRT '右上端液晶表示 0299 AF RET :L20182 029A A6B102 CP :KYANK,#2 '記号1モードか? 029D EB07 JR /NE,:L20183 029F E4B400 LD 0,:KYCK1 'R0=現在の記号1コード 02A2 D604CE CALL :LCDRT '右上端液晶表示 02A5 AF RET :L20183 02A6 E4B500 LD 0,:KYCK2 'R0=現在の記号2コード 02A9 D604CE CALL :LCDRT '右上端液晶表示 02AC AF RET 'キースイッチ読取サブルーチン :L20190 02AD E8FD2000 LDX 0,:PAIN 'キー状態読取 02B1 1FC000 SRL 0 'KY1B<-SW1(ANK/BS,ESC) 02B4 10B6 RLC :KY1B 02B6 1FC000 SRL 0 'KY2B<-SW2(UP/DOWN) 02B9 10B7 RLC :KY2B 02BB 1FC000 SRL 0 'KY3B<-SW3(ENT/CR) 02BE 10B8 RLC :KY3B 02C0 1FC000 SRL 0 'KY4B<-SW4(SHIFT) 02C3 10B9 RLC :KY4B 02C5 D6051A CALL :T10MS '10msディレイ 02C8 AF RET '---------------------------------------------------------------- 'No.202 CKESC '---------------------------------------------------------------- '名称:ESC入力チェック '機能:端末装置から1文字入力 '入力:端末装置 '出力:ESC入力の有無(C=0:ESCなし、C=1:ESCあり) '---------------------------------------------------------------- :CKESC 02C9 76B001 TM :SMODE,#%01 'オンボードキー/外部端末キー判別 02CC EB12 JR /NZ,:L2022 '外部端末キー(電源投入時にSW1を押していた場合) 02CE 840F41 LDX r0,:U0STAT0 '受信バッファチェック 02D1 F6F002 BTJNZ 7,r0,:L2021 :L2020 02D4 CF RCF 'C=0(ESC入力なし) 02D5 AF RET :L2021 02D6 840F40 LDX r0,:U0RXD '受信 02D9 A6001B CP 0,#:CH_ESC 02DC EBF6 JR /NE,:L2020 02DE DF SCF 'C=1(ESC入力あり) 02DF AF RET 'オンボードキー(デフォルト) :L2022 02E0 E8FD2000 LDX 0,:PAIN 'キー状態読取 02E4 560009 AND 0,#%09 'SW1+SW4(同時押し) 02E7 A60000 CP 0,#%00 02EA 6B02 JR /EQ,:L2023 ' 02EC CF RCF 'C=0(ESC入力なし) 02ED AF RET :L2023 02EE DF SCF 'C=1(ESC入力あり) 02EF AF RET (途中省略) Total Error(s)=0 END ASSEMBLE