home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Antic Magazine 1988 August
/
Antic_Magazine_1988_08_Antic.atr
/
numprint.m65
< prev
next >
Wrap
Text File
|
2023-02-26
|
6KB
|
1 lines
0100 ;PRINT-USR (NUMPRINT.M65)¢0140 ; BY MARC ESCOLA¢0150 ;(c)1988, ANTIC PUBLISHING¢0170 ;¢0180 VVTP = $86¢0190 STMCUR = $8A¢0200 FR0 = $D4¢0210 FILL1 = $D4¢0220 FILL2 = $D5¢0230 VADR = $CB¢0240 SADR = $CD¢0250 LEN = $CF¢0260 LBUFF = $057F¢0270 ASROT = $D8E6¢0280 FPROT = $D9AA¢0290 ;¢0300 ; BASIC CALL:¢0310 ;¢0320 ; X=USR(1536,ADR(STR$),LEN(STR$))¢0330 ;¢0340 *= 1536¢0350 ;¢0360 ; GET STRING ADDRESS FROM STACK¢0370 ;¢0380 PLA ;PULL ARGS COUNT¢0390 PLA ;HIGH BYTE STR¢0400 STA SADR+1¢0410 PLA ;LOW BYTE STR¢0420 STA SADR¢0430 PLA ;IGNORE LEN HIGH¢0440 PLA ;LOW BYTE LEN¢0450 STA LEN ;SAVE IN LEN¢0460 DEC LEN ;RELATIVE TO ZERO¢0470 ;¢0480 ; FIND TOKEN IN BASIC LINE¢0490 ;¢0500 LDY #2¢0510 SEARCH¢0520 LDA (STMCUR),Y¢0530 EQUAL¢0540 CMP #$2D ;EQUAL SIGN¢0550 BEQ USER ;CHECK FOR USR¢0560 INY ¢0570 BPL SEARCH ;TRY NEXT¢0571 ;¢0580 USER¢0590 INY ¢0600 LDA (STMCUR),Y¢0610 CMP #$3F ;USR TOKEN¢0620 BNE EQUAL ;START OVER¢0621 ;¢0630 TOKEN¢0640 DEY ;POINT TO¢0650 DEY ;TOKEN¢0660 LDA (STMCUR),Y¢0670 AND #$7F ;MASK HIGH BIT¢0680 LDY #0 ;CLEAR HIGH ADR¢0690 STY VADR+1¢0700 ASL A¢0710 ASL A ;MULT BY 8¢0720 ROL VADR+1¢0730 ASL A¢0740 ROL VADR+1¢0750 CLC ;THEN¢0760 ADC VVTP ;ADD VVTP VALUE¢0770 STA VADR ;TO FORM¢0780 LDA VVTP+1 ;ENTRY¢0790 ADC VADR+1 ;ADDRESS¢0800 STA VADR+1¢0810 ;¢0820 ; MOVE TOKEN VALUE TO FR0¢0830 ;¢0840 LDX #7 ;MOVE 8 BYTES¢0850 LDY #9 ;POINT PAST TYPE¢0860 VALUE¢0870 LDA (VADR),Y¢0880 STA FR0,X¢0890 DEY ¢0900 DEX ¢0910 BPL VALUE ;NEXT BYTE¢0911 ;¢0920 LDA #'0 ;SET LBUFF ZERO¢0930 STA LBUFF¢0940 JSR ASROT ;CONVERT TO ASCII¢0950 ZCHECK¢0960 LDA LBUFF ;CHECK FOR¢0970 CMP #'0 ;LEADING ZERO¢0980 BNE CHECK ;NO, CHECK FILL¢0990 ;¢1000 ; SHIFT NUMBER LEFT ONE BYTE¢1010 ;¢1020 LDX #0¢1030 LDY #1¢1040 SHIFT¢1050 LDA LBUFF,Y¢1060 STA LBUFF,X¢1070 INY ¢1080 INX ¢1090 CMP #127 ;REACHED END?¢1100 BMI SHIFT ;NO.¢1101 ;¢1110 BPL ZCHECK¢1120 ;¢1130 ; CHECK FOR FILL CHARACTER¢1140 ;¢1150 CHECK¢1160 LDA #$20 ;USE BLANK¢1170 STA FILL1 ;AS DEFAULT¢1180 STA FILL2 ;FILL CHAR¢1190 LDY #1¢1200 LDA (SADR),Y¢1210 CMP #'$ ;FLOAT DOLLAR¢1220 BEQ FLOAT¢1221 ;¢1230 CMP #'* ;FLOAT ASTRIK¢1240 BEQ FLOAT¢1241 ;¢1250 BNE NOFLOAT ;USE DEFAULT¢1251 ;¢1260 FLOAT¢1270 STA FILL1¢1280 LDA #'X¢1290 STA (SADR),Y ;REPLACE IT¢1300 NOFLOAT¢1310 DEY ¢1320 LDA (SADR),Y¢1330 CMP #'X ;FIRST AN X?¢1340 BEQ NOTFIL ;USE DEFAULT¢1341 ;¢1350 STA FILL2¢1360 LDA #'X¢1370 STA (SADR),Y ;REPLACE IT¢1380 NOTFIL¢1390 ;¢1400 ; CHECK STRING FOR ENDING¢1410 ; INTEGER POSITION¢1420 ;¢1430 LDY LEN ;LAST BYTE¢1440 STRDEC¢1450 LDA (SADR),Y¢1460 CMP #'.¢1470 BEQ SFINISH ;FOUND IT¢1471 ;¢1480 DEY ¢1490 BPL STRDEC¢1491 ;¢1500 LDY LEN ;NO DEC POS¢1510 BPL SDONE¢1511 ;¢1520 SFINISH¢1530 DEY ;WAS POS ZERO?¢1540 BPL SDONE ;NO¢1541 ;¢1550 INY ;YES¢1560 SDONE¢1570 ;¢1580 ; CHECK NUMBER FOR ENDING¢1590 ; INTEGER POSITION¢1600 ;¢1610 LDX #0¢1620 NUMDEC¢1630 LDA LBUFF,X¢1640 BMI NDONE¢1641 ;¢1650 CMP #'.¢1660 BEQ NFINISH¢1661 ;¢1670 INX ¢1680 BPL NUMDEC¢1681 ;¢1690 NFINISH¢1700 DEX ;WAS POS ZERO?¢1710 BMI INTFILL ;YES, FILL IT¢1711 ;¢1720 NDONE¢1730 ;¢1740 ; THIS ROUTINE MOVES THE¢1750 ; INTEGERS TO THE STRING¢1760 ;¢1770 MOVELEFT¢1780 LDA LBUFF,X ;CHECK FOR NEG¢1790 CMP #'-¢1800 BNE NOTNEG¢1801 ;¢1810 LDX #0 ;FORCE END¢1820 BEQ PLUS ;GO PUT NEQ¢1821 ;¢1830 NOTNEG¢1840 LDA (SADR),Y ;CHECK POS¢1850 CMP #'X ;PUT HERE?¢1860 BEQ PUTINT ;YES¢1861 ;¢1870 DEY ;TRY NEXT¢1880 BMI INTEND ;STRING FULL¢1881 ;¢1890 BPL MOVELEFT¢1891 ;¢1900 PUTINT¢1910 LDA LBUFF,X¢1920 BPL PLUS¢1921 ;¢1930 AND #$7F ;MASK HIGH BIT¢1940 PLUS¢1950 STA (SADR),Y ;STORE IT¢1960 DEY ¢1970 BMI INTEND¢1971 ;¢1980 DEX ¢1990 BPL MOVELEFT¢1991 ;¢2000 INTFILL¢2010 LDA FILL1 ;USE FLOAT¢2020 STA (SADR),Y¢2030 LDA FILL2 ;USE FILL¢2040 STA FILL1¢2050 DEY ¢2060 BPL INTFILL ;FILL IT UP¢2061 ;¢2070 INTEND¢2080 ;¢2090 ; CHECK STRING FOR FRACTIONS¢2100 ;¢2110 LDY LEN¢2120 STRFRAC¢2130 LDA (SADR),Y¢2140 CMP #'. ;IS THIS IT?¢2150 BEQ SFOUND ;YES¢2151 ;¢2160 DEY ¢2170 BPL STRFRAC ;CHECK NEXT BYTE¢2171 ;¢2180 BMI EOJ ;NO FRACS EXIT¢2181 ;¢2190 SFOUND¢2200 INY ;POINT ONE BEYOND¢2210 ;¢2220 ; CHECK NUMBER FOR FRACTIONS¢2230 ;¢2240 LDX #0¢2250 NUMFRAC¢2260 LDA LBUFF,X¢2270 BMI ZFILL ;ZERO FILL REST¢2271 ;¢2280 CMP #'.¢2290 BEQ MOVERITE¢2291 ;¢2300 INX ¢2310 BPL NUMFRAC ;CHECK NEXT BYTE¢2311 ;¢2320 MOVERITE¢2330 INX ¢2340 LDA LBUFF,X¢2350 BMI DLAST ;LAST DECIMAL¢2351 ;¢2360 STA (SADR),Y¢2370 INY ¢2380 CPY LEN ;CHECK FOR END¢2390 BEQ MOVERITE ;ZERO CONTINUE¢2391 ;¢2400 BMI MOVERITE ;LESS THAN CONT¢2401 ;¢2410 BPL EOJ ;ALL DONE EXIT¢2411 ;¢2420 DLAST¢2430 AND #$7F ;MASK HIGH BIT¢2440 STA (SADR),Y¢2450 INY ¢2460 ZFILL¢2470 CPY LEN¢2480 BEQ ZNEXT ;ZERO CONTINUE¢2481 ;¢2490 BMI ZNEXT ;LESS THAN CONT¢2491 ;¢2500 BPL EOJ ;ALL DONE¢2501 ;¢2510 ZNEXT¢2520 LDA #'0¢2530 STA (SADR),Y¢2540 INY ¢2550 BPL ZFILL¢2551 ;¢2560 EOJ¢2570 RTS ¢əəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəəə