どうも有り難う。お陰様でエラーを無くしました。 付加えて以下の変更が必要です。 1) .heading 'Test for H8/3048 98.01.16' -> .heading "Test for H8/3048 98.01.16" 2) 50行目あたりに "#' a'", "#' z'" ->#"a", #"z" 以上 -----Original Message----- From: Makoto Yamashita [mailto:truth-mt@xxxxxxxxxxxxxx] Sent: Tuesday, November 12, 2002 10:35 PM To: h8@xxxxxxx Subject: [H8-ML(2350)] Re: ハイパーターミナルの障害 On Thursday, Nov 7, 2002, at 15:56 Asia/Tokyo, Pan, Guanguru wrote: > ところが、取説にサンプルプログラムのリストが載っている通信機能 > を試すソフトTEST.MARを手入力し、コンパイラしたら、どうしてもエラーが > でます。 で、下にのせたハンさんのプログラムですが、とりあえずエラーになりそうなのは、 1) プログラム本体のおかれる場所が 0x00100 からになっていない -> "reset:" ラベルの前に ".section reset0,code,locate=h'00100" とかをいれる 2) 33行目あたりからいくつか "#r0l" がある -> "r0l" ですよね。 3) 50行目あたりに "#' a'", "#' z'" がある -> "#'a'", "#'z'" だったのでは? ぱっと僕に分かったのはこれくらいですが。ほかにも形式的でない問題があるかもしれません。 ところで、このプログラムは最初に試すにしては複雑すぎませんか? 一番最後のところに別のサンプルプログラム MYTERM.TXT をのせておきました。こっちは起動後 SCI1(書き込みに使う方) で'S'送信->1文字受信するまで待ち->'R'送信するだけのシンプルなものです。使っているテクニックとかも少ないので、どうでしょう? **** TEST.MAR by Pan **** .heading 'Test for H8/3048 98.01.16' .print src,nocref,nosct,list ;---------------------------------------------- ; Simple In/Out for H8/3048 ; H8/3048 SingleChip Advanced Mode ;---------------------------------------------- ; .CPU 300HA:20 ;H8/300H Advanced Mode,20 bit addr ; ; ;--------------------------------------------- ; rest vector table ;--------------------------------------------- .section rom,data,locate=h'0 ; .data.l reset ; ;--------------------------------------------- reset: mov.l #stack,sp bsr inisci loop: bsr inch bsr outch bra loop ; ;-------------------------------------------- ; inisci InitSCI ;-------------------------------------------- inisci: mov.b #0,r0l mov.b #r0l,@sci0scr ;clear all flags mov.b #0,r0l mov.b #r0l,@sci0smr ;Ascnc, 8bit, Noparity, (Even), stop1, 1/1 mov.b #51,r0l mov.b #r0l,@sci0brr ;9600 baud (CPU=16MHz) mov.w #280,r0 ;wait 1 bit time (1/9600 sec) inisc1: dec.w #1,r0 bne inisc1 mov.b #h'30,r0l mov.b #r0l,@sci0scr ;scr=0011 0000 (TE=1,RE=1) mov.b @sci0ssr,r0l ;Dummy Read mov.b #h'80,r0l mov.b #r0l,@sci0ssr ;Clear Error Flag (TDRE=1) rts ;------------------------------------------- ; inch to r0l ; if err then carry=1 ;------------------------------------------- inch: bsr inchxx ;to upper cmp.b #' a',r0l blo inch2 cmp.b #' z',r0l bhi inch2 and.b #h'df,r0l ;'a'(0x61)√O√e'A'(0x41) inch2: rts inchxx: mov.b @sci0ssr,r0l and.b #h'78,r0l beq inchxx ;RDRF=ORER=FER=PER=0 btst.b #6,@sci0ssr:8 beq incher mov.b @sci0rdr,r0l bclr.b #6,@sci0ssr andc.b #h'fe,ccr ;clear carry rts ; incher: mov.b #h'80,r0l mov.b r0l,@sci0ssr orc.b #1,ccr rts ;------------------------------------------ ; outch from r0l ;------------------------------------------ outch: btst.b #7,@sci0ssr beq outch mov.b r0l,@sci0tdr bclr.b #7,@sci0ssr rts ; .section stk,stack,locate=h'ff400 stack: .equ $ ; ramend: .equ h'fff0f ; ;------------------------------------------ ; internal I/O defs h'fff1c - h'ffff ;--sci defs .section io,data,locate=h'fffb0 sci0smr .res.b 1 ; h'fffb0 ;serial mode register (h'fffb0) sci0brr .res.b 1 ; h'fffb1 ;serial bit rate register sci0scr .res.b 1 ; h'fffb2 ;serial control register sci0tdr .res.b 1 ; h'fffb3 ;serial TX data sci0ssr .res.b 1 ; h'fffb4 ;serial status register sci0rdr .res.b 1 ; h'fffb5 ;serial RX data ; .end **** TEST.MAR ends **** **** MYTERM.TXT **** .CPU 300HA ; SCI ch1 Initialize Subroutine SMR1 .EQU H'FFFFB8 BRR1 .EQU H'FFFFB9 SCR1 .EQU H'FFFFBA TDR1 .EQU H'FFFFBB SSR1 .EQU H'FFFFBC RDR1 .EQU H'FFFFBD .SECTION RESET0, DATA, LOCATE=H'00000 .DATA.L INIT .ORG H'000E4 .DATA.L IN_CHR .SECTION ROM,CODE,LOCATE=H'00100 INIT: SCI_INIT: MOV.B #0,R0L MOV.B R0L,@SCR1 ;TE=0, RE=0, CKE1=0, CKE0=0 MOV.B R0L,@SMR1 ;SMR= 0000 0000 (n=0) MOV.B #51,R0L MOV.B R0L,@BRR1 ;BRR=51 (N=51) MOV.W #280,R0 SCI_INIT_WAIT: DEC.W #1,R0 BNE SCI_INIT_WAIT MOV.B #H'70,R0L MOV.B R0L,@SCR1 ;SCR=0111 0000 (RIE=1,TE=1,RE=1) MOV.B @SSR1,R0L ;Dummy Read MOV.B #H'80,R0L MOV.B R0L,@SSR1 ;Clear Error Flag (TDRE=1) MOV.L #H'FFFF00,ER7 ;set SP BCLR #7,@FLAG ;clear flag ANDC #B'01111111,CCR ;enable interrupt MOV.B #H'53,R0L JSR @OUT_DATA WAITLOOP: BTST #7,@FLAG ;check Rx data BEQ WAITLOOP MOV.B #H'52,R0L JSR @OUT_DATA ENDLOOP: JMP @ENDLOOP ; 1 Data Transmit Subroutine OUT_DATA: BTST.B #7,@SSR1 ; TEST TDRE BEQ OUT_DATA ; WAIT IF TDRE=0 MOV.B R0L,@TDR1 ; WRITE DATA TO TRD BCLR.B #7,@SSR1 ; CLEAR TDRE RTS IN_CHR: PUSH.W R0 BCLR #6,@SSR1 ;stop interrupt MOV.B @RDR1,R0L MOV.B R0L,@R_DATA BSET #7,@FLAG ;set flag POP.W R0 RTE .SECTION WORK,DATA,LOCATE=H'FFFF00 R_DATA: .RES.B 1 FLAG: .RES.B 1 .END