wok annotate linld/stuff/tobzimage.S @ rev 19357
Up p7zip (16.02)
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jul 30 10:07:40 2016 +0200 (2016-07-30) |
parents | 1c8a113c536a |
children | 1dce8e8602f2 |
rev | line source |
---|---|
pascal@19206 | 1 |
pascal@19203 | 2 #define REALMODE_SWITCH |
pascal@19203 | 3 #define SHUTDOWNDOS |
pascal@19206 | 4 #define ELKS_SUPPORT |
pascal@19206 | 5 #define LINUX001_SUPPORT |
pascal@19203 | 6 |
pascal@18228 | 7 .code16 |
pascal@18228 | 8 .org 0 |
pascal@18228 | 9 |
pascal@19203 | 10 #define CODE32_START 0x100000 |
pascal@18228 | 11 jmp start |
pascal@18228 | 12 .ascii "HdrS" |
pascal@18228 | 13 .word 0x200 # version |
pascal@18228 | 14 .long 0 # realmode_swtch |
pascal@18228 | 15 .word 0x1000 # start_sys_seg |
pascal@18228 | 16 .word kernel_version |
pascal@18228 | 17 .byte 0 # type of loader |
pascal@18228 | 18 .byte 1 # loadflags |
pascal@18228 | 19 .word 0x8000 # setup_move_size |
pascal@19203 | 20 .long CODE32_START # code32_start |
pascal@18228 | 21 .long 0 # ramdisk_image |
pascal@18228 | 22 .long 0 # ramdisk_size |
pascal@18228 | 23 .long 0 # bootsect_kludge |
pascal@18228 | 24 .word 0 # heap_end_ptr 2.01+, patched by bootloader |
pascal@19203 | 25 |
pascal@18228 | 26 start: |
pascal@18228 | 27 pushf |
pascal@18228 | 28 pushw %cs |
pascal@18228 | 29 pushw $0 |
pascal@18228 | 30 pushaw |
pascal@19203 | 31 xorw %di, %di |
pascal@19203 | 32 .byte 0x66, 0xC7, 0x05 # movl $?, (%di) |
pascal@18229 | 33 rep |
pascal@18229 | 34 movsw |
pascal@18229 | 35 popaw |
pascal@19206 | 36 doiret: |
pascal@18229 | 37 iret |
pascal@19203 | 38 pushw %ds |
pascal@18228 | 39 pushw %di |
pascal@19203 | 40 #ifdef REALMODE_SWITCH |
pascal@19203 | 41 movw $0x0208, %si |
pascal@19203 | 42 lodsw |
pascal@19203 | 43 orw (%si), %ax |
pascal@19203 | 44 jz norealmode_switch |
pascal@19203 | 45 lcallw *-2(%si) |
pascal@19203 | 46 norealmode_switch: |
pascal@19203 | 47 #endif |
pascal@19203 | 48 |
pascal@19203 | 49 #ifdef SHUTDOWNDOS |
pascal@19203 | 50 xorw %si, %si |
pascal@19203 | 51 movw %si, %ds # %ds = 0 |
pascal@19203 | 52 pushl 4(%si) |
pascal@19206 | 53 movw %sp, %cs:loadsp19+1(%si) |
pascal@19206 | 54 cmpb $0xF0, 7(%si) |
pascal@19203 | 55 jnb notdos |
pascal@19203 | 56 movw $step19, 4(%si) |
pascal@19203 | 57 movw %cs, 6(%si) |
pascal@19203 | 58 pushfw |
pascal@19203 | 59 popw %ax |
pascal@19203 | 60 incb %ah # set TF |
pascal@19203 | 61 pushw %ax |
pascal@19203 | 62 popfw |
pascal@19203 | 63 ljmp *4*0x19(%si) |
pascal@19203 | 64 step19: |
pascal@19203 | 65 pushw %si |
pascal@19203 | 66 pushw %ds |
pascal@19203 | 67 movw %sp, %si |
pascal@19203 | 68 ldsw %ss:4(%si), %si |
pascal@19203 | 69 cmpw $0x19CD, (%si) |
pascal@19203 | 70 popw %ds |
pascal@19203 | 71 popw %si |
pascal@19206 | 72 jne doiret |
pascal@19203 | 73 xorw %si, %si |
pascal@19203 | 74 mov %si, %ds |
pascal@19203 | 75 popl 4*0x19(%si) |
pascal@19203 | 76 notdos: |
pascal@19203 | 77 loadsp19: |
pascal@19206 | 78 movw $0, %sp |
pascal@19203 | 79 popl 4(%si) |
pascal@19203 | 80 pushw %ss |
pascal@19203 | 81 popw %ds |
pascal@19206 | 82 #else |
pascal@19206 | 83 xorw %si, %si |
pascal@19203 | 84 #endif |
pascal@19206 | 85 #if defined(ELKS_SUPPORT) || defined(LINUX001_SUPPORT) |
pascal@19206 | 86 movw %sp, %bx |
pascal@19206 | 87 #endif |
pascal@18228 | 88 movw $9, %cx |
pascal@18228 | 89 z1: |
pascal@19203 | 90 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 0000 |
pascal@18228 | 91 loop z1 |
pascal@18228 | 92 movw $0x9301, %ax |
pascal@19203 | 93 cwd |
pascal@19203 | 94 pushw %ax # 9301 |
pascal@19206 | 95 pushw %si # 0000 |
pascal@19203 | 96 pushw %dx # FFFF |
pascal@19206 | 97 pushw %si # 0000 |
pascal@18228 | 98 movb 0x216, %al |
pascal@19203 | 99 pushw %ax # 93xx |
pascal@19206 | 100 pushw %si # 0000 |
pascal@19203 | 101 pushw %dx # FFFF |
pascal@18228 | 102 movb $8, %cl |
pascal@18228 | 103 z2: |
pascal@19203 | 104 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 |
pascal@18228 | 105 loop z2 |
pascal@19203 | 106 movw $0x200, %di |
pascal@18228 | 107 movw -12(%di), %dx |
pascal@19203 | 108 pushw %ss |
pascal@19203 | 109 popw %es |
pascal@19203 | 110 movw %sp, %si |
pascal@18228 | 111 mvlp: |
pascal@18228 | 112 movw $0x8000, %cx |
pascal@18228 | 113 movb $0x87, %ah |
pascal@18228 | 114 int $0x15 |
pascal@18228 | 115 incw 20(%si) |
pascal@18228 | 116 incw 28(%si) |
pascal@19208 | 117 subw $0x1000, %dx |
pascal@18228 | 118 ja mvlp |
pascal@19203 | 119 addw $48, %sp |
pascal@19206 | 120 #ifdef ELKS_SUPPORT |
pascal@19206 | 121 //cmpl $0x534B4C45, -26(%di) |
pascal@19208 | 122 movw $0x100, %cx |
pascal@19206 | 123 elks_patch: |
pascal@19206 | 124 jmp notelks |
pascal@19206 | 125 movb %ch, 23(%bx) |
pascal@19206 | 126 movw %cx, %es |
pascal@19206 | 127 pushw %di |
pascal@19206 | 128 xorw %di, %di |
pascal@19206 | 129 xorw %si, %si |
pascal@19206 | 130 movb $0x6, %ch |
pascal@19206 | 131 rep |
pascal@19206 | 132 movsw |
pascal@19206 | 133 popw %di |
pascal@19206 | 134 pushw %es |
pascal@19206 | 135 popw %ds |
pascal@19206 | 136 notelks: |
pascal@19206 | 137 #endif |
pascal@19206 | 138 movw $0x400, %si |
pascal@19203 | 139 decb -15(%di) |
pascal@19206 | 140 #ifdef LINUX001_SUPPORT |
pascal@19206 | 141 //cmpw $0x3AE8, 0x3F(%si) |
pascal@19206 | 142 linux001_patch: |
pascal@19206 | 143 jmp notlnx001 |
pascal@19206 | 144 movb $0x42, (%bx) |
pascal@19206 | 145 xorw %di, %di |
pascal@19208 | 146 # ifndef ELKS_SUPPORT |
pascal@19206 | 147 movw $0x100, %cx |
pascal@19208 | 148 # endif |
pascal@19206 | 149 rep |
pascal@19206 | 150 movsw |
pascal@19206 | 151 notlnx001: |
pascal@19206 | 152 #endif |
pascal@19208 | 153 movb -15(%di), %ch |
pascal@18228 | 154 lret |
pascal@19203 | 155 endcode: |
pascal@19203 | 156 |
pascal@19203 | 157 .org 256 |
pascal@18228 | 158 kernel_version: |
pascal@18228 | 159 .asciz "zImage" |
pascal@18228 | 160 .org 512 |
pascal@18228 | 161 oldsetup: |
pascal@18228 | 162 |
pascal@19203 | 163 |
pascal@19203 | 164 |