JPC-RR r11.7
[jpcrr.git] / misc / storture.asm
blob0eeee285e8744c070c9272ed6e508ffa0aa52696
1 SECTION .text
2 ORG 0x100
4 main:
5 MOV AX, DS
6 MOV FS, AX
7 CALL install_handlers
9 MOV DWORD [ES:entropy_low], 0
10 MOV DWORD [ES:entropy_high], 0
11 .loop:
12 CALL do_vga_wait
14 CLI
15 MOV AX, 0xB800
16 MOV DS, AX
17 MOV AX, FS
18 MOV ES, AX
20 MOV AH, 0x07
21 MOV AL, [ES:entropy_low + 0]
22 MOV [10], AX
23 MOV AL, [ES:entropy_low + 1]
24 MOV [12], AX
25 MOV AL, [ES:entropy_low + 2]
26 MOV [14], AX
27 MOV AL, [ES:entropy_low + 3]
28 MOV [16], AX
29 MOV AL, [ES:entropy_high + 0]
30 MOV [20], AX
31 MOV AL, [ES:entropy_high + 1]
32 MOV [22], AX
33 MOV AL, [ES:entropy_high + 2]
34 MOV [24], AX
35 MOV AL, [ES:entropy_high + 3]
36 MOV [26], AX
37 STI
39 JMP .loop
42 install_handlers:
43 MOV AX, 0
44 MOV DS, AX
45 MOV AX, [32]
46 MOV [ES:old_irq0_off], AX
47 MOV AX, [34]
48 MOV [ES:old_irq0_seg], AX
49 MOV AX, [36]
50 MOV [ES:old_irq1_off], AX
51 MOV AX, [38]
52 MOV [ES:old_irq1_seg], AX
53 MOV AX, CS
54 MOV [34], AX
55 MOV [38], AX
56 MOV AX, irq0_handler
57 MOV [32], AX
58 MOV AX, irq1_handler
59 MOV [36], AX
60 MOV AX, CS
61 MOV DS, AX
62 RET
64 irq0_handler:
65 PUSH EAX
66 PUSH EDX
67 RDTSC
68 ADD [ES:entropy_low], EAX
69 ADC [ES:entropy_high], EDX
70 ADD DWORD [ES:entropy_low], 0x57
71 ADC DWORD [ES:entropy_high], 0
72 POP EDX
73 POP EAX
74 MOV AL, 0x20
75 OUT 0x20, AL
76 STI
77 IRET
78 JMP FAR [ES:old_irq0]
80 irq1_handler:
81 PUSH EAX
82 PUSH EDX
83 RDTSC
84 ADD [ES:entropy_low], EAX
85 ADC [ES:entropy_high], EDX
86 ADD DWORD [ES:entropy_low], 0x163
87 ADC DWORD [ES:entropy_high], 0
88 POP EDX
89 POP EAX
90 IN AL, 0x60
91 IN AL, 0x60
92 IN AL, 0x60
93 IN AL, 0x60
94 IN AL, 0x60
95 IN AL, 0x60
96 IN AL, 0x60
97 IN AL, 0x60
98 IN AL, 0x60
99 IN AL, 0x60
100 IN AL, 0x60
101 IN AL, 0x60
102 IN AL, 0x60
103 IN AL, 0x60
104 IN AL, 0x60
105 IN AL, 0x60
106 IN AL, 0x60
107 IN AL, 0x60
108 MOV AL, 0x20
109 OUT 0x20, AL
111 IRET
112 JMP FAR [ES:old_irq1]
114 do_vga_wait:
115 .l1:
116 MOV DX, 0x3DA
117 IN AL, DX
118 TEST AL, 0x0F
119 JNZ .l1
120 .l2:
121 IN AL, DX
122 TEST AL, 0x0F
123 JZ .l2
124 RDTSC
125 ADD [ES:entropy_low], EAX
126 ADC [ES:entropy_high], EDX
127 ADD DWORD [ES:entropy_low], 0x246
128 ADC DWORD [ES:entropy_high], 0
132 SECTION .data
133 old_irq0:
134 old_irq0_off:
135 DW 0
136 old_irq0_seg:
137 DW 0
138 old_irq1:
139 old_irq1_off:
140 DW 0
141 old_irq1_seg:
142 DW 0
144 entropy_low:
145 DB 0, 0, 0, 0
146 entropy_high:
147 DB 0, 0, 0, 0