-
Notifications
You must be signed in to change notification settings - Fork 101
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
I added a simple 3D maze game that is a pretty impressive demo of what Microwatt can do. It's based on #347 Signed-off-by: Jacob Lifshay <[email protected]>
- Loading branch information
1 parent
9cb4948
commit 73835ce
Showing
9 changed files
with
1,305 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,11 +1,24 @@ | ||
#pragma once | ||
|
||
#include <stdbool.h> | ||
#include <stddef.h> | ||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
{ | ||
#endif | ||
|
||
void console_init(void); | ||
void console_set_irq_en(bool rx_irq, bool tx_irq); | ||
int getchar(void); | ||
bool console_havechar(void); | ||
int putchar(int c); | ||
int puts(const char *str); | ||
|
||
#ifndef __USE_LIBC | ||
size_t strlen(const char *s); | ||
#endif | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,18 @@ | ||
#pragma once | ||
|
||
#include <stdbool.h> | ||
|
||
#ifdef __cplusplus | ||
extern "C" | ||
{ | ||
#endif | ||
|
||
int usb_getchar(void); | ||
bool usb_havechar(void); | ||
int usb_putchar(int c); | ||
int usb_puts(const char *str); | ||
void usb_console_init(void); | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
usb_3d_game_emu | ||
*.o | ||
*.elf | ||
*.hex | ||
*.bin | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
ARCH = $(shell uname -m) | ||
ifneq ("$(ARCH)", "ppc64") | ||
ifneq ("$(ARCH)", "ppc64le") | ||
CROSS_COMPILE ?= powerpc64le-linux-gnu- | ||
endif | ||
endif | ||
|
||
CC = $(CROSS_COMPILE)gcc | ||
CXX = $(CROSS_COMPILE)g++ | ||
LD = $(CROSS_COMPILE)ld | ||
OBJCOPY = $(CROSS_COMPILE)objcopy | ||
|
||
COMMON_FLAGS = -Os -g -Wall -msoft-float -mno-string -mno-multiple -mno-vsx -mno-altivec -mlittle-endian -fno-stack-protector -mstrict-align -ffreestanding -fdata-sections -ffunction-sections -I../include | ||
COMMON_FLAGS += -Werror -Wextra | ||
CXXFLAGS = $(COMMON_FLAGS) -std=c++14 -fno-exceptions | ||
CFLAGS = $(COMMON_FLAGS) -std=c99 | ||
ASFLAGS = $(CFLAGS) | ||
LDFLAGS = -T powerpc.lds | ||
|
||
all: usb_3d_game.hex | ||
|
||
console.o: ../lib/console.c | ||
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ | ||
|
||
liteuart_console.o: ../lib/liteuart_console.c | ||
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@ | ||
|
||
usb_3d_game.elf: usb_3d_game.o head.o console.o liteuart_console.o | ||
$(LD) $(LDFLAGS) -o $@ $^ | ||
|
||
usb_3d_game.bin: usb_3d_game.elf | ||
$(OBJCOPY) -O binary $^ $@ | ||
|
||
usb_3d_game.hex: usb_3d_game.bin | ||
../scripts/bin2hex.py $^ > $@ | ||
|
||
usb_3d_game_emu: usb_3d_game.cpp | ||
c++ -g -Wall -std=c++14 -Werror -Wextra -o usb_3d_game_emu usb_3d_game.cpp -DEMULATE_TARGET | ||
|
||
clean: | ||
@rm -f *.o usb_3d_game.elf usb_3d_game.bin usb_3d_game.hex usb_3d_game_emu | ||
distclean: clean | ||
rm -f *~ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
# 3D Maze Game | ||
|
||
Based on: <https://github.com/programmerjake/rv32/tree/v0.1.0.1-alpha/software> | ||
|
||
# Run without FPGA/hardware-simulation | ||
|
||
Resize your terminal to be at least 100x76. | ||
|
||
Building: | ||
```bash | ||
cd usb_3d_game | ||
make usb_3d_game_emu | ||
``` | ||
|
||
Running: | ||
```bash | ||
./usb_3d_game_emu | ||
``` | ||
|
||
# Run on OrangeCrab v0.2.1 | ||
|
||
Set the OrangeCrab into firmware upload mode by plugging it in to USB while the button is pressed, then run the following commands: | ||
|
||
Building/Flashing: | ||
```bash | ||
(cd usb_3d_game; make) | ||
sudo make FPGA_TARGET=ORANGE-CRAB-0.21 dfuprog DOCKER=1 LITEDRAM_GHDL_ARG=-gUSE_LITEDRAM=false RAM_INIT_FILE=usb_3d_game/usb_3d_game.hex MEMORY_SIZE=$((1<<18)) | ||
``` | ||
|
||
Then, in a separate terminal that you've resized to be at least 100x76, run (replacing ttyACM0 with whatever serial device the OrangeCrab is): | ||
```bash | ||
sudo tio /dev/ttyACM0 | ||
``` | ||
|
||
# Controls | ||
|
||
Use WASD or the Arrow keys to move around. Press Ctrl+C to quit or restart. | ||
|
||
The goal is a set of flashing blocks, nothing special yet happens when you reach them though. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,107 @@ | ||
/* Copyright 2013-2014 IBM Corp. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
* implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#define STACK_TOP 0x20000 | ||
|
||
#define FIXUP_ENDIAN \ | ||
tdi 0,0,0x48; /* Reverse endian of b . + 8 */ \ | ||
b 191f; /* Skip trampoline if endian is good */ \ | ||
.long 0xa600607d; /* mfmsr r11 */ \ | ||
.long 0x01006b69; /* xori r11,r11,1 */ \ | ||
.long 0x05009f42; /* bcl 20,31,$+4 */ \ | ||
.long 0xa602487d; /* mflr r10 */ \ | ||
.long 0x14004a39; /* addi r10,r10,20 */ \ | ||
.long 0xa64b5a7d; /* mthsrr0 r10 */ \ | ||
.long 0xa64b7b7d; /* mthsrr1 r11 */ \ | ||
.long 0x2402004c; /* hrfid */ \ | ||
191: | ||
|
||
|
||
/* Load an immediate 64-bit value into a register */ | ||
#define LOAD_IMM64(r, e) \ | ||
lis r,(e)@highest; \ | ||
ori r,r,(e)@higher; \ | ||
rldicr r,r, 32, 31; \ | ||
oris r,r, (e)@h; \ | ||
ori r,r, (e)@l; | ||
|
||
.section ".head","ax" | ||
|
||
/* | ||
* Microwatt currently enters in LE mode at 0x0, so we don't need to | ||
* do any endian fix ups> | ||
*/ | ||
. = 0 | ||
.global _start | ||
_start: | ||
b boot_entry | ||
|
||
/* QEMU enters at 0x10 */ | ||
. = 0x10 | ||
FIXUP_ENDIAN | ||
b boot_entry | ||
|
||
. = 0x100 | ||
FIXUP_ENDIAN | ||
b boot_entry | ||
|
||
.global boot_entry | ||
boot_entry: | ||
/* setup stack */ | ||
LOAD_IMM64(%r1, STACK_TOP - 0x100) | ||
LOAD_IMM64(%r12, main) | ||
mtctr %r12, | ||
bctrl | ||
b . | ||
|
||
#define EXCEPTION(nr) \ | ||
.= nr ;\ | ||
b . | ||
|
||
/* More exception stubs */ | ||
EXCEPTION(0x300) | ||
EXCEPTION(0x380) | ||
EXCEPTION(0x400) | ||
EXCEPTION(0x480) | ||
EXCEPTION(0x500) | ||
EXCEPTION(0x600) | ||
EXCEPTION(0x700) | ||
EXCEPTION(0x800) | ||
EXCEPTION(0x900) | ||
EXCEPTION(0x980) | ||
EXCEPTION(0xa00) | ||
EXCEPTION(0xb00) | ||
EXCEPTION(0xc00) | ||
EXCEPTION(0xd00) | ||
EXCEPTION(0xe00) | ||
EXCEPTION(0xe20) | ||
EXCEPTION(0xe40) | ||
EXCEPTION(0xe60) | ||
EXCEPTION(0xe80) | ||
EXCEPTION(0xf00) | ||
EXCEPTION(0xf20) | ||
EXCEPTION(0xf40) | ||
EXCEPTION(0xf60) | ||
EXCEPTION(0xf80) | ||
#if 0 | ||
EXCEPTION(0x1000) | ||
EXCEPTION(0x1100) | ||
EXCEPTION(0x1200) | ||
EXCEPTION(0x1300) | ||
EXCEPTION(0x1400) | ||
EXCEPTION(0x1500) | ||
EXCEPTION(0x1600) | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
SECTIONS | ||
{ | ||
. = 0; | ||
.head : { | ||
KEEP(*(.head)) | ||
} | ||
. = 0x1000; | ||
.text : { *(.text) } | ||
. = 0x2a000; | ||
.data : { *(.data) } | ||
.rodata : { *(.rodata) } | ||
.bss : { *(.bss) } | ||
} |
Oops, something went wrong.