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