.TITLE CVSL2 ;.MACRO CVSL2 S,L ;CONVERTS STRING S TO LONG INTEGER, USING BASE 2 .GLOBL .CVSL2 .MCALL .TLQ CVL2: .BLKW 2 ;LONG INTEGER L STR2: .BLKW 1 ;ADDRESS OF STRING S .CVSL2: MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV STR2,R2 ;POINTER TO STRING CLR R0 ;R0 AND R1 HOLD THE LONG INTEGER CLR R1 CMPB (R2),#55 ;SKIP A POSSIBLE MINUS SIGN NOW BNE LOOPL2 INC R2 LOOPL2: MOVB (R2)+,R3 BEQ END2 ;END OF STRING? ASHC #1,R0 BCS ERR2 ;OVERFLOW OFF LEFT END OF R0? CMPB R3,#'0 ;ONLY A ZERO OR ONE DIGIT IS LEGAL BLT ERR2 CMPB R3,#'1 BGT ERR2 SUB #60,R3 ;CONVERT FROM ASCII TO A BINARY NUMBER ADD R3,R1 BR LOOPL2 END2: CMPB @STR2,#55 ;WAS THERE A MINUS SIGN? BNE STORE2 COM R1 ;NEGATE COM R0 ADD #1,R1 ADC R0 STORE2: MOV R0,CVL2 MOV R1,CVL2+2 CLC ;C-BIT CLEAR INDICATES CONVERSION WAS OKAY BR BYE2 ERR2: .TLQ SEC ;C-BIT SET INDICATES ERROR BYE2: MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 RETURN .END