wok annotate syslinux/stuff/iso2exe/meminfo.S @ rev 15982

syslinux-tools: add meminfo.exe (again)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Mar 01 19:54:32 2014 +0000 (2014-03-01)
parents 3f0b08dbc9d3
children 3e7ad70145ce
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 movb $10, %al
pascal@15981 123 call putc
pascal@15982 124 fail2:
pascal@15982 125 movw $8, %cx
pascal@15982 126 movw $buffer, %di
pascal@15982 127 pushw %di
pascal@15982 128 xorw %ax, %ax
pascal@15982 129 rep
pascal@15982 130 stosw
pascal@15982 131 movb $0x88, %ah
pascal@15982 132 int $0x15
pascal@15982 133 popw %di
pascal@15982 134 jc fail3
pascal@15982 135 movb $0x10, 0+2(%di) // 1M
pascal@15982 136 shrw $6, %ax // 1K -> 64K
pascal@15982 137 jz fail3
pascal@15982 138 addw $0x10, %ax
pascal@15982 139 movw %ax, 8+2(%di)
pascal@15982 140 movw $header_0088, %si
pascal@15982 141 call puts64
pascal@15982 142 movb $10, %al
pascal@15982 143 call putc
pascal@15982 144 fail3:
pascal@15981 145 retf
pascal@15981 146
pascal@15981 147 puts64:
pascal@15981 148 call puts
pascal@15981 149 call put64
pascal@15981 150 movw $middle, %si
pascal@15981 151 call putcs
pascal@15981 152 put64:
pascal@15981 153 movw $8, %cx
pascal@15981 154 addw %cx, %di
pascal@15981 155 pushw %di
pascal@15981 156 put64lp:
pascal@15981 157 decw %di
pascal@15981 158 movb (%di), %al
pascal@15981 159 shrb $4, %al
pascal@15981 160 call putx
pascal@15981 161 movb (%di), %al
pascal@15981 162 call putx
pascal@15981 163 loop put64lp
pascal@15981 164 popw %di
pascal@15981 165 ret
pascal@15981 166
pascal@15981 167 pute801:
pascal@15981 168 pushw %si
pascal@15981 169 movw $header_e801, %si
pascal@15981 170 call puts64
pascal@15981 171 popw %si
pascal@15981 172 pushw %si
pascal@15981 173 call putcs
pascal@15981 174 popw %si
pascal@15981 175 ret
pascal@15981 176 putcs:
pascal@15981 177 movb $0x20, %al
pascal@15981 178 putslp:
pascal@15981 179 call putc
pascal@15981 180 puts:
pascal@15981 181 lodsb
pascal@15981 182 orb %al, %al
pascal@15981 183 jnz putslp
pascal@15981 184 ret
pascal@15981 185
pascal@15981 186 putx:
pascal@15981 187 andb $0xF, %al
pascal@15981 188 addb $0x90, %al
pascal@15981 189 daa
pascal@15981 190 adcb $0x40, %al
pascal@15981 191 daa
pascal@15981 192 putc:
pascal@15981 193 movw $7, %bx
pascal@15981 194 movb $0xE, %ah
pascal@15981 195 int $0x10
pascal@15981 196 ret
pascal@15981 197
pascal@15982 198 header_0088:
pascal@15982 199 .byte 13,10
pascal@15982 200 .ascii "BIOS-0088: "
pascal@15982 201 .byte 0
pascal@15981 202 header_e801:
pascal@15981 203 .byte 13,10
pascal@15981 204 .ascii "BIOS-e801: "
pascal@15981 205 .byte 0
pascal@15981 206 extended:
pascal@15981 207 .ascii "(extended)"
pascal@15981 208 .byte 0
pascal@15981 209 configured:
pascal@15981 210 .ascii "(configured)"
pascal@15981 211 .byte 0
pascal@15981 212 header_e820:
pascal@15981 213 .byte 13,10
pascal@15981 214 .ascii "BIOS-e820: "
pascal@15981 215 .byte 0
pascal@15981 216 middle:
pascal@15981 217 .ascii "- "
pascal@15981 218 .byte 0
pascal@15981 219 usable: // 1
pascal@15981 220 .ascii "(usable)"
pascal@15981 221 .byte 0
pascal@15981 222 reserved: // 2
pascal@15981 223 .ascii "(reserved)"
pascal@15981 224 .byte 0
pascal@15981 225 acpi_reclaim: // 3
pascal@15981 226 .ascii "(ACPI Reclaim)"
pascal@15981 227 .byte 0
pascal@15981 228 acpi_nvs: // 4
pascal@15981 229 .ascii "(ACPI NVS)"
pascal@15981 230 .byte 0
pascal@15981 231 buffer:
pascal@15981 232 .org 510
pascal@15981 233 .word 0xAA55