[A83] Re: storing op1 to list


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

[A83] Re: storing op1 to list




pppfffffff !!!!! I can believe how much trouble I have experienced with 
writing the freakin number in op1 to an element in an freakin list !!!!

(Sorry that I react so late, but I haven't got a computer with internet at 
home (I have a pentium 90) and have to use public computers)



Finally I got it storing in the list at least, but now I have got another 
problem, which I'll explain now and hopefully somebody can help me ;

(note :1- that I have made it so that it is writing backwards,
          thus starting at list element number 5 to number 1
       2- I'm not programming for ION or another shell)


The content of the list ZG1 should be :

    {20.36363636  33.6   51.69230769   74.66666667   96}


But for an some reason the result becomes:

    {0 0 -6.923076923e-47  74.66666667 96}


As you can see the third number that is being stored is incorrect, it seems 
as if it is copying the number from op1 at the start of .69230769 instead of 
just 51...

Very very strange since it is writing the first two numbers right and 
without trouble !!!


Here is the source that I'm using to, among other things,  store:


loopinput:
   call _clrscrnfull
   call _homeup

   ld hl,(buffer)  ;UDV buffer holds the number of the element to which
                   ;the number must be stored

   call _disphl   ;to show which number must be stored


;-------from here list 'n stuff-----------

   call _zerooop1
   ld hl,firstlistname
   ld de,op1
   ld bc,6
   ldir
   call _chkfindsym  ;look up list address

   ld hl,(buffer)   ;buffer holds element number

   call _adrlele   ; calculate element address
   ex de,hl
   push de         ;save address

              ;--------numerical input -> op1-------------
              ld hl,textnumberis
              call _asmnumericalinput  ;call for numerical input,
                                       ;simply the code as in ASMGURU
              call _op1toop2
              call _op4toop1  ;op4 is an number calculated beforehand

              call _fpdiv   ;op1/op2 -> op1

   pop de
   ld hl,op1
   ld bc,9
   ldir

   ld a,(buffer)   ;see if buffer is 0, if so then continue (leave loop)
   dec a
   ld (buffer),a
   cp 0
   jr z,continue

   jr loopinput   ;otherwise ask for next number (stay in loop)


>From: Tijl Coosemans <tijl.coosemans@mail.be>
>Reply-To: assembly-83@lists.ticalc.org
>To: assembly-83@lists.ticalc.org
>Subject: [A83] Re: storing op1 to list
>Date: Tue, 28 Aug 2001 20:19:09 +0200
>
>
>Create the first list as explained in asmGuru.
>     ...
>     bcall(_createRList)
>     ld    (list1),de
>
>Create the second list.
>     ...
>     bcall(_createRList)
>     ld    (list2),de
>
>     ...(Calculate Number in OP1)...
>
>Store OP1 in list1.
>     ld    de,(list1)
>     ld    hl,1
>     bcall(_AdrLEle)
>     ex    de,hl
>     bcall(_MovFrOPl)
>     ...
>
>variables:
>list1:
>     .dw   0000h
>list2:
>     .dw   0000h
>.end
>
>===================================
>
>What happens is this. You create the first list and you store its location 
>in a safe place. The second list is exactly the same. When you then have a 
>number in OP1 and want to store it in the list, you get the location of 
>that list again. Then you calculate the address of the element in the list 
>and then you just copy the bytes in OP1 to that element.
>( The _MovFrOP1 romcall just copies 9 bytes FRom OP1 to the location where 
>DE is pointing to. If, however, you are optimizing for speed you should use 
>a simple LDIR instead. )
>
>
> > ----------------------------------------
> > From: TypeR unknown <typerfuture@hotmail.com>
> >
> >I have this program where in the beginning of the program two lists are
> >created, named ZG1 and ZG2.
> >In testing I have used the number 5 for the number of element's they both
> >contain.
> >
> >Later in the program I have to write the number which is in op1 to a
> >element in list ZG1, to do this I have used the code as given in ASMGURU
> >(tut 31 I believe)
> >It goes like this:
> >
> >    ld hl,1 ;write to element 1
> >    call _adrlele ;calculate element address
> >    ex de,hl  ;de->element address
> >    ld hl,op1 ;hl-> number
> >    ld bc,9
> >    ldir   ;store to element
> >
> >but because there is a lot of code between creating the list and actually
> >writing to it, as far as I know, I must preserve the de register because
> >this contains the list element.
> >
> >So I have saved de with two user defined variables (not good but I think
> >reliable), but the program doesn't work well, because it doesn't store 
>the
> >number!!!
> >
> >Should I be preserving more registers, or is the something wrong with my
> >code??
>
>-----------------------------------------------------
>Mail.be, Free WebMail and Virtual Office
>http://www.mail.be
>
>
>


_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp