1
0
mirror of https://github.com/livingcomputermuseum/UniBone.git synced 2026-02-18 05:24:23 +00:00
Files
livingcomputermuseum.UniBone/10.03_app_demo/2_src/makefile
Joerg Hoppe db0167afe1 Version 2019-06: many changes
PRU1 code split into multiple images
1. test functions
2. UNIBUS operation

PRU1 bus latch interface
Write byte/bits access not with MACROS (random optimizer influence),
now with *_helper() procedures. Same timing, more determinism, much code saving.
Nono more  ASM code to write PRU0 XFER area.

demo: menu to test UNIBUS signals directly

rework "Arbitration" logic: now 3-fold
Rework of UNIBUs arbtiration: NONE/CLIENT/MASTER
- no Arbitrator (SACK penidng for 11/34 Konsole) (NONE)
- phyiscal PDP_11 CPU is Arbitrator (CLIENT)
- UniBone implements Arbitrator (MASTER)
- Same PRU code loop handles all arbitration types

PRU buslatch timing slower, for some problematic PCBs

 More aggressive bus latch  selftest
 (mixed patterns, running on PRU now)

Refinement of ready-to-run scripts
- Adapted to changed "demo" menu
- new name scheme
<OS>_<boot- drive>_<PDP-11CPU>
indicates
- which OS is run
- which disk emulation is used and what is the boot device
- what is the (minimum) PDP-11 to run that

Merged in Joshs DMA timing for 11/84
UNIBUS master cycles waits 350 us before MSYN, instead 150.

Merged in Joshs DMA request queue
multiple devices canrequest INTR and DMAs concurrently, will be put on the bus sequentially

Merged in Joshs MSCP driver
- Build RT-11v5.5 for MSCP
- added boot loader "du.lst"

MSCP run scrips
2.11BSD on MSCP on PDP-11/44
RT11 on MSCP

Fix: image file sizing
Disk image file exptend automatically if block beyond current file end is written
2019-06-14 16:31:01 +02:00

330 lines
10 KiB
Makefile

