MICRONOTES
================================================================================
Note 1.0                   MUL, DIV, ASH for Falcon(+)                 6 replies
JAWS::KAISER                                          7 lines  25-MAR-1985 09:13
--------------------------------------------------------------------------------
Welcome to the Micronotes Notesfile, public repository of Micronotes written by
the OEM Technical Support Group.  They are formatted for printing.

Micronotes are numbered, and each one is in the notesfile note with the same
number (except for Micronote 1, which is the reply to this note); so for the
sake of simplicity, please don't WRITE in this file.  Feel free to REPLY,
however.
================================================================================
Note 1.1                   MUL, DIV, ASH for Falcon(+)                    1 of 6
JAWS::KAISER                                        144 lines  25-MAR-1985 09:13
--------------------------------------------------------------------------------
      +---------------+					   +-----------------+
      | d i g i t a l |					   |  uNOTE # 001    |
      +---------------+					   +-----------------+


      +----------------------------------------------------+-----------------+
      | Title: MUL,DIV and ASH Instruction for the FALCON  | Date: 13-APR-84 |
      |			 and the FALCON-PLUS		   |		     |
      +----------------------------------------------------+-----------------+
      | Originator: Charlie Giorgetti			   | Page 1 of 4     |
      +----------------------------------------------------+-----------------+


      There  is no hardware support for the EIS, FIS, or FPP instruction sets.
      For FALCON SBC-11/21 applications that need the ability to  perform  the
      EIS  instructions MUL, DIV, and ASH, equivalent software routines can be
      substituted.  These callable routines  do	 not  do  any  form  of	 error
      checking.	  A  user should be aware that extensive use of these software
      routines	for  hardware  instructions  will  have	  impact   on	system
      performance.  These routines can be incorporated into an application and
      called as a subroutine.  The calling sequence for the subroutines can be
      set-up  in  a macro.  The following is a list of each of the subroutines
      and the macros that are used to set-up and call the software  MUL,  DIV,
      and ASH routines.

									Page 2


	The following macro and subroutine can be  used	 to  perform  the  MUL
      instruction in software:

	       .MACRO  SMUL    A,B,HI,LO

		MOV	A,-(SP)	    ; Push a multiplier onto the stack
		MOV	B,-(SP)	    ; Push the other multiplier as well
		JSR	PC,$MUL	    ; Call the MUL subroutine
		MOV	(SP)+,HI    ; Get the most significant part of
				      the result
		MOV	(SP)+,LO    ; Get the least significant part of
				      the result

	       .ENDM

	 $MUL:: MOV	R0,-(SP)    ; Save some work registers
		MOV	R1,-(SP)
		MOV	10(SP),R1   ; Obtain the value of A from the stack
		MOV	#21,-(SP)   ; Initialize the shift counter
		CLR	R0	    ; Initialize the high 16-bit accumulator
	   10$: ROR	R0	    ; Perform multiplication
		ROR	R1
		BCC	20$
		ADD	10(SP),R0
		CLC
	   20$: DEC	(SP)	    ; Bump the shift counter
		BNE	10$	    ; Not done ?
		TST	(SP)+	    ; Romove the counter from the stack
		MOV	R1,10(SP)   ; Save the low 16-bit value on the stack
		MOV	R0,6(SP)    ; Save the high 16-bit value on the stack
		MOV	(SP)+,R1    ; Restore the work registers
		MOV	(SP)+,R0
		RTS	PC	    ; Return

									Page 3


	The following macro and subroutine can be  used	 to  perform  the  DIV
      instruction in software:

		.MACRO	SDIV	DIVSOR,DIVHI,DIVLO,REM,QUO

		MOV	DIVSOR,-(SP); Push the divisor onto the stack
		MOV	DIVHI,-(SP) ; Push the upper 16-bits of the dividend
		MOV	DIVLO,-(SP) ; Push the lower 16-bits of the dividend
		JSR	PC,$DIV	    ; Call the DIV subroutine
		MOV	(SP)+,REM   ; Get the remainder
		MOV	(SP)+,QUO   ; Get the quotient

		.ENDM

	 $DIV:: MOV	R5,-(SP)    ; Get some work registers
		MOV	R4,-(SP)
		MOV	R3,-(SP)
		MOV	R0,-(SP)
		MOV	14.(SP),R3  ; Get the divisor from the stack
		MOV	12.(SP),R4  ; Get the high 16-bits of the dividend
		MOV	10.(SP),R5  ; as well as low 16-bits
		CLR	R0	    ; Clear an accumulator
		MOV	#32.,-(SP)  ; Shift counter
	    1$: ASL	R5	    ; Perform the division
		ROL	R4
		ROL	R0
		CMP	R0,R3
		BLO	2$
		SUB	R3,R0
		INC	R5
	    2$: DEC	(SP)
		BNE	1$	    ; Not done ?
		TST	(SP)+	    ; Remove the counter from the stack
		MOV	R0,12.(SP)  ; Store the remainder on the stack
		MOV	R5,14.(SP)  ; Store the quotient as well
		MOV	(SP)+,R0    ; Restore the work registers
		MOV	(SP)+,R3
		MOV	(SP)+,R4
		MOV	(SP)+,R5
		MOV	(SP)+,(SP)  ; Update the return PC
		RTS	PC	    ; Return

									Page 4


	The following macro and subroutine can be  used	 to  perform  the  ASH
      instruction in software:

		.MACRO	SASH	COUNT,VAL

		MOV	COUNT,-(SP) ; Push the shift count
		MOV	VAL,-(SP)   ; Push what is to be shifted
		JSR	PC,$ASH	    ; Call the ASH subroutine
		MOV	(SP)+,VAL   ; Get the results of the shift

		.ENDM

	$SASH:: MOV	R0,-(SP)    ; Get a couple of work registers
		MOV	R1,-(SP)
		MOV	6(SP),R0    ; R0 = value to be shifted
		MOV	8.(SP),R1   ; R1 = direction and shift count
		BIC	#^C<77>,R1
		BEQ	20$	    ; Get out if no shifting
		CMP	R1,#31.	    ; What direction is the shift
		BGT	10$	    ; go to the corection direction shift
	    5$: ASL	R0
		DEC	R1
		BNE	5$
		BR	20$
	   10$: NEG	R1
		BIC	#^C<77>,R1
	   11$: ASR	R0
		DEC	R1
		BNE	11$
	   20$: MOV	R0,8.(SP)   ; Store the shifted result on the stack
		MOV	(SP)+,R1    ; Restore the work registers
		MOV	(SP)+,R0
		MOV	(SP)+,(SP)  ; Update the return PC
		RTS	PC	    ; Return
