I had considered proceeding on to a CISC Concertina III. However, after starting to look at that project, I found that there was a lack of opcode space in one spot.
Just the other day, though, it occurred to me that there was a possibility of improving Concertina II.
After a long period of changing it, because I was dissatisfied with the various options for shortening the memory-reference instructions by one
bit, I decided to leave the memory-reference instructions at their full length, and claim opcode space from somewhere less important: I replaced 14-bit short instructions by 13-bit short instructions.
What occurred to me was that I could instead keep the full-length memory- reference instructions and have 14-bit short instructions, and fit everything else into space left by unused opcodes for 14-bit short instructions.
In order to make that work, I had to alter the 14-bit short instructions a bit. I re-ordered the fields in the shift instructions, so that I could
put the supervisor call instruction in with them, and the 14-bit branch instructions now only came with a three-bit field to select the condition they could test.
That let me fit all the instructions in.
The opcode space for block headers, however, was reduced. Which is not really that much of a bad thing; it means that now the block headers will--- Synchronet 3.21d-Linux NewsLink 1.2
be pared down (to just one!) and thus greatly simplified.
John Savard
I smell danger--running out of OpCode space early in the design.
After the general conceptualization of the ISA you should have half of
the OpCode space available for future additions !!.
On Sat, 07 Mar 2026 19:00:02 +0000, MitchAlsup wrote:
I smell danger--running out of OpCode space early in the design. After
the general conceptualization of the ISA you should have half of the
OpCode space available for future additions !!.
Well, while it is true that only 1/64th of the opcode space for 32-bit instructions is left, my current plan is to use 1/128th for headers, and
the other 1/128th for instructions longer than 32 bits. Which means that there is still space for 511 times as many instructions as are already defined, even if I never went beyond 48 bits.
quadi <[email protected]d> posted:
I had considered proceeding on to a CISC Concertina III. However, after
starting to look at that project, I found that there was a lack of opcode
space in one spot.
Just the other day, though, it occurred to me that there was a possibility >> of improving Concertina II.
After a long period of changing it, because I was dissatisfied with the
various options for shortening the memory-reference instructions by one
bit, I decided to leave the memory-reference instructions at their full
length, and claim opcode space from somewhere less important: I replaced
14-bit short instructions by 13-bit short instructions.
What occurred to me was that I could instead keep the full-length memory-
reference instructions and have 14-bit short instructions, and fit
everything else into space left by unused opcodes for 14-bit short
instructions.
In order to make that work, I had to alter the 14-bit short instructions a >> bit. I re-ordered the fields in the shift instructions, so that I could
put the supervisor call instruction in with them, and the 14-bit branch
instructions now only came with a three-bit field to select the condition
they could test.
I admire your effort.
That let me fit all the instructions in.
I smell danger--running out of OpCode space early in the design.
After the general conceptualization of the ISA you should have
half of the OpCode space available for future additions !!.
The opcode space for block headers, however, was reduced. Which is not
really that much of a bad thing; it means that now the block headers will
be pared down (to just one!) and thus greatly simplified.
John Savard
On Sun, 08 Mar 2026 01:14:42 +0000, quadi wrote:
On Sat, 07 Mar 2026 19:00:02 +0000, MitchAlsup wrote:
I smell danger--running out of OpCode space early in the design. After
the general conceptualization of the ISA you should have half of the
OpCode space available for future additions !!.
Well, while it is true that only 1/64th of the opcode space for 32-bit instructions is left, my current plan is to use 1/128th for headers, and the other 1/128th for instructions longer than 32 bits. Which means that there is still space for 511 times as many instructions as are already defined, even if I never went beyond 48 bits.
However, the lack of opcode space did cause me one problem. Previously, I had a type of header which started with the four bits 1111. This was followed by fourteen two-bit prefixes, which applied to every 16 bits remaining in the 256-bit code block.
They indicated:
00 - 17-bit instruction, starting with 0
01 - 17-bit instruction, starting with 1
10 - begin instruction with 32-bit parcel
11 - append another 32-bit instruction parcel.
John Savard--- Synchronet 3.21d-Linux NewsLink 1.2
quadi <[email protected]d> posted:
On Sun, 08 Mar 2026 01:14:42 +0000, quadi wrote:
On Sat, 07 Mar 2026 19:00:02 +0000, MitchAlsup wrote:
I smell danger--running out of OpCode space early in the design. After >>>> the general conceptualization of the ISA you should have half of the
OpCode space available for future additions !!.
Well, while it is true that only 1/64th of the opcode space for 32-bit
instructions is left, my current plan is to use 1/128th for headers, and >>> the other 1/128th for instructions longer than 32 bits. Which means that >>> there is still space for 511 times as many instructions as are already
defined, even if I never went beyond 48 bits.
However, the lack of opcode space did cause me one problem. Previously, I
had a type of header which started with the four bits 1111. This was
followed by fourteen two-bit prefixes, which applied to every 16 bits
remaining in the 256-bit code block.
They indicated:
00 - 17-bit instruction, starting with 0
01 - 17-bit instruction, starting with 1
10 - begin instruction with 32-bit parcel
11 - append another 32-bit instruction parcel.
11 simply adds another 32-bits to the current instruction parcel.
This gives access to {16, 32, 48, 64, 80, 96, ...}-bit instructions.
This can be treeified rather easily for wide decode.
John Savard
But I decided to go with a much simpler option instead. A bit of
compressive coding is still needed, but now the scheme is simple. I just switched from 17-bit short instructions to 16-bit instructions for code
with mixed-length instructions. In some respects, the limitations of 16-
bit instructions are complentary to those of 15-bit instructions, the
ones that can occur in pairs within 32-bit instruction code, and so the
two types can be mixed in a block to somewhat mitigate their
limitations.
Mixing these two types of short instructions in a single block is... an awkward and complicated workaround.
I've decided to drop that capability, because doing so makes more opcode space available for 48-bit (and longer) instructions in the variable-
length instruction blocks. I found that certain highly desirable classes
of 48-bit instructions are made impossible otherwise.
I have now begun uploading the description of the revised Concertina II instruction set to my web site. The block headers, the 32-bit
instruction formats, and the 16-bit and 15-bit instruction formats are
now all present at
http://www.quadibloc.com/arch/ct25int.htm
Thus, the squish of opcode space that made this iteration of Concertina
II possible _also_ makes a CISC instruction set possible. However, the
short instructions and the instructions longer than 32 bits are _both_ *severely* constrained in opcode space in the CISC mode.
Given that I was able to reduce the prefix for paired short instructions
from 1111 to 11, allowing the paired short instructions to return to being
15 bits long...
since 14-bit short instructions are possible, then 11 could be the prefix
for a single short instruction.
Thus, the squish of opcode space that made this iteration of Concertina II possible _also_ makes a CISC instruction set possible. However, the short instructions and the instructions longer than 32 bits are _both_
*severely* constrained in opcode space in the CISC mode.
FWIW:
IME, while pair encoding scheme can result in space savings over a pure 32/64/96 coding scheme, while avoiding the misalignment issues of a
16/32 coding scheme, a downside of a pair encoding is that the potential space savings are significantly reduced relative to a 16/32 scheme.
Say, for example:
An effective 16/32 scheme can get around a 20% space savings;
An effective pair-encoding implicitly drops to around 8%.
Mostly because it can only save space in cases when both instructions
can be pair encoded, versus when either instruction could be 16-bit
encoded.
Though, that said, pair encoding is an attractive option when the main
other option is 32-bit only, and one already has some mechanism in place
to deal with cracking an instruction.
| Sysop: | DaiTengu |
|---|---|
| Location: | Appleton, WI |
| Users: | 1,099 |
| Nodes: | 10 (0 / 10) |
| Uptime: | 492379:03:52 |
| Calls: | 14,106 |
| Calls today: | 2 |
| Files: | 187,124 |
| D/L today: |
2,542 files (1,098M bytes) |
| Messages: | 2,496,242 |