add scaffolding around calling vbEmulate in a loop
This commit is contained in:
		
							parent
							
								
									ee9a6874d9
								
							
						
					
					
						commit
						8d6f380f6b
					
				
							
								
								
									
										32
									
								
								main.c
								
								
								
								
							
							
						
						
									
										32
									
								
								main.c
								
								
								
								
							| 
						 | 
					@ -1,14 +1,24 @@
 | 
				
			||||||
#include <cmdbuf.h>
 | 
					#include <cmdbuf.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <netinet/in.h>
 | 
				
			||||||
#include <request.h>
 | 
					#include <request.h>
 | 
				
			||||||
#include <response.h>
 | 
					#include <response.h>
 | 
				
			||||||
#include <server.h>
 | 
					#include <server.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
#include <string.h>
 | 
					#include <string.h>
 | 
				
			||||||
#include <netinet/in.h>
 | 
					#include <time.h>
 | 
				
			||||||
#include <unistd.h>
 | 
					#include <unistd.h>
 | 
				
			||||||
#include <vb.h>
 | 
					#include <vb.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define BUFLEN 8096
 | 
					#define BUFLEN 8096
 | 
				
			||||||
 | 
					#define MAX_STEP_CYCLES 20000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int sleep_nanos(long int ns) {
 | 
				
			||||||
 | 
					    struct timespec time;
 | 
				
			||||||
 | 
					    time.tv_sec = ns / 1000000000;
 | 
				
			||||||
 | 
					    time.tv_nsec = ns % 1000000000;
 | 
				
			||||||
 | 
					    return nanosleep(&time, NULL);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int server(int connfd, VB *sim) {
 | 
					int server(int connfd, VB *sim) {
 | 
				
			||||||
    RdbRequest req;
 | 
					    RdbRequest req;
 | 
				
			||||||
| 
						 | 
					@ -26,6 +36,8 @@ int server(int connfd, VB *sim) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while (1) {
 | 
					    while (1) {
 | 
				
			||||||
        CommandBuf cmd;
 | 
					        CommandBuf cmd;
 | 
				
			||||||
 | 
					        int brk;
 | 
				
			||||||
 | 
					        uint32_t cycles;
 | 
				
			||||||
        read_result = rdb_request_read(&req, &cmd);
 | 
					        read_result = rdb_request_read(&req, &cmd);
 | 
				
			||||||
        if (read_result == read_result_error) {
 | 
					        if (read_result == read_result_error) {
 | 
				
			||||||
            return -1;
 | 
					            return -1;
 | 
				
			||||||
| 
						 | 
					@ -34,8 +46,17 @@ int server(int connfd, VB *sim) {
 | 
				
			||||||
            return 0;
 | 
					            return 0;
 | 
				
			||||||
        } else if (read_result == read_result_pending) {
 | 
					        } else if (read_result == read_result_pending) {
 | 
				
			||||||
            if (running) {
 | 
					            if (running) {
 | 
				
			||||||
                printf("pretend the emulator is running now\n");
 | 
					                /*
 | 
				
			||||||
                sleep(1);
 | 
					                cycles = MAX_STEP_CYCLES;
 | 
				
			||||||
 | 
					                brk = vbEmulate(sim, &cycles);
 | 
				
			||||||
 | 
					                */
 | 
				
			||||||
 | 
					                cycles = 0;
 | 
				
			||||||
 | 
					                brk = 0;
 | 
				
			||||||
 | 
					                if (brk) {
 | 
				
			||||||
 | 
					                    /* We hit a breakpoint */ 
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    sleep_nanos((MAX_STEP_CYCLES - cycles) * 50);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            continue;
 | 
					            continue;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
| 
						 | 
					@ -115,7 +136,10 @@ int main(int argc, char** argv) {
 | 
				
			||||||
    if (readROM(sim, argv[1])) {
 | 
					    if (readROM(sim, argv[1])) {
 | 
				
			||||||
        return 1;
 | 
					        return 1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    vbSetProgramCounter(sim, 0x07000000);
 | 
					    /* relevant state at the start of the physics sim's main */
 | 
				
			||||||
 | 
					    vbSetProgramCounter(sim, 0x070002ba);
 | 
				
			||||||
 | 
					    vbSetProgramRegister(sim, 3, 0x0500ffc0);
 | 
				
			||||||
 | 
					    vbSetProgramRegister(sim, 4, 0x05008000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (argc > 2) {
 | 
					    if (argc > 2) {
 | 
				
			||||||
        char *end;
 | 
					        char *end;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										1
									
								
								makefile
								
								
								
								
							
							
						
						
									
										1
									
								
								makefile
								
								
								
								
							| 
						 | 
					@ -4,6 +4,7 @@ build:
 | 
				
			||||||
	-I include -I ../vbtest \
 | 
						-I include -I ../vbtest \
 | 
				
			||||||
	-Werror -std=c90 -Wall -Wextra -Wpedantic \
 | 
						-Werror -std=c90 -Wall -Wextra -Wpedantic \
 | 
				
			||||||
	-Wno-unused-parameter -Wno-unused-function \
 | 
						-Wno-unused-parameter -Wno-unused-function \
 | 
				
			||||||
 | 
						-D _POSIX_C_SOURCE=199309L \
 | 
				
			||||||
	-o ./build/rdb
 | 
						-o ./build/rdb
 | 
				
			||||||
clean:
 | 
					clean:
 | 
				
			||||||
	@rm -rf build
 | 
						@rm -rf build
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue