wok annotate syslinux/stuff/iso2exe/a20.c @ rev 17161
syslinux/iso2exe: full zImage support (again)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Wed Sep 17 15:21:35 2014 +0200 (2014-09-17) |
parents | 3e7ad70145ce |
children | 799c2ec31b04 |
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@17161 | 8 if ((mem.base >> 16) != 0x10) { |
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@17161 | 28 static void dosshutdowna20(void) |
pascal@16069 | 29 { |
pascal@17161 | 30 if (a20buffer) { |
pascal@16069 | 31 #asm |
pascal@17160 | 32 pusha // more than 1Mb => 286+ |
pascal@16069 | 33 xor di, di // 30 |
pascal@16069 | 34 mov cx, #9 // 2E..1E |
pascal@16069 | 35 a20z1: |
pascal@16069 | 36 push di |
pascal@16069 | 37 loop a20z1 |
pascal@16069 | 38 push #0x10 |
pascal@16069 | 39 push di // 1A 0x100000 |
pascal@16069 | 40 push #-1 // 18 |
pascal@16069 | 41 push di // 16 |
pascal@16069 | 42 push #A20HOLDBUFFER/0x10000 |
pascal@16069 | 43 push di // 12 A20HOLDBUFFER |
pascal@16069 | 44 push #-1 // 10 |
pascal@16069 | 45 mov cl, #8 // 0E..00 |
pascal@16069 | 46 a20z2: |
pascal@16069 | 47 push di |
pascal@16069 | 48 loop a20z2 |
pascal@16069 | 49 mov ch, #0x10000/512 |
pascal@16069 | 50 push ss |
pascal@16069 | 51 pop es |
pascal@16069 | 52 mov si, sp |
pascal@16069 | 53 mov ax, #0x8793 |
pascal@16069 | 54 mov [si+0x15], al |
pascal@16069 | 55 xchg [si+0x1D], al |
pascal@16069 | 56 xchg [si+0x1F], al // bits 24..31 |
pascal@16069 | 57 int 0x15 |
pascal@16069 | 58 add sp, #0x30 |
pascal@16069 | 59 popa |
pascal@16069 | 60 #endasm |
pascal@17161 | 61 } |
pascal@17161 | 62 dosshutdown(); |
pascal@16069 | 63 } |
pascal@16069 | 64 |
pascal@17161 | 65 #define dosshutdown dosshutdowna20 |
pascal@17161 | 66 |
pascal@16069 | 67 #endif |