;THIS SUBROUTINE ARRANGES THE 8-BIT ELEMENTS OF A LIST IN ASCENDING ;ORDER. THE STARTING ADDRESS OF THE LIST IS IN LOCATIONS $30 AND ;$31. THE LENGTH OF THE LIST IS IN THE FIRST BYTE OF THE LIST. LOCATION ;$32 IS USED TO HOLD AN EXCHANGE FLAG. lda #$05 sta $30 sta $33 lda #$A4 sta $34 lda #$07 sta $35 lda #$F6 sta $36 lda #$44 lda $37 SORT8 ldy #$00 ;TURN EXCHANGE FLAG OFF (= 0) sty $32 lda ($30),Y ;FETCH ELEMENT COUNT tax ; AND PUT IT INTO X iny ;POINT TO FIRST ELEMENT IN LIST dex ;DECREMENT ELEMENT COUNT NXTEL lda ($30),Y ;FETCH ELEMENT iny cmp ($30),Y ;IS IT LARGER THAN THE NEXT ELEMENT? bcc CHKEND beq CHKEND ;YES. EXCHANGE ELEMENTS IN MEMORY pha ; BY SAVING LOW BYTE ON STACK. lda ($30),Y ; THEN GET HIGH BYTE AND dey ; STORE IT AT LOW ADDRESS sta ($30),Y pla ;PULL LOW BYTE FROM STACK iny ; AND STORE IT AT HIGH ADDRESS sta ($30),Y lda #$FF ;TURN EXCHANGE FLAG ON (= -1) sta $32 CHKEND dex ;END OF LIST? bne NXTEL ;NO. FETCH NEXT ELEMENT bit $32 ;YES. EXCHANGE FLAG STILL OFF? bmi SORT8 ;NO. GO THROUGH LIST AGAIN rts ;YES. LIST IS NOW ORDERED