Cpu cycles, how do they work?


Mrlegoboy 2019-06-04 17:07

How do cpu cycles get counted?

Timo 2019-06-04 19:10

It’s explained in the manual in the chapter “Advanced Topics > CPU Cycles” quite at the bottom.
If something is unclear just ask.

was8bit 2019-06-05 05:31

I just run DEBUG mode and watch the CPU %... if it goes to MAX then you are doing too much per WAIT VBL

Mrlegoboy 2019-06-06 17:58

I cant tell though what would this code take:
The wording suggests it could be anywhere from 2 to 4 cpu cycles

Mrlegoboy 2019-06-06 18:00

I say 2 because you access 1 variable and apply an operation, but it could be as much as 4 because you could say you access a variable, do an operation with a constant, and access the variable again to save that change

Timo 2019-06-06 18:19

Actually I think it’s 5. Of course in assembly/machine code you could do this in only one cycle. I already thought about adding an ADD command to have less variable accesses.
But I don’t want to add commands all the time. Some day in the future I will make a big update with several new commands.

Mrlegoboy 2019-06-06 20:43

What? How is it 5?

was8bit 2019-06-06 22:25 (Edited)

How about adding new operators...

X+=23 would be the same as x=x+23
X++ same as X=X+1 or INC in assembly

X-=23 same as X=X-23
X- - (without the space) same as X=X-1 or DEC

Timo 2019-06-07 07:56


These are the cycles:
- command (assign/LET)
- read target variable
- read variable
- plus operator
- read constant

That's a lot... I will read about CPUs to see if it makes sense to count constants. And in the future I might add simpler commands for incr/decr.

was8bit: I prefer commands with words, otherwise it doesn't look like BASIC ;)

Timo 2019-06-07 08:58

Ok, yes it makes sense. In assembly you usually have to load constants to a CPU register before you can calculate with them. At least on 8-bit CPUs like the one used in the Game Boy. So the simulation of CPU cycles in NX is more or less realistic (although very simplified).
Anyway I will add some optimized commands.

was8bit 2019-06-07 12:03

INC and DEC always felt logical to me, I always liked them... but like you said they always operated on whatever was loaded into the register...

an application to basic might be something like INC X , DEC X

the other might be X ADD 23, X MINUS 23

Timo 2019-06-07 15:44

I will steel them from AMOS Basic:

INC var
Add 1

DEC var
Subtract 1

ADD v,exp [,base TO top]

IF v>top THEN v=base
IF v<base THEN v=top

was8bit 2019-06-07 17:25

Oooo, I've not seen the base,top portion, that's cool :)

Mrlegoboy 2019-06-09 16:36

Woah no way! You’re actually gonna add these? Thats wicked cool!

Timo 2019-06-15 11:14

Coming in the next update (core v0.15):

was8bit 2019-06-15 16:18

Super cool :)

Mrlegoboy 2019-06-15 18:22

Cool! And one more thing, you might get annoyed from me asking, but can we please get the option to have a larger gamepad? I can’t use the small gamepad and I really liked the one on original lowres

Log in to reply.