diff --git a/ocanada.xcodeproj/project.pbxproj b/ocanada.xcodeproj/project.pbxproj index b803305..63d5413 100644 --- a/ocanada.xcodeproj/project.pbxproj +++ b/ocanada.xcodeproj/project.pbxproj @@ -3,80 +3,161 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 50; objects = { +/* Begin PBXBuildFile section */ + 9D413BA7217961E10069AD9D /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BA6217961E10069AD9D /* main.c */; }; + 9D413BA9217961E10069AD9D /* Makefile in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BA8217961E10069AD9D /* Makefile */; }; + 9D413BAC217961E10069AD9D /* AppleCommander.jar in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D413BAB217961E10069AD9D /* AppleCommander.jar */; }; + 9D413BAE217961E10069AD9D /* bastokenizer-tools-bt-0.2.0.jar in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D413BAD217961E10069AD9D /* bastokenizer-tools-bt-0.2.0.jar */; }; + 9D413BB0217961E10069AD9D /* createDiskImage in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BAF217961E10069AD9D /* createDiskImage */; }; + 9D413BB2217961E10069AD9D /* bt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BB1217961E10069AD9D /* bt */; }; + 9D413BB4217961E20069AD9D /* DevApple.vii in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BB3217961E20069AD9D /* DevApple.vii */; }; + 9D413BB6217961E20069AD9D /* dos33_template.dsk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BB5217961E20069AD9D /* dos33_template.dsk */; }; + 9D413BB8217961E20069AD9D /* errorFilter.sh in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BB7217961E20069AD9D /* errorFilter.sh */; }; + 9D413BBA217961E20069AD9D /* head.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BB9217961E20069AD9D /* head.mk */; }; + 9D413BBC217961E20069AD9D /* prodos_template.dsk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BBB217961E20069AD9D /* prodos_template.dsk */; }; + 9D413BBE217961E20069AD9D /* tail.mk in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BBD217961E20069AD9D /* tail.mk */; }; + 9D413BC0217961E20069AD9D /* V2Make.scpt in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BBF217961E20069AD9D /* V2Make.scpt */; }; + 9D413BC3217961E20069AD9D /* ocanada.xcscheme in CopyFiles */ = {isa = PBXBuildFile; fileRef = 9D413BC2217961E20069AD9D /* ocanada.xcscheme */; }; + 9D413BD42179621D0069AD9D /* mockingboard.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BCF2179621C0069AD9D /* mockingboard.c */; }; + 9D413BD52179621D0069AD9D /* song.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BD12179621C0069AD9D /* song.c */; }; + 9D413BD62179621D0069AD9D /* mockingboard_speech.s in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BD22179621C0069AD9D /* mockingboard_speech.s */; }; + 9D413BD72179621D0069AD9D /* flag.c in Sources */ = {isa = PBXBuildFile; fileRef = 9D413BD32179621D0069AD9D /* flag.c */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9D413BA1217961E10069AD9D /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = /usr/share/man/man1/; + dstSubfolderSpec = 0; + files = ( + 9D413BBC217961E20069AD9D /* prodos_template.dsk in CopyFiles */, + 9D413BB2217961E10069AD9D /* bt in CopyFiles */, + 9D413BB6217961E20069AD9D /* dos33_template.dsk in CopyFiles */, + 9D413BB0217961E10069AD9D /* createDiskImage in CopyFiles */, + 9D413BC0217961E20069AD9D /* V2Make.scpt in CopyFiles */, + 9D413BBA217961E20069AD9D /* head.mk in CopyFiles */, + 9D413BB4217961E20069AD9D /* DevApple.vii in CopyFiles */, + 9D413BB8217961E20069AD9D /* errorFilter.sh in CopyFiles */, + 9D413BBE217961E20069AD9D /* tail.mk in CopyFiles */, + 9D413BC3217961E20069AD9D /* ocanada.xcscheme in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ - 9D1A7CB31F085D7F00669D60 /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; - 9D1A7CB41F085D7F00669D60 /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; - 9D1A7CB61F085D7F00669D60 /* AppleCommander.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; name = AppleCommander.jar; path = make/AppleCommander.jar; sourceTree = ""; }; - 9D1A7CB71F085D7F00669D60 /* createDiskImage */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = createDiskImage; path = make/createDiskImage; sourceTree = ""; }; - 9D1A7CB81F085D7F00669D60 /* DevApple.vii */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = DevApple.vii; path = make/DevApple.vii; sourceTree = ""; }; - 9D1A7CB91F085D7F00669D60 /* dos33_template.dsk */ = {isa = PBXFileReference; lastKnownFileType = file; name = dos33_template.dsk; path = make/dos33_template.dsk; sourceTree = ""; }; - 9D1A7CBA1F085D7F00669D60 /* head.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = head.mk; path = make/head.mk; sourceTree = ""; }; - 9D1A7CBB1F085D7F00669D60 /* prodos_template.dsk */ = {isa = PBXFileReference; lastKnownFileType = file; name = prodos_template.dsk; path = make/prodos_template.dsk; sourceTree = ""; }; - 9D1A7CBC1F085D7F00669D60 /* tail.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = tail.mk; path = make/tail.mk; sourceTree = ""; }; - 9D1A7CBD1F085D7F00669D60 /* V2Make.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = V2Make.scpt; path = make/V2Make.scpt; sourceTree = ""; }; - 9D1A7CC31F085DA800669D60 /* flag.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = flag.c; sourceTree = ""; }; - 9D1A7CC41F085DA800669D60 /* flag.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flag.h; sourceTree = ""; }; - 9D1A7CC51F085DA800669D60 /* song.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = song.c; sourceTree = ""; }; - 9D1A7CC61F085DA800669D60 /* song.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = song.h; sourceTree = ""; }; - 9D1A7CC71F085DA800669D60 /* mockingboard_speech.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mockingboard_speech.h; sourceTree = ""; }; - 9D1A7CC81F085DA800669D60 /* mockingboard_speech.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = mockingboard_speech.s; sourceTree = ""; }; - 9D1A7CC91F085DA800669D60 /* mockingboard.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mockingboard.c; sourceTree = ""; }; - 9D1A7CCA1F085DA800669D60 /* mockingboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mockingboard.h; sourceTree = ""; }; - 9D1A7CCB1F085DA800669D60 /* a2.lo.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = a2.lo.s; sourceTree = ""; }; + 9D413BA3217961E10069AD9D /* doNotBuild */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = doNotBuild; sourceTree = BUILT_PRODUCTS_DIR; }; + 9D413BA6217961E10069AD9D /* main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = main.c; sourceTree = ""; }; + 9D413BA8217961E10069AD9D /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + 9D413BAB217961E10069AD9D /* AppleCommander.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; name = AppleCommander.jar; path = make/AppleCommander.jar; sourceTree = ""; }; + 9D413BAD217961E10069AD9D /* bastokenizer-tools-bt-0.2.0.jar */ = {isa = PBXFileReference; lastKnownFileType = archive.jar; name = "bastokenizer-tools-bt-0.2.0.jar"; path = "make/bastokenizer-tools-bt-0.2.0.jar"; sourceTree = ""; }; + 9D413BAF217961E10069AD9D /* createDiskImage */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = createDiskImage; path = make/createDiskImage; sourceTree = ""; }; + 9D413BB1217961E10069AD9D /* bt */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = bt; path = make/bt; sourceTree = ""; }; + 9D413BB3217961E20069AD9D /* DevApple.vii */ = {isa = PBXFileReference; lastKnownFileType = file.bplist; name = DevApple.vii; path = make/DevApple.vii; sourceTree = ""; }; + 9D413BB5217961E20069AD9D /* dos33_template.dsk */ = {isa = PBXFileReference; lastKnownFileType = file; name = dos33_template.dsk; path = make/dos33_template.dsk; sourceTree = ""; }; + 9D413BB7217961E20069AD9D /* errorFilter.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = errorFilter.sh; path = make/errorFilter.sh; sourceTree = ""; }; + 9D413BB9217961E20069AD9D /* head.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = head.mk; path = make/head.mk; sourceTree = ""; }; + 9D413BBB217961E20069AD9D /* prodos_template.dsk */ = {isa = PBXFileReference; lastKnownFileType = file; name = prodos_template.dsk; path = make/prodos_template.dsk; sourceTree = ""; }; + 9D413BBD217961E20069AD9D /* tail.mk */ = {isa = PBXFileReference; lastKnownFileType = text; name = tail.mk; path = make/tail.mk; sourceTree = ""; }; + 9D413BBF217961E20069AD9D /* V2Make.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; name = V2Make.scpt; path = make/V2Make.scpt; sourceTree = ""; }; + 9D413BC2217961E20069AD9D /* ocanada.xcscheme */ = {isa = PBXFileReference; lastKnownFileType = text.xml; name = ocanada.xcscheme; path = ocanada.xcodeproj/xcshareddata/xcschemes/ocanada.xcscheme; sourceTree = SOURCE_ROOT; }; + 9D413BCC2179621C0069AD9D /* flag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flag.h; sourceTree = ""; }; + 9D413BCD2179621C0069AD9D /* mockingboard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mockingboard.h; sourceTree = ""; }; + 9D413BCE2179621C0069AD9D /* mockingboard_speech.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mockingboard_speech.h; sourceTree = ""; }; + 9D413BCF2179621C0069AD9D /* mockingboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mockingboard.c; sourceTree = ""; }; + 9D413BD02179621C0069AD9D /* song.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = song.h; sourceTree = ""; }; + 9D413BD12179621C0069AD9D /* song.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = song.c; sourceTree = ""; }; + 9D413BD22179621C0069AD9D /* mockingboard_speech.s */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = mockingboard_speech.s; sourceTree = ""; }; + 9D413BD32179621D0069AD9D /* flag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = flag.c; sourceTree = ""; }; + 9D413BD8217962250069AD9D /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFrameworksBuildPhase section */ + 9D413BA0217961E10069AD9D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D413BAC217961E10069AD9D /* AppleCommander.jar in Frameworks */, + 9D413BAE217961E10069AD9D /* bastokenizer-tools-bt-0.2.0.jar in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + /* Begin PBXGroup section */ - 9D1A7CAC1F085D7F00669D60 = { + 9D413B99217961E10069AD9D = { isa = PBXGroup; children = ( - 9D1A7CB21F085D7F00669D60 /* ocanada */, + 9D413BD8217962250069AD9D /* README.md */, + 9D413BA5217961E10069AD9D /* ocanada */, + 9D413BA4217961E10069AD9D /* Products */, ); sourceTree = ""; }; - 9D1A7CB21F085D7F00669D60 /* ocanada */ = { + 9D413BA4217961E10069AD9D /* Products */ = { isa = PBXGroup; children = ( - 9D1A7CB31F085D7F00669D60 /* main.c */, - 9D1A7CB41F085D7F00669D60 /* Makefile */, - 9D1A7CC31F085DA800669D60 /* flag.c */, - 9D1A7CC41F085DA800669D60 /* flag.h */, - 9D1A7CC51F085DA800669D60 /* song.c */, - 9D1A7CC61F085DA800669D60 /* song.h */, - 9D1A7CC71F085DA800669D60 /* mockingboard_speech.h */, - 9D1A7CC81F085DA800669D60 /* mockingboard_speech.s */, - 9D1A7CC91F085DA800669D60 /* mockingboard.c */, - 9D1A7CCA1F085DA800669D60 /* mockingboard.h */, - 9D1A7CCB1F085DA800669D60 /* a2.lo.s */, - 9D1A7CB51F085D7F00669D60 /* make */, + 9D413BA3217961E10069AD9D /* doNotBuild */, + ); + name = Products; + sourceTree = ""; + }; + 9D413BA5217961E10069AD9D /* ocanada */ = { + isa = PBXGroup; + children = ( + 9D413BA6217961E10069AD9D /* main.c */, + 9D413BD32179621D0069AD9D /* flag.c */, + 9D413BCC2179621C0069AD9D /* flag.h */, + 9D413BCE2179621C0069AD9D /* mockingboard_speech.h */, + 9D413BD22179621C0069AD9D /* mockingboard_speech.s */, + 9D413BCF2179621C0069AD9D /* mockingboard.c */, + 9D413BCD2179621C0069AD9D /* mockingboard.h */, + 9D413BD12179621C0069AD9D /* song.c */, + 9D413BD02179621C0069AD9D /* song.h */, + 9D413BA8217961E10069AD9D /* Makefile */, + 9D413BAA217961E10069AD9D /* make */, + 9D413BC1217961E20069AD9D /* Supporting Files */, ); path = ocanada; sourceTree = ""; }; - 9D1A7CB51F085D7F00669D60 /* make */ = { + 9D413BAA217961E10069AD9D /* make */ = { isa = PBXGroup; children = ( - 9D1A7CB61F085D7F00669D60 /* AppleCommander.jar */, - 9D1A7CB71F085D7F00669D60 /* createDiskImage */, - 9D1A7CB81F085D7F00669D60 /* DevApple.vii */, - 9D1A7CB91F085D7F00669D60 /* dos33_template.dsk */, - 9D1A7CBA1F085D7F00669D60 /* head.mk */, - 9D1A7CBB1F085D7F00669D60 /* prodos_template.dsk */, - 9D1A7CBC1F085D7F00669D60 /* tail.mk */, - 9D1A7CBD1F085D7F00669D60 /* V2Make.scpt */, + 9D413BAB217961E10069AD9D /* AppleCommander.jar */, + 9D413BAD217961E10069AD9D /* bastokenizer-tools-bt-0.2.0.jar */, + 9D413BAF217961E10069AD9D /* createDiskImage */, + 9D413BB1217961E10069AD9D /* bt */, + 9D413BB3217961E20069AD9D /* DevApple.vii */, + 9D413BB5217961E20069AD9D /* dos33_template.dsk */, + 9D413BB7217961E20069AD9D /* errorFilter.sh */, + 9D413BB9217961E20069AD9D /* head.mk */, + 9D413BBB217961E20069AD9D /* prodos_template.dsk */, + 9D413BBD217961E20069AD9D /* tail.mk */, + 9D413BBF217961E20069AD9D /* V2Make.scpt */, ); name = make; sourceTree = ""; }; + 9D413BC1217961E20069AD9D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 9D413BC2217961E20069AD9D /* ocanada.xcscheme */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXLegacyTarget section */ - 9D1A7CB11F085D7F00669D60 /* ocanada */ = { + 9D413B9E217961E10069AD9D /* ocanada */ = { isa = PBXLegacyTarget; buildArgumentsString = "-C ocanada $(ACTION)"; - buildConfigurationList = 9D1A7CC01F085D7F00669D60 /* Build configuration list for PBXLegacyTarget "ocanada" */; + buildConfigurationList = 9D413BC6217961E20069AD9D /* Build configuration list for PBXLegacyTarget "ocanada" */; buildPhases = ( ); buildToolPath = /usr/bin/make; @@ -88,63 +169,113 @@ }; /* End PBXLegacyTarget section */ +/* Begin PBXNativeTarget section */ + 9D413BA2217961E10069AD9D /* doNotBuild */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9D413BC9217961E20069AD9D /* Build configuration list for PBXNativeTarget "doNotBuild" */; + buildPhases = ( + 9D413B9F217961E10069AD9D /* Sources */, + 9D413BA0217961E10069AD9D /* Frameworks */, + 9D413BA1217961E10069AD9D /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = doNotBuild; + productName = doNotBuild; + productReference = 9D413BA3217961E10069AD9D /* doNotBuild */; + productType = "com.apple.product-type.tool"; + }; +/* End PBXNativeTarget section */ + /* Begin PBXProject section */ - 9D1A7CAD1F085D7F00669D60 /* Project object */ = { + 9D413B9A217961E10069AD9D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0830; + LastUpgradeCheck = 1000; ORGANIZATIONNAME = "Jeremy Rand"; TargetAttributes = { - 9D1A7CB11F085D7F00669D60 = { - CreatedOnToolsVersion = 8.3.3; - ProvisioningStyle = Automatic; + 9D413B9E217961E10069AD9D = { + CreatedOnToolsVersion = 10.0; + }; + 9D413BA2217961E10069AD9D = { + CreatedOnToolsVersion = 10.0; }; }; }; - buildConfigurationList = 9D1A7CB01F085D7F00669D60 /* Build configuration list for PBXProject "ocanada" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; + buildConfigurationList = 9D413B9D217961E10069AD9D /* Build configuration list for PBXProject "ocanada" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, ); - mainGroup = 9D1A7CAC1F085D7F00669D60; + mainGroup = 9D413B99217961E10069AD9D; + productRefGroup = 9D413BA4217961E10069AD9D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - 9D1A7CB11F085D7F00669D60 /* ocanada */, + 9D413B9E217961E10069AD9D /* ocanada */, + 9D413BA2217961E10069AD9D /* doNotBuild */, ); }; /* End PBXProject section */ +/* Begin PBXSourcesBuildPhase section */ + 9D413B9F217961E10069AD9D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9D413BD62179621D0069AD9D /* mockingboard_speech.s in Sources */, + 9D413BD72179621D0069AD9D /* flag.c in Sources */, + 9D413BA9217961E10069AD9D /* Makefile in Sources */, + 9D413BD42179621D0069AD9D /* mockingboard.c in Sources */, + 9D413BD52179621D0069AD9D /* song.c in Sources */, + 9D413BA7217961E10069AD9D /* main.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + /* Begin XCBuildConfiguration section */ - 9D1A7CBE1F085D7F00669D60 /* Debug */ = { + 9D413BC4217961E20069AD9D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; @@ -158,38 +289,49 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MTL_ENABLE_DEBUG_INFO = YES; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; }; name = Debug; }; - 9D1A7CBF1F085D7F00669D60 /* Release */ = { + 9D413BC5217961E20069AD9D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; @@ -198,14 +340,17 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; }; name = Release; }; - 9D1A7CC11F085D7F00669D60 /* Debug */ = { + 9D413BC7217961E20069AD9D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_STYLE = Automatic; DEBUGGING_SYMBOLS = YES; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = VD9FGCW36C; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; GCC_OPTIMIZATION_LEVEL = 0; OTHER_CFLAGS = ""; @@ -214,37 +359,71 @@ }; name = Debug; }; - 9D1A7CC21F085D7F00669D60 /* Release */ = { + 9D413BC8217961E20069AD9D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = VD9FGCW36C; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; PRODUCT_NAME = "$(TARGET_NAME)"; }; name = Release; }; + 9D413BCA217961E20069AD9D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VD9FGCW36C; + GCC_PREPROCESSOR_DEFINITIONS = "__fastcall__=\"\""; + HEADER_SEARCH_PATHS = /usr/local/lib/cc65/include; + PRODUCT_NAME = doNotBuild; + }; + name = Debug; + }; + 9D413BCB217961E20069AD9D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_TEAM = VD9FGCW36C; + GCC_PREPROCESSOR_DEFINITIONS = "__fastcall__=\"\""; + HEADER_SEARCH_PATHS = /usr/local/lib/cc65/include; + PRODUCT_NAME = doNotBuild; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 9D1A7CB01F085D7F00669D60 /* Build configuration list for PBXProject "ocanada" */ = { + 9D413B9D217961E10069AD9D /* Build configuration list for PBXProject "ocanada" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9D1A7CBE1F085D7F00669D60 /* Debug */, - 9D1A7CBF1F085D7F00669D60 /* Release */, + 9D413BC4217961E20069AD9D /* Debug */, + 9D413BC5217961E20069AD9D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 9D1A7CC01F085D7F00669D60 /* Build configuration list for PBXLegacyTarget "ocanada" */ = { + 9D413BC6217961E20069AD9D /* Build configuration list for PBXLegacyTarget "ocanada" */ = { isa = XCConfigurationList; buildConfigurations = ( - 9D1A7CC11F085D7F00669D60 /* Debug */, - 9D1A7CC21F085D7F00669D60 /* Release */, + 9D413BC7217961E20069AD9D /* Debug */, + 9D413BC8217961E20069AD9D /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9D413BC9217961E20069AD9D /* Build configuration list for PBXNativeTarget "doNotBuild" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9D413BCA217961E20069AD9D /* Debug */, + 9D413BCB217961E20069AD9D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; - rootObject = 9D1A7CAD1F085D7F00669D60 /* Project object */; + rootObject = 9D413B9A217961E10069AD9D /* Project object */; } diff --git a/ocanada.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist b/ocanada.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist index d1f88e5..f7215a5 100644 --- a/ocanada.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/ocanada.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist @@ -4,19 +4,16 @@ SchemeUserState - ocanada.xcscheme + doNotBuild.xcscheme + + orderHint + 1 + + ocanada.xcscheme_^#shared#^_ orderHint 0 - SuppressBuildableAutocreation - - 9D1A7CB11F085D7F00669D60 - - primary - - - diff --git a/ocanada/Makefile b/ocanada/Makefile index d4ae139..bde39b4 100644 --- a/ocanada/Makefile +++ b/ocanada/Makefile @@ -18,10 +18,6 @@ include make/head.mk # The name of your system or binary file to build goes here: PGM=ocanada -# Set the config you are building for. See these pages for details: -# http://cc65.github.io/cc65/doc/apple2.html#s4 -# http://cc65.github.io/cc65/doc/apple2enh.html#s4 -# # Uncomment the one you want below (the first one is the default): # MACHINE = apple2 # MACHINE = apple2-dos33 @@ -34,6 +30,13 @@ MACHINE = apple2-system # MACHINE = apple2enh-loader # MACHINE = apple2enh-reboot +# Uncomment the appropriate project type. If your entry point is +# main() in a .c file, then your project type is cc65. If your +# entry point is in an assembly file, then you project type is +# ca65: +PROJECT_TYPE = cc65 +# PROJECT_TYPE = ca65 + # Uncomment and set this to your starting address in Apple II memory # if necessary: # START_ADDR = 6000 @@ -48,26 +51,18 @@ MACHINE = apple2-system # Note: You can assemble for 65816 in 16-bit mode but the C compiler # will only produce 8-bit code. -# Any *.c files in your main project directory will automatically be -# built. But, if you have subdirectories with C files in them, you -# should add them to the list of C_SRCS to build. Do that by -# uncommenting the following line and changing "someSubDir" to match -# the subdirectory you have created. Add multiple lines like this -# for each subdirectory: -# C_SRCS += $(wildcard someSubDir/*.c) - -# Any *.s files in your main project directory will automatically be -# built. But, if you have subdirectories with assembly files in them, -# you should add them to the list of ASM_SRCS to build. Do that by -# uncommenting the following line and changing "someSubDir" to match -# the subdirectory you have created. Add multiple lines like this -# for each subdirectory: -# ASM_SRCS += $(wildcard someSubDir/*.s) +# Add any other directories where you are putting C or assembly source +# files to this list: +SRCDIRS+= # If you have a non-standard cc65 install, you may need to change # some of these. Uncomment the following line and change it to the -# correct path to CC65_HOME if the default is not correct: -# export CC65_HOME := /usr/local/lib/cc65 +# correct path to CC65_HOME if the default is not correct. If you +# are using cc65 v2.13.3, the default is: +# /usr/local/lib/cc65 +# If you are using cc65 v2.17, the default is: +# /usr/local/share/cc65 +# export CC65_HOME := /path/to/your/cc65/directory # # If the path to the cc65 binaries is not correct, uncomment this # line and change it: @@ -85,10 +80,171 @@ MACHINE = apple2-system # this variable: # LDFLAGS += -v +# If you want to add arguments to the BASIC tokenizer commandline, +# add them to this valiable: +# BASICFLAGS += --optimize + +# If you want to link the lores graphics driver with your executable, +# uncomment the next line. +DRIVERS += loresgr +# +# To use the lores driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_lores_drv.h" +# int main(void) +# { +# tgi_install(&a2_lores_drv); +# tgi_init(); +# // Use the graphics driver +# tgi_uninstall(); +# } +# +# Read the $CC65_HOME/include/tgi.h file to see what the +# driver interface provides. Also check out +# $CC65_HOME/include/apple2.h to see the colour definitions. + +# If you want to link the hires graphics driver with your executable, +# uncomment the next line. +# DRIVERS += hiresgr +# +# To use the hires driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_hires_drv.h" +# int main(void) +# { +# tgi_install(&a2_hires_drv); +# tgi_init(); +# // Use the graphics driver +# tgi_uninstall(); +# } +# +# Read the $CC65_HOME/cc65/include/tgi.h file to see what the +# driver interface provides. Also check out +# $CC65_HOME/include/apple2.h to see the colour definitions. + +# If you want to link the extended memory driver with your executable, +# uncomment the next line. +# DRIVERS += auxmem +# +# To use the auxmem driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_auxmem_drv.h" +# int main(void) +# { +# em_install(&a2_auxmem_drv); +# // Use the auxmem driver +# em_uninstall(); +# } +# +# Read the $CC65_HOME/include/em.h file to see what the +# driver interface provides. + +# If you want to link the joystick driver with your executable, +# uncomment the next line. +# DRIVERS += joystick +# +# To use the joystick driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_joystick_drv.h" +# int main(void) +# { +# joy_install(&a2_joystick_drv); +# // Use the joystick driver +# joy_uninstall(); +# } +# +# Read the $CC65_HOME/include/joystick.h file to see what the +# driver interface provides. + +# If you want to link the mouse driver with your executable, +# uncomment the next line. +# DRIVERS += mouse +# +# To use the mouse driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_mouse_drv.h" +# int main(void) +# { +# mouse_install(&mouse_def_callbacks, &a2_mouse_drv); +# // Use the mouse driver +# mouse_uninstall(); +# } +# +# Read the $CC65_HOME/include/mouse.h file to see what the +# driver interface provides. + +# If you want to link the serial driver with your executable, +# uncomment the next line. +# DRIVERS += serial +# +# To use the serial driver, add code which looks like this to your +# project: +# +# #include "drivers/a2_serial_drv.h" +# int main(void) +# { +# ser_install(&a2_serial_drv); +# // Use the serial driver +# ser_uninstall(); +# } +# +# Read the $CC65_HOME/include/serial.h file to see what the +# driver interface provides. + # If you have java installed in a non-standard location, you can set # the path to it by uncommenting the following line: # export JAVA=/usr/bin/java +# If you want to copy one or more files or directories to the target disk +# image, add the root directory to this variable. All files will be +# copied from the source to the target using the same path from the source. +# +# For example, if you set COPYDIRS to dir and in your project you have +# the following files: +# dir/mySystemFile +# dir/newDir/anotherFile +# +# Then, during the copy phase, mySystemFile will be copied into the root +# of the disk and anotherFile will be copied into a directory named +# newDir. The newDir directory will be created if it does not already +# exist. +# +# The name of the file to copy is checked and if it ends in: +# .as - It assumes the file is in AppleSingle format. The .as +# suffix is stripped from the name when copied to the +# disk image. +# . - If the file ends with a single character which matches +# a DOS 3.3 file type (A, B, T, etc) it uses that value as +# the file type of the file copied to the disk image. The +# single character is removed from the file name. +# . - If the file ends with a three letter alpha extension, it +# uses that TLA as the file type of the file copied to the +# disk image. The TLA is removed from the file name. +# +# If you do not provide any type information for your filenames, +# it will be copied as a binary. +# +COPYDIRS= + +# Add any rules you want to execute before any compiles or assembly +# commands are called here, if any. You can generate .c, .s or .h +# files for example. You can generate data files. Whatever you +# might need. +# +# All of your commands associated with a rule _must_ start with a tab +# character. Xcode makes it a bit tough to type a tab character by +# default. Press option-tab within Xcode to insert a tab character. +gen: + +# For any files you generated in the gen target above, you should +# add rules in genclean to remove those generated files when you +# clean your build. +genclean: # Do not change anything else below here... include make/tail.mk diff --git a/ocanada/a2.lo.s b/ocanada/a2.lo.s deleted file mode 100644 index 8d2e4a0..0000000 --- a/ocanada/a2.lo.s +++ /dev/null @@ -1,930 +0,0 @@ -; -; File generated by co65 v 2.13.3 using model `cc65-module' -; -.fopt compiler,"co65 v 2.13.3" -.case on -.debuginfo off -.export _a2_lo - -; -; CODE SEGMENT -; -.segment "CODE" -_a2_lo: - .byte $74 - .byte $67 - .byte $69 - .byte $02 - .byte $28 - .byte $00 - .byte $30 - .byte $00 - .byte $10 - .byte $01 - .byte $08 - .byte $08 - .byte $00 - .byte $00 - .byte $00 - .byte $00 - .word _a2_lo+75 - .word _a2_lo+75 - .word _a2_lo+58 - .word _a2_lo+76 - .word _a2_lo+89 - .word _a2_lo+118 - .word _a2_lo+98 - .word _a2_lo+75 - .word _a2_lo+75 - .word _a2_lo+108 - .word _a2_lo+118 - .word _a2_lo+124 - .word _a2_lo+124 - .word _a2_lo+129 - .word _a2_lo+194 - .word _a2_lo+210 - .word _a2_lo+558 - .word _a2_lo+586 - .word _a2_lo+75 - .word _a2_lo+75 - .byte $00 - .byte $00 - .byte $2C - .byte $82 - .byte $C0 - .byte $20 - .byte $40 - .byte $FB - .byte $2C - .byte $52 - .byte $C0 - .byte $2C - .byte $80 - .byte $C0 - .byte $A9 - .byte $00 - .byte $8D - .word BSS+0 - .byte $60 - .byte $2C - .byte $82 - .byte $C0 - .byte $20 - .byte $99 - .byte $F3 - .byte $20 - .byte $58 - .byte $FC - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $AD - .word BSS+0 - .byte $A2 - .byte $00 - .byte $8E - .word BSS+0 - .byte $60 - .byte $2C - .byte $82 - .byte $C0 - .byte $20 - .byte $32 - .byte $F8 - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $2C - .byte $82 - .byte $C0 - .byte $20 - .byte $64 - .byte $F8 - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $A9 - .byte $06 - .byte $8D - .word BSS+0 - .byte $60 - .byte $A9 - .byte <(_a2_lo+227) - .byte $A2 - .byte >(_a2_lo+995) - .byte $60 - .byte $2C - .byte $82 - .byte $C0 - .byte $A4 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $20 - .byte $00 - .byte $F8 - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $A5 - .byte <(ZEROPAGE+11) - .byte $30 - .byte $2E - .byte $A5 - .byte <(ZEROPAGE+9) - .byte $30 - .byte $2A - .byte $A5 - .byte <(ZEROPAGE+8) - .byte $A6 - .byte <(ZEROPAGE+9) - .byte $85 - .byte <(ZEROPAGE+16) - .byte $86 - .byte <(ZEROPAGE+17) - .byte $A2 - .byte <(ZEROPAGE+16) - .byte $AD - .word _a2_lo+4 - .byte $AC - .word _a2_lo+5 - .byte $20 - .word _a2_lo+961 - .byte $B0 - .byte $15 - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $A6 - .byte <(ZEROPAGE+11) - .byte $85 - .byte <(ZEROPAGE+16) - .byte $86 - .byte <(ZEROPAGE+17) - .byte $A2 - .byte <(ZEROPAGE+16) - .byte $AD - .word _a2_lo+6 - .byte $AC - .word _a2_lo+7 - .byte $20 - .word _a2_lo+961 - .byte $90 - .byte $C0 - .byte $60 - .byte $2C - .byte $82 - .byte $C0 - .byte $A4 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $20 - .byte $71 - .byte $F8 - .byte $A2 - .byte $00 - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+8) - .byte $85 - .byte <(ZEROPAGE+6) - .byte $A5 - .byte <(ZEROPAGE+13) - .byte $E5 - .byte <(ZEROPAGE+9) - .byte $A8 - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $20 - .word _a2_lo+943 - .byte $85 - .byte <(ZEROPAGE+6) - .byte $84 - .byte <(ZEROPAGE+7) - .byte $A5 - .byte <(ZEROPAGE+14) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+10) - .byte $8D - .word BSS+3 - .byte $A5 - .byte <(ZEROPAGE+15) - .byte $E5 - .byte <(ZEROPAGE+11) - .byte $A8 - .byte $AD - .word BSS+3 - .byte $20 - .word _a2_lo+943 - .byte $8D - .word BSS+3 - .byte $8C - .word BSS+4 - .byte $A2 - .byte <(ZEROPAGE+12) - .byte $A5 - .byte <(ZEROPAGE+8) - .byte $A4 - .byte <(ZEROPAGE+9) - .byte $20 - .word _a2_lo+961 - .byte $90 - .byte $04 - .byte $A9 - .byte $01 - .byte $D0 - .byte $02 - .byte $A9 - .byte $FF - .byte $8D - .word BSS+5 - .byte $A2 - .byte <(ZEROPAGE+14) - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $A4 - .byte <(ZEROPAGE+11) - .byte $20 - .word _a2_lo+961 - .byte $90 - .byte $04 - .byte $A9 - .byte $01 - .byte $D0 - .byte $02 - .byte $A9 - .byte $FF - .byte $8D - .word BSS+6 - .byte $A9 - .byte $00 - .byte $85 - .byte <(ZEROPAGE+4) - .byte $85 - .byte <(ZEROPAGE+5) - .byte $8D - .word BSS+7 - .byte $8D - .word BSS+8 - .byte $A2 - .byte <(ZEROPAGE+6) - .byte $AD - .word BSS+3 - .byte $AC - .word BSS+4 - .byte $20 - .word _a2_lo+961 - .byte $B0 - .byte $28 - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $AE - .word BSS+3 - .byte $8D - .word BSS+3 - .byte $86 - .byte <(ZEROPAGE+6) - .byte $A5 - .byte <(ZEROPAGE+7) - .byte $AE - .word BSS+4 - .byte $8D - .word BSS+4 - .byte $86 - .byte <(ZEROPAGE+7) - .byte $AD - .word BSS+5 - .byte $8D - .word BSS+7 - .byte $AD - .word BSS+6 - .byte $8D - .word BSS+8 - .byte $A9 - .byte $00 - .byte $8D - .word BSS+5 - .byte $8D - .word BSS+6 - .byte $AD - .word BSS+3 - .byte $AC - .word BSS+4 - .byte $20 - .word _a2_lo+947 - .byte $8D - .word BSS+3 - .byte $8C - .word BSS+4 - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $A6 - .byte <(ZEROPAGE+7) - .byte $8D - .word BSS+1 - .byte $8E - .word BSS+2 - .byte $AD - .word BSS+1 - .byte $0D - .word BSS+2 - .byte $D0 - .byte $01 - .byte $60 - .byte $20 - .word _a2_lo+143 - .byte $A5 - .byte <(ZEROPAGE+4) - .byte $18 - .byte $6D - .word BSS+3 - .byte $85 - .byte <(ZEROPAGE+12) - .byte $A5 - .byte <(ZEROPAGE+5) - .byte $6D - .word BSS+4 - .byte $85 - .byte <(ZEROPAGE+13) - .byte $AA - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+6) - .byte $85 - .byte <(ZEROPAGE+14) - .byte $8A - .byte $65 - .byte <(ZEROPAGE+7) - .byte $85 - .byte <(ZEROPAGE+15) - .byte $A2 - .byte $00 - .byte $AD - .word BSS+5 - .byte $10 - .byte $01 - .byte $CA - .byte $18 - .byte $65 - .byte <(ZEROPAGE+8) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $8A - .byte $65 - .byte <(ZEROPAGE+9) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $A2 - .byte $00 - .byte $AD - .word BSS+8 - .byte $10 - .byte $01 - .byte $CA - .byte $18 - .byte $65 - .byte <(ZEROPAGE+10) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $8A - .byte $65 - .byte <(ZEROPAGE+11) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $A4 - .byte <(ZEROPAGE+13) - .byte $20 - .word _a2_lo+943 - .byte $85 - .byte <(ZEROPAGE+2) - .byte $84 - .byte <(ZEROPAGE+3) - .byte $A5 - .byte <(ZEROPAGE+14) - .byte $A4 - .byte <(ZEROPAGE+15) - .byte $20 - .word _a2_lo+943 - .byte $A2 - .byte <(ZEROPAGE+2) - .byte $20 - .word _a2_lo+961 - .byte $10 - .byte $07 - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $A6 - .byte <(ZEROPAGE+13) - .byte $4C - .word _a2_lo+534 - .byte $A2 - .byte $00 - .byte $AD - .word BSS+7 - .byte $10 - .byte $01 - .byte $CA - .byte $18 - .byte $65 - .byte <(ZEROPAGE+8) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $8A - .byte $65 - .byte <(ZEROPAGE+9) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $A2 - .byte $00 - .byte $AD - .word BSS+6 - .byte $10 - .byte $01 - .byte $CA - .byte $18 - .byte $65 - .byte <(ZEROPAGE+10) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $8A - .byte $65 - .byte <(ZEROPAGE+11) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $A5 - .byte <(ZEROPAGE+14) - .byte $A6 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+4) - .byte $86 - .byte <(ZEROPAGE+5) - .byte $AD - .word BSS+1 - .byte $38 - .byte $E9 - .byte $01 - .byte $8D - .word BSS+1 - .byte $90 - .byte $03 - .byte $4C - .word _a2_lo+386 - .byte $CE - .word BSS+2 - .byte $4C - .word _a2_lo+386 - .byte $2C - .byte $82 - .byte $C0 - .byte $E6 - .byte <(ZEROPAGE+14) - .byte $A6 - .byte <(ZEROPAGE+12) - .byte $86 - .byte $2C - .byte $A4 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $20 - .byte $19 - .byte $F8 - .byte $E6 - .byte <(ZEROPAGE+10) - .byte $A5 - .byte <(ZEROPAGE+14) - .byte $C5 - .byte <(ZEROPAGE+10) - .byte $D0 - .byte $F1 - .byte $2C - .byte $80 - .byte $C0 - .byte $60 - .byte $A5 - .byte <(ZEROPAGE+16) - .byte $D0 - .byte $03 - .byte $4C - .word _a2_lo+143 - .byte $85 - .byte <(ZEROPAGE+12) - .byte $A9 - .byte $00 - .byte $85 - .byte <(ZEROPAGE+13) - .byte $85 - .byte <(ZEROPAGE+14) - .byte $85 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+2) - .byte $85 - .byte <(ZEROPAGE+3) - .byte $A5 - .byte <(ZEROPAGE+8) - .byte $A6 - .byte <(ZEROPAGE+9) - .byte $85 - .byte <(ZEROPAGE+4) - .byte $86 - .byte <(ZEROPAGE+5) - .byte $A5 - .byte <(ZEROPAGE+10) - .byte $A6 - .byte <(ZEROPAGE+11) - .byte $85 - .byte <(ZEROPAGE+6) - .byte $86 - .byte <(ZEROPAGE+7) - .byte $A2 - .byte <(ZEROPAGE+14) - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $A4 - .byte <(ZEROPAGE+13) - .byte $20 - .word _a2_lo+961 - .byte $90 - .byte $01 - .byte $60 - .byte $A5 - .byte <(ZEROPAGE+4) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+12) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+5) - .byte $65 - .byte <(ZEROPAGE+13) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+14) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $48 - .byte $A5 - .byte <(ZEROPAGE+7) - .byte $65 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $48 - .byte $20 - .word _a2_lo+143 - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+14) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $8D - .word BSS+5 - .byte $A5 - .byte <(ZEROPAGE+7) - .byte $E5 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $8D - .word BSS+6 - .byte $20 - .word _a2_lo+143 - .byte $68 - .byte $85 - .byte <(ZEROPAGE+11) - .byte $68 - .byte $85 - .byte <(ZEROPAGE+10) - .byte $A5 - .byte <(ZEROPAGE+4) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+12) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+5) - .byte $E5 - .byte <(ZEROPAGE+13) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $20 - .word _a2_lo+143 - .byte $AD - .word BSS+5 - .byte $85 - .byte <(ZEROPAGE+10) - .byte $AD - .word BSS+6 - .byte $85 - .byte <(ZEROPAGE+11) - .byte $20 - .word _a2_lo+143 - .byte $A5 - .byte <(ZEROPAGE+4) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+14) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+5) - .byte $65 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+12) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $48 - .byte $A5 - .byte <(ZEROPAGE+7) - .byte $65 - .byte <(ZEROPAGE+13) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $48 - .byte $20 - .word _a2_lo+143 - .byte $A5 - .byte <(ZEROPAGE+6) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+12) - .byte $85 - .byte <(ZEROPAGE+10) - .byte $8D - .word BSS+5 - .byte $A5 - .byte <(ZEROPAGE+7) - .byte $E5 - .byte <(ZEROPAGE+13) - .byte $85 - .byte <(ZEROPAGE+11) - .byte $8D - .word BSS+6 - .byte $20 - .word _a2_lo+143 - .byte $68 - .byte $85 - .byte <(ZEROPAGE+11) - .byte $68 - .byte $85 - .byte <(ZEROPAGE+10) - .byte $A5 - .byte <(ZEROPAGE+4) - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+14) - .byte $85 - .byte <(ZEROPAGE+8) - .byte $A5 - .byte <(ZEROPAGE+5) - .byte $E5 - .byte <(ZEROPAGE+15) - .byte $85 - .byte <(ZEROPAGE+9) - .byte $20 - .word _a2_lo+143 - .byte $AD - .word BSS+5 - .byte $85 - .byte <(ZEROPAGE+10) - .byte $AD - .word BSS+6 - .byte $85 - .byte <(ZEROPAGE+11) - .byte $20 - .word _a2_lo+143 - .byte $A5 - .byte <(ZEROPAGE+2) - .byte $A6 - .byte <(ZEROPAGE+3) - .byte $18 - .byte $65 - .byte <(ZEROPAGE+14) - .byte $A8 - .byte $8A - .byte $65 - .byte <(ZEROPAGE+15) - .byte $AA - .byte $98 - .byte $18 - .byte $65 - .byte <(ZEROPAGE+14) - .byte $A8 - .byte $8A - .byte $65 - .byte <(ZEROPAGE+15) - .byte $AA - .byte $98 - .byte $18 - .byte $69 - .byte $01 - .byte $90 - .byte $01 - .byte $E8 - .byte $8D - .word BSS+1 - .byte $8E - .word BSS+2 - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+12) - .byte $A8 - .byte $8A - .byte $E5 - .byte <(ZEROPAGE+13) - .byte $AA - .byte $98 - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+12) - .byte $A8 - .byte $8A - .byte $E5 - .byte <(ZEROPAGE+13) - .byte $AA - .byte $98 - .byte $18 - .byte $69 - .byte $01 - .byte $90 - .byte $01 - .byte $E8 - .byte $8D - .word BSS+3 - .byte $8E - .word BSS+4 - .byte $E6 - .byte <(ZEROPAGE+14) - .byte $D0 - .byte $02 - .byte $E6 - .byte <(ZEROPAGE+15) - .byte $AD - .word BSS+3 - .byte $AC - .word BSS+4 - .byte $20 - .word _a2_lo+943 - .byte $85 - .byte <(ZEROPAGE+2) - .byte $84 - .byte <(ZEROPAGE+3) - .byte $AD - .word BSS+1 - .byte $AC - .word BSS+2 - .byte $20 - .word _a2_lo+943 - .byte $A2 - .byte <(ZEROPAGE+2) - .byte $20 - .word _a2_lo+961 - .byte $10 - .byte $14 - .byte $A5 - .byte <(ZEROPAGE+12) - .byte $38 - .byte $E9 - .byte $01 - .byte $85 - .byte <(ZEROPAGE+12) - .byte $B0 - .byte $02 - .byte $C6 - .byte <(ZEROPAGE+13) - .byte $AD - .word BSS+3 - .byte $AE - .word BSS+4 - .byte $4C - .word _a2_lo+936 - .byte $AD - .word BSS+1 - .byte $AE - .word BSS+2 - .byte $85 - .byte <(ZEROPAGE+2) - .byte $86 - .byte <(ZEROPAGE+3) - .byte $4C - .word _a2_lo+623 - .byte $C0 - .byte $00 - .byte $10 - .byte $0D - .byte $18 - .byte $49 - .byte $FF - .byte $69 - .byte $01 - .byte $48 - .byte $98 - .byte $49 - .byte $FF - .byte $69 - .byte $00 - .byte $A8 - .byte $68 - .byte $60 - .byte $85 - .byte <(ZEROPAGE+18) - .byte $84 - .byte <(ZEROPAGE+19) - .byte $B5 - .byte $00 - .byte $48 - .byte $B5 - .byte $01 - .byte $A8 - .byte $68 - .byte $AA - .byte $98 - .byte $38 - .byte $E5 - .byte <(ZEROPAGE+19) - .byte $D0 - .byte $09 - .byte $E4 - .byte <(ZEROPAGE+18) - .byte $F0 - .byte $04 - .byte $69 - .byte $FF - .byte $09 - .byte $01 - .byte $60 - .byte $50 - .byte $04 - .byte $49 - .byte $FF - .byte $09 - .byte $01 - .byte $60 - .byte $00 - .byte $01 - .byte $02 - .byte $03 - .byte $04 - .byte $05 - .byte $06 - .byte $07 - .byte $08 - .byte $09 - .byte $0A - .byte $0B - .byte $0C - .byte $0D - .byte $0E - .byte $0F - -; -; DATA SEGMENT -; -.segment "DATA" -DATA: - -; -; BSS SEGMENT -; -.segment "BSS" -BSS: - .res 9 - -; -; ZEROPAGE SEGMENT -; -.import __ZP_START__ ; Linker generated symbol -ZEROPAGE = __ZP_START__ - -.end diff --git a/ocanada/flag.c b/ocanada/flag.c index 60f629f..08478b2 100644 --- a/ocanada/flag.c +++ b/ocanada/flag.c @@ -11,10 +11,9 @@ #include #include +#include "drivers/a2_lores_drv.h" #include "flag.h" -// Extern symbols for graphics drivers -extern char a2_lo; void initGraphics(void) { @@ -24,7 +23,7 @@ void initGraphics(void) return; // Install drivers - tgi_install(&a2_lo); + tgi_install(&a2_lores_drv); tgi_init(); diff --git a/ocanada/make/AppleCommander.jar b/ocanada/make/AppleCommander.jar index f74e7cb..4d61bfc 100644 Binary files a/ocanada/make/AppleCommander.jar and b/ocanada/make/AppleCommander.jar differ diff --git a/ocanada/make/DevApple.vii b/ocanada/make/DevApple.vii index 4f487a9..d6eb59b 100644 Binary files a/ocanada/make/DevApple.vii and b/ocanada/make/DevApple.vii differ diff --git a/ocanada/make/V2Make.scpt b/ocanada/make/V2Make.scpt index 299ab4b..5ca04a3 100644 Binary files a/ocanada/make/V2Make.scpt and b/ocanada/make/V2Make.scpt differ diff --git a/ocanada/make/bastokenizer-tools-bt-0.2.0.jar b/ocanada/make/bastokenizer-tools-bt-0.2.0.jar new file mode 100644 index 0000000..93aa68f Binary files /dev/null and b/ocanada/make/bastokenizer-tools-bt-0.2.0.jar differ diff --git a/ocanada/make/bt b/ocanada/make/bt new file mode 100755 index 0000000..ca521ba --- /dev/null +++ b/ocanada/make/bt @@ -0,0 +1,34 @@ +#!/bin/sh + +if [ -z "$JAVA" ] +then + for item in "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home" /Library/Java/JavaVirtualMachines/*/Contents/Home /usr + do + if [ -x "$item/bin/java" ] + then + JAVA="$item/bin/java" + break + fi + done +fi + +if [ -z "$JAVA" ] +then + echo Cannot find a path to a Java runtime. + echo Go to https://java.com/download if you do not have Java. + echo If you do have Java, you may need to uncomment the JAVA + echo line in the Makefile and set it to the path for your + echo Java runtime binary. + exit 1 +fi + +INPUTFILE=$1 +shift + +tr -d '©' < "$INPUTFILE" > /tmp/bt_filtered.$$ + +"$JAVA" -jar make/bastokenizer-tools-bt-0.2.0.jar $* /tmp/bt_filtered.$$ +RESULT=$? + +rm /tmp/bt_filtered.$$ +exit $RESULT diff --git a/ocanada/make/createDiskImage b/ocanada/make/createDiskImage index 276c036..55e428a 100755 --- a/ocanada/make/createDiskImage +++ b/ocanada/make/createDiskImage @@ -1,5 +1,10 @@ #!/bin/sh +merlinStartAddr() { + awk '$1 ~ /^[oO][rR][gG]$/{print $2}' linkscript.s | sed 's/^[0$]*//' +} + + if [ $# -lt 5 ] then echo USAGE: $0 ' ' @@ -29,16 +34,21 @@ then fi APPLECOMMANDER=$1 -MACHINE=$2 -DISKIMAGE=$3 -PROGRAM=$4 -STARTADDR=`echo $5 | sed 's/^0*//'` +shift -if [ ! -f "$PROGRAM" ] -then - echo "Cannot file executable $PROGRAM" - exit 1 -fi +MACHINE=$1 +shift + +DISKIMAGE=$1 +shift + +PROGRAM=$1 +shift + +STARTADDR=`echo $1 | sed 's/^0*//'` +shift + +SOURCEFILE=$PROGRAM case "$MACHINE" in apple2) @@ -46,8 +56,10 @@ case "$MACHINE" in DELETELOADER=1 RENAMELOADER=0 DELETEBASIC=0 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=15 ;; @@ -57,8 +69,10 @@ case "$MACHINE" in DELETELOADER=1 RENAMELOADER=0 DELETEBASIC=0 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=15 ;; @@ -68,8 +82,10 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=0 DELETEBASIC=0 + COPYBINARY=1 HASHEADER=1 - FILETYPE="bin" + FILETYPE="B" + BASICFILETYPE="A" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=30 ;; @@ -79,8 +95,10 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=0 DELETEBASIC=0 + COPYBINARY=1 HASHEADER=1 - FILETYPE="bin" + FILETYPE="B" + BASICFILETYPE="A" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=30 ;; @@ -90,8 +108,10 @@ case "$MACHINE" in DELETELOADER=1 RENAMELOADER=0 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=0 FILETYPE="sys" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM`.system MAXFILENAMELEN=15 ;; @@ -101,8 +121,10 @@ case "$MACHINE" in DELETELOADER=1 RENAMELOADER=0 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=0 FILETYPE="sys" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM`.system MAXFILENAMELEN=15 ;; @@ -112,8 +134,10 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=1 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=15 ;; @@ -123,8 +147,10 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=1 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=15 ;; @@ -134,8 +160,10 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=1 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` MAXFILENAMELEN=15 ;; @@ -145,10 +173,68 @@ case "$MACHINE" in DELETELOADER=0 RENAMELOADER=1 DELETEBASIC=1 + COPYBINARY=1 HASHEADER=1 FILETYPE="bin" + BASICFILETYPE="bas" TARGETFILE=`basename $PROGRAM` - MAXFILENAMELEN=8 + MAXFILENAMELEN=15 + ;; + + apple2-basic) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=0 + COPYBINARY=0 + FILETYPE="bas" + BASICFILETYPE="bas" + TARGETFILE=`basename $PROGRAM` + SOURCEFILE=${PROGRAM}.tok + MAXFILENAMELEN=15 + ;; + + apple2-dos33-basic) + TEMPLATE="make/dos33_template.dsk" + DELETELOADER=0 + RENAMELOADER=0 + DELETEBASIC=0 + COPYBINARY=0 + FILETYPE="A" + BASICFILETYPE="A" + TARGETFILE=`basename $PROGRAM` + SOURCEFILE=${PROGRAM}.tok + MAXFILENAMELEN=30 + ;; + + apple2-merlin) + TEMPLATE="make/prodos_template.dsk" + DELETELOADER=1 + RENAMELOADER=0 + DELETEBASIC=0 + COPYBINARY=1 + HASHEADER=0 + FILETYPE="bin" + BASICFILETYPE="bas" + TARGETFILE=`basename $PROGRAM` + MAXFILENAMELEN=15 + + STARTADDR=`merlinStartAddr` + ;; + + apple2-dos33-merlin) + TEMPLATE="make/dos33_template.dsk" + DELETELOADER=0 + RENAMELOADER=0 + DELETEBASIC=0 + COPYBINARY=1 + HASHEADER=0 + FILETYPE="B" + BASICFILETYPE="A" + TARGETFILE=`basename $PROGRAM` + MAXFILENAMELEN=30 + + STARTADDR=`merlinStartAddr` ;; *) @@ -157,6 +243,19 @@ case "$MACHINE" in ;; esac +STARTARG="" +if [ ! -z "$STARTADDR" ] +then + STARTARG="0x$STARTADDR" +fi + +if [ ! -f "$SOURCEFILE" ] +then + echo "Cannot file executable $SOURCEFILE" + exit 1 +fi + + if [ ${#TARGETFILE} -gt $MAXFILENAMELEN ] then echo "The filename $TARGETFILE exceeds the max name length of the filesystem ($MAXFILENAMELEN)" @@ -185,7 +284,7 @@ then rm -f "$DISKIMAGE" exit 1 fi - "$JAVA" -jar "$APPLECOMMANDER" -e "$DISKIMAGE" LOADER.SYSTEM | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$LOADERFILE" sys + "$JAVA" -jar "$APPLECOMMANDER" -g "$DISKIMAGE" LOADER.SYSTEM | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$LOADERFILE" sys "$JAVA" -jar "$APPLECOMMANDER" -d "$DISKIMAGE" LOADER.SYSTEM fi @@ -194,15 +293,81 @@ then "$JAVA" -jar "$APPLECOMMANDER" -d "$DISKIMAGE" BASIC.SYSTEM fi -if [ $HASHEADER -eq 1 ] +if [ $COPYBINARY -eq 1 ] then - HDR_STARTADDR=`od -t x2 -N 2 < "$PROGRAM" | head -1 | awk '{print $2}' | sed 's/^0*//'` - if [ "$HDR_STARTADDR" = "$STARTADDR" ] + if [ "$CC65_SUPPORTS_APPLE_SINGLE" -eq 1 ] then - dd if="$PROGRAM" bs=4 skip=1 | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE 0x$STARTADDR - else - "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE 0x$STARTADDR < "$PROGRAM" + "$JAVA" -jar "$APPLECOMMANDER" -as "$DISKIMAGE" "$TARGETFILE" < "$SOURCEFILE" + elif [ $HASHEADER -eq 1 ] + then + HDR_STARTADDR=`od -t x2 -N 2 < "$SOURCEFILE" | head -1 | awk '{print $2}' | sed 's/^0*//'` + if [ "$HDR_STARTADDR" = "$STARTADDR" ] + then + dd if="$SOURCEFILE" bs=4 skip=1 | "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG + else + "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG < "$SOURCEFILE" + fi + else + "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE $STARTARG < "$SOURCEFILE" fi -else - "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$TARGETFILE" $FILETYPE < "$PROGRAM" fi + +for ITEM in $* +do + # If this is a file matching *.tok, then this is an Applesoft BASIC file + # to copy to the disk image. + if [ -f "$ITEM" ] && echo "$ITEM" | grep '\.tok$' > /dev/null + then + DESTFILE=`echo "$ITEM" | sed 's/\.tok$//'` + "$JAVA" -jar "$APPLECOMMANDER" -p "$DISKIMAGE" "$DESTFILE" "$BASICFILETYPE" 0x801 < "$ITEM" + continue + fi + + if [ ! -d "$ITEM" ] + then + echo Unable to find directory $ITEM + exit 1 + fi + + OLDPWD=`pwd` + cd $ITEM + + find . -type f -print | while read FILE + do + TRANSFERARG=-p + FILETYPE=bin + DESTFILE=`echo $FILE | sed 's/^\.\///'` + + if echo $FILE | egrep '\.as$' > /dev/null + then + # If the file ends with .as, this means the input is AppleSingle format. + # Strip the .as from the end of the file name and set the args to do + # an AppleSingle transfer. + TRANSFERARG=-as + FILETYPE="" + DESTFILE=`echo $DESTFILE | sed 's/\.as$//'` + elif echo $FILE | egrep '\.[ABITSRab]$' > /dev/null + then + # If the file ends with a single character DOS 3.3 file type, then use + # that as the file type. + FILETYPE=`echo $DESTFILE | awk -F. '{print $NF}'` + DESTFILE=`echo $DESTFILE | sed 's/\.[ABITSRab]$//'` + elif echo $FILE | egrep '\.[a-zA-Z][a-zA-Z][a-zA-Z]$' > /dev/null + then + # If the file ends with a three letter extension, use that as + # the file type. + FILETYPE=`echo $DESTFILE | awk -F. '{print $NF}'` + DESTFILE=`echo $DESTFILE | sed 's/\.[a-zA-Z][a-zA-Z][a-zA-Z]$//'` + fi + + # If the file type is text, convert the line feeds to carriage return + if [ $FILETYPE = txt ] || [ $FILETYPE = T ] + then + tr '\n' '\r' < $FILE | "$JAVA" -jar "$OLDPWD/$APPLECOMMANDER" $TRANSFERARG "$OLDPWD/$DISKIMAGE" "$DESTFILE" $FILETYPE + else + "$JAVA" -jar "$OLDPWD/$APPLECOMMANDER" $TRANSFERARG "$OLDPWD/$DISKIMAGE" "$DESTFILE" $FILETYPE < $FILE + fi + done + + cd "$OLDPWD" +done diff --git a/ocanada/make/errorFilter.sh b/ocanada/make/errorFilter.sh new file mode 100755 index 0000000..30259c1 --- /dev/null +++ b/ocanada/make/errorFilter.sh @@ -0,0 +1,59 @@ +#!/bin/sh + +PWD=`pwd` + +$* 2> /tmp/errors.$$ +RESULT=$? + +if [ $RESULT -ne 0 ] +then + exec /usr/bin/perl -x $0 $RESULT /tmp/errors.$$ "$PWD" +fi +exit 0 + +#!/usr/bin/perl + +use strict; + +my $result = $ARGV[0]; +my $filename = $ARGV[1]; +my $pwd = $ARGV[2]; + +open(FILE, "<$filename") || die "$0: Unable to open file, $!"; + +my $unresolvedRefError = undef; + +while () { + chomp; + + if (defined $unresolvedRefError) { + if (m/^ ([^(]+)\(([0-9]+)\)/) { + my $file = $1; + my $lineno = $2; + + if (! -f "$pwd/$file") { + $file =~ s/\.s$/.c/; + } + + $_ = "$pwd/$file:$lineno:0: Error: $unresolvedRefError"; + } else { + $unresolvedRefError = undef; + } + } + + if (m/^(Unresolved external .* referenced) in:/) { + $unresolvedRefError = $1; + $_ = ""; + } elsif (m/^([^(]+)\(([0-9]+)\):(.*)$/) { + my $file = $1; + my $lineno = $2; + my $error = $3; + + $_ = "$pwd/$file:$lineno:0:$error"; + } + print STDERR "$_\n"; +} + +unlink($filename); + +exit($result); diff --git a/ocanada/make/head.mk b/ocanada/make/head.mk index 0710ce8..28ebc58 100644 --- a/ocanada/make/head.mk +++ b/ocanada/make/head.mk @@ -10,21 +10,47 @@ # http://www.quinndunki.com/blondihacks # -export CC65_HOME := /usr/local/lib/cc65 +CC65_BIN=/usr/local/bin -CC65_BIN = /usr/local/bin +ifneq ($(wildcard /usr/local/lib/cc65),) + export CC65_HOME := /usr/local/lib/cc65 +else + export CC65_HOME := /usr/local/share/cc65 +endif CL65=$(CC65_BIN)/cl65 CA65=$(CC65_BIN)/ca65 CC65=$(CC65_BIN)/cc65 +CO65=$(CC65_BIN)/co65 + +MERLIN_DIR=/usr/local +MERLIN_BIN=$(MERLIN_DIR)/bin/Merlin32 +MERLIN_LIB=$(MERLIN_DIR)/lib/Merlin AC=make/AppleCommander.jar -C_SRCS=$(wildcard *.c) -ASM_SRCS=$(wildcard *.s) +SRCDIRS=. MACHINE=apple2 CPU=6502 CFLAGS= ASMFLAGS= LDFLAGS= +DRIVERS= +DRVDIR=drivers + +XCODE_PATH=/Applications/Xcode.app +XCODE_INFO=$(XCODE_PATH)/Contents/Info.plist + +CC65_PLUGIN_PATH=$(HOME)/Library/Developer/Xcode/Plug-ins/cc65.ideplugin +CC65_PLUGIN_INFO=$(CC65_PLUGIN_PATH)/Contents/Info.plist + +XCODE_PLUGIN_COMPATIBILITY=DVTPlugInCompatibilityUUID + + +.PHONY: all gen genclean + +all: + @make gen + @make build + diff --git a/ocanada/make/prodos_template.dsk b/ocanada/make/prodos_template.dsk index d5c3b28..c7b2a75 100644 Binary files a/ocanada/make/prodos_template.dsk and b/ocanada/make/prodos_template.dsk differ diff --git a/ocanada/make/tail.mk b/ocanada/make/tail.mk index 4bca120..fd961e5 100644 --- a/ocanada/make/tail.mk +++ b/ocanada/make/tail.mk @@ -10,98 +10,276 @@ # http://www.quinndunki.com/blondihacks # -export PATH := $(PATH):$(CC65_BIN) +BUILD_TYPE := $(shell if echo $(MACHINE) | grep -q -- -basic; then echo basic; elif echo $(MACHINE) | grep -q -- -merlin; then echo merlin; else echo cc65; fi) CWD=$(shell pwd) -C_OBJS=$(C_SRCS:.c=.o) -C_DEPS=$(C_SRCS:.c=.u) -ASM_OBJS=$(ASM_SRCS:.s=.o) -ASM_LSTS=$(ASM_SRCS:.s=.lst) -OBJS=$(C_OBJS) $(ASM_OBJS) - -MAPFILE=$(PGM).map DISKIMAGE=$(PGM).dsk -LINK_ARGS= - EXECCMD= -ALLTARGET=$(DISKIMAGE) -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S),Darwin) - ALLTARGET=execute -endif +BASIC_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.bas, $(SRCDIRS)))) +BASIC_OBJS=$(BASIC_SRCS:.bas=.tok) -ifneq ($(START_ADDR),) -# If the MACHINE is set to an option which does not support a variable start -# address, then error. - ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) - $(error You cannot change start address with this machine type) +ifeq ($(BUILD_TYPE),cc65) + export PATH := $(PATH):$(CC65_BIN) + + # By default, use the a2 drivers. If the machine is one of the enhanced + # targets though, use the a2e drivers. + DRV_BASE_MACHINE=a2 + BASE_MACHINE = apple2 + ifneq ($(filter $(MACHINE), apple2enh apple2enh-dos33 apple2enh-system apple2enh-loader apple2enh-reboot),) + DRV_BASE_MACHINE=a2e + BASE_MACHINE = apple2enh + endif + + CC65_VERSION := $(shell $(CC65) --version 2>&1 | grep '^cc65 V') + + ifeq ($(CC65_VERSION),cc65 V2.13.3) + export CC65_SUPPORTS_APPLE_SINGLE=0 + CC65_CREATE_DEP_ARG=--create-dep + CC65_LIST_ARG=-l + CC65_DRV_DIR=$(CC65_HOME) + + MACHCONFIG= -t $(BASE_MACHINE) + ifeq ($(filter $(MACHINE), apple2 apple2enh),) + MACHCONFIG += -C $(MACHINE).cfg + endif + else + export CC65_SUPPORTS_APPLE_SINGLE=1 + CC65_CREATE_DEP_ARG=--create-dep $(@:.o=.u) + CC65_LIST_ARG=-l $(@:.o=.lst) + CC65_DRV_DIR=$(CC65_HOME)/target/$(BASE_MACHINE)/drv + + MACHCONFIG= -t $(BASE_MACHINE) + ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) + MACHCONFIG += -C $(BASE_MACHINE)-system.cfg + else + ifeq ($(PROJECT_TYPE),ca65) + MACHCONFIG += -C $(BASE_MACHINE)-asm.cfg + LDFLAGS += -u __EXEHDR__ + else + MACHCONFIG += -C $(BASE_MACHINE).cfg + endif + endif + endif + + ifneq ($(DRIVERS),) + SRCDIRS+=$(DRVDIR) + endif + + C_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.c, $(SRCDIRS)))) + C_OBJS=$(C_SRCS:.c=.o) + C_DEPS=$(C_SRCS:.c=.u) + + ASM_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.s, $(SRCDIRS)))) + ASM_OBJS=$(ASM_SRCS:.s=.o) + ASM_LSTS=$(ASM_SRCS:.s=.lst) + + MAPFILE=$(PGM).map + + ifneq ($(START_ADDR),) + # If the MACHINE is set to an option which does not support a variable + # start address, then error. + ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) + $(error You cannot change start address with this machine type) + endif + else + # If not set, then use the default for the config as per cc65 + # documentation + ifneq ($(filter $(MACHINE), apple2 apple2-dos33 apple2enh apple2enh-dos33),) + START_ADDR=803 + endif + ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) + START_ADDR=2000 + endif + ifneq ($(filter $(MACHINE), apple2-loader apple2-reboot apple2enh-loader apple2enh-reboot),) + START_ADDR=800 + endif + endif + + LDFLAGS += --start-addr 0x$(START_ADDR) + + ifneq ($(filter $(MACHINE), apple2 apple2enh apple2-dos33 apple2enh-dos33),) + EXECCMD=$(shell echo brun $(PGM) | tr '[a-z]' '[A-Z]') endif else - # If not set, then use the default for the config as per cc65 documentation - ifneq ($(filter $(MACHINE), apple2 apple2-dos33 apple2enh apple2enh-dos33),) - START_ADDR=803 - endif - ifneq ($(filter $(MACHINE), apple2-system apple2enh-system),) - START_ADDR=2000 - endif - ifneq ($(filter $(MACHINE), apple2-loader apple2-reboot apple2enh-loader apple2enh-reboot),) - START_ADDR=800 - endif -endif -LDFLAGS += --start-addr 0x$(START_ADDR) + C_OBJS= + C_DEPS= -ifneq ($(filter $(MACHINE), apple2 apple2enh apple2-dos33 apple2enh-dos33),) + ASM_OBJS= + ASM_LSTS= +endif + +ifeq ($(BUILD_TYPE),merlin) + ASM_SRCS=$(patsubst ./%, %, $(wildcard $(addsuffix /*.s, $(SRCDIRS)))) + MAPFILE=_Output.txt EXECCMD=$(shell echo brun $(PGM) | tr '[a-z]' '[A-Z]') endif -MACHCONFIG= -t apple2 - -ifneq ($(filter $(MACHINE), apple2enh apple2apple2enh-dos33 apple2enh-system apple2enh-loader apple2enh-reboot),) - MACHCONFIG= -t apple2enh +ifeq ($(BUILD_TYPE),basic) + MAPFILE= + EXECCMD=$(shell echo run $(PGM) | tr '[a-z]' '[A-Z]') endif -ifeq ($(filter $(MACHINE), apple2 apple2enh),) - MACHCONFIG += -C $(MACHINE).cfg -endif +OBJS=$(C_OBJS) $(ASM_OBJS) $(BASIC_OBJS) -.PHONY: all execute clean - -all: $(ALLTARGET) +ALLTARGET=$(DISKIMAGE) -clean: - rm -f "$(PGM)" - rm -f $(OBJS) - rm -f $(C_DEPS) - rm -f $(MAPFILE) - rm -f $(ASM_LSTS) - rm -f "$(DISKIMAGE)" -createPackage: - pkg/createPackage +.PHONY: build execute clean cleandrivers xcodefix -cleanMacCruft: - rm -rf pkg - -$(PGM): $(OBJS) - $(CL65) $(MACHCONFIG) --mapfile $(MAPFILE) $(LDFLAGS) -o "$(PGM)" $(OBJS) +build: $(ALLTARGET) $(DISKIMAGE): $(PGM) - make/createDiskImage $(AC) $(MACHINE) "$(DISKIMAGE)" "$(PGM)" "$(START_ADDR)" + make/createDiskImage $(AC) $(MACHINE) "$(DISKIMAGE)" "$(PGM)" "$(START_ADDR)" $(BASIC_OBJS) $(COPYDIRS) execute: $(DISKIMAGE) osascript make/V2Make.scpt "$(CWD)" "$(PGM)" "$(CWD)/make/DevApple.vii" "$(EXECCMD)" +%.tok: %.bas + make/bt $< $(BASICFLAGS) -o $@ + +ifneq ($(DRIVERS),) +cleandrivers: + rm -Rf "$(DRVDIR)" + +else +cleandrivers: + +endif + +clean: genclean cleandrivers + rm -f "$(PGM)" $(OBJS) $(C_DEPS) $(MAPFILE) $(ASM_LSTS) "$(DISKIMAGE)" + +cleanMacCruft: + rm -rf pkg + +# Some gen phase stuff... +gen: xcodefix $(DRIVERS) + +xcodefix: + defaults write "$(CC65_PLUGIN_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)s -array `defaults read "$(XCODE_INFO)" $(XCODE_PLUGIN_COMPATIBILITY)` || true + + +ifeq ($(BUILD_TYPE),basic) +# Build rules for BASIC projects + +$(PGM): $(OBJS) + cp $(PGM).tok $(PGM) + +$(OBJS): Makefile + + +endif + + +ifeq ($(BUILD_TYPE),merlin) +# Build rules for Merlin projects + +$(PGM): $(ASM_SRCS) Makefile + $(MERLIN_BIN) -V $(MERLIN_LIB) linkscript.s + rm -f _FileInformation.txt + +endif + + +ifeq ($(BUILD_TYPE),cc65) +# Build rules for cc65 projects + +$(PGM): $(OBJS) + make/errorFilter.sh $(CL65) $(MACHCONFIG) --mapfile $(MAPFILE) $(LDFLAGS) -o "$(PGM)" $(OBJS) + +$(OBJS): Makefile + %.o: %.c - $(CL65) $(MACHCONFIG) $(CFLAGS) --create-dep -c -o $@ $< + make/errorFilter.sh $(CL65) $(MACHCONFIG) $(CFLAGS) $(CC65_CREATE_DEP_ARG) -c -o $@ $< sed -i .bak 's/\.s:/.o:/' $(@:.o=.u) rm -f $(@:.o=.u).bak %.o: %.s - $(CL65) $(MACHCONFIG) --cpu $(CPU) $(ASMFLAGS) -l -c -o $@ $< + make/errorFilter.sh $(CL65) $(MACHCONFIG) --cpu $(CPU) $(ASMFLAGS) $(CC65_LIST_ARG) -c -o $@ $< + + +.PHONY: loresgr hiresgr auxmem joystick mouse serial +# Lores driver codegen +loresgr: $(DRVDIR)/a2_lores_drv.s $(DRVDIR)/a2_lores_drv.h + +$(DRVDIR)/a2_lores_drv.s: $(CC65_DRV_DIR)/tgi/$(DRV_BASE_MACHINE).lo.tgi + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_lores_drv -o $@ $(CC65_DRV_DIR)/tgi/$(DRV_BASE_MACHINE).lo.tgi + +$(DRVDIR)/a2_lores_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_lores_drv;' >> $@ + + +# Hires driver codegen +hiresgr: $(DRVDIR)/a2_hires_drv.s $(DRVDIR)/a2_hires_drv.h + +$(DRVDIR)/a2_hires_drv.s: $(CC65_DRV_DIR)/tgi/$(DRV_BASE_MACHINE).hi.tgi + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_hires_drv -o $@ $(CC65_DRV_DIR)/tgi/$(DRV_BASE_MACHINE).hi.tgi + +$(DRVDIR)/a2_hires_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_hires_drv;' >> $@ + + +# Auxmem driver codegen +auxmem: $(DRVDIR)/a2_auxmem_drv.s $(DRVDIR)/a2_auxmem_drv.h + +$(DRVDIR)/a2_auxmem_drv.s: $(CC65_DRV_DIR)/emd/$(DRV_BASE_MACHINE).auxmem.emd + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_auxmem_drv -o $@ $(CC65_DRV_DIR)/emd/$(DRV_BASE_MACHINE).auxmem.emd + +$(DRVDIR)/a2_auxmem_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_auxmem_drv;' >> $@ + + +# Joystick driver codegen +joystick: $(DRVDIR)/a2_joystick_drv.s $(DRVDIR)/a2_joystick_drv.h + +$(DRVDIR)/a2_joystick_drv.s: $(CC65_DRV_DIR)/joy/$(DRV_BASE_MACHINE).stdjoy.joy + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_joystick_drv -o $@ $(CC65_DRV_DIR)/joy/$(DRV_BASE_MACHINE).stdjoy.joy + +$(DRVDIR)/a2_joystick_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_joystick_drv;' >> $@ + + +# Mouse driver codegen +mouse: $(DRVDIR)/a2_mouse_drv.s $(DRVDIR)/a2_mouse_drv.h + +$(DRVDIR)/a2_mouse_drv.s: $(CC65_DRV_DIR)/mou/$(DRV_BASE_MACHINE).stdmou.mou + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_mouse_drv -o $@ $(CC65_DRV_DIR)/mou/$(DRV_BASE_MACHINE).stdmou.mou + +$(DRVDIR)/a2_mouse_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_mouse_drv;' >> $@ + + +# Serial driver codegen +serial: $(DRVDIR)/a2_serial_drv.s $(DRVDIR)/a2_serial_drv.h + +$(DRVDIR)/a2_serial_drv.s: $(CC65_DRV_DIR)/ser/$(DRV_BASE_MACHINE).ssc.ser + mkdir -p $(DRVDIR) + $(CO65) --code-label _a2_serial_drv -o $@ $(CC65_DRV_DIR)/ser/$(DRV_BASE_MACHINE).ssc.ser + +$(DRVDIR)/a2_serial_drv.h: + mkdir -p $(DRVDIR) + echo '#include ' > $@ + echo 'extern char a2_serial_drv;' >> $@ + +endif -$(OBJS): Makefile -include $(C_DEPS)