Jul 24, 2000 onl50t: Solaris 2.6 cc ドライバのデバッグ. cc ドライバのデバッグ#04(その5) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (http://www-online.kek.jp/~inoue/CAMAC/ onl50t-sol2.6/Desktop/debug-list-step05.txt) 高エネルギー加速器研究機構 素粒子原子核研究所 物理、オンライングループ 井上 栄二 (1). 現状確認 (A). 株式会社ロジックハウスの白田様より SPARC CPU-50T を借用した。 (B). FORCE,CPU-50(UltraSPARC-IIi 300MHz)、に Solaris2.6 のシステムを インストールした。 (C). /etc の下の各設定、および /export/home の作成をやった。 (D). "Solaris2.6 Hardware: 5/98 SMCC Desktop 日本語版 SPARC版"では ディスクレス・クライアントを設定することはできないことを確認した。 (E). CPU-50T に Solaris2.6用の VMEドライバ、FRCvme-2.3.1 をインストール した。 (F). onl50t に ccドライバをインストールした。 (G). サンプル・プログラムを実行した。 (1). cam1、シングル・アクション 24ビット camac read/write の実行 NG. システムはパニックを起こしてリブートしてしまう。 (2). cam3、camac LAM割り込み処理の実行 NG. システムはパニックを起こしてリブートしてしまう。 (3). cam2、ブロック転送 16ビット read/write の実行 ok. 正常に実行できた。 (4). cam2、ブロック転送 24ビット read/write の実行 ok. 正常に実行できた。 (H). クラッシュ時の savecoreファイルを入手してデバッグを始めた。 (I). cam1プログラムのデバッグ、icc_ioctlルーチンを修正した。 ok. cam1プログラムは正常に実行できた。 (J). cam3プログラムのデバッグを始めた。 camac_s()ルーチンの中で "cc->k->dhr = *dat;" を実行したところでエラーになっている。 message構造体をcc_device構造体の中に入れてみたが改善されない。 (K). cam3プログラムは正常に動作できるようになった。 (L). cam3プログラムのデバッグ時に付加したゴミをはずして最終的な動作確認 をやった。 ok. (M). onl50t 上でデバッグしたcamacドライバをfrc7v-cl2 上で動作確認した。 ok. (N). onl50t 上でデバッグしたcamacドライバを onl7v2、スタンドアロン Solaris2.6 上で動作確認した。 ok. (O). onl50t 上でデバッグしたcamacドライバを frc8vt、ディスクレス・サーバ Solaris2.6 上で動作確認した。 ok. (P). onl50t 上でデバッグしたcamacドライバを onl8v1、スタンドアロン Solaris2.6 上で動作確認した。 ok. (Q). onl50t 上でデバッグしたcamacドライバを onl5v4、スタンドアロン Solaris2.6 上で動作確認した。 ok. (R). スタンドアロン Solaris2.6、onl50t 上で、シングルアクションの実行 速度を測定時に、camac_s()コールを連続実行すると不正割り込みが かかってしまった。 (S). camac_s()コールを連続実行しても不正割り込みはかからないように なった。 ok. -------------------- リスト処理 (A). 公開版のcamacドライバ、"FORCE-50T-sol2.6" を使ってリスト処理の テストを始める。 (B). KEKリスト処理で camacシングルアクション read/write、LAM割り込み 処理、DMA camacブロック転送の現状確認をした。 (C). Kineticリスト処理で camacシングルアクション read の現状確認をした。 (D). KEKリスト処理、Kineticリスト処理両方をとおしてソースプログラム上で 明らかに問題と思われる部分を修正した。 (E). KEKリスト処理でシングルアクション read/write が正常に実行できて いることを確認した。 (2). ここでやるべきこと KEKリスト処理でDMA camacブロック転送が途中で止まっていないかどうか 調べる。 (3). 現状確認 KEKリスト処理でシングルアクション read/write の動作確認で解ったように KEKリスト処理の完了時に iosb.status が 0xfffffff6 = -10 で返されるのは 正常なリスト処理終了であった。 先のDMA camacブロック転送の動作確認で 見たように、DMA camacブロック転送の終了時にも iosb.status が 0xfffffff6 = -10 で返されているが、リスト処理の途中で止まっていないよう であれば、正常な動作と見て良い。 その事を見極めるために、トレースの ための文を付加して再度動作確認する。 (3-1). KEKリスト処理で DMA camacブロック転送を実行 camtest5c2 をコンパイル&実行(DMA camacブロック転送 read) onl50t[151]% cat camtest4dma.asm ; File name : camtest4dma.asm ; Creation date : July 1992 ; Author : Y.Yasu, Online group, Physics department, KEK SW equ 3 ; CAMAC SWITCH REGISTER MEM equ 4 ; CAMAC BUFFER MEMORY MOUDLE LEN equ 10 ; 10 words ; SETCRATE #0 GENZ GENC SETI REMI NDT (9,MEM,0) MOVE #LEN,T MOVE #0,A LOOP WRITE A,(16,MEM,0) ADD #1,A SUB #1,T BGT #0,LOOP ; MOVE #1,A QS.l (0,SW,1),#1 QS.l (0,SW,1),A AS.l (0,SW,1),#1 AS.l (0,SW,0),A IGQ.l (0,SW,1),#1 IGQ.l (0,SW,1),A ; MOVE #LEN,A NDT (9,MEM,0) QS (0,MEM,0),#LEN NDT (9,MEM,0) QS (0,MEM,0),A NDT (9,MEM,0) AS (0,MEM,0),#LEN NDT (9,MEM,0) AS (0,MEM,0),A NDT (9,MEM,0) IGQ (0,MEM,0),#LEN NDT (9,MEM,0) IGQ (0,MEM,0),A ; ; STOP end onl50t[152]% rm camtest4dma.obj onl50t[154]% make camtest4dma.obj ../camasm/camasm camtest4dma.asm CAMASM macro assembler V0.1 --- KEK online group --- Modified by Y.T Oct-1991 onl50t[155]% cat camtest4dma.obj 004C 020B 0000 010C 010D 010F 010E 0209 0809 032B 000A 0000 0329 0000 0000 0207 0810 0345 0001 0000 034A 0001 0000 0458 000F 0000 0000 0329 0001 0000 0314 0620 0001 0216 0620 0318 0620 0001 021A 0600 031C 0620 0001 021E 0620 0329 000A 0000 0209 0809 0313 0800 000A 0209 0809 0215 0800 0209 0809 0317 0800 000A 0209 0809 0219 0800 0209 0809 031B 0800 000A 0209 0809 021D 0800 0100 0000 onl50t[156]% onl50t[161]% cat camtest5c2.c /* File name : camtest5c2.c * Creation date : July 1992 * Author : Y.Yasu, Online group, Physics department, KEK * Modified : August 1994, Y.Yasu * For HP-RT * Modified : June 2000, E.Inoue */ /* System headers */ #include #include /* Local headers */ #include "camlib.h" /* Macros */ #define MAXLENBUF 10000 #define MAXLENLIST 1000 #ifdef HP_RT extern char *sys_errlist[]; #endif /* Functions */ error_exit(status) int status; { #ifdef HP_RT perror(sys_errlist[status]); #else perror((const char *)strerror(status)); #endif exit(status); } /* Main */ main(argc, argv) int argc; char *argv[]; { int status, Error, i; int Lenlis, action; unsigned short List[MAXLENLIST], Buffer[MAXLENBUF], *PtrBuffer; struct cc_iosb Iosb; char Filename[30]; /* strcpy(Filename, "camtest4.obj"); */ /* strcpy(Filename, "camtest4single.obj"); */ strcpy(Filename, "camtest4dma.obj"); if (argc > 1) action = atoi(argv[1]); else action = 0xf; Iosb.s_reg = action; if (status = CAM_Open()) error_exit(status); if (status = CamReaLIST(Filename, List, MAXLENLIST, &Lenlis, &Error)) error_exit(status); printf("CamReaLIST : OK\n"); printf("lenlist = %d\n", Lenlis); printf("list = %x %x %x %x %x\n", List[0], List[1], List[2], List[3]); if (status = CamLisExeWAIt(List, Lenlis, Buffer, MAXLENBUF, &Iosb)) error_exit(status); printf("CamLisExeWAIt : OK\n"); printf("contents of iosb :\n"); printf("iosb.status = %x iosb.ret_length = %x iosb.s_reg = %x ", Iosb.status, Iosb.ret_length, Iosb.s_reg); printf(" iosb.devinfo = %x\n", Iosb.devinfo); printf("contents of buffer :\n"); for( i = 0; i < 12 ;i++) printf("%6x %6x %6x %6x %6x %6x %6x %6x %6x %6x\n", Buffer[10*i+0], Buffer[10*i+1], Buffer[10*i+2], Buffer[10*i+3], Buffer[10*i+4], Buffer[10*i+5], Buffer[10*i+6], Buffer[10*i+7], Buffer[10*i+8], Buffer[10*i+9]); if (status = CAM_Close()) error_exit(status); } onl50t[162]% onl50t[163]% rm camtest5c2 onl50t[164]% make camtest5c2 cc -o camtest5c2 camtest5c2.c -I.. -L.. -lcamac onl50t[165]% onl50t[166]% camtest5c2 CamReaLIST : OK lenlist = 76 list = 20b 0 10c 10d ef7a6080 CamLisExeWAIt : OK contents of iosb : iosb.status = fffffff6 iosb.ret_length = 48 iosb.s_reg = f iosb.devinfo = 800080 contents of buffer : ff55 5555 ff55 5555 ff55 5555 ff00 0 ff55 5555 ff55 5555 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 onl50t[167]% NOTICE: cc_write: CC_CMD_LOADDOLIST: enter CC_CMD_LOADDOLIST NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xb NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xc NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xd NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xf NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x2b NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x7 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x45 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x4a NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x58 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x14 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x16 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x18 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1a NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1c NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1e NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x29 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x13 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x15 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x17 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x19 NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1b NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x9 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x1d NOTICE: CC_intr: cc->interrupt = 0xe NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, code = 0x0 NOTICE: cc_write: CC_CMD_LOADDOLIST: in while, cc->status = 0xfffffff6 NOTICE: cc_write: CC_CMD_LOADDOLIST: out while, cc->status = 0xfffffff6 NOTICE: cc_write: CC_CMD_LOADDOLIST: out while #2, cc->status = 0xfffffff6 実行結果を確認すると次のようになる。 (1). コード 0xb = cc_setcrate (2). コード 0xc = cc_genz (3). コード 0xd = cc_genc (4). コード 0xf = cc_seti (5). コード 0xe = cc_remi (6). コード 0x9 = cc_ndt (7). コード 0x2b = cc_move32_t (8). コード 0x29 = cc_move32_a (9). コード 0x7 = cc_write16_a (10). コード 0x45 = cc_add32_a (11). コード 0x4a = cc_sub32_t (12). コード 0x58 = cc_bgt (13). コード 0x7 = cc_write16_a (14). コード 0x45 = cc_add32_a (15). コード 0x4a = cc_sub32_t (16). コード 0x58 = cc_bgt (17). コード 0x7 = cc_write16_a (18). コード 0x45 = cc_add32_a (19). コード 0x4a = cc_sub32_t (20). コード 0x58 = cc_bgt (21). コード 0x7 = cc_write16_a (22). コード 0x45 = cc_add32_a (23). コード 0x4a = cc_sub32_t (24). コード 0x58 = cc_bgt (25). コード 0x7 = cc_write16_a (26). コード 0x45 = cc_add32_a (27). コード 0x4a = cc_sub32_t (28). コード 0x58 = cc_bgt (29). コード 0x7 = cc_write16_a (30). コード 0x45 = cc_add32_a (31). コード 0x4a = cc_sub32_t (32). コード 0x58 = cc_bgt (33). コード 0x7 = cc_write16_a (34). コード 0x45 = cc_add32_a (35). コード 0x4a = cc_sub32_t (36). コード 0x58 = cc_bgt (37). コード 0x7 = cc_write16_a (38). コード 0x45 = cc_add32_a (39). コード 0x4a = cc_sub32_t (40). コード 0x58 = cc_bgt (41). コード 0x7 = cc_write16_a (42). コード 0x45 = cc_add32_a (43). コード 0x4a = cc_sub32_t (44). コード 0x58 = cc_bgt (45). コード 0x7 = cc_write16_a (46). コード 0x45 = cc_add32_a (47). コード 0x4a = cc_sub32_t (48). コード 0x58 = cc_bgt (49). コード 0x29 = cc_move32_a (50). コード 0x14 = cc_qs24 (51). コード 0x16 = cc_qs24_a (52). コード 0x18 = cc_as24 (53). コード 0x1a = cc_as24_a (54). コード 0x1c = cc_igq24 (55). コード 0x1e = cc_igq24_a (56). コード 0x29 = cc_move32_a (57). コード 0x9 = cc_ndt (58). コード 0x13 = cc_qs16 (59). コード 0x9 = cc_ndt (60). コード 0x15 = cc_qs16_a (61). コード 0x9 = cc_ndt (62). コード 0x17 = cc_as16 (63). コード 0x9 = cc_ndt (64). コード 0x19 = cc_as16_a (65). コード 0x9 = cc_ndt (66). コード 0x1b = cc_igq16 (67). コード 0x9 = cc_ndt (68). コード 0x1d = cc_igq16_a (69). コード 0x0 = cc_stop この場合もリスト処理は途中で止まったわけではなくて、最後まで実行されて いる。 そして、cc_stop()ルーチンが実行された時に "CC_STA_LIST_STOP" の ステータス・コードを返している。 ok. 正常な実行と見て良い。 ---xxxx ここまでやった(継続中) --- (6). 項目タイトル (6-1). サブ項目タイトル (6-1-1). サブサブ項目タイトル