View
509
Download
0
Category
Preview:
Citation preview
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
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
Recommended