Version User Scope of changes
Jun 10 2007, 7:54 PM EDT (current) Anonymous 1 word added, 1 word deleted
Oct 7 2006, 9:46 PM EDT Anonymous 2 words added

Changes

Key:  Additions   Deletions
ROBOBASICにて作成したプログラムは .objファイルにコンパイルされる。
そのコードは、I2C接続された外付けEEPROM(64KB)の0x0010番地から書き込まれる。
CPUはそのスクリプトを1行ごとに解析し、実行している。

そのコンパイルされたオブジェクトコードの解析結果を以下に示す。

動作説明


オブジェクトコード


備考


可変命令語の行終了 0x00



イミディエイト値 = 0 0x10
イミディエイト値 = 1 0x11
イミディエイト値 = 2~255 0x12, 1バイトデータ
イミディエイト値 = 256~ (2B データ) 0x13, データ下位バイト, データ上位バイト



1バイト変数アドレス指定 0x15, 0x40+n ※なぜか0x40足しているので256バイト分の変数を定義できない(バグか?)
2バイト変数アドレス指定 0x16, 0x40+n



変数のビット指定 0x1B, 0x40+n, ビット位置 b7 = 0x80 ~ b0 = 0x01



0x21
0x22
0x23
0x24
0x26
AND 0x27
OR 0x28



XOR 0x2A



<< 0x2C
>> 0x2D



比較< 0x30
比較> 0x31
比較<= 0x32
比較>= 0x33
比較<> 0x34
比較= 0x35



GYROSET 0xA0, サーボ開始No, 個数, d1,~dn dx は適用ジャイロNo(1~4)
GYRODIR 0xA1, サーボ開始No, 個数, d1,~dn dx は0 or 1
GYROSENSE 0xA2, サーボ開始No, 個数, d1,~dn dxは感度値



MOVE 0xB0, サーボ開始No, 個数, d1,~dn dx は10~190で指定
POS 0xB1, サーボ開始No, 個数, d1,~dn
MOVEPOS ラベルアドレス 0xB2、アドレス下位バイト、アドレス上位バイト
ZERO 0xB3, サーボ開始No, 個数, d1,~dn dx は零点で中心は100
DIR 0xB4, サーボ開始No, 個数, ビット指定 ビット指定は b7=#7の方向 ~ b0 = #0
INIT 0xB5, サーボ開始No, 個数, d1,~dn
HISPEED SETOFF 0xB6, 0x00
HISPEED SETON 0xB6, 0x01
AIMOTOR SETOFF 0xB6, 0x02
AIMOTOR SETON 0xB6, 0x03
AIMOTOR INIT 0xB6, 0x04
PTP ALLOFF 0xB6, 0x05
PTP ALLON 0xB6, 0x06
AIMOTOR n 0xB7, イミディエイト値
AIMOTOROFF n 0xB8, イミディエイト値
GETMOTORSET 0xB9, サーボ開始No, 個数, d1,~dn dxは0または1
MUSIC 音符データ 0xBA, 次命令アドレスLo, 次命令アドレスHi, 音の長さ, 音階,[音の長さ, 音階…], 0x00 音階 C=36,#C=37,D=38,#D=39,
E=40,F=41,#F=42,G=43,#G=44,
A=45,#A=46,B=47,…
? 0xBB SRAM(0x050A) b7=1
? 0xBC SRAM(0x050A) b7=0
? 0xBD SRAM(0x050A) b5=1
? 0xBE SRAM(0x050A) b7=1, b6=1
TEMPO n 0xBF, イミディエイト値



IF 0xC0, 非一致時Jumpアドレス(Lo,Hi),変数,比較子,データ,[OR/AND, 変数、比較子,データ],0x00,処理コード…
FOR i = 0 0xC1, 変数iアドレス, 初期イミディエイト値
NEXT i 0xC2, 変数iアドレス, TOのあるアドレス
TO n 0xC3, 変数アドレス, 終了イミディエイト値, 終了アドレス
GOTO アドレス 0xC4, アドレスLo, アドレスHi
END 0xC4, ←ココのアドレスLo、Hi END命令ををループする
GOSUB アドレス 0xC5, アドレスLo, Hi
RETURN 0xC6
ON n GOTO k1,k2 …kn 0xC7, 変数nアドレス, 個数, 第一アドレス, 第2アドレス, …第nアドレス



BREAK 0xCB
POKE 内部SPAMアドレス、データ 0xCC, アドレスイミディエイト値, データイミディエイト値
ROMPOKE 外部EEPROMアドレス,データ 0xCD, アドレスイミディエイト値, データイミディエイト値
SOUND 音程、長さ,[…] (2000系) 0xCE, 音程イミディエイト値,長さイミディエイト値、[…], 0x00
BEEP (2000系) 0xCF, 0x14, 0x02, 0x00
PLAY (2000系) 0xCF, 0x4F, 0x38, 0x4F, 0x38, 0x00 (未確認)



