SlideShare una empresa de Scribd logo
1 de 209
Emulating with
  JavaScript

    new Cpu;
WHOAMI
WHOAMI

• Alexander Dickson
WHOAMI

• Alexander Dickson
• @alexdickson
WHOAMI

• Alexander Dickson
• @alexdickson
• Not an emulation expert
WHOAMI

• Alexander Dickson
• @alexdickson
• Not an emulation expert
• JavaScript developer at Atlassian
WHOAMI

• Alexander Dickson
• @alexdickson
• Not an emulation expert
• JavaScript developer at Atlassian

                                  ;
JavaScript today
JavaScript today

• Fast
JavaScript today

• Fast
• Browser APIs are awesome
JavaScript today

• Fast
• Browser APIs are awesome
• Inputs and outputs are awesome
What we have
What we have

• Canvas Element
What we have

• Canvas Element
• Web Audio API
What we have

• Canvas Element
• Web Audio API
• GamePad API
What we have

• Canvas Element
• Web Audio API
• GamePad API
• Typed Arrays
What we have

• Canvas Element
• Web Audio API
• GamePad API
• Typed Arrays
• requestAnimationFrame()
What we don’t have
What we don’t have


• Sane implementations
What we don’t have


• Sane implementations
• Just kidding, but some are better than
  others
What we can build
What we can build


• Lots of awesome, practical stuff...
What we can build


• Lots of awesome, practical stuff...
• ...or, emulate hardware, such as gaming
  consoles.
Why?
Why?




Because we can!
What is an
emulator?
What is an
                  emulator?

  In computing, an emulator is hardware or software or both that
  duplicates (or emulates) the functions of a first computer system (the
  guest) in a different second computer system (the host), so that the
  emulated behaviour closely resembles the behaviour of the real
  system.

http://en.wikipedia.org/wiki/Emulator
What can be emulated
What can be emulated


• Church-Turing thesis
What can be emulated


• Church-Turing thesis
• Any system can be emulated
Implementations
Implementations




• Interpreter
Implementations




• Interpreter
• Dynamic Re-compilation
Implementations




• Interpreter
• Dynamic Re-compilation
• Static Re-compilation
Shhhh...
Shhhh...

• Emulation can sometimes be a bit shaky
  from a legal perspective.
Shhhh...

• Emulation can sometimes be a bit shaky
  from a legal perspective.
• Emulate at your own risk and always use
  free programs.
Shhhh...

• Emulation can sometimes be a bit shaky
  from a legal perspective.
• Emulate at your own risk and always use
  free programs.
Where to start

      CPU
Where to start

• Pick a system, anyCPU
                     system
Where to start

• Pick a system, anyCPU
                     system
• Discover its components
Where to start

• Pick a system, anyCPU
                      system
• Discover its components
• Find technical information on how
  components work
Chip8
Chip8 is Easy
Chip8 is Easy

• Simple CPU implementation
Chip8 is Easy

• Simple CPU implementation
• Simple graphics
Chip8 is Easy

• Simple CPU implementation
• Simple graphics
• Fixed audio sample
Demo Time
Example System
Nintendo Entertainment System
Nintendo Entertainment System


• Custom 6502 CPU
Nintendo Entertainment System


• Custom 6502 CPU
• 2KiB onboard RAM, 2KiB video RAM, 256B
  OAM RAM, 28B palette RAM
Nintendo Entertainment System


• Custom 6502 CPU
• 2KiB onboard RAM, 2KiB video RAM, 256B
  OAM RAM, 28B palette RAM
• Custom-made PPU
Nintendo Entertainment System


• Custom 6502 CPU
• 2KiB onboard RAM, 2KiB video RAM, 256B
  OAM RAM, 28B palette RAM
• Custom-made PPU
• 5 sound channels
Nintendo Entertainment System


• Custom 6502 CPU
• 2KiB onboard RAM, 2KiB video RAM, 256B
  OAM RAM, 28B palette RAM
• Custom-made PPU
• 5 sound channels
• Awesome rectangular controllers
Von-Neumann
 Architecture

CPU                 Memory


        Bus



      Peripherals
CPU
CPU

• Basically a loop
CPU

• Basically a loop
• Read operation codes (opcodes) from
  memory, processes them
CPU

• Basically a loop
• Read operation codes (opcodes) from
  memory, processes them
• Opcodes mostly operate on registers
6502
6502
•   Ricoh 2A03/2A07, customised 6502 w/ audio w/
    gamepad w/o BCD
6502
•   Ricoh 2A03/2A07, customised 6502 w/ audio w/
    gamepad w/o BCD

•   8 bit processor w/ 16 bit address bus
6502
•   Ricoh 2A03/2A07, customised 6502 w/ audio w/
    gamepad w/o BCD

•   8 bit processor w/ 16 bit address bus

•   1-2MHz clock speed
6502
•   Ricoh 2A03/2A07, customised 6502 w/ audio w/
    gamepad w/o BCD

•   8 bit processor w/ 16 bit address bus

•   1-2MHz clock speed

•   http://www.6502.org/documents/datasheets/
    rockwell/
// Customised 6502 CPU
Nes.Cpu = function() {
    this.registers = {
        // Program Counter (16bit)
        pc: null,
        // Stack Pointer (8bit)
        sp: null,
        // Accumulator (8bit)
        a: null,
        // Index X (8bit)
        x: null,
        // Index Y (8bit)
        y: null,
        // Processor Status,
        p: null
    };
	 // ...
    this.reset();
};
Memory
Memory


• Contiguous block of data
Memory


• Contiguous block of data
• ROM (readable)/RAM (readable/writable)
NES Memory
NES Memory
• 2KiB onboard
NES Memory
• 2KiB onboard
• Internally stored zero-page, stack, general
  purpose memory
NES Memory
• 2KiB onboard
• Internally stored zero-page, stack, general
  purpose memory
• Addressable up to 0x10000
NES Memory
• 2KiB onboard
• Internally stored zero-page, stack, general
  purpose memory
• Addressable up to 0x10000
• Program ROM contain opcodes, graphics
  and sound
Typed Arrays
Typed Arrays

• TypedArrays help performance critical
  applications such as emulators
Typed Arrays

• TypedArrays help performance critical
  applications such as emulators
• Makes it trivial to reach any specified offset
Typed Arrays

• TypedArrays help performance critical
  applications such as emulators
• Makes it trivial to reach any specified offset
• http://www.khronos.org/registry/
  typedarray/specs/latest/
Nes.Cpu = function() {
	 // ...
	 // Our device has 2KiB of RAM.
	 var memoryBuffer = new ArrayBuffer(0x800);
	 // 6502 is a 8 bit processor, able
	 // to address 8 bits at once.
	 this.memory = new Uint8Array(memory);
	 // ...
};
Need Getters/Setters



Memory is mapped everywhere, so you need to
delegate reads and writes to different areas.
Fetch/Decode Loop
Fetch/Decode Loop


• Check for interrupts
Fetch/Decode Loop


• Check for interrupts
• Read memory at PC
Fetch/Decode Loop


• Check for interrupts
• Read memory at PC
• Decode addressing mode
Fetch/Decode Loop


• Check for interrupts
• Read memory at PC
• Decode addressing mode
• Process opcode
Interrupts
Interrupts

• Special signal that interrupts normal
  execution
Interrupts

• Special signal that interrupts normal
  execution
• Loads special address into PC and executes
  it
Nes.Cpu = function() {
	 // ...
	 // Interrupt Types.
	 this.interruptTypes = {
	 	 NMI: 0
	 	 // ...
	 };
	 // Current Interrupt.
	 this.interrupt = null;
	 // ...
};

Nes.Cpu.prototype.emulateCycle = function() {
	 if (this.interrupt != null) {
	 	 switch (this.interrupt) {
	 	 	 // Non-Maskable
	 	 	 case this.interruptTypes.NMI:
	 	 	 	 this.handleNmi();
	 	 	 	 break;
	 	 	 // ...
	 	 }
	 }
	 // ...
};
Slow
Nes.Cpu.prototype.emulateCycle = function() {
    this.interrupt != null &&
    this["handle" +
         (["nmi", "irq", "reset"]
           .filter(function(type, index) {
               return index == this.interrupt;
           })[0])
        ]();
    // ...
};
Handling Opcodes
Handling Opcodes

• Read location in PC from memory
Handling Opcodes

• Read location in PC from memory
• Lookup opcode
Handling Opcodes

• Read location in PC from memory
• Lookup opcode
• Find addressing mode
Handling Opcodes

• Read location in PC from memory
• Lookup opcode
• Find addressing mode
• Process opcode
Handling Opcodes

• Read location in PC from memory
• Lookup opcode
• Find addressing mode
• Process opcode
• Increment PC
Cpu.prototype.emulateCycle = function() {
	 // ...
	 // Get opcode at PC.
	 var opcode = this.getOpcode(this.loadMemory(this.pc));
	 var address;
	
	 // Get final address via addressing mode of opcode.
	 switch (opcode.addressingMode) {
	 	 // Zero Page
	 	 // Uses a single operand which address
	 	 // memory in zero page (0x0000-0x00FF).
	 	 case this.addressingModes.ZERO_PAGE:
	 	 	 address = this.loadMemory(this.pc + 1);
	 	 	 break;
	 }
	
	 this.pc += opcode.bytes;
	 // ...
};
Process All The Opcodes
Process All The Opcodes


• Read technical paper twice, implement
  once
Process All The Opcodes


• Read technical paper twice, implement
  once
• Debugging is hard, so get it right
Process All The Opcodes


• Read technical paper twice, implement
  once
• Debugging is hard, so get it right
• When you don’t get it right, try again
Nes.Cpu.prototype.emulateCycle = function() {
	 // ...
	 switch (opcode.type) {
	 	 // JMP
	 	 // Jump to location.
	 	 case this.operands.JMP:
	 	 	 this.pc = address;
	 	 	 break;
	 }
	 // ...
};
PPU
PPU


• Generates video signals from memory
PPU


• Generates video signals from memory
• Handles sprites, scrolling, colours
RP2C02
RP2C07
RP2C02
              RP2C07

• Different chip for NTSC/PAL
RP2C02
              RP2C07

• Different chip for NTSC/PAL
• 2KiB RAM
RP2C02
              RP2C07

• Different chip for NTSC/PAL
• 2KiB RAM
• 8x8 or 8x16 sprites
RP2C02
              RP2C07

• Different chip for NTSC/PAL
• 2KiB RAM
• 8x8 or 8x16 sprites
• Resolution of 256x240
Communicating with your PPU
Communicating with your PPU



• 0x2000-0x2007 on CPU memory map to
  PPU’s registers
Communicating with your PPU



• 0x2000-0x2007 on CPU memory map to
  PPU’s registers
• 8x8 or 8x16 pixel tiles, accessed on
  program ROM
Colour Palette

• 52 colours available
• 2 palettes, 16b each, image and sprite
• Can use 25 colours at once on screen
TileS
TileS

• Each 8x8 tile occupies 16b
TileS

• Each 8x8 tile occupies 16b
• Position of bit denotes position of pixel
TileS

• Each 8x8 tile occupies 16b
• Position of bit denotes position of pixel
• First 8 bits combine with second 8 bits
TileS

• Each 8x8 tile occupies 16b
• Position of bit denotes position of pixel
• First 8 bits combine with second 8 bits
• Combine bits to get colour index
Anatomy of a tile
  1   1   1   1   1   1   1   1

  1   1   1   1   1   1   1   1

  1   1   0   1   1   0   0   1

  1   1   0   1   0   1   1   1

  1   1   0   1   1   0   1   1

  1   1   0   1   1   1   0   1

  1   0   0   1   0   0   1   1

  1   1   1   1   1   1   1   1
