たれな蚀語-IDEなしで、しかし䟿利にコヌディング

IDE vs Notepad / VIM / Emacsのトピックで青くなるたで議論するこずができたす。 IDEが存圚する限り。 ただし、䜿甚する必芁のある蚀語たたは方蚀に簡単に出くわすこずができたす。そのためのIDEは存圚しないか、有料で高䟡なだけであるか、既に叀くお珍しいOSの゚ミュレヌタヌでしか実行されたせん。 しかし、あなたは働く必芁がありたす。 幞いなこずに、腕を遞択しお「シャヌプ」にするだけでよい汎甚ツヌルがありたす。 以䞋は、今日のたれなバヌゞョンのアセンブラヌでのVIMバンドル、トランスレヌタヌ、およびいく぀かのctagの䜿甚に぀いお説明しおいたす。



翻蚳者のみがいたす


開発チヌムで仕事を始めおすぐに、おおたかに蚀っおPDP-11の1806BM2のアセンブラに出䌚いたした。 さらに、タヌゲットデバむスは、信号を倉換および凊理するための少数の郚品を備えた特定のボヌドであり、機噚はWindowsオプションなしを備えたPCです。 開発䞭のデバむスは異なり、それらのプログラムは300〜3000行のコヌドです。



このプロセスに参加したずき、デバむス名のフォルダヌがプロゞェクトに察応しおいるこずがわかりたした。 フォルダヌには、アセンブラヌファむルすべおのasmファむルは同じ名前を持ち、コンパむルはそのように構成されおいたす、パラメヌタヌなしのbatファむルがあり、パラメヌタヌ付きの別のbatファむルを呌び出し、次に、アセンブラヌexeファむルを実行したす自然に暪たわっおいたすすぐそこ。 さらに、プロゞェクトフォルダヌには、バむナリずリスト、バむナリをROMファヌムりェアファむルに倉換するプログラム、倉換甚の補助テキストファむル、ファヌムりェアファむルをプログラマヌが理解できる圢匏に倉換する別のプログラム、ファヌムりェアファむルプログラムはROMの代わりにフラッシュに曞き蟌たれ始めたした、さらにdirinfo.txtで、誰もが䜕かを曞くこずは非垞にたれでした。



䜜業は次のようになりたした。コン゜ヌルファむルマネヌゞャヌでは、組み蟌み゚ディタヌによっおプログラムテキストが修正されたした。 線集埌、最初のバッチファむルが起動されたした混同しないこずが重芁です。 次に、コン゜ヌル出力の゚ラヌを確認したす。 構文䞊の劚害がない堎合-プログラムはROM゚ミュレヌタヌに流し蟌たれ、ハヌドりェアの操䜜性をチェックしたす。 そのため、プログラムは远加され、期埅される動䜜を開始するたでチェックされたす。 次に、生成されたファヌムりェアがROMに曞き蟌たれたす埌で、ROMがフラッシュに眮き換えられたした。



最初はい぀ものように働きたした。 利䟿性次第ではありたせんでした。コマンドシステム、プログラム䜜成の機胜、゜フトりェアが蚘述されおいるデバむスのハヌドりェアを理解する必芁がありたす。 䜕かが刀明し始めるず、改善の考えが生じ始めたした。 たず、構文の匷調衚瀺、゚ディタヌからのコンパむラヌの起動、および通垞の怜玢ず眮換が必芁でした。



遞択の小麊粉


最初は、あらゆる皮類のむンタヌネットでIDEを芋぀けようずしたした。これはPDP-11、぀たりDCK、BC、UKSCであり、芋぀けるべきものがあるはずだからです そしお発芋されたしたが、UKSCの゚ミュレヌタでのみ機胜したした。 コン゜ヌルIDEも゚ミュレヌタも環境にも゚ミュレヌタを実行する必芁もありたせんでしたが、これは最も重芁なこずではありたせんでした。 最悪なこずに、結果のバむナリは「埓来の方法」で䜜成されたバむナリずは異なりたした。 私は理由を理解しおいたせんでした-゚ミュレヌタヌで垌少性を終了するか、さらに悪いこずに修正゜フトりェアを曞くのに十分ではありたせんでした。 私は奜みず遊女で自分のワヌクスペヌスを敎理するこずにしたした。



私はもっ​​ず真剣にテキスト゚ディタを探し始めたした。 怜玢プロセスで出䌚ったこずから、私はUltraEditが䞀番奜きでした特にUEStudioバヌゞョン。 テキストファむルの比范、トランスコヌディング、列遞択、コンパむラだけでなく、珟圚のファむルの名前を䜿甚しお䜜成䞭のその他のマクロ、ツヌルバヌ拡匵機胜の起動など、いく぀かの利点がありたした。 すべおが良いです-しかし、支払われ、そしお私の収入は安くはありたせん。 私はMiBEditorを詊したした-印象的な補品無料で1぀のヘルメットで䜜られおいたすですが、そうではありたせん。 簡単なLinuxの流行が助けたした。 VIMに぀いお孊び、それを䜿甚しおみお、その機胜を感知し、Wndowsのバヌゞョンを発芋したした。



プリセット


最初に行ったのは、vimrcで倖芳ず動䜜を蚭定するこずでした暗いりォンバットカラヌスキヌム黒に明るいグレヌ、奜みに応じお調敎、行番号、行番号、スマヌトむンデント、タブによりデフォルトで85幅に増加、無効なbak-files、開いおいるファむルによる䜜業フォルダヌの自動倉曎。 圌は、ビヌプ音ではなく点滅する仮想呌び出しをオンにし、ツヌルバヌを無効にし䜕らかの理由で、私は䜿甚しおいたせんが、メニュヌを残したした、印刷䞭にマりスを隠し、開いおいる分割バッファヌ間でCtrl-Tabスむッチを切りたした。



ロシア語の文字を含むフォントを遞択したした

set guifont=Courier_New:h10:cRUSSIAN "  
      
      





ロシア語での䜜業を䟿利にするために、レむアりトに䜕かを远加したした。

 set keymap=russian-jcukenwin "   set iskeyword=@,48-57,_,192-255 "  . .    set iminsert=0 "  - -  set imsearch=0 "    —  lang ctype Russian_Russia.1251
      
      





F12にレむアりトスむッチを掛けたした

 imap <F12> <C-^> cmap <F12> <C-^>
      
      





珟圚、英語レむアりトでは、すべおのキヌボヌドコマンドが正垞に機胜し、システムのCtrl-Shiftではなく入力蚀語を切り替える必芁がありたすが、VIM F12では、珟圚の蚀語が英語で「-INSERT-」たたは「-INSERT language-"ロシア語。 少し䞍䟿です-通垞、私のキヌボヌドレむアりトはロシア語ですが、ここではVIMの起動時に英語に切り替えるこずを忘れおはなりたせん。



䞊蚘のすべおを個別のvimrc_rgに蚘録し、デフォルトの蚭定ファむルに接続したした。

 source $VIM/_vimrc_rg
      
      





耇数のプラグむンもむンストヌルしたしたが、垞に文字通り1぀を䜿甚したす-QuickBufqbuf.vim、script_id = 1910。これにより、F4で1぀のりィンドりのオヌプンバッファヌを切り替えるこずができたす。 珟圚、タブは必芁ありたせんUltraEditで慣れおいたした、さらに䞍快に思えたす。 UltraEditのように、遞択したブックマヌクを䜜成するむンストヌル枈みのビゞュアルマヌクscript_id = 1026を時々芚えおいたす。



そこで、VIMをプレヌンテキストファむルのメむン゚ディタずしお䜿甚し始めたした。 私の芁件の1぀である通垞の怜玢ず眮換は、すぐに䜿甚できたす。䜿甚方法を孊んでください。 さらに、倚くの蚀語の匷調衚瀺ず自動むンデント-バッチファむルの線集などが非垞に䟿利になりたした。



バックラむトず翻蚳者の蚭定


次に、線集を匷調衚瀺しお埋め蟌むための新しいファむルタむプa1806を導入したした。 vimfilesフォルダヌのルヌトにfiletype.vimファむルを䜜成したした。

  augroup filetypedetect au BufNewFile,BufRead *.msa setf a1806 au BufNewFile,BufRead *.a51 setf asm8051 augroup END
      
      





それからしばらくの間、圌はアセンブラヌファむルに適切な拡匵子を䞎え始めたした-1806のmsa、MCS-51アセンブラヌのa51、デフォルトでIntelアセンブラヌに蚭定されたasmず混同しないように。



次に、vimfiles \構文で、圌はa1806.vimファむルを䜜成し、他の蚀語のハむラむトファむルからやり盎したした。 むンタヌネットで芋぀かったキヌワヌド、PDP-11のテキスト情報。 UKNTSおよびSMコンピュヌタに関するペヌパヌブックがいく぀かありたすが、Webペヌゞからコピヌする方が簡単です。

このファむルには、特に次の行が含たれおいたす。

 syn match a1806Error "#@.*\|[a-zA-Z0-9_$]\{7,}:"
      
      





すばやく入力しお間接アドレスを入力するずき、@ず@を混同するこずがよくあり、このパタヌンは入力䞭の゚ラヌを匷調しおいたす。 他の䞀般的なタむプミスは、この方法で特定できたす。



構文の匷調衚瀺がありたす。 今コンパむル。 ナヌティリティmakeずctagsを理解するず、ここではそれらがヘルパヌではないこずが明らかになりたした。 アセンブラはありたすが、リンカはありたせん-プロゞェクトをモゞュヌルファむルに分割するこずはできたせん。 makeの目暙は1぀だけで、そのためのファむルもありたすが、気にする必芁はありたせん。 ctagsでも同じです-ファむルは1぀だけで、怜玢する特別なものはありたせん。ラベルはアスタリスクで簡単に芋぀かりたす。 長いファむルはブックマヌクよりも䟿利です。これはVIMにもありたす。 しかし、すべおのプロゞェクトフォルダヌのアセンブラヌはfiです C\ドラむブのルヌトにbinフォルダヌを䜜成し、PATHに曞き蟌みたす別のアセンブラヌのmakeずctagsをそこに配眮したす。 そこで、アセンブラヌずmk1806.batを配眮したした。マむクロヘルプず枡されたパラメヌタヌの有効性のチェックに加えお、バむナリずリストが消去され、その埌アセンブラヌが呌び出されたす。

 :VALIDDIR CD %2 %3 %4 %5 %6 %7 %8 %9 :WORK2 if not exist *.bin goto NOBIN attrib -r *.bin del *.bin :NOBIN if not exist *.lst goto NOLST attrib -r *.lst del *.lst :NOLST if exist %1 C:\bin\cmplr1806\asm.exe %1 -m if not exist %1 echo Error: File %1 not exist!
      
      





バッチファむルは、ファむルの名前ずそのパスの2぀のパラメヌタヌを受け入れたす。 makeの出力を損なわないように、ファむル内のコマンドを衚瀺するモヌドは無効になっおいたす@ ECHO OFF。



vimfiles \ ftpluginでa1806.vimファむルを䜜成したした。

 " Language: 1806 assembler " Maintainer: " Last Change: "           lcd %:h "    setlocal makeprg=C:\bin\mk1806.bat\ %:t\ %:p:h "      setlocal autowrite nmap <buffer> <F9> :make<CR> imap <buffer> <F9> <Esc>:make<CR> "     set efm=%-G,%-G\ BK-10/11%.%#,%-P\ Opened\ %f,%Eline\ %l\\,%.%#,%Z%m,%-GFile\ compiled%.%#
      
      





Errorformatは経隓的に決定されたしたasm.exeにはドキュメントがたったくありたせん。぀たり、゚ラヌなしでさたざたな特別な゚ラヌを含むファむルのアセンブルを開始し、コン゜ヌル出力を調べ、VIMヘルプのテンプレヌトをコンパむルしたした。

゚ラヌ出力の䟋明確にするために行番号を手動で远加

 1 2 BK-10/11 Assembler 3 4 Opened 1.ASM 5 Line 61,Address 000320: 6 Bad operator [AKSJDFH]. 7 Opened 1.lst 8 9 File compiled 346 bytes. 10
      
      





この堎合、゚ラヌ圢匏は次の芁玠で構成されたす。



efmパタヌンによれば、ファむル名は4ず7に栌玍されおいたすが、行1..4ず7..10は出力されたせん。 行5ず6がない堎合、出力は空で、゚ラヌはありたせん。 タむプ5ず6のラむンは、耇数のペアになる堎合がありたす。 これらのペアのそれぞれが゚ラヌメッセヌゞリストアむテムを圢成したす。



ほら F9で自動保存を䜿甚しおコンパむルしたす。 構文゚ラヌが怜出されるず、VIMはすぐに、芋぀かった゚ラヌのリストの最初の゚ラヌに察応するコヌド行にカヌ゜ルを眮きたす。



十分なデバッガはありたせんが、あたりにも倚くのものが割り蟌み、メモリぞの盎接アクセス、および無関係なハヌドりェアに結び付けられおいるため、ここでは圹に立ちたせん。 VIMに組み蟌たれおいる完党なファむル比范をただマスタヌしおいたせん。䞻にWinMergeを䜿甚しおいたす。 それでも、それははるかに䟿利になりたした。



゚ンパワヌメント


そしお1806幎は私たちから少し離れ始め、NM6403プロセッサをベヌスにしたデバむスで䜜業が始たりたした。 アセンブラヌでも。 そしお、゜ヌスファむルの次の拡匵子を思い付かないように、asm.vimファむルをvimfiles \ ftpluginに远加したした。

  if getline(1) =~ '^;.*a1806\>' set filetype=a1806 endif if getline(1) =~ '^//.*a6403\>' set filetype=a6403 endif
      
      





拡匵子が.asmのアセンブラファむルでは、最初の行の入力が開始されたした

「; A1806」たたは「// a6403」。 vimfiles \ syntax \ a1806.vim「アセンブラヌ蚀語の説明」に埓っお非垞に簡単か぀迅速に蚘述およびそのようなvimfiles \ ftplugin \ a6403.vimを匷調する構文を远加したした。

 " Language: 6403 assembler " Maintainer: " Last Change: setlocal makeprg=c:\bin\make.exe "           lcd %:h "      setlocal autowrite nmap <buffer> <F9> :make<CR> imap <buffer> <F9> <Esc>:make<CR> nmap <buffer> <F10> :make TAGS<CR> imap <buffer> <F10> <Esc>:make TAGS<CR> set efm=\"%f\"\\,%l\ :\ %m
      
      





これが機胜するために、圌は各プロゞェクトフォルダヌにあり、他の開発者が䜿甚するbatコンパむラヌ起動ファむルに隣接するMakefileを䜜成したした。 私のMakefileには、TAGSタヌゲットず、ALLタヌゲットからこのタヌゲットぞの呌び出しがありたす。

 TAGS : @c:/bin/ctags.exe --options=c:/bin/a6403.ctags $(SRC_ASM) *.asi
      
      





$SRC_ASMはASM゜ヌスをリストし、* .asiにはむンクルヌドファむルが含たれたす。



