|
| 1 | +# Emulators and Virtual Machines |
| 2 | + |
| 3 | +## Background: |
| 4 | + |
| 5 | +CHIP-8 is an interpreted programming language used on 8-bit microcomputers in |
| 6 | +the 1970s. CHIP-8 was most often implemented on 4KB, 8-bit systems. Many games |
| 7 | +were built for such machines, and we refer to programs that emulate these |
| 8 | +computers as CHIP-8 emulators. |
| 9 | + |
| 10 | +## What you need to do: |
| 11 | + |
| 12 | +As part of this task you will need to write your own CHIP-8 emulator and create |
| 13 | +a game for this emulator. You will need to explain the topics you explore in a |
| 14 | +teaching presentation. Your presentation will need to include the following: |
| 15 | + |
| 16 | +1. A brief introduction of CHIP8 as a language and as a machine. |
| 17 | +1. The components of the machine, how they work, and their technical specifications, namely: |
| 18 | + - Memory |
| 19 | + - The CPU |
| 20 | + - Audio |
| 21 | + - Timers |
| 22 | + - Input methods |
| 23 | + - Graphics |
| 24 | +1. A brief look at the registers of the CPU and their functions |
| 25 | +1. A brief overview of the opcodes. Make sure to highlight the ones you found |
| 26 | +particularly interesting or challenging to implement |
| 27 | +1. A detailed look into your game and how you implemented it. Try to include loops, flow control, user input, etc in your game. Try to explain how they are working at an assembly level |
| 28 | +1. Videos/Screenshots/Demonstrations of your emulator/game :D |
| 29 | + |
| 30 | +Please create a presentation, either using PPT or preferably an Open Source |
| 31 | +tool such as [RevealJS](https://revealjs.com/). The interviewee needs to keep |
| 32 | +in mind that the crowd he will be presenting to, will have mixed people of |
| 33 | +different knowledge levels, so it is advised to keep the content balanced |
| 34 | +for all rather than becoming very technical. |
| 35 | + |
| 36 | +> [!TIP] |
| 37 | +> As this is task involves some coding, you are encouraged to use version control |
| 38 | +> and make your project open-source. You are free to use any programming language you like. |
| 39 | +
|
| 40 | +> [!NOTE] |
| 41 | +> It is fine if you are unable to complete your emulator. We want you to focus on |
| 42 | +> exploring these topics as much as you can. A working game on your own emulator is |
| 43 | +> a great bonus though! |
| 44 | +
|
| 45 | +## Some resources: |
| 46 | + |
| 47 | +- [Cowgod's Technical Reference](http://devernay.free.fr/hacks/chip8/C8TECH10.HTM#2nnn) |
| 48 | +- [Codeslinger's Guide](http://www.codeslinger.co.uk/pages/projects/chip8.html) |
| 49 | +- [Tobias' Guide](https://tobiasvl.github.io/blog/write-a-chip-8-emulator/) |
| 50 | +- [Awesome CHIP-8](https://chip-8.github.io/links/) |
| 51 | +- [Octo IDE](https://johnearnest.github.io/Octo/) |
| 52 | +- [CHIP-8 Archives](https://johnearnest.github.io/chip8Archive/) |
| 53 | + |
| 54 | +## Learning from the task: |
| 55 | + |
| 56 | +This task is designed to introduce beginners to concepts of computer |
| 57 | +architecture and basics of assembly language. By completing this task, you will |
| 58 | + |
| 59 | +- Come away with a better understanding of your computer |
| 60 | +- Understand how machines implement arbitrary complex code |
| 61 | +- Gain an appreciation of how CPUs communicate with the user |
| 62 | + |
| 63 | +A full featured CHIP-8 emulator can become increasingly complex and there will |
| 64 | +be no end to the modifications you can do. Implement as much as you are |
| 65 | +comfortable with and need for most games to run. We are more curious about your |
| 66 | +thinking ability and practical utility than the final result. So, don't worry |
| 67 | +if you are not able to complete the task, just try to do as much as you can and |
| 68 | +try to learn from the task. If you have other features you would like to |
| 69 | +implement that you were unable to add then feel free to add them to your |
| 70 | +presentation and discuss them! |
| 71 | + |
| 72 | +## Further Reading |
| 73 | + |
| 74 | +These resources are not strictly necessary for the task but can supplement your |
| 75 | +learning from the task. It is recommended to go through them at least once. |
| 76 | + |
| 77 | +- [How Computers Work (Chapter 2): Katherine Walden](https://kwaldenphd.github.io/code-in-context/02-computer-architecture/00-intro.html) |
| 78 | +- [Computer Systems' Architecture: Morris Mano](https://duckduckgo.com/?q=morris+mano+computer+systems+architecture+pdf&t=ffab&ia=web) |
| 79 | +- [Introduction to Computer Architecture: IIT Delhi](https://www.cse.iitd.ac.in/~srsarangi/archbook/chapters/intro.pdf) |
| 80 | + |
0 commit comments