00001 *************************
00002 *
00003 * XJUMP2.ASM
00004 * MDJ 09-21-90
00005 *
00006 * GRAPHICS SUBROUTINES
00007 * SET TWO
00008 *
00009 *************************
00010 *
00011 * U AND S STACKS MUST
00012 * ALREADY BE INITIALIZED
00013 *
00014 *************************
00015 *
00016 * REF. PAGES A67, A87,
00017 * A80, A81, AND A82
00018 * COLOR BASIC UNRAVELLED
00019 *
00020 *************************
00021 *
00022 VALTYP  EQU     6       TYPE FLAG
00023 FPA0    EQU     $50     FLOATING POINT ACCUM. #0 MANTISSA
00024 FP0EXP  EQU     $4F     FLOATING POINT ACCUM. #0 EXPONENT
00025 ZERO    EQU     $8A     BYTES $8A AND $8B ALWAYS ZERO
00026 FPSBYT  EQU     $63     FLOATING POINT SUB-BYTE
00027 FP0SGN  EQU     $54     FLOATING POINT ACCUM. #0 SIGN
00028         ORG     $3A87
00029 XJUMP2  CLRA            CLEAR MOST SIGNIFICANT BYTE ACCD
00030         CLR     VALTYP  SET NUMERIC VARIABLE TYPE
00031         STD     FPA0    SAVE ACCD IN TOP OF FPA0
00032         LDB     #$90    SET EXPONENT IF INTEGER
00033         LDA     FPA0    GET MOST SIGNIF. BYTE OF MANTISSA
00034         SUBA    #$80    SET CARRY IF POSITIVE
00035         STB     FP0EXP  SAVE EXPONENT
00036         LDD     ZERO    CLEAR ACCD
00037         STD     FPA0+2  CLEAR BOTTOM HALF OF FPA0
00038         STA     FPSBYT  CLEAR SUB-BYTE
00039         STA     FP0SGN  CLEAR SIGN
00040         BCS     XJMP2A  BRANCH IF POSITIVE MANTISSA
00041         BSR     XJMP2I  NEGATE FPA0 MANTISSA
00042 XJMP2A  CLRB            CLEAR TEMPORARY EXPONENT ACCUM.
00043 XJMP2B  LDA     FPA0    TEST MSB OF MANTISSA
00044         BNE     XJMP2E
00045         LDA     FPA0+1  SHIFT MANTISSA
00046         STA     FPA0
00047         LDA     FPA0+2
00048         STA     FPA0+1
00049         LDA     FPA0+3
00050         STA     FPA0+2
00051         LDA     FPSBYT
00052         STA     FPA0+3
00053         CLR     FPSBYT
00054         ADDB    #8      ADJUST EXPONENT FOR SHIFT
00055         CMPB    #5*8    FIVE SHIFTS?
00056         BLT     XJMP2B  GO IF NO
00057 XJMP2C  CLRA
00058         STA     FP0EXP  CLEAR THE EXPONENT
 
 
 
 
 
 
 
 
00059         STA     FP0SGN  CLEAR THE SIGN
00060         RTS
00061 XJMP2V  RMB     1
00062 XJMP2D  INCB            ADD ONE TO EXPONENT ACCUMULATOR
00063         ASL     FPSBYT  SHIFT LEFT
00064         ROL     FPA0+3
00065         ROL     FPA0+2
00066         ROL     FPA0+1
00067         ROL     FPA0
00068 XJMP2E  BPL     XJMP2D  BRANCH IF NOT YET NORMALIZED
00069         LDA     FP0EXP  GET CURRENT EXPONENT
00070         STB     XJMP2V  TEMPORARILY SAVE IT
00071         SUBA    XJMP2V  SUBTRACT FROM EXPONENT MODIFIER
00072         STA     FP0EXP  SAVE AS NEW EXPONENT
00073         BLS     XJMP2C  GO IF EXCESS LEFT SHIFTS
00074         FCB     $8C     SKIP TWO BYTES
00075         BCS     XJMP2F  BRANCH IF MANTISSA OVERFLOW
00076         ASL     FPSBYT  USE SUB-BYTE AS ROUND-OFF FLAG
00077         LDA     #0      CLEAR ACCA WITHOUT CHANGING CARRY
00078         STA     FPSBYT  CLEAR THE SUB-BYTE
00079         BRA     XJMP2G  GO ROUND-OFF THE RESULT
00080 XJMP2F  INC     FP0EXP  INCREMENT EXPONENT (MUL BY 2)
00081         ROR     FPA0
00082         ROR     FPA0+1  SHIFT RIGHT
00083         ROR     FPA0+2
00084         ROR     FPA0+3
00085 XJMP2G  BCC     XJMP2H  BRANCH IF NO ROUND-OFF NEEDED
00086         BSR     XJMP2J  ADD ONE TO MANTISSA & ROUND-OFF
00087         BEQ     XJMP2F  BRANCH IF OVERFLOW
00088 XJMP2H  RTS
00089 XJMP2I  COM     FP0SGN  COMPLEMENT MANTISSA
00090         COM     FPA0
00091         COM     FPA0+1
00092         COM     FPA0+2
00093         COM     FPA0+3
00094 XJMP2J  LDX     FPA0+2  ADD ONE TO MANTISSA
00095         LEAX    1,X
00096         STX     FPA0+2
00097         BNE     XJMP2K  BRANCH IF NO OVERFLOW
00098         LDX     FPA0
00099         LEAX    1,X
00100         STX     FPA0
00101 XJMP2K  RTS
00102         END
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
