:070420003A8D3A89A560C87E :00000001FF :07 0420 00 3A 8D 3A 89 A5 60 C8 7E :nn aaaa tt dd .. .. .. .. .. dd ss (全nn+5個の16進2桁の和の下2桁はゼロ) | | | | | | | +----0x100-(前(nn+4)個16進2桁の和)%256 | | +----------------------------- レコードタイプ 01が終了 | +---------------------------------- アドレス +------------------------------------- データ部の個数
S0030000FC レコードのスタート
S903000DEF レコードの終了--S1
S804000000FB レコードの終了--S2
.1 2 3 4 5 6 7 8 9 a b c d e f1011121314
S2140C040021002C0000000000180000000000000670
S2nnaaaaaadd............................ddss
S2nnaaaaaadd....ddss"+char($0D)+char($0A)
| | | | |
| | | | +--=HEX$(1-SUM(ASC("nnaaaaaadd...dd")),2)
| | | +---------- "dd" =バイトデータの並び
| | +------------=hex$(アドレス,4)
| +----------------=HEX$(length("aaaadd...ddss")/2,2)
+------------------ この2はアドレス3byte=24bit
S1nnaaaadd......ddss"+char($0D)+char($0A)
| | | | |
| | | | +--=HEX$(1-SUM(ASC("nnaaaadd...dd")),2)
| | | +------------ "dd" =バイトデータの並び
| | +--------------=hex$(アドレス,4)
| +----------------=HEX$(length("aaaadd...ddss")/2,2)
+------------------ この2はアドレス3byte=24bit
モトローラSフォーマットの取扱サンプル
http://www.csl.sony.co.jp/person/fnami/asm.htm
|
帰り値 汎用レジスタ 専用命令有 CBW CWDE CWD CDQ DAA DAS | ||||
| AH | AL | |||
|
汎用レジスタ ループカウンタ | ||||
| CH | CL | |||
|
汎用レジスタ CWD CDQ IN/OUT系のポート番号指定 | ||||
| DH | DL | |||
|
汎用レジスタ C ポインタ | ||||
| BH | BL | |||
|
ベースポインタ C のスタックフレーム(ローカル変数) | ||||
| 汎用レジスタ | ||||
| 汎用レジスタ | ||||
|
スタックポインタ | ||||
フラグ0 0 0 0 0 0 0 0 0 0 0 0 0 0 VM RF 0 NT IO-PL O D I T S Z 0 A 0 P 1 C | ||||
| フロー制御 | |||
| Xoff | $13 | ^S | 通信停止 |
| Xon | $11 | ^Q | 通信再開 |
| 送信[STX--文字列--ETX]に対して[ACK/NAK] | |||
| STX | $02 | ^B | データブロックの開始 |
| ETX | $03 | ^C | データブロックの終了 |
| ACK | $06 | ^F | 受信データの正常応答 |
| NAK | $15 | ^F | 受信データに異常がある |
| BS | $08 | ^H | BackSpace 左1文字削除 |
文字コードについて
| ASCII | http://www.kurume-it.ac.jp/home/general/sibhome/moji/ascii7bit.html |
| http://www.kurume-it.ac.jp/home/general/sibhome/moji/moji4.html | |
| 漢字 | http://wakusei.cplaza.ne.jp/twn/wwwkanji.htm |
| http://www.hirayama.com/hideki/knj.txt | |
| http://www.hosibune.net/~mak/technical/kanji.shtml | |
| http://www.opengroup.or.jp/jvc/cde/sjis-euc.html |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
| 0 | NUL | DLE | SPC | 0 | @ | P | ` | p | SPC | ー | タ | ミ | ||||
| 1 | SOH | DC1 | ! | 1 | A | Q | a | q | 。 | ア | チ | ム | ||||
| 2 | STX | DC2 | " | 2 | B | R | b | r | 「 | イ | ツ | メ | ||||
| 3 | ETX | DC3 | # | 3 | C | S | c | s | 」 | ウ | テ | モ | ||||
| 4 | EOT | DC4 | $ | 4 | D | T | d | t | 、 | エ | ト | ヤ | ||||
| 5 | ENQ | NAK | % | 5 | E | U | e | u | ・ | オ | ナ | ユ | ||||
| 6 | ACK | SYN | & | 6 | F | V | f | v | ヲ | カ | ニ | ヨ | ||||
| 7 | BEL | ETB | ' | 7 | G | W | g | w | ァ | キ | ヌ | ラ | ||||
| 8 | BS | CAN | ( | 8 | H | X | h | x | ィ | ク | ネ | リ | ||||
| 9 | HT | EM | ) | 9 | I | Y | i | y | ゥ | ケ | ノ | ル | ||||
| A | LF | SUB | * | : | J | Z | j | z | ェ | コ | ハ | レ | ||||
| B | VT | ESC | + | ; | K | [ | k | { | ォ | サ | ヒ | ロ | ||||
| C | FF | FS | , | < | L | \ | l | | | ャ | シ | フ | ワ | ||||
| D | CR | GS | - | = | M | ] | m | } | ュ | ス | ヘ | ン | ||||
| E | SO | RS | . | > | N | ^ | n | ~ | ョ | セ | ホ | ゛ | ||||
| F | SI | US | / | ? | O | _ | o | DEL | ッ | ソ | マ | ゜ | DEL | |||
| SJIS第1バイト | $81〜$9F | $E0〜$FC | ||||||||||||||
| SJIS第2バイト | $40〜$7E | $80〜$FC | ||||||||||||||
セントロニクス インターフェース等
| アンフェノール | 9801 | DOS/V | ||
| 1 | 1 | 1 | O | !STROBE H から L で、プリンタに送信 |
| 2 | 2 | 2 | O | D0 |
| 3 | 3 | 3 | O | D1 |
| 4 | 4 | 4 | O | D2 |
| 5 | 5 | 5 | O | D3 |
| 6 | 6 | 6 | O | D4 |
| 7 | 7 | 7 | O | D5 |
| 8 | 8 | 8 | O | D6 |
| 9 | 9 | 9 | O | D7 |
| 10 | 10 | I | !ACK H → L で、 プリンタ受信準備OK。 | |
| 11 | 11 | 11 | I | BUSY H=ビジー L =受信可 |
| 12 | 12 | I | PE 用紙切れ入力 | |
| 13 | 13 | I | SLCT プリンタセレクト入力 | |
| 14 | 14 | O | !FEED 自動ラインフィード出力 | |
| 32 | 15 | I | !ERROR L =プリンタに何かのエラー | |
| 33 | 16 | O | !INIT イニシャライズ出力 | |
| 36 | 17 | O | !SLCT-IN プリンタセレクト出力 | |
| 10 | NC | |||
| 11 | NC | |||
| 12 | 18-25 | GND |
$378 !2.b0 1 -> 0.b0 2 -> 0.b1 3 -> 0.b2 4 -> 0.b3 5 -> 0.b4 6 -> 0.b5 7 -> 0.b6 8 -> 0.b7 9 -> 1.b6 10 <- !1.b7 11 <- 1.b5 12 <- 1.b4 13 <- !2.b1 14 -> 1.b3 15 <- 2.b2 16 -> !2.b3 17 -> BUSY ________|~~~~|__________________ !ACK ~~~~~~~~~|____|~~~~~~~~~~~~~~~~~ !STOROBE ~~~~~~|____|~~~~~~~~~~~~~~~~~~~~~~~ DATAx8 -<============>--------------
http://www.sun-inet.or.jp/~nszak/pc98-dt.html
http://member.nifty.ne.jp/nahitafu/mame/mame5/printer.html
/////////////////////////////////////////
int hex2(unsigned char *s);//sで指定した2byteの16進数を数値で返す
/////////////////////////////////////////////////////////
// adrからのデータとして dtをsizだけ S1書式で文字列に変換
// 変換文字列数を outsizで返す
static char S1buf[512];
char * S1str(unsigned long adr,int siz,char *dt,int *outsiz)
{
int bsiz = siz + 3 ;
int n = sprintf(S1buf,"S1%02X%04lX",bsiz,adr);
int sum =bsiz;
sum+=adr;
sum+=adr>>8L;
{int i;
for(i=0;i<siz;i++)
{
n+=sprintf(S1buf+n,"%02X",(*dt)&0xff);
sum+=*dt++;
};
};
n+=sprintf(S1buf+n,"%02X",(~sum)&0xff);
if(outsiz)*outsiz=n;
return S1buf;
}
/////////////////////////////////////////////////////////
// adrからのデータとして dtをsizだけ S2書式で文字列に変換
// 変換文字列数を outsizで返す
char * S2str(unsigned long adr,int siz,char *dt,int *outsiz)
{
int bsiz=siz+4;
int n=sprintf(S1buf,"S2%02X%06lX",bsiz,adr);
int sum=bsiz;
sum+=adr;
sum+=adr>>8L;
sum+=adr>>16L;
{int i;
for(i=0;i<siz;i++)
{
n+=sprintf(S1buf+n,"%02X",(*dt)&0xff);
sum+=*dt++;
};
};
n+=sprintf(S1buf+n,"%02X",(~sum)&0xff);
if(outsiz)*outsiz=n;
return S1buf;
}
////////////////////////////////////////////////
// motS 書式で解釈し、1バイト単位でfuncを呼出す
unsigned int M2Flg=1;
int Mot2Cvt(char *s,void(*func)(unsigned long adr,unsigned char dt))
{
unsigned char sum=0;
int siz;
/* まず形式チェック M2Flgによってサムチェックエラー時の処理を */
if(s[0]!='S') return 0;
if( (s[1]!='1')
&&(s[1]!='2')) return 2;
{
siz=hex2(s+2);if(siz<0) return -2;
{int i;char *p=s+2;
for(i=0;i<siz;i++)
{int d=hex2(p);p+=2;if(d<0) return -2;
sum+=d;
};
if( M2Flg&1)
if((unsigned char)~sum!=(unsigned char) hex2(p) ) return -3;
}
};
if(s[1]!='2')
{ unsigned long adr=
+((unsigned long)hex2(s+4)<<8L)+((unsigned long)hex2(s+6));
int siz=hex2(s+2)-3;
{int i;char *p=s+8;
for(i=0;i<siz;i++){ func(adr++,hex2(p));p+=2;};
}
return 1;
};
/* 実際の変換 */
{ unsigned long adr=
((unsigned long)hex2(s+4)<<16L)
+((unsigned long)hex2(s+6)<<8L)+((unsigned long)hex2(s+8));
int siz=hex2(s+2)-4;
{int i;char *p=s+10;
for(i=0;i<siz;i++){ func(adr++,hex2(p));p+=2;};
}
}
return 1;
}
| IRDA関係 | http://www.mec.panasonic.co.jp/sc/division/IrDA/japanese/line-up/line-up1.html |
| OKI | http://www.macnica.co.jp/comp2/oki/omsm9405.html |
| SHARP | http://www.sharp.co.jp/sc/gaiyou/news/970224.htm |
| http://ns3.sharp.co.jp/sc/gaiyou/news/971007-2.htm | |
| http://ns3.sharp.co.jp/sc/gaiyou/news/990930-1.html | |
| ROHM | http://www.rohm.co.jp/news/rpm851-j.html |
| http://www.rohm.co.jp/news/rpm-j.html | |
| NEC | http://www.ic.nec.co.jp/opto/japanese/productlist_j.html |
| ISDN公衆電話 | |
| 本 | http://www.catnet.ne.jp/triceps/tr/tr021.htm |
| ソフトバンク | 赤外線通信プログラミングガイド (ISBN-4-89052-824-5 \3,500 FD付) |