wok annotate syslinux/stuff/iso2exe/meminfo.S @ rev 15981
syslinux-tools: add meminfo.exe
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Mar 01 19:10:36 2014 +0000 (2014-03-01) |
parents | |
children | 45e76a6c05d7 |
rev | line source |
---|---|
pascal@15981 | 1 .text |
pascal@15981 | 2 .code16 |
pascal@15981 | 3 .org 0 |
pascal@15981 | 4 stacktop = 0xFFFE |
pascal@15981 | 5 |
pascal@15981 | 6 .globl _start |
pascal@15981 | 7 _start: |
pascal@15981 | 8 #if 1 |
pascal@15981 | 9 #define EXEADRS(x) x+0xE0 |
pascal@15981 | 10 #define CODESZ 0x200 |
pascal@15981 | 11 decw %bp // Magic number: MZ |
pascal@15981 | 12 popw %dx |
pascal@15981 | 13 jmp start // Bytes on last page of file |
pascal@15981 | 14 .word (CODESZ+511)/512 // Pages in file |
pascal@15981 | 15 .word 0 // Relocations |
pascal@15981 | 16 .word (end_header-_start)/16 // Size of header in paragraphs |
pascal@15981 | 17 .word 4096 // Minimum extra paragraphs needed |
pascal@15981 | 18 .word -1 // Maximum extra paragraphs needed |
pascal@15981 | 19 .word (CODESZ+15)/16 // Initial (relative) SS value |
pascal@15981 | 20 .word stacktop // Initial SP value |
pascal@15981 | 21 .word 0 // Checksum |
pascal@15981 | 22 .word EXEADRS(comstart) // Initial IP value |
pascal@15981 | 23 .word 0xFFF0 // Initial (relative) CS value |
pascal@15981 | 24 // .word 0x001C // File address of relocation table |
pascal@15981 | 25 // .word 0,0,0 // Overlay number |
pascal@15981 | 26 start: |
pascal@15981 | 27 pushw %dx |
pascal@15981 | 28 cld |
pascal@15981 | 29 pushw %cs |
pascal@15981 | 30 call comstart2 |
pascal@15981 | 31 stop: |
pascal@15981 | 32 hlt |
pascal@15981 | 33 jmp stop |
pascal@15981 | 34 end_header: |
pascal@15981 | 35 #endif |
pascal@15981 | 36 comstart: |
pascal@15981 | 37 pushw %cs |
pascal@15981 | 38 call comstart2 |
pascal@15981 | 39 int $0x20 |
pascal@15981 | 40 comstart2: |
pascal@15981 | 41 call here |
pascal@15981 | 42 here: |
pascal@15981 | 43 popw %ax |
pascal@15981 | 44 subw $here-_start, %ax |
pascal@15981 | 45 shrw $4, %ax |
pascal@15981 | 46 movw %cs, %dx |
pascal@15981 | 47 addw %ax, %dx |
pascal@15981 | 48 pushw %dx |
pascal@15981 | 49 pushw $go |
pascal@15981 | 50 retf |
pascal@15981 | 51 go: |
pascal@15981 | 52 pushw %cs |
pascal@15981 | 53 popw %ds |
pascal@15981 | 54 pushw %cs |
pascal@15981 | 55 popw %es |
pascal@15981 | 56 xorl %ebx, %ebx |
pascal@15981 | 57 e820lp: |
pascal@15981 | 58 movl $0xe820, %eax |
pascal@15981 | 59 movl $0x534d4150, %edx |
pascal@15981 | 60 movl $20, %ecx |
pascal@15981 | 61 movw $buffer, %di |
pascal@15981 | 62 int $0x15 |
pascal@15981 | 63 jc fail |
pascal@15981 | 64 cmpl $0x534d4150, %eax |
pascal@15981 | 65 jne fail |
pascal@15981 | 66 cmpl $20, %ecx |
pascal@15981 | 67 jc fail |
pascal@15981 | 68 pushl %ebx |
pascal@15981 | 69 movw $header_e820, %si |
pascal@15981 | 70 call puts64 |
pascal@15981 | 71 movw $usable, %si |
pascal@15981 | 72 cmpl $1, (%di) |
pascal@15981 | 73 je show_status |
pascal@15981 | 74 movw $acpi_reclaim, %si |
pascal@15981 | 75 cmpl $3, (%di) |
pascal@15981 | 76 je show_status |
pascal@15981 | 77 movw $acpi_nvs, %si |
pascal@15981 | 78 cmpl $4, (%di) |
pascal@15981 | 79 je show_status |
pascal@15981 | 80 movw $reserved, %si |
pascal@15981 | 81 show_status: |
pascal@15981 | 82 call putcs |
pascal@15981 | 83 popl %ebx |
pascal@15981 | 84 orl %ebx, %ebx |
pascal@15981 | 85 jnz e820lp |
pascal@15981 | 86 fail: |
pascal@15981 | 87 movb $10, %al |
pascal@15981 | 88 call putc |
pascal@15981 | 89 movw $8*4, %cx |
pascal@15981 | 90 movw $buffer, %di |
pascal@15981 | 91 pushw %di |
pascal@15981 | 92 xorw %ax, %ax |
pascal@15981 | 93 rep |
pascal@15981 | 94 stosw |
pascal@15981 | 95 movw $0xE801, %ax |
pascal@15981 | 96 int $0x15 |
pascal@15981 | 97 popw %di |
pascal@15981 | 98 jc fail2 |
pascal@15981 | 99 movb $0x10, 0+2(%di) // 1M |
pascal@15981 | 100 movb $0x10, 32+2(%di) // 1M |
pascal@15981 | 101 movb $0x1, 16+3(%di) // 16M |
pascal@15981 | 102 movb $0x1, 48+3(%di) // 16M |
pascal@15981 | 103 incb %bh |
pascal@15981 | 104 movw %bx, 24+2(%di) |
pascal@15981 | 105 incb %dh |
pascal@15981 | 106 movw %dx, 56+2(%di) |
pascal@15981 | 107 shrw $6, %ax // 1K -> 64K |
pascal@15981 | 108 jz e801_configured |
pascal@15981 | 109 shrw $6, %cx // 1K -> 64K |
pascal@15981 | 110 addw $0x10, %ax |
pascal@15981 | 111 addw $0x10, %cx |
pascal@15981 | 112 movw %ax, 8+2(%di) |
pascal@15981 | 113 movw %cx, 40+2(%di) |
pascal@15981 | 114 movw $extended, %si |
pascal@15981 | 115 call pute801 |
pascal@15981 | 116 call pute801 |
pascal@15981 | 117 e801_configured: |
pascal@15981 | 118 movw $buffer+32, %di |
pascal@15981 | 119 movw $configured, %si |
pascal@15981 | 120 call pute801 |
pascal@15981 | 121 call pute801 |
pascal@15981 | 122 fail2: |
pascal@15981 | 123 movb $10, %al |
pascal@15981 | 124 call putc |
pascal@15981 | 125 retf |
pascal@15981 | 126 |
pascal@15981 | 127 puts64: |
pascal@15981 | 128 call puts |
pascal@15981 | 129 call put64 |
pascal@15981 | 130 movw $middle, %si |
pascal@15981 | 131 call putcs |
pascal@15981 | 132 put64: |
pascal@15981 | 133 movw $8, %cx |
pascal@15981 | 134 addw %cx, %di |
pascal@15981 | 135 pushw %di |
pascal@15981 | 136 put64lp: |
pascal@15981 | 137 decw %di |
pascal@15981 | 138 movb (%di), %al |
pascal@15981 | 139 shrb $4, %al |
pascal@15981 | 140 call putx |
pascal@15981 | 141 movb (%di), %al |
pascal@15981 | 142 call putx |
pascal@15981 | 143 loop put64lp |
pascal@15981 | 144 popw %di |
pascal@15981 | 145 ret |
pascal@15981 | 146 |
pascal@15981 | 147 pute801: |
pascal@15981 | 148 pushw %si |
pascal@15981 | 149 movw $header_e801, %si |
pascal@15981 | 150 call puts64 |
pascal@15981 | 151 popw %si |
pascal@15981 | 152 pushw %si |
pascal@15981 | 153 call putcs |
pascal@15981 | 154 popw %si |
pascal@15981 | 155 ret |
pascal@15981 | 156 putcs: |
pascal@15981 | 157 movb $0x20, %al |
pascal@15981 | 158 putslp: |
pascal@15981 | 159 call putc |
pascal@15981 | 160 puts: |
pascal@15981 | 161 lodsb |
pascal@15981 | 162 orb %al, %al |
pascal@15981 | 163 jnz putslp |
pascal@15981 | 164 ret |
pascal@15981 | 165 |
pascal@15981 | 166 putx: |
pascal@15981 | 167 andb $0xF, %al |
pascal@15981 | 168 addb $0x90, %al |
pascal@15981 | 169 daa |
pascal@15981 | 170 adcb $0x40, %al |
pascal@15981 | 171 daa |
pascal@15981 | 172 putc: |
pascal@15981 | 173 movw $7, %bx |
pascal@15981 | 174 movb $0xE, %ah |
pascal@15981 | 175 int $0x10 |
pascal@15981 | 176 ret |
pascal@15981 | 177 |
pascal@15981 | 178 header_e801: |
pascal@15981 | 179 .byte 13,10 |
pascal@15981 | 180 .ascii "BIOS-e801: " |
pascal@15981 | 181 .byte 0 |
pascal@15981 | 182 extended: |
pascal@15981 | 183 .ascii "(extended)" |
pascal@15981 | 184 .byte 0 |
pascal@15981 | 185 configured: |
pascal@15981 | 186 .ascii "(configured)" |
pascal@15981 | 187 .byte 0 |
pascal@15981 | 188 header_e820: |
pascal@15981 | 189 .byte 13,10 |
pascal@15981 | 190 .ascii "BIOS-e820: " |
pascal@15981 | 191 .byte 0 |
pascal@15981 | 192 middle: |
pascal@15981 | 193 .ascii "- " |
pascal@15981 | 194 .byte 0 |
pascal@15981 | 195 usable: // 1 |
pascal@15981 | 196 .ascii "(usable)" |
pascal@15981 | 197 .byte 0 |
pascal@15981 | 198 reserved: // 2 |
pascal@15981 | 199 .ascii "(reserved)" |
pascal@15981 | 200 .byte 0 |
pascal@15981 | 201 acpi_reclaim: // 3 |
pascal@15981 | 202 .ascii "(ACPI Reclaim)" |
pascal@15981 | 203 .byte 0 |
pascal@15981 | 204 acpi_nvs: // 4 |
pascal@15981 | 205 .ascii "(ACPI NVS)" |
pascal@15981 | 206 .byte 0 |
pascal@15981 | 207 buffer: |
pascal@15981 | 208 .org 510 |
pascal@15981 | 209 .word 0xAA55 |