ALWAYS 26MAR4 OFFSET ;26MAR4 .MCALL DIR$,CALLR ;**-1 ;************************************************************************ ;* * ;* MODULE: OFFSET - ASSIGN A VALUE TO OFFST * ;* * ;* AUTHOR: KEVIN ANGLEY * ;* * ;* DATE: 20-JUL-82 * ;* * ;* INPUT PARAMETERS: * ;* * ;* R0 POINTS TO THE COMMAND LINE IN PROCESS * ;* * ;* OUTPUT PARAMETERS: * ;* * ;* R0 POINTS JUST BEYOND THE LAST CHARACTER OF THE OFFSET * ;* * ;* DESTROYS: R1,R2,R3,R4,R5 * ;* * ;* IF NO VALUE IS SPECIFIED, THE OFFSET VALUE IS DISPLAYED. * ;* * ;* REVISED BY: CHRIS DORAN, SIRA LTD. * ;* * ;* DATE: JAN-84 * ;* * ;* MODIFICATIONS: * ;* Put BOS and OFF messages, only used here, into this * ;* module, for overlaid code. * ;* Comment out currently unused OFFSTA entry code. * ;* * ;* 26MAR4 Scott Smith, Telex Computer Products, Raleigh, NC * ;26MAR4 ;* Uncommented OFFSTA code. * ;26MAR4 ;* * ;26MAR4 ;************************************************************************ .ENABL LSB OFFSTA:: ; AUTO-OFFSET ENTRY POINT ;26MAR4 ; PROGRAM GENERATED CALL TO SET OFFSET ;26MAR4 ; TO 24-BIT MODE, AND TO VALUE IN R3/R4 ;26MAR4 MOV R3,OFFST ; ESTABLISH NEW OFFSET ;26MAR4 MOV R4,OFFST+2 ;26MAR4 PUSH #24. ; INDICATE PROGRAM GENERATED (@SP <> 0) ;26MAR4 MOV @SP,MODE ; FORCE 24-BIT MODE ;26MAR4 BR 10$ ; GO DISPLAY NEW OFFSET ;26MAR4 OFFSET:: ;**-9 CLR -(SP) ; INDICATE NORMAL ENTRY ;26MAR4 TSTB (R0) ; VALUE SPECIFIED? ;**-1 BEQ 10$ ; NO - JUST OUTPUT THE VALUE MOV R0,R2 ; PUT CURRENT CHARACTER POINTER IN R2 MOV MODE,R5 ; SAVE OLD MODE IN R5 1$: TSTB (R2)+ ; FIND THE ASCIZ TERMINATOR BNE 1$ ; NE: HAVEN'T FOUND IT YET DEC R2 ; R2 POINTS TO LAST CHARACTER IN OFFSET SUB R0,R2 ; MAKE R2 CONTAIN NUMBER OF HEX DIGITS MOV #16.,MODE ; ASSUME 16 BIT MODE CMP #4.,R2 ; DID USER GIVE US 4 HEX DIGITS (16 BITS)? BEQ 4$ ; EQ: YES, ASSUMPTION IS CORRECT MOV #24.,MODE ; ASSUME 24 BIT MODE CMP #6.,R2 ; DID USER GIVE US 6 HEX DIGITS (24 BITS)? BEQ 4$ ; EQ: YES, ASSUMPTION IS CORRECT MOV #32.,MODE ; ASSUME 32 BIT MODE CMP #8.,R2 ; DID USER GIVE US 8 HEX DIGITS (32 BITS)? BEQ 4$ ; EQ: YES, ASSUMPTION IS CORRECT OUTPUT ; "OFFSET MUST BE 16, 24, OR 32-BIT VALUE" BR 250$ ; TAKE ERROR EXIT 4$: CALL GETHXL ; GET A HEX VALUE FROM COMMAND LINE ; R1 (LOW WORD) ; R2 (HIGH WORD) BCS 250$ ; CS: ERROR BIT #1,R1 ; IS OFFSET SPECIFIED ODD? BEQ 5$ ; EQ: NO OUTPUT EVO ; SHOW ERROR MESSAGE - OFFSET MUST BE EVEN BR 250$ ; TAKE ERROR EXIT 5$: MOV R1,OFFST ; ESTABLISH NEW OFFSET VALUE MOV R2,OFFST+2 10$: PUSH R0 ; SAVE COMMAND STRING POINTER PUSH R1 ; SAVE R1 MOV OFFST,R1 ; PREPARE FOR CONVERSION MOV OFFST+2,R2 MOV #OFF+OFFLEN-8.,R0 ; PUT INTO MESSAGE CALL PUTHXJ ; CONVERT TO HEX - PUT IN MESSAGE OUTPUT OFF POP R1 ; RESTORE R1 POP R0 ; RESTORE COMMAND STRING POINTER BR 253$ ; TAKE SUCCESS EXIT 250$: ; ERROR EXIT MOV R5,MODE ; RESTORE OLD MODE SEC ; Set carry 253$: MOV @SP,(SP)+ ; IS THIS A PROGRAM GENERATED OFFSET CALL? ;26MAR4 BNE 255$ ; NE: YES, DON'T PURGE EXTRA COMMAND LINE ;**-1 CALLR EXTRA ; PURGE COMMAND LINE OF SUPERFLUOUS JUNK 255$: RETURN ; AND RETURN .PSECT PURE RO,D DEFM BOS DEFM EVO .EVEN .PSECT DATA RW,D DEFM OFF .EVEN .END