From 9b03e50ed4e20a1864bb2a4de39f00572b1b73d7 Mon Sep 17 00:00:00 2001 From: Fredrik Date: Wed, 3 Mar 2021 13:20:13 +0100 Subject: [PATCH] New --- .deps/delay.S.P | 2 + .deps/game.c.P | 6 + .deps/labwork.S.P | 2 + .deps/snake.c.P | 2 + data.c.o | Bin 2188 -> 2240 bytes delay.S | 102 ++++++ delay.S.o | Bin 0 -> 1392 bytes display.c | 101 +++++- display.c.o | Bin 2936 -> 4824 bytes game.c | 54 ++++ game.c.o | Bin 0 -> 2764 bytes main.c | 19 +- main.c.o | Bin 1884 -> 1864 bytes outfile.elf | Bin 12640 -> 23856 bytes outfile.hex | 805 +++++++++++++++++++++++++++++++++++----------- snake.c | 74 +++++ snake.c.o | Bin 0 -> 1044 bytes snake.h | 49 +-- vectors.S | 252 +++++++++++++++ vectors.S.o | Bin 0 -> 15332 bytes 20 files changed, 1224 insertions(+), 244 deletions(-) create mode 100644 .deps/delay.S.P create mode 100644 .deps/game.c.P create mode 100644 .deps/labwork.S.P create mode 100644 .deps/snake.c.P create mode 100644 delay.S create mode 100644 delay.S.o create mode 100644 game.c create mode 100644 game.c.o create mode 100644 snake.c create mode 100644 snake.c.o create mode 100644 vectors.S create mode 100644 vectors.S.o diff --git a/.deps/delay.S.P b/.deps/delay.S.P new file mode 100644 index 0000000..8ce9a49 --- /dev/null +++ b/.deps/delay.S.P @@ -0,0 +1,2 @@ +delay.S.o: delay.S +delay.S : diff --git a/.deps/game.c.P b/.deps/game.c.P new file mode 100644 index 0000000..1075a1f --- /dev/null +++ b/.deps/game.c.P @@ -0,0 +1,6 @@ +game.c.o: game.c /opt/mcb32tools/include/stdint.h \ + /opt/mcb32tools/lib/gcc/mipsel-mcb32-elf/4.9.2/include/stdint-gcc.h \ + /opt/mcb32tools/include/pic32mx.h snake.h +game.c /opt/mcb32tools/include/stdint.h : + /opt/mcb32tools/lib/gcc/mipsel-mcb32-elf/4.9.2/include/stdint-gcc.h : + /opt/mcb32tools/include/pic32mx.h snake.h : diff --git a/.deps/labwork.S.P b/.deps/labwork.S.P new file mode 100644 index 0000000..6887fa6 --- /dev/null +++ b/.deps/labwork.S.P @@ -0,0 +1,2 @@ +labwork.S.o: labwork.S +labwork.S : diff --git a/.deps/snake.c.P b/.deps/snake.c.P new file mode 100644 index 0000000..68d07b2 --- /dev/null +++ b/.deps/snake.c.P @@ -0,0 +1,2 @@ +snake.c.o: snake.c +snake.c : diff --git a/data.c.o b/data.c.o index 0bce175ad89327484f0c0fb91a28d1dba1035824..9908c47eef7f5729bdab96d15092880e8153b046 100644 GIT binary patch delta 105 zcmeAXJRmqhfpNk{#nr5u3<3-cf()Pj=Q1!bumCXw6NFy{s$~Eo^5PnHU%+2XQE|vam5QbWJ|UCJX?m%N$7n delta 67 zcmX>g*dsVWfiY&I;%Zh-2L=WPL55HN3nqVMEty=$X0>@c+gV1Y2Mm+jIFuxwure@| L0#(2OBa{IEw)+p| diff --git a/delay.S b/delay.S new file mode 100644 index 0000000..c393b11 --- /dev/null +++ b/delay.S @@ -0,0 +1,102 @@ + # labwork.S + # Written 2015-2017 by F Lundevall + # Skeleton file for IS1200/IS1500 lab 1. + # The macros PUSH and POP are in the public domain. + # Please add your own code at the end of the file. + + # + # Please keep the two macros PUSH and POP unchanged + # +.macro PUSH reg + addi $sp,$sp,-4 + sw \reg,0($sp) +.endm + +.macro POP reg + lw \reg,0($sp) + addi $sp,$sp,4 +.endm + # + # Please add your own code below this line + # +.global delay +.global time2string +.data +.text + +hexasc: + andi $a0,$a0, 0xf #Checks 4 LSB + addi $v0,$a0,0x30 + jr $ra + nop + +delay: + PUSH $s3 + li $s3, 47000 + li $t6, 0 + li $t7, 0 + j loop + nop + loop: + beq $t7, $a0, end + nop + sub $a0, $a0, 1 + j loop2 + nop + loop2: + beq $t6, $s3, loop + nop + addi $t6, $t6, 1 + j loop2 + nop + end: + + POP $s3 + + jr $ra + nop + +time2string: + PUSH $s0 + PUSH $s1 + PUSH $ra + PUSH $a0 + add $s0,$a1,$0 #Saves time info to t0 + add $s1,$a0,$0 #Saves time info address to t1 + + srl $a0,$s0,12 # Första minut-talet + jal hexasc + nop + sb $v0, 0($s1) + + srl $a0,$s0,8 # Andra minut-talet + jal hexasc + nop + sb $v0, 1($s1) + + li $t4, 0x3A #Contains ":" + nop + sb $t4, 2($s1) # Lägger till kolon + + srl $a0,$s0,4 # första sekund-talet + jal hexasc + nop + sb $v0, 3($s1) + + add $a0, $s0, $zero # andra sekund-talet + jal hexasc + nop + sb $v0, 4($s1) + + li $t5,0x00 + nop + sb $t5, 5($s1) + + POP $a0 + POP $ra + POP $s1 + POP $s0 + + jr $ra + nop + diff --git a/delay.S.o b/delay.S.o new file mode 100644 index 0000000000000000000000000000000000000000..8953ea6553a9568c9c29d4da6dea51309fdd519f GIT binary patch literal 1392 zcmbtU!D1sB42?&Q5VV-^Ztc$|CQJ#+7!_wLNz%F{=NVL+RK zG=4MSt;t9p{&FN(Kn9b@VZT_!Ydej;L?indo)mx&-FF`^PnzOisp7_HUo4r(4NJXLtqwc8!o2W_MZc`2FEb%D9V)Le4U z;NBf%*e{U6^~2O`GHx<%+YH6>Slk1$(KBPXLH{V~5ja(NtgtuI`|{aTM{13lo#MF< z&r{#QgB+EW`ZkOSI+h8iwYwF#C1TJV;HLJPUd;)-od8bR4O}>-Rtrwkt5oY74LGY$ z)}A|Vsk%{fE8O?XO*l;KxIxgYmbL@0HQEyrvtW`*7urm=%R3&L2@5krCNDFF%LzV? z#RQ+g%>+;59y#wnvT4>^q1PTz2!E#h0T@`P!+}#~;03*!rqsLi*J2$1cS2>a=I$b> zZh1>Q^=iF>O>f6-y+W -#include -#include "snake.h" +#include +#include "snake.h" //Project header file + +void *stdin, *stdout, *stderr; #define DISPLAY_CHANGE_TO_COMMAND_MODE (PORTFCLR = 0x10) #define DISPLAY_CHANGE_TO_DATA_MODE (PORTFSET = 0x10) @@ -14,18 +18,25 @@ #define DISPLAY_TURN_OFF_VDD (PORTFSET = 0x40) #define DISPLAY_TURN_OFF_VBAT (PORTFSET = 0x20) +/*If any point in the array is set to one the pixel att the same position be lit*/ +uint8_t display[32][128]; //Human readable pixel position and activation +uint8_t oled_display[512]; //Computer readable pixel position and activation + +/*(TAKEN FROM LAB) Quick sleep timer*/ void quicksleep(int cyc) { int i; for(i = cyc; i > 0; i--); } -uint8_t spi_send_recv(uint8_t data) { +/*(TAKEN FROM LAB) Send data to the OLED display*/ +uint8_t spi_send_recv(uint8_t data) { //LAB while(!(SPI2STAT & 0x08)); SPI2BUF = data; while(!(SPI2STAT & 1)); return SPI2BUF; } +/*(TAKEN FROM LAB) Initialize OLED display*/ void display_init(void){ DISPLAY_CHANGE_TO_COMMAND_MODE; quicksleep(10); @@ -56,13 +67,12 @@ void display_init(void){ spi_send_recv(0xAF); } -void display_string(int line, char *s) { +void display_string(int line, char *s) { //LAB int i; if(line < 0 || line >= 4) return; if(!s) return; - for(i = 0; i < 16; i++) if(*s) { textbuffer[line][i] = *s; @@ -71,7 +81,7 @@ void display_string(int line, char *s) { textbuffer[line][i] = ' '; } -void display_update(void) { +void display_update(void) { //LAB int i, j, k; int c; for(i = 0; i < 4; i++) { @@ -94,3 +104,82 @@ void display_update(void) { } } } + +/*(TAKEN FROM LAB) This will print any image on the display with the help of an array containing the map of the active and inactive pixels*/ +void display_image(int x, const uint8_t *data) { //LAB + int i, j; + + for(i = 0; i < 4; i++) { + DISPLAY_CHANGE_TO_COMMAND_MODE; + + spi_send_recv(0x22); + spi_send_recv(i); + + spi_send_recv(x & 0xF); + spi_send_recv(0x10 | ((x >> 4) & 0xF)); + + DISPLAY_CHANGE_TO_DATA_MODE; + + for(j = 0; j < 128; j++) + spi_send_recv(data[i*128 + j]); + } +} + +void translateToImage() { + int page, column, row, c, k; + uint8_t powerOfTwo = 1; + uint8_t oledNumber = 0; + int survivalMode = 0; + + for(page = 0; page < 4; page++) { + for(column = 0; column < 128; column++) { + powerOfTwo = 1; + oledNumber = 0; + + for(row = 0; row < 8; row++) { + if(display[8 * page + row][column]) { + oledNumber |= powerOfTwo; + } + powerOfTwo <<= 1; + } + oled_display[column + page * 128] = oledNumber; + } + } +} + +void create_object(int xPos, int yPos, int width, int height) { + int row, column; + + for (row = 0; row < 32; row++) { + for (column = 0; column < 128; column++) { + if (row >= yPos && row <= (yPos + height) && column >= xPos && column <= (xPos + width)) { + display[row][column] = 1; + } + } + } +} + +void clear_display() { + int row, column, i; + + for(row = 0; row < 32; row++) { + for(column = 0; column < 128; column++) { + display[row][column] = 0; + } + } + + for (i = 0; i < 512; i++) { + oled_display[i] = 0; + } +} + +void display_start(){ + clear_display(); + snake(); + //create_object(64,16,1,1); + translateToImage(); + display_image(0, oled_display); +} + + + diff --git a/display.c.o b/display.c.o index 5d20679439649bd4c11370d695a23c2cabddecf8..cbc50fba3e3a66a741006c22e26531b97e92f3b2 100644 GIT binary patch literal 4824 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 F_%CLf83+IX delta 564 zcmXxhJxIe)5C`x}Orov*NHW+WMM{dXvp6Vpa1;?-I*5bR)i0z|J6TI{DkvOo3Jw*V z{6Ikm5l06HhboR8#M!Zkga0$>?&BZtP)X=cimAAVz<}z z_@c2why^sC3|iNIL-RU(Mw>FC`91W>BJ|Enp5e_j7QX!41P!zc9Ae~*}RB+R!riZ#1v6O zbn#y%_|(mqOBO%4f%7s*R5bY04a~O1aW51mBbLFL#Z51C9xZuzKKBBJ`k2 m&EF^ifghSxo998(=BgjsKQ?Z{$9^H3!wEMy`# +#include +#include "snake.h" //Project header file + +int score = 0; +int speed = 20; + + +int snake_length; +int snake_width = 1; +int snake_x = 64; +int snake_y = 16; + +int apple_x; +int apple_y; + +void snake(){ + snake_create(); + apple_create(); + + if(snake_x == apple_x && snake_y == apple_y){ + apple_eat(); + } + delay(speed); + snake_move(); +} + +void snake_create(){ + snake_length = 5; + create_object(snake_x, snake_y, snake_length, snake_width); +} + +void snake_move(){ + if(snake_x > 128){ + snake_x = 0; + }else{ + snake_x++; + } +} + +void apple_create(){ + //Randomize + create_object(apple_x, apple_y, 1, 1); +} + +void apple_eat(){ + display[apple_x][apple_y] = 0; //Clear apple pixel + apple_x = 5; + apple_y = 5; + apple_create(); + score++; +} diff --git a/game.c.o b/game.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d3f1c09ec5afb510e08f80de07f088d4436f4df3 GIT binary patch literal 2764 zcmb7FO>7%Q6n^%uoun<)fdJu0U`s)Dp;|>HhZGfQN%{v$Q4j)EsK{A+w~oPovNzyd zpa^bM%B2!LAdv$SJw!?mmFR&`A2@O90jWK3C=wDmh6p4Mk<9n)&N#bmOyNo6?|tvR zd2im#?D&(DbEguCglI{~u*qoke7pUKsI|DhsNaQdPaU&&uy(5a2-(d z6(*01%w7^9&RiOi;#la9+l{_m&ky5sS)1XpoVm@efto9*xiT&rhlb@Y>+Z3Z9)kGxn6OpOwUV4 z#VR#wHLs2osA)OA->MXse6PK`H+?O-rv`SI>(gRj>mSktXox9~#Q2D0V>~5?V>~U> zF+L=(#P~ir732Hmod`GOkKTLWCT+Mhqq5!eG*5=SMIVGQqxkIvOmjm%R=&``-TNZO z4f!(0P5By}cOi^7@OWSj;(A;`Sg6+c z(33Et&?vs|mHcq;9~a^GZayKw{Y#CCOn|3>d0^^Mkt5_l-oF$sEgm~b18s6VL?_6B zJQowmxZkOVMb6U>PJ4mt1_a>V^c4%`It9JXl3WAP{Lz#YW}-zhmI z`55{j;{0qP_H}`X`4@>ehyN;k=TSn^YQhxo8Pw8ZDg`ae2!^frWlUg?ToUIqj^F$9 zit9g{dE`QSebM<|goW`s&P5!#79BSU14=cuopI6j7{~g@FkV0$+<{!YCyu!}Zw`a; zTCN~&RTH4Ddj@*6-#H}6!^VDt{~jQ7zKIddH?13jouYjOrL!Lj<8ZzE!Z?majK6xl zhIYJ;xQr%1osU;NTIyYp&K_}$*Ly #include #include "snake.h" +void user_isr(){ + return; +} + int main(void){ - /* + /* This will set the peripheral bus clock to the same frequency as the sysclock. That means 80 MHz, when the microcontroller is running at 80 MHz. Changed 2017, as recommended by Axel. @@ -44,9 +50,14 @@ int main(void){ SPI2CONSET = 0x20; /* SPI2CON bit ON = 1; */ SPI2CONSET = 0x8000; + + display_init(); //Initialize OLED display + + while(1){ + display_start(); + } - display_init(); - display_string(0, "TEST"); - display_update(); return; } + + diff --git a/main.c.o b/main.c.o index 057d54e7dd8f79f9d080b3d657ee46a561cb6dcb..77521745e23914a11095553381ab66eeeefbfe1a 100644 GIT binary patch delta 579 zcmY+ByGsK>5XQf|>|UbgaXyHOi7_N_5iNY8jgUtF1MNft1{4B@L?NPJv=<*!+K8Q% zSO_+XMG6b;EEQsB83jQ^IA@{({a|+XH{a~u?(JjnHn`t6QB#0nBR>XF3L*IM;a)ik z*JttCu}7-$mm3fBo)1@!4^^q1kDeMGoc-b#0iR@sDm|+(jhNAJ`pb1)sfxtz<%rR= znV`J6L!V}8OQT=RUwL3*vH_eu@M7v8H)G}>w_xrME4;e%%zPoh23qmvW*cn&a6vp) zlA|pN0~^0^X>ftL%-j&~fnCySm?~x`&8lQ{ak-e!W!ABh%PuZ7V6B)fEG!obR8rA_ zOkowM@MbCm+)3tL9wc*!%mC0QImmx1K{e$ir8|sA>eh*-TRwXin*o~EF~g=^-AS9; zuFo7EFSKK%=t(;|%@<13w$)A%%WkUjIyr5C#;ur9uCL2kzTqLRiOSsF_A{-Iau$gt sj(68xsTX-Tq;1PXr->UW6RH1ni}k2E>cyK|*|`jSo!`h0-9j z*Tf9o^;qywp~rq5+gl4BbI8$a4u#&**)?kNhuxXq%+Aj4+xIioOLcOyJr}SPq9@Q= zhQjpa=0|HSpVMrYfbtSMNlmO zyd29bkKtfE!2SoyxpfA0|axV!`t0Tx6&t zl<|C?e+l0z&_MWN!v=Dcm5cE!u8EnNr*gsCF*Pk2EAj%P9d>m7R=nJ(&NH6{g&Raf zCo+?cnEnojyQ3hExmr=)nWf)Si7r#i&_AhGJ^kLig}zOKhu&H7i1RSN0$VMQ6Q{cB EKNu8VAOHXW diff --git a/outfile.elf b/outfile.elf index bf36f766d4e916bcc81530217452cc6e262838e3..fe9213dce4e58a4a7b0294195df32d7941302db9 100644 GIT binary patch literal 23856 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 hi~qZT_xC-h*o(|@@I8wm2lZXpBl1l> 5) & 0x0007; + return btn; +} + +void keyPress(int buttons){ + // 0 0 0 0 = UP DOWN LEFT RIGHT + + //Svänga upp + if(buttons & 0xf000){ + if(this.direction == "down") + break; + this.xspeed = 0; + this.yspeed = 1; + this.direction = "up"; + } + + //Svänga ner + if(buttons & 0x0f00){ + if(this.direction == "up") + break; + this.xspeed = 0; + this.yspeed = -1; + this.direction = "down"; + } + + //Svänga vänster + if(buttons & 0x00f0){ + if(this.direction == "right") + break; + this.xpseed = -1; + this.yspeed = 0; + this.direction = "left"; + } + + //Svänga höger + if(buttons & 0x000f){ + if(this.direction == "left") + break; + this.xpseed = 1; + this.yspeed = 0; + this.direction = "right"; + } + +} + +void draw(){ + Snake.update(); +} +*/ \ No newline at end of file diff --git a/snake.c.o b/snake.c.o new file mode 100644 index 0000000000000000000000000000000000000000..958f51518c5abe4ecd038f862560c6edf76cd833 GIT binary patch literal 1044 zcmah|O-sW-5S=u!A5yV;61>Edt;iy^f(jm_+EP#{hBpzV=x+Lk%AIlEsb(ds*n^fe;!Zw|>;=T2qT z9DLV!v_va*)*^Qk0-jYm6i(hov`Y)!EimikWB9A%HMVUa3oO#@LW460ps{hijnHS} zbGhaLumc@GUA86=*YQ~#p8@g?aH-3mn8`jG$j#HqwYyNa7uMi<@i)Rc#sly@8udYA zd&Rd9`b@Ik8hkku&c6fG=HW{nv+NZv{Q#dp9^k)~`{4RHAYShS8}E^mChPqIsa{<- literal 0 HcmV?d00001 diff --git a/snake.h b/snake.h index 8344e4e..354befa 100644 --- a/snake.h +++ b/snake.h @@ -1,55 +1,28 @@ -/* mipslab.h - Header file for all labs. - This file written 2015 by F Lundevall - Some parts are original code written by Axel Isaksson +/*Written by Fredrik Lundström and Michell Dib 2021 (c)*/ - Latest update 2015-08-28 by F Lundevall - - For copyright and licensing, see file COPYING */ - -/* Declare display-related functions from mipslabfunc.c */ void display_image(int x, const uint8_t *data); void display_init(void); void display_string(int line, char *s); void display_update(void); uint8_t spi_send_recv(uint8_t data); -/* Declare lab-related functions from mipslabfunc.c */ -char * itoaconv( int num ); -void labwork(void); -int nextprime( int inval ); void quicksleep(int cyc); -void tick( unsigned int * timep ); - -/* Declare display_debug - a function to help debugging. - - After calling display_debug, - the two middle lines of the display show - an address and its current contents. - There's one parameter: the address to read and display. - - Note: When you use this function, you should comment out any - repeated calls to display_image; display_image overwrites - about half of the digits shown by display_debug. -*/ void display_debug( volatile int * const addr ); -/* Declare bitmap array containing font */ extern const uint8_t const font[128*8]; -/* Declare bitmap array containing icon */ extern const uint8_t const icon[128]; -/* Declare text buffer for display output */ extern char textbuffer[4][16]; -/* Declare functions written by students. - Note: Since we declare these functions here, - students must define their functions with the exact types - specified in the laboratory instructions. */ -/* Written as part of asm lab: delay, time2string */ void delay(int); -void time2string( char *, int ); -/* Written as part of i/o lab: getbtns, getsw, enable_interrupt */ -int getbtns(void); -int getsw(void); void enable_interrupt(void); + +//Egna +uint8_t display[32][128]; //Human readable pixel position and activation +uint8_t oled_display[512]; //Computer readable pixel position and activation + +void display_start(); +void clear_display(); +void translateToImage(); +void create_object(int xPos, int yPos, int width, int height); +void snake(); diff --git a/vectors.S b/vectors.S new file mode 100644 index 0000000..7847274 --- /dev/null +++ b/vectors.S @@ -0,0 +1,252 @@ + # vectors.S + # This file written 2015 by Axel Isaksson + # Modified 2015 by F Lundevall + # For copyright and licensing, see file COPYING + +.macro movi reg, val + lui \reg, %hi(\val) + ori \reg, \reg, %lo(\val) +.endm + +.macro STUB num + .align 4 + .section .vector_new_\num,"ax",@progbits + .global __vector_\num + __vector_\num: + movi $k0, _isr_primary_install + lw $k0, \num * 4($k0) + jr $k0 +.endm + +.align 4 +.global __use_isr_install +__use_isr_install: +STUB 0 +STUB 1 +STUB 2 +STUB 3 +STUB 4 +STUB 5 +STUB 6 +STUB 7 + +STUB 8 +STUB 9 +STUB 10 +STUB 11 +STUB 12 +STUB 13 +STUB 14 +STUB 15 + +STUB 16 +STUB 17 +STUB 18 +STUB 19 +STUB 20 +STUB 21 +STUB 22 +STUB 23 + +STUB 24 +STUB 25 +STUB 26 +STUB 27 +STUB 28 +STUB 29 +STUB 30 +STUB 31 + +STUB 32 +STUB 33 +STUB 34 +STUB 35 +STUB 36 +STUB 37 +STUB 38 +STUB 39 + +STUB 40 +STUB 41 +STUB 42 +STUB 43 +STUB 44 +STUB 45 +STUB 46 +STUB 47 + +STUB 48 +STUB 49 +STUB 50 +STUB 51 +STUB 52 +STUB 53 +STUB 54 +STUB 55 + +STUB 56 +STUB 57 +STUB 58 +STUB 59 +STUB 60 +STUB 61 +STUB 62 +STUB 63 + +.text + +.align 4 +.global _isr_primary_install +_isr_primary_install: +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline +.word _isr_trampoline + +# Interrupts are handled here +.align 4 +.set noreorder +.global _isr_trampoline +_isr_trampoline: + # this is an interrupt service routine + + # tell the assembler not to use $1 right now + .set noat + + # save all caller-save registers, and also ra + addi $sp,$sp,-72 + sw $ra, 0($sp) + sw $1, 4($sp) # $at + sw $2, 8($sp) # $v0 + sw $3,12($sp) # $v1 + sw $4,16($sp) # $a0 + sw $5,20($sp) # $a1 + sw $6,24($sp) # $a2 + sw $7,28($sp) # $a3 + sw $8,32($sp) # $t0 + sw $9,36($sp) # $t1 + sw $10,40($sp) # $t2 + sw $11,44($sp) # $t3 + sw $12,48($sp) # $t4 + sw $13,52($sp) # $t5 + sw $14,56($sp) # $t6 + sw $15,60($sp) # $t7 + sw $24,64($sp) # $t8 + sw $25,68($sp) # $t9 + + # Any callee-saved regs ($s0 etc) used by user's handler + # will be saved and restored by that handler + # (the C compiler will see to that). + + # call user's handler + jal user_isr + nop + + # restore saved registers + lw $25,68($sp) + lw $24,64($sp) + lw $15,60($sp) + lw $14,56($sp) + lw $13,52($sp) + lw $12,48($sp) + lw $11,44($sp) + lw $10,40($sp) + lw $9,36($sp) + lw $8,32($sp) + lw $7,28($sp) + lw $6,24($sp) + lw $5,20($sp) + lw $4,16($sp) + lw $3,12($sp) + lw $2, 8($sp) + lw $1, 4($sp) + lw $ra, 0($sp) + addi $sp,$sp,72 + + .set at + # now the assembler is allowed to use $1 again + + # standard epilogue follows + eret + nop + + +# Exceptions are handled here (trap, syscall, etc) +.section .gen_handler,"ax",@progbits +.set noreorder +.ent _gen_exception +_gen_exception: + mfc0 $k0, $14, 0 + addi $k0, $k0, 4 + mtc0 $k0, $14, 0 + eret + nop + +.end _gen_exception diff --git a/vectors.S.o b/vectors.S.o new file mode 100644 index 0000000000000000000000000000000000000000..ac5482cb5afde7d8a7f6b0c7b590380c1bbc8fca GIT binary patch literal 15332 zcmeI2e{fXQ6~|A=@=J7p5()?miwOlQhHQ2>K+&>DC?GI`KvBWjEXf)&gd`>#fdNVo z5PzWSOw*~>AB~z8D%iEtbc$7LI%Y;&ZMBtFt42FO+R}42_wGCAUT^RJ z9q#Zr_j|v0Kli*J_wBoHvwzv@uM`y(fi6Wb3IYYtGYg<-9JIvp9p=D2aF_0SKH?EL zb?(_xfah`{cqBIp9?e|{kLAWecdi7!lba0R%}s-2xiB2hmBIINbKvpZTsV=dfRnix zJds-f-_KnExm*HH<*MPS9O5pdgNpSmwq?=FVxKJb&EjXW_}MHnvdGFJGmGpjj*-Q& zvN&cI$IfC7SpcDzk6+{Q>pcE8kKgF=TReWo48thEizxRzg2tEE$X6`1MWgP&5)Np<*a+ z+r1-`+KMsLIuy6*T5GzoJd@s)f%3XkCI#hN+uESKHC^A(bW<~wuUWZveR*nY!%dB; z`h0t1c}ra@b!aTVC0(0oZcR3&cP1;WmWb6-X|+VHmYCHNw_2*Kmibo80;^@A)e`xP zr0uLDcG?j;?}(jv#Lhforyj9$kJ!ma?CdM;>?`f;EA8wn?d&V<>?`f;EA8wn?d&V< z>?`f;qjvUDJNu}eebmlAYG)s{vya-@NA2vRcJ@&_`C|%+OV}flWq%^NUFxyT*bHwr#q=G#ke%PNDGX`5Q5JMJsQG7 zkAZTbF9KYs6-qITg{upSc;n$Zp(nsiLQjN@(39X+p{KyTLQjQZfft3o1AZ&?aQK7JBj6*UN5bEQz7vLpg6m~G-hWDj9t|^uE`pfQV_>n+7s1s+ zkA;mwkB1teC%|^0C&Dd4Pl5wNPl2OCPlay^JslnsdIsQ2xe3Kj`n3(JL0!+N3XAt`hNY!`Yv>=b$j92B}4vO?bs z4+z}`$AoT&9}2w_o)daEyd?AT}j<}Rr(V~dE zGAmjPaaU$Viy-dGtZ4DWTw3^WDYK#l4|io&w9w(M%!(E`+?83;!iKvtD_YPnmliWz z%B-wKjO#^B{w0mE!bv9E+tSH~w$@}rQ(Gq0*a*p_8ma>F?JcbhJ5sH?Z9fuptqiKs zpc)IR@t|52RObiP1wnOTP{mnaNGHO^!}%Vxvk`Ho2kmT3oZ~?|8x?1F(9Xuid0lA7 zNgdSLxHz4Ib~Y|ft%@5|r1uE)xh*Qzs92}sHWeFHY*8_z;w}~Us@S38Ar)^|@u-UT zs@SRGeJVbvVwZ~DDjrwyq>4|f*rVbp6`xVDSH(URUsUmB6<<~Hw2E)2__m7uDh{al zzKS2J__2zEDxOvGQx#X^GgpXqmUQ({9KLGkdKiI`%6WbMc!cmeIDb9lr^EmKd>Gox z|NZ|Av}w7fmw5@SKgr$^jzdjlDsH23OW;PO8$UP--<{Ddhq}{sH43*`O6%7~A2SwO zdTEGnUWfYo`c+^*%&mn!ONDrohpPGiX%=P@KZB=_-#YBWc|FJ@k9gFsdG%Q5yc!3uR(&pk zkxC!qjX|w>yRpuB9S&YQ_T%}TW<2^$LG$i1cwG+O5ra3tc=R){<~?NadL6v`4c;K* zjb}Xi13A9G{SMv`!F$Kx#Tai2!Po}4-8%jfMN3dh8?_54PF`J z;U5wgcoPg>!oeGh{rLHaF&;fT=={E5@M;{qOAKB$<1J#mg$A#~!HXNb4UBgstVc=jQ3N6SL5K(@80}+?qj@F zjQ4AU*Wuv((%_wDyfutBVDP#eJbLcp`3*4MHH>%0;PpCqpBTJB#-nFzeSR+}mgl42 z!5e}7cz&U>;QqIs@unL*diW2cuZzC^rWm{u#-lZY&acAYg&n-P2Ct0qHZk5(gO_md z78|@6<6X~qUp06&4&Jo}ubS~TGhTzi>u~VW25$r7-N<-*4PKXnx69zwFX?=J(4*UWgc4PLKK8!P~%i`xx(}!RvDHjvKr>#@o+$&l$X42ao;^3N1+BMkT{| z2T-G(Kfk{*c>NCEuMFNH#yiM(?;1R~;Ips4cMM)9;~i$avj#7Wyb|