LZ: lddr routine


[Prev][Next][Index][Thread]

LZ: lddr routine



This is the routine that I have come up with from the info that all of you
(mostly Alan Bailey) have given me.  But it still isn't working.  If
somebody could tell me if this routine will work or what is wrong with it
that would be great.  I'm not sure whether the problem is with this routine
or somewhere else in my program.  Thanks

<snip>
IncMem:                 ;start of routine
	ld bc,($8333)		;Load cursor position into bc
	push bc			;push bc onto stack
	push hl			;push hl onto stack (current mem location)
	ld bc,$0000		;set bc equal to zero
IncMemLoop:		;get total number of bytes to be moved
	inc bc			;increment counter
	ld a,(hl)		;load char into a
	cp $02			;compare with EOF code
	JUMP_Z(IncEOF)		;If EOF shift memory
	inc hl			;else move to next mem location
	JUMP_(IncMemLoop)
IncEOF:			;shift memory
	push hl			;hl is the source address
	pop de			;copy hl into de
	inc de			;de is the destination			
	lddr			;load from (hl) to (de) until bc is zero
        CALL_(DispUpdate)	;call function to update display
	pop hl			;hl now points to memory to be written in
	pop bc			;bc is cursor location
	ld ($8333),bc
        ret
DispUpdate:
	pop de			;de is mem location
	pop bc			;bc is cursor location
	push bc			;replace on stack
	push de
	ld ($8333),bc				
DispLoop:
	ld a,(de)		;load character into a
	cp $09			;if it is the end of line code return
	ret z
	cp $02			;or if it is the end of file code return
	ret z
	ROM_CALL(M_CHARPUT)	;else print it
	inc de			;move to next mem location
	JUMP_(DispLoop)
<snip>

I'm grateful for all your help this is my first program in zshell/assembly,
it's a big change from C.

Nathan Adams
nathana@goodnet.com
"It is better to remain silent and be thought a fool,
than to speak out and remove all doubt."


Follow-Ups: