Linuxアセンブリでゲームを作りたいです。Linux カーネル システム コールを介して画面に画像を表示 (または描画) する方法はありますか?
調べてみたのですが、DOSアセンブリ言語に関するものばかりでした。
それは可能ですが、最近のアセンブリでソフトウェアを開発する方法は非常に退屈で時間がかかるようです。
i386 プラットフォームで実行していると仮定すると (syscall ABI はプラットフォームごとに異なります)、uClibcs libc/sysdeps/linux/i386/syscall.S を見てください。
.text
.global syscall
.type syscall,%function
syscall:
pushl %ebp
pushl %edi
pushl %esi
pushl %ebx
movl 44(%esp),%ebp /* Load the 6 syscall argument registers */
movl 40(%esp),%edi
movl 36(%esp),%esi
movl 32(%esp),%edx
movl 28(%esp),%ecx
movl 24(%esp),%ebx
movl 20(%esp),%eax /* Load syscall number into %eax. */
int $0x80
popl %ebx
popl %esi
popl %edi
popl %ebp
cmpl $-4095,%eax
jae __syscall_error
ret /* Return to caller. */
.size syscall,.-syscall
これは、すべての syscall 引数と syscall 番号がスタックにロードされていることを前提としています。
syscall 番号は、Linux カーネルの include/asm-generic/unistd.h ファイルで確認できます。
アセンブリからシステム コールを呼び出す方法がわかったので、もちろんどのシステム コールを呼び出すかを知る必要があります。Linux Framebufferを読むことをお勧めします。X とのやり取りはさらに複雑になります。
カーネル関数のみを使用する場合は、vesa フレームバッファーを使用する必要があります: Using the framebuffer device under Linux . 楽しんでください=)