SlideShare uma empresa Scribd logo
2016 TDC
DO GAMEBOY A
ZEND VM E
AVANTE
IT’S ME, BOB!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
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
vvsvvhvvrvv
WebAbrangente
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.
TDC2016SP - Do Gameboy ao Zend Engine e avante!
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!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
LINT / PHP CS
BUILD
CORREÇÕES DE INGLÊS
…
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
CONSEGUI!
VAI BRASIL!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
ZEREI A VIDA!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
ZEREI A VIDA 2X!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
TDC2016SP - Do Gameboy ao Zend Engine e avante!
hasegawatomoki/reading-php-
terminalgameboyemulator
TDC2016SP - Do Gameboy ao Zend Engine e avante!
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
TDC2016SP - Do Gameboy ao Zend Engine e avante!
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 PHPSP
AAAAAAAAAAP

Mais conteúdo relacionado

DOCX
Hardware da empresa
ODP
Engenheiro informático
PDF
RASPBERRY PI BRASIL REVISÃO "B"
PPTX
Apresentacao 3 - Treinamento de Produtos - SantaASUS 2009
PPTX
Webseminario AMD phenom II x6
PPTX
Computador Superior
PPTX
Computador Básico - Peças
PDF
Raspberry pi
Hardware da empresa
Engenheiro informático
RASPBERRY PI BRASIL REVISÃO "B"
Apresentacao 3 - Treinamento de Produtos - SantaASUS 2009
Webseminario AMD phenom II x6
Computador Superior
Computador Básico - Peças
Raspberry pi

Destaque (20)

PPTX
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
PDF
TDC 2014 - Tudo sobre GCM Push Notifications
PDF
TDC2016SP - Internet das Coisas
PPTX
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC2016SP - Trilha .NET
PPTX
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PPT
TDC2016SP - Trilha .NET
PPTX
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PDF
TDC2016SP - Trilha Análise de Negócios
PPTX
TDC 2012 - Visão Geral do Windows Azure
PDF
TDC2016SP - Design Thinking
PDF
TDC2016SP - Design Thinking
PDF
TDC2016SP - Design Thinking
PDF
TDC2016SP - Trilha Arquitetura Empresarial
PPTX
TDC2016SP - Por dentro do .Net Core
PHP Expericence 2015 - Testes Unitários - Existe vida antes do TDD
TDC 2014 - Tudo sobre GCM Push Notifications
TDC2016SP - Internet das Coisas
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha .NET
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha .NET
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC2016SP - Trilha Análise de Negócios
TDC 2012 - Visão Geral do Windows Azure
TDC2016SP - Design Thinking
TDC2016SP - Design Thinking
TDC2016SP - Design Thinking
TDC2016SP - Trilha Arquitetura Empresarial
TDC2016SP - Por dentro do .Net Core
Anúncio

Mais de tdc-globalcode (20)

PDF
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
PDF
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
PDF
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
PDF
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
PDF
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
PDF
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
PDF
TDC2019 Intel Software Day - Inferencia de IA em edge devices
PDF
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
PPT
Trilha .Net - Programacao funcional usando f#
PDF
TDC2018SP | Trilha Go - Case Easylocus
PDF
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
PDF
TDC2018SP | Trilha Go - Clean architecture em Golang
PDF
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
PDF
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
PDF
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
PDF
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
PDF
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
PDF
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
PDF
TDC2018SP | Trilha .Net - .NET funcional com F#
PDF
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
TDC2019 Intel Software Day - Visao Computacional e IA a servico da humanidade
TDC2019 Intel Software Day - Tecnicas de Programacao Paralela em Machine Lear...
TDC2019 Intel Software Day - ACATE - Cases de Sucesso
TDC2019 Intel Software Day - Otimizacao grafica com o Intel GPA
TDC2019 Intel Software Day - Deteccao de objetos em tempo real com OpenVino
TDC2019 Intel Software Day - OpenCV: Inteligencia artificial e Visao Computac...
TDC2019 Intel Software Day - Inferencia de IA em edge devices
Trilha BigData - Banco de Dados Orientado a Grafos na Seguranca Publica
Trilha .Net - Programacao funcional usando f#
TDC2018SP | Trilha Go - Case Easylocus
TDC2018SP | Trilha Modern Web - Para onde caminha a Web?
TDC2018SP | Trilha Go - Clean architecture em Golang
TDC2018SP | Trilha Go - "Go" tambem e linguagem de QA
TDC2018SP | Trilha Mobile - Digital Wallets - Seguranca, inovacao e tendencia
TDC2018SP | Trilha .Net - Real Time apps com Azure SignalR Service
TDC2018SP | Trilha .Net - Passado, Presente e Futuro do .NET
TDC2018SP | Trilha .Net - Novidades do C# 7 e 8
TDC2018SP | Trilha .Net - Obtendo metricas com TDD utilizando build automatiz...
TDC2018SP | Trilha .Net - .NET funcional com F#
TDC2018SP | Trilha .Net - Crie SPAs com Razor e C# usando Blazor em .Net Core
Anúncio

Último (20)

PPT
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
PPTX
Fronteiras e soberania..........................pptx
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PDF
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
PDF
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
DOC
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
PDF
edital-de-chamamento-publico-no-3-2025.pdf
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PPTX
AULA METodologia MODIFIC PART 1 MSC.pptx
PDF
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
PDF
Pecados desdenhados por muita gente (islamismo)
PDF
O retorno a origem (islã Islamismo)
PPSX
A epistemologia de Wilheim G Leibniz.ppsx
PPSX
4. A Cultura da Catedral - HistóriaCArtes .ppsx
PPT
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
PDF
Combate a Incêndio - Iluminação de Emergência e Sinalização de Segurança por ...
PPTX
norma regulamentadora numero vinte nr 20
PPT
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
PDF
Historia-da-Psicologia-Rumos-e-percursos.pdf
PDF
Historia da Gastronomia Mundial por Daianna Marques dos Santos
1ª Telefonia Fixa Padrao Novo Jailton 2012_22.ppt
Fronteiras e soberania..........................pptx
Uma Introdução às Ciências do Alcorão (Islam)
manual-orientacao-asb_5a8d6d8d87160aa636f63a5d0.pdf
Combate a Incêndio - Hidrantes,Mangotinhos, Mangueiras de Incêndio, Acessóri...
PPP 2024 (2) (2) feito EM REELABORAÇÃO MORENA ( ABRIL 2024).doc
edital-de-chamamento-publico-no-3-2025.pdf
NR11 - Treinamento Direcao Defensiva - 2023.pptx
AULA METodologia MODIFIC PART 1 MSC.pptx
Ebook - Matemática_Ensino_Médio_Saeb_V1.pdf
Pecados desdenhados por muita gente (islamismo)
O retorno a origem (islã Islamismo)
A epistemologia de Wilheim G Leibniz.ppsx
4. A Cultura da Catedral - HistóriaCArtes .ppsx
br-a-1692841480-passeio-pela-historia-da-arte-apresentacao-em-powerpoint_ver_...
Combate a Incêndio - Iluminação de Emergência e Sinalização de Segurança por ...
norma regulamentadora numero vinte nr 20
Elementos constituintes do esquema argumentativo (tese, argumento, tema, pont...
Historia-da-Psicologia-Rumos-e-percursos.pdf
Historia da Gastronomia Mundial por Daianna Marques dos Santos

TDC2016SP - Do Gameboy ao Zend Engine e avante!