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; }
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; }