World: r3wp
[rebcode] Rebcode discussion
older | first |
Geomol 13-Feb-2008 [2339] | This is just one single test using only a few of the available instructions. To have a better view, more tests are needed. I made a similar loop in C, compiled it with gcc, and it runs around 6 times faster than the pure rebcode version. Initially I won't call rebcode slow, but not blasting fast either. |
Pekr 13-Feb-2008 [2340] | and R3 rebcode si going to be even slower .... |
Geomol 13-Feb-2008 [2341] | There's something wrong with my compare with a 1MHz 6502. I counted the number of cycles in the inner loop and found 17 cycles. A 1MHz 6502 can then do 1'000'000 / 17 * 40 = 2'352'941 loops in 40 seconds. But the BeebEm emulator made 16.7 mio. loops in that time. It should have taken 285 sec. So programming in rebcode is more like a 107 MHz cpu in this test. (It's probably not correct to measure it this way.) |
BrianH 13-Feb-2008 [2342] | Rebcode is a higher-level language than 6502 assembler. Perhaps a peephole optimizer can rewrite your generated rebcode into better equivalent rebcode. |
Steeve 13-Feb-2008 [2343] | Geomol, i had a look on your emulator code, i think perfs could be improved if you delay the update of all flags only when they are used. |
Geomol 13-Feb-2008 [2344] | Good idea! Do you have previous experience with emulators like this, because I have none. |
Steeve 13-Feb-2008 [2345x2] | in fact the engine is very similar with the z80 one, i think we could make a meta-emulator using external data-sheets (one for 6502, one for Z80) |
i' made a Z80 emulator using rebcode (not complete), you can see it in galaga.r on rebol.org | |
Geomol 13-Feb-2008 [2347] | Ah, that was you. Someone mentioned that one lately. |
Steeve 13-Feb-2008 [2348x3] | ah BrianH, i remember that you made the same proposal for my z80 emu (peephole optimzation) |
hard to do | |
interesting to do on ROMs (static analysis before to launch the code) but not valuable in RAM because the code can be modified | |
Geomol 13-Feb-2008 [2351] | Steeva, about flags: e.g. the zero flag Z (bit 1 of P). In stead of that I set it each time A, X or Y become zero, I could save any of those (A, X or Y) in a variable, and then test on that var and set the flag correctly, if and when the flag is actual used. Is that what you mean? |
Steeve 13-Feb-2008 [2352x3] | and limited because on 6502 for example, many branchements are calculated (not statics) |
yes Geomol, it's that | |
Flags are calculated on the last accumulator value if i don't do mistakes | |
Geomol 13-Feb-2008 [2355] | ok. One optimization, I consider, is to cross-compile 6502 opcodes to rebcode, instead of emulating the 6502. That won't work with self-modifying code and branches will be a problem. So it's hard, but I think, it might work. |
Steeve 13-Feb-2008 [2356x2] | in theory |
i give you an example with the TAX opcode ; updating flags in real time label TAX seti X A eq X 0 either [or P 2] [and P 253] seti i X and i 128 eq i 128 either [or P 128] [and P 127] bra continue ; delay the calcul of flags label TAX seti X A or maskA (2 + 128) ; remember that we have to recalculate zero and negative flags using A, but don't do it now bra continue | |
Geomol 13-Feb-2008 [2358] | Thanks! |
Steeve 13-Feb-2008 [2359] | you got the idea ? ;-) |
Geomol 13-Feb-2008 [2360] | Yup! :) |
Steeve 13-Feb-2008 [2361x2] | did you think that using PC as an offset (integer) instead of as a serie could be faster ? |
I should do a test before saying that | |
Geomol 13-Feb-2008 [2363] | I didn't consider much in deep actually. It can be improved, I'm sure. :) |
Andreas 7-Jan-2010 [2364] | anyone happes to still have a rebol/core binary with rebcode functionality archived somewhere? |
Steeve 7-Jan-2010 [2365] | it's not in the download section of rebol.com anymore ? |
Andreas 7-Jan-2010 [2366x2:last] | ah, got it: http://www.rebol.net/builds/042/rebview1350042.tar.gz |
resp. http://www.rebol.net/builds/031/rebview1350031.exefor windows | |
older | first |