はじめまして!RL78/G23初心者のNitarouです。元々は78K0/KD2とPM+でアセンブラで作成したプログラムをRL78で使える前提で取り組みましたがCS+(CC-RL)はかなり手ごわいです。インターバルタイマ割込みでbreak設定しても止まりません。エミュレータはE2-Liteです。下記プログラムを添付しますので、解決策をご教示お願い致します。
;;***************************************;* RAM MEMORY MAP 0FBF00H-0FFEDFH;***************************************;.data .DSEG DATA;RREG0: .DS 4RREG1: .DS 2RREG2: .DS 2ZAD1: .DS 2ZADM1: .DS 2ZAD2: .DS 2ZADM2: .DS 2ZADD: .DS 2GAD1: .DS 2GADM1: .DS 2GAD2: .DS 2GADM2: .DS 2GASADD: .DS 2GASDT: .DS 2GDDSP: .DS 2BBCNVD: .DS 2REGA: .DS 2REGB: .DS 6AVCTZ: .DS 2AVCNTZ: .DS 2AVCTG: .DS 2AVCNTG: .DS 2;MNF: .DS 1DPF: .DS 1DG4D: .DS 1DG3D: .DS 1DG2D: .DS 1DG1D: .DS 1DATP6: .DS 1;;;**************************************;* INITIAL SET;**************************************;.SECTION .sdata, SDATA.L_section_sdata:;.SECTION .text, TEXT;START .VECTOR 0x00000;INTTM00 .VECTOR 0x00020 ;タイマ割り込み;OPT .CSEG OPT_BYTE .DB 0x00 .DB 0xFC ;LVD0 2.67V .DB 0xEC ;高速メインモード2MHz .DB 0x85 ;オンチップデバッグ許可; .CSEG;START: DI SEL RB0 MOV CMC,#0x00 ;低消費発振; MOV OSTS,#0x04 ;発振安定時間1.6~3.2ms MOV CSC,#0xC0 ;高速オンチップオシレータ動作 MOV CKC,#0x00 ;高速オンチップオシレータ選択 MOV HOCODIV,#0x04 ;オンチップオシレータ周波数2MHz MOV PER0,#0x21 ;PER0(F00F0H)ADCEN,TAU0EN"1" MOVW AX,#0x0000 MOVW !TPS0,AX ;TPS0(F01B6H,F01B7H) MOVW AX,#0x0A0F MOVW !TT0,AX ;カウント動作停止 SET1 TMMK00 ;TAU0割込み禁止 CLR1 TMIF00 ;割込み要求フラグクリア SET1 TMPR100 ;INTTM00の割込み優先順位レベル3 SET1 TMPR000 MOVW AX,#0x0000 MOVW !TMR00,AX ;TMR00(F0190H,F0191H) MOVW AX,#0x0005 MOVW !TMR01,AX ;TMR01 MOVW AX,#0x0003 ;タイマカウント開始 MOVW !TS0,AX ;TS0(F01B2H,F01B3H) MOV TIS1,#0x03 MOV TOE0,#0x03 ;ch.01出力許可OST_CK: NOPSTART0: NOPSTART1: CLR1 SELLOSC MOVW TDR00,#1000 ;周期(0.25秒) CLR1 TMIF00 CLR1 TMMK00 MOV PMCA2,#0xC0 ;P26,P27アナログ入力設定;;**********************************************;* PORT SET;**********************************************; MOV PM0,#0xFF ;P0.0-7 入力 MOV PU0,#0x0F ;PU0(F0030H) P0.0-3 PU抵抗付加 MOV PM1,#0x0F ;P1.0-3 入力 ;P1.4-7 出力 MOV PU1,#0x0F ;PU1(F0031H) P1.0-3 PU抵抗付加 MOV PM2,#0xC0 ;P2.6-7 入力 ;P2.0-5 出力 MOV PM3,#0xFF ;P3.0入力 MOV PU3,#0x01 ;PU3(F0033H) P3.0 PU抵抗付加 MOV PM4,#0xFF ;P4.0-1 入力 MOV PU4,#0x03 ;PU4(F0034H) P4.0-1 PU抵抗付加 MOV PM5,#0xFC ;P5.0-1 出力 MOV PM6,#0xFF ;P6.0-3 入力 MOV PM7,#0xF0 ;P7.0-3 出力 ;P7.4-7 入力 MOV PU7,#0xF0 ;PU7(F0037H) P7.4-7 PU抵抗付加 MOV PM12,#0xFF MOV PU12,#0x01 ;PU12(F003CH) MOV PM14,#0xFF MOV PU14,#0x01 ;PU14(F003EH); MOV ADM0,#0x00 MOV ADM1,#0x00 MOV ADM2,#0x00 CLR1 ADMK CLR1 PIF4 CLR1 PMK4 CLR1 EGP0.4 SET1 EGN0.4;;*********************************************;* MAIN PROGRAM;*********************************************; EIMAIN1: NOP NOP NOP NOP NOP BR $MAIN1;;*********************************************;* タイマ割込;*********************************************;INTTM00: SEL RB1 CALL !ZDTI CALL !GDTI CALL !CALGAS CALL !GASDSP NOP RETI;;;*********************************************; Zero Data Average;*********************************************;ZDTI: CALL !AVZCTCL MOVW HL,!ZAD1 MOVW BC,#8 CALL !CLRMEM MOV A,#30ZDTS: SUB A,#1 MOV !AVCTZ,A CALL !ZDTI0 MOVW AX,!ZAD2 XCHW AX,BC MOVW AX,!ZADM2 CALL !SADD16 MOVW !ZADM2,AX MOVW HL,!AVCTZ MOV A,[HL] CMP A,#0 BNZ $ZDTS MOVW AX,!ZADM2 MOV C,#30 CALL !SDIV16 MOVW !ZADD,AX RET;ZDTI0: CALL !AVCTCLZ MOVW HL,!ZAD1 MOVW BC,#6 CALL !CLRMEM MOV A,#30ZDTS0: SUB A,#1 MOV !AVCNTZ,A CALL !ADZERO MOVW AX,!ZAD1 XCHW AX,BC MOVW AX,!ZADM1 CALL !SADD16 MOVW !ZADM1,AX MOVW HL,!AVCNTZ MOV A,[HL] CMP A,#0 BNZ $ZDTS0 MOVW AX,!ZADM1 MOV C,#30 CALL !SDIV16 MOVW !ZAD2,AX RET;GDTI: CALL !AVGCTCL MOVW HL,!GAD1 MOVW BC,#16 CALL !CLRMEM MOV A,#30GDTS: SUB A,#1 MOV !AVCTG,A CALL !GDTI0 MOVW AX,!GAD2 XCHW AX,BC MOVW AX,!GADM2 CALL !SADD16 MOVW !GADM2,AX MOVW HL,!AVCTG MOV A,[HL] CMP A,#0 BNZ $GDTS MOVW AX,!GADM2 MOV C,#30 CALL !SDIV16 MOVW !GASADD,AX RET;GDTI0: CALL !AVCTCLG MOVW HL,!GAD1 MOVW BC,#16 CALL !CLRMEM MOV A,#30GDTS0: SUB A,#1 MOV !AVCNTG,A CALL !ADGAS MOVW AX,!GAD1 XCHW AX,BC MOVW AX,!GADM1 CALL !SADD16 MOVW !GADM1,AX MOVW HL,!AVCNTG MOV A,[HL] CMP A,#0 BNZ $GDTS0 MOVW AX,!GADM1 MOV C,#30 CALL !SDIV16 MOVW !GAD2,AX RET;;*********************************************;* A/D;*********************************************;ADZERO: MOV ADS,#7 SET1 ADIF SET1 ADCE CALL TIMER CLR1 ADIF SET1 ADCSADZ0: BTCLR ADIF,$ADZ1 BR $ADZ0ADZ1: MOVW AX,ADCR CLR1 ADCS CLR1 ADCE MOV C,#*** CALL !SDIV16 MOVW !RREG1,AX MOVW BC,AX MOVW AX,#234 MOVW !RREG2,AX MULHU MOVW !RREG0,AX MOVW AX,BC MOVW !RREG0+2,AX MOVW AX,!RREG0 MOV C,#100 CALL !SDIV16 MOVW !ZAD1,AX RET;ADGAS: MOV ADS,#6 SET1 ADIF SET1 ADCE CALL TIMER CLR1 ADIF SET1 ADCSADG0: BTCLR ADIF,$ADG1 BR $ADG0ADG1: MOVW AX,ADCR CLR1 ADCS CLR1 ADCE MOV C,#*** CALL !SDIV16 MOVW !GAD1,AX RET;TIMER: MOV D,#0xFFJ40: MOV E,#0xFFJ41: DEC E BNZ $J41 DEC D BNZ $J40 RET;;********************************************;* CALC GAS;********************************************;CALGAS: MOV A,P6 AND A,#0x0F MOV !DATP6,ACP15: CMP !DATP6,#15 ;1111 FS=1000 BNZ $CP14 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#60 CALL !SDIV16 MOVW !GDDSP,AX RET;CP14: CMP !DATP6,#14 ;1110 FS=300 BNZ $CP13 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#200 CALL !SDIV16 MOVW !GDDSP,AX RET;
CP13: CMP !DATP6,#13 ;1101 FS=200 BNZ $CP12 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#30 CALL !SDIV16 MOV C,#10 CALL !SDIV16 MOVW !GDDSP,AX RET;CP12: CMP !DATP6,#12 ;1100 FS=150 BNZ $CP11 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#40 CALL !SDIV16 MOV C,#10 CALL !SDIV16 MOVW !GDDSP,AX RET;CP11: CMP !DATP6,#11 ;1011 FS=100 BNZ $CP10 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#60 CALL !SDIV16 MOV C,#10 CALL !SDIV16 MOVW !GDDSP,AX RET;CP10: CMP !DATP6,#10 ;1010 FS=50 BNZ $CP9 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#12 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP9: CMP !DATP6,#9 ;1001 FS=30 BNZ $CP8 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#20 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP8: CMP !DATP6,#8 ;1000 FS=20 BNZ $CP7 CLR1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#30 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP7: CMP !DATP6,#7 ;0111 FS=30.0 BNZ $CP6 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#20 CALL !SDIV16 MOV C,#10 CALL !SDIV16 MOVW !GDDSP,AX RET;CP6: CMP !DATP6,#6 ;0110 FS=25.0 BNZ $CP5 SET1 !DPF.0 CALL !CALC_OX MOVW AX,!RREG0 MOV C,#241 CALL !SDIV16 MOVW !GDDSP,AX RET;CP5: CMP !DATP6,#5 ;0101 FS=20.0 BNZ $CP4 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#30 CALL !SDIV16 MOV C,#10 CALL !SDIV16 MOVW !GDDSP,AX RET;CP4: CMP !DATP6,#4 ;0100 FS=10.0 BNZ $CP3 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#30 CALL !SDIV16 MOV C,#20 CALL !SDIV16 MOVW !GDDSP,AX RET;CP3: CMP !DATP6,#3 ;0011 FS=5.0 BNZ $CP2 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#12 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP2: CMP !DATP6,#2 ;0010 FS=2.0 BNZ $CP1 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#30 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP1: CMP !DATP6,#1 ;0001 FS=1.0 BNZ $CP0 SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#60 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CP0: SET1 !DPF.0 CALL !CALC MOVW AX,!RREG0 MOV C,#60 CALL !SDIV16 MOV C,#100 CALL !SDIV16 MOVW !GDDSP,AX RET;CALC: MOVW AX,!GASADD MOVW DE,AX MOVW HL,!ZADD CALL !ZCP2B BC $MNDP_S CLR1 !MNF.1 BR $CALC_0MNDP_S: SET1 !MNF.1 MOVW AX,!GASADD XCHW AX,BC MOVW AX,!ZADD CALL !SSUB16 MOVW !GASDT,AX BR $CALC_1CALC_0: MOVW AX,!ZADD XCHW AX,BC MOVW AX,!GASADD CALL !SSUB16 MOVW !GASDT,AXCALC_1: MOVW AX,#5 MOVW DE,AX MOVW HL,!GASDT CALL !ZCP2B BC $NORM_DP MOVW AX,#0 MOVW !GASDT,AXNORM_DP: MOVW AX,!GASDT MOVW !RREG1,AX MOVW AX,#128 MOVW !RREG2,AX MOVW BC,AX MOVW AX,!RREG1 MULHU MOVW !RREG0+2,AX MOVW AX,BC MOVW !RREG0,AX RET;CALC_OX: MOVW AX,!GASADD MOVW DE,AX MOVW HL,!ZADD CALL !ZCP2B BC $MNDP_OX_S CLR1 !MNF.1 BR $CALC_OX_0MNDP_OX_S: SET1 !MNF.1 MOVW AX,!GASADD XCHW AX,BC MOVW AX,!ZADD CALL !SSUB16 MOVW !GASDT,AX BR $CALC_OX_1CALC_OX_0: MOVW AX,!ZADD XCHW AX,BC MOVW AX,!GASADD CALL !SSUB16 MOVW !GASDT,AXCALC_OX_1: MOVW AX,!GASDT MOVW !RREG1,AX MOVW AX,#128 MOVW !RREG2,AX MOVW BC,AX MOVW AX,!RREG1 MULHU MOVW !RREG0,AX MOVW AX,BC MOVW !RREG0+2,AX RET;;********************************************; Data Clear;********************************************;AVZCTCL: MOVW HL,!AVCTZ MOVW BC,#1 CALL !CLRMEM RET;AVCTCLZ: MOVW HL,!AVCNTZ MOVW BC,#1 CALL !CLRMEM RET;AVGCTCL: MOVW HL,!AVCTG MOVW BC,#1 CALL !CLRMEM RET;AVCTCLG: MOVW HL,!AVCNTG MOVW BC,#1 CALL !CLRMEM RET;CLRMEM: NOP NOPCLRM: MOV A,#0 MOV [HL],A INCW HL DECW BC MOV A,B OR A,C BNZ $CLRM RET;;********************************************;* GAS DISPLAY;********************************************;GASDSP: NOP MOV A,!DPF BT A.0,$DPDP BR $GASDP0DPDP: SET1 P1.4 BR $GASDP1GASDP0: CLR1 P1.4;GASDP1: MOV A,!MNF BT A.1,$MNDP BR $NMDPMNDP: SET1 P1.5 BR $NMDP0;NMDP: CLR1 P1.5NMDP0: MOVW AX,!GDDSP CMPW AX,#999 BH $THDDP_0 MOVW AX,!GDDSP CMPW AX,#99 BH $HRDDP_0 MOVW AX,!GDDSP CMPW AX,#9 BH $TENDP_0 BR $SGLDP_0THDDP_0: MOVW AX,!GDDSP MOVW !REGA,AX CALL !B_DCONV MOV A,!REGB+0 MOV !DG4D,A MOV A,!REGB+1 MOV !DG3D,A MOV A,!REGB+2 MOV !DG2D,A MOV A,!REGB+3 MOV !DG1D,A BR $LCDDRV_1HRDDP_0: MOVW AX,!GDDSP MOVW !REGA,AX CALL !B_DCONV MOV A,!REGB MOV !DG4D,A MOV A,!REGB+1 MOV !DG3D,A MOV A,!REGB+2 MOV !DG2D,A MOV !DG1D,#0x0F BR $LCDDRV_1TENDP_0: MOVW AX,!GDDSP MOVW !REGA,AX CALL !B_DCONV MOV A,!REGB MOV !DG4D,A MOV A,!REGB+1 MOV !DG3D,A MOV !DG2D,#0x0F MOV !DG1D,#0x0F BR $LCDDRV_1SGLDP_0: MOV A,!DPF BT A.0,$MODZZ BR $MODZLCDDRV_1: BR $LCDDRVMODZ: CLR1 P1.4 MOVW AX,!GDDSP MOVW !REGA,AX CALL !B_DCONV MOV A,!REGB MOV !DG4D,A MOV !DG3D,#0x0F MOV !DG2D,#0x0F MOV !DG1D,#0x0F BR $LCDDRVMODZZ: SET1 P1.4 MOVW AX,!GDDSP MOVW !REGA,AX CALL !B_DCONV MOV A,!REGB MOV !DG4D,A MOV !DG3D,#0x00 MOV !DG2D,#0x0F MOV !DG1D,#0x0F BR $LCDDRV;LCDDRV: MOV A,!DG1D MOV P7,A SET1 P5.1 SET1 P5.0 CLR1 P1.6 SET1 P1.7 NOP CLR1 P1.7 MOV A,!DG2D MOV P7,A CLR1 P5.1 SET1 P5.0 CLR1 P1.6 SET1 P1.7 NOP CLR1 P1.7 MOV A,!DG3D MOV P7,A SET1 P5.1 CLR1 P5.0 CLR1 P1.6 SET1 P1.7 NOP CLR1 P1.7 MOV A,!DG4D MOV P7,A CLR1 P5.1 CLR1 P5.0 CLR1 P1.6 SET1 P1.7 NOP CLR1 P1.7 RET;SADD16: XCH A,X ADD A,C XCH A,X ADDC A,B RET;SSUB16: XCH A,X SUB A,C XCH A,X SUBC A,B RET;ZCP2B: PUSH DE CALL !ZSB2B_1 BC $ZCP2B1 MOV A,D OR A,E BZ $ZCP2B1 MOV B,A XOR A,B INC AZCP2B1: POP DE RET;ZSB2B_1: MOV A,E SUB A,[HL] MOV E,A INCW HL MOV A,D SUBC A,[HL] MOV D,A DECW HL RET;SMULT16: MOV A,#0 MOV !RREG0,A MOV !(RREG0+1),A MOV B,#16JMLT120: CLR1 CY MOV A,!RREG0 ROLC A,1 MOV !RREG0,A MOV A,!(RREG0+1) ROLC A,1 MOV !(RREG0+1),A MOV A,!RREG1 ROLC A,1 MOV !RREG1,A MOV A,!(RREG1+1) ROLC A,1 MOV !(RREG1+1),A BNC $JMLT220 MOV A,!RREG2 ADD A,!RREG0 MOV !RREG0,A MOV A,!(RREG2+1) ADDC A,!(RREG0+1) MOV !(RREG0+1),A MOV A,#0 ADDC A,!RREG1 MOV !RREG1,AJMLT220: DEC B BNZ $JMLT120 RET;SDIV16: MOVW DE,AX MOV X,#0 MOV B,#16JDIV160: MOV A,X ADD X,A MOV A,E ADDC E,A MOV A,D ADDC D,A MOV A,#0 ADDC A,X SUB A,C MOV X,A MOV A,E BT A.0,$JDIV180 BC $JDIV170 OR A,#0x01 MOV E,A BR $JDIV180JDIV170: MOV A,C ADD X,AJDIV180: DEC B BNZ $JDIV160 MOV A,X MOV C,A MOVW AX,DE RET;B_DCONV: MOVW AX,!REGA MOV B,#4 MOV C,#0 MOVW HL,!REGB NOPB_D1: MOVW DE,#10 DIVHU NOP XCHW AX,DE MOV [HL+C],A INC C XCHW AX,DE DEC B BNZ $B_D1 MOV A,X MOV [HL+C],A RET
チョコです。
>ADZ0でbreakして、ADZ1にbreak設定してADZ0から実行してADZ1まで走らない状態で強制停止するとBT ADIF,$ADZ1のところでループしている状態でした。
シュミレータで確認してみました。下に示すのが、ADZ0でブレークした状態です。
ここで、そのままブレーク付きで実行すると、数回~十数回ADZ0でブレーク後にADZ1でブレークしました。当然その場合には、ADIFは1になっています。(その後にクリアする処理がなさそうなので、
また、ADZ0でブレーク後、ADZ0のブレーク・ポイントを解除した場合には、ADZ1でブレークしてADIFは1の状態でした。
E2liteでこのような動作にならなかったとすると、ハードウェアでは、ブレーク中にADIFが正常にセットされない可能性があったのかと考えられます。これは、実際のハードウェア環境がないと確認はできませんし、Renesasの関係部門の人でないと答えられないと思います。
ただし、ADZ0でのブレークをやめれば、この問題は回避することは可能で、ADZ1だけにブレーク・ポイントを設定しておけば、ADIFがセットされたかどうかの確認はできます。
なお、アセンブラ記述のほとんどコメントがないプログラムについては、対応が非常に困難です。
そのことをご理解ください。
以上