better SIDs and integers handling in config files
This commit is contained in:
1 parent
d0081fd21e
commit
76250afac9
9 files changed
+74
-19
No files matched your search
@@ -177,13 +177,13 @@ The SID support in the ROM is very limited - it only disables the sound during s
|
||||
|
||||
### `CONFIG_SID_2ND_ADDRESS` and `CONFIG_SID_3RD_ADDRESS`
|
||||
|
||||
Each of them add support for one additional SID - addresses should be given as parameter, respectively. Do not use when `CONFIG_MB_M65` is selected - the motherboard support code already knows the SID locations.
|
||||
Each of them adds support for one additional SID - addresses should be given as parameters. Do not use when `CONFIG_MB_M65` is selected - the motherboard support code already knows the SID locations.
|
||||
|
||||
Each of these options needs 3 bytes in KERNAL segment.
|
||||
|
||||
### `CONFIG_SID_D4XX` and `CONFIG_SID_D5XX`
|
||||
### `CONFIG_SID_D4XX`, `CONFIG_SID_D5XX`, `CONFIG_SID_D6XX` and `CONFIG_SID_D7XX`
|
||||
|
||||
Cause the system to support SIDs in `$D4xx` and `$D5xx` ranges, respectively.
|
||||
Enables support for SIDs in `$D4xx` / `$D5xx` / `$D6xx` / `$D7xx` ranges, respectively.
|
||||
|
||||
Each of them needs a couple of bytes in KERNAL segment - but they can share some code, and `$D4xx` range support replaces the standard `$D400` address handling, so exact amount depends on the exact configuration. Do not use when `CONFIG_MB_M65` is selected - the motherboard support code already knows the SID locations.
|
||||
|
||||
|
||||
@@ -69,6 +69,8 @@
|
||||
;; #CONFIG# SID_3RD_ADDRESS NO
|
||||
;; #CONFIG# SID_D4XX NO
|
||||
;; #CONFIG# SID_D5XX NO
|
||||
;; #CONFIG# SID_D6XX NO
|
||||
;; #CONFIG# SID_D7XX NO
|
||||
|
||||
|
||||
; Keyboard settings
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
;; #CONFIG# SID_3RD_ADDRESS NO
|
||||
;; #CONFIG# SID_D4XX NO
|
||||
;; #CONFIG# SID_D5XX NO
|
||||
;; #CONFIG# SID_D6XX NO
|
||||
;; #CONFIG# SID_D7XX NO
|
||||
|
||||
|
||||
; Keyboard settings
|
||||
|
||||
@@ -112,9 +112,9 @@
|
||||
|
||||
; Built-in DOS configuration
|
||||
|
||||
!set CONFIG_UNIT_SDCARD = 0 ; do not change, DOS is not implemented yet
|
||||
!set CONFIG_UNIT_FLOPPY = 0 ; do not change, DOS is not implemented yet
|
||||
!set CONFIG_UNIT_RAMDISK = 0 ; do not change, DOS is not implemented yet
|
||||
;; #CONFIG# UNIT_SDCARD 0 ; do not change, DOS is not implemented yet
|
||||
;; #CONFIG# UNIT_FLOPPY 0 ; do not change, DOS is not implemented yet
|
||||
;; #CONFIG# UNIT_RAMDISK 0 ; do not change, DOS is not implemented yet
|
||||
|
||||
|
||||
; Debug options
|
||||
|
||||
@@ -59,6 +59,8 @@
|
||||
;; #CONFIG# SID_3RD_ADDRESS NO
|
||||
;; #CONFIG# SID_D4XX NO
|
||||
;; #CONFIG# SID_D5XX NO
|
||||
;; #CONFIG# SID_D6XX NO
|
||||
;; #CONFIG# SID_D7XX NO
|
||||
|
||||
|
||||
; Keyboard settings
|
||||
|
||||
@@ -49,6 +49,8 @@
|
||||
;; #CONFIG# SID_3RD_ADDRESS NO
|
||||
;; #CONFIG# SID_D4XX YES
|
||||
;; #CONFIG# SID_D5XX YES
|
||||
;; #CONFIG# SID_D6XX NO
|
||||
;; #CONFIG# SID_D7XX NO
|
||||
|
||||
|
||||
; Keyboard settings
|
||||
|
||||
@@ -181,6 +181,8 @@
|
||||
!ifdef CONFIG_SID_3RD_ADDRESS { !set counter = counter + 1 }
|
||||
!ifdef CONFIG_SID_D4XX { !set counter = counter + 1 }
|
||||
!ifdef CONFIG_SID_D5XX { !set counter = counter + 1 }
|
||||
!ifdef CONFIG_SID_D6XX { !set counter = counter + 1 }
|
||||
!ifdef CONFIG_SID_D7XX { !set counter = counter + 1 }
|
||||
|
||||
!ifdef CONFIG_PLATFORM_COMMANDER_X16 {
|
||||
!if (counter != 0) { !error "Do not use CONFIG_SID_* options for Commander X16 platform" }
|
||||
@@ -189,16 +191,24 @@
|
||||
!if (counter != 0) { !error "Do not use CONFIG_SID_* options for MEGA65 motherboard" }
|
||||
}
|
||||
!ifdef CONFIG_SID_2ND_ADDRESS {
|
||||
!if (CONFIG_SID_2ND_ADDRESS = $D400) { !error "CONFIG_SID_2ND_ADDRESS points to the 1st SID" }
|
||||
!if (CONFIG_SID_2ND_ADDRESS < $D420) { !error "CONFIG_SID_2ND_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if (CONFIG_SID_2ND_ADDRESS > $D7E0) { !error "CONFIG_SID_2ND_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS % $20) != 0) { !error "CONFIG_SID_2ND_ADDRESS has to be aligned to $20" }
|
||||
!if (CONFIG_SID_2ND_ADDRESS = $D400) { !error "CONFIG_SID_2ND_ADDRESS points to the 1st SID" }
|
||||
!if (CONFIG_SID_2ND_ADDRESS < $D420) { !error "CONFIG_SID_2ND_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if (CONFIG_SID_2ND_ADDRESS > $D7E0) { !error "CONFIG_SID_2ND_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS % $20) != 0) { !error "CONFIG_SID_2ND_ADDRESS has to be aligned to $20" }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS DIV $100) = $D4) { !ifdef CONFIG_SID_D4XX { !error "CONFIG_SID_2ND_ADDRESS redundant due to CONFIG_SID_D4XX" } }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS DIV $100) = $D5) { !ifdef CONFIG_SID_D5XX { !error "CONFIG_SID_2ND_ADDRESS redundant due to CONFIG_SID_D5XX" } }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS DIV $100) = $D6) { !ifdef CONFIG_SID_D6XX { !error "CONFIG_SID_2ND_ADDRESS redundant due to CONFIG_SID_D6XX" } }
|
||||
!if ((CONFIG_SID_2ND_ADDRESS DIV $100) = $D7) { !ifdef CONFIG_SID_D7XX { !error "CONFIG_SID_2ND_ADDRESS redundant due to CONFIG_SID_D7XX" } }
|
||||
}
|
||||
!ifdef CONFIG_SID_3RD_ADDRESS {
|
||||
!if (CONFIG_SID_3RD_ADDRESS = $D400) { !error "CONFIG_SID_3RD_ADDRESS points to the 1st SID" }
|
||||
!if (CONFIG_SID_3RD_ADDRESS < $D420) { !error "CONFIG_SID_3RD_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if (CONFIG_SID_3RD_ADDRESS > $D7E0) { !error "CONFIG_SID_3RD_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS % $20) != 0) { !error "CONFIG_SID_3RD_ADDRESS has to be aligned to $20" }
|
||||
!if (CONFIG_SID_3RD_ADDRESS = $D400) { !error "CONFIG_SID_3RD_ADDRESS points to the 1st SID" }
|
||||
!if (CONFIG_SID_3RD_ADDRESS < $D420) { !error "CONFIG_SID_3RD_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if (CONFIG_SID_3RD_ADDRESS > $D7E0) { !error "CONFIG_SID_3RD_ADDRESS needs hex value from $D420-$D7E0 range" }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS % $20) != 0) { !error "CONFIG_SID_3RD_ADDRESS has to be aligned to $20" }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS DIV $100) = $D4) { !ifdef CONFIG_SID_D4XX { !error "CONFIG_SID_3RD_ADDRESS redundant due to CONFIG_SID_D4XX" } }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS DIV $100) = $D5) { !ifdef CONFIG_SID_D5XX { !error "CONFIG_SID_3RD_ADDRESS redundant due to CONFIG_SID_D5XX" } }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS DIV $100) = $D6) { !ifdef CONFIG_SID_D6XX { !error "CONFIG_SID_3RD_ADDRESS redundant due to CONFIG_SID_D6XX" } }
|
||||
!if ((CONFIG_SID_3RD_ADDRESS DIV $100) = $D7) { !ifdef CONFIG_SID_D7XX { !error "CONFIG_SID_3RD_ADDRESS redundant due to CONFIG_SID_D7XX" } }
|
||||
}
|
||||
!ifdef CONFIG_SID_2ND_ADDRESS { !ifdef CONFIG_SID_3RD_ADDRESS {
|
||||
!if (CONFIG_SID_2ND_ADDRESS = CONFIG_SID_3RD_ADDRESS) { !error "Configured SIDs have the same addresses" }
|
||||
@@ -349,9 +359,10 @@
|
||||
|
||||
; Handle sound configuration
|
||||
|
||||
!ifdef CONFIG_SID_D4XX { !set CONFIG_SID_D4XX_OR_D5XX = 1 }
|
||||
!ifdef CONFIG_SID_D5XX { !set CONFIG_SID_D4XX_OR_D5XX = 1 }
|
||||
|
||||
!ifdef CONFIG_SID_D4XX { !set CONFIG_SID_DX_RANGE = 1 }
|
||||
!ifdef CONFIG_SID_D5XX { !set CONFIG_SID_DX_RANGE = 1 }
|
||||
!ifdef CONFIG_SID_D6XX { !set CONFIG_SID_DX_RANGE = 1 }
|
||||
!ifdef CONFIG_SID_D7XX { !set CONFIG_SID_DX_RANGE = 1 }
|
||||
|
||||
|
||||
; Handle keyboard configuration
|
||||
|
||||
@@ -84,9 +84,9 @@ IOINIT_skip_DOS:
|
||||
!ifdef CONFIG_SID_3RD_ADDRESS {
|
||||
sta SID_SIGVOL - __SID_BASE + CONFIG_SID_3RD_ADDRESS
|
||||
}
|
||||
; Silence whole D4XX and D5XX ranges (if configured)
|
||||
; Silence whole D4XX, D5XX, D6XX, D7XX ranges (if configured)
|
||||
|
||||
!ifdef CONFIG_SID_D4XX_OR_D5XX {
|
||||
!ifdef CONFIG_SID_DX_RANGE {
|
||||
|
||||
ldy #$00
|
||||
@1:
|
||||
@@ -97,6 +97,12 @@ IOINIT_skip_DOS:
|
||||
!ifdef CONFIG_SID_D5XX {
|
||||
sta SID_SIGVOL + $100, Y
|
||||
}
|
||||
!ifdef CONFIG_SID_D6XX {
|
||||
sta SID_SIGVOL + $200, Y
|
||||
}
|
||||
!ifdef CONFIG_SID_D7XX {
|
||||
sta SID_SIGVOL + $300, Y
|
||||
}
|
||||
|
||||
tya
|
||||
clc
|
||||
|
||||
@@ -829,15 +829,45 @@ void SourceFile::preprocessLine_Config(const std::list<std::string> &tokens, std
|
||||
if (valStr.compare("NO") == 0) return;
|
||||
else if (valStr.compare("YES") == 0)
|
||||
{
|
||||
// This is a YES/NO value (bool)
|
||||
|
||||
configEntries[lineNum].key = key;
|
||||
configEntries[lineNum].valIntValid = false;
|
||||
}
|
||||
else if (valStr.length() > 1 && valStr[0] == '$')
|
||||
{
|
||||
// This is a hexadecimal value
|
||||
|
||||
for (size_t idx = 1; idx < valStr.length(); idx++)
|
||||
{
|
||||
if (valStr[idx] < '0' && valStr[idx] > '9' &&
|
||||
valStr[idx] < 'A' && valStr[idx] > 'F' &&
|
||||
valStr[idx] < 'a' && valStr[idx] > 'f')
|
||||
{
|
||||
ERROR("syntax error, wrong hex value in '#CONFIG#'");
|
||||
}
|
||||
}
|
||||
|
||||
configEntries[lineNum].key = key;
|
||||
configEntries[lineNum].valInt = std::stoul(valStr.substr(1, std::string::npos), nullptr, 16);
|
||||
configEntries[lineNum].valIntValid = true;
|
||||
}
|
||||
else if (valStr.length() > 0 && valStr[0] >= '0' && valStr[0] <= '9')
|
||||
{
|
||||
// This is a decimal value
|
||||
|
||||
for (size_t idx = 0; idx < valStr.length(); idx++)
|
||||
{
|
||||
if (valStr[idx] < '0' && valStr[idx] > '9')
|
||||
{
|
||||
ERROR("syntax error, wrong dec value in '#CONFIG#'");
|
||||
}
|
||||
}
|
||||
|
||||
configEntries[lineNum].key = key;
|
||||
configEntries[lineNum].valInt = std::stoul(valStr.substr(0, std::string::npos), nullptr, 10);
|
||||
configEntries[lineNum].valIntValid = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// XXX add support for string values
|
||||
|
||||
Reference in new issue
Block a user