home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 55
/
Amiga_Dream_55.iso
/
RISCOS
/
MAGAZINE
/
NEWS
/
3DENGI.ZIP
/
3DEngine
/
s
/
fpuset
next >
Wrap
Text File
|
1998-08-01
|
5KB
|
260 lines
AREA |C$$code|, CODE, READONLY
EXPORT fpusetup
EXPORT HackDiv
EXPORT Screen_Clear8
EXPORT Screen_Clear16
EXPORT Screen_Clear24
; Setup the FPU to not complain about overflows, underflows, infinite values
; etc etc. This is what the PC needed. ;-)
fpusetup
STMFD r13!, {r0-r12,r14}
RFS r0
BIC r0,r0,#31<<16
; BIC r0,r0,#1<<8
; BIC r0,r0,#10<<8
WFS r0
LDMFD r13!, {r0-r12,pc}^ ; return
[ 0 = 1
HackDiv
; Divide r0-r1 by r2. We know that r2 > 0 and -65536 < r0-r1 < 65536
MOV r12,#0
SUBS r3,r0,r1
RSBLT r3,r3,#0
SUBS r3,r3,r2,LSL#15
ADDLT r3,r3,r2,LSL#15
ADDGE r12,r12,#1<<15
SUBS r3,r3,r2,LSL#14
ADDLT r3,r3,r2,LSL#14
ADDGE r12,r12,#1<<14
SUBS r3,r3,r2,LSL#13
ADDLT r3,r3,r2,LSL#13
ADDGE r12,r12,#1<<13
SUBS r3,r3,r2,LSL#12
ADDLT r3,r3,r2,LSL#12
ADDGE r12,r12,#1<<12
SUBS r3,r3,r2,LSL#11
ADDLT r3,r3,r2,LSL#11
ADDGE r12,r12,#1<<11
SUBS r3,r3,r2,LSL#10
ADDLT r3,r3,r2,LSL#10
ADDGE r12,r12,#1<<10
SUBS r3,r3,r2,LSL#9
ADDLT r3,r3,r2,LSL#9
ADDGE r12,r12,#1<<9
SUBS r3,r3,r2,LSL#8
ADDLT r3,r3,r2,LSL#8
ADDGE r12,r12,#1<<8
SUBS r3,r3,r2,LSL#7
ADDLT r3,r3,r2,LSL#7
ADDGE r12,r12,#1<<7
SUBS r3,r3,r2,LSL#6
ADDLT r3,r3,r2,LSL#6
ADDGE r12,r12,#1<<6
SUBS r3,r3,r2,LSL#5
ADDLT r3,r3,r2,LSL#5
ADDGE r12,r12,#1<<5
SUBS r3,r3,r2,LSL#4
ADDLT r3,r3,r2,LSL#4
ADDGE r12,r12,#1<<4
SUBS r3,r3,r2,LSL#3
ADDLT r3,r3,r2,LSL#3
ADDGE r12,r12,#1<<3
SUBS r3,r3,r2,LSL#2
ADDLT r3,r3,r2,LSL#2
ADDGE r12,r12,#1<<2
SUBS r3,r3,r2,LSL#1
ADDLT r3,r3,r2,LSL#1
ADDGE r12,r12,#1<<1
SUBS r3,r3,r2,LSL#0
ADDLT r3,r3,r2,LSL#0
ADDGE r12,r12,#1<<0
SUBS r0,r0,r1
MOVGE r0,r12
RSBLT r0,r12,#0
MOVS PC,R14
|
HackDiv
; Divide r0-r1 by r2. We know that r2 > 0 and -65536 < r0-r1 < 65536
MOV r12,#0
SUBS r3,r0,r1
RSBLT r3,r3,#0
CMP r3,r2,LSL#9
BLE hd_mid
SUBS r3,r3,r2,LSL#15
ADDLT r3,r3,r2,LSL#15
ADDGE r12,r12,#1<<15
SUBS r3,r3,r2,LSL#14
ADDLT r3,r3,r2,LSL#14
ADDGE r12,r12,#1<<14
SUBS r3,r3,r2,LSL#13
ADDLT r3,r3,r2,LSL#13
ADDGE r12,r12,#1<<13
SUBS r3,r3,r2,LSL#12
ADDLT r3,r3,r2,LSL#12
ADDGE r12,r12,#1<<12
SUBS r3,r3,r2,LSL#11
ADDLT r3,r3,r2,LSL#11
ADDGE r12,r12,#1<<11
SUBS r3,r3,r2,LSL#10
ADDLT r3,r3,r2,LSL#10
ADDGE r12,r12,#1<<10
SUBS r3,r3,r2,LSL#9
ADDLT r3,r3,r2,LSL#9
ADDGE r12,r12,#1<<9
hd_mid
SUBS r3,r3,r2,LSL#8
ADDLT r3,r3,r2,LSL#8
ADDGE r12,r12,#1<<8
SUBS r3,r3,r2,LSL#7
ADDLT r3,r3,r2,LSL#7
ADDGE r12,r12,#1<<7
SUBS r3,r3,r2,LSL#6
ADDLT r3,r3,r2,LSL#6
ADDGE r12,r12,#1<<6
SUBS r3,r3,r2,LSL#5
ADDLT r3,r3,r2,LSL#5
ADDGE r12,r12,#1<<5
SUBS r3,r3,r2,LSL#4
ADDLT r3,r3,r2,LSL#4
ADDGE r12,r12,#1<<4
SUBS r3,r3,r2,LSL#3
ADDLT r3,r3,r2,LSL#3
ADDGE r12,r12,#1<<3
SUBS r3,r3,r2,LSL#2
ADDLT r3,r3,r2,LSL#2
ADDGE r12,r12,#1<<2
SUBS r3,r3,r2,LSL#1
ADDLT r3,r3,r2,LSL#1
ADDGE r12,r12,#1<<1
SUBS r3,r3,r2,LSL#0
ADDLT r3,r3,r2,LSL#0
ADDGE r12,r12,#1<<0
SUBS r0,r0,r1
MOVGE r0,r12
RSBLT r0,r12,#0
MOVS PC,R14
]
Screen_Clear24
; r0 = char *screen_ptr
; r1 = int width
; r2 = int height
STMFD r13!,{r4-r11,r14}
MOV r12,#0 ; r12 = Colour Reg
MOV r14,r2 ; r14 = Bresenham
MOV r3,r2
sclp24
MOV r4,r1
MOV r11,r12
MOV r10,r12
MOV r9,r12
MOV r8,r12
MOV r7,r12
MOV r6,r12
MOV r5,r12
scrlp24
SUBS r4,r4,#8
STMGEIA r0!,{r5-r12}
BGT scrlp24
SUBS r4,r4,#4
STMGEIA r0!,{r9-r12}
SUBS r4,r4,#2
STMGEIA r0!,{r11-r12}
SUBS r4,r4,#1
STRGE r12,[r0],#4
SUBS r14,r14,#256
ADDLT r14,r14,r2
ADDLT r12,r12,#1
SUBS r3,r3,#1
BGT sclp24
LDMFD r13!,{r4-r11,PC}^
Screen_Clear16
; r0 = char *screen_ptr
; r1 = int width
; r2 = int height
STMFD r13!,{r4-r11,r14}
MOV r12,#0 ; r12 = Colour Reg
MOV r14,r2 ; r14 = Bresenham
MOV r3,r2
sclp16
MOV r4,r1
MOV r11,r12
MOV r10,r12
MOV r9,r12
MOV r8,r12
MOV r7,r12
MOV r6,r12
MOV r5,r12
scrlp16
SUBS r4,r4,#8*2
STMGEIA r0!,{r5-r12}
BGT scrlp16
SUBS r4,r4,#4*2
STMGEIA r0!,{r9-r12}
SUBS r4,r4,#2*2
STMGEIA r0!,{r11-r12}
SUBS r4,r4,#1*2
STRGE r12,[r0],#4
SUBS r14,r14,#32
ADDLT r14,r14,r2
ADDLT r12,r12,#1
ADDLT r12,r12,#1<<16
SUBS r3,r3,#1
BGT sclp16
LDMFD r13!,{r4-r11,PC}^
Screen_Clear8
; r0 = char *screen_ptr
; r1 = int width
; r2 = int height
STMFD r13!,{r4-r11,r14}
MOV r12,#4 ; r12 = Colour Reg
ORR r12,r12,r12,LSL#8
ORR r12,r12,r12,LSL#16
MOV r14,r2 ; r14 = Bresenham
MOV r3,r2
sclp8
MOV r4,r1
MOV r11,r12
MOV r10,r12
MOV r9,r12
MOV r8,r12
MOV r7,r12
MOV r6,r12
MOV r5,r12
scrlp8
SUBS r4,r4,#8*4
STMGEIA r0!,{r5-r12}
BGT scrlp8
ADDLT r4,r4,#8*4
TST r4,#16
STMNEIA r0!,{r9-r12}
TST r4,#8
STMNEIA r0!,{r11-r12}
TST r4,#4
STRNE r12,[r0],#4
SUBS r14,r14,#12
ADR r9,backtab
LDRLTB r12,[r9,r12,LSR#24]
ADDLT r14,r14,r2
ORRLT r12,r12,r12,LSL#8
ORRLT r12,r12,r12,LSL#16
SUBS r3,r3,#1
BGT sclp8
LDMFD r13!,{r4-r11,PC}^
backtab
DCB 0x01,0x02,0x03,0x04, 0x05,0x06,0x07,0x10
DCB 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00
DCB 0x11,0x12,0x13,0x14, 0x15,0x16,0x17,0x00
END