📄 listsort.lst
字号:
##############################################################################
# #
# IAR Z80/64180 C-Compiler V4.04B/WIN #
# Front End V4.20N 27/Sep/107 17:34:55 #
# Global Optimizer V1.05D #
# #
# Target option = Z80 #
# Memory model = banked #
# Source file = d:\case_i_d913f\ap\ap_playlist\listsort.c #
# List file = d:\case_i_d913f\ap\ap_playlist\.\list\listsort.lst #
# Object file = d:\case_i_d913f\ap\ap_playlist\.\obj\listsort.r01 #
# ASM file = d:\case_i_d913f\ap\ap_playlist\.\list\listsort.s01 #
# Command line = -v0 -mb -uu #
# -OD:\case_i_d913f\ap\ap_playlist\.\Obj\ -e -K -w #
# -gA -s9 -RCODE -r0 -DUSB_DISK_USING #
# -LD:\case_i_d913f\ap\ap_playlist\.\List\ -q -t8 -x #
# -AD:\case_i_d913f\ap\ap_playlist\.\List\ -X #
# -Id:\sdk_i_913f\inc\ -Id:\case_i_d913f\inc\ #
# -Id:\case_i_d913f\ap\ap_music\ #
# d:\case_i_d913f\AP\AP_PLAYLIST\listsort.c #
# #
# (c) Copyright IAR Systems 1996 #
##############################################################################
\ 0000 NAME listsort(17)
\ 0000 RSEG APC_LIST_FUN2(0)
\ 0000 EXTERN SetDspMips
\ 0000 PUBLIC compare_string
\ 0000 PUBLIC list_sort
\ 0000 PUBLIC shortsort
\ 0000 PUBLIC swap
\ 0000 EXTERN ?CLZ80B_4_04_L00
\ 0000 EXTERN ?US_DIV_L02
\ 0000 EXTERN ?S_MUL_L02
\ 0000 EXTERN ?BANK_CALL_DIRECT_L08
\ 0000 EXTERN ?BANK_FAST_LEAVE_L08
\ 0000 RSEG APC_LIST_FUN2
\ 0000 compare_string:
1 #include "musiclist.h"
2 #define COMPARELEN 30
3 #define CUTOFF 8
4 #pragma codeseg(APC_LIST_FUN2)
5 int compare_string(char *string1,char *string2)
6 {
\ 0000 FDE5 PUSH IY
\ 0002 DDE5 PUSH IX
\ 0004 DD210000 LD IX,0
\ 0008 DD39 ADD IX,SP
\ 000A C5 PUSH BC
\ 000B D5 PUSH DE
\ 000C 21F4FF LD HL,65524
\ 000F 39 ADD HL,SP
\ 0010 F9 LD SP,HL
7 int i;
8 int *filenum_1 = (int*) string1;
9 int *filenum_2 = (int*) string2;
10 unsigned int string1_location =*filenum_1;
\ 0011 EB EX DE,HL
\ 0012 46 LD B,(HL)
\ 0013 DD70F6 LD (IX-10),B
\ 0016 23 INC HL
\ 0017 66 LD H,(HL)
\ 0018 DD74F7 LD (IX-9),H
11 unsigned int string2_location = *filenum_2;
\ 001B 69 LD L,C
\ 001C DD66FF LD H,(IX-1)
\ 001F 46 LD B,(HL)
\ 0020 DD70F4 LD (IX-12),B
\ 0023 23 INC HL
\ 0024 66 LD H,(HL)
\ 0025 DD74F5 LD (IX-11),H
12 char *string1_start =(char*)(string1_location*OneFileInfor+IDMStartAddress+2);
\ 0028 DD6EF6 LD L,(IX-10)
\ 002B DD66F7 LD H,(IX-9)
\ 002E 29 ADD HL,HL
\ 002F 29 ADD HL,HL
\ 0030 29 ADD HL,HL
\ 0031 29 ADD HL,HL
\ 0032 29 ADD HL,HL
\ 0033 010240 LD BC,16386
\ 0036 09 ADD HL,BC
\ 0037 DD75F0 LD (IX-16),L
\ 003A DD74F1 LD (IX-15),H
13 char *string2_start =(char*)(string2_location*OneFileInfor+IDMStartAddress+2);
\ 003D DD6EF4 LD L,(IX-12)
\ 0040 DD66F5 LD H,(IX-11)
\ 0043 29 ADD HL,HL
\ 0044 29 ADD HL,HL
\ 0045 29 ADD HL,HL
\ 0046 29 ADD HL,HL
\ 0047 29 ADD HL,HL
\ 0048 09 ADD HL,BC
\ 0049 E5 PUSH HL
\ 004A FDE1 POP IY
14 for(i=0;i<COMPARELEN;i++)
\ 004C AF XOR A
\ 004D DD77F2 LD (IX-14),A
\ 0050 DD77F3 LD (IX-13),A
\ 0053 ?0003:
\ 0053 011E80 LD BC,32798
\ 0056 DD6EF2 LD L,(IX-14)
\ 0059 DD66F3 LD H,(IX-13)
\ 005C 78 LD A,B
\ 005D AC XOR H
\ 005E 67 LD H,A
\ 005F ED42 SBC HL,BC
\ 0061 3039 JR NC,?0002
\ 0063 ?0004:
15 {
16 if((*string1_start)>(*string2_start)) //string1>string2
\ 0063 DD6EF0 LD L,(IX-16)
\ 0066 DD66F1 LD H,(IX-15)
\ 0069 FD7E00 LD A,(IY+0)
\ 006C BE CP (HL)
\ 006D 3005 JR NC,?0007
\ 006F ?0006:
17 return 1;
\ 006F 210100 LD HL,1
\ 0072 182B JR ?0014
\ 0074 ?0007:
18 else if((*string1_start)<(*string2_start)) //string1<string2
\ 0074 7E LD A,(HL)
\ 0075 FDBE00 CP (IY+0)
\ 0078 3005 JR NC,?0009
\ 007A ?0008:
19 return -1;
\ 007A 21FFFF LD HL,65535
\ 007D 1820 JR ?0014
\ 007F ?0009:
20
21 if((*string1_start)==0 && (*string2_start)==0) //提前结束
\ 007F AF XOR A
\ 0080 B6 OR (HL)
\ 0081 2005 JR NZ,?0011
\ 0083 FDB600 OR (IY+0)
\ 0086 2814 JR Z,?0002
\ 0088 ?0013:
\ 0088 ?0012:
\ 0088 ?0010:
22 break;
\ 0088 ?0011:
23 string1_start++;
\ 0088 DD34F0 INC (IX-16)
\ 008B 2003 JR NZ,?0065
\ 008D DD34F1 INC (IX-15)
\ 0090 ?0065:
24 string2_start++;
\ 0090 DD34F2 INC (IX-14)
\ 0093 FD23 INC IY
\ 0095 20BC JR NZ,?0003
\ 0097 DD34F3 INC (IX-13)
\ 009A 18B7 JR ?0003
\ 009C ?0002:
25 }
26 return 0; //string1 和 string2 相等
\ 009C 210000 LD HL,0
27 }
\ 009F ?0014:
\ 009F DDF9 LD SP,IX
\ 00A1 DDE1 POP IX
\ 00A3 FDE1 POP IY
\ 00A5 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 00A8 swap:
28
29 void swap(char *a, char *b)
30 {
\ 00A8 FDE5 PUSH IY
\ 00AA DDE5 PUSH IX
\ 00AC F5 PUSH AF
\ 00AD C5 PUSH BC
\ 00AE DDE1 POP IX
\ 00B0 D5 PUSH DE
\ 00B1 FDE1 POP IY
31 unsigned char tmp;
32 unsigned char counter=2;
\ 00B3 210000 LD HL,0
\ 00B6 39 ADD HL,SP
\ 00B7 3602 LD (HL),2
33 if ( a != b )
\ 00B9 EB EX DE,HL
\ 00BA A7 AND A
\ 00BB ED42 SBC HL,BC
\ 00BD 281C JR Z,?0017
\ 00BF ?0015:
\ 00BF ?0018:
34 while(counter--) //只交换序号
\ 00BF 210000 LD HL,0
\ 00C2 39 ADD HL,SP
\ 00C3 46 LD B,(HL)
\ 00C4 35 DEC (HL)
\ 00C5 04 INC B
\ 00C6 05 DEC B
\ 00C7 2812 JR Z,?0017
\ 00C9 ?0019:
35 {
36 tmp = *a;
\ 00C9 FD4600 LD B,(IY+0)
37 *a = *b;
\ 00CC DD4E00 LD C,(IX+0)
\ 00CF FD7100 LD (IY+0),C
38 *b = tmp;
\ 00D2 DD7000 LD (IX+0),B
39 a++;
40 b++;
41 }
42 }
\ 00D5 DD23 INC IX
\ 00D7 FD23 INC IY
\ 00D9 18E4 JR ?0015
\ 00DB ?0017:
\ 00DB ?0016:
\ 00DB E1 POP HL
\ 00DC DDE1 POP IX
\ 00DE FDE1 POP IY
\ 00E0 C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 00E3 shortsort:
43
44 void shortsort (char *lo,char *hi,unsigned int width )
45 {
\ 00E3 FDE5 PUSH IY
\ 00E5 DDE5 PUSH IX
\ 00E7 DD210000 LD IX,0
\ 00EB DD39 ADD IX,SP
\ 00ED C5 PUSH BC
\ 00EE D5 PUSH DE
\ 00EF F5 PUSH AF
\ 00F0 ?0021:
46 char *p, *max;
47 while (hi > lo) {
\ 00F0 DD4EFE LD C,(IX-2)
\ 00F3 DD46FF LD B,(IX-1)
\ 00F6 DD6EFC LD L,(IX-4)
\ 00F9 DD66FD LD H,(IX-3)
\ 00FC A7 AND A
\ 00FD ED42 SBC HL,BC
\ 00FF D28501 JP NC,?0020
\ 0102 ?0022:
48 max = lo;
\ 0102 DD6EFC LD L,(IX-4)
\ 0105 DD66FD LD H,(IX-3)
\ 0108 E5 PUSH HL
\ 0109 FDE1 POP IY
49 for (p = lo+width; p <= hi; p += width) {
\ 010B DD6E08 LD L,(IX+8)
\ 010E DD6609 LD H,(IX+9)
\ 0111 DD4EFC LD C,(IX-4)
\ 0114 DD46FD LD B,(IX-3)
\ 0117 09 ADD HL,BC
\ 0118 DD75FA LD (IX-6),L
\ 011B DD74FB LD (IX-5),H
\ 011E ?0024:
\ 011E DD4EFA LD C,(IX-6)
\ 0121 DD46FB LD B,(IX-5)
\ 0124 DD6EFE LD L,(IX-2)
\ 0127 DD66FF LD H,(IX-1)
\ 012A A7 AND A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -