#ifndef MIPSY_H #define MIPSY_H /* * constants * (copied from 'breakcode.h') */ /* program termination */ #define BREAK_PROGRAM_EXIT 0x1 /* read data */ #define BREAK_READ_INT 0x11 #define BREAK_READ_CHAR 0x12 #define BREAK_READ_STRING 0x13 /* print data */ #define BREAK_PRINT_INT 0x21 #define BREAK_PRINT_CHAR 0x22 #define BREAK_PRINT_STRING 0x23 /* * macros */ /* program termination */ #define EXIT(v) \ asm volatile ("li $2,%0; move $4,%1; break" \ : : "i" (BREAK_PROGRAM_EXIT), "r" (v): "2", "4") /* read data */ #define READ_INT(v) \ asm volatile ("li $2,%1; break; move %0,$2" \ : "=r" (v) : "i" (BREAK_READ_INT) : "2") #define READ_CHAR(v) \ asm volatile ("li $2,%1; break; move %0,$2" \ : "=r" (v) : "i" (BREAK_READ_CHAR) : "2") #define READ_STRING(v) \ asm volatile ("li $2,%0; move $4,%1; break" \ : : "i" (BREAK_READ_STRING), "r" (v) : "2", "4") /* print data */ #define PRINT_INT(v) \ asm volatile ("li $2,%0; move $4,%1; break" \ : : "i" (BREAK_PRINT_INT), "r" (v) : "2", "4") #define PRINT_CHAR(v) \ asm volatile ("li $2,%0; move $4,%1; break" \ : : "i" (BREAK_PRINT_CHAR), "r" (v) : "2", "4") #define PRINT_STRING(v) \ asm volatile ("li $2,%0; move $4,%1; break" \ : : "i" (BREAK_PRINT_STRING), "r" (v) : "2", "4") #endif /* MIPSY_H */