Skip to content

Commit a12c1dd

Browse files
authored
Merge pull request #44 from kossiitkgp/chip8-task
feat: add coding/chip8 task
2 parents 211ad42 + 4ced360 commit a12c1dd

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

coding/chip_8.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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

Comments
 (0)