mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2024-11-29 08:44:15 +01:00
small cleanup
This commit is contained in:
parent
c02494855e
commit
b0b1ea309f
10
build.sh
10
build.sh
@ -3,10 +3,10 @@
|
|||||||
|
|
||||||
PACKAGE_FILE_NAME="SummerCart64"
|
PACKAGE_FILE_NAME="SummerCart64"
|
||||||
FILES=(
|
FILES=(
|
||||||
"./fw/output_files/SummerCart64.pof"
|
"./fw/output_files/SC64_update.bin"
|
||||||
"./hw/v1/ftdi-template.xml"
|
"./fw/output_files/SC64_update.pof"
|
||||||
|
"./hw/ftdi-template.xml"
|
||||||
"./sw/cic/UltraCIC-III.hex"
|
"./sw/cic/UltraCIC-III.hex"
|
||||||
"./sw/riscv/build/controller.rom"
|
|
||||||
"./LICENSE"
|
"./LICENSE"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -35,6 +35,10 @@ popd
|
|||||||
pushd fw
|
pushd fw
|
||||||
echo "Building FPGA firmware"
|
echo "Building FPGA firmware"
|
||||||
quartus_sh --flow compile ./SummerCart64.qpf
|
quartus_sh --flow compile ./SummerCart64.qpf
|
||||||
|
quartus_cpf -c ./SummerCart64.cof
|
||||||
|
cp output_files/SC64_firmware.pof output_files/SC64_update.pof
|
||||||
|
cat output_files/sc64_firmware_ufm_auto.rpd output_files/sc64_firmware_cfm0_auto.rpd > output_files/SC64_update_LE.bin
|
||||||
|
riscv32-unknown-elf-objcopy -I binary -O binary --reverse-bytes=4 output_files/SC64_update_LE.bin output_files/SC64_update.bin
|
||||||
popd
|
popd
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
docker run --mount type=bind,src="$(pwd)",target="/workdir" ghcr.io/polprzewodnikowy/sc64env:v1.0 /bin/bash ./build.sh
|
docker run \
|
||||||
|
--mount type=bind,src="$(pwd)",target="/workdir" \
|
||||||
|
ghcr.io/polprzewodnikowy/sc64env:v1.0 \
|
||||||
|
/bin/bash -c "./build.sh"
|
||||||
|
42
fw/SummerCart64.cof
Normal file
42
fw/SummerCart64.cof
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?xml version="1.0" encoding="US-ASCII" standalone="yes"?>
|
||||||
|
<cof>
|
||||||
|
<output_filename>output_files/SC64_firmware.pof</output_filename>
|
||||||
|
<n_pages>1</n_pages>
|
||||||
|
<width>1</width>
|
||||||
|
<mode>14</mode>
|
||||||
|
<sof_data>
|
||||||
|
<user_name>Page_0</user_name>
|
||||||
|
<page_flags>1</page_flags>
|
||||||
|
<bit0>
|
||||||
|
<sof_filename>output_files/SummerCart64.sof<compress_bitstream>1</compress_bitstream></sof_filename>
|
||||||
|
</bit0>
|
||||||
|
</sof_data>
|
||||||
|
<version>10</version>
|
||||||
|
<create_cvp_file>0</create_cvp_file>
|
||||||
|
<create_hps_iocsr>0</create_hps_iocsr>
|
||||||
|
<auto_create_rpd>1</auto_create_rpd>
|
||||||
|
<rpd_little_endian>0</rpd_little_endian>
|
||||||
|
<options>
|
||||||
|
<map_file>1</map_file>
|
||||||
|
</options>
|
||||||
|
<MAX10_device_options>
|
||||||
|
<por>0</por>
|
||||||
|
<io_pullup>1</io_pullup>
|
||||||
|
<config_from_cfm0_only>0</config_from_cfm0_only>
|
||||||
|
<isp_source>0</isp_source>
|
||||||
|
<verify_protect>0</verify_protect>
|
||||||
|
<epof>0</epof>
|
||||||
|
<ufm_source>2</ufm_source>
|
||||||
|
<ufm_filepath>../sw/n64/build/SummerLoader64.hex</ufm_filepath>
|
||||||
|
<cfm0_filepath>../sw/riscv/build/controller.hex</cfm0_filepath>
|
||||||
|
<cfm0_file_start_addr>305152</cfm0_file_start_addr>
|
||||||
|
</MAX10_device_options>
|
||||||
|
<advanced_options>
|
||||||
|
<ignore_epcs_id_check>1</ignore_epcs_id_check>
|
||||||
|
<ignore_condone_check>2</ignore_condone_check>
|
||||||
|
<plc_adjustment>0</plc_adjustment>
|
||||||
|
<post_chain_bitstream_pad_bytes>-1</post_chain_bitstream_pad_bytes>
|
||||||
|
<post_device_bitstream_pad_bytes>-1</post_device_bitstream_pad_bytes>
|
||||||
|
<bitslice_pre_padding>1</bitslice_pre_padding>
|
||||||
|
</advanced_options>
|
||||||
|
</cof>
|
@ -19,7 +19,7 @@
|
|||||||
#
|
#
|
||||||
# Quartus Prime
|
# Quartus Prime
|
||||||
# Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition
|
# Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition
|
||||||
# Date created = 21:23:28 September 18, 2021
|
# Date created = 23:19:06 October 24, 2021
|
||||||
#
|
#
|
||||||
# -------------------------------------------------------------------------- #
|
# -------------------------------------------------------------------------- #
|
||||||
#
|
#
|
||||||
@ -86,7 +86,6 @@ set_global_assignment -name SYSTEMVERILOG_FILE rtl/system/sc64.sv
|
|||||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/system/system.sv
|
set_global_assignment -name SYSTEMVERILOG_FILE rtl/system/system.sv
|
||||||
set_global_assignment -name SYSTEMVERILOG_FILE rtl/usb/usb_ft1248.sv
|
set_global_assignment -name SYSTEMVERILOG_FILE rtl/usb/usb_ft1248.sv
|
||||||
set_global_assignment -name SIGNALTAP_FILE output_files/signaltap.stp
|
set_global_assignment -name SIGNALTAP_FILE output_files/signaltap.stp
|
||||||
set_global_assignment -name SLD_FILE db/signaltap_auto_stripped.stp
|
|
||||||
|
|
||||||
# Pin & Location Assignments
|
# Pin & Location Assignments
|
||||||
# ==========================
|
# ==========================
|
||||||
|
12
fw/build.sh
12
fw/build.sh
@ -1,3 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
docker run --mount type=bind,src="$(pwd)/..",target="/workdir" ghcr.io/polprzewodnikowy/sc64env:v1.0 /bin/bash -c "cd fw && quartus_sh --flow compile ./SummerCart64.qpf"
|
docker run \
|
||||||
|
--mount type=bind,src="$(pwd)/..",target="/workdir" \
|
||||||
|
ghcr.io/polprzewodnikowy/sc64env:v1.0 \
|
||||||
|
/bin/bash -c " \
|
||||||
|
cd fw && \
|
||||||
|
quartus_sh --flow compile ./SummerCart64.qpf && \
|
||||||
|
quartus_cpf -c ./SummerCart64.cof && \
|
||||||
|
cp output_files/SC64_firmware.pof output_files/SC64_update.pof && \
|
||||||
|
cat output_files/sc64_firmware_ufm_auto.rpd output_files/sc64_firmware_cfm0_auto.rpd > output_files/SC64_update_LE.bin && \
|
||||||
|
riscv32-unknown-elf-objcopy -I binary -O binary --reverse-bytes=4 output_files/SC64_update_LE.bin output_files/SC64_update.bin
|
||||||
|
"
|
||||||
|
@ -30,7 +30,7 @@ module cpu_cfg (
|
|||||||
R_SCR: bus.rdata = {
|
R_SCR: bus.rdata = {
|
||||||
cfg.cpu_ready,
|
cfg.cpu_ready,
|
||||||
cfg.cpu_busy,
|
cfg.cpu_busy,
|
||||||
cfg.usb_waiting,
|
1'b0,
|
||||||
cfg.cmd_error,
|
cfg.cmd_error,
|
||||||
21'd0,
|
21'd0,
|
||||||
skip_bootloader,
|
skip_bootloader,
|
||||||
@ -65,7 +65,6 @@ module cpu_cfg (
|
|||||||
if (sys.reset) begin
|
if (sys.reset) begin
|
||||||
cfg.cpu_ready <= 1'b0;
|
cfg.cpu_ready <= 1'b0;
|
||||||
cfg.cpu_busy <= 1'b0;
|
cfg.cpu_busy <= 1'b0;
|
||||||
cfg.usb_waiting <= 1'b0;
|
|
||||||
cfg.cmd_error <= 1'b0;
|
cfg.cmd_error <= 1'b0;
|
||||||
cfg.sdram_switch <= 1'b0;
|
cfg.sdram_switch <= 1'b0;
|
||||||
cfg.sdram_writable <= 1'b0;
|
cfg.sdram_writable <= 1'b0;
|
||||||
@ -91,9 +90,8 @@ module cpu_cfg (
|
|||||||
{
|
{
|
||||||
cfg.cpu_ready,
|
cfg.cpu_ready,
|
||||||
cfg.cpu_busy,
|
cfg.cpu_busy,
|
||||||
cfg.usb_waiting,
|
|
||||||
cfg.cmd_error
|
cfg.cmd_error
|
||||||
} <= bus.wdata[31:28];
|
} <= {bus.wdata[31:30], bus.wdata[28]};
|
||||||
end
|
end
|
||||||
if (bus.wmask[0]) begin
|
if (bus.wmask[0]) begin
|
||||||
{
|
{
|
||||||
|
@ -29,7 +29,7 @@ module n64_cfg (
|
|||||||
R_SR: bus.rdata = {
|
R_SR: bus.rdata = {
|
||||||
cfg.cpu_ready,
|
cfg.cpu_ready,
|
||||||
cfg.cpu_busy,
|
cfg.cpu_busy,
|
||||||
cfg.usb_waiting,
|
1'b0,
|
||||||
cfg.cmd_error,
|
cfg.cmd_error,
|
||||||
12'd0
|
12'd0
|
||||||
};
|
};
|
||||||
|
@ -2,7 +2,6 @@ interface if_config ();
|
|||||||
|
|
||||||
logic cpu_ready;
|
logic cpu_ready;
|
||||||
logic cpu_busy;
|
logic cpu_busy;
|
||||||
logic usb_waiting;
|
|
||||||
logic cmd_error;
|
logic cmd_error;
|
||||||
logic cmd_request;
|
logic cmd_request;
|
||||||
logic [7:0] cmd;
|
logic [7:0] cmd;
|
||||||
@ -38,7 +37,6 @@ interface if_config ();
|
|||||||
modport n64 (
|
modport n64 (
|
||||||
input cpu_ready,
|
input cpu_ready,
|
||||||
input cpu_busy,
|
input cpu_busy,
|
||||||
input usb_waiting,
|
|
||||||
input cmd_error,
|
input cmd_error,
|
||||||
output cmd_request,
|
output cmd_request,
|
||||||
output cmd,
|
output cmd,
|
||||||
@ -50,7 +48,6 @@ interface if_config ();
|
|||||||
modport cpu (
|
modport cpu (
|
||||||
output cpu_ready,
|
output cpu_ready,
|
||||||
output cpu_busy,
|
output cpu_busy,
|
||||||
output usb_waiting,
|
|
||||||
output cmd_error,
|
output cmd_error,
|
||||||
input cmd_request,
|
input cmd_request,
|
||||||
input cmd,
|
input cmd,
|
||||||
|
2
sw/n64/.gitignore
vendored
2
sw/n64/.gitignore
vendored
@ -1,2 +1,2 @@
|
|||||||
/build
|
/build
|
||||||
/what
|
*.z64
|
||||||
|
@ -1,69 +1,28 @@
|
|||||||
ROOTDIR = $(N64_INST)
|
|
||||||
|
|
||||||
GCCN64PREFIX = $(ROOTDIR)/bin/mips64-elf-
|
|
||||||
CC = $(GCCN64PREFIX)gcc
|
|
||||||
AS = $(GCCN64PREFIX)as
|
|
||||||
LD = $(GCCN64PREFIX)ld
|
|
||||||
OBJCOPY = $(GCCN64PREFIX)objcopy
|
|
||||||
OBJDUMP = $(GCCN64PREFIX)objdump
|
|
||||||
|
|
||||||
CHKSUM64 = $(ROOTDIR)/bin/chksum64
|
|
||||||
MKSPRITE = $(ROOTDIR)/bin/mksprite
|
|
||||||
N64TOOL = $(ROOTDIR)/bin/n64tool
|
|
||||||
|
|
||||||
HEADER_PATH = $(ROOTDIR)/mips64-elf/lib
|
|
||||||
HEADER_NAME = header
|
|
||||||
|
|
||||||
PROG_NAME = SummerLoader64
|
|
||||||
|
|
||||||
ROM_SIZE = 1028k
|
|
||||||
|
|
||||||
SOURCE_DIR = src
|
|
||||||
BUILD_DIR = build
|
BUILD_DIR = build
|
||||||
|
SOURCE_DIR = src
|
||||||
|
PROGRAM_NAME = SummerLoader64
|
||||||
|
|
||||||
SRC_DIRS = $(SOURCE_DIR) $(sort $(dir $(wildcard $(SOURCE_DIR)/*/.)))
|
include $(N64_INST)/include/n64.mk
|
||||||
INC_DIRS = $(addprefix -I, . $(SRC_DIRS)) -I./libsc64/inc
|
|
||||||
SRC_FILES = $(wildcard $(patsubst %, %/*.c, . $(SRC_DIRS)))
|
|
||||||
# IMG_FILES = $(wildcard $(patsubst %, %/*.png, . $(SRC_DIRS)))
|
|
||||||
OBJ_FILES = $(addprefix $(BUILD_DIR)/, $(notdir $(IMG_FILES:.png=.o) $(SRC_FILES:.c=.o)))
|
|
||||||
|
|
||||||
VPATH = $(SRC_DIRS)
|
src = main.c sc64.c boot.c crc32.c
|
||||||
|
|
||||||
COMMONFLAGS = -march=vr4300 -mtune=vr4300
|
all: $(BUILD_DIR)/$(PROGRAM_NAME).hex
|
||||||
ASFLAGS = $(COMMONFLAGS)
|
|
||||||
CFLAGS = $(COMMONFLAGS) -std=gnu11 -Os -Wall -I$(ROOTDIR)/mips64-elf/include $(INC_DIRS) -ffunction-sections -fdata-sections -Wl,--gc-sections
|
|
||||||
LINK_FLAGS = -L$(ROOTDIR)/mips64-elf/lib -ldragon -lc -lm -ldragonsys -Tn64.ld
|
|
||||||
#-L./libsc64/lib -lsc64_libdragon
|
|
||||||
N64_FLAGS = -l $(ROM_SIZE) -h $(HEADER_PATH)/$(HEADER_NAME) -o $(BUILD_DIR)/$(PROG_NAME).z64
|
|
||||||
|
|
||||||
all: make_output_dir $(BUILD_DIR)/$(PROG_NAME).z64
|
$(BUILD_DIR)/$(PROGRAM_NAME).elf: $(src:%.c=$(BUILD_DIR)/%.o)
|
||||||
|
|
||||||
$(OBJ_FILES): Makefile
|
$(PROGRAM_NAME).z64: N64_ROM_TITLE="$(PROGRAM_NAME)"
|
||||||
|
|
||||||
$(BUILD_DIR)/$(PROG_NAME).z64: $(BUILD_DIR)/$(PROG_NAME).elf
|
$(BUILD_DIR)/$(PROGRAM_NAME).hex: $(PROGRAM_NAME).z64
|
||||||
$(OBJCOPY) $(BUILD_DIR)/$(PROG_NAME).elf $(BUILD_DIR)/$(PROG_NAME).bin -O binary
|
sed 's/\x00*$$//' $(PROGRAM_NAME).z64 > $(BUILD_DIR)/$(PROGRAM_NAME)_stripped.z64
|
||||||
$(OBJDUMP) -S $(BUILD_DIR)/$(PROG_NAME).elf > $(BUILD_DIR)/$(PROG_NAME).lst
|
@if [ $$(stat -L -c %s $(BUILD_DIR)/$(PROGRAM_NAME)_stripped.z64) -gt 92160 ]; then\
|
||||||
$(N64TOOL) $(N64_FLAGS) -t $(PROG_NAME) $(BUILD_DIR)/$(PROG_NAME).bin
|
echo "\n Error: stripped file size is larger than 90kB thus cannot fit inside FPGA flash.\n"; exit 1;\
|
||||||
$(CHKSUM64) $(BUILD_DIR)/$(PROG_NAME).z64
|
fi
|
||||||
truncate --size=90k $(BUILD_DIR)/$(PROG_NAME).z64
|
truncate --size=90k $(BUILD_DIR)/$(PROGRAM_NAME)_stripped.z64
|
||||||
$(OBJCOPY) $(BUILD_DIR)/$(PROG_NAME).z64 $(BUILD_DIR)/$(PROG_NAME).hex -I binary -O ihex
|
$(N64_OBJCOPY) -I binary -O ihex $(BUILD_DIR)/$(PROGRAM_NAME)_stripped.z64 $(BUILD_DIR)/$(PROGRAM_NAME).hex
|
||||||
|
|
||||||
$(BUILD_DIR)/$(PROG_NAME).elf: $(OBJ_FILES)
|
|
||||||
$(LD) -o $(BUILD_DIR)/$(PROG_NAME).elf $(OBJ_FILES) $(LINK_FLAGS)
|
|
||||||
|
|
||||||
$(BUILD_DIR)/%.o: %.c
|
|
||||||
$(COMPILE.c) $(OUTPUT_OPTION) $<
|
|
||||||
|
|
||||||
# $(BUILD_DIR)/%.sprite: $(IMG_FILES)
|
|
||||||
# $(MKSPRITE) 32 $< $@
|
|
||||||
|
|
||||||
# $(BUILD_DIR)/%.o: $(BUILD_DIR)/%.sprite
|
|
||||||
# $(OBJCOPY) -I binary -O elf32-bigmips -B mips:4000 --rename-section .data=.rodata $< $@
|
|
||||||
|
|
||||||
make_output_dir:
|
|
||||||
$(shell mkdir ./$(BUILD_DIR) 2> /dev/null)
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(shell rm -rf ./$(BUILD_DIR) 2> /dev/null)
|
rm -rf ./$(BUILD_DIR) ./$(PROGRAM_NAME).z64
|
||||||
|
|
||||||
.PHONY: all clean make_output_dir
|
-include $(wildcard $(BUILD_DIR)/*.d)
|
||||||
|
|
||||||
|
.PHONY: all clean
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
docker run --mount type=bind,src="$(pwd)",target="/workdir" ghcr.io/polprzewodnikowy/sc64env:v1.0 /bin/bash -c "make clean all"
|
docker run \
|
||||||
|
--mount type=bind,src="$(pwd)",target="/workdir" \
|
||||||
|
ghcr.io/polprzewodnikowy/sc64env:v1.0 \
|
||||||
|
/bin/bash -c "make clean all"
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
#include "sc64.h"
|
#include "sc64.h"
|
||||||
#include "boot/boot.h"
|
#include "boot.h"
|
||||||
|
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
|
@ -29,6 +29,7 @@ $(BUILD_DIR)/uc.elf: $(OBJS) SC64.ld
|
|||||||
$(BUILD_DIR)/controller.rom: $(BUILD_DIR)/uc.elf
|
$(BUILD_DIR)/controller.rom: $(BUILD_DIR)/uc.elf
|
||||||
$(OBJCOPY) -R .bootloader $(BUILD_DIR)/uc.elf $(BUILD_DIR)/controller.elf
|
$(OBJCOPY) -R .bootloader $(BUILD_DIR)/uc.elf $(BUILD_DIR)/controller.elf
|
||||||
$(OBJCOPY) -O binary --set-section-flags .bss=alloc,contents $(BUILD_DIR)/controller.elf $(BUILD_DIR)/controller.bin
|
$(OBJCOPY) -O binary --set-section-flags .bss=alloc,contents $(BUILD_DIR)/controller.elf $(BUILD_DIR)/controller.bin
|
||||||
|
$(OBJCOPY) -I binary -O ihex $(BUILD_DIR)/controller.bin $(BUILD_DIR)/controller.hex
|
||||||
python3 tools/bin2rom.py $@ < $(BUILD_DIR)/controller.bin
|
python3 tools/bin2rom.py $@ < $(BUILD_DIR)/controller.bin
|
||||||
@echo 'Size of controller modules:'
|
@echo 'Size of controller modules:'
|
||||||
@$(SIZE) -B -t --common $(OBJS)
|
@$(SIZE) -B -t --common $(OBJS)
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
docker run --mount type=bind,src="$(pwd)",target="/workdir" ghcr.io/polprzewodnikowy/sc64env:v1.0 /bin/bash -c "USER_FLAGS=\"-DDEBUG\" make clean all"
|
docker run \
|
||||||
|
--mount type=bind,src="$(pwd)",target="/workdir" \
|
||||||
|
ghcr.io/polprzewodnikowy/sc64env:v1.0 \
|
||||||
|
/bin/bash -c "USER_FLAGS=\"-DDEBUG\" make clean all"
|
||||||
|
Loading…
Reference in New Issue
Block a user