ぐだぐだ低レベルプログラミング(201)x86(16bit)、ポインタロード、LES、LDS

LES_LDS_pointerload
Joseph Halfmoon

前回は8086範囲をはみ出すENTER/LEAVE命令でしたが、今回は8086以来のファーポインタ(セグメント間参照)のロード命令、LESとLDSです。そろそろ8086命令は一巡するんじゃないかなどと思っていたのですが、数えてみたらまだまだ残ってます。先が長いのでそろそろ8086範囲は終わらせたいのだけれど。

“ぐだぐだ低レベルプログラミング(201)x86(16bit)、ポインタロード、LES、LDS” の続きを読む

Lispと一緒(43) ラズパイPico2でもuLisp、breakとtrace、デバッグ

trace_3endEC
Joseph Halfmoon

今回はuLispのデバッグ機能。この機能はエディタ同様uLisp処理系そのものに組み込まれており、外部プログラムなど必要とはしません。ただし機能を顕現させるには事前の準備が必要です。まずはユーザープログラムの書き換え不要な trace が第1チョイスかと。関数内部の奥深くに探りを入れる場合は breakすかね。
“Lispと一緒(43) ラズパイPico2でもuLisp、breakとtrace、デバッグ” の続きを読む

ぐだぐだ低レベルプログラミング(200)x86(16bit)、ENTER、LEAVEその2

Joseph Halfmoon

前回は、ENTERが作り出すスタックフレームを眺めながらボヤイてましたが演習には至りませんでした。「やりたくないな~」感が充満。Debug.exeは強力なソフトウエアデバッガですが、「ソフトウエアの」デバッガです。自身がブレークかけるためにもスタックを消費。スタック操作の証拠を残すのがメンドイです。仕方ねえ、やるです。

“ぐだぐだ低レベルプログラミング(200)x86(16bit)、ENTER、LEAVEその2” の続きを読む

Lispと一緒(42) ラズパイPico2でもuLisp、SHA256ハードを試用

SHA256sample_EC
Joseph Halfmoon

別シリーズの過去回にてラズパイPico2、RP2350の周辺回路 SHR256計算機(アクセラレータ?)を調べました。メンドいハッシュの計算を自主的に行ってくれる優れものです。調べただけで実機動作がまだだったので、今回uLispから突いて計算できることを確認。まあ動作確認用のサンプルコードでしかないすけど。 “Lispと一緒(42) ラズパイPico2でもuLisp、SHA256ハードを試用” の続きを読む

ぐだぐだ低レベルプログラミング(199)x86(16bit)、ENTER、LEAVEその1

EnterLeaveRetImm
Joseph Halfmoon

前回CALL/RET命令を練習。しかし即値つきRETはENTER/LEAVEと一緒ね、ということで後回し。今回はENTER/LEAVE命令(8086に不在、80186以降のx86が装備)が「想定」しているスタックフレームについて復習していきます。便利?「高水準言語とのセマンティンクギャップ」が叫ばれた当時のアダ花?
“ぐだぐだ低レベルプログラミング(199)x86(16bit)、ENTER、LEAVEその1” の続きを読む

Lispと一緒(41) ラズパイPico2でもuLisp、uLisp to C 変換

takCompileERROR
Joseph Halfmoon

uLisp上の「セルフ」開発ツール、アセンブラコンパイラ、そして前回のエディタと経めぐってきましたが、今回は「クロス開発?」向けのコンバータです。uLisp関数をCのソースコード形態に変換してくれるもの。Arduino環境へ輸出すれば「セルフ」にもなり。しかし「コマケーことはいいんだよ」な感じです。

“Lispと一緒(41) ラズパイPico2でもuLisp、uLisp to C 変換” の続きを読む

ぐだぐだ低レベルプログラミング(198)x86(16bit)、CALLとRET

farCall
Joseph Halfmoon

前回はカウンタレジスタCXを「見て飛ぶ」LOOPとJCXZでした。今回は「呼び出したら戻る」CALLとRET命令です。例によってイントラ・セグメントとインター・セグメントの違いあり。CALLの場合はダイレクトとインダイレクトの違いもあり。いろいろあるけれど、CALL、RETは意外とフツー。

“ぐだぐだ低レベルプログラミング(198)x86(16bit)、CALLとRET” の続きを読む

Lispと一緒(40) ラズパイPico2でもuLisp、uLispのエディタ

editorReplace
Joseph Halfmoon

外部プログラムをロードすることで前回はコンパイラが使える、前々回はアセンブラが使えると喜びました。しかしuLisp半端ないです。実はエディタはビルトインです。入力したLisp関数を実行環境内で編集可能っと。コマケー修正ならばホストに戻らずとも可能。でも編集メンドイよ。年寄じゃないと使えない?

“Lispと一緒(40) ラズパイPico2でもuLisp、uLispのエディタ” の続きを読む

Lispと一緒(39) ラズパイPico2でもuLisp、uLispのコンパイラ

beforeAfter_compile
Joseph Halfmoon

前回はuLispのアセンブラを試用。Arm Thumb命令のネイティブ・コードを生成してくれるアセンブラです。さて今回はこのアセンブラの上に乗る「Lispコンパイラ」を使ってみます。なんとuLisp関数(使える関数はサブセットだけれども)をネイティブコードにコンパイルしてくれます。実行速度は超高速化、当然。 “Lispと一緒(39) ラズパイPico2でもuLisp、uLispのコンパイラ” の続きを読む

ぐだぐだ低レベルプログラミング(197)x86(16bit)、LOOPとJCXZ

LOOP1
Joseph Halfmoon

前回は条件フラグ共を「見て飛ぶ」条件ジャンプ命令Jccでした。今回はカウンタ・レジスタCXを「見て飛ぶ」(ついでの操作もあるけど)条件ジャンプ命令どもです。16ビットのx86はこのCXの扱いといい、ぜんぜん汎用レジスタでないです。御先祖から引きづっているものが多過ぎる?でもま、ループなど作る時には便利な命令どもです。
“ぐだぐだ低レベルプログラミング(197)x86(16bit)、LOOPとJCXZ” の続きを読む

Lispと一緒(38) ラズパイPico2でもuLisp、uLispのアセンブラ

uLispAssembler
Joseph Halfmoon

前々回あたり、uLispは周辺回路レジスタ(実際にはメモリも可)へのアクセスを許してくれると活用?してみました。しかしそれだけではありませぬ。uLispはアセンブラをも備えており、uLisp関数をアセンブリ言語命令で記述して呼び出すことも可能です。事実上、何でもアリ?強力すぎる?アセンブラ書きのお楽しみが増えた?

“Lispと一緒(38) ラズパイPico2でもuLisp、uLispのアセンブラ” の続きを読む

Lispと一緒(37) uLisp用、Teraterm Proマクロでらくちん?

Repl
Joseph Halfmoon

uLisp公式」ではuLispをビルドするのに使ったArduino IDEのシリアル・モニタを開発環境に使うことを推奨しているみたいです。uLispに欠けている行編集機能を補える上に何となれば処理系の再生成も可能。しかし当方Teraterm Proで作業中。lispのソースを編集、アップロードするのに便利なので。
“Lispと一緒(37) uLisp用、Teraterm Proマクロでらくちん?” の続きを読む

Pico三昧(58) ラズパイPico2:RP2350、インターポレータ

InterpPOP
Joseph Halfmoon

前回はRISC-Vプラットフォームタイマを試用。このHWは唯一無二。今回はラズパイPico系にユニークなインターポレータを試用してみます。コア毎に2個のインターポレータを装備、そして1個のインターポレータには2レーンあり、合計8個の演算パスを平行利用可能です。今回は基本操作POPをつかって等差数列を生成してみます。
“Pico三昧(58) ラズパイPico2:RP2350、インターポレータ” の続きを読む

Lispと一緒(36) ラズパイPico2でもuLisp、TRNG、真性乱数の生成

read_trng
Joseph Halfmoon

Common Lispの系譜を継ぐuLispをラズパイPico2マイコン上で練習中。前回はregister関数を練習。メモリマップされた周辺回路のレジスタども(メモリでも)を読み書きできる関数でした。これがあれば何でもできそ~。今回はラズパイPico2(RP2350)特有の周辺、TRNGを使って真性乱数をゲットだぜ。

“Lispと一緒(36) ラズパイPico2でもuLisp、TRNG、真性乱数の生成” の続きを読む