wok view syslinux/stuff/iso2exe/a20.c @ rev 17160

syslinux/iso2exe: full zImage support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Sep 17 11:38:34 2014 +0200 (2014-09-17)
parents 3865e09ec026
children c15bb3c9e12d
line source
1 #ifndef __A20
2 #define __A20
4 #define A20HOLDBUFFER 0x80000
5 static int a20buffer = 0;
6 static void movehia20(void)
7 {
8 if ((mem.base - 0x100000UL) >= 0x10000UL) {
9 movehi();
10 return;
11 }
12 a20buffer = 1;
13 #asm
14 pusha // more than 1Mb => 286+
15 push #A20HOLDBUFFER/16
16 pop es
17 mov di, _mem // mem.base & 0xFFFF
18 mov si, #_buffer
19 mov cx, #BUFFERSZ/2
20 cld
21 rep
22 movsw
23 popa
24 #endasm
25 }
26 #define movehi movehia20
28 #define REALMODE_SWITCH _realmode_switch_a20
29 static void realmode_switch_a20(void)
30 {
31 if (!a20buffer) return;
32 #asm
33 pusha // more than 1Mb => 286+
34 xor di, di // 30
35 mov cx, #9 // 2E..1E
36 a20z1:
37 push di
38 loop a20z1
39 push #0x10
40 push di // 1A 0x100000
41 push #-1 // 18
42 push di // 16
43 push #A20HOLDBUFFER/0x10000
44 push di // 12 A20HOLDBUFFER
45 push #-1 // 10
46 mov cl, #8 // 0E..00
47 a20z2:
48 push di
49 loop a20z2
50 mov ch, #0x10000/512
51 push ss
52 pop es
53 mov si, sp
54 mov ax, #0x8793
55 mov [si+0x15], al
56 xchg [si+0x1D], al
57 xchg [si+0x1F], al // bits 24..31
58 int 0x15
59 add sp, #0x30
60 popa
61 #endasm
62 }
64 #endif