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