Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SwiftでCPUを作る

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for freddi(Yuki Aki) freddi(Yuki Aki)
May 11, 2020
530

 SwiftでCPUを作る

Avatar for freddi(Yuki Aki)

freddi(Yuki Aki)

May 11, 2020
Tweet

More Decks by freddi(Yuki Aki)

Transcript

  1. nand2tetris • ޙ൒ʹͳΔʹͭΕͯ಺༰َ͕சʹͳΔ • ࢒Γͷήʔτ → CPU → ίϯϐϡʔλ →

    VM → ίϯύΠϥ … • ࠷ऴతʹ͸ςτϦε͕ग़དྷ্͕ΔΒ͍͠ • https://www.nand2tetris.org/
  2. SwiftͰnand2tetris • ͱΓ͋͑ͣҎԼͷറΓͰ΍ͬͯΈͨ • NANDήʔτɾDFFҎ֎Ͱ if ΍ switch ͱ͍ͬͨ৚݅จݪଇېࢭ •

    NANDͰϋʔυ΢ΣΞΛશ෦࣮૷͢ΔͨΊ • ͨͩ͠ɺग़ྗͷϏοτ਺Λଟ͘͢ΔͨΊͱ͔͸Մೳ • ϓϦϛςΟϒͳ Boolܕ Ͱ͸ͳ͘ enum ʹΑΔ஋Ͱૢ࡞ • ͜ͷ੍໿Ͱ1ΫϩοΫ2ඵͷΫιίϯϐϡʔλʹɾɾɾ
  3. SwiftͰnand2tetris (֤ήʔτ) • OR AND XOR NOT ͸͔ΜͨΜͩͬͨ • NOT

    x = x NAND x • x AND y = NOT ( x AND y ) • x OR y = ( NOT x ) NAND ( NOT y )
  4. SwiftͰnand2tetris (CPU/Program Counter) • ࣍ͷ໋ྩΛड͚෇͚Δ 16bitͷCPUΛ࡞Δ • 1 1 1

    a c c c c c c d d d j j j (֤ه߸ʹ͸ 0 or 1) • c ͸ ALUʹ౤͛Δԋࢉॲཧ • d d d ͸Ϩδελ/ RAM ͷσʔλ֨ೲઌ • j j j ͸ jmp ໋ྩ • ϨδελʹσʔλΛೖΕΔ͚ͩͳΒ 0 x x x x x x x x x x x x x x
  5. SwiftͰnand2tetris (ΞηϯϒϦ) • ͜͜·Ͱ࡞Δͱ RAM: 4KB, CPU: 16bitͷίϯϐϡʔλ͕࡞Εͨ • ࢼͯ͠ΈͨΒ

    2ඵ / ΫϩοΫͩͬͨ • 0.5 Hz • ϫΠͷMacbook 2.4 GHz • 48ԯഒ஗͍
  6. Swiftͷenum͸BoolΑΓগʑ஗͍ • CPU͸ Bit ԋࢉΛ Bool Ͱ͸ͳ͘ enum ʹ͍ͨͤ͠Ͱ஗͍ •

    Bool͸Swiftͷ಺෦Ͱ͸ 1bit ͷ Integer (ͩͬͨ͸ͣ) • enum ͷ΄͏͕αΠζ΋ܭࢉίετ͕ඇৗʹେ͖͍ʁ • RAMΛstructʹͯ͠ίϯύΠϧ͢ΔͱίϯύΠϧ͕ऴΘΒͳ͍ • ࠓޙͷ՝୊
  7. Mac͸ϝϞϦ͕ࢮ͵ͱTrackPad͕๫૸͢Δ • ྫͷίϯύΠϥͷόά • ੜ͖ͯΔ∞ϓνϓνͷΑ͏ͳײ֮ • ͳΜ͔ɺੜ͖ͯΔΑ͏Ͱ͔Θ͍͍ͷͰͥͻ • ͭ͡͸Կճ͔Θ͟ͱ΍ָͬͯ͠Μͩ •

    ΍Γ͍ͨํ͸ԼهϦϯΫ͔Βɺͨͩ͠೤๫૸΋͋ΔͷͰࣗݾ੹೚Ͱ https://github.com/freddi-kit/Swift2Tetris/commit/ 84c42b8da965608a5c7152842e168f5219427732#r39052324