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
© Copyright 2024 ExpyDoc