Anatomy of a tile
  1   1   1    1      1     1   1   1

  1   1   1    1      1     1   1   1

  1   1   0    1      1     0   0   1

  1   1   0    1      0     1   1   1

  1   1   0    1      1     0   1   1

  1   1   0    1      1     1   0   1

  1   0   0    1      0     0   1   1

  1   1   1    1      1     1   1   1


              (simplified)
Nametables
Nametables


• Bytes which index pattern table
Nametables


• Bytes which index pattern table
• 32 horizontal and 30 vertical tiles, 960 tiles
Nametables


• Bytes which index pattern table
• 32 horizontal and 30 vertical tiles, 960 tiles
• 1KiB long, delta contains extra colour
  information
Nothing is wasted
Nothing is wasted
• Remaining 64b stores extra colour
  information (attribute bytes)
Nothing is wasted
• Remaining 64b stores extra colour
  information (attribute bytes)
• Attribute bytes map to 16 tiled blocks of
  nametable (64 32x32 pixel tiles)
Nothing is wasted
• Remaining 64b stores extra colour
  information (attribute bytes)
• Attribute bytes map to 16 tiled blocks of
  nametable (64 32x32 pixel tiles)
• Each of these blocks is sub-blocked into 4
  tiles (4 16x16 pixel tiles)
Nothing is wasted
• Remaining 64b stores extra colour
  information (attribute bytes)
• Attribute bytes map to 16 tiled blocks of
  nametable (64 32x32 pixel tiles)
• Each of these blocks is sub-blocked into 4
  tiles (4 16x16 pixel tiles)
• Sub blocks affected by 2 bits from attribute
  bytes
Put it all together
  0. 1    0    1    1 0 0 1 1
  8. 0    0    1    0 1 0 0 1
960. 1    1    0    0 0 0 1 1
=============================
     1110 1100 0011 ...
=============================
Put it all together
  0. 1    0    1    1 0 0 1 1
  8. 0    0    1    0 1 0 0 1
960. 1    1    0    0 0 0 1 1
=============================
     1110 1100 0011 ...
=============================
Put it all together
  0. 1    0    1    1 0 0 1 1
  8. 0    0    1    0 1 0 0 1
960. 1    1    0    0 0 0 1 1
=============================
     1110 1100 0011 ...
=============================
Put it all together
  0. 1    0    1    1 0 0 1 1
  8. 0    0    1    0 1 0 0 1
960. 1    1    0    0 0 0 1 1
=============================
     1110 1100 0011 ...
=============================
// Byte   at offset 0.
var a =   0xB3;
// Byte   at offset 8.
var b =   0x29;
// Byte   at offset 960.
var c =   0xC3;

var merged = (a & 0x80) >> 0x6;
merged |= b >> 0x7;
merged |= (c & 0x3) << 0x2;
Scratching the surface
Scratching the surface



• There is a whole lot more going on
Scratching the surface



• There is a whole lot more going on
• http://wiki.nesdev.com/w/index.php/PPU
Full Screen API
Full Screen API

• Look ma, no chrome
Full Screen API

• Look ma, no chrome
• Still want Chrome for performance
Full Screen API

• Look ma, no chrome
• Still want Chrome for performance
• https://developer.mozilla.org/en-US/docs/
  DOM/Using_fullscreen_mode
var goFullScreen = (function() {
    // Polyfills for cross browser support.
    return function(element, callback) {
        typeof callback != "function" && (callback = function() {});
        var requestFullScreen = getFullScreenMethod(element);

         if (requestFullScreen) {
             requestFullScreen = requestFullScreen.call(element);
         } else {
             return false;
         }

         document.addEventListener(fullScreenEvent, function() {
             callback.call(this, getFullScreenElement());
         });
    };
})();
Demo Time
Sound
Sound
• Vibration of air
Sound
• Vibration of air
• Represented as waves w/ freq. and
  amplitude
Sound
• Vibration of air
• Represented as waves w/ freq. and
  amplitude
• Frequency is number of phase changes per
  second
Sound
• Vibration of air
• Represented as waves w/ freq. and
  amplitude
• Frequency is number of phase changes per
  second
• Amplitude is volume of the wave measured
  in dB
NES Sound
NES Sound

• 5 sound channels
NES Sound

• 5 sound channels
• 2 pulse wave channels of variable duty cycle
NES Sound

• 5 sound channels
• 2 pulse wave channels of variable duty cycle
• 16 volume levels
NES Sound

• 5 sound channels
• 2 pulse wave channels of variable duty cycle
• 16 volume levels
• Pitch bending
APU
APU

• APU registers mapped to CPU memory
  starting at 0x4000
APU

• APU registers mapped to CPU memory
  starting at 0x4000
• 2 pulse-wave channels, 1 triangle-wave
  channel, 1 random-wave channel and 1
  digital channel
PULSE Wave
0x4000. 1011 1111


0x4002. 0001 0111


0x4003. 0000 0001
PULSE Wave
0x4000. 1011 1111   Volume



0x4002. 0001 0111


0x4003. 0000 0001
PULSE Wave
0x4000. 1011 1111      Volume



                    Low order bits
0x4002. 0001 0111    of raw period



0x4003. 0000 0001
PULSE Wave
0x4000. 1011 1111      Volume



                    Low order bits
0x4002. 0001 0111    of raw period


                    High order bits
0x4003. 0000 0001   of raw period
PULSE Wave
0x4000. 1011 1111                         Volume



                                       Low order bits
0x4002. 0001 0111                       of raw period
round(111860.8 / 0x117) - 1) = 400hz

                                       High order bits
0x4003. 0000 0001                      of raw period
Demo Time
Web Audio API
Web Audio API

• Based on Audio Routes
Web Audio API

• Based on Audio Routes
• Connect nodes to each other
Web Audio API

• Based on Audio Routes
• Connect nodes to each other
• Perfect for emulator sound
var gainNode = ctx.createGainNode();
gainNode.gain.value = volume;

var osc = ctx.createOscillator();
osc.connect(gainNode);
osc.type = type;
osc.frequency.value = frequency;

gainNode.connect(ctx.destination);
osc.noteOn(0);

setTimeout(function () {
    osc.noteOff(0);
}, duration);
Demo Time
Sounds good
Sounds good

• Again, scratching the surface
Sounds good

• Again, scratching the surface
• Sound information is rarer to find
Sounds good

• Again, scratching the surface
• Sound information is rarer to find
• http://wiki.nesdev.com/w/index.php/APU
Controller
Controller


• Two controllers, mapped to CPU memory
  at 0x4016 and 0x4017
Controller


• Two controllers, mapped to CPU memory
  at 0x4016 and 0x4017
• When written to, controller’s state is
  stored in sequential 8 bytes, as low order
  bit
Gamepad API
Gamepad API


• Firefox has an event based system
Gamepad API


• Firefox has an event based system
• WebKit requires polling
// Support gamepads in WebKit.
var GamePad = function(callback) {
	 if (typeof callback != "function") {
	 	 throw Error("Callback must implement [[call]].");
	 }
	 this.callback = callback;
	 this.running = false;
};

GamePad.prototype.start = function() {
    this.running = true;
    this.tick();
};

GamePad.prototype.stop = function() {
    this.running = false;
};

GamePad.prototype.tick = function() {
    if ( ! this.running) {
    	 return;
    }
	 this.callback(navigator.webkitGetGamepads());
    webkitRequestAnimationFrame(this.tick.bind(this));
};
Demo Time
Cycles
Cycles

• Components IRL run in parallel
Cycles

• Components IRL run in parallel
• Count cycles, use to sync other
  components
Cycles

• Components IRL run in parallel
• Count cycles, use to sync other
  components
• Try using Web Workers
Your very own emulator
Your very own emulator


• Spend a lot of time researching
Your very own emulator


• Spend a lot of time researching
• Start programming your own programs
Your very own emulator


• Spend a lot of time researching
• Start programming your own programs
• http://skilldrick.github.com/easy6502/
Your very own emulator


• Spend a lot of time researching
• Start programming your own programs
• http://skilldrick.github.com/easy6502/
• http://www.6502.org/books
Getting Started
Getting Started


      C8IYF
Getting Started


          C8IYF
  (Chip-8 Is Your Friend)
Tips
Tips

• JavaScript as you would C
Tips

• JavaScript as you would C
• Optimise passing around data
Tips

• JavaScript as you would C
• Optimise passing around data
• Know about V8 optimisations
Tips

• JavaScript as you would C
• Optimise passing around data
• Know about V8 optimisations
• Write your own programs
Possibilities
Possibilities


• Multiplayer via WebSockets
Possibilities


• Multiplayer via WebSockets
• Vibration API for force feedback
Possibilities


• Multiplayer via WebSockets
• Vibration API for force feedback
• File API and application cache for portable
  offline emulators
Possibilities


• Multiplayer via WebSockets
• Vibration API for force feedback
• File API and application cache for portable
  offline emulators
• localStorage for battery backed saved state
Thank You
Thank You


Questions

Más contenido relacionado

La actualidad más candente

Device tree support on arm linux
Device tree support on arm linuxDevice tree support on arm linux
Device tree support on arm linuxChih-Min Chao
 
Kernel Recipes 2017 - The Serial Device Bus - Johan Hovold
Kernel Recipes 2017 - The Serial Device Bus - Johan HovoldKernel Recipes 2017 - The Serial Device Bus - Johan Hovold
Kernel Recipes 2017 - The Serial Device Bus - Johan HovoldAnne Nicolas
 
Kernel Recipes 2017 - What's inside the input stack? - Benjamain Tissoires
Kernel Recipes 2017 - What's inside the input stack? - Benjamain TissoiresKernel Recipes 2017 - What's inside the input stack? - Benjamain Tissoires
Kernel Recipes 2017 - What's inside the input stack? - Benjamain TissoiresAnne Nicolas
 
Tech Days 2015: Embedded Product Update
Tech Days 2015: Embedded Product UpdateTech Days 2015: Embedded Product Update
Tech Days 2015: Embedded Product UpdateAdaCore
 
Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationChris Adamson
 
Animation Programming Techniques
Animation Programming TechniquesAnimation Programming Techniques
Animation Programming TechniquesAmir H. Fassihi
 
LCA2018 Open Hardware MiniConference: LoliBot Software
LCA2018 Open Hardware MiniConference: LoliBot SoftwareLCA2018 Open Hardware MiniConference: LoliBot Software
LCA2018 Open Hardware MiniConference: LoliBot SoftwareAndy Gelme
 
BSidesDelhi 2018: Headshot - Game Hacking on macOS
BSidesDelhi 2018: Headshot - Game Hacking on macOSBSidesDelhi 2018: Headshot - Game Hacking on macOS
BSidesDelhi 2018: Headshot - Game Hacking on macOSBSides Delhi
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and InsightsGlobalLogic Ukraine
 
Raspberry Pi Gaming Rig
Raspberry Pi Gaming RigRaspberry Pi Gaming Rig
Raspberry Pi Gaming RigDuc Le
 
XenSummit NA 2012: Xen on ARM Cortex A15
XenSummit NA 2012: Xen on ARM Cortex A15XenSummit NA 2012: Xen on ARM Cortex A15
XenSummit NA 2012: Xen on ARM Cortex A15The Linux Foundation
 
IPv6 Fundamentals & Securities
IPv6 Fundamentals & SecuritiesIPv6 Fundamentals & Securities
IPv6 Fundamentals & SecuritiesDon Anto
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...Yury Bushmelev
 

La actualidad más candente (20)

Device tree support on arm linux
Device tree support on arm linuxDevice tree support on arm linux
Device tree support on arm linux
 
Kernel Recipes 2017 - The Serial Device Bus - Johan Hovold
Kernel Recipes 2017 - The Serial Device Bus - Johan HovoldKernel Recipes 2017 - The Serial Device Bus - Johan Hovold
Kernel Recipes 2017 - The Serial Device Bus - Johan Hovold
 
Videogame Optimization
Videogame OptimizationVideogame Optimization
Videogame Optimization
 
Kernel Recipes 2017 - What's inside the input stack? - Benjamain Tissoires
Kernel Recipes 2017 - What's inside the input stack? - Benjamain TissoiresKernel Recipes 2017 - What's inside the input stack? - Benjamain Tissoires
Kernel Recipes 2017 - What's inside the input stack? - Benjamain Tissoires
 
Tech Days 2015: Embedded Product Update
Tech Days 2015: Embedded Product UpdateTech Days 2015: Embedded Product Update
Tech Days 2015: Embedded Product Update
 
Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV Foundation
 
Kgdb kdb modesetting
Kgdb kdb modesettingKgdb kdb modesetting
Kgdb kdb modesetting
 
Linux Kernel Live Patching
Linux Kernel Live PatchingLinux Kernel Live Patching
Linux Kernel Live Patching
 
Animation Programming Techniques
Animation Programming TechniquesAnimation Programming Techniques
Animation Programming Techniques
 
LCA2018 Open Hardware MiniConference: LoliBot Software
LCA2018 Open Hardware MiniConference: LoliBot SoftwareLCA2018 Open Hardware MiniConference: LoliBot Software
LCA2018 Open Hardware MiniConference: LoliBot Software
 
Lets Play Together
Lets Play TogetherLets Play Together
Lets Play Together
 
BSidesDelhi 2018: Headshot - Game Hacking on macOS
BSidesDelhi 2018: Headshot - Game Hacking on macOSBSidesDelhi 2018: Headshot - Game Hacking on macOS
BSidesDelhi 2018: Headshot - Game Hacking on macOS
 
Linux Kernel Platform Development: Challenges and Insights
 Linux Kernel Platform Development: Challenges and Insights Linux Kernel Platform Development: Challenges and Insights
Linux Kernel Platform Development: Challenges and Insights
 
Raspberry Pi Gaming Rig
Raspberry Pi Gaming RigRaspberry Pi Gaming Rig
Raspberry Pi Gaming Rig
 
XenSummit NA 2012: Xen on ARM Cortex A15
XenSummit NA 2012: Xen on ARM Cortex A15XenSummit NA 2012: Xen on ARM Cortex A15
XenSummit NA 2012: Xen on ARM Cortex A15
 
IPv6 Fundamentals & Securities
IPv6 Fundamentals & SecuritiesIPv6 Fundamentals & Securities
IPv6 Fundamentals & Securities
 
Polstra 44con2012
Polstra 44con2012Polstra 44con2012
Polstra 44con2012
 
Porting Android
Porting AndroidPorting Android
Porting Android
 
Device tree
Device treeDevice tree
Device tree
 
From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...From SaltStack to Puppet and beyond...
From SaltStack to Puppet and beyond...
 

Similar a Emulating With JavaScript

Micro control idsecconf2010
Micro control idsecconf2010Micro control idsecconf2010
Micro control idsecconf2010idsecconf
 
Building a robot with the .Net Micro Framework
Building a robot with the .Net Micro FrameworkBuilding a robot with the .Net Micro Framework
Building a robot with the .Net Micro FrameworkDucas Francis
 
Finding Xori: Malware Analysis Triage with Automated Disassembly
Finding Xori: Malware Analysis Triage with Automated DisassemblyFinding Xori: Malware Analysis Triage with Automated Disassembly
Finding Xori: Malware Analysis Triage with Automated DisassemblyPriyanka Aash
 
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangPractical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangLyon Yang
 
Your 1st Ceph cluster
Your 1st Ceph clusterYour 1st Ceph cluster
Your 1st Ceph clusterMirantis
 
Computerhardware 130909042641-
Computerhardware 130909042641-Computerhardware 130909042641-
Computerhardware 130909042641-zeyneptsd
 
Alessandro Abbruzzetti - Kernal64
Alessandro Abbruzzetti - Kernal64Alessandro Abbruzzetti - Kernal64
Alessandro Abbruzzetti - Kernal64Scala Italy
 
Computer Main Comppponents.pdf
Computer Main Comppponents.pdfComputer Main Comppponents.pdf
Computer Main Comppponents.pdfthinalost
 
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Nate Lawson
 
Advanced SOHO Router Exploitation XCON
Advanced SOHO Router Exploitation XCONAdvanced SOHO Router Exploitation XCON
Advanced SOHO Router Exploitation XCONLyon Yang
 
motherboardppt.pdf
motherboardppt.pdfmotherboardppt.pdf
motherboardppt.pdfPaulBarbar1
 
Programming the Cell Processor A simple raytracer from pseudo-code to spu-code
Programming the Cell Processor A simple raytracer from pseudo-code to spu-codeProgramming the Cell Processor A simple raytracer from pseudo-code to spu-code
Programming the Cell Processor A simple raytracer from pseudo-code to spu-codeSlide_N
 
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese..."Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...Edge AI and Vision Alliance
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...DefconRussia
 
embedded-systems-for-beginners
embedded-systems-for-beginnersembedded-systems-for-beginners
embedded-systems-for-beginnersmohamed gaber
 

Similar a Emulating With JavaScript (20)

Micro control idsecconf2010
Micro control idsecconf2010Micro control idsecconf2010
Micro control idsecconf2010
 
Building a robot with the .Net Micro Framework
Building a robot with the .Net Micro FrameworkBuilding a robot with the .Net Micro Framework
Building a robot with the .Net Micro Framework
 
mtl_rubykaigi
mtl_rubykaigimtl_rubykaigi
mtl_rubykaigi
 
Finding Xori: Malware Analysis Triage with Automated Disassembly
Finding Xori: Malware Analysis Triage with Automated DisassemblyFinding Xori: Malware Analysis Triage with Automated Disassembly
Finding Xori: Malware Analysis Triage with Automated Disassembly
 
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangPractical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
 
Your 1st Ceph cluster
Your 1st Ceph clusterYour 1st Ceph cluster
Your 1st Ceph cluster
 
Computerhardware 130909042641-
Computerhardware 130909042641-Computerhardware 130909042641-
Computerhardware 130909042641-
 
Alessandro Abbruzzetti - Kernal64
Alessandro Abbruzzetti - Kernal64Alessandro Abbruzzetti - Kernal64
Alessandro Abbruzzetti - Kernal64
 
Ibm cell
Ibm cell Ibm cell
Ibm cell
 
Computer Main Comppponents.pdf
Computer Main Comppponents.pdfComputer Main Comppponents.pdf
Computer Main Comppponents.pdf
 
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
 
Computer hardware
Computer hardwareComputer hardware
Computer hardware
 
Advanced SOHO Router Exploitation XCON
Advanced SOHO Router Exploitation XCONAdvanced SOHO Router Exploitation XCON
Advanced SOHO Router Exploitation XCON
 
motherboardppt.pdf
motherboardppt.pdfmotherboardppt.pdf
motherboardppt.pdf
 
Motherboard ppt
Motherboard pptMotherboard ppt
Motherboard ppt
 
Programming the Cell Processor A simple raytracer from pseudo-code to spu-code
Programming the Cell Processor A simple raytracer from pseudo-code to spu-codeProgramming the Cell Processor A simple raytracer from pseudo-code to spu-code
Programming the Cell Processor A simple raytracer from pseudo-code to spu-code
 
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese..."Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...
"Making Computer Vision Software Run Fast on Your Embedded Platform," a Prese...
 
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
Nikita Abdullin - Reverse-engineering of embedded MIPS devices. Case Study - ...
 
You suck at Memory Analysis
You suck at Memory AnalysisYou suck at Memory Analysis
You suck at Memory Analysis
 
embedded-systems-for-beginners
embedded-systems-for-beginnersembedded-systems-for-beginners
embedded-systems-for-beginners
 

Último

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 

Emulating With JavaScript

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n
  172. \n
  173. \n
  174. \n
  175. \n
  176. \n
  177. \n
  178. \n
  179. \n
  180. \n