Exemple #1
0
void handleTimerInterrupt(int segment, int stackPointer){
    struct PCB *pcb ;
    struct PCB *head;
    
    setKernelDataSegment();
    pcb = getFreePCB();
    
    if(pcb->state != DEFUNCT){
        
    }
    pcb->stackPointer = stackPointer;
    pcb->state = READY;
    addToReady(pcb);
    
    head = removeFromReady();
    restoreDataSegment();
    
    setKernelDataSegment();
    if(head == NULL){
        head = idleProc;
    }
    
    head->state = RUNNING;
    restoreDataSegment();

    setKernelDataSegment();
    running = head;
    restoreDataSegment();
    //printString("tic");
    returnFromTimer(head->segment, head->stackPointer);
}
int executeProgram(char* name){
	char buffer[13312];
	int i;
	int freeSegment;
	int segment;
	struct PCB *pcb;

	setKernelDataSegment();
	freeSegment = getFreeMemorySegment();
	restoreDataSegment();

	if(freeSegment == -1){
		print("No Memory Available\0");
		return -2;
	}

	// if(freeSegment == 0x0000 || freeSegment == 0x1000){
	// 	print("Invalid Segment\0");
	// 	return -1; 
	// }

	interrupt(0x21, 0x03, name, buffer, 0);

	if(buffer[0] == 0x00){
		print("File not found\0");
		return -1;
	}

	segment = 0x1000*(freeSegment+2);

	for(i = 0;i<13312;i++){
		putInMemory(segment, i, buffer[i]);
	}

	setKernelDataSegment();
	pcb = getFreePCB();
	restoreDataSegment();

	if(pcb == NULL){
		return -2;
	}

	kStrCopy(name,(*pcb).name, 6);

	setKernelDataSegment();
	(*pcb).segment = segment;
	(*pcb).stackPointer = 0xFF00;
	addToReady(pcb);
	restoreDataSegment();
	
	initializeProgram(segment);

	return 1;
}
Exemple #3
0
int executeProgram(char* name){
    int i = 0;
    int offset = 0x0000;
    char buffer[512];
    int sectors;
    int segment;
    struct PCB *pcb;
    
    setKernelDataSegment();
    pcb = getFreePCB();
    restoreDataSegment();

    setKernelDataSegment();
    segment = getFreeMemorySegment()
    restoreDataSegment();

    if(segment == -1){
        return -2;
    }
    
    sectors = readfile(name, buffer);
    if(sectors == -1){
        return -1;
    }
    
    for (i; i < sectors*512 ; i++) {
        putInMemory(segment,offset,buffer[i]);
        offset++;
    }
//    pcb->name[0] = name[0];
//    pcb->name[1] = name[1];
//    pcb->name[2] = name[2];
//    pcb->name[3] = name[3];
//    pcb->name[4] = name[4];
//    pcb->name[5] = name[5];
    kStrCopy(name, pcb->name, 6);
    
    setKernelDataSegment();
    pcb->state = STARTING;
    pcb->segment = segment;
    pcb->stackPointer = 0xFF00;
    restoreDataSegment();

    initializeProgram(segment);
    return 1;
    
}