SlideShare a Scribd company logo
1 of 108
Download to read offline
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
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.
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 PHPSP
AAAAAAAAAAP

More Related Content

Viewers also liked

Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics Trade
Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics TradeTechnical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics Trade
Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics TradeOptics-Trade
 
Animal endangerment
Animal endangermentAnimal endangerment
Animal endangermentBledar Isaku
 
EWO COURSE rms_image
EWO COURSE rms_imageEWO COURSE rms_image
EWO COURSE rms_imageAmy Forza
 
Melhorando seu código com Law of Demeter e Tell don't ask
Melhorando seu código com Law of Demeter e Tell don't askMelhorando seu código com Law of Demeter e Tell don't ask
Melhorando seu código com Law of Demeter e Tell don't askNelson Senna do Amaral
 
TIM beta no Prêmio Big Think 2014
TIM beta no Prêmio Big Think 2014TIM beta no Prêmio Big Think 2014
TIM beta no Prêmio Big Think 2014Fabiano Coura
 
Plano de Comunicação Integrada de Marketing Three Cool Cats
Plano de Comunicação Integrada de Marketing Three Cool CatsPlano de Comunicação Integrada de Marketing Three Cool Cats
Plano de Comunicação Integrada de Marketing Three Cool CatsEarle Martins
 
Baterijski sistem paljenje
Baterijski sistem paljenjeBaterijski sistem paljenje
Baterijski sistem paljenjeigoriv
 
Zulfiquar Class Frigates
Zulfiquar Class FrigatesZulfiquar Class Frigates
Zulfiquar Class Frigateshindujudaic
 
Ugradnja i izgradnja pokretnih delova motora
Ugradnja i izgradnja pokretnih delova motoraUgradnja i izgradnja pokretnih delova motora
Ugradnja i izgradnja pokretnih delova motoraigoriv
 
無から入稿まで教えます!Illustratorを使って名刺を作ろう
無から入稿まで教えます!Illustratorを使って名刺を作ろう無から入稿まで教えます!Illustratorを使って名刺を作ろう
無から入稿まで教えます!Illustratorを使って名刺を作ろうschoowebcampus
 
Verbalna i neverbalna komunikacija
Verbalna i neverbalna komunikacijaVerbalna i neverbalna komunikacija
Verbalna i neverbalna komunikacijaMilan Rakić
 

Viewers also liked (15)

Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics Trade
Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics TradeTechnical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics Trade
Technical data ARMASIGHT NYX14 PRO FLAG NV Monocular | Optics Trade
 
Animal endangerment
Animal endangermentAnimal endangerment
Animal endangerment
 
EWO COURSE rms_image
EWO COURSE rms_imageEWO COURSE rms_image
EWO COURSE rms_image
 
CMO Brochure
CMO BrochureCMO Brochure
CMO Brochure
 
Communication strategy
Communication strategyCommunication strategy
Communication strategy
 
Melhorando seu código com Law of Demeter e Tell don't ask
Melhorando seu código com Law of Demeter e Tell don't askMelhorando seu código com Law of Demeter e Tell don't ask
Melhorando seu código com Law of Demeter e Tell don't ask
 
TIM beta no Prêmio Big Think 2014
TIM beta no Prêmio Big Think 2014TIM beta no Prêmio Big Think 2014
TIM beta no Prêmio Big Think 2014
 
Big Data Journey
Big Data JourneyBig Data Journey
Big Data Journey
 
Vrste motora (2)
Vrste motora (2)Vrste motora (2)
Vrste motora (2)
 
Plano de Comunicação Integrada de Marketing Three Cool Cats
Plano de Comunicação Integrada de Marketing Three Cool CatsPlano de Comunicação Integrada de Marketing Three Cool Cats
Plano de Comunicação Integrada de Marketing Three Cool Cats
 
Baterijski sistem paljenje
Baterijski sistem paljenjeBaterijski sistem paljenje
Baterijski sistem paljenje
 
Zulfiquar Class Frigates
Zulfiquar Class FrigatesZulfiquar Class Frigates
Zulfiquar Class Frigates
 
Ugradnja i izgradnja pokretnih delova motora
Ugradnja i izgradnja pokretnih delova motoraUgradnja i izgradnja pokretnih delova motora
Ugradnja i izgradnja pokretnih delova motora
 
無から入稿まで教えます!Illustratorを使って名刺を作ろう
無から入稿まで教えます!Illustratorを使って名刺を作ろう無から入稿まで教えます!Illustratorを使って名刺を作ろう
無から入稿まで教えます!Illustratorを使って名刺を作ろう
 
Verbalna i neverbalna komunikacija
Verbalna i neverbalna komunikacijaVerbalna i neverbalna komunikacija
Verbalna i neverbalna komunikacija
 

Similar to Do gameboy a zend vm e avante

Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosiMasters
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVmulder3
 
Como Fazer Seu Próprio Gameboy - CPBR11
Como Fazer Seu Próprio Gameboy -  CPBR11Como Fazer Seu Próprio Gameboy -  CPBR11
Como Fazer Seu Próprio Gameboy - CPBR11Rafael Moreira
 
Processador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesProcessador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesCarlos Pereira
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Thiago Fortunato
 
Criando um sistema operacional básico
Criando um sistema operacional básicoCriando um sistema operacional básico
Criando um sistema operacional básicoVHC Informatica
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Intel Software Brasil
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!Luciano Palma
 
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Filipo Mór
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginasMikeNandes
 
Como Fazer Seu Próprio Gameboy - SpACE UNIFEI
Como Fazer Seu Próprio Gameboy -  SpACE UNIFEIComo Fazer Seu Próprio Gameboy -  SpACE UNIFEI
Como Fazer Seu Próprio Gameboy - SpACE UNIFEIRafael Moreira
 
Conceitos Básicos INSS 2015
Conceitos Básicos INSS 2015Conceitos Básicos INSS 2015
Conceitos Básicos INSS 2015Veonaprovalogo
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceRicardo Rufino
 
Instalação e Configuração do Hipervisor xen pvm
Instalação e Configuração do Hipervisor xen pvmInstalação e Configuração do Hipervisor xen pvm
Instalação e Configuração do Hipervisor xen pvmFernando Pessoa
 
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPPHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPAryel Tupinambá
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoSamir Siqueira
 
Fundamentos de Informática Gráfica
Fundamentos de Informática Gráfica Fundamentos de Informática Gráfica
Fundamentos de Informática Gráfica Carlos Campani
 

Similar to Do gameboy a zend vm e avante (20)

Backend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana ArnosBackend performático além do "coloca mais máquina lá" - Diana Arnos
Backend performático além do "coloca mais máquina lá" - Diana Arnos
 
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTVDesenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
Desenvolvimento de Aplicacoes de TV interactiva na plataforma MEO IPTV
 
Raspberry pi - Dicas e truques
Raspberry pi - Dicas e truquesRaspberry pi - Dicas e truques
Raspberry pi - Dicas e truques
 
Como Fazer Seu Próprio Gameboy - CPBR11
Como Fazer Seu Próprio Gameboy -  CPBR11Como Fazer Seu Próprio Gameboy -  CPBR11
Como Fazer Seu Próprio Gameboy - CPBR11
 
Processador CISC RISC SET de instruções
Processador CISC RISC SET de instruçõesProcessador CISC RISC SET de instruções
Processador CISC RISC SET de instruções
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
Seminário de Sistemas Embarcados - Análise sobre Super Nintendo e PlayStation 4
 
Criando um sistema operacional básico
Criando um sistema operacional básicoCriando um sistema operacional básico
Criando um sistema operacional básico
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
FISL14: Como domar uma fera de 1 TFlop que cabe na palma da sua mão!
 
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
Curso "Desenvolvendo aplicações de uso geral para GPU com CUDA".
 
Assembly para pc-25paginas
Assembly para pc-25paginasAssembly para pc-25paginas
Assembly para pc-25paginas
 
Como Fazer Seu Próprio Gameboy - SpACE UNIFEI
Como Fazer Seu Próprio Gameboy -  SpACE UNIFEIComo Fazer Seu Próprio Gameboy -  SpACE UNIFEI
Como Fazer Seu Próprio Gameboy - SpACE UNIFEI
 
Conceitos Básicos INSS 2015
Conceitos Básicos INSS 2015Conceitos Básicos INSS 2015
Conceitos Básicos INSS 2015
 
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDeviceHackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
Hackeando um SmartBOX (com android) e instalando Linux & JAVA & OpenDevice
 
Instalação e Configuração do Hipervisor xen pvm
Instalação e Configuração do Hipervisor xen pvmInstalação e Configuração do Hipervisor xen pvm
Instalação e Configuração do Hipervisor xen pvm
 
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHPPHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
PHP Conference 2017 - Processamento avançado de vídeos com FFmpeg e PHP
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Fundamentos de Informática Gráfica
Fundamentos de Informática Gráfica Fundamentos de Informática Gráfica
Fundamentos de Informática Gráfica
 

More from Gabriel Rodrigues Couto

More from Gabriel Rodrigues Couto (7)

Virei CTO, e agora?
Virei CTO, e agora?Virei CTO, e agora?
Virei CTO, e agora?
 
Micro Front-end + CQRS/ES - JSSP jul/2019
Micro Front-end + CQRS/ES - JSSP jul/2019Micro Front-end + CQRS/ES - JSSP jul/2019
Micro Front-end + CQRS/ES - JSSP jul/2019
 
PHP Experience 2018 - Blockchain e PHP
PHP Experience 2018 - Blockchain e PHPPHP Experience 2018 - Blockchain e PHP
PHP Experience 2018 - Blockchain e PHP
 
Inteligência artificial e redes neurais em PHP
Inteligência artificial e redes neurais em PHPInteligência artificial e redes neurais em PHP
Inteligência artificial e redes neurais em PHP
 
Como programar melhor jogando game boy
Como programar melhor jogando game boyComo programar melhor jogando game boy
Como programar melhor jogando game boy
 
Bitcoin explicado por um minerador
Bitcoin explicado por um mineradorBitcoin explicado por um minerador
Bitcoin explicado por um minerador
 
around.me
around.mearound.me
around.me
 

Do gameboy a zend vm e avante