You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.4 KiB
43 lines
1.4 KiB
;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
|