Peer Review Joel Nykänen
Ser ganska bra ut. Processkoden fungerar som den ska, och exception handlern printar korrekt ut karaktärerna. Du har också korrekt använt bara k-registrerna i exception handlern. Dock så saknas det testkod för fallen med icke-syscall exceptions och övriga service codes. När jag la in min egna testkod upptäckte jag ett par problem.
Det första (mindre) problemet är att vid en icke-syscall exception så hoppar programmet tillbaka till kernel_loop
från sys_fail
och startar om exception handlern igen. Det gör ingenting i det här fallet, då den bara fortsätter att se en exception och hoppa till sys_fail
. Men jag gissar att meningen var att hoppa till sys_fail
igen.
Det andra problemet är att den inte fungerar som den ska vid en övrig service code. Då ska den fortsätta köra programmet, vilket innebär att den måste hoppa tillbaka till där exceptionen hände och köra RFE (precis som efter den har printat en karaktär), men just nu kör du endast RFE. Det betyder att den hamnar i en evig loop i exception handlern och inte fortsätter köra programmet.
Sedan när det kommer till dina kommentarer om srl
och srlv
: jag prövade att använda koden med srl $k0, $k0, 2
istället för den andra och det fungerade. Jag tror att det bara är SyncRim som felaktigt visar att den tar ett register i instruktionsvyn. Kom bara ihåg att du har ett delay slot efter mfc0
, så du kan inte köra det direkt.
Bra jobbat!