Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
golang emus Ignacio Sánchez Ginés @drhelius
Slide 2
Slide 2 text
Emulator = legal ROM = ilegal
Slide 3
Slide 3 text
Emulator ≠ Simulator
Slide 4
Slide 4 text
Interpreter LD A,(HL) SUB 1 JR C,CONTINUE CP B JR NZ,LOOP Decode Read Exec
Slide 5
Slide 5 text
Binary Translation Target Machine Code LD A,(HL) SUB 1 JR C,CONTINUE CP B JR NZ,LOOP
Slide 6
Slide 6 text
Dynamic Recompilation Trans Read Exec LD A,(HL) SUB 1 JR C,CONTINUE CP B JR NZ,LOOP Target Machine Code
Slide 7
Slide 7 text
CPU MEM IO Audio Video Input
Slide 8
Slide 8 text
CPU 6502 Z80 Game Boy * Master System Game Gear MSX ZX Spectrum NES Atari 2600 Commodore 64 Apple 2 Super NES 65816
Slide 9
Slide 9 text
CPU MEM 8-bit 16-bit
Slide 10
Slide 10 text
0000 FFFF 0 65535 16KB 16KB 16KB 16KB
Slide 11
Slide 11 text
8DC4F3CD 293D2144 FF3E92BE 20FDCD0C ........ parameter opcode opcode opcode parameter
Slide 12
Slide 12 text
Main Loop while true { updateCPU() updateVideo() updateInput() updateAudio() }
Slide 13
Slide 13 text
updateCPU() { opcode = fetchOpcode() runOpcode(opcode) }
Slide 14
Slide 14 text
100 clks N clks CPU Video Input
Slide 15
Slide 15 text
CPU 4 MHz MEM Timer Audio Video Input Cart Game Boy
Slide 16
Slide 16 text
CPU H L B C D E SP PC A F 16 bit 8 bit
Slide 17
Slide 17 text
Flags 0 0 H C 0 0 Z N 1 0 5 4 3 2 7 6
Slide 18
Slide 18 text
16 KB ROM Bank 0 16 KB switchable ROM bank 8 KB Video RAM 8 KB switchable RAM bank 8 KB internal RAM Mirror 8 KB internal RAM Sprite Memory (OAM) Empty IO Ports Empty Internal RAM Interrupt Register cartridge FF4C FF80 FEA0 FF00 FFFF FE00 E000 C000 A000 8000 4000 0000 cartridge
Slide 19
Slide 19 text
j j+1 X N i+1 i 2 1
Slide 20
Slide 20 text
16 KB ROM Bank 0 16 KB switchable ROM bank 8000 4000 0000
Slide 21
Slide 21 text
Bank 0 Bank 1 Bank 2 Bank 3 Bank 4 ... fixed 00000 04000 08000 0C000 10000 14000 switchable Bank 4
Slide 22
Slide 22 text
ROM RAM MBC
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
Visible 160x144 HBlank VBlank 1.08 ms 48.6 us
Slide 25
Slide 25 text
Demo Emulator main core glfw opengl cpu video input
Slide 26
Slide 26 text
Workshop go get -u github.com/drhelius/demo-emulator cd $GOPATH/src/github.com/drhelius go run main.go -rom workshop.rom