]> git.lizzy.rs Git - nyax.git/blob - stage3/paging.asm
3b4d3640a139a6085fe6984ab2719b30e8c6d423
[nyax.git] / stage3 / paging.asm
1 global paging
2 extern print_hex, print_chr, newline, print_dec, print_str
3 global paging
4
5 section .data
6
7 pagebuf:
8         .ptr: dq 0x5000
9         .size: dq 0x3000
10         .used: dq 0
11
12 section .text
13 alloc:
14         mov rdi, .msg
15         call print_str
16         jmp $
17 .msg: db "cock", 10, 0
18
19 tables:
20 ; level 4
21         mov rax, 0xfff
22         not rax         ; offset mask
23
24         mov rbx, -1     ; low bits mask
25         shl rbx, 3      ;
26
27         xor rcx, rcx
28
29         mov r14, r10
30         mov r13, r10
31         mov r12, r10
32         mov r11, r10
33
34         not rcx               ; negate remainder mask
35         and r14, rcx          ; apply remainder mask
36         mov rcx, -1           ; reset remainder mask
37         shl rcx, 12+9+9+9     ; update remainder mask
38
39         shr r14, 12+9+9+9-3   ; divide
40         and r14, rbx          ; clear lower bits
41
42         mov rdx, 0x1000       ; offset
43         and rdx, rax          ; offset mask
44         add r14, rdx          ; add offset
45
46         not rcx               ; negate remainder mask
47         and r13, rcx          ; apply remainder mask
48         mov rcx, -1           ; reset remainder mask
49         shl rcx, 12+9+9       ; update remainder mask
50
51         shr r13, 12+9+9-3     ; divide
52         and r13, rbx          ; clear lower bits
53
54         mov rdx, [r14]        ; offset
55         jnz .exist3
56         call alloc
57 .exist3:
58         and rdx, rax          ; offset mask
59         add r13, rdx          ; add offset
60
61
62         not rcx               ; negate remainder mask
63         and r12, rcx          ; apply remainder mask
64         mov rcx, -1           ; reset remainder mask
65         shl rcx, 12+9         ; update remainder mask
66
67         shr r12, 12+9-3       ; divide
68         and r12, rbx          ; clear lower bits
69
70         mov rdx, [r13]        ; offset
71         jnz .exist2
72         call alloc
73 .exist2:
74         and rdx, rax          ; offset mask
75         add r12, rdx          ; add offset
76
77
78         not rcx               ; negate remainder mask
79         and r11, rcx          ; apply remainder mask
80
81         mov rcx, -1           ; reset remainder mask
82         shl rcx, 12           ; update remainder mask
83
84         shr r11, 12-3         ; divide
85         and r11, rbx          ; clear lower bits
86
87         mov rdx, [r12]        ; offset
88         jnz .exist1
89         call alloc
90 .exist1:
91         and rdx, rax          ; offset mask
92         add r11, rdx          ; add offset
93
94         ret
95
96 ; level1
97         mov rax, r11
98         xor rdx, rdx
99         mov rbx, 8
100         mul rbx
101         mov r11, rax
102         add r11, [r12]
103         sub r11, 3
104
105         ret
106
107 space:
108         mov dil, ' '
109         jmp print_chr
110
111 paging:
112         mov r8, 0x0500              ; start of extended memory map
113         movzx r9, word[0x1000-10-2] ; number of map entries
114
115         mov r15, pagebuf
116
117 .loop:
118         ;mov r10, [r8]
119         ;call tables
120
121         mov r10, 0xfffff
122         call tables
123
124         mov rdi, r14
125         call print_hex
126         call space
127
128         mov rdi, r13
129         call print_hex
130         call space
131
132         mov rdi, r12
133         call print_hex
134         call space
135
136         mov rdi, r11
137         call print_hex
138         call space
139
140         mov rdi, [r11]
141         call print_hex
142
143         jmp $
144
145         mov rdi, r12
146         call print_hex
147         call space
148
149         mov rdi, r11
150         call print_hex
151         call space
152
153         mov rdi, r10
154         call print_hex
155         call space
156
157
158
159         call newline
160
161         jmp $
162
163         ;jmp $
164
165         ;mov rcx, 1 << 63
166         ;or rdi, rcx
167         ;call print_hex
168
169         ;mov dil, ' '
170         ;call print_chr
171
172         ;mov rax, [rsp]
173         ;mov rdi, [rax+8]
174
175         ;mov rcx, 1 << 63
176         ;or rdi, rcx
177         ;call print_hex
178
179         ;mov dil, ' '
180         ;call print_chr
181
182         ; mov rax, [rsp]
183         ;xor rdi, rdi
184         ;mov edi, [rax+16]
185         ;call print_dec
186
187         ;call newline
188
189         ;pop rax
190         add r8, 24
191
192         ;pop rbx
193
194         dec r9
195         jnz .loop
196
197         jmp $
198
199         ret