Posted: Tue Oct 26, 2010 8:40 pm
Ruud wrote:
Hallo André,
It was able read to read the features part of your 65k project last evening. My first comment on your 65k project: I liked what I have read and I really hope we can expect more.
It was able read to read the features part of your 65k project last evening. My first comment on your 65k project: I liked what I have read and I really hope we can expect more.
Please keep in mind the feature page is where I started thinking about the design, with I'm sure in some cases inconsistent parts - just a scratchpad to keep my ideas. The actual specs will be the real specification.
Quote:
I would like to add one item to your requirements: readability. ...
The worst part is, both are written to minimize the load for the FPGA.
The worst part is, both are written to minimize the load for the FPGA.
Quote:
65k opcodes: "push/pull "state", i.e. all registers". Do you mean to push/pull ALL registers, not just the Status register?
Quote:
What is "branch never" ?
Quote:
"Total new opcodes > too many" Why? Good opcodes are always welcome. You (we?) have to decide what is considered "good". The ones you have proposed are good enough IMHO. But some can be improved, I think :)
Quote:
"Registers"? Extra registers won't hurt. About register sets, I'm used to it while working with the Z80. Nice idea. But for complex situations, like virtualization or multi-tasking you would need more.
Quote:
"Alternative 2: Prefix Bytes":
"Program size (and thus fetch speed) .... - (longer for each operation)". Yes but the advantege would be great. But as I mentioned before, a 16-bits bus reads four bytes in two cycles + example; no loss of speed.
"Program size (and thus fetch speed) .... - (longer for each operation)". Yes but the advantege would be great. But as I mentioned before, a 16-bits bus reads four bytes in two cycles + example; no loss of speed.
You will see how I designed it on the programming specs page.
Quote:
I prefer, for the moment, to support the runnable illegal opcodes as well.
Quote:
Address Expansion:
First to be honest, you lost from "PowerPC Address Translation" on. Maybe some "explantion for dummies" could help?
First to be honest, you lost from "PowerPC Address Translation" on. Maybe some "explantion for dummies" could help?
Quote:
MMU is nice (I loved your idea about using MMU to turn a CBM into a 1541) but isn't suitable for multitasking (looking to CP/M 3 or at the way EMS is used on a 8088).
Quote:
IN?/DE? immediate:
I like this idea! But what operand; byte, word, double-word? IMHO a byte should do. Which brings me to another idea. Being a new opcode, a prefix byte is needed. Prefix + opcode + operand = 3.
I like this idea! But what operand; byte, word, double-word? IMHO a byte should do. Which brings me to another idea. Being a new opcode, a prefix byte is needed. Prefix + opcode + operand = 3.
Quote:
For a 16-bits system 2 cycles would be needed. Then make use of the unused byte by adding e second prefix, saving the original poole of free opcodes.
Quote:
Interruts, RTI:
What about using extra vectors, like the 65816 and 6809?
I wouldn't use bit 5. I would use an internal register set by an extra opcode.
What about using extra vectors, like the 65816 and 6809?
I wouldn't use bit 5. I would use an internal register set by an extra opcode.
Quote:
At startup this register would be set to "native mode".
Quote:
"Branch Subroutine":
BRA(L) and BSR(L) makes it easy to relocate programs to ANY address. But then someting has to be found for "LDA $xxxx" etc. like "LDA PC+offset". I think you already mentioned this, but just to be sure.
Quote:
"Unfortunately the wide reads and writes are not always aligned with the memory width."
Two ideas:
- What about aligning prefix + opcode + operand to the width of the bus?
- Using an internal cache is another option. When reading unaligned instructions the surplus bytes are stored in this cache. And therefore they haven't to be read anymore for the next instruction.
Two ideas:
- What about aligning prefix + opcode + operand to the width of the bus?
- Using an internal cache is another option. When reading unaligned instructions the surplus bytes are stored in this cache. And therefore they haven't to be read anymore for the next instruction.
Quote:
This covered your "features". Now I can start reading the rest :)
André