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