# Inherited from
# http://mythopoeic.org/bbb-pru-minimal/
#
# modified for cross compile and remote debugging on BBB
PROG = demo
# UNIBONE_DIR from environment
UNIBONE_ROOT = $(UNIBONE_DIR)
PRU_PACKAGE_ROOT = $(UNIBONE_ROOT)/91_3rd_party/am335x_pru_package
COMMON_SRC_DIR= $(UNIBONE_ROOT)/90_common/src
SHARED_SRC_DIR= $(UNIBONE_ROOT)/10.01_base/2_src/shared
PRU0_BASE_SRC_DIR= $(UNIBONE_ROOT)/10.01_base/2_src/pru0
PRU1_BASE_SRC_DIR= $(UNIBONE_ROOT)/10.01_base/2_src/pru1
PRU_DEPLOY_DIR=$(UNIBONE_ROOT)/10.01_base/4_deploy
BASE_SRC_DIR= $(UNIBONE_ROOT)/10.01_base/2_src/arm
DEVICE_SRC_DIR= $(UNIBONE_ROOT)/10.02_devices/2_src
DEVEXER_SRC_DIR= $(UNIBONE_ROOT)/10.04_device_exerciser/2_src
# PRUSSDRV includes
PRUSS_INCLUDE_DIR = $(PRU_PACKAGE_ROOT)/include
# ARM LIBRARIES
PRUSS_DRV_LIB = $(PRU_PACKAGE_ROOT)/bin-bbb/libprussdrv.a
# -static: do not used shared libs, include all coide into the binary
# (big binary, but BBB neds no shared libs of certain verisons installed)
# Example: demo binary goes from 594K to 12.3MB !
LDFLAGS+= -static -lstdc++ -lpthread $(PRUSS_DRV_LIB)
# compiler flags and libraries
#CC_DBG_FLAGS = -O3 -Wall -Wextra -DDBG
CC_DBG_FLAGS = -ggdb3 -O0 -Wall -Wextra -DDBG
#ifeq ($(DBG),1)
#CC_DBG_FLAGS = -ggdb3 -O0 -Wall -Wextra -DDBG
#else
#CC_DBG_FLAGS = -O3 -Wall -Wextra -UDBG
#endif
ifeq ($(MAKE_TARGET_ARCH),BBB)
# cross compile on x64 for BBB
CC=$(BBB_CC)
OS_CCDEFS = -DARM -U__STRICT_ANSI__
OBJDIR=$(abspath ../4_deploy)
else
# local compile on BBB
OS_CCDEFS = -DARM -U__STRICT_ANSI__
OBJDIR=$(abspath ../4_deploy)
endif
CCFLAGS= \
-std=c++11 \
-I$(PRUSS_INCLUDE_DIR) \
-I. \
-I$(SHARED_SRC_DIR) \
-I$(COMMON_SRC_DIR) \
-I$(BASE_SRC_DIR) \
-I$(DEVICE_SRC_DIR) \
-I$(DEVEXER_SRC_DIR) \
-I$(OBJDIR) \
-I$(PRU_DEPLOY_DIR) \
-c \
$(CCDEFS) $(CC_DBG_FLAGS) $(OS_CCDEFS)
# OBJDIR in includes because of $(PRU_CODE)
# no -std=c99
# PRU program code library. Binaries as C arrays
# ! Path to PRU_DEPLOY_DIR MUST NOT CONTAIn SPACES !
# ! dont use wildcards, as .../4_deply/.. may be empty !
PRU0_CODE_LIST= \
$(PRU_DEPLOY_DIR)/pru0_code_all_array.c
PRU1_CODE_LIST= \
$(PRU_DEPLOY_DIR)/pru1_code_unibus_array.c \
$(PRU_DEPLOY_DIR)/pru1_code_test_array.c
OBJECTS = $(OBJDIR)/application.o \
$(OBJDIR)/getopt2.o \
$(OBJDIR)/menus.o \
$(OBJDIR)/menu_gpio.o \
$(OBJDIR)/menu_panel.o \
$(OBJDIR)/menu_mailbox.o \
$(OBJDIR)/menu_buslatches.o \
$(OBJDIR)/menu_unibus_signals.o \
$(OBJDIR)/menu_masterslave.o \
$(OBJDIR)/menu_interrupts.o \
$(OBJDIR)/menu_ddrmem_slave_only.o \
$(OBJDIR)/menu_devices.o \
$(OBJDIR)/menu_device_exercisers.o \
$(OBJDIR)/devexer.o \
$(OBJDIR)/devexer_rl.o \
$(OBJDIR)/memoryimage.o \
$(OBJDIR)/cpu.o \
$(OBJDIR)/ka11.o \
$(OBJDIR)/rl0102.o \
$(OBJDIR)/rl11.o \
$(OBJDIR)/rk11.o \
$(OBJDIR)/rk05.o \
$(OBJDIR)/uda.o \
$(OBJDIR)/mscp_server.o \
$(OBJDIR)/mscp_drive.o \
$(OBJDIR)/storagedrive.o \
$(OBJDIR)/storagecontroller.o \
$(OBJDIR)/demo_io.o \
$(OBJDIR)/demo_regs.o \
$(OBJDIR)/unibusdevice.o \
$(OBJDIR)/device.o \
$(OBJDIR)/parameter.o \
$(OBJDIR)/panel.o \
$(OBJDIR)/unibusadapter.o \
$(OBJDIR)/unibus.o \
$(OBJDIR)/gpios.o \
$(OBJDIR)/stringgrid.o \
$(OBJDIR)/mcout.o \
$(OBJDIR)/inputline.o \
$(OBJDIR)/bitcalc.o \
$(OBJDIR)/pru.o \
$(OBJDIR)/mailbox.o \
$(OBJDIR)/ddrmem.o \
$(OBJDIR)/iopageregister.o \
$(OBJDIR)/logsource.o \
$(OBJDIR)/logger.o \
$(OBJDIR)/utils.o \
$(OBJDIR)/compile_timestamp.o
# create needed directories
$(shell mkdir -p $(PRU_DEPLOY_DIR) $(OBJDIR))
# rule to print a variable.
# use: make print-VARIALBE
print-% : ; @echo $* = $($*)
all: $(OBJDIR)/$(PROG)
pru: $(PRU0_CODE_LIST) $(PRU1_CODE_LIST)
clean:
rm -f $(OBJDIR)/$(PROG) $(OBJECTS) $(OBJDIR)/* $(PRU_DEPLOY_DIR)/*
.PHONY: all pru clean
# TODO
# uato dependcies
# http://scottmcpeak.com/autodepend/autodepend.html
# gcc -MM $(CCFLAGS) $< >$(OBJDIR)*.c > ***.d
# executable depends on its objects AND the PRU objects
$(OBJDIR)/$(PROG) : pru $(OBJECTS)
$(CC) -o $@ $(OBJECTS) $(LDFLAGS)
# force recompile on next build
rm -f $(OBJDIR)/compile_timestamp.o
file $@
$(OBJDIR)/application.o : application.cpp application.hpp $(PRU_DEPLOY_DIR)/$(PRU0_CODE) $(PRU_DEPLOY_DIR)/$(PRU1_CODE)
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menus.o : menus.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_gpio.o : menu_gpio.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_panel.o : menu_panel.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_mailbox.o : menu_mailbox.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_buslatches.o : menu_buslatches.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_unibus_signals.o : menu_unibus_signals.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_masterslave.o : menu_masterslave.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_interrupts.o : menu_interrupts.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_devices.o : menu_devices.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_device_exercisers.o : menu_device_exercisers.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/menu_ddrmem_slave_only.o : menu_ddrmem_slave_only.cpp application.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/memoryimage.o : $(BASE_SRC_DIR)/memoryimage.cpp $(BASE_SRC_DIR)/memoryimage.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/devexer.o : $(DEVEXER_SRC_DIR)/devexer.cpp $(DEVEXER_SRC_DIR)/devexer.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/devexer_rl.o : $(DEVEXER_SRC_DIR)/devexer_rl.cpp $(DEVEXER_SRC_DIR)/devexer_rl.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/cpu.o : $(DEVICE_SRC_DIR)/cpu.cpp $(DEVICE_SRC_DIR)/cpu.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/ka11.o : $(DEVICE_SRC_DIR)/cpu20/ka11.c $(DEVICE_SRC_DIR)/cpu20/ka11.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/rl0102.o : $(DEVICE_SRC_DIR)/rl0102.cpp $(DEVICE_SRC_DIR)/rl0102.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/rl11.o : $(DEVICE_SRC_DIR)/rl11.cpp $(DEVICE_SRC_DIR)/rl11.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/rk05.o : $(DEVICE_SRC_DIR)/rk05.cpp $(DEVICE_SRC_DIR)/rk05.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/rk11.o : $(DEVICE_SRC_DIR)/rk11.cpp $(DEVICE_SRC_DIR)/rk11.hpp
$(CC) $(CCFLAGS) -Wno-missing-field-initializers $< -o $@
$(OBJDIR)/uda.o : $(DEVICE_SRC_DIR)/uda.cpp $(DEVICE_SRC_DIR)/uda.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/mscp_server.o : $(DEVICE_SRC_DIR)/mscp_server.cpp $(DEVICE_SRC_DIR)/mscp_server.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/mscp_drive.o : $(DEVICE_SRC_DIR)/mscp_drive.cpp $(DEVICE_SRC_DIR)/mscp_drive.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/storagedrive.o : $(BASE_SRC_DIR)/storagedrive.cpp $(BASE_SRC_DIR)/storagedrive.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/storagecontroller.o : $(BASE_SRC_DIR)/storagecontroller.cpp $(BASE_SRC_DIR)/storagecontroller.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/demo_io.o : $(DEVICE_SRC_DIR)/demo_io.cpp $(DEVICE_SRC_DIR)/demo_io.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/demo_regs.o : $(DEVICE_SRC_DIR)/demo_regs.cpp $(DEVICE_SRC_DIR)/demo_regs.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/unibusdevice.o : $(BASE_SRC_DIR)/unibusdevice.cpp $(BASE_SRC_DIR)/unibusdevice.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/device.o : $(BASE_SRC_DIR)/device.cpp $(BASE_SRC_DIR)/device.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/parameter.o : $(BASE_SRC_DIR)/parameter.cpp $(BASE_SRC_DIR)/parameter.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/panel.o : $(DEVICE_SRC_DIR)/panel.cpp $(DEVICE_SRC_DIR)/panel.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/unibus.o : $(BASE_SRC_DIR)/unibus.cpp $(SHARED_SRC_DIR)/unibus.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/getopt2.o : $(COMMON_SRC_DIR)/getopt2.cpp $(COMMON_SRC_DIR)/getopt2.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/stringgrid.o : $(COMMON_SRC_DIR)/stringgrid.cpp $(COMMON_SRC_DIR)/stringgrid.hpp
$(CC) $(CCFLAGS) -xc++ $< -o $@
$(OBJDIR)/mcout.o : $(COMMON_SRC_DIR)/mcout.c $(COMMON_SRC_DIR)/mcout.h
$(CC) $(CCFLAGS) -xc++ $< -o $@
$(OBJDIR)/inputline.o : $(COMMON_SRC_DIR)/inputline.c $(COMMON_SRC_DIR)/inputline.h
$(CC) $(CCFLAGS) -xc++ $< -o $@
$(OBJDIR)/bitcalc.o : $(COMMON_SRC_DIR)/bitcalc.cpp $(COMMON_SRC_DIR)/bitcalc.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/gpios.o : $(BASE_SRC_DIR)/gpios.cpp $(BASE_SRC_DIR)/gpios.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/logsource.o : $(COMMON_SRC_DIR)/logsource.cpp $(COMMON_SRC_DIR)/logsource.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/logger.o : $(COMMON_SRC_DIR)/logger.cpp $(COMMON_SRC_DIR)/logger.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/utils.o : $(BASE_SRC_DIR)/utils.cpp $(BASE_SRC_DIR)/utils.hpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/compile_timestamp.o : $(COMMON_SRC_DIR)/compile_timestamp.cpp
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/pru.o : $(BASE_SRC_DIR)/pru.cpp $(BASE_SRC_DIR)/pru.hpp $(PRU0_CODE_LIST) $(PRU1_CODE_LIST)
$(CC) $(CCFLAGS) $< -o $@
# files with PRU code and addresses
$(OBJDIR)/pru0_config.o : $(PRU_DEPLOY_DIR)/$(PRU0_CODE)
$(CC) $(CCFLAGS) -xc++ $< -o $@
$(OBJDIR)/pru1_config.o : $(PRU_DEPLOY_DIR)/$(PRU1_CODE)
$(CC) $(CCFLAGS) -xc++ $< -o $@
$(OBJDIR)/mailbox.o : $(BASE_SRC_DIR)/mailbox.cpp $(SHARED_SRC_DIR)/mailbox.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/ddrmem.o : $(BASE_SRC_DIR)/ddrmem.cpp $(SHARED_SRC_DIR)/ddrmem.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/iopageregister.o : $(BASE_SRC_DIR)/iopageregister.cpp $(SHARED_SRC_DIR)/iopageregister.h
$(CC) $(CCFLAGS) $< -o $@
$(OBJDIR)/unibusadapter.o : $(BASE_SRC_DIR)/unibusadapter.cpp $(BASE_SRC_DIR)/unibusadapter.hpp
$(CC) $(CCFLAGS) $< -o $@
# the binary images for each of the 2 PRUs is generated with the clpru compiler
# and converted to a C array source code by hexpru -- array
# $(SHARED_SRC_DIR)/*.h $(SHARED_SRC_DIR)/*.c
$(PRU0_CODE_LIST): $(PRU0_BASE_SRC_DIR)/*.h $(PRU0_BASE_SRC_DIR)/*.c $(SHARED_SRC_DIR)/*.h
$(MAKE) -C $(PRU0_BASE_SRC_DIR) $@
echo PRU0 codefile $@ created
# cp $(PRU_DEPLOY_DIR)/$(PRU0_CODE).[hc]
$(PRU1_CODE_LIST): $(PRU1_BASE_SRC_DIR)/*.h $(PRU1_BASE_SRC_DIR)/*.c $(SHARED_SRC_DIR)/*.h
$(MAKE) -C $(PRU1_BASE_SRC_DIR) $@
echo PRU1 codefile $@ created
# cp $(PRU_DEPLOY_DIR)/$(PRU0_CODE).[hc]