[Coco] 6309 Division instructions

jdaggett at gate.net jdaggett at gate.net
Tue Aug 2 16:52:23 EDT 2005


Robert

I quote from the 6309 Technical Reference Guide by Chet Simpson 

"The  DIVD  (16  bit by 8 bit) instruction does a signed divide of 
the contents of the D register with a value from memory (or in  
direct  mode). The signed  result  is  stored  with  the  quotient  
in  W and the modulo (remainder) in D."


Now if this is in error, then I am in error. From your posting then the above 
document must be in error. 

>From your example it appears that reg B has the quotient and reg A has the 
remainder. If this is so then there is something else going wrong in the instruction.  
Since the last time I checked, division of a negative integer by a positive interger 
should yield a negative integer quotient. According to reg A results this is a positive 
number. 

$BCEF  signed integer should be a negative -15599. Divide that by 24 and you get  
-649 quotient of hex $8289 in word format. 

What still bothers me is the results still don't add up to being close. 

james

On 2 Aug 2005 at 13:39, Robert Gault wrote:

Date sent:      	Tue, 02 Aug 2005 13:39:54 -0400
From:           	Robert Gault <robert.gault at worldnet.att.net>
To:             	CoCoList for Color Computer Enthusiasts 
<coco at maltedmedia.com>
Subject:        	Re: [Coco] 6309 Division instructions
Send reply to:  	CoCoList for Color Computer Enthusiasts 
<coco at maltedmedia.com>
	<mailto:coco-
request at maltedmedia.com?subject=unsubscribe>
	<mailto:coco-
request at maltedmedia.com?subject=subscribe>

> Not on my system running under Disk Basic. If regD is loaded with any
> number then DIVD # has no effect at all on regW but only regA and
> regB. If your test was made under OS-9, the results may be different
> and possibly misleading.
> 
> For example using EDT6309 my version of EDTASM the following:
> 
> START	LDD	#$BCEF
>  DIVD	#24
>  SWI
>  END
> gives
> A=$43 B=$11 DP=00 CC=$8A =ENV
> X=0000 Y=0000 U=0000 S=$1579
> PC=$56E2 V=0000 E=00 F=00
> 
> Change to LDD #24 and regA=00 regB=01 CC=$81 =EC and regW is still
> 0000.
> 
> jdaggett at gate.net wrote:
> > Sorry was a typo. Contents of D. W and D are the results. 
> > 
> > james 
> > 
> > On 1 Aug 2005 at 23:48, Robert Gault wrote:
> > 
> > Date sent:      	Mon, 01 Aug 2005 23:48:46 -0400
> > From:           	Robert Gault <robert.gault at worldnet.att.net>
> > To:             	CoCoList for Color Computer Enthusiasts 
> > <coco at maltedmedia.com>
> > Subject:        	Re: [Coco] 6309 Division instructions
> > Send reply to:  	CoCoList for Color Computer Enthusiasts 
> > <coco at maltedmedia.com>
> > 	<mailto:coco-
> > request at maltedmedia.com?subject=unsubscribe>
> > 	<mailto:coco-
> > request at maltedmedia.com?subject=subscribe>
> > 
> >>Is that a typo? Why would regW be involved with DIVD?
> >>
> >>jdaggett at gate.net wrote:
> >>
> >>
> >>>Tim 
> >>>
> >>>from the 6309 documentation I h ave the DIVD does a 16 bit by 8
> >>>signed division. The contents of W is divided by memory byte and
> >>>the quotient is stored in W and the modulo (remainder) is in D. 
> >>>
> >>>This yields +32,767/-32,768 divided by +127/-128 ranges. 
> >>>
> >>>
> >>>Initial thoughts on how to get an overflow condition would mean the
> >>>modulo would overflow or the divisor is "one"?
> >>>
> >>>james
> >>>
> >>>On 1 Aug 2005 at 20:15, tim lindner wrote:
> >>>
> >>>To:             	coco at maltedmedia.com (CoCo Mailing List)
> >>>From:           	tlindner at ix.netcom.com (tim lindner)
> >>>Date sent:      	Mon, 1 Aug 2005 20:15:58 -0700
> >>>Organization:   	Computers Suck, Inc.
> >>>Subject:        	[Coco] 6309 Division instructions
> >>>Send reply to:  	CoCoList for Color Computer Enthusiasts 
> >>><coco at maltedmedia.com>
> >>>	<mailto:coco-
> >>>request at maltedmedia.com?subject=unsubscribe>
> >>>	<mailto:coco-
> >>>request at maltedmedia.com?subject=subscribe>
> >>>
> >>>>I was testing the division instructions against my 6309 core (in
> >>>>MESS) and found something unusual.
> >>>>
> >>>>My Burke & Burke 6309 documents say that result of DIVD is a
> >>>>signed 8-bit value in register B and an unsigned remainder in
> >>>>register A.
> >>>>
> >>>>Further more it says that if the quotient overflows, the value of
> >>>>A and B will be unchanged and the V condition code will be set.
> >>>>
> >>>>But this is not exactly the behiavior I am seeing on real
> >>>>hardware.
> >>>>
> >>>>What I am seeing is a sort of two stage overflow. If the quotient
> >>>>doesn't fit in an signed 8 bit container but would fit in a
> >>>>unsigned 8 bit container, then the correct absolute value is
> >>>>wirrten to B and the V condition code is set.
> >>>>
> >>>>If the value overflows an unsgined container, the registers A and
> >>>>B set to the absolute value the the orginal numerator and the V
> >>>>condition code is set.
> >>>>
> >>>>I have not seen this behiavor described anywhere and I would be
> >>>>interested in other peoples thoughts on it.
> >>>>
> >>>>-- 
> >>>>tim lindner
> >>>>tlindner at ix.netcom.com                                   Bright
> >>>>
> >>>>-- 
> >>>>Coco mailing list
> >>>>Coco at maltedmedia.com
> >>>>http://five.pairlist.net/mailman/listinfo/coco
> >>>
> >>>
> >>>
> >>>
> >>-- 
> >>Coco mailing list
> >>Coco at maltedmedia.com
> >>http://five.pairlist.net/mailman/listinfo/coco
> > 
> > 
> > 
> > 
> 
> -- 
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco





More information about the Coco mailing list