do gameboy a zend vm e avante

108
2016 TDC DO GAMEBOY A ZEND VM E AVANTE

Upload: gabriel-rodrigues-couto

Post on 09-Jan-2017

508 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Do gameboy a zend vm e avante

2016 TDC

DO GAMEBOY A

ZEND VM E

AVANTE

Page 2: Do gameboy a zend vm e avante

IT’S ME, BOB!

Page 3: Do gameboy a zend vm e avante
Page 4: Do gameboy a zend vm e avante

Level 1 - Motivação

X 1

Page 5: Do gameboy a zend vm e avante

Cara, o que dá

para fazer com

PHP?

Page 6: Do gameboy a zend vm e avante

?

Page 7: Do gameboy a zend vm e avante

Rasmus

Lerdorf

TIME

1994

Page 8: Do gameboy a zend vm e avante

I NEED TO DO A

GUEST BOOK FOR

MY WEBSITE

TIME

1994

Page 9: Do gameboy a zend vm e avante

PERSONAL HOME

PAGE TOOLS!

TIME

1994

Page 10: Do gameboy a zend vm e avante

PHP = Scripts

TIME

1994

Page 11: Do gameboy a zend vm e avante

PHP: Hypertext

Preprocessor

TIME

1997

Page 12: Do gameboy a zend vm e avante

PHP = Linguagem

TIME

1997

Page 13: Do gameboy a zend vm e avante

vvsvvhvvrvvWebAbrangente

Page 14: Do gameboy a zend vm e avante

Praticamente

tudo o que você

queira fazer!

Page 15: Do gameboy a zend vm e avante

Java - 1991

James Gosling

Sun Microsystems

Originally designed

for interactive

television, but it

was too advanced for

the digital cable

television industry

at the time.

Page 16: Do gameboy a zend vm e avante

Python - 1991

Guido van Rossum

Successor to the ABC

language capable of

exception handling

and interfacing with

the Amoeba operating

system.

Page 17: Do gameboy a zend vm e avante

ECMAscript - 1995

Brendan Eich

Netscape

Standardized

specification of a

scripting language

for browsers.

Page 18: Do gameboy a zend vm e avante
Page 19: Do gameboy a zend vm e avante

CAMPINAS

SÃO PAULO

Page 20: Do gameboy a zend vm e avante

Projetos que gostei

+game engine

+websocket server

+3D printer

+wifi booster

+..

+..

+..

+js gameboy emulator

+..

+..

+..

+..

Page 21: Do gameboy a zend vm e avante

JavaScript GameBoy

Emulator

by Grant Galitz

de 2010

suportava até IE

era possível salvar

emulava colorido

perfeito!

Page 22: Do gameboy a zend vm e avante

vvvvvivvvvv

Se alguém me falasse

que existia um

emulador de GameBoy

em PHP, eu iria

duvidar!

Page 23: Do gameboy a zend vm e avante

Um projeto desses

vai inspirar as

pessoas a programar o

que gosta, e a ver o

PHP com outros olhos.

Page 24: Do gameboy a zend vm e avante

Level 2 - Desafios

X 1

Page 25: Do gameboy a zend vm e avante

Como vou renderizar

o jogo?

Page 26: Do gameboy a zend vm e avante

ASCII

Page 27: Do gameboy a zend vm e avante

DRAWILLE

Page 28: Do gameboy a zend vm e avante

8 pontos por

caractere

..

..

..

..

Page 29: Do gameboy a zend vm e avante

DRAWILLE

Page 30: Do gameboy a zend vm e avante

GameBoy Hardware

CPU

8-bit Sharp LR35902

4.19 MHz

RAM / VIDEO RAM

8 kB

DISPLAY

160 × 144 pixels

Page 31: Do gameboy a zend vm e avante

0100-014F

cartridge header

0100-0103 entry point

0134-0143 game title

0149 RAM size

014E-014F checksums

Page 32: Do gameboy a zend vm e avante

Tudo está na

PAN DOCS

bgb.bircd.org/

pandocs.txt

Page 33: Do gameboy a zend vm e avante

EXECUTÁVEL

Conjunto de instruções

Bytecode

Cada instrução

Opcode + Parâmeros

A CPU do GameBoy tem

quase 512 Opcodes

