wok rev 19203
linld/tobzimage: add realmode_switch support
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jun 11 15:57:21 2016 +0200 (2016-06-11) |
parents | d5596dfb8eb2 |
children | df186455938f |
files | linld/receipt linld/stuff/jump.u linld/stuff/tobzimage linld/stuff/tobzimage.S linux/stuff/linux-slitaz.config linux/stuff/linux-slitaz.config64 |
line diff
1.1 --- a/linld/receipt Sat Jun 11 13:56:06 2016 +0300 1.2 +++ b/linld/receipt Sat Jun 11 15:57:21 2016 +0200 1.3 @@ -19,6 +19,7 @@ 1.4 mv DIST $src 2> /dev/null 1.5 cd $src 1.6 patch -p0 < $stuff/load.u 1.7 + patch -p0 < $stuff/jump.u 1.8 sed -i 's/^@pause/rem &/' LINLD097/*.BAT 1.9 unix2dos > MAKE.BAT <<EOT 1.10 d:
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 2.2 +++ b/linld/stuff/jump.u Sat Jun 11 15:57:21 2016 +0200 2.3 @@ -0,0 +1,47 @@ 2.4 +--- LINLD097/JUMP.ASM 2.5 ++++ LINLD097/JUMP.ASM 2.6 +@@ -24,33 +24,22 @@ 2.7 + jmpseg :word, \ 2.8 + jmpofs :word = PARAM_SIZE 2.9 + 2.10 +- push bp ;TODO: kinda useless, isn't it? 2.11 +- mov bp,sp 2.12 +- 2.13 +- ;;mov ax,[jmpseg] ;Move data to CS segment var 2.14 +- ;;mov [seg2],ax ; we cannot use any other seg! 2.15 +- ;;mov ax,[jmpofs] ; 2.16 +- ;;mov [ofs2],ax ; 2.17 +- mov cx,[jmpofs] ;Do NOT load in r32: 2.18 +- mov dx,[jmpseg] ; wrong order! 2.19 +- 2.20 +- mov ax,[sreg] 2.21 +- mov sp,[stk] ;Do not use [bp+n] after this... 2.22 +- mov ds,ax 2.23 +- mov es,ax 2.24 +- mov ss,ax 2.25 +- mov fs,ax 2.26 +- mov gs,ax 2.27 ++ pop bx ;caller return address 2.28 ++ pop bx ; sreg 2.29 ++ pop ax ; stk 2.30 ++ pop dx ; jmpseg 2.31 ++ pop cx ; jmpofs 2.32 ++ mov ds,bx 2.33 ++ mov es,bx 2.34 ++ mov fs,bx 2.35 ++ mov gs,bx 2.36 ++ mov ss,bx 2.37 ++ xchg sp,ax 2.38 + assume nothing 2.39 + assume cs:DGROUP 2.40 + 2.41 +- ;;jmp [dword ofs2] 2.42 +- 2.43 + push dx cx 2.44 + retf 2.45 +-; Data 2.46 +-;;ofs2 dw ? 2.47 +-;;seg2 dw ? 2.48 + endp _set_sregs_jump_seg_ofs 2.49 + 2.50 + ends _TEXT
3.1 --- a/linld/stuff/tobzimage Sat Jun 11 13:56:06 2016 +0300 3.2 +++ b/linld/stuff/tobzimage Sat Jun 11 15:57:21 2016 +0200 3.3 @@ -60,7 +60,7 @@ 3.4 s="$2" 3.5 [ -s "$2" ] && s="$(cat "$2")" 3.6 echo -e "\n$2" | tr '\n' '\r' | cat - /dev/zero | \ 3.7 - dd conv=notrunc of=$1 bs=1 seek=640 count=383 3.8 + dd conv=notrunc of=$1 bs=1 seek=768 count=255 3.9 fi 3.10 setupsz=$(get 497 $1 1) 3.11 [ $setupsz -eq 0 ] && setupsz=4
4.1 --- a/linld/stuff/tobzimage.S Sat Jun 11 13:56:06 2016 +0300 4.2 +++ b/linld/stuff/tobzimage.S Sat Jun 11 15:57:21 2016 +0200 4.3 @@ -1,6 +1,10 @@ 4.4 +#define REALMODE_SWITCH 4.5 +#define SHUTDOWNDOS 4.6 + 4.7 .code16 4.8 .org 0 4.9 4.10 +#define CODE32_START 0x100000 4.11 jmp start 4.12 .ascii "HdrS" 4.13 .word 0x200 # version 4.14 @@ -10,51 +14,99 @@ 4.15 .byte 0 # type of loader 4.16 .byte 1 # loadflags 4.17 .word 0x8000 # setup_move_size 4.18 - .long 0x100000 # code32_start 4.19 + .long CODE32_START # code32_start 4.20 .long 0 # ramdisk_image 4.21 .long 0 # ramdisk_size 4.22 .long 0 # bootsect_kludge 4.23 .word 0 # heap_end_ptr 2.01+, patched by bootloader 4.24 + 4.25 start: 4.26 + cli 4.27 + cld 4.28 pushf 4.29 - cld 4.30 pushw %cs 4.31 pushw $0 4.32 pushaw 4.33 - pushw %ds 4.34 - popw %es 4.35 - .byte 0x66, 0xB8 # movl $?, %eax 4.36 + xorw %di, %di 4.37 + .byte 0x66, 0xC7, 0x05 # movl $?, (%di) 4.38 rep 4.39 movsw 4.40 popaw 4.41 iret 4.42 - xorw %di, %di 4.43 - pushw %es 4.44 + pushw %ds 4.45 pushw %di 4.46 - stosl 4.47 - movw $0x200, %di 4.48 - movw %sp, %bp 4.49 +#ifdef REALMODE_SWITCH 4.50 + movw $0x0208, %si 4.51 + lodsw 4.52 + orw (%si), %ax 4.53 + jz norealmode_switch 4.54 + lcallw *-2(%si) 4.55 +norealmode_switch: 4.56 +#endif 4.57 + 4.58 +#ifdef SHUTDOWNDOS 4.59 + xorw %si, %si 4.60 + movw %sp, loadsp19+0x201 4.61 + movw %si, %ds # %ds = 0 4.62 + pushl 4(%si) 4.63 + cmpw $0xF000, 6(%si) 4.64 + jnb notdos 4.65 + movw $step19, 4(%si) 4.66 + movw %cs, 6(%si) 4.67 + pushfw 4.68 + popw %ax 4.69 + incb %ah # set TF 4.70 + pushw %ax 4.71 + popfw 4.72 + ljmp *4*0x19(%si) 4.73 +stepagain19: 4.74 + iret 4.75 +step19: 4.76 + pushw %si 4.77 + pushw %ds 4.78 + movw %sp, %si 4.79 + ldsw %ss:4(%si), %si 4.80 + cmpw $0x19CD, (%si) 4.81 + popw %ds 4.82 + popw %si 4.83 + jne stepagain19 4.84 + xorw %si, %si 4.85 + mov %si, %ds 4.86 + popl 4*0x19(%si) 4.87 +notdos: 4.88 +loadsp19: 4.89 + movw $0, %bp 4.90 + leaw -4(%bp), %sp 4.91 + popl 4(%si) 4.92 + pushw %ss 4.93 + popw %ds 4.94 +#endif 4.95 + 4.96 +// xorw %si, %si 4.97 movw $9, %cx 4.98 z1: 4.99 - pushw $0 4.100 + pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 0000 4.101 loop z1 4.102 movw $0x9301, %ax 4.103 - cwd # %dx = -1 4.104 - pushw %ax 4.105 - pushw %cx 4.106 - pushw %dx 4.107 - pushw %cx 4.108 + cwd 4.109 + pushw %ax # 9301 4.110 + pushw %cx # 0000 4.111 + pushw %dx # FFFF 4.112 + pushw %cx # 0000 4.113 movb 0x216, %al 4.114 - pushw %ax 4.115 - pushw %cx 4.116 - pushw %dx 4.117 + pushw %ax # 93xx 4.118 + pushw %cx # 0000 4.119 + pushw %dx # FFFF 4.120 movb $8, %cl 4.121 z2: 4.122 - pushw $0 4.123 + pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 4.124 loop z2 4.125 + movw $0x200, %di 4.126 movw -12(%di), %dx 4.127 + pushw %ss 4.128 + popw %es 4.129 + movw %sp, %si 4.130 mvlp: 4.131 - movw %sp, %si 4.132 movw $0x8000, %cx 4.133 movb $0x87, %ah 4.134 int $0x15 4.135 @@ -62,14 +114,20 @@ 4.136 incw 28(%si) 4.137 subw $0x1000, %dx 4.138 ja mvlp 4.139 - movw %bp, %sp 4.140 + addw $48, %sp 4.141 + decb -15(%di) 4.142 +sysmoved: 4.143 movw $0x400, %si 4.144 xorw %cx, %cx 4.145 - decb -15(%di) 4.146 movb -15(%di), %ch 4.147 lret 4.148 +endcode: 4.149 + 4.150 + .org 256 4.151 kernel_version: 4.152 .asciz "zImage" 4.153 .org 512 4.154 oldsetup: 4.155 4.156 + 4.157 +
5.1 --- a/linux/stuff/linux-slitaz.config Sat Jun 11 13:56:06 2016 +0300 5.2 +++ b/linux/stuff/linux-slitaz.config Sat Jun 11 15:57:21 2016 +0200 5.3 @@ -1149,7 +1149,7 @@ 5.4 # CONFIG_MTD is not set 5.5 CONFIG_PARPORT=m 5.6 CONFIG_PARPORT_PC=m 5.7 -# CONFIG_PARPORT_SERIAL is not set 5.8 +CONFIG_PARPORT_SERIAL=m 5.9 # CONFIG_PARPORT_PC_FIFO is not set 5.10 # CONFIG_PARPORT_PC_SUPERIO is not set 5.11 # CONFIG_PARPORT_PC_PCMCIA is not set
6.1 --- a/linux/stuff/linux-slitaz.config64 Sat Jun 11 13:56:06 2016 +0300 6.2 +++ b/linux/stuff/linux-slitaz.config64 Sat Jun 11 15:57:21 2016 +0200 6.3 @@ -1118,7 +1118,7 @@ 6.4 # CONFIG_MTD is not set 6.5 CONFIG_PARPORT=m 6.6 CONFIG_PARPORT_PC=m 6.7 -# CONFIG_PARPORT_SERIAL is not set 6.8 +CONFIG_PARPORT_SERIAL=m 6.9 # CONFIG_PARPORT_PC_FIFO is not set 6.10 # CONFIG_PARPORT_PC_SUPERIO is not set 6.11 # CONFIG_PARPORT_PC_PCMCIA is not set