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 *mspre_tab(,%edx,4)
42 mspre_tab: .long msmain, mspre1, mspre2, mspre3
51 # edi is 32bit-aligned here, write ecx>>2 32bit values
58 # write any trailing bytes
60 jmp *mspost_tab(,%ecx,4)
62 mspost_tab: .long msdone, mspost1, mspost2, mspost3
74 # same as memset but copies 16bit values, and the count is the number
75 # of 16bit values to copy, not bytes.
95 jmp *ms16pre_tab(,%edx,4)
97 ms16pre_tab: .long ms16main, ms16pre1, ms16pre2, ms16pre3
100 # same as next one, but jump to ms16main instead of falling through
102 mov %ah, -1(%edi,%ecx,2)
110 # - write low byte at edi
111 # - write high byte at the end
112 # - rotate by 8 for the rest
115 mov %ah, -1(%edi,%ecx,2)
161 jmp *mcpost_tab(,%edx,4)
163 mcpost_tab: .long mcdone, mcpost1, mcpost2, mcpost3