twitterで@a4lgが始めたブートセクタプログラミング。バイナリを512バイトにするという制限の中でプログラムを組むというもの。あと基本8086。前からやろうとは思ったけど行動を起こせなかった。@a4lgに刺激を受け、挑戦することにした。ただ、いきなり大きなプログラムは作れないので、まずはデモ的なものから。このプログラムは画面上に1ドット表示して、それをキーボードのAとDで左右に動かすというもの。ここからゲームっぽいものを目指す
cpu 8086 bits 16 org 0x7C00 %macro draw 3 mov ax, %1 mov cx, %2 mov dx, %3 int 0x10 %endmacro xor ax, ax mov ds, ax ; si is x ; di is y mov si, 320 mov di, 400 ; init display mov al, 0x12 int 0x10 draw 0x0C02, si, di input_key: ; get key mov ah, 0x00 int 0x16 ; if key is a then left move cmp al, 'a' je left_move ; if key is b then left move cmp al, 'd' je right_move ; wait next key jmp input_key left_move: ; erase current character dot draw 0x0C00, si, di ; next position sub si, word 0x04 ; draw character dot draw 0x0C02, si, di ; wait next key jmp input_key right_move: ; erase current character dot draw 0x0C00, si, di ; next position add si, word 0x04 ; draw character dot draw 0x0C02, si, di ; wait next key jmp input_key times 510 - ($ - $$) db 0x00 dw 0xaa55