Browse code

Fixed emulator frame bug

neauoire authored on 05/04/2021 03:58:47
Showing 4 changed files
... ...
@@ -28,7 +28,7 @@ else
28 28
 fi
29 29
 
30 30
 echo "Assembling.."
31
-./bin/assembler projects/examples/dev.controller.usm bin/boot.rom
31
+./bin/assembler projects/software/nasu.usm bin/boot.rom
32 32
 
33 33
 echo "Running.."
34 34
 if [ "${2}" = '--cli' ]; 
... ...
@@ -6,7 +6,6 @@
6 6
 
7 7
 ;cursor { x 2 y 2 blink 1 }
8 8
 
9
-
10 9
 |0100 ;Console { pad 8 char 1 byte 1 short 2 }
11 10
 |0110 ;Screen { width 2 height 2 pad 4 y 2 x 2 color 1 }
12 11
 |0120 ;Sprite { pad 8 x 2 y 2 addr 2 color 1 }
... ...
@@ -28,7 +27,7 @@ BRK
28 27
 	( theme ) #0daf =System.r #02ff =System.g #035f =System.b
29 28
 	
30 29
 	( update cursor )
31
-	#02 ~cursor.blink #01 EQU ADD =Sprite.color
30
+	#02 =Sprite.color
32 31
 
33 32
 	,cursor_icn =Sprite.addr
34 33
 	~cursor.blink MOD2 #00 EQU =cursor.blink
... ...
@@ -579,41 +579,34 @@ ppnil(Uxn *u, Uint16 ptr, Uint8 b0, Uint8 b1)
579 579
 
580 580
 #pragma mark - Generics
581 581
 
582
-void
583
-runevents(Uxn *u)
584
-{
585
-	SDL_Event event;
586
-	while(SDL_PollEvent(&event) != 0) {
587
-		switch(event.type) {
588
-		case SDL_QUIT: quit(); break;
589
-		case SDL_MOUSEBUTTONUP:
590
-		case SDL_MOUSEBUTTONDOWN:
591
-		case SDL_MOUSEMOTION: domouse(u, &event); break;
592
-		case SDL_TEXTINPUT: dotext(u, &event); break;
593
-		case SDL_KEYDOWN: doctrl(u, &event, 1); break;
594
-		case SDL_KEYUP: doctrl(u, &event, 0); break;
595
-		case SDL_WINDOWEVENT:
596
-			if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
597
-				redraw(pixels, u);
598
-			break;
599
-		}
600
-	}
601
-}
602
-
603 582
 int
604 583
 start(Uxn *u)
605 584
 {
606 585
 	evaluxn(u, PAGE_VECTORS);
607 586
 	redraw(pixels, u);
608 587
 	while(1) {
609
-		float elapsed;
610
-		double start = SDL_GetPerformanceCounter();
611
-		runevents(u);
588
+		SDL_Event event;
589
+		double elapsed, start = SDL_GetPerformanceCounter();
590
+		while(SDL_PollEvent(&event) != 0) {
591
+			switch(event.type) {
592
+			case SDL_QUIT: quit(); break;
593
+			case SDL_MOUSEBUTTONUP:
594
+			case SDL_MOUSEBUTTONDOWN:
595
+			case SDL_MOUSEMOTION: domouse(u, &event); break;
596
+			case SDL_TEXTINPUT: dotext(u, &event); break;
597
+			case SDL_KEYDOWN: doctrl(u, &event, 1); break;
598
+			case SDL_KEYUP: doctrl(u, &event, 0); break;
599
+			case SDL_WINDOWEVENT:
600
+				if(event.window.event == SDL_WINDOWEVENT_EXPOSED)
601
+					redraw(pixels, u);
602
+				break;
603
+			}
604
+		}
612 605
 		evaluxn(u, PAGE_VECTORS + 0x08);
613 606
 		if(screen.reqdraw)
614 607
 			redraw(pixels, u);
615 608
 		elapsed = (SDL_GetPerformanceCounter() - start) / (double)SDL_GetPerformanceFrequency() * 1000.0f;
616
-		SDL_Delay((int)(16.666f - elapsed));
609
+		SDL_Delay(clamp(16.666f - elapsed, 0, 1000));
617 610
 	}
618 611
 }
619 612
 
... ...
@@ -145,10 +145,9 @@ evaluxn(Uxn *u, Uint16 vec)
145 145
 	u->ram.ptr = vec;
146 146
 	u->wst.error = 0;
147 147
 	u->rst.error = 0;
148
-	while(u->ram.ptr) {
148
+	while(u->ram.ptr)
149 149
 		if(!stepuxn(u, u->ram.dat[u->ram.ptr++]))
150 150
 			return 0;
151
-	}
152 151
 	return 1;
153 152
 }
154 153