;********************************************************************************* ;* ;* コマンドを調べ実行する NS企画 2011,12/3 ;* ;********************************************************************************* mlook_up_command: jz zeus_or_ascom_sw,look_up_ASCOM_COMMAND ;** ASCOM コマンド ? ;***************************************************** ;** E-ZEUS コマンド ;***************************************************** cp0 pcflag bra NZ,z_look_10 mov_r #xbuf,xpnt inc pcflag ret z_look_10: call getdt cjer_ rbyte,#'D',ZEUS_DV ;DV モータ制御 cjer_ rbyte,#'S',ZEUS_SP_ST ;SP or ST モータ停止要求 E-ZEUS状態 cjer_ rbyte,#'G',ZEUS_GP ;GP モータ位置要求 cjer_ rbyte,#'R',ZEUS_RD ;RD 周回ステップ cjer_ rbyte,#'P',ZEUS_PA ;PA 到着予告ステップ jmp zeus_look_ng ;************************************** ;* R Slew Rate Commands for RS# RM# RC# RG# 未対応RADD.D# REDD.D# RgSS.S# .equ setup,0 ;初期設定 .equ xhigh,1 ;最高速機能 .equ x32,2 ;倍速機能 .equ x8,3 ;8倍速機能 .equ xguide,4 ;ガイド機能 ;****************************************** ;** モータ制御コマンド ;****************************************** ZEUS_DV: call getdt cjner_ rbyte,#'V',zeus_look_ng call getdt cjer_ rbyte,#'R',ZEUS_DVR cjer_ rbyte,#'D',ZEUS_DVD jmp zeus_look_ng ;**************************************** ;**************************************** ; DV 赤経 ;**************************************** ZEUS_DVR: call getdt cjner_ rbyte,#'A',zeus_look_ng call getdt cjer_ rbyte,#'F',ZEUS_DVRAF ;DV 正転コマンド cjer_ rbyte,#'R',ZEUS_DVRAR ;DV 逆転コマンド jmp zeus_look_ng ;******************************** ;*** DV 赤経 正転コマンド ;******************************** ZEUS_DVRAF: call getdt movrr rbyte,speed_xxxx ; ;*****数値なし DV 赤経 正転コマンド************ DVRAFxcr: cjer_ speed_xxxx,#'4',dvraf4 cjer_ speed_xxxx,#'3',dvraf3 cjer_ speed_xxxx,#'2',dvraf2 cjer_ speed_xxxx,#'1',dvraf1 cjer_ speed_xxxx,#'0',dvraf0 jmp zeus_look_ng ;不明なコマンド ; 最高速 dvraf4: bset _external_keyxxx,#bit_rr mov_r #xhigh,_zeus_motor_swxxx ;Slew bclr _external_keyxxx,#bit_rl jmp dvrafx_ ; 高速 dvraf3: bset _external_keyxxx,#bit_rr mov_r #x32,_zeus_motor_swxxx ;Find bclr _external_keyxxx,#bit_rl jmp dvrafx_ ; 中速 dvraf2: bset _external_keyxxx,#bit_rr mov_r #x8,_zeus_motor_swxxx ;Cnt bclr _external_keyxxx,#bit_rl jmp dvrafx_ ; 恒星時速度、停止 dvraf1: dvraf0: bclr _external_keyxxx,#bit_rr mov_r #setup,_zeus_motor_swxxx ;setupで恒星時速度になる bclr _external_keyxxx,#bit_rl jmp dvrafx_ ; dvrafx_: call getdt cjer_ rbyte,#CR,zeus_external_ack ;ACKアンサー + external_key有効 cjer_ rbyte,#LF,zeus_external_ack ;ACKアンサー cjner_ rbyte,#'#',zeus_look_ng jmp zeus_goto_RA_xxxx_com ; ;****************************************************** ; 赤経 数値付き DVコマンド の数値を設定して、導入処理を行う ;****************************************************** zeus_goto_RA_xxxx_com: ;*****数値付き DV 赤経 正転コマンド************ call getdt movrr rbyte,ascii1 call getdt movrr rbyte,ascii2 call getdt movrr rbyte,ascii3 call getdt movrr rbyte,ascii4 call ascii_to_word mov w0,_zeus_ra_xxx+2 ;上位 赤経 E-ZEUS 数値付DV用 32ビットデータ 相対ステップ数 セーブ jnb flag,#f_hex_ok,zeus_look_ng call getdt movrr rbyte,ascii1 call getdt movrr rbyte,ascii2 call getdt movrr rbyte,ascii3 call getdt movrr rbyte,ascii4 call ascii_to_word mov w0,_zeus_ra_xxx+0 ;下位 赤経 E-ZEUS 数値付DV用 32ビットデータ 相対ステップ数 セーブ jnb flag,#f_hex_ok,zeus_look_ng call getdt cjer_ rbyte,#CR,zra_1 ;ACKアンサー 省略する cjer_ rbyte,#LF,zra_1 ;ACKアンサー jmp zeus_look_ng ; zra_1: ; 導入開始処理 ; ; 赤経、赤緯 32ビットステップ数を準備 << 完了している ; 方向をセットする << 完了 ; 導入速度をセットする << 完了 mov_r #1,_f_zeus_ra_goto mov_r #1,_zgoto_sw mov_r #100,_sound_timer ;開始ブザー音 jmp zeus_external_ack ;ACKアンサー + external_key有効 ; ;****************************************************** ; 赤緯 数値付き DVコマンド の数値を設定して、導入処理を行う ;****************************************************** zeus_goto_DEC_xxxx_com: ;*****数値付き DV 赤経 正転コマンド************ call getdt movrr rbyte,ascii1 call getdt movrr rbyte,ascii2 call getdt movrr rbyte,ascii3 call getdt movrr rbyte,ascii4 call ascii_to_word mov w0,_zeus_dec_xxx+2 ;上位 赤経 E-ZEUS 数値付DV用 32ビットデータ 相対ステップ数 セーブ jnb flag,#f_hex_ok,zeus_look_ng call getdt movrr rbyte,ascii1 call getdt movrr rbyte,ascii2 call getdt movrr rbyte,ascii3 call getdt movrr rbyte,ascii4 call ascii_to_word mov w0,_zeus_dec_xxx+0 ;下位 赤経 E-ZEUS 数値付DV用 32ビットデータ 相対ステップ数 セーブ jnb flag,#f_hex_ok,zeus_look_ng call getdt cjer_ rbyte,#CR,zdec_1 ;ACKアンサー 省略する cjer_ rbyte,#LF,zdec_1 ;ACKアンサー jmp zeus_look_ng ; zdec_1: ; 導入開始処理 ; ; 赤経、赤緯 32ビットステップ数を準備 << 完了している ; 方向をセットする << 完了 ; 導入速度をセットする << 完了 mov_r #1,_f_zeus_dec_goto mov_r #1,_zgoto_sw mov_r #100,_sound_timer ;開始ブザー音 jmp zeus_external_ack ;ACKアンサー + external_key有効 ; ;******************************** ;*** DV 赤経 逆転コマンド ;******************************** ZEUS_DVRAR: call getdt movrr rbyte,speed_xxxx ; ;*****数値なし DV 赤経 逆転コマンド***** DVRARxcr: cjer_ speed_xxxx,#'4',dvrar4 cjer_ speed_xxxx,#'3',dvrar3 cjer_ speed_xxxx,#'2',dvrar2 cjer_ speed_xxxx,#'1',dvrar1 cjer_ speed_xxxx,#'0',dvrar0 jmp zeus_look_ng ;不明なコマンド ; 最高速 dvrar4: bset _external_keyxxx,#bit_rl mov_r #xhigh,_zeus_motor_swxxx ;Slew bclr _external_keyxxx,#bit_rr jmp dvrarx_ ; 高速 dvrar3: bset _external_keyxxx,#bit_rl mov_r #x32,_zeus_motor_swxxx ;Find bclr _external_keyxxx,#bit_rr jmp dvrarx_ ; 中速 dvrar2: bset _external_keyxxx,#bit_rl mov_r #x8,_zeus_motor_swxxx ;Cnt bclr _external_keyxxx,#bit_rr jmp dvrarx_ ; 恒星時速度、停止 dvrar1: dvrar0: bclr _external_keyxxx,#bit_rl mov_r #setup,_zeus_motor_swxxx ;setupで恒星時速度になる bclr _external_keyxxx,#bit_rr jmp dvrarx_ ; ;*****数値付き DV 赤経 逆転コマンド************ dvrarx_: call getdt cjer_ rbyte,#CR,zeus_external_ack ;ACKアンサー + external_key有効 cjer_ rbyte,#LF,zeus_external_ack ;ACKアンサー cjner_ rbyte,#'#',zeus_look_ng jmp zeus_goto_RA_xxxx_com ;数値付き DVコマンド の数値を設定、導入開始処理をする ;**************************************** ;**************************************** ; DV 赤緯 ;**************************************** ZEUS_DVD: mov_r #1,_handbox_or_PC_keysw ;0: ハンドボックス 1: E-ZEUS コマンドでコントロール中 E-ZEUS追加 2010,1/24 ; call getdt cjner_ rbyte,#'C',zeus_look_ng call getdt cjner_ rbyte,#'F',ZEUS_DVDCF ;DV 正転コマンド cjner_ rbyte,#'R',ZEUS_DVDCR ;DV 逆転コマンド jmp zeus_look_ng ;******************************** ;*** DV 赤緯 正転コマンド ;******************************** ZEUS_DVDCF: call getdt movrr rbyte,speed_xxxx ; ;** 数値なし DV 赤緯 正転コマンド DVDCFxcr: cjer_ speed_xxxx,#'4',dvdcf4 cjer_ speed_xxxx,#'3',dvdcf3 cjer_ speed_xxxx,#'2',dvdcf2 cjer_ speed_xxxx,#'1',dvdcf1 cjer_ speed_xxxx,#'0',dvdcf0 ; 最高速 dvdcf4: bset _external_keyxxx,#bit_du mov_r #xhigh,_zeus_motor_swxxx ;Slew bclr _external_keyxxx,#bit_dd jmp dvdcfx_ ; 高速 dvdcf3: bset _external_keyxxx,#bit_du mov_r #x32,_zeus_motor_swxxx ;Find bclr _external_keyxxx,#bit_dd jmp dvdcfx_ ; 中速 dvdcf2: bset _external_keyxxx,#bit_du mov_r #x8,_zeus_motor_swxxx ;Cnt bclr _external_keyxxx,#bit_dd jmp dvdcfx_ ; 恒星時速度、停止 dvdcf1: dvdcf0: bclr _external_keyxxx,#bit_du mov_r #setup,_zeus_motor_swxxx ;setupで停止になる bclr _external_keyxxx,#bit_dd jmp dvdcfx_ ; ;*****数値付き DV 赤緯 正転コマンド************ dvdcfx_: call getdt cjer_ rbyte,#CR,zeus_external_ack ;ACKアンサー + external_key有効 cjer_ rbyte,#LF,zeus_external_ack ;ACKアンサー cjner_ rbyte,#'#',zeus_look_ng jmp zeus_goto_DEC_xxxx_com ;数値付き DVコマンド の数値を設定、導入開始処理をする ;******************************** ;*** DV 赤緯 逆転コマンド ;******************************** ZEUS_DVDCR: call getdt movrr rbyte,speed_xxxx ;** 数値なし DV 赤緯 逆転コマンド************ DVDCRxcr: cjer_ speed_xxxx,#'4',dvdcr4 cjer_ speed_xxxx,#'3',dvdcr3 cjer_ speed_xxxx,#'2',dvdcr2 cjer_ speed_xxxx,#'1',dvdcr1 cjer_ speed_xxxx,#'0',dvdcr0 ; 最高速 dvdcr4: bset _external_keyxxx,#bit_dd mov_r #xhigh,_zeus_motor_swxxx ;Slew bclr _external_keyxxx,#bit_du jmp dvdcrx_ ; 高速 dvdcr3: bset _external_keyxxx,#bit_dd mov_r #x32,_zeus_motor_swxxx ;Find bclr _external_keyxxx,#bit_du jmp dvdcrx_ ; 中速 dvdcr2: bset _external_keyxxx,#bit_dd mov_r #x8,_zeus_motor_swxxx ;Cnt bclr _external_keyxxx,#bit_du jmp dvdcrx_ ; 恒星時速度、停止 dvdcr1: dvdcr0: bclr _external_keyxxx,#bit_dd mov_r #setup,_zeus_motor_swxxx ;setupで停止になる bclr _external_keyxxx,#bit_du jmp dvdcrx_ ; ;*****数値付き DV 赤緯 逆転コマンド************ dvdcrx_: call getdt cjer_ rbyte,#CR,zeus_external_ack ;ACKアンサー + external_key有効 cjer_ rbyte,#LF,zeus_external_ack ;ACKアンサー cjner_ rbyte,#'#',zeus_look_ng jmp zeus_goto_DEC_xxxx_com ;数値付き DVコマンド の数値を設定、導入開始処理をする ;****************************************** ;** SP,STコマンド モータ停止要求/E-ZEUS状態 ;****************************************** ZEUS_SP_ST: call getdt cjer_ rbyte,#'P',SPx ;モータ停止要求 cjer_ rbyte,#'T',STcr ;E-ZEUS状態コマンド jmp zeus_look_ng ;******************************** ;** ST E-ZEUS状態要求コマンド ;******************************** STcr: mov #'S',w0 call txdata mov #'T',w0 call txdata ;******************************************************************** ;P:赤経モータが PC指令にて移動中 < ascii ; exit ascii1,2,3,4 mov_r #xbuf,xpnt call putascii ;xbuf へ ascii 4 バイトを順番に格納する mov _raxxx_max+0,w0 ;下位 赤経上限パルス定数 (最大値、half step pulse) ; entry w0: hex (8Bit) call word_to_ascii ;Word Hex > ascii ; exit ascii1,2,3,4 call putascii ;xbuf へ ascii 4 バイトを順番に格納する mov_r #'#',rbyte call putdt ;** 赤緯基本定数(周回パルス) mov _decxxx_max+2,w0 ;上位 赤経上限パルス定数 (最大値、half step pulse) ; entry w0: hex (8Bit) call word_to_ascii ;Word Hex > ascii ; exit ascii1,2,3,4 ; mov_r #xbuf,xpnt ;赤経基本定数に続けてxbufに入れていく call putascii ;xbuf へ ascii 4 バイトを順番に格納する mov _decxxx_max+0,w0 ;下位 赤経上限パルス定数 (最大値、half step pulse) ; entry w0: hex (8Bit) call word_to_ascii ;Word Hex > ascii ; exit ascii1,2,3,4 call putascii ;xbuf へ ascii 4 バイトを順番に格納する mov_r #'$',rbyte call putdt call zeus_txbuf ;xbuf の文字列を $ まで送信する$の替りに CRLF送信する clr u_sw ret ;****************************************** ;** 到着予告ステップ数 ;****************************************** ZEUS_PA: call getdt cjner_ rbyte,#'A',zeus_look_ng call getdt cjer_ rbyte,#CR,PAcr cjer_ rbyte,#LF,PAcr cjner_ rbyte,#'#',zeus_look_ng ; ;*** 到着予告ステップ数変更 jmp zeus_ack ;ACKアンサー ;*** 到着予告ステップ数問い合わせ PAcr: mov_r #xbuf,xpnt ;DOG_GVP をアンサする mov_r #_msg_PA0000,msgpnt call zeus_putmsg call zeus_txbuf ;xbuf の文字列を $ まで送信する$の替りに CRLF送信する clr u_sw ret ;************************************** ; E-ZEUS専用である 2010,1/23 ; ; xbuf へ メッセージを格納する ; entry xpnt: xbuf バイト ポインタ ; msgpnt: メッセージ バイト ポインタ ; 注意、メッセージの末尾は $ で終わること ; exit xpnt+1 zeus_putmsg: mov msgpnt,w0 clr w1 ;取り出したメッセージは1バイトになるから上位バイトをクリアしておく mov.b [w0++],w1 ;でなければ、#の判定ができない。 mov w0,msgpnt mov w1,rbyte call putdt cjner_ rbyte,#'$',zeus_putmsg ;注意 これはワードの $ として比較する! ret ;************************************** ; E-ZEUS専用である 2010,1/23 ; ; xbuf のデータを $($は送信しない) まで 送信する RS232C1 ; #の替りに、CR,LF を送信する zeus_txbuf: mov_r #xbuf,xpnt z_txbuf_1: call getdt cjer_ rbyte,#'$',zeus_tx_CRLF mov rbyte,w0 call txdata bra z_txbuf_1 ret zeus_tx_CRLF: mov #CR,w0 call txdata mov #LF,w0 call txdata ret ; ;***************************************************** ; 数値なしDVコマンド用 ACKアンサー external key を有効 ;***************************************************** zeus_external_ack: mov_r #1,_handbox_or_PC_keysw ;0: ハンドボックス 1: E-ZEUS コマンドでコントロール中 jmp zeus_ack ;***************************************************** ; ACKアンサー ;***************************************************** zeus_ack: mov #'#',w0 call txdata call zeus_tx_CRLF mov_r #set_up,u_sw ;初期設定 へ ret ; ;***************************************************** ; 不明なコマンド ;***************************************************** zeus_look_ng: mov #'?',w0 ;不明なコマンド ?送信する call txdata call zeus_tx_CRLF mov_r #set_up,u_sw ;初期設定 へ ret ; ;***************************************************** ; エラー処理  >> エラーコードは  !01 として扱う ;***************************************************** zeus_look_ng01: zeus_look_ng02: zeus_look_ng03: zeus_look_ng04: mov #'!',w0 call txdata mov #'0',w0 call txdata mov #'1',w0 call txdata call zeus_tx_CRLF mov_r #set_up,u_sw ;初期設定 へ ret ;***************************************************** ;** ASCOM コマンド ;***************************************************** look_up_ASCOM_COMMAND: cp0 pcflag bra NZ,look_10 mov_r #xbuf,xpnt inc pcflag ret look_10: call getdt ; cjer_ rbyte,#'C',LX200_C ;C - Sync Control <<削除E-ZEUSプロトコル 2010,2/8 ; cjer_ rbyte,#'P',LX200_P ;P - High Precision Toggle & U - Precision Toggle <<削除E-ZEUSプロトコル 2010,2/8 ; cjer_ rbyte,#'U',LX200_U ; cjer_ rbyte,#'S',LX200_S ;S Telescope Set Commands <<削除E-ZEUSプロトコル 2010,2/8 cjer_ rbyte,#'M',LX200_M ;M Telescope Movement Commands