代入文 A =直接値または文 0xD0, 変数Aアドレス, イミディエイト値又は読み取りコマンド,[…],0x00
例) A = 2 0xD0, 0x15, 0x40, 0x12, 0x02, 0x00
例) A = REMOCON(1) 0xD0, 0x15, 0x40, 0xFB, 0x11, 0x00
ACTION n 0xD0, 0x15, 0x40, 0x12, 0x32+n,0x00, 0xC5, メインルーチンアドレスLo,Hi n+50の値を第一変数に代入し、メインルーチンをサブルーチンコールしている
OUT port,n 0xD1, portイミディエイト値, nイミディエイト値
PULSE port 0xD2, イミディエイト値
TOGGLE port 0xD3, イミディエイト値
DELAY n 0xD4, イミディエイト値, 0xE9 自動的にWAIT命令が入る
ERX 速度,変数、ラベル 0xD5,速度No, 変数, ラベルアドレス 速度No=
0=2400,
1=4800,
2=9600,
~
9=115200,
10=230400
RX 速度、変数、ラベル (2000系) 0xD5,速度No, 変数, ラベルアドレス 速度No=(0xCC=1200,0xE6=2400,0xF3=4800)
ETX 速度、値 0xD6, 速度No, 変数orイミディエイト値 速度No= 0~10
TX 速度、値 (2000系) 0xD6, 速度No, 変数orイミディエイト値 速度No = 0xCC,0xE6,0xF3
MINIOUT データ,… (2000系) 0xD7, イミディエイト値,[…], 0x00



MOTOR n 0xDA, イミディエイト値 一個づつ指定する命令しかない
MOTOROFF n 0xDB, イミディエイト値 一個づつ指定する命令しかない
SEPPDSPEED n 0xDD, イミディエイト値
PWM ポートNo、パルス値 0xDE, portイミディエイト値, パルスイミディエイト値
SERVO n,角度 0xDF, サーボNoイミディエイト値, 角度イミディエイト値



LCDINIT 0xE0
CLS 0xE1
LOCATE x,y 0xE2, xイミディエイト値, yイミディエイト値
PRINT 文字列 0xE3, 0x18, 文字列[…], 0x00
PRINT FORMAT(変数、HEX、桁) 0xE3, 0x19, 変数, 桁数
PRINT FORMAT(変数、DEC、桁) 0xE3, 0x1A, 変数, 桁数
PRINT FORMAT(変数、BIN、桁) 0xE3, 0x1B, 変数, 桁数
CSON 0xE4
CSOFF 0xE5
CONS 明るさ 0xE6, イミディエイト値
BYTEOUT port, n 0xE7, portイミディエイト値, nイミディエイト値
ACCEL n (2000系) 0xE8, 0x11*n n:0 = 0x00 ~ n:15 = 0xFF
WAIT 0xE9
STOP 0xEA
RUN 0xEB
0xEC, Dir値 サーボG6AだけのDIR指定
PTP SETON 0xED, 0x01
PTP SETOFF 0xED, 0x00
FPWM ポート、パルス、duty比 0xEE, portイミディエイト値, パルスイミディエイト値, dutyイミディエイト値



IN (n) 0xF0, nイミディエイト値, 0x00
INKEY (n) 
(2000系)
0xF1, nイミディエイト値, 0x00
KEYIN (port, n) 0xF1, portイミディエイト値, nイミディエイト値, 0x00
BYTEIN (n) 0xF2, nイミディエイト値, 0x00
AD (n) 0xF3, nイミディエイト値
RCIN (n) 0xF3, (n+100)イミディエイト値 RCIN(n)  は AD(n+100)に等しい
MINIIN  (2000系) 0xF4



STATE (port) 0xF6, portイミディエイト値,0x00



RND 0xF8, 0x00
PEEK (SRAMアドレス) 0xF9, アドレスイミディエイト値, 0x00
ROMPEEK (外部EEPROMアドレス) 0xFA, アドレスイミディエイト値, 0x00
REMOCON (n) 0xFB, nイミディエイト値
AIMOTORIN (n) 0xFC, nイミディエイト値, 0x00
SONAR (n) 0xFD, nイミディエイト値
MOTORIN (n) 0xFE, nイミディエイト値, 0x00







○ 特殊命令 ( コンパイル時に変換される命令 )

   GOTOAUTO   =>   RR = 0        ' 第一変数(SRAM 0x0140)
                    GOTO 0x2728   ' Program Top Address (固定アドレスなので注意※)

   ACTION n     =>   RR = n + 50
                    GOSUB 0x2728   ' Program Top Address (固定アドレスなので注意※)

   ※注意) 上記の命令を使う時は FILL 255,10000 とペアで使用しなければならない。


   OFFSET グループ名、offset_0、…、offset_n

               =>   POKE命令で各サーボの零点データ(&h0340~)にオフセット値を-100して格納