䞊蚘のフォルダヌC\ binには、make.exe、ctags.exe、a6403.ctagsがあり、ctags.exeのパラメヌタヌずしお枡されたす。

 --langdef=a6403 --langmap=a6403:.asm --language-force=a6405 --regex-a6403=/^<([a-zA-Z0-9_]+)>/\1/L,labels/ --regex-a6403=/^[ \t]*const[ \t]+([a-zA-Z0-9_]+)/\1/C,consts/ --regex-a6403=/^[ \t]*#define[ \t]+([a-zA-Z0-9_]+)/\1/D,defs/ --regex-a6403=/^[ \t]*global[ \t]+([a-zA-Z0-9_]+)[ \t]*:[ \t]*(word|long)/\1/V,vars/
      
      





箱から出したctagsは、NM6403に぀いお䜕も知りたせん。 最初の行は、新しい蚀語名を定矩したす。 2行目はファむル拡匵子に぀いお説明しおいたす。 拡匵子は、たずえば「.asm.asi.inc」のように連続しお蚘述されたす。 埌ろに文字がないドットは、拡匵子のないファむルの䜿甚を意味したす。 ただし、これは特に䟿利なオプションではありたせん。ここでは.asi拡匵子を指定したせんでしたが、ctagsを呌び出すずきに* .asiを指定したした。ナヌティリティは必芁なものをすべおスキャンしたした。 4行目では、同じ拡匵機胜のctagsに組み蟌たれおいる蚀語ではなく、この特定の蚀語に察しお䞊蚘の拡匵機胜を䜿甚しおいたす。 残りの行は、「<Label>」ずいう圢匏のラベル、「const Name」ずいう圢匏の定数、「define Expression」ずいう圢匏のマクロ定矩、および「global Nameword」ずいう圢匏のグロヌバル倉数をそれぞれ説明したす。 「。 ここで、gf-go fileコマンド、カヌ゜ルの䞋の名前がむンクルヌドファむルを衚瀺するのに非垞に䟿利なファむルぞの移行を思い出したいず思いたす。



別の埮劙な点IDEを含むいく぀かの異なる開発ツヌルが䜜業コンピュヌタヌにむンストヌルされたす。 それらのいく぀かはボヌド䞊に独自のmakeを持ち、それらのバむナリぞのパスはむンストヌル䞭にPATHで指定されたす。 さらに、䞀郚のmakeは、GNU makeの芏則に埓っお䜜成されたMakefileに神経質に関連しおいたす。 䞀般に、それらはバッチファむルであっおもかたいたせん。 そのため、䜿甚するmakeおよび同時にctagsぞのパスをどこにでも曞かなければなりたせんでした。次のIDE / CADをむンストヌルするたびにPATHを䞊べ替えお制埡するよりも簡単で信頌性が高いです。



合蚈


今では、ファむル拡匵子を気にせずにさたざたなアセンブラで䜜業し、さたざたなファむルに散らばっおいるコヌドを「ゞャンプ」し、゚ディタを離れずにコンパむルし、コンパむル埌に構文゚ラヌのある行を取埗する機䌚がありたす。 類掚により、VIM +翻蚳者+ ctagsバンドルの範囲を他の蚀語ず䞀緒に䜿甚する必芁がある堎合、それらの範囲を非垞に簡単に拡匵できたす。 適切なプラグむンを遞択するこずにより、タグの操䜜に利䟿性を远加できたす。 Makefileを䜿甚しお目的のトランスレヌタヌにチュヌニングしおmakeを固定できたす。盎接トランスレヌタヌを䜿甚するこずもできたす。 もちろん、IDEではありたせんが、ノヌトブックでもありたせん



チヌムだけでVIMずctagsの䟿利さずパワヌを䜿甚するのは少し残念です。 誰も倢䞭になりたせんでした。 誰かがこれらの開発が圹立぀ず思うでしょうか



PS最埌たでマスタヌした皆さんに感謝したす。



All Articles