;***********************************************************************; ; ; ; SSS DDDD SSS Y Y SSS TTTTT EEEEE M M SSS ; ; S S D D S S Y Y S S T E MM MM S S ; ; S D D S Y Y S T E M MM M S ; ; SSS D D SSS Y SSS T EEE M M SSS ; ; S D D S Y S T E M M S ; ; S S D D S S Y S S T E M M S S ; ; SSS DDDD SSS Y SSS T EEEEE M M SSS ; ; ; ; ; ; SD SYSTEMS, INC. ; ; 10111 MILLER RD. ; ; DALLAS, TX 75238 ; ; ; ; (214) - 340 - 0303 ; ; ; ; COPYRIGHT (C) 1983 ; ; ; ;***********************************************************************; Title 'MOVE module for CP/M3 linked BIOS' ;***********************************************************************; ; Rev. Description Initials-Date ; ;-----------------------------------------------------------------------; ; 0.05 1st working Banked Version dkb...1/17/83 ; ; 1.00 1st release Version dkb...1/23/83 ; ; ; ;***********************************************************************; ; cseg public ?move,?xmove,?bank extrn @cbnk p$bankselect equ -1 maclib z80 maclib cond ?xmove: if banked sbcd srcbnk ; set source/destination banks mvi a,-1 ! sta xmovef ; set flag for one xmove endif xra a ; zero accumulator ret ; if banked xmovef db 0 ; xmove flag srcbnk db 0 ; source bank # dstbnk db 0 ; destination bank # cbuff ds 128 ; max move is 128 bytes bank/bank endif ; ?move: mov a,b ! ora c ! rz ; if zero length move, return if banked ; lda xmovef ! ora a ! jrz movf ; if not bank move, then normal move xra a ! sta xmovef ; reset bank move flag lda @cbnk ! push psw ; save current bank on stack lda srcbnk ! call ?bank ; select source bank push d ! push h ! push b ; save destination,source,no bytes lxi h,cbuff ! xchg ! ldir ; move it up lda dstbnk ! call ?bank ; set destination bank pop b ! pop d ! push b ; save xfer size again lxi h,cbuff ! ldir ; move it down pop b ! pop h ! dad b ; update hl to hl + trx length xchg ; reverse, now hl = dest + len ; de = src + len pop psw ! call ?bank ! ret ; current bank back in and return endif movf: xchg ; we are passed source in DE and dest in HL ldir ; use Z80 block move instruction xchg ; need next addresses in same regs ret ; by exiting through bank select ?bank: if banked out p$bankselect ; put new memory control byte endif ret end