00000000: 2A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |*---------------|
00000010: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------|
00000020: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 2A A0 73 55 42 |----------.*.sUB|
00000030: 52 4F 55 54 49 4E 45 A0 54 4F A0 50 52 49 4E 54 |ROUTINE.TO.PRINT|
00000040: A0 61 2C 78 A0 49 4E A0 44 45 43 49 4D 41 4C 2E |.a,x.IN.DECIMAL.|
00000050: 0D 2A A0 75 53 45 53 A0 4C 4F 43 41 54 49 4F 4E |.*.uSES.LOCATION|
00000060: 53 A0 6E 6C 2C A0 6E 68 2C A0 6E 66 6C A0 28 53 |S.nl,.nh,.nfl.(S|
00000070: 43 52 41 54 43 48 29 0D 2A A0 41 4E 44 A0 6A 75 |CRATCH).*.AND.ju|
00000080: 73 74 2E A0 A0 28 6A 75 73 74 A0 53 48 4F 55 4C |st...(just.SHOUL|
00000090: 44 A0 48 4F 4C 44 A0 30 A0 46 4F 52 A0 4C 45 46 |D.HOLD.0.FOR.LEF|
000000A0: 54 2C 0D 2A A0 4F 52 A0 24 32 30 A0 46 4F 52 A0 |T,.*.OR.$20.FOR.|
000000B0: 52 49 47 48 54 A0 4A 55 53 54 49 46 49 43 41 54 |RIGHT.JUSTIFICAT|
000000C0: 49 4F 4E 2E 29 0D 2A 2D 2D 2D 2D 2D 2D 2D 2D 2D |ION.).*---------|
000000D0: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------|
000000E0: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------|
000000F0: 0D 0D 70 72 64 65 63 20 73 74 61 20 6E 68 20 3B |..prdec sta nh ;|
00000100: 73 54 4F 52 45 A0 4E 55 4D 42 45 52 A0 48 49 0D |sTORE.NUMBER.HI.|
00000110: 20 73 74 78 20 6E 6C 20 3B A0 26 A0 4C 4F 57 0D | stx nl ;.&.LOW.|
00000120: 20 6C 64 78 20 23 39 20 3B 69 4E 44 45 58 A0 46 | ldx #9 ;iNDEX.F|
00000130: 4F 52 A0 35 A0 44 49 47 49 54 53 0D 20 73 74 78 |OR.5.DIGITS. stx|
00000140: 20 6E 66 6C 0D 6C 6F 61 64 30 20 6C 64 79 20 23 | nfl.load0 ldy #|
00000150: 22 30 22 20 3B 6E 55 4D 45 52 49 43 A0 4F 46 46 |"0" ;nUMERIC.OFF|
00000160: 53 45 54 0D 6D 6B 64 65 63 20 6C 64 61 20 6E 6C |SET.mkdec lda nl|
00000170: 20 3B 72 45 50 45 41 54 45 44 A0 53 55 42 54 52 | ;rEPEATED.SUBTR|
00000180: 41 43 54 49 4F 4E 53 0D 20 63 6D 70 20 6E 75 6D |ACTIONS. cmp num|
00000190: 74 62 6C 2D 31 2C 78 0D 20 6C 64 61 20 6E 68 0D |tbl-1,x. lda nh.|
000001A0: 20 73 62 63 20 6E 75 6D 74 62 6C 2C 78 0D 20 62 | sbc numtbl,x. b|
000001B0: 63 63 20 6D 6B 64 32 20 3B 62 52 41 4E 43 48 A0 |cc mkd2 ;bRANCH.|
000001C0: 49 46 A0 4F 56 45 52 46 4C 4F 57 0D 20 73 74 61 |IF.OVERFLOW. sta|
000001D0: 20 6E 68 20 3B 64 4F A0 54 48 45 A0 53 55 42 54 | nh ;dO.THE.SUBT|
000001E0: 52 41 43 54 0D 20 6C 64 61 20 6E 6C 0D 20 73 62 |RACT. lda nl. sb|
000001F0: 63 20 6E 75 6D 74 62 6C 2D 31 2C 78 0D 20 73 74 |c numtbl-1,x. st|
00000200: 61 20 6E 6C 0D 20 69 6E 79 20 3B 63 4F 55 4E 54 |a nl. iny ;cOUNT|
00000210: A0 51 55 4F 54 49 45 4E 54 A0 44 49 47 49 54 0D |.QUOTIENT.DIGIT.|
00000220: 20 62 6E 65 20 6D 6B 64 65 63 20 3B 61 4C 57 41 | bne mkdec ;aLWA|
00000230: 59 53 A0 54 41 4B 45 4E 0D 6D 6B 64 32 20 74 79 |YS.TAKEN.mkd2 ty|
00000240: 61 20 3B 67 45 54 A0 51 55 4F 54 49 45 4E 54 A0 |a ;gET.QUOTIENT.|
00000250: 44 49 47 49 54 0D 20 64 65 78 20 3B 70 4F 49 4E |DIGIT. dex ;pOIN|
00000260: 54 A0 54 4F A0 53 4D 41 4C 4C 45 52 A0 50 4F 57 |T.TO.SMALLER.POW|
00000270: 45 52 A0 4F 46 A0 31 30 0D 20 62 65 71 20 70 72 |ER.OF.10. beq pr|
00000280: 64 63 20 3B 70 52 49 4E 54 A0 44 49 47 49 54 A0 |dc ;pRINT.DIGIT.|
00000290: 49 46 A0 4C 41 53 54 A0 4F 4E 45 0D 20 63 6D 70 |IF.LAST.ONE. cmp|
000002A0: 20 23 22 30 22 20 3B 70 4F 53 53 49 42 4C 45 A0 | #"0" ;pOSSIBLE.|
000002B0: 4C 45 41 44 49 4E 47 A0 5A 45 52 4F 3F 0D 20 62 |LEADING.ZERO?. b|
000002C0: 65 71 20 6D 6B 64 33 20 3B 62 52 41 4E 43 48 A0 |eq mkd3 ;bRANCH.|
000002D0: 49 46 A0 53 4F 0D 20 73 74 61 20 6E 66 6C 20 3B |IF.SO. sta nfl ;|
000002E0: 66 4C 41 47 A0 4E 55 4D 42 45 52 A0 53 54 41 52 |fLAG.NUMBER.STAR|
000002F0: 54 45 44 0D 6D 6B 64 33 20 62 69 74 20 6E 66 6C |TED.mkd3 bit nfl|
00000300: 20 3B 77 41 53 A0 41 A0 44 49 47 49 54 A0 50 52 | ;wAS.A.DIGIT.PR|
00000310: 49 4E 54 45 44 3F 0D 20 62 6D 69 20 70 72 64 63 |INTED?. bmi prdc|
00000320: 20 3B 70 52 49 4E 54 A0 54 48 49 53 A0 4F 4E 45 | ;pRINT.THIS.ONE|
00000330: A0 49 46 A0 53 4F 0D 20 6C 64 61 20 6A 75 73 74 |.IF.SO. lda just|
00000340: 20 3B 6C 45 41 44 49 4E 47 A0 5A 45 52 4F 2C A0 | ;lEADING.ZERO,.|
00000350: 43 48 45 43 4B A0 6A 75 73 74 0D 20 62 65 71 20 |CHECK.just. beq |
00000360: 6E 78 74 78 20 3B 6A 55 53 54 A0 4C 45 46 54 3A |nxtx ;jUST.LEFT:|
00000370: A0 53 4B 49 50 0D 3B 6A 55 53 54 A0 52 49 47 48 |.SKIP.;jUST.RIGH|
00000380: 54 3A A0 50 52 49 4E 54 A0 53 50 41 43 45 0D 70 |T:.PRINT.SPACE.p|
00000390: 72 64 63 20 61 6E 64 20 23 24 37 66 20 3B 6D 41 |rdc and #$7f ;mA|
000003A0: 53 4B A0 48 49 47 48 A0 42 49 54 0D 20 6A 73 72 |SK.HIGH.BIT. jsr|
000003B0: 20 63 68 72 6F 75 74 20 3B 73 45 4E 44 A0 44 49 | chrout ;sEND.DI|
000003C0: 47 49 54 0D 6E 78 74 78 20 64 65 78 20 3B 70 4F |GIT.nxtx dex ;pO|
000003D0: 49 4E 54 A0 54 4F A0 4E 45 58 54 A0 44 49 47 49 |INT.TO.NEXT.DIGI|
000003E0: 54 0D 20 62 70 6C 20 6C 6F 61 64 30 20 3B 6C 4F |T. bpl load0 ;lO|
000003F0: 4F 50 A0 54 49 4C 4C A0 44 4F 4E 45 0D 20 72 74 |OP.TILL.DONE. rt|
00000400: 73 0D 0D 6E 75 6D 74 62 6C 20 64 61 20 31 2C 31 |s..numtbl da 1,1|
00000410: 30 2C 31 30 30 2C 31 30 30 30 2C 31 30 30 30 30 |0,100,1000,10000|
00000420: 0D |. |
*---------------------------------------
--.* SUBROUTINE TO PRINT A,X IN DECIMAL.
.* USES LOCATIONS NL, NH, NFL (SCRATCH).
* AND JUST. (JUST SHOULD HOLD 0 FOR LEF
T,.* OR $20 FOR RIGHT JUSTIFICATION.).*-
----------------------------------------
..PRDEC STA NH ;STORE NUMBER HI. STX NL
; & LOW. LDX #9 ;INDEX FOR 5 DIGITS. STX
NFL.LOAD0 LDY #"0" ;NUMERIC OFFSET.MKDE
C LDA NL ;REPEATED SUBTRACTIONS. CMP NUM
TBL-1,X. LDA NH. SBC NUMTBL,X. BCC MKD2
;BRANCH IF OVERFLOW. STA NH ;DO THE SUBT
RACT. LDA NL. SBC NUMTBL-1,X. STA NL. IN
Y ;COUNT QUOTIENT DIGIT. BNE MKDEC ;ALWA
YS TAKEN.MKD2 TYA ;GET QUOTIENT DIGIT. D
EX ;POINT TO SMALLER POWER OF 10. BEQ PR
DC ;PRINT DIGIT IF LAST ONE. CMP #"0" ;P
OSSIBLE LEADING ZERO?. BEQ MKD3 ;BRANCH
IF SO. STA NFL ;FLAG NUMBER STARTED.MKD3
BIT NFL ;WAS A DIGIT PRINTED?. BMI PRDC
;PRINT THIS ONE IF SO. LDA JUST ;LEADIN
G ZERO, CHECK JUST. BEQ NXTX ;JUST LEFT:
SKIP.;JUST RIGHT: PRINT SPACE.PRDC AND
#$7F ;MASK HIGH BIT. JSR CHROUT ;SEND DI
GIT.NXTX DEX ;POINT TO NEXT DIGIT. BPL L
OAD0 ;LOOP TILL DONE. RTS..NUMTBL DA 1,1
0,100,1000,10000.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL