/* This C language subroutine provides an interface to the input flags of the ADSP-21020. The Run Time Library for the C Language. Gordon A. Sterling (617) 461 - 3076 DSP Development Tools Engineering Created on 01/07/91 Updated on 5/94 by AS The function returns 0 for modes [0,4], and the flag value (0 or 1) for any other mode. An invalid flag will result in a -1 return value. #include <21020.h>
int set_flag(int flag, int mode); flag = { 0, 1, 2, 3 } mode = { 0 = set flag 1 = clr flag 2 = toggle flag 3 = read flag value } */ #include "lib_glob.h" #include "020_glob.h" .SEGMENT/CODE Code_Space_Name; .FILE RTL_FILENAME; .GLOBAL _set_flag; _set_flag: R4=PASS R4, R0=dm_0; /*Test for flag 0, return 0*/ IF EQ JUMP (PC, flg0); R4=R4-1; IF EQ JUMP (PC, flg1); R4=R4-1; IF EQ JUMP (PC, flg2); R4=R4-1; IF EQ JUMP (PC, flg3); error_return: R0=-1; /*Error return*/ JUMP (PC, restore_state); flg0: BIT SET MODE2 0x00008000; /*Set flag to output*/ R8=PASS R8; /*Zero means set flag*/ IF NE JUMP (PC, tst_clr_flg0); BIT SET ASTAT 0x00080000; JUMP (PC, restore_state); tst_clr_flg0: R8=R8-1; IF NE JUMP (PC, tst_tgl_flg0); BIT CLR ASTAT 0x00080000; JUMP (PC, restore_state); tst_tgl_flg0: R8=R8-1; IF NE JUMP (PC, tst_flg0); BIT TGL ASTAT 0x00080000; JUMP (PC, restore_state); tst_flg0: JUMP (PC, restore_state) (DB); BIT TST ASTAT 0x00080000; IF TF R0=R0+1; flg1: BIT SET MODE2 0x00010000; R8=PASS R8; /*Zero means set flag*/ IF NE JUMP (PC, tst_clr_flg1); BIT SET ASTAT 0x00100000; JUMP (PC, restore_state); tst_clr_flg1: R8=R8-1; IF NE JUMP (PC, tst_tgl_flg1); BIT CLR ASTAT 0x00100000; JUMP (PC, restore_state); tst_tgl_flg1: R8=R8-1; IF NE JUMP (PC, tst_flg1); BIT TGL ASTAT 0x00100000; JUMP (PC, restore_state); tst_flg1: JUMP (PC, restore_state) (DB); BIT TST ASTAT 0x00100000; IF TF R0=R0+1; flg2: BIT SET MODE2 0x00020000; R8=PASS R8; /*Zero means set flag*/ IF NE JUMP (PC, tst_clr_flg2); BIT SET ASTAT 0x00200000; JUMP (PC, restore_state); tst_clr_flg2: R8=R8-1; IF NE JUMP (PC, tst_tgl_flg2); BIT CLR ASTAT 0x00200000; JUMP (PC, restore_state); tst_tgl_flg2: R8=R8-1; IF NE JUMP (PC, tst_flg2); BIT TGL ASTAT 0x00200000; JUMP (PC, restore_state); tst_flg2: JUMP (PC, restore_state) (DB); BIT TST ASTAT 0x00200000; IF TF R0=R0+1; flg3: BIT SET MODE2 0x00040000; R8=PASS R8; /*Zero means set flag*/ IF NE JUMP (PC, tst_clr_flg3); BIT SET ASTAT 0x00400000; JUMP (PC, restore_state); tst_clr_flg3: R8=R8-1; IF NE JUMP (PC, tst_tgl_flg3); BIT CLR ASTAT 0x00400000; JUMP (PC, restore_state); tst_tgl_flg3: R8=R8-1; IF NE JUMP (PC, tst_flg3); BIT TGL ASTAT 0x00400000; JUMP (PC, restore_state); tst_flg3: JUMP (PC, restore_state) (DB); BIT TST ASTAT 0x00400000; IF TF R0=R0+1; restore_state: FETCH_RETURN RETURN (DB); RESTORE_STACK RESTORE_FRAME .ENDSEG;