;==========================================================
;
; HEAD of x51 math library 
; 
; (C) HELIUM  
; http://helium.webz.cz/
;
; this file is not for compiling
;==========================================================

; reservovane registry v bance 0 :   R0 - R3
; organizace dat  [Lo - Hi] 

cytmp	BIT	0H		; zaloha CY		 1 bit
adrm	DATA	030H		; vysledek nasobeni      2*R2 bytes
adrmp	DATA	038H		; mezivysledek nasobeni  R2+1 bytes 
adrmi	DATA	03FH		; pomocny index	         1 byte

;==========================================================

; podprogram pro vymazani pameti
; R0 adresa, R2 pocet bytes

clear0:	clear0

;==========================================================

; podprogram pro vymazani pameti
; R1 adresa, R3 pocet bytes

clear1:	clear1

;==========================================================

; podprogram pro zkopirovani pameti  [@R1]:=[@R0]
; z [@R0] adresy na [@R1] adresu, R2 pocet bytes

copy:	copy

;==========================================================

; podpogram na porovnani dvou cisel
; adresy v @R0, @R1,  R2 pocet bytes
;
; @R0 => @R1  CY=1
; @R0 <  @R1  CY=0
; @R0 =  @R1  CY=1 & ACC=0

cmp:	cmp

;==========================================================

; podpogram na posun doleva od CY, pres CY 
; adresa v @R0,  R2 pocet bytes

rot_L:	rot_L

;==========================================================

; podpogram na posun doprava od CY, pres CY
; adresa v @R0,  R2 pocet bytes

rot_R:	rot_R

;==========================================================

; podpogram na SOUCET dvou cisel [@R0]:=[@R0]+[@R1]
; v R2 pocet bytes, vysledek je dlouhy R2+1

addm:	addm

;==========================================================
	
; podpogram na ROZDIL dvou cisel [@R0]:=[@R0]-[@R1]
; v R2 pocet bytes

subbm: subbm

;==========================================================

; podprogram soucinu 1B x xB
; [@R1] := [@R0] * R3
; R2 pocet bytes, vysledek R2+1 bytes

mul8b:	mul8b

;==========================================================	

; podprogram soucinu xB x xB
; [adrm] := [@R0] * [@R1]
; R2 pocet bytes
; R3, R4 - pomocne
; adrm, adrmp, adrmi - vysledek, pomocny mezivysledek a index

mulm:	mulm
	
;==========================================================	

; podprogram soucinu 16b x 16b
; [adrm] := [@R0] * [@R1]

mul16: mul16
	
;==========================================================	

; podprogram podilu dvou cisel o delce R2 bytes  [adrm] := [@R0] div [@R1]
; delka R2 bytes, R4 pocitadlo  
; adrmp - pomocny delenec

divm:	divm

;==========================================================	

; podprogram na prevod BIN->BCD [@R0] -> [@R1] ;   [@R1] := f( [@R0] )
; [@R0], R2 - pocet bin bytes
; [@R1], R3 - pocet bcd bytes
; R4 - pocet bits

bin2bcd:  bin2bcd

;==========================================================	

; podprogram na prevod BCD->BIN [@R1] -> [@R0] ;   [@R0] := f( [@R1] )
; [@R1], R3 - pocet bcd bytes
; [@R0], R2 - pocet bin bytes
; adrm      - pomocna promenna

bcd2bin:  bcd2bin

;==========================================================