wok annotate linld/stuff/tobzimage.S @ 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 19a9e131dc09
children 1c8a113c536a
rev   line source
pascal@19203 1 #define REALMODE_SWITCH
pascal@19203 2 #define SHUTDOWNDOS
pascal@19203 3
pascal@18228 4 .code16
pascal@18228 5 .org 0
pascal@18228 6
pascal@19203 7 #define CODE32_START 0x100000
pascal@18228 8 jmp start
pascal@18228 9 .ascii "HdrS"
pascal@18228 10 .word 0x200 # version
pascal@18228 11 .long 0 # realmode_swtch
pascal@18228 12 .word 0x1000 # start_sys_seg
pascal@18228 13 .word kernel_version
pascal@18228 14 .byte 0 # type of loader
pascal@18228 15 .byte 1 # loadflags
pascal@18228 16 .word 0x8000 # setup_move_size
pascal@19203 17 .long CODE32_START # code32_start
pascal@18228 18 .long 0 # ramdisk_image
pascal@18228 19 .long 0 # ramdisk_size
pascal@18228 20 .long 0 # bootsect_kludge
pascal@18228 21 .word 0 # heap_end_ptr 2.01+, patched by bootloader
pascal@19203 22
pascal@18228 23 start:
pascal@19203 24 cli
pascal@19203 25 cld
pascal@18228 26 pushf
pascal@18228 27 pushw %cs
pascal@18228 28 pushw $0
pascal@18228 29 pushaw
pascal@19203 30 xorw %di, %di
pascal@19203 31 .byte 0x66, 0xC7, 0x05 # movl $?, (%di)
pascal@18229 32 rep
pascal@18229 33 movsw
pascal@18229 34 popaw
pascal@18229 35 iret
pascal@19203 36 pushw %ds
pascal@18228 37 pushw %di
pascal@19203 38 #ifdef REALMODE_SWITCH
pascal@19203 39 movw $0x0208, %si
pascal@19203 40 lodsw
pascal@19203 41 orw (%si), %ax
pascal@19203 42 jz norealmode_switch
pascal@19203 43 lcallw *-2(%si)
pascal@19203 44 norealmode_switch:
pascal@19203 45 #endif
pascal@19203 46
pascal@19203 47 #ifdef SHUTDOWNDOS
pascal@19203 48 xorw %si, %si
pascal@19203 49 movw %sp, loadsp19+0x201
pascal@19203 50 movw %si, %ds # %ds = 0
pascal@19203 51 pushl 4(%si)
pascal@19203 52 cmpw $0xF000, 6(%si)
pascal@19203 53 jnb notdos
pascal@19203 54 movw $step19, 4(%si)
pascal@19203 55 movw %cs, 6(%si)
pascal@19203 56 pushfw
pascal@19203 57 popw %ax
pascal@19203 58 incb %ah # set TF
pascal@19203 59 pushw %ax
pascal@19203 60 popfw
pascal@19203 61 ljmp *4*0x19(%si)
pascal@19203 62 stepagain19:
pascal@19203 63 iret
pascal@19203 64 step19:
pascal@19203 65 pushw %si
pascal@19203 66 pushw %ds
pascal@19203 67 movw %sp, %si
pascal@19203 68 ldsw %ss:4(%si), %si
pascal@19203 69 cmpw $0x19CD, (%si)
pascal@19203 70 popw %ds
pascal@19203 71 popw %si
pascal@19203 72 jne stepagain19
pascal@19203 73 xorw %si, %si
pascal@19203 74 mov %si, %ds
pascal@19203 75 popl 4*0x19(%si)
pascal@19203 76 notdos:
pascal@19203 77 loadsp19:
pascal@19203 78 movw $0, %bp
pascal@19203 79 leaw -4(%bp), %sp
pascal@19203 80 popl 4(%si)
pascal@19203 81 pushw %ss
pascal@19203 82 popw %ds
pascal@19203 83 #endif
pascal@19203 84
pascal@19203 85 // xorw %si, %si
pascal@18228 86 movw $9, %cx
pascal@18228 87 z1:
pascal@19203 88 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000 0000
pascal@18228 89 loop z1
pascal@18228 90 movw $0x9301, %ax
pascal@19203 91 cwd
pascal@19203 92 pushw %ax # 9301
pascal@19203 93 pushw %cx # 0000
pascal@19203 94 pushw %dx # FFFF
pascal@19203 95 pushw %cx # 0000
pascal@18228 96 movb 0x216, %al
pascal@19203 97 pushw %ax # 93xx
pascal@19203 98 pushw %cx # 0000
pascal@19203 99 pushw %dx # FFFF
pascal@18228 100 movb $8, %cl
pascal@18228 101 z2:
pascal@19203 102 pushw %si # 0000 0000 0000 0000 0000 0000 0000 0000
pascal@18228 103 loop z2
pascal@19203 104 movw $0x200, %di
pascal@18228 105 movw -12(%di), %dx
pascal@19203 106 pushw %ss
pascal@19203 107 popw %es
pascal@19203 108 movw %sp, %si
pascal@18228 109 mvlp:
pascal@18228 110 movw $0x8000, %cx
pascal@18228 111 movb $0x87, %ah
pascal@18228 112 int $0x15
pascal@18228 113 incw 20(%si)
pascal@18228 114 incw 28(%si)
pascal@18229 115 subw $0x1000, %dx
pascal@18228 116 ja mvlp
pascal@19203 117 addw $48, %sp
pascal@19203 118 decb -15(%di)
pascal@19203 119 sysmoved:
pascal@18228 120 movw $0x400, %si
pascal@18228 121 xorw %cx, %cx
pascal@18228 122 movb -15(%di), %ch
pascal@18228 123 lret
pascal@19203 124 endcode:
pascal@19203 125
pascal@19203 126 .org 256
pascal@18228 127 kernel_version:
pascal@18228 128 .asciz "zImage"
pascal@18228 129 .org 512
pascal@18228 130 oldsetup:
pascal@18228 131
pascal@19203 132
pascal@19203 133