================================================================================
Note 1.2                   MUL, DIV, ASH for Falcon(+)                    2 of 6
FURILO::JACKSON                                      13 lines   5-SEP-1985 13:50
--------------------------------------------------------------------------------
There is a small problem with this notesfile in that I don't want 
people to WRITE  notes in this file.  (there is good reason to this that
is mentioned in 1.0)  Anyway, there may be issues that the users of this
notesfile need to be concerned about, therefore I am creating a new 
notesfile for this purpose.

The notesfile is located at:

		krystl::sys$notes:micronote_questions.not

for those with pre-V4... KRYSTL::"SYS$NOTES:MICRONOTE_QUESTIONS.NOT"

-bill
================================================================================
Note 1.3                   MUL, DIV, ASH for Falcon(+)                    3 of 6
KRYSTL::SYSTEM                                       21 lines  10-JAN-1986 13:13
--------------------------------------------------------------------------------
This notefile will be converted to the new VAX Notes format on Saturday,
25 January.  This means that VNotes and Notes-11 users will be unable to
access the file after that date.  There is an effort underway to upgrade
Notes-11 so that it can access new-format files.  However, it is currently
unknown when this new Notes-11 will be available.

Also, VAX Notes requires VMS V4.2 (at least) to be installed on a system.
See the notefile CLT""::SYS$NOTES:NOTESUTIL.NOT for more information on
VAX Notes.  In particular, note 530 explains how to install it, and gives
the location of documentation.

VAX Notes is currently scheduled for external field text on 17 January.
At that point, the newest field-test version of VAX Notes will be made
available internally.  If the external field test is delayed, the
conversion of this file will be delayed also.

After the conversion, the old file will be write-locked.  The last note in
the old file will contain information on the converted file.

						Bill Jackson
						Keeper of Notes on KRYSTL
================================================================================
Note 1.4                   MUL, DIV, ASH for Falcon(+)                    4 of 6
PULSAR::SILVER                                       10 lines  12-JAN-1986 16:25
--------------------------------------------------------------------------------
Why????  Don't you want PDP users to be able to take advantage of your
work??

There are lots of sites around who use NOTES-11 on PDP systems, since they
don't have access to VMS systems.

Why not wait a bit longer until the new NOTES-11 is available?

- Craig Silver

================================================================================
Note 1.5                   MUL, DIV, ASH for Falcon(+)                    5 of 6
FURILO::JACKSON                                      12 lines  13-JAN-1986 08:34
--------------------------------------------------------------------------------
For the past few months, I've been running a batch job that checks for 
open notes files on this system.  (there are several).  Anyway, most of the
users are now accessing this file with VNOTES (you can tell by the process
name of the process that opens the file (either FAL or NOTES_XXXX_X))


Unfortunately, both notes systems are mutually exclusive.  I created another
files (MICRONOTE_QUESTIONS) a while ago for discussion of this very issue,
noone responded.

-bill jackson

================================================================================
Note 1.6                   MUL, DIV, ASH for Falcon(+)                    6 of 6
FURILO::JACKSON                                       8 lines  21-JAN-1986 11:57
--------------------------------------------------------------------------------
You may have noticed that the VNOTES server is not running on this machine.
 This is because we have installed VMS V4.2 on this system and have not
(or do not intend to) reinsall VNOTES on this system.

Notesfile conversion is taking place this saturday.......


-bill