-
Notifications
You must be signed in to change notification settings - Fork 137
MARS syscalls
Pavel Kryukov edited this page May 8, 2017
·
8 revisions
| rvice | Code in $v0 | Arguments | Result |
|---|---|---|---|
| print integer | 1 | $a0 = integer to print | |
| print float | 2 | $f12 = float to print | |
| print double | 3 | $f12 = double to print | |
| print string | 4 | $a0 = address of null-terminated string to print | |
| read integer | 5 | $v0 contains integer read | |
| read float | 6 | $f0 contains float read | |
| read double | 7 | $f0 contains double read | |
| read string | 8 | $a0 = address of input buffer | See note below table |
| $a1 = maximum number of characters to read | |||
| sbrk (allocate heap memory) | 9 | $a0 = number of bytes to allocate | $v0 contains address of allocated memory |
| exit (terminate execution) | 10 | ||
| print character | 11 | $a0 = character to print | See note below table |
| read character | 12 | $v0 contains character read | |
| open file | 13 | $a0 = address of null-terminated string containing filename | $v0 contains file descriptor (negative if error). See note below table |
| $a1 = flags | |||
| $a2 = mode | |||
| read from file | 14 | $a0 = file descriptor | $v0 contains number of characters read (0 if end-of-file, negative if error). See note below table |
| $a1 = address of input buffer | |||
| $a2 = maximum number of characters to read | |||
| write to file | 15 | $a0 = file descriptor | $v0 contains number of characters written (negative if error). See note below table |
| $a1 = address of output buffer | |||
| $a2 = number of characters to write | |||
| close file | 16 | $a0 = file descriptor | |
| exit2 (terminate with value) | 17 | $a0 = termination result | See note below table |
| Services 1 through 17 are compatible with the SPIM simulator, other than Open File (13) as described in the Notes below the table. Services 30 and higher are exclusive to MARS. | |||
| time (system time) | 30 | $a0 = low order 32 bits of system time | |
| $a1 = high order 32 bits of system time. See note below table | |||
| MIDI out | 31 | $a0 = pitch (0-127) | Generate tone and return immediately. See note below table |
| $a1 = duration in milliseconds | |||
| $a2 = instrument (0-127) | |||
| $a3 = volume (0-127) | |||
| sleep | 32 | $a0 = the length of time to sleep in milliseconds. | Causes the MARS Java thread to sleep for (at least) the specified number of milliseconds. This timing will not be precise, as the Java implementation will add some overhead. |
| MIDI out synchronous | 33 | $a0 = pitch (0-127) | Generate tone and return upon tone completion. See note below table |
| $a1 = duration in milliseconds | |||
| $a2 = instrument (0-127) | |||
| $a3 = volume (0-127) | |||
| print integer in hexadecimal | 34 | $a0 = integer to print | Displayed value is 8 hexadecimal digits, left-padding with zeroes if necessary. |
| print integer in binary | 35 | $a0 = integer to print | Displayed value is 32 bits, left-padding with zeroes if necessary. |
| print integer as unsigned | 36 | $a0 = integer to print | Displayed as unsigned decimal value. |
| (not used) | 37-39 | ||
| set seed | 40 | $a0 = i.d. of pseudorandom number generator (any int). | No values are returned. Sets the seed of the corresponding underlying Java pseudorandom number generator (java.util.Random). See note below table |
| $a1 = seed for corresponding pseudorandom number generator. | |||
| random int | 41 | $a0 = i.d. of pseudorandom number generator (any int). | $a0 contains the next pseudorandom, uniformly distributed int value from this random number generator's sequence. See note below table |
| random int range | 42 | $a0 = i.d. of pseudorandom number generator (any int). | $a0 contains pseudorandom, uniformly distributed int value in the range 0 <= [int] < [upper bound], drawn from this random number generator's sequence. See note below table |
| $a1 = upper bound of range of returned values. | |||
| random float | 43 | $a0 = i.d. of pseudorandom number generator (any int). | $f0 contains the next pseudorandom, uniformly distributed float value in the range 0.0 <= f < 1.0 from this random number generator's sequence. See note below table |
| random double | 44 | $a0 = i.d. of pseudorandom number generator (any int). | $f0 contains the next pseudorandom, uniformly distributed double value in the range 0.0 <= f < 1.0 from this random number generator's sequence. See note below table |
| (not used) | 45-49 | ||
| ConfirmDialog | 50 | $a0 = address of null-terminated string that is the message to user | $a0 contains value of user-chosen option |
| 0: Yes | |||
| 1: No | |||
| 2: Cancel | |||
| InputDialogInt | 51 | $a0 = address of null-terminated string that is the message to user | $a0 contains int read |
| $a1 contains status value | |||
| 0: OK status | |||
| -1: input data cannot be correctly parsed | |||
| -2: Cancel was chosen | |||
| -3: OK was chosen but no data had been input into field | |||
| InputDialogFloat | 52 | $a0 = address of null-terminated string that is the message to user | $f0 contains float read |
| $a1 contains status value | |||
| 0: OK status | |||
| -1: input data cannot be correctly parsed | |||
| -2: Cancel was chosen | |||
| -3: OK was chosen but no data had been input into field | |||
| InputDialogDouble | 53 | $a0 = address of null-terminated string that is the message to user | $f0 contains double read |
| $a1 contains status value | |||
| 0: OK status | |||
| -1: input data cannot be correctly parsed | |||
| -2: Cancel was chosen | |||
| -3: OK was chosen but no data had been input into field | |||
| InputDialogString | 54 | $a0 = address of null-terminated string that is the message to user | See Service 8 note below table |
| $a1 = address of input buffer | $a1 contains status value | ||
| $a2 = maximum number of characters to read | 0: OK status. Buffer contains the input string. | ||
| -2: Cancel was chosen. No change to buffer. | |||
| -3: OK was chosen but no data had been input into field. No change to buffer. | |||
| -4: length of the input string exceeded the specified maximum. Buffer contains the maximum allowable input string plus a terminating null. | |||
| MessageDialog | 55 | $a0 = address of null-terminated string that is the message to user | N/A |
| $a1 = the type of message to be displayed: | |||
| 0: error message, indicated by Error icon | |||
| 1: information message, indicated by Information icon | |||
| 2: warning message, indicated by Warning icon | |||
| 3: question message, indicated by Question icon | |||
| other: plain message (no icon displayed) | |||
| MessageDialogInt | 56 | $a0 = address of null-terminated string that is an information-type message to user | N/A |
| $a1 = int value to display in string form after the first string | |||
| MessageDialogFloat | 57 | $a0 = address of null-terminated string that is an information-type message to user | N/A |
| $f12 = float value to display in string form after the first string | |||
| MessageDialogDouble | 58 | $a0 = address of null-terminated string that is an information-type message to user | N/A |
| $f12 = double value to display in string form after the first string | |||
| MessageDialogString | 59 | $a0 = address of null-terminated string that is an information-type message to user | N/A |
| $a1 = address of null-terminated string to display after the first string |
MIPT-V / MIPT-MIPS — Cycle-accurate pre-silicon simulation.