Pseudocode
Write Handler
Store the MODE flag to 5
alias userSP = SP
[PROCESS_TABLE + currentPID *16 + 13] = SP
SP = [PROCESS_TABLE + currentPID * 16 + 11] * 512 - 1;
physicalDescrAddr = [PTBR + 2 * (userSP - 4) / 512];
offset = (userSP - 4) % 512;
fileDescripterPhysicalAddr = physicalDescrAddr * 512 + offset;
fileDescriptor = -2;
if(fileDescriptor != -2) {
set the return value (userSP - 1) to -1;
} else {
set the return value (userSP - 1) to 0;
}
SP = userSP;
SET MODE FLAG TO 0
ireturn;
Timer Interrupt
[PROCESS_TABLE + [SYSTEM_STATUS_TABLE+1]*16 + 13] = SP;
SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 - 1;
backup
restore;
SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE+1]*16 + 13];
ireturn;