como programar melhor jogando game boy

120
2016 PHPSP+IMA COMO PROGRAMAR MELHOR JOGANDO GAME BOY

Upload: gabriel-rodrigues-couto

Post on 09-Jan-2017

71 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: Como programar melhor jogando game boy

2016 PHPSP+IMA

COMO PROGRAMAR

MELHOR JOGANDO

GAME BOY

Page 2: Como programar melhor jogando game boy

IT’S ME, BOB!

Page 3: Como programar melhor jogando game boy

BOB S2 PHP

Page 4: Como programar melhor jogando game boy
Page 5: Como programar melhor jogando game boy
Page 6: Como programar melhor jogando game boy

Cara, o que dá

para fazer com

PHP?

Page 7: Como programar melhor jogando game boy

?

Page 8: Como programar melhor jogando game boy

Level 1 - Motivação

X 1

Page 9: Como programar melhor jogando game boy

Praticamente

tudo o que você

queira fazer!

Page 10: Como programar melhor jogando game boy

Rasmus

Lerdorf

TIME

1994

Page 11: Como programar melhor jogando game boy

I NEED TO DO A

GUEST BOOK FOR

MY WEBSITE

TIME

1994

Page 12: Como programar melhor jogando game boy

PERSONAL HOME

PAGE TOOLS!

TIME

1994

Page 13: Como programar melhor jogando game boy

PHP = Scripts

TIME

1994

Page 14: Como programar melhor jogando game boy

PHP = Linguagem

TIME

1997

Page 15: Como programar melhor jogando game boy

PHP: Hypertext

Preprocessor

TIME

1997

Page 16: Como programar melhor jogando game boy

vvsvvhvvrvvWebAbrangente

Page 17: Como programar melhor jogando game boy

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 18: Como programar melhor jogando game boy

ECMAscript - 1995

Brendan Eich

Netscape

Standardized

specification of a

scripting language

for browsers.

Page 19: Como programar melhor jogando game boy

CAMPINAS

SÃO PAULO

Page 20: Como programar melhor jogando game boy
Page 21: Como programar melhor jogando game boy

Projetos que gostei

+game engine

+websocket server

+3D printer

+wifi booster

+..

+..

+..

+js gameboy emulator

+..

+..

+..

+..

Page 22: Como programar melhor jogando game boy

JavaScript GameBoy

Emulator

by Grant Galitz

de 2010

suportava até IE

era possível salvar

emulava colorido

perfeito!

Page 23: Como programar melhor jogando game boy

vvvvvivvvvv

Se alguém me falasse

que existia um

emulador de Game Boy

em PHP, eu iria

duvidar!

Page 24: Como programar melhor jogando game boy

Um projeto desses

vai inspirar as

pessoas a programar o

que gostam, e a ver o

PHP com outros olhos.

Page 25: Como programar melhor jogando game boy

Level 2 - Desafios

X 1

Page 26: Como programar melhor jogando game boy

Como vou renderizar

o jogo?

Page 27: Como programar melhor jogando game boy

ASCII

Page 28: Como programar melhor jogando game boy

DRAWILLE

Page 29: Como programar melhor jogando game boy

8 pontos por

caractere

..

..

..

..

Page 30: Como programar melhor jogando game boy

DRAWILLE

Page 31: Como programar melhor jogando game boy

GameBoy Hardware

CPU

8-bit Sharp LR35902

4.19 MHz

RAM / VIDEO RAM

8 kB

DISPLAY

160 × 144 pixels

Page 32: Como programar melhor jogando game boy

Tudo está na

PAN DOCS

bgb.bircd.org/

pandocs.txt

Page 33: Como programar melhor jogando game boy

0100-014F

cartridge header

0100-0103 entry point

0134-0143 game title

0149 RAM size

014E-014F checksums

Page 34: Como programar melhor jogando game boy

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: Como programar melhor jogando game boy

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: Como programar melhor jogando game boy

EXECUTÁVEL

Conjunto de instruções

Bytecode

Cada instrução

Opcode + Parâmeros

A CPU do GameBoy tem

quase 512 Opcodes

Page 37: Como programar melhor jogando game boy

0x03

INC BC

1 8

INC - Incrementa

BC - Registro da CPU

1 - Tamanho da

instrução (em bytes)

8 - Ciclos de CPU

Page 38: Como programar melhor jogando game boy

Opcode.php

Função opcode3

$core->registerB =

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

$core->registerC =

($temp_var & 0xFF);

Page 39: Como programar melhor jogando game boy

<?php

while (true) {

executeIteration();

runInterrupt();

updateCore();

}

EMULAR UMA CPU

=

LOOP INFINITO

Page 40: Como programar melhor jogando game boy

INTERRUPÇÕES

LCD

SOUND

TIME

JOYPAD

SERIAL

Page 41: Como programar melhor jogando game boy

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 42: Como programar melhor jogando game boy

Core.php

drawSpritesForLine($line)

$spriteX = (0xFF & $this-

>memory[0xFE00 + $oamIx--])

- 8;

$spriteY = (0xFF & $this-

>memory[0xFE00 + $oamIx--])

- 16;

drawPartBgSprite();

drawPartFgSprite();

Page 43: Como programar melhor jogando game boy

TIME

03:00

Page 44: Como programar melhor jogando game boy

RODOU!

Page 45: Como programar melhor jogando game boy

Level 3 - Aprendizado

X 1

Page 46: Como programar melhor jogando game boy

O PHP NÃO TEM INT8/

INT16/INT32 E ISSO FAZ

FALTA

Page 47: Como programar melhor jogando game boy

PHP 7

MEMORY OPTIMIZATION

Reduce number of

allocations

Reduce memory usage

Reduce indirection

Page 48: Como programar melhor jogando game boy

PHP 5

Page 49: Como programar melhor jogando game boy

PHP 7

Page 50: Como programar melhor jogando game boy

UM EMULADOR

FUNCIONA QUASE

DA MESMA FORMA QUE

UM INTERPRETADOR

Page 51: Como programar melhor jogando game boy

GRANDE PARTE DO

CÓDIGO É EXECUTADA

MILHARES DE VEZES!

Page 52: Como programar melhor jogando game boy

XDEBUG PROFILING

Page 53: Como programar melhor jogando game boy

<?php

$a = 1;

ASSIGN $a 1

RETURN 1

LEXER/PARSER/COMPILER

Page 54: Como programar melhor jogando game boy

ZEND VM

zend_vm_execute.h

ZEND_API void execute_ex

while (1) {

}

Page 55: Como programar melhor jogando game boy

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

$a++;

ASSIGN !0, 0

POST_INC ~2 !0

FREE ~2

RETURN 1

Page 56: Como programar melhor jogando game boy

OTIMIZANDO AO EXTREMO

<?php

$a = 0;

++$a;

ASSIGN !0, 0

PRE_INC !0

RETURN 1

Page 57: Como programar melhor jogando game boy

OTIMIZANDO AO EXTREMO

Use o que o PHP te permite

fazer!

Opcode::run($this, 0x76);

$function = 'opcode'.$address;

return Opcode:$function($core);