Page 34: Do gameboy a zend vm e avante

3e01 1801 af02 c9fa

46d0 e001 18f6 cd59

23f0 41e6 0320 fa46

f041 e603 20fa 7ea0

c97b 8627 227a 8e27

223e 008e 2722 3e00

8e27 773e 01e0 e07e

cb37 e60f c83e 0932

3e99 3232 77c9 f5c5

d5e5 f0b1 a728 0bfa

f1c4 a728 05f0 efa7

2009 f0e1 fe03 2803

cdb6 ffcd 2d2e f0b1

Page 35: Do gameboy a zend vm e avante

3e01 1801 af02 c9fa

46d0 e001 18f6 cd59

23f0 41e6 0320 fa46

f041 e603 20fa 7ea0

c97b 8627 227a 8e27

223e 008e 2722 3e00

8e27 773e 01e0 e07e

cb37 e60f c83e 0932

3e99 3232 77c9 f5c5

d5e5 f0b1 a728 0bfa

f1c4 a728 05f0 efa7

2009 f0e1 fe03 2803

cdb6 ffcd 2d2e f0b1

Page 36: Do gameboy a zend vm e avante

0x03

INC BC

1 8

INC - Incrementa

BC - Registro da CPU

1 - Tamanho da

instrução (em bytes)

8 - Ciclos de CPU

Page 37: Do gameboy a zend vm e avante

Opcode.php

Função opcode3

$core->registerB =

(($temp_var >> 8) & 0xFF);

$core->registerC =

($temp_var & 0xFF);

Page 38: Do gameboy a zend vm e avante

<?php

while (true) {

executeIteration();

runInterrupt();

updateCore();

}

EMULAR UMA CPU

=

LOOP INFINITO

Page 39: Do gameboy a zend vm e avante

INTERRUPÇÕES

LCD

SOUND

TIME

JOYPAD

SERIAL

Page 40: Do gameboy a zend vm e avante

Keyboard.php

exec('stty -icanon -echo');

$this->file = fopen(

'php://stdin', 'r');

stream_set_blocking(

$this->file, false);

// Quando é pressionado

$this->core->

joyPadEvent($keyCode,

true);

Page 41: Do gameboy a zend vm e avante

O PHP NÃO TEM

INT8

INT16

INT32

Page 42: Do gameboy a zend vm e avante

GRANDE PARTE DO

CÓDIGO É EXECUTADA

MILHARES DE VEZES!

Page 43: Do gameboy a zend vm e avante

XDEBUG PROFILING

Page 44: Do gameboy a zend vm e avante

TIME

03:00

Page 45: Do gameboy a zend vm e avante

RODOU!

Page 46: Do gameboy a zend vm e avante

Level 3 - PHP 7

X 1

Page 47: Do gameboy a zend vm e avante

MEMORY OPTIMIZATION

Reduce number of

allocations

Reduce memory usage

Reduce indirection

Page 48: Do gameboy a zend vm e avante

PHP 5

Page 49: Do gameboy a zend vm e avante

PHP 7

Page 50: Do gameboy a zend vm e avante

UM EMULADOR

FUNCIONA QUASE

DA MESMA FORMA QUE

UMA MÁQUINA VIRTUAL

Page 51: Do gameboy a zend vm e avante

<?php

$a = 1;

<?php T_OPEN_TAG

$a T_VARIABLE

=

1 T_NUMBER

LEXER

Page 52: Do gameboy a zend vm e avante

<?php T_OPEN_TAG

$a T_VARIABLE

=

1 T_NUMBER

PARSER

STMTS

|

ASSIGN

/ \

VAR 1

|

$a

Page 53: Do gameboy a zend vm e avante

COMPILER

STMTS

|

ASSIGN

/ \

VAR 1

|

$a

ASSIGN $a 1

RETURN 1

Page 54: Do gameboy a zend vm e avante

ZEND VM

ASSIGN $a 1

RETURN 1

Page 55: Do gameboy a zend vm e avante

ZEND VM

ASSIGN $a 1

RETURN 1

PHP BYTECODE

OPCODE ARGS

A ZENDVM TEM ~150 OPCODES

Page 56: Do gameboy a zend vm e avante

ZEND VM

zend_vm_execute.h

ZEND_API void execute_ex

while (1) {

}

Page 57: Do gameboy a zend vm e avante

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

$a++;

ASSIGN !0, 0

POST_INC ~2 !0

FREE ~2

RETURN 1

Page 58: Do gameboy a zend vm e avante

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

++$a;

ASSIGN !0, 0

PRE_INC !0

RETURN 1

Page 59: Do gameboy a zend vm e avante

PARA VER OS OPCODES

DE FORMA PRÁTICA

https://3v4l.org

Page 60: Do gameboy a zend vm e avante

v0.0.1

2 FPS

v0.1.0

14 FPS

Page 61: Do gameboy a zend vm e avante

Level 4 - Repercussão

X 1

Page 62: Do gameboy a zend vm e avante

Hey Pokemao, agora

você já pode jogar no

servidor do trampo!

Page 63: Do gameboy a zend vm e avante
Page 64: Do gameboy a zend vm e avante
Page 65: Do gameboy a zend vm e avante
Page 66: Do gameboy a zend vm e avante
Page 67: Do gameboy a zend vm e avante
Page 68: Do gameboy a zend vm e avante
Page 69: Do gameboy a zend vm e avante
Page 70: Do gameboy a zend vm e avante
Page 71: Do gameboy a zend vm e avante
Page 72: Do gameboy a zend vm e avante
Page 73: Do gameboy a zend vm e avante
Page 74: Do gameboy a zend vm e avante
Page 75: Do gameboy a zend vm e avante

LINT / PHP CS

BUILD

CORREÇÕES DE INGLÊS

Page 76: Do gameboy a zend vm e avante
Page 77: Do gameboy a zend vm e avante
Page 78: Do gameboy a zend vm e avante
Page 79: Do gameboy a zend vm e avante
Page 80: Do gameboy a zend vm e avante
Page 81: Do gameboy a zend vm e avante
Page 82: Do gameboy a zend vm e avante
Page 83: Do gameboy a zend vm e avante
Page 84: Do gameboy a zend vm e avante
Page 85: Do gameboy a zend vm e avante
Page 86: Do gameboy a zend vm e avante
Page 87: Do gameboy a zend vm e avante
Page 88: Do gameboy a zend vm e avante
Page 89: Do gameboy a zend vm e avante
Page 90: Do gameboy a zend vm e avante
Page 91: Do gameboy a zend vm e avante

CONSEGUI!

VAI BRASIL!

Page 92: Do gameboy a zend vm e avante
Page 93: Do gameboy a zend vm e avante

ZEREI A VIDA!

Page 94: Do gameboy a zend vm e avante
Page 95: Do gameboy a zend vm e avante

ZEREI A VIDA 2X!

Page 96: Do gameboy a zend vm e avante
Page 97: Do gameboy a zend vm e avante
Page 98: Do gameboy a zend vm e avante
Page 99: Do gameboy a zend vm e avante

hasegawatomoki/reading-php-

terminalgameboyemulator

Page 100: Do gameboy a zend vm e avante
Page 101: Do gameboy a zend vm e avante

1079

php-terminal-gameboy-

emulator

9485

php-src

7939

composer

3115

doctrine2

Page 102: Do gameboy a zend vm e avante

44986

facebook/react

18891

rg3/youtube-dl

13301

torvalds/linux

Page 103: Do gameboy a zend vm e avante

Level 5 - Futuro

X 1

Page 104: Do gameboy a zend vm e avante
Page 105: Do gameboy a zend vm e avante

MELHORAR PHP-GUI

LLVM <-> PHP

EXTENSÕES EM PHP

JIT

PHP <-> PYPY

PHP-SRC

Page 106: Do gameboy a zend vm e avante

Eu não sou DIFERENTE

de vocês, apenas tive

FOCO!

Acredito que TODOS

VOCÊS POSSUEM

CAPACIDADE para FAZER

projetos SUPER

INCRÍVEIS.

Page 107: Do gameboy a zend vm e avante

MEU MUITO OBRIGADO

DE CORAÇÃO!

PHP

Page 108: Do gameboy a zend vm e avante

@GABRIELRCOUTO

GITHUB.COM/

GABRIELRCOUTO

joind.in/talk/2ffb5

TRABALHE COMIGO!

[email protected]

MEMED PHPSPAAAAAAAAAAP