; ENTER ; CALL INIT(FDB) ; FDB A BYTE ARRAY CONTAINING 128 LOCATIONS. ; ; EXIT ; MOST OF THE ARRAY IS SET TO ZERO. ; THE F.BKST FIELD IS INITIALIZED SO THAT THE ADDRESS OF THE ; I/O STATUS BLOCK IS FOUND IN BYTES 124-128 OF THE FDB ARRAY. ; .TITLE INIT - INITIALIZE AN FDB .IDENT /V01/ .GLOBL INIT EF: .WORD 0 .WORD 0 INIT: MOV R5,EF ;SAVE INC EF+2 ;INCREMENT NBR OF TIMES CALLED TST (R5)+ ;BY PASS THE NBR OF ARGUMENTS MOV (R5)+,R0 ;LOAD ADDRESS OF FDB JSR PC,CLRFDB ;CLEAR THE FDB JSR PC,FDBPTR ;INITITALIZE A FEW POINTERS IN THE FDB RTS PC ; ENTER ; R0 CONTAINS THE ADDRESS OF THE FDB ; EXIT ; THE 128 BYTE FDB IS ZET TO ALL ZEROES. ; FDBLTH=128. ;LENGTH OF THE FDB ; CLRFDB: MOV R0,-(SP) ;SAVE R0 MOV R1,-(SP) ;SAVE R1 MOV #FDBLTH,R1 ;LOAD LENGTH OF FDB 1$: CLRB (R0)+ ;CLEAR A BYTE IN THE FDB SOB R1,1$ ;LOOP UNTIL ALL LOCATIONS ARE CLEARED MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R0 ;RESTORE R0 RTS PC ; ENTER ; R0 CONTAINS THE FDB ADDRESS ; EXIT ; THE EVENT FLAG IS SET TO A DEFAULT VALUE OF 32. ; A 2 WORD I/O STATUS BLOCK IS PLACED IN BYTES 124-128 OF ; THE FDB. ; THE ADDRESS OF THIS I/O STATUS BLOCK IS PLACED IN THE ; "F.BKST" OFFSET OF THE FDB. ; IOSTAT = 124. FDBPTR: MOV R1,-(SP) ;SAVE R1 MOV #32.,F.BKEF(R0) ;SET THE EVENT FLAG TO A DEFALT ;VALUE OF 32. MOV #IOSTAT,R1 ;LOAD OFFSET OF I/O STATUS BLOCK ;THAT WE ARE GOING TO CREATE IN THE FDB. ADD R0,R1 ;ADD FDB ADDRESS TO OFFSET TO ;PRODUCE THE IO STATUS BLOCK ADDRESS MOV R1,F.BKST(R0) ;STORE IN THE FDB MOV (SP)+,R1 ;RESTORE R1 RTS PC .END