8086アセンブラで ライフゲーム

8086アセンブラで
ライフゲーム
usk B3 Arch
親 macchanさん
https://gist.github.com/usk83/960eae9113a533019ec6
モチベーション
ブラックボックスは好きじゃない
より基盤技術から理解、修得したい
コンピュータアーキテクチャを一から
学びたい
アセンブラを書きながら、コンピュー
タアーキテクチャの理解を深めるととも
に、今後の基盤とする
ライフゲーム とは
1970年にイギリスの数学者ジョン・コン
ウェイが考案した生命シミュレーション
https://ja.wikipedia.org/wiki/ライフゲーム
ゲーム
誕
生
維
持
過
疎
過
密
ライフゲーム とは
1970年にイギリスの数学者ジョン・コン
ウェイが考案した生命シミュレーション
https://ja.wikipedia.org/wiki/ライフゲーム
ゲーム
誕
生
維
持
過
疎
過
密
実装環境
OS
‒  FreeDOS 1.1 (VirtualBox on OS X)
アセンブラ&リンカ
‒  Arrowsoft Assembler
‒  VAL 8086 linker
FreeDOS とは
MS-DOSの代替を目指して開発されたOS
オープンソース
ほぼ100%の互換性
なぜ FreeDOS
メモリ保護機能がない
よりアーキテクチャの理解に繋がる
x86アーキテクチャ
フリー
VRAMの構成 (IBM PC)
B800:0
12345・・・
1
2
3
4
5
・
・
・
・
・
・
25
B800:f00
B800:9E
・・・80
文字コード・属性 (IBM PC)
生
( f002 )
死
OADG テクニカル・リファレンス ハードウェア編より
( f000 )
開発手順
EDIT(標準搭載のエディタ)
どぎつい背景色、1画面に20 76文字
ハイライト、補完、他便利機能なし
fdosとHostの両方にFloppyをマウント
Host側でプログラムの作成
fdos側でコピー、アセンブル、リンク、
実行(batファイル化)
実装概要
全命令数
170命令
純粋なプログラムサイズ
418byte
画面端の処理
上下左右反対側に接続
近傍の状態確認の実装
CHECK:
mov
mov
mov
mov
mov
mov
mov
mov
mov
mov
bx, 7e0h
WORD PTR
WORD PTR
WORD PTR
WORD PTR
WORD PTR
WORD PTR
WORD PTR
WORD PTR
cx, 0 ;
;
es:[bx], -162
es:[bx+2], -160
es:[bx+4], -158
es:[bx+6], -2
es:[bx+8], 2
es:[bx+10], 158
es:[bx+12], 160
es:[bx+14], 162
近傍の状態確認の実装
CKTOP:
CKBTM:
CKLFT:
cmp
ja
mov
mov
mov
jmp
cmp
jb
sub
sub
sub
push
mov
mov
mov
div
pop
di, 79 ;di
CKBTM
WORD PTR es:[bx], 3838
WORD PTR es:[bx+2], 3840
WORD PTR es:[bx+4], 3842
CKLFT
di, 1920 ;
CKRGT:
CKLFT
WORD PTR es:[bx+10], 4000
WORD PTR es:[bx+12], 4000
WORD PTR es:[bx+14], 4000
bx
ax, di
dx, 0
bx, 80 ;
bx
bx
cmp
jnz
add
add
add
jmp
push
mov
mov
mov
div
pop
cmp
jne
sub
sub
sub
dx, 0 ;
CKRGT
WORD PTR
WORD PTR
WORD PTR
COUNT
bx
ax, di
dx, 0
bx, 80 ;
bx
bx
dx, 79 ;
COUNT
WORD PTR
WORD PTR
WORD PTR
es:[bx], 160
es:[bx+6], 160
es:[bx+10], 160
79
es:[bx+4], 160
es:[bx+8], 160
es:[bx+14], 160
近傍の状態確認の実装
COUNT:
push
add
add
inc
inc
pop
cmp
jb
jmp
si ;
si, es:[bx] ;
cl, [si] ;VRAM
bx ;
bx ;16bit
si ;
bx, 7efh
COUNT
CALC
近傍の状態確認の実装
CALC:
ALIVE:
DEAD:
cmp
jb
jz
cmp
jz
jmp
mov
jmp
mov
jmp
cl, 4 ;
2
DEAD
;2
CALCEND ;2
cl, 6 ;
3
ALIVE ;3
DEAD
;3
BYTE PTR es:[di], 2
CALCEND
BYTE PTR es:[di], 0
CALCEND
苦労した点
VRAMを参照して処理する部分
DEBUGコマンドが使えない
画面端の処理
Webページのリンク切れが多い
自分で書いたコードも後で読むと何をして
いるのか分かりにくい
工夫した点
文字コードのみの2000byteを操作した
死の状態のセルをNULLにした
計算しやすい
fdosとHostの両方にfloppyをマウントし
て開発
画面端の処理
DEMO
今後の展望
より深くコンピュータアーキテクチャの
理解を深めていきたい
–  CPU周りの構造理解
–  OS作る
来期TERMなので、研究らしいことを考
える
参考・引用元
OADGテクニカル・リファレンス
‒  ベクターPCショップ :モバイル・その他のO
S : 商品詳細 : OADGテクニカル・リファ
レンス
http://n.shop.vector.co.jp/service/
servlet/Catalogue.Detail.Top?
ITEM_NO=SR236180