a lot
This commit is contained in:
parent
a8c84a645c
commit
5c4e702999
12 changed files with 585 additions and 27 deletions
20
.gitignore
vendored
Normal file
20
.gitignore
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
.DS_Store
|
||||
out/
|
||||
obj/
|
||||
*.s??
|
||||
*.log
|
||||
disk/
|
||||
|
||||
*.orig
|
||||
*.rej
|
||||
|
||||
*.c64
|
||||
*.pet
|
||||
*.prg
|
||||
*.d81
|
||||
*.d64
|
||||
*.lbl
|
||||
*.dbg
|
||||
*.map
|
||||
*~
|
||||
*.session
|
26
.vimspector.json
Normal file
26
.vimspector.json
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"configurations": {
|
||||
"CC65 VICE Launch": {
|
||||
"adapter": "cust_cc65-vice",
|
||||
"configuration": {
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch",
|
||||
"program": "${workspaceFolder}/program.c64",
|
||||
"port": 6510,
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"skip": true,
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"emulatorArgs": [
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
.vscode/c_cpp_properties.json
vendored
17
.vscode/c_cpp_properties.json
vendored
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Linux",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"/usr/share/cc65/include"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/gcc",
|
||||
"cStandard": "gnu17",
|
||||
"cppStandard": "gnu++14",
|
||||
"intelliSenseMode": "linux-gcc-x64"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
8
.vscode/extensions.json
vendored
8
.vscode/extensions.json
vendored
|
@ -1,7 +1,9 @@
|
|||
{
|
||||
"recommendations": [
|
||||
"ms-vscode.cpptools",
|
||||
// "ms-vscode.cpptools",
|
||||
"entan-gl.cc65-vice",
|
||||
"sharpninja.cc65"
|
||||
]
|
||||
// "sharpninja.cc65",
|
||||
"llvm-vs-code-extensions.vscode-clangd"
|
||||
],
|
||||
"unwantedRecommendations": ["sharpninja.cc65", "tlgkccampbell.code-ca65"]
|
||||
}
|
134
.vscode/launch.json
vendored
Normal file
134
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,134 @@
|
|||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch",
|
||||
"program": "${workspaceFolder}/program.c64",
|
||||
"debugFile": "${workspaceFolder}/program.c64.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.c64.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"emulatorArgs": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "attach",
|
||||
"name": "CC65 Vice Attach (PET)",
|
||||
"program": "${workspaceFolder}/program.pet",
|
||||
"debugFile": "${workspaceFolder}/program.pet.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.pet.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"port": 29784,
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch (PET)",
|
||||
"program": "${workspaceFolder}/program.pet",
|
||||
"debugFile": "${workspaceFolder}/program.pet.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.pet.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"emulatorArgs": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch (Debug Extension)",
|
||||
"program": "${workspaceFolder}/program.c64",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"port": 5050,
|
||||
"stopOnEntry": false,
|
||||
"stopOnExit": false,
|
||||
"emulatorArgs": [
|
||||
],
|
||||
"debugServer": 4711
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch (NES) (Debug Extension)",
|
||||
"program": "${workspaceFolder}/program.nes",
|
||||
"debugFile": "${workspaceFolder}/program.nes.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.nes.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"emulatorArgs": [
|
||||
],
|
||||
"debugServer": 4711
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "attach",
|
||||
"name": "CC65 Vice Attach (PET) (Debug Extension)",
|
||||
"program": "${workspaceFolder}/program.pet",
|
||||
"debugFile": "${workspaceFolder}/program.pet.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.pet.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"port": 29784,
|
||||
"debugServer": 4711
|
||||
},
|
||||
{
|
||||
"type": "cc65-vice",
|
||||
"request": "launch",
|
||||
"name": "CC65 Vice Launch (PET) (Debug Extension)",
|
||||
"program": "${workspaceFolder}/program.pet",
|
||||
"debugFile": "${workspaceFolder}/program.pet.dbg",
|
||||
"mapFile": "${workspaceFolder}/program.pet.map",
|
||||
"build": {
|
||||
"cwd": "${workspaceFolder}",
|
||||
"command": "make",
|
||||
"args": [
|
||||
"OPTIONS=mapfile,labelfile,debugfile"
|
||||
]
|
||||
},
|
||||
"stopOnEntry": true,
|
||||
"stopOnExit": true,
|
||||
"emulatorArgs": [
|
||||
],
|
||||
"debugServer": 4711
|
||||
}
|
||||
]
|
||||
}
|
26
.vscode/tasks.json
vendored
Normal file
26
.vscode/tasks.json
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
// See https://go.microsoft.com/fwlink/?LinkId=733558
|
||||
// for the documentation about the tasks.json format
|
||||
"version": "2.0.0",
|
||||
"options": {
|
||||
"env": {
|
||||
"ELECTRON_RUN_AS_NODE": "1"
|
||||
}
|
||||
},
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Build",
|
||||
"type": "shell",
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"windows": {
|
||||
"command": "\"${workspaceFolder}/mk.bat\""
|
||||
},
|
||||
"linux": {
|
||||
"command": "sh \"${workspaceFolder}/mk.sh\""
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
345
Makefile
Normal file
345
Makefile
Normal file
|
@ -0,0 +1,345 @@
|
|||
###############################################################################
|
||||
### Generic Makefile for cc65 projects - full version with abstract options ###
|
||||
### V1.3.0(w) 2010 - 2013 Oliver Schmidt & Patryk "Silver Dream !" Łogiewa ###
|
||||
###############################################################################
|
||||
|
||||
###############################################################################
|
||||
### In order to override defaults - values can be assigned to the variables ###
|
||||
###############################################################################
|
||||
|
||||
# Space or comma separated list of cc65 supported target platforms to build for.
|
||||
# Default: c64 (lowercase!)
|
||||
TARGETS := c64
|
||||
|
||||
# Name of the final, single-file executable.
|
||||
# Default: name of the current dir with target name appended
|
||||
PROGRAM := src/program
|
||||
|
||||
# Path(s) to additional libraries required for linking the program
|
||||
# Use only if you don't want to place copies of the libraries in SRCDIR
|
||||
# Default: none
|
||||
LIBS :=
|
||||
|
||||
# Custom linker configuration file
|
||||
# Use only if you don't want to place it in SRCDIR
|
||||
# Default: none
|
||||
CONFIG :=
|
||||
|
||||
# Additional C compiler flags and options.
|
||||
# Default: none
|
||||
CFLAGS = -g
|
||||
|
||||
# Additional assembler flags and options.
|
||||
# Default: none
|
||||
ASFLAGS = -g
|
||||
|
||||
# Additional linker flags and options.
|
||||
# Default: none
|
||||
LDFLAGS = -g
|
||||
|
||||
# Path to the directory containing C and ASM sources.
|
||||
# Default: src
|
||||
SRCDIR :=
|
||||
|
||||
# Path to the directory where object files are to be stored (inside respective target subdirectories).
|
||||
# Default: obj
|
||||
OBJDIR :=
|
||||
|
||||
# Command used to run the emulator.
|
||||
# Default: depending on target platform. For default (c64) target: x64 -kernal kernal -VICIIdsize -autoload
|
||||
EMUCMD := x64sc -initbreak 2112 -autostart
|
||||
|
||||
# Optional commands used before starting the emulation process, and after finishing it.
|
||||
# Default: none
|
||||
# Examples
|
||||
#PREEMUCMD := osascript -e "tell application \"System Events\" to set isRunning to (name of processes) contains \"X11.bin\"" -e "if isRunning is true then tell application \"X11\" to activate"
|
||||
#PREEMUCMD := osascript -e "tell application \"X11\" to activate"
|
||||
#POSTEMUCMD := osascript -e "tell application \"System Events\" to tell process \"X11\" to set visible to false"
|
||||
#POSTEMUCMD := osascript -e "tell application \"Terminal\" to activate"
|
||||
PREEMUCMD :=
|
||||
POSTEMUCMD :=
|
||||
|
||||
# On Windows machines VICE emulators may not be available in the PATH by default.
|
||||
# In such case, please set the variable below to point to directory containing
|
||||
# VICE emulators.
|
||||
#VICE_HOME := "C:\Program Files\WinVICE-2.2-x86\"
|
||||
VICE_HOME :=
|
||||
|
||||
# Options state file name. You should not need to change this, but for those
|
||||
# rare cases when you feel you really need to name it differently - here you are
|
||||
STATEFILE := Makefile.options
|
||||
|
||||
###################################################################################
|
||||
#### DO NOT EDIT BELOW THIS LINE, UNLESS YOU REALLY KNOW WHAT YOU ARE DOING! ####
|
||||
###################################################################################
|
||||
|
||||
###################################################################################
|
||||
### Mapping abstract options to the actual compiler, assembler and linker flags ###
|
||||
### Predefined compiler, assembler and linker flags, used with abstract options ###
|
||||
### valid for 2.14.x. Consult the documentation of your cc65 version before use ###
|
||||
###################################################################################
|
||||
|
||||
# Compiler flags used to tell the compiler to optimise for SPEED
|
||||
define _optspeed_
|
||||
CFLAGS += -Oris
|
||||
endef
|
||||
|
||||
# Compiler flags used to tell the compiler to optimise for SIZE
|
||||
define _optsize_
|
||||
CFLAGS += -Or
|
||||
endef
|
||||
|
||||
# Compiler and assembler flags for generating listings
|
||||
define _listing_
|
||||
CFLAGS += --listing $$(@:.o=.lst)
|
||||
ASFLAGS += --listing $$(@:.o=.lst)
|
||||
REMOVES += $(addsuffix .lst,$(basename $(OBJECTS)))
|
||||
endef
|
||||
|
||||
# Linker flags for generating map file
|
||||
define _mapfile_
|
||||
LDFLAGS += --mapfile $$@.map
|
||||
REMOVES += $(PROGRAM).map
|
||||
endef
|
||||
|
||||
# Linker flags for generating VICE label file
|
||||
define _labelfile_
|
||||
LDFLAGS += -Ln $$@.lbl
|
||||
REMOVES += $(PROGRAM).lbl
|
||||
endef
|
||||
|
||||
# Linker flags for generating a debug file
|
||||
define _debugfile_
|
||||
LDFLAGS += -Wl --dbgfile,$$@.dbg
|
||||
REMOVES += $(PROGRAM).dbg
|
||||
endef
|
||||
|
||||
###############################################################################
|
||||
### Defaults to be used if nothing defined in the editable sections above ###
|
||||
###############################################################################
|
||||
|
||||
# Presume the C64 target like the cl65 compile & link utility does.
|
||||
# Set TARGETS to override.
|
||||
ifeq ($(TARGETS),)
|
||||
TARGETS := c64
|
||||
endif
|
||||
|
||||
# Presume we're in a project directory so name the program like the current
|
||||
# directory. Set PROGRAM to override.
|
||||
ifeq ($(PROGRAM),)
|
||||
PROGRAM := $(notdir $(CURDIR))
|
||||
endif
|
||||
|
||||
# Presume the C and asm source files to be located in the subdirectory 'src'.
|
||||
# Set SRCDIR to override.
|
||||
ifeq ($(SRCDIR),)
|
||||
SRCDIR := src
|
||||
endif
|
||||
|
||||
# Presume the object and dependency files to be located in the subdirectory
|
||||
# 'obj' (which will be created). Set OBJDIR to override.
|
||||
ifeq ($(OBJDIR),)
|
||||
OBJDIR := obj
|
||||
endif
|
||||
TARGETOBJDIR := $(OBJDIR)/$(TARGETS)
|
||||
|
||||
# Default emulator commands and options for particular targets.
|
||||
# Set EMUCMD to override.
|
||||
c64_EMUCMD := $(VICE_HOME)x64 -kernal kernal -VICIIdsize -autoload
|
||||
c128_EMUCMD := $(VICE_HOME)x128 -kernal kernal -VICIIdsize -autoload
|
||||
vic20_EMUCMD := $(VICE_HOME)xvic -kernal kernal -VICdsize -autoload
|
||||
pet_EMUCMD := $(VICE_HOME)xpet -Crtcdsize -autoload
|
||||
plus4_EMUCMD := $(VICE_HOME)xplus4 -TEDdsize -autoload
|
||||
# So far there is no x16 emulator in VICE (why??) so we have to use xplus4 with -memsize option
|
||||
c16_EMUCMD := $(VICE_HOME)xplus4 -ramsize 16 -TEDdsize -autoload
|
||||
cbm510_EMUCMD := $(VICE_HOME)xcbm2 -model 510 -VICIIdsize -autoload
|
||||
cbm610_EMUCMD := $(VICE_HOME)xcbm2 -model 610 -Crtcdsize -autoload
|
||||
atari_EMUCMD := atari800 -windowed -xl -pal -nopatchall -run
|
||||
cx16_EMUCMD := x16emu -run -prg
|
||||
|
||||
ifeq ($(EMUCMD),)
|
||||
EMUCMD = $($(CC65TARGET)_EMUCMD)
|
||||
endif
|
||||
|
||||
###############################################################################
|
||||
### The magic begins ###
|
||||
###############################################################################
|
||||
|
||||
# The "Native Win32" GNU Make contains quite some workarounds to get along with
|
||||
# cmd.exe as shell. However it does not provide means to determine that it does
|
||||
# actually activate those workarounds. Especially $(SHELL) does NOT contain the
|
||||
# value 'cmd.exe'. So the usual way to determine if cmd.exe is being used is to
|
||||
# execute the command 'echo' without any parameters. Only cmd.exe will return a
|
||||
# non-empty string - saying 'ECHO is on/off'.
|
||||
#
|
||||
# Many "Native Win32" programs accept '/' as directory delimiter just fine. How-
|
||||
# ever the internal commands of cmd.exe generally require '\' to be used.
|
||||
#
|
||||
# cmd.exe has an internal command 'mkdir' that doesn't understand nor require a
|
||||
# '-p' to create parent directories as needed.
|
||||
#
|
||||
# cmd.exe has an internal command 'del' that reports a syntax error if executed
|
||||
# without any file so make sure to call it only if there's an actual argument.
|
||||
ifeq ($(shell echo),)
|
||||
MKDIR = mkdir -p $1
|
||||
RMDIR = rmdir $1
|
||||
RMFILES = $(RM) $1
|
||||
else
|
||||
MKDIR = mkdir $(subst /,\,$1)
|
||||
RMDIR = rmdir $(subst /,\,$1)
|
||||
RMFILES = $(if $1,del /f $(subst /,\,$1))
|
||||
endif
|
||||
COMMA := ,
|
||||
SPACE := $(N/A) $(N/A)
|
||||
define NEWLINE
|
||||
|
||||
|
||||
endef
|
||||
# Note: Do not remove any of the two empty lines above !
|
||||
|
||||
TARGETLIST := $(subst $(COMMA),$(SPACE),$(TARGETS))
|
||||
|
||||
ifeq ($(words $(TARGETLIST)),1)
|
||||
|
||||
# Set PROGRAM to something like 'myprog.c64'.
|
||||
override PROGRAM := $(PROGRAM).$(TARGETLIST)
|
||||
|
||||
CSOURCES := $(wildcard $(SRCDIR)/*.c)
|
||||
CSOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.c)
|
||||
|
||||
# Set SOURCES to something like 'src/foo.c src/bar.s'.
|
||||
# Use of assembler files with names ending differently than .s is deprecated!
|
||||
SOURCES := $(CSOURCES)
|
||||
SOURCES += $(wildcard $(SRCDIR)/*.s)
|
||||
SOURCES += $(wildcard $(SRCDIR)/*.asm)
|
||||
SOURCES += $(wildcard $(SRCDIR)/*.a65)
|
||||
|
||||
# Add to SOURCES something like 'src/c64/me.c src/c64/too.s'.
|
||||
# Use of assembler files with names ending differently than .s is deprecated!
|
||||
SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.s)
|
||||
SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.asm)
|
||||
SOURCES += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.a65)
|
||||
|
||||
# Set OBJECTS to something like 'obj/c64/foo.o obj/c64/bar.o'.
|
||||
OBJECTS := $(addsuffix .o,$(basename $(addprefix $(TARGETOBJDIR)/,$(notdir $(SOURCES)))))
|
||||
|
||||
# Set INTERMEDIATES to something like 'obj/c64/foo.i obj/c64/bar.i'.
|
||||
INTERMEDIATES := $(addsuffix .i,$(basename $(addprefix $(TARGETOBJDIR)/,$(notdir $(CSOURCES)))))
|
||||
|
||||
# Set DEPENDS to something like 'obj/c64/foo.d obj/c64/bar.d'.
|
||||
DEPENDS := $(OBJECTS:.o=.d)
|
||||
|
||||
# Set TABS to something like 'obj/c64/foo.tab obj/c64/bar.tab'.
|
||||
TABS := $(OBJECTS:.o=.tab)
|
||||
|
||||
# Add to LIBS something like 'src/foo.lib src/c64/bar.lib'.
|
||||
LIBS += $(wildcard $(SRCDIR)/*.lib)
|
||||
LIBS += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.lib)
|
||||
|
||||
# Add to CONFIG something like 'src/c64/bar.cfg src/foo.cfg'.
|
||||
CONFIG += $(wildcard $(SRCDIR)/$(TARGETLIST)/*.cfg)
|
||||
CONFIG += $(wildcard $(SRCDIR)/*.cfg)
|
||||
|
||||
# Select CONFIG file to use. Target specific configs have higher priority.
|
||||
ifneq ($(word 2,$(CONFIG)),)
|
||||
CONFIG := $(firstword $(CONFIG))
|
||||
$(info Using config file $(CONFIG) for linking)
|
||||
endif
|
||||
|
||||
.SUFFIXES:
|
||||
.PHONY: all test clean zap love
|
||||
|
||||
all: $(PROGRAM)
|
||||
|
||||
-include $(DEPENDS)
|
||||
-include $(STATEFILE)
|
||||
|
||||
# If OPTIONS are given on the command line then save them to STATEFILE
|
||||
# if (and only if) they have actually changed. But if OPTIONS are not
|
||||
# given on the command line then load them from STATEFILE. Have object
|
||||
# files depend on STATEFILE only if it actually exists.
|
||||
ifeq ($(origin OPTIONS),command line)
|
||||
ifneq ($(OPTIONS),$(_OPTIONS_))
|
||||
ifeq ($(OPTIONS),)
|
||||
$(info Removing OPTIONS)
|
||||
$(shell $(RM) $(STATEFILE))
|
||||
$(eval $(STATEFILE):)
|
||||
else
|
||||
$(info Saving OPTIONS=$(OPTIONS))
|
||||
$(shell echo _OPTIONS_=$(OPTIONS) > $(STATEFILE))
|
||||
endif
|
||||
$(eval $(OBJECTS): $(STATEFILE))
|
||||
endif
|
||||
else
|
||||
ifeq ($(origin _OPTIONS_),file)
|
||||
$(info Using saved OPTIONS=$(_OPTIONS_))
|
||||
OPTIONS = $(_OPTIONS_)
|
||||
$(eval $(OBJECTS): $(STATEFILE))
|
||||
endif
|
||||
endif
|
||||
|
||||
# Transform the abstract OPTIONS to the actual cc65 options.
|
||||
$(foreach o,$(subst $(COMMA),$(SPACE),$(OPTIONS)),$(eval $(_$o_)))
|
||||
|
||||
# Strip potential variant suffix from the actual cc65 target.
|
||||
CC65TARGET := $(firstword $(subst .,$(SPACE),$(TARGETLIST)))
|
||||
|
||||
# The remaining targets.
|
||||
$(TARGETOBJDIR):
|
||||
$(call MKDIR,$@)
|
||||
|
||||
vpath %.c $(SRCDIR)/$(TARGETLIST) $(SRCDIR)
|
||||
|
||||
$(TARGETOBJDIR)/%.o: %.c | $(TARGETOBJDIR)
|
||||
cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) -Wc "--debug-tables" -Wc "$(@:.o=.tab)" $(CFLAGS) -o $@ $<
|
||||
|
||||
vpath %.s $(SRCDIR)/$(TARGETLIST) $(SRCDIR)
|
||||
|
||||
$(TARGETOBJDIR)/%.o: %.s | $(TARGETOBJDIR)
|
||||
cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $<
|
||||
|
||||
vpath %.asm $(SRCDIR)/$(TARGETLIST) $(SRCDIR)
|
||||
|
||||
$(TARGETOBJDIR)/%.o: %.asm | $(TARGETOBJDIR)
|
||||
cl65 -t $(CC65TARGET) -c --create-dep $(@:.o=.d) $(ASFLAGS) -o $@ $<
|
||||
|
||||
vpath %.a65 $(SRCDIR)/$(TARGETLIST) $(SRCDIR)
|
||||
|
||||
$(PROGRAM): $(CONFIG) $(OBJECTS) $(LIBS)
|
||||
cl65 -t $(CC65TARGET) $(LDFLAGS) -o $@ $(patsubst %.cfg,-C %.cfg,$^)
|
||||
|
||||
test: $(PROGRAM)
|
||||
$(PREEMUCMD)
|
||||
$(EMUCMD) $<
|
||||
$(POSTEMUCMD)
|
||||
|
||||
clean:
|
||||
$(call RMFILES,$(OBJECTS))
|
||||
$(call RMFILES,$(DEPENDS))
|
||||
$(call RMFILES,$(TABS))
|
||||
$(call RMFILES,$(REMOVES))
|
||||
$(call RMFILES,$(PROGRAM))
|
||||
|
||||
else # $(words $(TARGETLIST)),1
|
||||
|
||||
all test clean:
|
||||
$(foreach t,$(TARGETLIST),$(MAKE) TARGETS=$t $@$(NEWLINE))
|
||||
|
||||
endif # $(words $(TARGETLIST)),1
|
||||
|
||||
OBJDIRLIST := $(wildcard $(OBJDIR)/*)
|
||||
|
||||
zap:
|
||||
$(foreach o,$(OBJDIRLIST),-$(call RMFILES,$o/*.o $o/*.d $o/*.lst)$(NEWLINE))
|
||||
$(foreach o,$(OBJDIRLIST),-$(call RMDIR,$o)$(NEWLINE))
|
||||
-$(call RMDIR,$(OBJDIR))
|
||||
-$(call RMFILES,$(basename $(PROGRAM)).* $(STATEFILE))
|
||||
|
||||
love:
|
||||
@echo "Not war, eh?"
|
||||
|
||||
###################################################################
|
||||
### Place your additional targets in the additional Makefiles ###
|
||||
### in the same directory - their names have to end with ".mk"! ###
|
||||
###################################################################
|
||||
-include *.mk
|
1
Makefile.options
Normal file
1
Makefile.options
Normal file
|
@ -0,0 +1 @@
|
|||
_OPTIONS_=mapfile,labelfile,debugfile
|
6
hello.c
6
hello.c
|
@ -1,6 +0,0 @@
|
|||
#include <stdio.h>
|
||||
|
||||
int main(void) {
|
||||
printf("Hello ant");
|
||||
return 0;
|
||||
}
|
13
mk.bat
Normal file
13
mk.bat
Normal file
|
@ -0,0 +1,13 @@
|
|||
pushd %~dp0
|
||||
set SCRIPT_DIR=%CD%
|
||||
popd
|
||||
|
||||
for /D %%I in ("%USERPROFILE%\.vscode\extensions\entan-gl.cc65-vice-*") do @set EXTENSION_PATH=%%~I\build.bat
|
||||
|
||||
if exist "%SCRIPT_DIR%\..\..\..\build.bat" (
|
||||
"%SCRIPT_DIR%\..\..\..\build.bat" make.exe %*
|
||||
) else if exist "%EXTENSION_PATH%" (
|
||||
"%EXTENSION_PATH%" make.exe %*
|
||||
) else (
|
||||
make.exe %*
|
||||
)
|
8
mk.sh
Executable file
8
mk.sh
Executable file
|
@ -0,0 +1,8 @@
|
|||
DIR="$( cd "$( dirname "$(readlink -f "$0")" )" > /dev/null && pwd )"
|
||||
if test -e "$DIR/../../../build.sh"; then
|
||||
sh "$DIR/../../../build.sh" make "$@"
|
||||
elif test -e "$SHPATH"; then
|
||||
sh "$SHPATH" make "$@"
|
||||
else
|
||||
make "$@"
|
||||
fi
|
|
@ -28,3 +28,9 @@ cl65 hello.c -o hello.prg
|
|||
x64.exe hello.prg
|
||||
```
|
||||
to run hello world
|
||||
|
||||
|
||||
Useful https://sta.c64.org/cbm64mem.html
|
||||
|
||||
Using template from
|
||||
https://github.com/empathicqubit/vscode-cc65-debugger/tree/master/src/__tests__/c-project-template
|
Loading…
Add table
Reference in a new issue