Opcode::{‘opcode'.$op}($this);

Page 58: Como programar melhor jogando game boy

PARA VER OS OPCODES

DE FORMA PRÁTICA

https://3v4l.org

Page 59: Como programar melhor jogando game boy

v0.0.1

2 FPS

v0.1.0

14 FPS

Page 60: Como programar melhor jogando game boy

Level 4 - Repercussão

X 1

Page 61: Como programar melhor jogando game boy

Hey Pokemao, agora

você já pode jogar no

servidor do trampo!

Page 62: Como programar melhor jogando game boy
Page 63: Como programar melhor jogando game boy
Page 64: Como programar melhor jogando game boy
Page 65: Como programar melhor jogando game boy
Page 66: Como programar melhor jogando game boy
Page 67: Como programar melhor jogando game boy
Page 68: Como programar melhor jogando game boy
Page 69: Como programar melhor jogando game boy

.gitignore

vendor/

Page 70: Como programar melhor jogando game boy

This is important

because the install

command checks if a

lock file is present,

and if it is, it

downloads the versions

specified there

(regardless of what

composer.json says).

Page 71: Como programar melhor jogando game boy
Page 72: Como programar melhor jogando game boy
Page 73: Como programar melhor jogando game boy

LINT / PHP CS

BUILD

CORREÇÕES DE INGLÊS

Page 74: Como programar melhor jogando game boy

.travis.yml

language: php

php:

- 5.6

- 7.0

script:

- bin/phing

Page 75: Como programar melhor jogando game boy

build.xml

<phingCall target="phplint" />

<phingCall target="phpunit" />

<phingCall target="phpcs" />

Page 76: Como programar melhor jogando game boy
Page 77: Como programar melhor jogando game boy
Page 78: Como programar melhor jogando game boy
Page 79: Como programar melhor jogando game boy
Page 80: Como programar melhor jogando game boy
Page 81: Como programar melhor jogando game boy
Page 82: Como programar melhor jogando game boy
Page 83: Como programar melhor jogando game boy
Page 84: Como programar melhor jogando game boy
Page 85: Como programar melhor jogando game boy
Page 86: Como programar melhor jogando game boy
Page 87: Como programar melhor jogando game boy
Page 88: Como programar melhor jogando game boy

CONSEGUI!

VAI BRASIL!

Page 89: Como programar melhor jogando game boy
Page 90: Como programar melhor jogando game boy

ZEREI A VIDA!

Page 91: Como programar melhor jogando game boy
Page 92: Como programar melhor jogando game boy

GC = Garbage

Collection

PHP 7

Strings/Arrays/Objetos

zend.enable_gc = 0

Page 93: Como programar melhor jogando game boy

"when you create a lot

of objects that should

stay in memory. So GC

can't clean them up

and just wasting CPU

time."

O Composer já teve

problemas com isso.

Page 94: Como programar melhor jogando game boy
Page 95: Como programar melhor jogando game boy
Page 96: Como programar melhor jogando game boy

ZEREI A VIDA 2X!

Page 97: Como programar melhor jogando game boy
Page 98: Como programar melhor jogando game boy
Page 99: Como programar melhor jogando game boy

hasegawatomoki/reading-php-

terminalgameboyemulator

Page 100: Como programar melhor jogando game boy
Page 101: Como programar melhor jogando game boy

1107

php-terminal-gameboy-

emulator

9773

php-src

8097

composer

3188

doctrine2

Page 102: Como programar melhor jogando game boy

47518

facebook/react

19678

rg3/youtube-dl

35013

torvalds/linux

Page 103: Como programar melhor jogando game boy

Level 5 - Futuro

X 1

Page 104: Como programar melhor jogando game boy
Page 105: Como programar melhor jogando game boy

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 106: Como programar melhor jogando game boy

MEU MUITO OBRIGADO

DE CORAÇÃO!

PHP

Page 107: Como programar melhor jogando game boy

@GABRIELRCOUTO

GITHUB.COM/

GABRIELRCOUTO

joind.in/talk/32aa5

TRABALHE COMIGO!

[email protected]

MEMED PHPSPAAAAAAAAAAP

Page 108: Como programar melhor jogando game boy

Level Bônus

X 9999999999

overflow

Page 109: Como programar melhor jogando game boy
Page 110: Como programar melhor jogando game boy
Page 111: Como programar melhor jogando game boy
Page 112: Como programar melhor jogando game boy
Page 113: Como programar melhor jogando game boy
Page 114: Como programar melhor jogando game boy
Page 115: Como programar melhor jogando game boy
Page 116: Como programar melhor jogando game boy
Page 117: Como programar melhor jogando game boy
Page 118: Como programar melhor jogando game boy
Page 119: Como programar melhor jogando game boy
Page 120: Como programar melhor jogando game boy

AS ESTRELAS DESSE

PROJETO,

SÃO VOCÊS

OBRIGADO POR FAZER

PARTE!