📄 listsort.lst
字号:
\ 012B ED42 SBC HL,BC
\ 012D 383B JR C,?0023
\ 012F ?0025:
50 if (compare_string(p, max) > 0) {
\ 012F FDE5 PUSH IY
\ 0131 C1 POP BC
\ 0132 DD5EFA LD E,(IX-6)
\ 0135 DD56FB LD D,(IX-5)
\ 0138 3E00 LD A,BYTE3 compare_string
\ 013A 210000 LD HL,LWRD compare_string
\ 013D CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0140 4D LD C,L
\ 0141 44 LD B,H
\ 0142 210000 LD HL,0
\ 0145 F680 OR 128
\ 0147 ED42 SBC HL,BC
\ 0149 E24D01 JP PO,?0068
\ 014C AC XOR H
\ 014D ?0068:
\ 014D F25901 JP P,?0028
\ 0150 ?0027:
51 max = p;
\ 0150 DD6EFA LD L,(IX-6)
\ 0153 DD66FB LD H,(IX-5)
\ 0156 E5 PUSH HL
\ 0157 FDE1 POP IY
\ 0159 ?0028:
\ 0159 210000 LD HL,0
\ 015C 39 ADD HL,SP
\ 015D 7E LD A,(HL)
\ 015E DD8608 ADD A,(IX+8)
\ 0161 77 LD (HL),A
\ 0162 23 INC HL
\ 0163 7E LD A,(HL)
\ 0164 DD8E09 ADC A,(IX+9)
\ 0167 77 LD (HL),A
\ 0168 18B4 JR ?0024
\ 016A ?0023:
52 }
53 }
54 swap(max, hi);
\ 016A DD4EFE LD C,(IX-2)
\ 016D DD46FF LD B,(IX-1)
\ 0170 CD8801 CALL LWRD ?0077
55 hi -= width;
\ 0173 210400 LD HL,4
\ 0176 39 ADD HL,SP
\ 0177 7E LD A,(HL)
\ 0178 DD9608 SUB (IX+8)
\ 017B 77 LD (HL),A
\ 017C 23 INC HL
\ 017D 7E LD A,(HL)
\ 017E DD9E09 SBC A,(IX+9)
\ 0181 77 LD (HL),A
56 }
57 }
\ 0182 C3F000 JP LWRD ?0021
\ 0185 ?0020:
\ 0185 C39F00 JP LWRD ?0014
\ 0188 ?0077:
\ 0188 FDE5 PUSH IY
\ 018A D1 POP DE
\ 018B ?0078:
\ 018B 3E00 LD A,BYTE3 swap
\ 018D 21A800 LD HL,LWRD swap
\ 0190 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 0193 list_sort:
58
59 void list_sort(char *base, unsigned short num, unsigned int width)
60 {
\ 0193 FDE5 PUSH IY
\ 0195 DDE5 PUSH IX
\ 0197 DD210000 LD IX,0
\ 019B DD39 ADD IX,SP
\ 019D C5 PUSH BC
\ 019E D5 PUSH DE
\ 019F 217CFF LD HL,65404
\ 01A2 39 ADD HL,SP
\ 01A3 F9 LD SP,HL
61 char *lo, *hi;
62 char *mid;
63 char *loguy, *higuy;
64 unsigned short size;
65 char *lostk[30], *histk[30];
66 int stkptr;
67 if (num < 2 || width == 0)
\ 01A4 010200 LD BC,2
\ 01A7 DD6EFE LD L,(IX-2)
\ 01AA DD66FF LD H,(IX-1)
\ 01AD A7 AND A
\ 01AE ED42 SBC HL,BC
\ 01B0 DA8804 JP C,?0063
\ 01B3 DD7E08 LD A,(IX+8)
\ 01B6 DDB609 OR (IX+9)
\ 01B9 CA8804 JP Z,?0063
\ 01BC ?0031:
\ 01BC ?0032:
\ 01BC ?0029:
\ 01BC ?0030:
68 return; // nothing to do
69 stkptr = 0; // initialize stack
70 lo = base;
\ 01BC EB EX DE,HL
\ 01BD E5 PUSH HL
\ 01BE FDE1 POP IY
71 hi = (char *)base + width * (num-1); // initialize limits
\ 01C0 210600 LD HL,6
\ 01C3 39 ADD HL,SP
\ 01C4 E5 PUSH HL
\ 01C5 21FFFF LD HL,65535
\ 01C8 DD4EFE LD C,(IX-2)
\ 01CB DD46FF LD B,(IX-1)
\ 01CE 09 ADD HL,BC
\ 01CF 4D LD C,L
\ 01D0 44 LD B,H
\ 01D1 DD5E08 LD E,(IX+8)
\ 01D4 DD5609 LD D,(IX+9)
\ 01D7 CD0000 CALL LWRD ?S_MUL_L02
\ 01DA DD6EFC LD L,(IX-4)
\ 01DD DD66FD LD H,(IX-3)
\ 01E0 19 ADD HL,DE
\ 01E1 4D LD C,L
\ 01E2 44 LD B,H
\ 01E3 E1 POP HL
\ 01E4 71 LD (HL),C
\ 01E5 23 INC HL
\ 01E6 70 LD (HL),B
\ 01E7 210000 LD HL,0
\ 01EA 39 ADD HL,SP
\ 01EB AF XOR A
\ 01EC 77 LD (HL),A
\ 01ED 23 INC HL
\ 01EE 77 LD (HL),A
\ 01EF ?0033:
72 recurse:
73 output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
\ 01EF DB4E IN A,(78)
\ 01F1 CBDF SET 3,A
\ 01F3 D34E OUT (78),A
74 size = (hi - lo) / width + 1; // number of el's to sort
\ 01F5 FDE5 PUSH IY
\ 01F7 C1 POP BC
\ 01F8 210600 LD HL,6
\ 01FB 39 ADD HL,SP
\ 01FC 56 LD D,(HL)
\ 01FD 23 INC HL
\ 01FE 66 LD H,(HL)
\ 01FF 6A LD L,D
\ 0200 A7 AND A
\ 0201 ED42 SBC HL,BC
\ 0203 EB EX DE,HL
\ 0204 DD4E08 LD C,(IX+8)
\ 0207 DD4609 LD B,(IX+9)
\ 020A CD0000 CALL LWRD ?US_DIV_L02
\ 020D 13 INC DE
75 if (size <= CUTOFF) {
\ 020E 4B LD C,E
\ 020F 42 LD B,D
\ 0210 210800 LD HL,8
\ 0213 A7 AND A
\ 0214 ED42 SBC HL,BC
\ 0216 381D JR C,?0035
\ 0218 ?0034:
76 shortsort(lo, hi, width); //冒泡法排序
\ 0218 DD6E08 LD L,(IX+8)
\ 021B DD6609 LD H,(IX+9)
\ 021E E5 PUSH HL
\ 021F 210800 LD HL,8
\ 0222 39 ADD HL,SP
\ 0223 4E LD C,(HL)
\ 0224 23 INC HL
\ 0225 46 LD B,(HL)
\ 0226 FDE5 PUSH IY
\ 0228 D1 POP DE
\ 0229 3E00 LD A,BYTE3 shortsort
\ 022B 21E300 LD HL,LWRD shortsort
\ 022E CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0231 E1 POP HL
77 }
78 else {
\ 0232 C34304 JP LWRD ?0061
\ 0235 ?0035:
79 mid = lo + (size / 2) * width; // find middle element
\ 0235 CB38 SRL B
\ 0237 CB19 RR C
\ 0239 DD5E08 LD E,(IX+8)
\ 023C DD5609 LD D,(IX+9)
\ 023F CD0000 CALL LWRD ?S_MUL_L02
\ 0242 FDE5 PUSH IY
\ 0244 E1 POP HL
\ 0245 19 ADD HL,DE
80 swap(mid, lo); //swap it to beginning of array
\ 0246 FDE5 PUSH IY
\ 0248 C1 POP BC
\ 0249 EB EX DE,HL
\ 024A CD8B01 CALL LWRD ?0078
81 loguy = lo;
\ 024D 210400 LD HL,4
\ 0250 39 ADD HL,SP
\ 0251 FDE5 PUSH IY
\ 0253 C1 POP BC
\ 0254 71 LD (HL),C
\ 0255 23 INC HL
\ 0256 70 LD (HL),B
82 higuy = hi + width;
\ 0257 2B DEC HL
\ 0258 2B DEC HL
\ 0259 2B DEC HL
\ 025A E5 PUSH HL
\ 025B DD6E08 LD L,(IX+8)
\ 025E DD6609 LD H,(IX+9)
\ 0261 E5 PUSH HL
\ 0262 210A00 LD HL,10
\ 0265 39 ADD HL,SP
\ 0266 4E LD C,(HL)
\ 0267 23 INC HL
\ 0268 46 LD B,(HL)
\ 0269 E1 POP HL
\ 026A 09 ADD HL,BC
\ 026B 4D LD C,L
\ 026C 44 LD B,H
\ 026D E1 POP HL
\ 026E 71 LD (HL),C
\ 026F 23 INC HL
\ 0270 70 LD (HL),B
\ 0271 ?0038:
83 for (;;) {
\ 0271 ?0041:
84 do {
85 loguy += width;
\ 0271 210400 LD HL,4
\ 0274 39 ADD HL,SP
\ 0275 7E LD A,(HL)
\ 0276 DD8608 ADD A,(IX+8)
\ 0279 77 LD (HL),A
\ 027A 23 INC HL
\ 027B 7E LD A,(HL)
\ 027C DD8E09 ADC A,(IX+9)
\ 027F 77 LD (HL),A
86 } while (loguy <= hi && compare_string(loguy, lo) <= 0);
\ 0280 2B DEC HL
\ 0281 4E LD C,(HL)
\ 0282 47 LD B,A
\ 0283 23 INC HL
\ 0284 23 INC HL
\ 0285 56 LD D,(HL)
\ 0286 23 INC HL
\ 0287 66 LD H,(HL)
\ 0288 6A LD L,D
\ 0289 A7 AND A
\ 028A ED42 SBC HL,BC
\ 028C 3821 JR C,?0039
\ 028E FDE5 PUSH IY
\ 0290 C1 POP BC
\ 0291 210400 LD HL,4
\ 0294 39 ADD HL,SP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -