wok annotate syslinux/stuff/iso2exe/bootiso.S @ rev 19429

syslinux/bootiso.S: typos
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sat Oct 01 10:57:42 2016 +0200 (2016-10-01)
parents 087d71ec38ce
children 7a16da2c93b9
rev   line source
pascal@13691 1 .text
pascal@13691 2 .code16
pascal@13691 3 .org 0
pascal@13691 4
pascal@13691 5 CODESZ = 0x8000 // 16 sectors = 32Kb
pascal@13972 6 #define EXEADRS(x) x+0xC0
pascal@14261 7 #define EXELOC(x) x-0x40
pascal@14261 8 #define EXESTR(x) x-0x7F40
pascal@13691 9
pascal@13691 10 .globl _start
pascal@13691 11 _start:
pascal@13691 12 decw %bp // Magic number: MZ
pascal@13691 13 popw %dx
pascal@13972 14 jmp start0 // Bytes on last page of file
pascal@13691 15 .word (CODESZ+511)/512 // Pages in file
pascal@13691 16 .word 0 // Relocations
pascal@13691 17 .word (end_header-_start)/16 // Size of header in paragraphs
pascal@13691 18 .word 4064-(CODESZ/16) // Minimum extra paragraphs needed
pascal@13691 19 .word 4064-(CODESZ/16) // Maximum extra paragraphs needed
pascal@13691 20 .word 0xFFF0 // Initial (relative) SS value
pascal@13691 21 .word 0xFFFE // Initial SP value
pascal@13691 22 .word 0 // Checksum
pascal@13729 23 .word EXEADRS(exestart) // Initial IP value
pascal@13691 24 .word 0xFFF0 // Initial (relative) CS value
pascal@13972 25 initramfssize:
pascal@13972 26 .word 0 // File address of relocation table
pascal@17810 27 fdcnt: // Overlay number
pascal@14257 28 .byte 0 // Bootstrap floppy sector count
pascal@17810 29 .ascii "slitaz"
pascal@13691 30
pascal@13691 31 /////////////////////// Master Boot Record code //////////////////////////////
pascal@13691 32
pascal@17810 33 moved = 0x8000
pascal@17496 34 start0:
pascal@17496 35 pushw %dx // restore %sp
pascal@13972 36 incw %bp // restore %bp
pascal@17496 37 xorw %bx, %bx
pascal@17496 38 movw %bx, %ds
pascal@17496 39 movb $0x7C, %bh
pascal@17496 40 pushw %bx // return address
pascal@13691 41 pushaw
pascal@13691 42 movw %sp, %bp
pascal@17496 43 pushw %es // save %es:%di
pascal@13972 44 cld
pascal@17496 45 sti
pascal@13972 46 pushw %ds
pascal@13972 47 popw %es
pascal@13691 48 call setreg
pascal@13691 49 rep
pascal@13691 50 movsw
pascal@13972 51 movw $0x80, %dx
pascal@17810 52 ljmp $0, $moved+start2
pascal@17810 53 .byte 0
pascal@17810 54 // .org 60
pascal@17810 55 // .long 0x0080 // PE header offset
pascal@17810 56 .org 64
pascal@13972 57 end_header:
pascal@13972 58 comstart:
pascal@13972 59 .word 0
pascal@13691 60
pascal@17810 61 .org 66
pascal@17810 62 dxloop:
pascal@17810 63 start2:
pascal@17810 64 call readsector1 // look for the boot device
pascal@17810 65 repe
pascal@17810 66 cmpsw
pascal@17810 67 je dxfound
pascal@17810 68 movb $0, %cl // ch = 0
pascal@17810 69 addb $0x7D, %dl // try every hard disk
pascal@17810 70 jno dxloop
pascal@17810 71
pascal@17810 72 dxfound:
pascal@17810 73 call readsectorX // read isolinux boot sector
pascal@17810 74 movw %dx, 10(%bp)
pascal@17810 75 cmpw (%bx), %cx
pascal@17810 76 jnc puts // read fail or no isohydrid boot sector
pascal@17810 77 popw %es
pascal@17906 78 popa // isolinux boot needs %es:%di and %dx
pascal@17810 79 putsret:
pascal@17810 80 ret
pascal@17810 81
pascal@17810 82 putstrlp:
pascal@17810 83 movw $7, %bx
pascal@17810 84 movb $0xE, %ah
pascal@17810 85 int $0x10
pascal@17810 86 error:
pascal@17810 87 lodsb
pascal@17810 88 cmp $1, %al
pascal@17810 89 jg putstrlp
pascal@17810 90 jz putsret
pascal@17810 91 puts:
pascal@17810 92 movb $0x80, %ah
pascal@17810 93 xchgw %ax, %si
pascal@17810 94 jnc error
pascal@17810 95 halt:
pascal@17810 96 hlt
pascal@17810 97 jmp halt
pascal@17810 98 nobsmsg:
pascal@17810 99 .asciz "No isolinux."
pascal@17810 100
pascal@17810 101 .org 0x0080
pascal@17810 102 ////////////////////////////// EXE/PE header //////////////////////////////////
pascal@17810 103
pascal@17810 104 .org 0x01A0
pascal@17496 105 readsectorX: // read isolinux boot sector
pascal@17496 106 movb $0xA5, %cl // patched by installer
pascal@13699 107 readsector1:
pascal@17496 108 andb $0x83, %dl // disk and floppy disk
pascal@13699 109 movw %cx, (%bx)
pascal@13699 110 incw %cx
pascal@13699 111 movw $0x201, %ax
pascal@13699 112 int $0x13
pascal@13691 113 setreg:
pascal@13699 114 movw %bx, %si
pascal@17810 115 movw $moved, %di
pascal@13691 116 movw $0x0100, %cx
pascal@17810 117 movb $nobsmsg, %al
pascal@13691 118 ret
pascal@17810 119 .org 0x01B8
pascal@14267 120
pascal@17810 121 .org 0x7F48
pascal@13691 122 ////////////////////////////// DOS EXE code ///////////////////////////////////
pascal@13691 123
pascal@13729 124 exestart:
pascal@13699 125 cld
pascal@19428 126 movw $EXEADRS(puts), %bp
pascal@17810 127 movw 129, %ax
pascal@17473 128 cmpb $0x2F, %al
pascal@17473 129 je ishelp
pascal@17473 130 cmpw $0x2F20, %ax
pascal@17473 131 ishelp:
pascal@17473 132 movw $0x3000+EXESTR(help), %ax
pascal@13729 133 cwd // clear dx
pascal@17454 134 pushw %dx // dos exit()
pascal@17454 135 je abort
pascal@17454 136 int $0x21 // get DOS version
pascal@17562 137 addb $-3, %al
pascal@17810 138 movw $0x1000+EXESTR(noDOS3), %ax
pascal@17810 139 jc tst386
pascal@13691 140 abort:
pascal@19429 141 jmp *%bp
pascal@13691 142
pascal@17160 143 tst386:
pascal@17906 144 pushfw // save flags
pascal@17160 145 // bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
pascal@17160 146 // flags 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF
pascal@17160 147 // movb $0x10, %ah
pascal@17160 148 pushw %ax
pascal@17906 149 popfw // < 286 : flags[12..15] are forced 1
pascal@17906 150 pushfw // = 286 : flags[12..15] are forced 0
pascal@17906 151 popw %bx // > 286 : only flags[15] is forced 0
pascal@17906 152 popfw // restore flags (IOPL)
pascal@17906 153 addb %ah, %bh // test F0 and 00 cases
pascal@17160 154 cmpb %ah, %bh
pascal@17810 155 movw $0x100, %di
pascal@17906 156 jbe is86 // C=8086/80186, Z=80286
pascal@13691 157 is386:
pascal@17906 158 smsww %ax // not privileged
pascal@13691 159 andb $1, %al
pascal@17562 160 movw $10, %si
pascal@13691 161 jne tstvcpi
pascal@17906 162 movl %cr0, %eax // privileged
pascal@14150 163 incl %eax
pascal@13713 164 movb $EXESTR(rmPaging), %al
pascal@14150 165 js abort
pascal@17810 166 inc %ax
pascal@17810 167 //movb $EXESTR(realmodemsg), %al
pascal@13691 168 realmode:
pascal@19429 169 call *%bp
pascal@17160 170 is86:
pascal@14261 171 movw comstart-end_header(%di), %si // .com address
pascal@13691 172 pushw %di
pascal@17906 173 movb $0x7C/2, %ch // 31K-31.5K, > com length
pascal@13691 174 rep
pascal@17473 175 movsw
pascal@13691 176 ret
pascal@13713 177
pascal@19429 178 CallVCPI:
pascal@19428 179 int $0x67
pascal@19428 180 testb %ah, %ah
pascal@19428 181 xchgw %ax, %cx
pascal@19429 182 pushw %si
pascal@19428 183 ScanVCPI:
pascal@19428 184 popw %si
pascal@19428 185 ChkVCPI:
pascal@19428 186 NoVCPI:
pascal@19428 187 movb $EXESTR(ERRvcpi), %al
pascal@19428 188 jne abort
pascal@19428 189 lodsb
pascal@19428 190 shlw $8, %ax
pascal@19428 191 jne CallVCPI
pascal@13713 192 VersionVCPI:
pascal@17496 193 xchgw %ax, %si // movb $EXESTR(vm86modemsg), %al
pascal@17562 194 cmpb $0x40, %cl // EMM386 / VCPI 4.0 mini
pascal@17562 195 jnc realmode // %si = 0
pascal@13713 196 tstvcpi:
pascal@13713 197 pushw %ds
pascal@17810 198 movw %si, %ds // %si = 10
pascal@17810 199 movw (0x67*4)+2-(16*10)-0x100(%di), %ds
pascal@17473 200 lodsw
pascal@13713 201 xorw $0x4D45, %ax // EM(MX) or EM(MQ)
pascal@17473 202 lodsw
pascal@17473 203 lodsw
pascal@13713 204 popw %ds
pascal@14150 205 jne NoVCPI
pascal@19428 206 xorb $0x58, %al // X(XX0)
pascal@19428 207 call ScanVCPI
pascal@13713 208 CmdVCPI:
pascal@13713 209 .byte 0x40 // status
pascal@13713 210 .byte 0xDE // vcpi present ?
pascal@13713 211 .byte 0x46 // version
pascal@13713 212 .byte 0
pascal@13713 213
pascal@17496 214 vm86modemsg:
pascal@17473 215 // --------------- Must be in 7F40 7FFF range ------------------------
pascal@17810 216 .ascii "86" // 86 mode
pascal@17562 217 .byte EXESTR(mode)
pascal@14261 218 ERRvcpi:
pascal@17810 219 .ascii "VCPI4" // VCPI4?
pascal@17562 220 .byte EXESTR(need)
pascal@14261 221 rmPaging:
pascal@17810 222 .ascii "X" // Xreal mode
pascal@14261 223 realmodemsg:
pascal@17562 224 .ascii "real" // real mode
pascal@17473 225 // --------------- Must be in 7FC0 7FFF range ------------------------
pascal@17562 226 mode:
pascal@17562 227 .ascii " m"
pascal@17496 228 ode:
pascal@17562 229 .ascii "ode"
pascal@14261 230 .byte EXESTR(eol)
pascal@17562 231 noDOS3:
pascal@17810 232 .ascii "DOS3" // DOS3?
pascal@17562 233 need:
pascal@17810 234 .ascii "?"
pascal@17496 235 .byte EXESTR(eol)
pascal@17473 236 help:
pascal@17562 237 .ascii "SliTaz iso boot" // SliTaz iso boot
pascal@17473 238 eol:
pascal@17496 239 .ascii "\r\n"
pascal@17810 240 .byte 1 // puts will return
pascal@14261 241
pascal@17496 242 .space 16,0 // ISO md5
pascal@14261 243 .org 0x8000
pascal@14261 244 ////////////////////////// ISO9660 header /////////////////////////////////////