;
; Programmodul 'XICALC' zur Aufbereitung von Daten
; fuer die anschliessende Berechnung von sin(x) / cos(x)
;
; IN reg de : Winkel x
;
; OUT var x1bog : Winkel in Bogenmass
; var x2bog : x1bog^2
; var x4bog : x1bog^4
; var x6bog : x1bog^6
; var x8bog : x1bog^8
;
; REG a,f,b,c,d,e,h,l
;
extrn multi
2000 ram equ 2000h ; Festlegung des Variablenblocks
2000 x1bog equ ram ; im RAM
2002 x2bog equ x1bog + 2
2004 x4bog equ x2bog + 2
2006 x6bog equ x4bog + 2
2008 x8bog equ x6bog + 2
C910 pi2 equ 51472 ; Konstante pi2 := PI * 2^14
0000 7A ld a,d ; Reduktion des Winkels x auf
0001 E63F and 00111111b ; 0 <- x < 90 [Grad]
0003 57 ld d,a
0004 0110C9 ld bc,pi2 ; Umrechnung von x [Grad]
0007 CD0000 call multi ; in x1bog [Bogenmass]
000A CB14 rl h ; Division <de>:=<dehl>/2^14
000C CB13 rl e
000E CB12 rl d
0010 CB14 rl h
0012 CB13 rl e
0014 CB12 rl d
0016 ED530020 ld (x1bog),de ; Ergebnis in x1lbog abspeichern
001A 42 ld b,d ; x1bog quadrieren
001B 4B ld c,e
001C CD0000 call multi
001F ED530220 ld (x2bog),de ; Ergebnis in x2bog abspeichern
0023 42 ld b,d ; x2bog quadrieren
0024 4B ld c,e
0025 CD0000 call multi
0028 CB14 rl h ; Division <de>:=<dehl>/2^15
002A CB13 rl e
002C CB12 rl d
002E ED530420 ld (x4bog),de ; Ergebnis in x4bog abspeichern
0032 CD0000 call multi ; x2bog * x4bog berechnen
0035 CB14 rl h ; Division <de>:=<dehl >/2^15
0037 CB13 rl e
0039 CB12 rl d
003B ED530620 ld (x6bog),de ; Ergebnis in x6bog abspeichern
003F CD0000 call multi ; x2bog * x6bog berechnen
0042 ED530820 ld (x8bog),de ; Ergebnis in x8bog abspeichern
; alle xibog vorbereitet
0046 C9 ret
Bild 4. XICALC bereitet vor
|