マイペースなプログラミング日記

DTMやプログラミングにお熱なd-kamiがマイペースに書くブログ

ブートセクタプログラミング

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