From 5671fa02e4f579dde83d8e17dca5c9fd61ff81b6 Mon Sep 17 00:00:00 2001 From: dhwanish-3 <108540722+dhwanish-3@users.noreply.github.com> Date: Mon, 23 Oct 2023 21:35:52 +0530 Subject: [PATCH] Stage 22 Max memory done* --- Stage22/Assgn2/int15.spl | 11 ++ Stage22/Assgn2/int15.xsm | 34 ++++ Stage22/Assgn2/mod0.spl | 98 +++++++++++ Stage22/Assgn2/mod0.xsm | 239 ++++++++++++++++++++++++++ Stage22/Assgn2/mod5.spl | 50 ++++++ Stage22/Assgn2/mod5.xsm | 113 ++++++++++++ Stage22/Assgn2/mod7.spl | 182 ++++++++++++++++++++ Stage22/Assgn2/mod7.xsm | 341 +++++++++++++++++++++++++++++++++++++ Stage22/Assgn2/timer.spl | 36 ++++ Stage22/Assgn2/timer.xsm | 87 ++++++++++ xfs-interface/stage22_2.sh | 32 ++++ 11 files changed, 1223 insertions(+) create mode 100644 Stage22/Assgn2/int15.spl create mode 100644 Stage22/Assgn2/int15.xsm create mode 100644 Stage22/Assgn2/mod0.spl create mode 100644 Stage22/Assgn2/mod0.xsm create mode 100644 Stage22/Assgn2/mod5.spl create mode 100644 Stage22/Assgn2/mod5.xsm create mode 100644 Stage22/Assgn2/mod7.spl create mode 100644 Stage22/Assgn2/mod7.xsm create mode 100644 Stage22/Assgn2/timer.spl create mode 100644 Stage22/Assgn2/timer.xsm create mode 100644 xfs-interface/stage22_2.sh diff --git a/Stage22/Assgn2/int15.spl b/Stage22/Assgn2/int15.spl new file mode 100644 index 0000000..54b25f6 --- /dev/null +++ b/Stage22/Assgn2/int15.spl @@ -0,0 +1,11 @@ +alias taskManager R0; +taskManager = SYSTEM_STATUS_TABLE + 24; +print "contextSwitches:-"; +print [taskManager]; +print "------------"; +print "maxMemUsage:-"; +print [taskManager + 1]; +print "------------"; +print "diskAccesses:-"; +print [taskManager + 2]; +halt; \ No newline at end of file diff --git a/Stage22/Assgn2/int15.xsm b/Stage22/Assgn2/int15.xsm new file mode 100644 index 0000000..ff3915e --- /dev/null +++ b/Stage22/Assgn2/int15.xsm @@ -0,0 +1,34 @@ +MOV R16, 29560 +ADD R16, 24 +MOV R0, R16 +MOV R16, "contextSwitches:-" +PORT P1, R16 +OUT +MOV R16, R0 +MOV R16, [R16] +PORT P1, R16 +OUT +MOV R16, "------------" +PORT P1, R16 +OUT +MOV R16, "maxMemUsage:-" +PORT P1, R16 +OUT +MOV R16, R0 +ADD R16, 1 +MOV R16, [R16] +PORT P1, R16 +OUT +MOV R16, "------------" +PORT P1, R16 +OUT +MOV R16, "diskAccesses:-" +PORT P1, R16 +OUT +MOV R16, R0 +ADD R16, 2 +MOV R16, [R16] +PORT P1, R16 +OUT +HALT +HALT \ No newline at end of file diff --git a/Stage22/Assgn2/mod0.spl b/Stage22/Assgn2/mod0.spl new file mode 100644 index 0000000..3361a78 --- /dev/null +++ b/Stage22/Assgn2/mod0.spl @@ -0,0 +1,98 @@ +alias functionNum R1; +alias currentPID R2; + +// Acquire Disk +if (functionNum == 3) then + while ([DISK_STATUS_TABLE] == 1) do + [PROCESS_TABLE + currentPID * 16 + 4] = WAIT_DISK; + multipush(R1, R2); + call MOD_5; + multipop(R1, R2); + endwhile; + // disk accesses + [SYSTEM_STATUS_TABLE + 26] = [SYSTEM_STATUS_TABLE + 26] + 1; + [DISK_STATUS_TABLE] = 1; + [DISK_STATUS_TABLE + 4] = currentPID; + return; +endif; + +if (functionNum == 6) then // acquire semaphore + alias i R3; + i = 0; + while(i < MAX_SEM_COUNT && [SEMAPHORE_TABLE + 4 * i + 1] != 0) do + i = i + 1; + endwhile; + + if (i == MAX_SEM_COUNT) then + R0 = -1; + else + [SEMAPHORE_TABLE + 4 * i] = -1; + [SEMAPHORE_TABLE + 4 * i + 1] = 1; + R0 = i; + endif; + return; +endif; + +if (functionNum == 7) then // Release semaphore + alias semId R2; + alias currentPID R3; + + if (currentPID == [SEMAPHORE_TABLE + semId * 4]) then + [SEMAPHORE_TABLE + semId * 4] = -1; + alias i R4; + + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_SEMAPHORE && [PROCESS_TABLE + i * 16 + 5] == semId) then + [PROCESS_TABLE + i * 16 + 4] = READY; + [PROCESS_TABLE + i * 16 + 5] = -1; + endif; + i = i + 1; + endwhile; + + [SEMAPHORE_TABLE + 4 * semId + 1] = [SEMAPHORE_TABLE + 4 * semId + 1] - 1; + endif; + return; +endif; + +// Acquire Terminal +if (functionNum == 8) then + while ([TERMINAL_STATUS_TABLE] != 0) do + [PROCESS_TABLE + currentPID * 16 + 4] = WAIT_TERMINAL; + multipush(R1, R2); + + call MOD_5; + + multipop(R1, R2); + endwhile; + + [TERMINAL_STATUS_TABLE] = 1; + [TERMINAL_STATUS_TABLE + 1] = currentPID; + return; +endif; + +// Release Terminal +if (functionNum == 9) then + if (currentPID != [TERMINAL_STATUS_TABLE + 1]) then + alias returnValue R0; + returnValue = -1; + return; + else + [TERMINAL_STATUS_TABLE] = 0; + alias i R3; + i = 0; + while (i < 16) do + if ([PROCESS_TABLE + i * 16 + 4] == WAIT_TERMINAL) then + [PROCESS_TABLE + 16 * i + 4] = READY; + endif; + i = i + 1; + endwhile; + alias returnValue R0; + returnValue = 0; + return; + endif; +else + alias returnValue R0; + returnValue = -1; + return; +endif; \ No newline at end of file diff --git a/Stage22/Assgn2/mod0.xsm b/Stage22/Assgn2/mod0.xsm new file mode 100644 index 0000000..c59328a --- /dev/null +++ b/Stage22/Assgn2/mod0.xsm @@ -0,0 +1,239 @@ +MOV R16, 3 +EQ R16, R1 +JZ R16, _L1 +_L3: +MOV R16, 29552 +MOV R16, [R16] +MOV R17, 1 +EQ R16, R17 +JZ R16, _L4 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 5 +PUSH R1 +PUSH R2 +CALL 25600 +POP R2 +POP R1 +JMP _L3 +_L4: +MOV R16, 29560 +ADD R16, 26 +MOV R17, 29560 +ADD R17, 26 +MOV R17, [R17] +ADD R17, 1 +MOV [R16], R17 +MOV [29552], 1 +MOV R16, 29552 +ADD R16, 4 +MOV [R16], R2 +RET +JMP _L2 +_L1: +_L2: +MOV R16, 6 +EQ R16, R1 +JZ R16, _L5 +MOV R3, 0 +_L7: +MOV R16, 32 +GT R16, R3 +MOV R17, 29056 +MOV R18, 4 +MUL R18, R3 +ADD R17, R18 +ADD R17, 1 +MOV R17, [R17] +MOV R18, 0 +NE R17, R18 +MUL R16, R17 +JZ R16, _L8 +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L7 +_L8: +MOV R16, 32 +EQ R16, R3 +JZ R16, _L9 +MOV R0, -1 +JMP _L10 +_L9: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R3 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 29056 +MOV R17, 4 +MUL R17, R3 +ADD R16, R17 +ADD R16, 1 +MOV [R16], 1 +MOV R0, R3 +_L10: +RET +JMP _L6 +_L5: +_L6: +MOV R16, 7 +EQ R16, R1 +JZ R16, _L11 +MOV R16, 29056 +MOV R17, R2 +MUL R17, 4 +ADD R16, R17 +MOV R16, [R16] +EQ R16, R3 +JZ R16, _L13 +MOV R16, 29056 +MOV R17, R2 +MUL R17, 4 +ADD R16, R17 +MOV [R16], -1 +MOV R4, 0 +_L15: +MOV R16, 16 +GT R16, R4 +JZ R16, _L16 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 10 +EQ R16, R17 +MOV R17, 28672 +MOV R18, R4 +MUL R18, 16 +ADD R17, R18 +ADD R17, 5 +MOV R17, [R17] +EQ R17, R2 +MUL R16, R17 +JZ R16, _L17 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +ADD R16, 5 +MOV [R16], -1 +JMP _L18 +_L17: +_L18: +MOV R16, R4 +ADD R16, 1 +MOV R4, R16 +JMP _L15 +_L16: +MOV R16, 29056 +MOV R17, 4 +MUL R17, R2 +ADD R16, R17 +ADD R16, 1 +MOV R17, 29056 +MOV R18, 4 +MUL R18, R2 +ADD R17, R18 +ADD R17, 1 +MOV R17, [R17] +SUB R17, 1 +MOV [R16], R17 +JMP _L14 +_L13: +_L14: +RET +JMP _L12 +_L11: +_L12: +MOV R16, 8 +EQ R16, R1 +JZ R16, _L19 +_L21: +MOV R16, 29568 +MOV R16, [R16] +MOV R17, 0 +NE R16, R17 +JZ R16, _L22 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 8 +PUSH R1 +PUSH R2 +CALL 25600 +POP R2 +POP R1 +JMP _L21 +_L22: +MOV [29568], 1 +MOV R16, 29568 +ADD R16, 1 +MOV [R16], R2 +RET +JMP _L20 +_L19: +_L20: +MOV R16, 9 +EQ R16, R1 +JZ R16, _L23 +MOV R16, 29568 +ADD R16, 1 +MOV R16, [R16] +NE R16, R2 +JZ R16, _L25 +MOV R0, -1 +RET +JMP _L26 +_L25: +MOV [29568], 0 +MOV R3, 0 +_L27: +MOV R16, 16 +GT R16, R3 +JZ R16, _L28 +MOV R16, 28672 +MOV R17, R3 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R17, 8 +EQ R16, R17 +JZ R16, _L29 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R3 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 1 +JMP _L30 +_L29: +_L30: +MOV R16, R3 +ADD R16, 1 +MOV R3, R16 +JMP _L27 +_L28: +MOV R0, 0 +RET +_L26: +JMP _L24 +_L23: +MOV R0, -1 +RET +_L24: +HALT \ No newline at end of file diff --git a/Stage22/Assgn2/mod5.spl b/Stage22/Assgn2/mod5.spl new file mode 100644 index 0000000..04b7ab1 --- /dev/null +++ b/Stage22/Assgn2/mod5.spl @@ -0,0 +1,50 @@ +alias currentPID R0; +alias process_table_entry R1; + +currentPID = [SYSTEM_STATUS_TABLE + 1]; +process_table_entry = PROCESS_TABLE + 16 * currentPID; + +multipush(BP); + +[process_table_entry + 12] = SP % 512; +[process_table_entry + 14] = PTBR; +[process_table_entry + 15] = PTLR; + +alias i R2; +alias state R3; +alias newPID R4; + +newPID = 0; +i = currentPID + 1; +while (i < 16) do + state = [PROCESS_TABLE + i * 16 + 4]; + if (state == READY || state == CREATED) then + newPID = i; + break; + endif; + i = i + 1; +endwhile; + +// context switches +[SYSTEM_STATUS_TABLE + 24] = [SYSTEM_STATUS_TABLE + 24] + 1; + +process_table_entry = PROCESS_TABLE + (newPID * 16); +SP = [process_table_entry + 11] * 512 + [process_table_entry + 12]; +PTBR = [process_table_entry + 14]; +PTLR = [process_table_entry + 15]; + +[SYSTEM_STATUS_TABLE + 1] = newPID; + +if (state == CREATED) then + SP = [process_table_entry + 13]; + BP = [[process_table_entry + 11] * 512]; + [process_table_entry + 4] = RUNNING; + [process_table_entry + 9] = 0; // mode flag + ireturn; +endif; + +[process_table_entry + 4] = RUNNING; + +multipop(BP); + +return; \ No newline at end of file diff --git a/Stage22/Assgn2/mod5.xsm b/Stage22/Assgn2/mod5.xsm new file mode 100644 index 0000000..75f2e04 --- /dev/null +++ b/Stage22/Assgn2/mod5.xsm @@ -0,0 +1,113 @@ +MOV R16, 29560 +ADD R16, 1 +MOV R16, [R16] +MOV R0, R16 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R0 +ADD R16, R17 +MOV R1, R16 +PUSH BP +MOV R16, R1 +ADD R16, 12 +MOV R17, SP +MOD R17, 512 +MOV [R16], R17 +MOV R16, R1 +ADD R16, 14 +MOV [R16], PTBR +MOV R16, R1 +ADD R16, 15 +MOV [R16], PTLR +MOV R4, 0 +MOV R16, R0 +ADD R16, 1 +MOV R2, R16 +_L1: +MOV R16, 16 +GT R16, R2 +JZ R16, _L2 +MOV R16, 28672 +MOV R17, R2 +MUL R17, 16 +ADD R16, R17 +ADD R16, 4 +MOV R16, [R16] +MOV R3, R16 +MOV R16, 1 +EQ R16, R3 +MOV R17, 3 +EQ R17, R3 +ADD R16, R17 +JZ R16, _L3 +MOV R4, R2 +JMP _L2 +JMP _L4 +_L3: +_L4: +MOV R16, R2 +ADD R16, 1 +MOV R2, R16 +JMP _L1 +_L2: +MOV R16, 29560 +ADD R16, 24 +MOV R17, 29560 +ADD R17, 24 +MOV R17, [R17] +ADD R17, 1 +MOV [R16], R17 +MOV R16, 28672 +MOV R17, R4 +MUL R17, 16 +ADD R16, R17 +MOV R1, R16 +MOV R16, R1 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +MOV R17, R1 +ADD R17, 12 +MOV R17, [R17] +ADD R16, R17 +MOV SP, R16 +MOV R16, R1 +ADD R16, 14 +MOV R16, [R16] +MOV PTBR, R16 +MOV R16, R1 +ADD R16, 15 +MOV R16, [R16] +MOV PTLR, R16 +MOV R16, 29560 +ADD R16, 1 +MOV [R16], R4 +MOV R16, 3 +EQ R16, R3 +JZ R16, _L5 +MOV R16, R1 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +MOV R16, R1 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +MOV R16, [R16] +MOV BP, R16 +MOV R16, R1 +ADD R16, 4 +MOV [R16], 2 +MOV R16, R1 +ADD R16, 9 +MOV [R16], 0 +IRET +JMP _L6 +_L5: +_L6: +MOV R16, R1 +ADD R16, 4 +MOV [R16], 2 +POP BP +RET +HALT \ No newline at end of file diff --git a/Stage22/Assgn2/mod7.spl b/Stage22/Assgn2/mod7.spl new file mode 100644 index 0000000..ffd4268 --- /dev/null +++ b/Stage22/Assgn2/mod7.spl @@ -0,0 +1,182 @@ +// exhandler +loadi(2, 15); +loadi(3, 16); + +// timer interrupt +loadi(4, 17); +loadi(5, 18); + +// write interrupt +loadi(16, 29); +loadi(17, 30); + +// int 10 +loadi(22, 35); +loadi(23, 36); + +// int 8 (fork) +loadi(18, 31); +loadi(19, 32); + +// Library +loadi(63, 13); +loadi(64, 14); + +// init +loadi(65, 7); +loadi(66, 8); + +// module 5 +loadi(50, 63); +loadi(51, 64); + +// module 0 +loadi(40, 53); +loadi(41, 54); + +// module 4 +loadi(48, 61); +loadi(49, 62); + +// console interrupt +loadi(8, 21); +loadi(9, 22); + +// int 6 +loadi(14, 27); +loadi(15, 28); + +// int 9 +loadi(20, 33); +loadi(21, 34); + +// int 11 +loadi(24, 37); +loadi(25, 38); + +// int 13 +loadi(28, 41); +loadi(29, 42); + +// int 14 +loadi(30, 43); +loadi(31, 44); + +// int 15 +loadi(32, 45); +loadi(33, 46); + +// module 1 +loadi(42, 55); +loadi(43, 56); + +// module 2 +loadi(44, 57); +loadi(45, 58); + +// inode user table +loadi(59, 3); +loadi(60, 4); + +// disk interrupt +loadi(6, 19); +loadi(7, 20); + +// disk free list +loadi(61, 2); + +// memory free list initialization +alias i R0; +i = 0; +while (i < 128) do + if (i < 76) then + [MEMORY_FREE_LIST + i] = 1; + else + [MEMORY_FREE_LIST + i] = 0; + endif; + i = i + 1; +endwhile; + +[MEMORY_FREE_LIST + 76] = 1; +[MEMORY_FREE_LIST + 77] = 1; +[MEMORY_FREE_LIST + 78] = 1; +[MEMORY_FREE_LIST + 79] = 1; +[MEMORY_FREE_LIST + 80] = 1; +[MEMORY_FREE_LIST + 81] = 1; +[MEMORY_FREE_LIST + 82] = 1; + +PTBR = PAGE_TABLE_BASE + 20; +PTLR = 10; + +[PTBR + 0] = 63; +[PTBR + 1] = "0100"; +[PTBR + 2] = 64; +[PTBR + 3] = "0100"; +[PTBR + 4] = 78; +[PTBR + 5] = "0110"; +[PTBR + 6] = 79; +[PTBR + 7] = "0110"; +[PTBR + 8] = 65; +[PTBR + 9] = "0100"; +[PTBR + 10] = 66; +[PTBR + 11] = "0100"; +[PTBR + 12] = -1; +[PTBR + 13] = "0000"; +[PTBR + 14] = -1; +[PTBR + 15] = "0000"; +[PTBR + 16] = 76; +[PTBR + 17] = "0110"; +[PTBR + 18] = 77; +[PTBR + 19] = "0110"; + +[PROCESS_TABLE + 16 + 1] = 1; +[PROCESS_TABLE + 16 + 11] = 80; +[PROCESS_TABLE + 16 + 12] = 0; +[PROCESS_TABLE + 16 + 13] = 8 * 512; +[PROCESS_TABLE + 16 + 14] = PTBR; +[PROCESS_TABLE + 16 + 15] = PTLR; +[PROCESS_TABLE + 16 + 4] = CREATED; +[76 * 512] = [65 * 512 + 1]; + +// per-process resource table for init +i = 1; +while (i < 9) do + [([PROCESS_TABLE + 16 + 11] + 1) * 512 - 2 * i] = -1; + i = i + 1; +endwhile; + +// disk map table initialization for init + +[DISK_MAP_TABLE + 10 + 2] = -1; +[DISK_MAP_TABLE + 10 + 3] = -1; +[DISK_MAP_TABLE + 10 + 4] = 7; +[DISK_MAP_TABLE + 10 + 5] = 8; +[DISK_MAP_TABLE + 10 + 6] = -1; +[DISK_MAP_TABLE + 10 + 7] = -1; +[DISK_MAP_TABLE + 10 + 8] = -1; +[DISK_MAP_TABLE + 10 + 9] = -1; + +i = 2; +while (i < 16) do + [PROCESS_TABLE + 16 * i + 4] = TERMINATED; + i = i + 1; +endwhile; + +[TERMINAL_STATUS_TABLE] = 0; +[DISK_STATUS_TABLE] = 0; +[SYSTEM_STATUS_TABLE + 0] = 0; +[SYSTEM_STATUS_TABLE + 2] = 45; +[SYSTEM_STATUS_TABLE + 3] = 0; +[SYSTEM_STATUS_TABLE + 24] = 0; // context switches +[SYSTEM_STATUS_TABLE + 25] = 0; // max memory usage +[SYSTEM_STATUS_TABLE + 26] = 0; // disk accesses + +// initialization of semaphore table +i = 0; +while (i < MAX_SEM_COUNT) do + [SEMAPHORE_TABLE + i * 4] = -1; + [SEMAPHORE_TABLE + i * 4 + 1] = 0; + i = i + 1; +endwhile; + +return; \ No newline at end of file diff --git a/Stage22/Assgn2/mod7.xsm b/Stage22/Assgn2/mod7.xsm new file mode 100644 index 0000000..2b9ffa2 --- /dev/null +++ b/Stage22/Assgn2/mod7.xsm @@ -0,0 +1,341 @@ +MOV R16, 2 +LOADI R16, 15 +MOV R16, 3 +LOADI R16, 16 +MOV R16, 4 +LOADI R16, 17 +MOV R16, 5 +LOADI R16, 18 +MOV R16, 16 +LOADI R16, 29 +MOV R16, 17 +LOADI R16, 30 +MOV R16, 22 +LOADI R16, 35 +MOV R16, 23 +LOADI R16, 36 +MOV R16, 18 +LOADI R16, 31 +MOV R16, 19 +LOADI R16, 32 +MOV R16, 63 +LOADI R16, 13 +MOV R16, 64 +LOADI R16, 14 +MOV R16, 65 +LOADI R16, 7 +MOV R16, 66 +LOADI R16, 8 +MOV R16, 50 +LOADI R16, 63 +MOV R16, 51 +LOADI R16, 64 +MOV R16, 40 +LOADI R16, 53 +MOV R16, 41 +LOADI R16, 54 +MOV R16, 48 +LOADI R16, 61 +MOV R16, 49 +LOADI R16, 62 +MOV R16, 8 +LOADI R16, 21 +MOV R16, 9 +LOADI R16, 22 +MOV R16, 14 +LOADI R16, 27 +MOV R16, 15 +LOADI R16, 28 +MOV R16, 20 +LOADI R16, 33 +MOV R16, 21 +LOADI R16, 34 +MOV R16, 24 +LOADI R16, 37 +MOV R16, 25 +LOADI R16, 38 +MOV R16, 28 +LOADI R16, 41 +MOV R16, 29 +LOADI R16, 42 +MOV R16, 30 +LOADI R16, 43 +MOV R16, 31 +LOADI R16, 44 +MOV R16, 32 +LOADI R16, 45 +MOV R16, 33 +LOADI R16, 46 +MOV R16, 42 +LOADI R16, 55 +MOV R16, 43 +LOADI R16, 56 +MOV R16, 44 +LOADI R16, 57 +MOV R16, 45 +LOADI R16, 58 +MOV R16, 59 +LOADI R16, 3 +MOV R16, 60 +LOADI R16, 4 +MOV R16, 6 +LOADI R16, 19 +MOV R16, 7 +LOADI R16, 20 +MOV R16, 61 +LOADI R16, 2 +MOV R0, 0 +_L1: +MOV R16, 128 +GT R16, R0 +JZ R16, _L2 +MOV R16, 76 +GT R16, R0 +JZ R16, _L3 +MOV R16, 29184 +ADD R16, R0 +MOV [R16], 1 +JMP _L4 +_L3: +MOV R16, 29184 +ADD R16, R0 +MOV [R16], 0 +_L4: +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L1 +_L2: +MOV R16, 29184 +ADD R16, 76 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 77 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 78 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 79 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 80 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 81 +MOV [R16], 1 +MOV R16, 29184 +ADD R16, 82 +MOV [R16], 1 +MOV R16, 29696 +ADD R16, 20 +MOV PTBR, R16 +MOV PTLR, 10 +MOV R16, PTBR +ADD R16, 0 +MOV [R16], 63 +MOV R16, PTBR +ADD R16, 1 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 2 +MOV [R16], 64 +MOV R16, PTBR +ADD R16, 3 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 4 +MOV [R16], 78 +MOV R16, PTBR +ADD R16, 5 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 6 +MOV [R16], 79 +MOV R16, PTBR +ADD R16, 7 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 8 +MOV [R16], 65 +MOV R16, PTBR +ADD R16, 9 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 10 +MOV [R16], 66 +MOV R16, PTBR +ADD R16, 11 +MOV [R16], "0100" +MOV R16, PTBR +ADD R16, 12 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 13 +MOV [R16], "0000" +MOV R16, PTBR +ADD R16, 14 +MOV [R16], -1 +MOV R16, PTBR +ADD R16, 15 +MOV [R16], "0000" +MOV R16, PTBR +ADD R16, 16 +MOV [R16], 76 +MOV R16, PTBR +ADD R16, 17 +MOV [R16], "0110" +MOV R16, PTBR +ADD R16, 18 +MOV [R16], 77 +MOV R16, PTBR +ADD R16, 19 +MOV [R16], "0110" +MOV R16, 28672 +ADD R16, 16 +ADD R16, 1 +MOV [R16], 1 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 11 +MOV [R16], 80 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 12 +MOV [R16], 0 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 13 +MOV R17, 8 +MUL R17, 512 +MOV [R16], R17 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 14 +MOV [R16], PTBR +MOV R16, 28672 +ADD R16, 16 +ADD R16, 15 +MOV [R16], PTLR +MOV R16, 28672 +ADD R16, 16 +ADD R16, 4 +MOV [R16], 3 +MOV R16, 76 +MUL R16, 512 +MOV R17, 65 +MUL R17, 512 +ADD R17, 1 +MOV R17, [R17] +MOV [R16], R17 +MOV R0, 1 +_L5: +MOV R16, 9 +GT R16, R0 +JZ R16, _L6 +MOV R16, 28672 +ADD R16, 16 +ADD R16, 11 +MOV R16, [R16] +ADD R16, 1 +MUL R16, 512 +MOV R17, 2 +MUL R17, R0 +SUB R16, R17 +MOV [R16], -1 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L5 +_L6: +MOV R16, 30032 +ADD R16, 10 +ADD R16, 2 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 3 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 4 +MOV [R16], 7 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 5 +MOV [R16], 8 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 6 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 7 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 8 +MOV [R16], -1 +MOV R16, 30032 +ADD R16, 10 +ADD R16, 9 +MOV [R16], -1 +MOV R0, 2 +_L7: +MOV R16, 16 +GT R16, R0 +JZ R16, _L8 +MOV R16, 28672 +MOV R17, 16 +MUL R17, R0 +ADD R16, R17 +ADD R16, 4 +MOV [R16], 4 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L7 +_L8: +MOV [29568], 0 +MOV [29552], 0 +MOV R16, 29560 +ADD R16, 0 +MOV [R16], 0 +MOV R16, 29560 +ADD R16, 2 +MOV [R16], 45 +MOV R16, 29560 +ADD R16, 3 +MOV [R16], 0 +MOV R16, 29560 +ADD R16, 24 +MOV [R16], 0 +MOV R16, 29560 +ADD R16, 25 +MOV [R16], 0 +MOV R16, 29560 +ADD R16, 26 +MOV [R16], 0 +MOV R0, 0 +_L9: +MOV R16, 32 +GT R16, R0 +JZ R16, _L10 +MOV R16, 29056 +MOV R17, R0 +MUL R17, 4 +ADD R16, R17 +MOV [R16], -1 +MOV R16, 29056 +MOV R17, R0 +MUL R17, 4 +ADD R16, R17 +ADD R16, 1 +MOV [R16], 0 +MOV R16, R0 +ADD R16, 1 +MOV R0, R16 +JMP _L9 +_L10: +RET +HALT \ No newline at end of file diff --git a/Stage22/Assgn2/timer.spl b/Stage22/Assgn2/timer.spl new file mode 100644 index 0000000..779d05c --- /dev/null +++ b/Stage22/Assgn2/timer.spl @@ -0,0 +1,36 @@ +// Store user SP to UPTR in process table -> 13 th word +[PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 13] = SP; + +// Set SP to start of Kernel stack +SP = [PROCESS_TABLE + [SYSTEM_STATUS_TABLE + 1] * 16 + 11] * 512 - 1; + +multipush(R2); + +alias prevMemUsage R2; +prevMemUsage = SYSTEM_STATUS_TABLE + 25; +if (128 - [SYSTEM_STATUS_TABLE + 2] > [prevMemUsage]) then + [prevMemUsage] = 128 - [SYSTEM_STATUS_TABLE + 2]; +endif; + +multipop(R2); + +backup; + +// obtaining PID of the currently executing process +alias currentPID R0; +currentPID = [SYSTEM_STATUS_TABLE + 1]; + +alias process_table_entry R1; +process_table_entry = PROCESS_TABLE + currentPID * 16; + +[process_table_entry + 4] = READY; + +call MOD_5; + +restore; + +SP = [PROCESS_TABLE + 16 * [SYSTEM_STATUS_TABLE + 1] + 13]; +[PROCESS_TABLE + 16 * [SYSTEM_STATUS_TABLE + 1] + 12] = 0; +[PROCESS_TABLE + 16 * [SYSTEM_STATUS_TABLE + 1] + 9] = 0; + +ireturn; \ No newline at end of file diff --git a/Stage22/Assgn2/timer.xsm b/Stage22/Assgn2/timer.xsm new file mode 100644 index 0000000..ff4de10 --- /dev/null +++ b/Stage22/Assgn2/timer.xsm @@ -0,0 +1,87 @@ +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 13 +MOV [R16], SP +MOV R16, 28672 +MOV R17, 29560 +ADD R17, 1 +MOV R17, [R17] +MUL R17, 16 +ADD R16, R17 +ADD R16, 11 +MOV R16, [R16] +MUL R16, 512 +SUB R16, 1 +MOV SP, R16 +PUSH R2 +MOV R16, 29560 +ADD R16, 25 +MOV R2, R16 +MOV R16, 128 +MOV R17, 29560 +ADD R17, 2 +MOV R17, [R17] +SUB R16, R17 +MOV R17, R2 +MOV R17, [R17] +GT R16, R17 +JZ R16, _L1 +MOV R16, 128 +MOV R17, 29560 +ADD R17, 2 +MOV R17, [R17] +SUB R16, R17 +MOV [R2], R16 +JMP _L2 +_L1: +_L2: +POP R2 +BACKUP +MOV R16, 29560 +ADD R16, 1 +MOV R16, [R16] +MOV R0, R16 +MOV R16, 28672 +MOV R17, R0 +MUL R17, 16 +ADD R16, R17 +MOV R1, R16 +MOV R16, R1 +ADD R16, 4 +MOV [R16], 1 +CALL 25600 +RESTORE +MOV R16, 28672 +MOV R17, 16 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R17, R18 +ADD R16, R17 +ADD R16, 13 +MOV R16, [R16] +MOV SP, R16 +MOV R16, 28672 +MOV R17, 16 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R17, R18 +ADD R16, R17 +ADD R16, 12 +MOV [R16], 0 +MOV R16, 28672 +MOV R17, 16 +MOV R18, 29560 +ADD R18, 1 +MOV R18, [R18] +MUL R17, R18 +ADD R16, R17 +ADD R16, 9 +MOV [R16], 0 +IRET +HALT \ No newline at end of file diff --git a/xfs-interface/stage22_2.sh b/xfs-interface/stage22_2.sh new file mode 100644 index 0000000..e5909f6 --- /dev/null +++ b/xfs-interface/stage22_2.sh @@ -0,0 +1,32 @@ +load --os $HOME/myexpos/Stage13/os_startup.xsm +load --init $HOME/myexpos/Stage21/Assgn1/shell2.xsm +load --idle $HOME/myexpos/Stage14/idle.xsm +load --int=10 $HOME/myexpos/Stage20/exit.xsm +load --int=11 $HOME/myexpos/Stage21/int11.xsm +load --int=13 $HOME/myexpos/Stage22/int13.xsm +load --int=14 $HOME/myexpos/Stage22/int14.xsm +load --int=15 $HOME/myexpos/Stage22/Assgn2/int15.xsm +load --int=9 $HOME/myexpos/Stage19/int9.xsm +load --int=8 $HOME/myexpos/Stage22/fork.xsm +load --exhandler $HOME/myexpos/Stage21/exhandler.xsm +load --int=7 $HOME/myexpos/Stage15/int7.xsm +load --int=6 $HOME/myexpos/Stage16/int6.xsm +load --int=disk $HOME/myexpos/Stage18/int2.xsm +load --int=console $HOME/myexpos/Stage16/console_int.xsm +load --module 5 $HOME/myexpos/Stage22/Assgn2/mod5.xsm +load --module 7 $HOME/myexpos/Stage22/Assgn2/mod7.xsm +load --module 0 $HOME/myexpos/Stage22/Assgn2/mod0.xsm +load --module 1 $HOME/myexpos/Stage22/mod1.xsm +load --module 2 $HOME/myexpos/Stage19/module_2.xsm +load --module 4 $HOME/myexpos/Stage18/module_4.xsm +load --int=timer $HOME/myexpos/Stage22/Assgn2/timer.xsm +rm test4.xsm +load --exec $HOME/myexpos/Stage22/Assgn1/test4.xsm +rm parent.xsm +load --exec $HOME/myexpos/Stage22/Assgn2/parent.xsm +rm child.xsm +load --exec $HOME/myexpos/Stage22/Assgn2/child.xsm +rm con.xsm +load --exec $HOME/myexpos/Stage22/Assgn3/con.xsm +rm seq.xsm +load --exec $HOME/myexpos/Stage22/Assgn3/seq.xsm \ No newline at end of file