TDC2016SP - Do Gameboy ao Zend Engine e avante!

103 visualizações

Publicada em

Do Gameboy ao Zend Engine e avante! (TRILHA PHP ARCHITECURE NA STADIUM)

Publicada em: Educação
  • Seja o primeiro a comentar

TDC2016SP - Do Gameboy ao Zend Engine e avante!

  1. 1. 2016 TDC DO GAMEBOY A ZEND VM E AVANTE
  2. 2. IT’S ME, BOB!
  3. 3. Level 1 - Motivação X 1
  4. 4. Cara, o que dá para fazer com PHP?
  5. 5. ?
  6. 6. Rasmus Lerdorf TIME 1994
  7. 7. I NEED TO DO A GUEST BOOK FOR MY WEBSITE TIME 1994
  8. 8. PERSONAL HOME PAGE TOOLS! TIME 1994
  9. 9. PHP = Scripts TIME 1994
  10. 10. PHP: Hypertext Preprocessor TIME 1997
  11. 11. PHP = Linguagem TIME 1997
  12. 12. vvsvvhvvrvv WebAbrangente
  13. 13. Praticamente tudo o que você queira fazer!
  14. 14. 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.
  15. 15. Python - 1991 Guido van Rossum Successor to the ABC language capable of exception handling and interfacing with the Amoeba operating system.
  16. 16. ECMAscript - 1995 Brendan Eich Netscape Standardized specification of a scripting language for browsers.
  17. 17. CAMPINAS SÃO PAULO
  18. 18. Projetos que gostei + game engine + websocket server + 3D printer + wifi booster + .. + .. + .. + js gameboy emulator + .. + .. + .. + ..
  19. 19. JavaScript GameBoy Emulator by Grant Galitz de 2010 suportava até IE era possível salvar emulava colorido perfeito!
  20. 20. vvvvvivvvvv Se alguém me falasse que existia um emulador de GameBoy em PHP, eu iria duvidar!
  21. 21. Um projeto desses vai inspirar as pessoas a programar o que gosta, e a ver o PHP com outros olhos.
  22. 22. Level 2 - Desafios X 1
  23. 23. Como vou renderizar o jogo?
  24. 24. ASCII
  25. 25. DRAWILLE
  26. 26. 8 pontos por caractere .. .. .. ..
  27. 27. DRAWILLE
  28. 28. GameBoy Hardware CPU 8-bit Sharp LR35902 4.19 MHz RAM / VIDEO RAM 8 kB DISPLAY 160 × 144 pixels
  29. 29. 0100-014F cartridge header 0100-0103 entry point 0134-0143 game title 0149 RAM size 014E-014F checksums
  30. 30. Tudo está na PAN DOCS bgb.bircd.org/ pandocs.txt
  31. 31. EXECUTÁVEL Conjunto de instruções Bytecode Cada instrução Opcode + Parâmeros A CPU do GameBoy tem quase 512 Opcodes
  32. 32. 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
  33. 33. 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
  34. 34. 0x03 INC BC 1 8 INC - Incrementa BC - Registro da CPU 1 - Tamanho da instrução (em bytes) 8 - Ciclos de CPU
  35. 35. Opcode.php Função opcode3 $core->registerB = (($temp_var >> 8) & 0xFF); $core->registerC = ($temp_var & 0xFF);
  36. 36. <?php while (true) { executeIteration(); runInterrupt(); updateCore(); } EMULAR UMA CPU = LOOP INFINITO
  37. 37. INTERRUPÇÕES LCD SOUND TIME JOYPAD SERIAL
  38. 38. 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);
  39. 39. O PHP NÃO TEM INT8 INT16 INT32
  40. 40. GRANDE PARTE DO CÓDIGO É EXECUTADA MILHARES DE VEZES!
  41. 41. XDEBUG PROFILING
  42. 42. TIME 03:00
  43. 43. RODOU!
  44. 44. Level 3 - PHP 7 X 1
  45. 45. MEMORY OPTIMIZATION Reduce number of allocations Reduce memory usage Reduce indirection
  46. 46. PHP 5
  47. 47. PHP 7
  48. 48. UM EMULADOR FUNCIONA QUASE DA MESMA FORMA QUE UMA MÁQUINA VIRTUAL
  49. 49. <?php $a = 1; <?php T_OPEN_TAG $a T_VARIABLE = 1 T_NUMBER LEXER
  50. 50. <?php T_OPEN_TAG $a T_VARIABLE = 1 T_NUMBER PARSER STMTS | ASSIGN / VAR 1 | $a
  51. 51. COMPILER STMTS | ASSIGN / VAR 1 | $a ASSIGN $a 1 RETURN 1
  52. 52. ZEND VM ASSIGN $a 1 RETURN 1
  53. 53. ZEND VM ASSIGN $a 1 RETURN 1 PHP BYTECODE OPCODE ARGS A ZENDVM TEM ~150 OPCODES
  54. 54. ZEND VM zend_vm_execute.h ZEND_API void execute_ex while (1) { … … … }
  55. 55. OTIMIZANDO AO EXTREMO <?php $a = 0; $a++; ASSIGN !0, 0 POST_INC ~2 !0 FREE ~2 RETURN 1
  56. 56. OTIMIZANDO AO EXTREMO <?php $a = 0; ++$a; ASSIGN !0, 0 PRE_INC !0 RETURN 1
  57. 57. PARA VER OS OPCODES DE FORMA PRÁTICA https://3v4l.org
  58. 58. v0.0.1 2 FPS v0.1.0 14 FPS
  59. 59. Level 4 - Repercussão X 1
  60. 60. Hey Pokemao, agora você já pode jogar no servidor do trampo!
  61. 61. LINT / PHP CS BUILD CORREÇÕES DE INGLÊS …
  62. 62. CONSEGUI! VAI BRASIL!
  63. 63. ZEREI A VIDA!
  64. 64. ZEREI A VIDA 2X!
  65. 65. hasegawatomoki/reading-php- terminalgameboyemulator
  66. 66. 1079 php-terminal-gameboy- emulator 9485 php-src 7939 composer 3115 doctrine2
  67. 67. 44986 facebook/react 18891 rg3/youtube-dl 13301 torvalds/linux
  68. 68. Level 5 - Futuro X 1
  69. 69. MELHORAR PHP-GUI LLVM <-> PHP EXTENSÕES EM PHP JIT PHP <-> PYPY PHP-SRC
  70. 70. Eu não sou DIFERENTE de vocês, apenas tive FOCO! Acredito que TODOS VOCÊS POSSUEM CAPACIDADE para FAZER projetos SUPER INCRÍVEIS.
  71. 71. MEU MUITO OBRIGADO DE CORAÇÃO! PHP
  72. 72. @GABRIELRCOUTO GITHUB.COM/ GABRIELRCOUTO joind.in/talk/2ffb5 TRABALHE COMIGO! CONTATO@MEMED.COM.BR MEMED PHPSP AAAAAAAAAAP

×