1000 ;-----------------------------
1010 ; BRANCH OFFSET CALCULATOR
1020 ;-----------------------------
1030         .OR $0280
1040 ;-----------------------------
1050 STL     .EQ $26
1060 STH     .EQ $27
1070 L       .EQ $28
1080 H       .EQ $29
1090 YSAV    .EQ $2A
1100 CR      .EQ $8D
1110 IN      .EQ $0200,$027F
1120 GETLINE .EQ $FF1A
1130 PRBYTE  .EQ $FFDC
1140 ECHO    .EQ $FFEF
1150 ;-----------------------------
1160 START
1170    LDA #0    CLEAR TEMP RESULT
1180    STA L
1190    STA H
1200    LDA #CR
1210    JSR ECHO
1220 ;
1230    JSR CONVERT
1240    LDA L     SAVE ORIGIN +2
1250    ADC #2-1  (CY=1!)
1260    STA STL
1270    LDA H
1280    ADC #0
1290    STA STH
1300    STX L     CLEAR TEMP RESULT
1310    STX H     X=0 AFTER CONVERT
1320 ;
1330    LDA IN,Y
1340    CMP #"."
1350    BNE .3    FORMAT ERROR!
1360 ;
1370    JSR CONVERT
1380    LDA L
1390    SBC STL
1400    TAY       SAVE OFFSET
1410    LDA H
1420    SBC STH
1430    TAX
1440    TYA       POS OR NEG?
1450    BPL .1    POS!
1460    INX
1470 .1
1480    TXA       H SHOULD BE 0
1490    BNE .4    RANGE ERROR!
1500 ;
1510    LDA #"="
1520    JSR ECHO
1530    TYA       PRINT RESULT
1540    JSR PRBYTE
1550 .2
1560    LDA #CR
1570    JSR ECHO
1580 .3
1590    JMP GETLINE
1600 ;
1610 .4
1620    LDA #">"  RANGE ERROR
1630    JSR ECHO
1640    BPL .2    ALWAYS TAKEN!
1650 ;-----------------------------
1660 CONVERT
1670    INY
1680    STY YSAV
1690 .1
1700    LDA IN,Y
1710    EOR #"0"
1720    CMP #9+1
1730    BCC .2    DIGIT 0..9!
1740    ADC #$88
1750    CMP #$FA
1760    BCC .4    END OF HEX!
1770 .2
1780    ASL
1790    ASL
1800    ASL
1810    ASL
1820    LDX #4
1830 .3
1840    ASL
1850    ROL L
1860    ROL H
1870    DEX
1880    BNE .3    DO ALL 4 BITS!
1890    INY
1900    BNE .1    ALWAYS!
1910 .4
1920    CPY YSAV
1930    BEQ .5    NO HEX GIVEN!
1940    RTS       X=0 CY=1
1950 .5
1960    JMP GETLINE