1 ; pcboot - bootable PC demo/game kernel
2 ; Copyright (C) 2018 John Tsiombikas <nuclear@member.fsf.org>
4 ; This program is free software: you can redistribute it and/or modify
5 ; it under the terms of the GNU General Public License as published by
6 ; the Free Software Foundation, either version 3 of the License, or
7 ; (at your option) any later version.
9 ; This program is distributed in the hope that it will be useful,
10 ; but WITHOUT ANY WARRANTY, without even the implied warranty of
11 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ; GNU General Public License for more details.
14 ; You should have received a copy of the GNU General Public License
15 ; along with this program. If not, see <https://www.gnu.org/licenses/>.
36 ; write 1, 2, or 3 times until we reache a 32bit-aligned dest address
40 jmp [.pre_tab + ecx * 4]
42 .pre_tab dd .main, .pre1, .pre2, .pre3
51 ; edi is 32bit-aligned here, write ecx>>2 32bit values
58 ; write any trailing bytes
60 jmp [.post_tab + ecx * 4]
62 .post_tab dd .done, .post1, .post2, .post3
73 ; same as memset but copies 16bit values, and the count is the number
74 ; of 16bit values to copy, not bytes.
94 jmp [.pre_tab + edx * 4]
96 .pre_tab dd .main, .pre1, .pre2, .pre3
99 ; same as next one, but jump to ms16main instead of falling through
101 mov [edi + ecx * 2 - 1], ah
109 ; - write low byte at edi
110 ; - write high byte at the end
111 ; - rotate by 8 for the rest
114 mov [edi + ecx * 2 - 1], ah
161 jmp [.post_tab + edx * 4]
163 .post_tab dd .done, .post1, .post2, .post3
174 ; vi:set ts=8 sts=8 sw=8 ft=nasm: