do gameboy a zend vm e avante

Post on 09-Jan-2017

508 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

2016 TDC

DO GAMEBOY A

ZEND VM E

AVANTE

IT’S ME, BOB!

Level 1 - Motivação

X 1

Cara, o que dá

para fazer com

PHP?

?

Rasmus

Lerdorf

TIME

1994

I NEED TO DO A

GUEST BOOK FOR

MY WEBSITE

TIME

1994

PERSONAL HOME

PAGE TOOLS!

TIME

1994

PHP = Scripts

TIME

1994

PHP: Hypertext

Preprocessor

TIME

1997

PHP = Linguagem

TIME

1997

vvsvvhvvrvvWebAbrangente

Praticamente

tudo o que você

queira fazer!

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.

Python - 1991

Guido van Rossum

Successor to the ABC

language capable of

exception handling

and interfacing with

the Amoeba operating

system.

ECMAscript - 1995

Brendan Eich

Netscape

Standardized

specification of a

scripting language

for browsers.

CAMPINAS

SÃO PAULO

Projetos que gostei

+game engine

+websocket server

+3D printer

+wifi booster

+..

+..

+..

+js gameboy emulator

+..

+..

+..

+..

JavaScript GameBoy

Emulator

by Grant Galitz

de 2010

suportava até IE

era possível salvar

emulava colorido

perfeito!

vvvvvivvvvv

Se alguém me falasse

que existia um

emulador de GameBoy

em PHP, eu iria

duvidar!

Um projeto desses

vai inspirar as

pessoas a programar o

que gosta, e a ver o

PHP com outros olhos.

Level 2 - Desafios

X 1

Como vou renderizar

o jogo?

ASCII

DRAWILLE

8 pontos por

caractere

..

..

..

..

DRAWILLE

GameBoy Hardware

CPU

8-bit Sharp LR35902

4.19 MHz

RAM / VIDEO RAM

8 kB

DISPLAY

160 × 144 pixels

0100-014F

cartridge header

0100-0103 entry point

0134-0143 game title

0149 RAM size

014E-014F checksums

Tudo está na

PAN DOCS

bgb.bircd.org/

pandocs.txt

EXECUTÁVEL

Conjunto de instruções

Bytecode

Cada instrução

Opcode + Parâmeros

A CPU do GameBoy tem

quase 512 Opcodes

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

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

0x03

INC BC

1 8

INC - Incrementa

BC - Registro da CPU

1 - Tamanho da

instrução (em bytes)

8 - Ciclos de CPU

Opcode.php

Função opcode3

$core->registerB =

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

$core->registerC =

($temp_var & 0xFF);

<?php

while (true) {

executeIteration();

runInterrupt();

updateCore();

}

EMULAR UMA CPU

=

LOOP INFINITO

INTERRUPÇÕES

LCD

SOUND

TIME

JOYPAD

SERIAL

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);

O PHP NÃO TEM

INT8

INT16

INT32

GRANDE PARTE DO

CÓDIGO É EXECUTADA

MILHARES DE VEZES!

XDEBUG PROFILING

TIME

03:00

RODOU!

Level 3 - PHP 7

X 1

MEMORY OPTIMIZATION

Reduce number of

allocations

Reduce memory usage

Reduce indirection

PHP 5

PHP 7

UM EMULADOR

FUNCIONA QUASE

DA MESMA FORMA QUE

UMA MÁQUINA VIRTUAL

<?php

$a = 1;

<?php T_OPEN_TAG

$a T_VARIABLE

=

1 T_NUMBER

LEXER

<?php T_OPEN_TAG

$a T_VARIABLE

=

1 T_NUMBER

PARSER

STMTS

|

ASSIGN

/ \

VAR 1

|

$a

COMPILER

STMTS

|

ASSIGN

/ \

VAR 1

|

$a

ASSIGN $a 1

RETURN 1

ZEND VM

ASSIGN $a 1

RETURN 1

ZEND VM

ASSIGN $a 1

RETURN 1

PHP BYTECODE

OPCODE ARGS

A ZENDVM TEM ~150 OPCODES

ZEND VM

zend_vm_execute.h

ZEND_API void execute_ex

while (1) {

}

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

$a++;

ASSIGN !0, 0

POST_INC ~2 !0

FREE ~2

RETURN 1

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

++$a;

ASSIGN !0, 0

PRE_INC !0

RETURN 1

PARA VER OS OPCODES

DE FORMA PRÁTICA

https://3v4l.org

v0.0.1

2 FPS

v0.1.0

14 FPS

Level 4 - Repercussão

X 1

Hey Pokemao, agora

você já pode jogar no

servidor do trampo!

LINT / PHP CS

BUILD

CORREÇÕES DE INGLÊS

CONSEGUI!

VAI BRASIL!

ZEREI A VIDA!

ZEREI A VIDA 2X!

hasegawatomoki/reading-php-

terminalgameboyemulator

1079

php-terminal-gameboy-

emulator

9485

php-src

7939

composer

3115

doctrine2

44986

facebook/react

18891

rg3/youtube-dl

13301

torvalds/linux

Level 5 - Futuro

X 1

MELHORAR PHP-GUI

LLVM <-> PHP

EXTENSÕES EM PHP

JIT

PHP <-> PYPY

PHP-SRC

Eu não sou DIFERENTE

de vocês, apenas tive

FOCO!

Acredito que TODOS

VOCÊS POSSUEM

CAPACIDADE para FAZER

projetos SUPER

INCRÍVEIS.

MEU MUITO OBRIGADO

DE CORAÇÃO!

PHP

@GABRIELRCOUTO

GITHUB.COM/

GABRIELRCOUTO

joind.in/talk/2ffb5

TRABALHE COMIGO!

CONTATO@MEMED.COM.BR

MEMED PHPSPAAAAAAAAAAP

top related