From e82dc31da6e41487f2f800d9b012b90c4ffce194 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Sat, 11 Jul 2020 13:23:46 -0700 Subject: [PATCH] Move Disk ][ defs into separate platform symbol file The Disk ][ I/O locations are generally accessed as an offset, using something like "LDA $C08n,X". However the range from $C080-C08F is already used for language card in slot 0. SourceGen doesn't have a way to distinguish between indexed and direct accesses, and even if it did there's no way to separate one peripheral card from another without knowing the contents of the CPU register. As a workaround, the Disk ][ definitions are now in a separate symbol file. When loaded, the definitions replace the base slot 0 equates. I figure Disk ][ accesses are more common than language card manipulation, so I'm making it a default for new projects. Existing projects that reference the Disk ][ symbols (which existed, but as constants) will need to be updated to include the new .sym65. --- SourceGen/RuntimeData/Apple/C08x-DiskII.sym65 | 35 +++++++++++++++++++ SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 | 24 ------------- SourceGen/RuntimeData/SystemDefs.json | 4 +++ 3 files changed, 39 insertions(+), 24 deletions(-) create mode 100644 SourceGen/RuntimeData/Apple/C08x-DiskII.sym65 diff --git a/SourceGen/RuntimeData/Apple/C08x-DiskII.sym65 b/SourceGen/RuntimeData/Apple/C08x-DiskII.sym65 new file mode 100644 index 0000000..3863c4c --- /dev/null +++ b/SourceGen/RuntimeData/Apple/C08x-DiskII.sym65 @@ -0,0 +1,35 @@ +; Copyright 2018 faddenSoft. All Rights Reserved. +; See the LICENSE.txt file for distribution terms (Apache 2.0). +; +; Sources: +; Various Apple II reference materials found online + +*SYNOPSIS C08x I/O locations for the Disk ][ + +; Disk ][ I/O base address locations. +; +; A few things hard-code slot 6 for disk access, in which case addresses +; like $C0E8 will work here. It's far more common for code to use indexed +; addressing like "LDA $C088,X", which clashes with the slot 0 +; definitions for the language card. SourceGen doesn't distinguish +; between direct and indexed access to a location when resolving platform +; symbols, so you can have one or the other. +; +; Other peripherals may use a similar system of indexing, so it's useful +; to have each in a separate file. +IWM_PH0_OFF @ $C080 ;IWM phase 0 off +IWM_PH0_ON @ $C081 ;IWM phase 0 on +IWM_PH1_OFF @ $C082 ;IWM phase 1 off +IWM_PH1_ON @ $C083 ;IWM phase 1 on +IWM_PH2_OFF @ $C084 ;IWM phase 2 off +IWM_PH2_ON @ $C085 ;IWM phase 2 on +IWM_PH3_OFF @ $C086 ;IWM phase 3 off +IWM_PH3_ON @ $C087 ;IWM phase 3 on +IWM_MOTOR_OFF @ $C088 ;IWM motor off +IWM_MOTOR_ON @ $C089 ;IWM motor on +IWM_DRIVE_1 @ $C08A ;IWM select drive 1 +IWM_DRIVE_2 @ $C08B ;IWM select drive 2 +IWM_Q6_OFF @ $C08C ;IWM read +IWM_Q6_ON @ $C08D ;IWM WP-sense +IWM_Q7_OFF @ $C08E ;IWM WP-sense/read +IWM_Q7_ON @ $C08F ;IWM write diff --git a/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 b/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 index 33c546e..6c568c0 100644 --- a/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 +++ b/SourceGen/RuntimeData/Apple/Cxxx-IO.sym65 @@ -137,30 +137,6 @@ LCBANK1 @ $C08B ;RWx2 read/write RAM bank 1 CLRROM @ $CFFF ;disable slot C8 ROM -; Disk ][ I/O locations. -; -; A few things hard-code slot 6 for disk access, in which case addresses -; like $C0E8 will work here. It's far more common for code to use indexed -; addressing like "LDA $C088,X", which clashes with the slot 0 -; definitions. We define these symbols as constants so they're not -; applied automatically but are available for use. -IWM_PH0_OFF = $C080 ;IWM phase 0 off -IWM_PH0_ON = $C081 ;IWM phase 0 on -IWM_PH1_OFF = $C082 ;IWM phase 1 off -IWM_PH1_ON = $C083 ;IWM phase 1 on -IWM_PH2_OFF = $C084 ;IWM phase 2 off -IWM_PH2_ON = $C085 ;IWM phase 2 on -IWM_PH3_OFF = $C086 ;IWM phase 3 off -IWM_PH3_ON = $C087 ;IWM phase 3 on -IWM_MOTOR_OFF = $C088 ;IWM motor off -IWM_MOTOR_ON = $C089 ;IWM motor on -IWM_DRIVE_1 = $C08A ;IWM select drive 1 -IWM_DRIVE_2 = $C08B ;IWM select drive 2 -IWM_Q6_OFF = $C08C ;IWM read -IWM_Q6_ON = $C08D ;IWM WP-sense -IWM_Q7_OFF = $C08E ;IWM WP-sense/read -IWM_Q7_ON = $C08F ;IWM write - ; Not strictly I/O locations, but they're in the neighborhood. ROM_AUXMOVE @ $C311 diff --git a/SourceGen/RuntimeData/SystemDefs.json b/SourceGen/RuntimeData/SystemDefs.json index 28b8592..2dc8543 100644 --- a/SourceGen/RuntimeData/SystemDefs.json +++ b/SourceGen/RuntimeData/SystemDefs.json @@ -12,6 +12,7 @@ "SymbolFiles" : [ "RT:Apple/F8-ROM.sym65", "RT:Apple/Cxxx-IO.sym65", + "RT:Apple/C08x-DiskII.sym65", "RT:Apple/ProDOS8.sym65" ], "ExtensionScripts" : [ @@ -31,6 +32,7 @@ "SymbolFiles" : [ "RT:Apple/F8-ROM.sym65", "RT:Apple/Cxxx-IO.sym65", + "RT:Apple/C08x-DiskII.sym65", "RT:Apple/DOS33.sym65" ], "ExtensionScripts" : [ @@ -49,6 +51,7 @@ "SymbolFiles" : [ "RT:Apple/F8-ROM.sym65", "RT:Apple/Cxxx-IO.sym65", + "RT:Apple/C08x-DiskII.sym65", "RT:Apple/ProDOS8.sym65", "RT:Apple/IIgs-ROM.sym65" ], @@ -69,6 +72,7 @@ "Description" : "Apple IIgs, configured for GS/OS.", "SymbolFiles" : [ "RT:Apple/Cxxx-IO.sym65", + "RT:Apple/C08x-DiskII.sym65", "RT:Apple/IIgs-ROM.sym65", "RT:Apple/GSOS.sym65" ],