Skip to content

Latest commit

 

History

History
129 lines (112 loc) · 7.84 KB

README.md

File metadata and controls

129 lines (112 loc) · 7.84 KB

SolChip8

SolChip8 is the first 100% on-chain Chip8 emulator smart contract where you can run chip8 games on EVM environment. CHIP-8 is an interpreted programming language, initially used on the 8-bit microcomputers made in the mid-1970s. blog post

SolChip

Installation

forge install rkdud007/solchip8

Deployment

  • unified contract address start with 0xc8c8c8c8 to represent chip8 by using CREATE2 contract using create2deploy cli tool
cast create2 \
    --deployer 0x0000000000FFe8B47B3e2130213B802212439497 \
    --caller 0x0000000000000000000000000000000000000000 \
    --init-code-hash 614b9ac9323beeaffd9de369597fc476014aee6e350489c0601b5f47b1146334 \
    --starts-with c8c8c8c8
Chain Chain ID Contract v0.0.1
Base mainnet 8453 Solchip8 0xc8c8c8c8421e85597881ae753d040449e81e528a
Ethereum sepolia 11155111 Solchip8 0xc8c8c8c8421e85597881ae753d040449e81e528a
Arbitrum sepolia 421614 Solchip8 0xc8c8c8c8421e85597881ae753d040449e81e528a
Base sepolia 84532 Solchip8 0xc8c8c8c8421e85597881ae753d040449e81e528a
Optimism sepolia 11155420 Solchip8 0xc8c8c8c8421e85597881ae753d040449e81e528a
Odyssey testnet 911867 Solchip8 0xc8c8c8c81fd75f59103ded843a1082ce403885f4

Features

Supported CHIP-8 Opcodes

Tested here

Opcode Mnemonic Description
0000 NOP Nothing
00E0 CLS Clear the display
00EE RET Return from a subroutine
1NNN JP NNN Jump to address NNN
2NNN CALL NNN Call subroutine at NNN
3XNN SE Vx, NN Skip next instruction if Vx equals NN
4XNN SNE Vx, NN Skip next instruction if Vx does not equal NN
5XY0 SE Vx, Vy Skip next instruction if Vx equals Vy
6XNN LD Vx, NN Load value NN into register Vx
7XNN ADD Vx, NN Add value NN to register Vx
8XY0 LD Vx, Vy Set Vx equal to Vy
8XY1 OR Vx, Vy Set Vx to Vx OR Vy
8XY2 AND Vx, Vy Set Vx to Vx AND Vy
8XY3 XOR Vx, Vy Set Vx to Vx XOR Vy
8XY4 ADD Vx, Vy Add Vy to Vx, set VF to carry
8XY5 SUB Vx, Vy Subtract Vy from Vx, set VF to NOT borrow
8XY6 SHR Vx Shift Vx right by 1, set VF to least significant bit
8XY7 SUBN Vx, Vy Set Vx to Vy minus Vx, set VF to NOT borrow
8XYE SHL Vx Shift Vx left by 1, set VF to most significant bit
9XY0 SNE Vx, Vy Skip next instruction if Vx does not equal Vy
ANNN LD I, NNN Set I to address NNN
BNNN JP V0, NNN Jump to address V0 + NNN
CXNN RND Vx, NN Set Vx to random byte AND NN
DXYN DRW Vx, Vy, N Draw sprite at (Vx, Vy) with height N, set VF on collision
EX9E SKP Vx Skip next instruction if key Vx is pressed
EXA1 SKNP Vx Skip next instruction if key Vx is not pressed
FX07 LD Vx, DT Set Vx to the value of the delay timer
FX0A LD Vx, K Wait for a key press, store the value in Vx
FX15 LD DT, Vx Set the delay timer to Vx
FX18 LD ST, Vx Set the sound timer to Vx
FX1E ADD I, Vx Add Vx to I
FX29 LD F, Vx Set I to the location of the sprite for digit Vx
FX33 LD B, Vx Store BCD representation of Vx in memory at I, I+1, and I+2
FX55 LD [I], Vx Store registers V0 to Vx in memory starting at I
FX65 LD Vx, [I] Read registers V0 to Vx from memory starting at I

Resources