| |
Martin Piper
Registered: Nov 2007 Posts: 739 |
A Simple Commodore 64 Game in C++17
CppCon 2016: Jason Turner ΒRich Code for Tiny Computers: A Simple Commodore 64 Game in C++17Β
https://www.youtube.com/watch?v=zBkNBP00wJE
Rather interesting to watch the compiler in action from: https://youtu.be/zBkNBP00wJE?t=747 |
|
... 10 posts hidden. Click here to view all posts.... |
| |
Mr. SID
Registered: Jan 2003 Posts: 425 |
I guess that's not helpful because:
Quote:
Thumb has all the advantages of a 32-bit core:
32-bit address space
32-bit registers
32-bit shifter, and Arithmetic Logic Unit (ALU)
32-bit memory transfer.
Only the opcodes are 16bit, so you still have all the same problems you have on x86. |
| |
Peacemaker
Registered: Sep 2004 Posts: 279 |
grrr. fuck you commodore, why didnt you make this machine 32bit? so c++ would be more useable :( |
| |
ChristopherJam
Registered: Aug 2004 Posts: 1424 |
Quote: grrr. fuck you commodore, why didnt you make this machine 32bit? so c++ would be more useable :(
πππ |
| |
MagerValp
Registered: Dec 2001 Posts: 1082 |
Quoting Mr. SIDOnly the opcodes are 16bit, so you still have all the same problems you have on x86.
Well except the ARM instruction set is actually sane :) |
| |
TWW
Registered: Jul 2009 Posts: 557 |
I watched the presentation and got inspired to code this manually.
However the original contained some things I wanted to improve and still see if the result (size / # of instructions) could match the compiler. These are the points which were improved:
- start with RUN command OR autorun (added)
- No clear screen when stared (Implemented)
- Border color not set (Implemented)
- Use full screen size instead of 256 pixels (9 bit arithmics vs 8 bit) (Implemented)
- Ball getting stuck bug when bouncing off a player if it still has collision detected. (Fixed)
- Decimal score to 99 (Implemented)
- Limit player top & bottom (min/max Y) (Fixed)
- 1 player sprite-colour not set (same as background) (Fixed)
- Reset both ball and player position after a miss. (Implemented)
- Cosmetic - moved the score away from the screen centre (Implemented)
The result ended up as follows (original values obtained from the presentation):
Original x86 (No idea of the compiled size):
- Compiled: 83 x86 instructions - excluding boilerplate (graphics)
- Compiled: 231 x86 instructions total incl. gfx
Compiled: 419 x6510 instructions total
- 126 bytes of graphics written => 2 instructions each byte = 252
- 419 - 252 = 167 instructions for gamecode (estimated)
compiled: 1005 bytes (6510)
- Graphics = 5 x 126 = 630b
- 1005 - 630 = 375 bytes without graphics (estimated).
After adding the improvements above I ended up with:
hand coded Size excl. gfx: 301 bytes vs 375 bytes
hand coded size Incl. gfx: 390 bytes vs 1005 bytes
hand coded excl. gfx: 115 Instructions vs 167 Instructions
hand coded incl. gfx: 139 Instructions vs 419 Instructions
At least some improvement. Actually only 32 instructions more than the x86 version looking only at the game code. |
| |
hedning
Registered: Mar 2009 Posts: 4808 |
A Simple Commodore 64 Game in C++17 |
Previous - 1 | 2 - Next |