wok diff syslinux/stuff/iso2exe/bootiso.S @ rev 17810
syslinux/iso2exe: one boot checksum only
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Mar 21 11:15:53 2015 +0100 (2015-03-21) |
parents | 00bb1e4137c6 |
children | 4d27e4d271a0 |
line diff
1.1 --- a/syslinux/stuff/iso2exe/bootiso.S Sat Feb 07 15:39:46 2015 +0100 1.2 +++ b/syslinux/stuff/iso2exe/bootiso.S Sat Mar 21 11:15:53 2015 +0100 1.3 @@ -24,13 +24,13 @@ 1.4 .word 0xFFF0 // Initial (relative) CS value 1.5 initramfssize: 1.6 .word 0 // File address of relocation table 1.7 -id: 1.8 - .word 0 // Overlay number 1.9 -fdcnt: // File address of relocation table 1.10 +fdcnt: // Overlay number 1.11 .byte 0 // Bootstrap floppy sector count 1.12 + .ascii "slitaz" 1.13 1.14 /////////////////////// Master Boot Record code ////////////////////////////// 1.15 1.16 +moved = 0x8000 1.17 start0: 1.18 pushw %dx // restore %sp 1.19 incw %bp // restore %bp 1.20 @@ -49,17 +49,59 @@ 1.21 rep 1.22 movsw 1.23 movw $0x80, %dx 1.24 - ljmp $0, $0x0600+start2 1.25 - 1.26 - .org 60 1.27 - .long 0x0080 // PE header offset 1.28 + ljmp $0, $moved+start2 1.29 + .byte 0 1.30 +// .org 60 1.31 +// .long 0x0080 // PE header offset 1.32 + .org 64 1.33 end_header: 1.34 -chksum: 1.35 - .word 0 1.36 comstart: 1.37 .word 0 1.38 1.39 - .org 68 1.40 + .org 66 1.41 +dxloop: 1.42 +start2: 1.43 + call readsector1 // look for the boot device 1.44 + repe 1.45 + cmpsw 1.46 + je dxfound 1.47 + movb $0, %cl // ch = 0 1.48 + addb $0x7D, %dl // try every hard disk 1.49 + jno dxloop 1.50 + 1.51 +dxfound: 1.52 + call readsectorX // read isolinux boot sector 1.53 + movw %dx, 10(%bp) 1.54 + cmpw (%bx), %cx 1.55 + jnc puts // read fail or no isohydrid boot sector 1.56 + popw %es 1.57 + popa 1.58 +putsret: 1.59 + ret 1.60 + 1.61 +putstrlp: 1.62 + movw $7, %bx 1.63 + movb $0xE, %ah 1.64 + int $0x10 1.65 +error: 1.66 + lodsb 1.67 + cmp $1, %al 1.68 + jg putstrlp 1.69 + jz putsret 1.70 +puts: 1.71 + movb $0x80, %ah 1.72 + xchgw %ax, %si 1.73 + jnc error 1.74 +halt: 1.75 + hlt 1.76 + jmp halt 1.77 +nobsmsg: 1.78 + .asciz "No isolinux." 1.79 + 1.80 + .org 0x0080 1.81 +////////////////////////////// EXE/PE header ////////////////////////////////// 1.82 + 1.83 + .org 0x01A0 1.84 readsectorX: // read isolinux boot sector 1.85 movb $0xA5, %cl // patched by installer 1.86 readsector1: 1.87 @@ -70,62 +112,18 @@ 1.88 int $0x13 1.89 setreg: 1.90 movw %bx, %si 1.91 - movw $0x0600, %di 1.92 + movw $moved, %di 1.93 movw $0x0100, %cx 1.94 -return: 1.95 + movb $nobsmsg, %al 1.96 ret 1.97 -dxloop: 1.98 -start2: 1.99 - call readsector1 // look for the boot device 1.100 - repe 1.101 - cmpsw 1.102 - je dxfound 1.103 - movb $0, %cl // ch = 0 1.104 - addb $0x7D, %dl // try every hard disk 1.105 - jno dxloop 1.106 -dxfound: 1.107 - call readsectorX // read isolinux boot sector 1.108 - movw %dx, 10(%bp) 1.109 - call checkboot 1.110 - .asciz "No isolinux bs" 1.111 + .org 0x01B8 1.112 1.113 - .org 0x0080 1.114 -////////////////////////////// EXE/PE header ////////////////////////////////// 1.115 - 1.116 - .org 0x01A0 1.117 -checkboot: 1.118 - cmpw %cx, (%bx) 1.119 - popw %si 1.120 - jc error // read fail or no isohydrid boot sector 1.121 - popw %es 1.122 - popa 1.123 -putsret: 1.124 - ret 1.125 -putstrlp: 1.126 - movw $7, %bx 1.127 - movb $0xE, %ah 1.128 - int $0x10 1.129 -error: 1.130 - lodsb 1.131 - cmp $1, %al 1.132 - jg putstrlp 1.133 - jz putsret 1.134 -putstr: 1.135 - movb $0x80, %ah 1.136 - xchgw %ax, %si 1.137 - jnc error 1.138 -halt: 1.139 - hlt 1.140 - jmp halt 1.141 - .org 0x01BE 1.142 - 1.143 - .org 0x7F26 1.144 + .org 0x7F48 1.145 ////////////////////////////// DOS EXE code /////////////////////////////////// 1.146 1.147 exestart: 1.148 cld 1.149 - movw $0x100, %si 1.150 - movw -127(%si), %ax 1.151 + movw 129, %ax 1.152 cmpb $0x2F, %al 1.153 je ishelp 1.154 cmpw $0x2F20, %ax 1.155 @@ -134,24 +132,12 @@ 1.156 cwd // clear dx 1.157 pushw %dx // dos exit() 1.158 je abort 1.159 - pushw %si 1.160 int $0x21 // get DOS version 1.161 - popw %di // %di = 0x100: .COM start address 1.162 addb $-3, %al 1.163 - movb $EXESTR(noDOS3), %al 1.164 - jnc abort 1.165 - movw $(EXELOC(0x8000))/2, %cx 1.166 -chklp: 1.167 - lodsw 1.168 - addw %ax, %dx // break C 1.169 - loop chklp 1.170 -chked: 1.171 - movw $0x1000+EXESTR(chkerr), %ax 1.172 - je tst386 // dx == 0 ? 1.173 + movw $0x1000+EXESTR(noDOS3), %ax 1.174 + jc tst386 1.175 abort: 1.176 -puts: 1.177 - clc 1.178 - jmp putstr 1.179 + jmp puts 1.180 1.181 tst386: 1.182 pushfw // save flags 1.183 @@ -165,7 +151,7 @@ 1.184 popfw // restore flags (IOPL) 1.185 addb %ah, %bh // test F0 and 00 cases 1.186 cmpb %ah, %bh 1.187 - movb $EXESTR(no386), %al 1.188 + movw $0x100, %di 1.189 jbe is86 // C=8086/80186, Z=80286 1.190 is386: 1.191 smsww %ax // not privileged 1.192 @@ -176,10 +162,11 @@ 1.193 incl %eax 1.194 movb $EXESTR(rmPaging), %al 1.195 js abort 1.196 - movb $EXESTR(realmodemsg), %al 1.197 + inc %ax 1.198 + //movb $EXESTR(realmodemsg), %al 1.199 realmode: 1.200 + call puts 1.201 is86: 1.202 - call puts 1.203 movw comstart-end_header(%di), %si // .com address 1.204 pushw %di 1.205 movb $0x7C/2, %ch // 31K-31.5K, > com length 1.206 @@ -193,8 +180,8 @@ 1.207 jnc realmode // %si = 0 1.208 tstvcpi: 1.209 pushw %ds 1.210 - movw %dx, %ds // %dx = 0 1.211 - movw 0x67*4+2, %ds 1.212 + movw %si, %ds // %si = 10 1.213 + movw (0x67*4)+2-(16*10)-0x100(%di), %ds 1.214 lodsw 1.215 xorw $0x4D45, %ax // EM(MX) or EM(MQ) 1.216 lodsw 1.217 @@ -222,18 +209,13 @@ 1.218 1.219 vm86modemsg: 1.220 // --------------- Must be in 7F40 7FFF range ------------------------ 1.221 - .ascii "vm86" // vm86 mode 1.222 + .ascii "86" // 86 mode 1.223 .byte EXESTR(mode) 1.224 ERRvcpi: 1.225 - .ascii "EMM" // EMM386 need 1.226 -no386: 1.227 - .ascii "386" // 386 need 1.228 + .ascii "VCPI4" // VCPI4? 1.229 .byte EXESTR(need) 1.230 -chkerr: 1.231 - .ascii "Bad c" // Bad code 1.232 - .byte EXESTR(ode) 1.233 rmPaging: 1.234 - .ascii "Un" // Unreal mode 1.235 + .ascii "X" // Xreal mode 1.236 realmodemsg: 1.237 .ascii "real" // real mode 1.238 // --------------- Must be in 7FC0 7FFF range ------------------------ 1.239 @@ -243,15 +225,15 @@ 1.240 .ascii "ode" 1.241 .byte EXESTR(eol) 1.242 noDOS3: 1.243 - .ascii "DOS3" // DOS3 need 1.244 + .ascii "DOS3" // DOS3? 1.245 need: 1.246 - .ascii " need" 1.247 + .ascii "?" 1.248 .byte EXESTR(eol) 1.249 help: 1.250 .ascii "SliTaz iso boot" // SliTaz iso boot 1.251 eol: 1.252 .ascii "\r\n" 1.253 - .byte 1 // putstr will return 1.254 + .byte 1 // puts will return 1.255 1.256 .space 16,0 // ISO md5 1.257 .org 0x8000