123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- #define tmp OP1+14
- #define head tmp+1
- #define head_lag tmp+3
- #macro advanceVAT()
- #ifdef speed
- ld bc,-6
- add hl,bc
- sbc a,a
- sub (hl)
- ld c,a
- add hl,bc
- #else
- call advance_VAT
- #endif
- #endmacro
- sortVAT:
- #ifdef nointerrupt
- di
- #endif
- ld hl,(progPtr)
- isort_main:
- _:
- ld (head_lag),hl
- ld d,h
- ld e,l
- advanceVAT()
- ld (head),hl
- #ifdef speed
- ld a,(pTemp)
- cp l
- jr nz,$+7
- ld a,(pTemp+1)
- cp h
- ret z
- #else
- ld bc,(pTemp)
- or a
- sbc hl,bc
- ret z
- add hl,bc
- #endif
- call cmpVAT
- ld hl,(head)
- jr nc,-_
- ld de,tmp
- #ifdef speed
- ldd
- ldd
- ldd
- ldd
- ldd
- ldd
- ld b,0
- ld c,(hl)
- lddr
- ldd
- #else
- ld bc,6
- lddr
- ld c,(hl)
- inc c
- lddr
- #endif
- ld hl,(progPtr)
- _:
- push hl
- #ifdef speed
- ld bc,-6
- add hl,bc
- ld de,tmp-6
- call cmpVAT_stepin
- #else
- ex de,hl
- ld hl,tmp
- call cmpVAT
- #endif
- pop hl
- jr c,+_
- advanceVAT()
- jp -_
- _:
- ld de,(head)
- or a
- sbc hl,de
- ld b,h
- ld c,l
- ld hl,-6
- add hl,de
- ld a,l
- sub a,(hl)
- ld l,a
- jr nc,$+4
- dec h
- or a
- inc de
- ex de,hl
- #ifdef speed
- call fastldir
- #else
- ldir
- #endif
-
- ld hl,tmp-6
- ld c,(hl)
- sbc hl,bc
- ld a,c
- ldir
- #ifdef speed
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- add a,7
- #else
- ld c,7
- add a,c
- ldir
- #endif
- ld hl,(head_lag)
- ld c,a
- ld a,l
- sub c
- ld l,a
- jp nc,isort_main
- dec h
- jp isort_main
- #ifndef speed
- advance_VAT:
- ld bc,-6
- add hl,bc
- sbc a,a
- sub (hl)
- ld c,a
- add hl,bc
- ret
- #endif
- cmpVAT:
- ld bc,-6
- add hl,bc
- ex de,hl
- add hl,bc
- cmpVAT_stepin:
- ld a,(de)
- cp (hl)
- jr nc,first_longer
- ld c,a
- _:
- dec hl
- dec de
- ld a,(de)
- cp (hl)
- ret nz
- dec c
- jr nz,-_
- scf
- ret
- first_longer:
- ld c,(hl)
- _:
- dec hl
- dec de
- ld a,(de)
- cp (hl)
- ret nz
- dec c
- jr nz,-_
- ret
- #ifdef speed
- fastldir:
- push hl
- xor a
- sub c
- and 15
- add a,a
- ld hl,ldirloop
- add a,l
- ld l,a
- #if (ldirloop>>8)!=(_ldirloop_end>>8)
- jr nc,$+3
- inc h
- #endif
- ex (sp),hl
- ret
- ldirloop:
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- ldi
- _ldirloop_end:
- ldi
- jp pe,ldirloop
- ret
- #endif
- #undefine tmp
- #undefine head
- #undefine head_lag1
|