Skip to content
Thomas Russell Murphy edited this page Apr 25, 2015 · 9 revisions

yams

This is the yams wiki. It's a good place to put things like coding conventions and API information.

Development Tasks

Assignments are general and collaboration is important.

  • Final Socket implementation: due 27 March, by Jeff
  • Establish calling convention: due 27 March, by all
  • HTTP request parsing: due 10 April
    • String methods -- Stephen
    • HTTP business logic -- Jeff
  • HTTP response building: due 24 April
    • Additional string methods -- Stephen (contact for more)
    • Invalid request method case -- Andrew/Jeff
    • File finding and loading -- Thomas
    • Invalid URI case -- Andrew/Jeff
    • Valid URI case -- Andrew/Jeff
  • HTML+Content files to serve: ongoing as HTTP features developed
    • Basic, static, single-page HTML -- Thomas
    • Static, multi-page, linked HTML -- Aaron
    • Addition of visual effect media (CSS, JS) -- Andrew
    • Addition of binary media (images) -- Stephen
  • Stretch features: as time/difficulty allows
    • Config file with redirects, custom port
    • Magic POST field for Brainfuck interpretation
    • Implementation of Brainfuck interpreter as backend to POST
  • Presentation: due 4/23, by all
    • Whatever we are presenting
  • Report: due 5/1, by all

API Information

Coding Conventions

Function Caller

  • Arguments go into $a0-$a3 (overflow pushed to stack).
  • Functions should be called with the instruction jal (jump-and-link), which does a jump, and sets $ra to the next instruction.
  • If you make a function call, you'll need to push your function's return address to the stack. We have macros for that - push($ra) will push, and pop($ra) will pop.
  • Also, respect the register use convention. Any registers you want to save, which are not preserved across a function call should be pushed to the stack.
    • The only things really preserved across function calls are the saved temporaries ($s0-$s7) and the global/stack/return pointers.
    • Expect that everything else could get smashed.

Function Callee

  • Return from functions using jr $ra.
  • Put return values in $v0-$v1 (overflow could get pushed to stack).
  • Make sure that the stack is in the same state when you return as it was when you were called (barring any overflowed args or return values).

Miscellaneous Assembly

  • .include assembly files containing macros at the top.
  • .include assembly files containing code at the bottom.
  • Useful .data section specifiers:
    • .asciiz - For a null terminated string.
    • .ascii - For a string with no null terminator.
    • .space - Empty space (in bytes).