Slide 1

Slide 1 text

今から始める8bits CPU アセンブラ言語 さっぴー川原 @sapi_kawahara

Slide 2

Slide 2 text

自己紹介 ● さっぴー川原 @sapi_kawahara ● アラ還 ● 埼玉県川越市在中 ● 経験した代表的な開発言語:Python,PHP,Ruby,C言 語,C++,Perl,Go,Java,JavaScript,Kotlin(1月から始めまし た),Bash,AWK,SQL,HTML,BASIC,アセンブラ言語 ● 経験したアセンブラ言語 :6502,65816,GB80,HuC62,68000,SuperH,R3000 元ゲームエンジニア です!

Slide 3

Slide 3 text

今から始めると言っても

Slide 4

Slide 4 text

LTの時間では

Slide 5

Slide 5 text

無理っす!!

Slide 6

Slide 6 text

だから アセンブラ言語って 何だ?って

Slide 7

Slide 7 text

今回は基本中の基本 2つの基本について簡単に説明します

Slide 8

Slide 8 text

1つ目 命令数

Slide 9

Slide 9 text

アセンブラ言語は 「CPUが動くための命令を 人間が判りやすい言葉に置き換えた言語」

Slide 10

Slide 10 text

だから Classもない Instanceもない それこそMethodもない

Slide 11

Slide 11 text

あるのは以下の6つ ● メモリーからの読み込み ● メモリーへの書き込み ● 計算(一部のCPUは加算減算のみ) ● 判定(フラグ評価) ● フラグによるジャンプ ● 何もしない

Slide 12

Slide 12 text

これだけでゲームソフトを開発してました🤩

Slide 13

Slide 13 text

逆にやることが少ないし 命令によっては 実行速度が異なるので

Slide 14

Slide 14 text

これを 人間オプティマイズ と呼びます!

Slide 15

Slide 15 text

人が高速になるように プログラミングしておりました

Slide 16

Slide 16 text

そんなソースコード とてもじゃないけど 読めたもんじゃない!

Slide 17

Slide 17 text

私も 3ヶ月前のソースコードが 読めませんでした!

Slide 18

Slide 18 text

これが「職人のタレ」です!

Slide 19

Slide 19 text

2つ目Endian

Slide 20

Slide 20 text

職人と呼ばれた人たちは 強い思想を持っています

Slide 21

Slide 21 text

アセンブラ言語においては 80系と68系の論争が 絶え間なく続いていました

Slide 22

Slide 22 text

なお、川原は68系を信仰してます

Slide 23

Slide 23 text

80系と68系で大きく異なる点 それはEndianです

Slide 24

Slide 24 text

Endianはデータ格納順序のことです

Slide 25

Slide 25 text

コンピューターは 1Byteごとメモリーに格納します

Slide 26

Slide 26 text

最大値は256です

Slide 27

Slide 27 text

じゃあ 256以上の数値を表すには?

Slide 28

Slide 28 text

2Bytes使えばいいんです!

Slide 29

Slide 29 text

では どのように格納します?

Slide 30

Slide 30 text

80系 下位アドレスに下位バイト 上位アドレスに上位バイト これがLittle Endian 下位バイト 上位バイト 下位アドレス 上位アドレス

Slide 31

Slide 31 text

68系 下位アドレスに上位バイト 上位アドレスに下位バイト これがBig Endian 上位バイト 上位バイト 下位アドレス 上位アドレス

Slide 32

Slide 32 text

Endianの影響は Little EndianとBig Endianの 解釈を間違えて 上位と下位を入れ替えてしまうと 別の値になることです

Slide 33

Slide 33 text

ぶっちゃけ言うと そんなに影響は無かった

Slide 34

Slide 34 text

理由は単純で 弊害が起こるのは CPU以外とのやり取りになりますが

Slide 35

Slide 35 text

ゲーム機は CPUに合わせた 周辺デバイスを作るので 80系デバイスはLittle Endian 68系デバイスはBig Endian このように設計されています

Slide 36

Slide 36 text

ただし! FM音源や PCM音源は Little Endianで設計されてます

Slide 37

Slide 37 text

スーパーファミコンのCPUは Little Endianなので PCM音源もLittle Endian

Slide 38

Slide 38 text

しかし! メガドライブのCPUは68000でBig Endian FM音源はLittle Endian だから サブCPUにLittle EndianであるZ80が 搭載されていた!

Slide 39

Slide 39 text

まとめ ● この2つを把握したら、あなたもアセンブラ言語通です!! ● アセンブラ言語の命令の種類は6つ ○ それだけでゲームを動かしていた ○ 少ない命令においては、職人と呼ばれる人が居た ○ それがいつしか「職人のタレ」と呼ばれるようになった ● 80系と68系は戦っていた ○ 戦いの理由はEndian ○ 大した差は無いけど、強い思想なので相容れない ○ FM音源やPCM音源はLittle Endianなので、Big EndianのCPUではひと 工夫が必要

Slide 40

Slide 40 text

尺オーバーなので 以降は削除

Slide 41

Slide 41 text

CPUの説明

Slide 42

Slide 42 text

R3000 ● プレイステーションなどに使用されていたCPU ● ミップス社が開発した32bits CPU ● なぜ、プレイステーションで使用されたか?たぶん、ソニーの ワークステーションNEWSで使用されていたからだと推測され ます https://ja.wikipedia.org/wiki/NEWS_(%E3%82%BD%E3%8 3%8B%E3%83%BC)より画像を引用

Slide 43

Slide 43 text

SuperH ● セガサターンなどで使用されたCPU ● 日立製作所が開発した32bits CPU ● もともと日立製作所は68000系のCPUを、モトローラ社からセ カンドライセンスとして作っていたが関係悪化したので、 68000に似たCPUを作ろうとした、それがSuperHだった ● ゲームセンターで稼働しているゲームにもSuperHを使用して いることが多く、セガサターンに搭載されるのは自然の成り行 きだったのかも?

Slide 44

Slide 44 text

65816 ● スーパーファミコンで使用されたCPU ● ウェスタンデザインセンターが開発した16bits CPU ● 6502と互換性を持っていたため、ファミリーコンピューター の後釜として採用された?

Slide 45

Slide 45 text

HuC62 ● PCエンジンで使用されたCPU ● セイコーエプソンが開発した8bits CPU ● 6502のパクリと互換性を持たせるためにハドソンが設計した

Slide 46

Slide 46 text

GB80 ● ゲームボーイで使用されたCPU ● 正式名称は「LR35902」で、シャープが開発した8bits CPU ● Z80のパクリと互換性を持たせるためシャープが作ったが、液 晶デバイスと組み込みとして任天堂に売り込んだという噂があ る ● そのためファミコン開発者には不評だった80系CPU

Slide 47

Slide 47 text

6502 ● ファミリーコンピューターで使用されたCPU ● モステクノロジーが開発した8bits CPU ● 世界的大ヒットしたパソコン、Apple 2で使用してたCPUなの で、その辺りの開発者を取り込もうとしたのか?と言われてい る ● 6502は6800というCPUに似ていて、俗にいう68系CPUと呼 ばれていて、ゲーム開発者には人気のCPUでした https://ja.wikipedia.org/wiki/Apple_II より画像を引用

Slide 48

Slide 48 text

Endian小ネタ ● アーケードゲームでは、音源チップが変わることが多く、そのたび に設計し直すのが面倒だから、汎用的なZ80を挟んだと、先輩から 聞いたことがあります ○ FPGA(Field Programmable Gate Array)の代替だったのかな?と思っていま す ● 通信系はBig Endianです ● スーファミのサテラビューもBig Endianでした ○ 通信衛星から色々な情報が取得できました ● ゲームボーイの通信は1Byteなので、どっちのEndianでもありませ ん ○ むしろゲームボーイの通信の難しさは半二重通信であることに尽きる