forked from niofis/raybench
-
Notifications
You must be signed in to change notification settings - Fork 0
/
asmrb.fasm
102 lines (84 loc) · 1.3 KB
/
asmrb.fasm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
format ELF64
public main
WIDTH = 1280
HEIGHT = 720
MAX_DEPTH = 5
SAMLPLES = 50
section '.text' executable
extrn fopen
extrn fprintf
extrn fclose
writeppm:
lea rsi, [filemode]
lea rdi, [filename]
call fopen
mov qword [ppm], rax
mov ecx, HEIGHT
mov edx, WIDTH
lea esi, [header]
mov rdi, qword [ppm]
mov eax, 0
call fprintf
mov r8d, 123
mov ecx, 254
mov edx, 255
lea esi, [pixel]
mov rdi, qword [ppm]
mov eax, 0
call fprintf
mov rdi, qword [ppm]
call fclose
ret
main:
call writeppm
xor edi, edi
mov eax, 60
syscall
section '.data' writeable
struc Vector x, y, z
{
.x dd 0
.y dd 0
.z dd 0
common
.size = $ - .x
}
struc Camera eye, lt, rt, lb
{
.eye Vector 0.0, 4.5, 75.0
.lt Vector -8.0, 9.0, 50.0
.rt Vector 8.0, 9.0, 50.0
.lb Vector -8.0, 0.0, 50.0
common
.size = $ - .eye
}
struc Ray origin, direction
{
.origin Vector
.direction Vector
}
struc Sphere center, color, radius, is_light
{
.center Vector
.color Vector
.radius dd 0.0
.is_light dd 0
}
struc Hit dist, point, normal
{
.dist dd 0.0
.point Vector
.normal Vector
}
struc World
{
spheres_count dd 0
spheres dd 0
camera Camera
}
world World
ppm rq 1
filename db 'asmrb.ppm',0
filemode db 'w+',0
header db 'P3',0Ah,'%u %u',0Ah,'255',0Ah,0
pixel db '%u %u %u ',0