wow, there is the "Mystery fast loop calculus"
no more LD A,B : OR C , 16bit loop fullsped.
sometimes one has conditional exit and would like to have BC back like it would normaly have counted, what is the reverse mystery formula?
DEC B : DEC C : INC BC, would this work?
Yes just reverse the operations.
Note that when using djnz
for the inner loop the b
register acts as the LSB, whereas in the 16-bit bc
pair it is the MSB. This is why in the example on the MAP I input the counter in the de
pair in stead, to avoid confusion about the function of b
.
I improved the explanation of R800 timing information in the Z80 instruction set overview article, as well as added a new column with actual R800 timing in internal RAM mode.
The timings in the table are based on research by the openMSX team and verified by myself using a different, cycle-accurate methodology.
The testing methodology I used is as follows: I have an OPL4 wave register write routine which requires at least 8 clocks between I/O instructions. One is used for a register load, the remaining 7 clocks need to be spent waiting. By using these instructions for waiting followed by a variable number of 1-cycle nop delays, I was able to acquire cycle-accurate timing information.
A few I didn’t test explicitly, because they were so similar to ones tested previously that I felt confident to copy their timing, e.g. push bc
vs. push de
. The results are overall quite consistent, although I was a bit surprised by ret taking only 5 clock cycles.
There are a few remaining, which I will get to later. I need to adjust my testing methodology to be able to test them (read: use OPLL in stead of OPL4).
Thank you for this useful site.
I created a simple table of opcodes.
http://www.msxvillage.fr/upload/z80_opcodes_fr.pdf
I also put the undocumented opcodes. It's in French. If you are interested to translate it I can give you the ODT file. There are few texts.
I see a little mistake.
QUEUES #F3F3 Address of the queue table for PLAY instruction
FRCNEW #F3F5 Work aera size for PLAY instruction (255 by default)
gdx: Nice table, I’d be happy to list and host it for you if you translate it to English.
Regarding QUEUES, actually it seems there’s a fourth queue for the RS232 as well, so PLAY is a bit too specific. So, I’ve added QUETAB to the document which also describes the table structure, and reference it from QUEUES, it should hopefully be more clear now.
Regarding FRCNEW, my Dutch reference book says “application unknown” and the MSX2 Technical Handbook as well as the MSX Datapack say “used by BASIC interpreter internally”. Also QUETAB contains the PLAY queue size already. So… I need some more evidence about the function of this address before I change it .
I improved the explanation of R800 timing information in the Z80 instruction set overview article, as well as added a new column with actual R800 timing in internal RAM mode.
I’ve completed the R800 timing information, except for the repeat-instructions which take too long for me to capture accurately with my testing method. I hope you enjoy it.
Some updates to the MSX I/O ports overview page, mostly based on the MSX Datapack vol. 2 appendixes 4-5. Thanks to giacomo for the pointer.
thanks!
very good
What exactly is new?
By the way:
- On ports 0 and 1 is also the Sensor Kid hardware
- The card reader (B8-BB) might be the Yamaha Play Card system...