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