wok rev 18151

syslinux/taziso/floppyset: add ifmem
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jun 19 21:57:20 2015 +0200 (2015-06-19)
parents d2af45554821
children a2f7f8eaeaa3
files syslinux/stuff/iso2exe/Makefile syslinux/stuff/iso2exe/bootloader.S syslinux/stuff/iso2exe/ifmem.S syslinux/stuff/iso2exe/taziso
line diff
     1.1 --- a/syslinux/stuff/iso2exe/Makefile	Fri Jun 19 19:56:46 2015 +0200
     1.2 +++ b/syslinux/stuff/iso2exe/Makefile	Fri Jun 19 21:57:20 2015 +0200
     1.3 @@ -4,7 +4,7 @@
     1.4  
     1.5  all: isohybrid.exe iso2exe meminfo.exe tazboot.exe taziso.built
     1.6  
     1.7 -taziso.built: bootloader.bin
     1.8 +taziso.built: bootloader.bin ifmem.bin
     1.9  	./taziso --build
    1.10  	touch taziso.built
    1.11  
    1.12 @@ -61,7 +61,7 @@
    1.13  	$(BCC) $(BCCFLAGS) -A-l -A$*.lst -c -o $@ $<
    1.14  
    1.15  %.bin: %.S
    1.16 -	$(GCC) -D__ASSEMBLY__ -Wa,-acghlnm=$*.lst -c -o $*.o $<
    1.17 +	$(GCC) -D__ASSEMBLY__ -DMULTI_INITRD -Wa,-acghlnm=$*.lst -c -o $*.o $<
    1.18  	objcopy -O binary $*.o $@
    1.19  	chmod +x $@
    1.20  
     2.1 --- a/syslinux/stuff/iso2exe/bootloader.S	Fri Jun 19 19:56:46 2015 +0200
     2.2 +++ b/syslinux/stuff/iso2exe/bootloader.S	Fri Jun 19 21:57:20 2015 +0200
     2.3 @@ -19,7 +19,6 @@
     2.4  /* some extra features */
     2.5  #define CMDLINE			kernel >= 2.4
     2.6  #define OLDCMDLINE		kernel  < 2.4
     2.7 -#define HELP			display version for ? argument
     2.8  #define MORETHAN16M		up to 4Gb RAM, not 16Mb
     2.9  #define KEYBOARDLESS_SUPPORT	scan floppy swap each 5 seconds
    2.10  
    2.11 @@ -28,7 +27,10 @@
    2.12  #define MOVE_CMDLINE
    2.13  #define INITRD_SUPPORT
    2.14  #define INITRD_AUTOADDR
    2.15 -#define MULTI_INITRD		many in one support
    2.16 +#ifndef MULTI_INITRD
    2.17 +#define README_SUPPORT
    2.18 +#define COUNTER
    2.19 +#endif
    2.20  
    2.21  	.code16
    2.22  	.org	0
    2.23 @@ -118,6 +120,18 @@
    2.24  	popw	%ax			# limits = 0
    2.25  	incw	%cx			# cylinder 0, sector 1, clear Z
    2.26  	call	read_first_sectors	# read setup
    2.27 +#ifdef	README_SUPPORT
    2.28 +	xorw	%si, %si
    2.29 +	orw	readme, %si
    2.30 +	jz	readmeend
    2.31 +readmeloop:
    2.32 +	call	puts
    2.33 +	jz	readmeend
    2.34 +	call	wait4key
    2.35 +	cmpb	$27, %al
    2.36 +	jne	readmeloop
    2.37 +readmeend:
    2.38 +#endif
    2.39  loadsys:
    2.40  	movw	$0x200,%si
    2.41  type_of_loader	=	0x10
    2.42 @@ -348,6 +362,18 @@
    2.43  #define FLOPPY_CYLINDERS	80	
    2.44  #define FLOPPY_HEADS		2	
    2.45  
    2.46 +.macro	putsmsg
    2.47 +#ifdef COUNTER
    2.48 +	movw	$msgdigit+1-msg, %bx
    2.49 +nextdigit:
    2.50 +	decw	%bx
    2.51 +	incb	(%bx,%si)
    2.52 +	cmpb	$'9', (%bx,%si)
    2.53 +	ja	nextdigit
    2.54 +#endif
    2.55 +	call	puts
    2.56 +.endm
    2.57 +
    2.58  check_limits:
    2.59  	popw	%dx
    2.60          cmpb    %al, %cl		# max sector known ?
    2.61 @@ -407,7 +433,7 @@
    2.62  dpy_swap_floppy:
    2.63  #ifdef KEYBOARDLESS_SUPPORT
    2.64  	pushw	%bx
    2.65 -	call	puts
    2.66 +	putsmsg
    2.67  	popw	%bx
    2.68  	movw	%si, %bp
    2.69  waitfloppy:
    2.70 @@ -434,7 +460,7 @@
    2.71  	jne	waitfloppy
    2.72  waitfloppydone:
    2.73  #else
    2.74 -	call	puts
    2.75 +	putsmsg
    2.76  	cbw				# %ah = 0, get keyboard character
    2.77  	int	$0x16
    2.78  #endif
    2.79 @@ -495,7 +521,14 @@
    2.80  	.ascii	"B or "
    2.81  #endif
    2.82  swap_floppy:
    2.83 +#ifdef COUNTER
    2.84 +msg:
    2.85 +	.ascii	"Insert floppy disk 00"
    2.86 +msgdigit:
    2.87 +	.ascii	"1."
    2.88 +#else
    2.89  	.ascii	"Next!"
    2.90 +#endif
    2.91  	.byte	7,13,0			# swap detection needs 13, 0
    2.92  #ifdef MULTI_INITRD
    2.93  max_timeouts:
    2.94 @@ -506,4 +539,9 @@
    2.95  	.word	table
    2.96  	.byte	table+4-256
    2.97  #endif
    2.98 +#ifdef	README_SUPPORT
    2.99 +	.org	0x1EF
   2.100 +readme:
   2.101 +	.word	0
   2.102 +#endif
   2.103  	.org	0x1F1
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/syslinux/stuff/iso2exe/ifmem.S	Fri Jun 19 21:57:20 2015 +0200
     3.3 @@ -0,0 +1,55 @@
     3.4 +	.code16
     3.5 +	.org	0
     3.6 +type_of_loader	=	0x10
     3.7 +	
     3.8 +	orw	$0x8020, type_of_loader(%si) # loader type = 0x20 = bootsect-loader
     3.9 +	pushal
    3.10 +	
    3.11 +	movw	$10+16, %cx
    3.12 +fillbuf:
    3.13 +	pushw	$0
    3.14 +	loop	fillbuf
    3.15 +	popal			// clear regiters
    3.16 +maploop:
    3.17 +	movw	%sp, %di	// %es = %ss
    3.18 +	movb	$20, %cl
    3.19 +	movw	$0xE820, %ax
    3.20 +	movl	$0x534d4150, %edx
    3.21 +	int	$0x15
    3.22 +	sbbl	%eax, %edx
    3.23 +	jne	mapdone
    3.24 +	decw	16(%di)	
    3.25 +	jne	notram
    3.26 +	addw	8+2(%di), %bp
    3.27 +notram:
    3.28 +	orw	%bx, %bx
    3.29 +	jnz	maploop
    3.30 +mapdone:
    3.31 +	addw	$20, %sp
    3.32 +	shrw	$20-16,%bp
    3.33 +	jnz	mapdone2
    3.34 +	movb	$0x88, %ah
    3.35 +	int	$0x15
    3.36 +	xchgw	%ax, %bp
    3.37 +	shrw	$10, %bp
    3.38 +mapdone2:
    3.39 +	incw	%bp
    3.40 +// %bp : nb Mb	
    3.41 +	call	here
    3.42 +here:
    3.43 +	popw	%di
    3.44 +	movw	$0x1EE, %si
    3.45 +	lodsw
    3.46 +sizeloop:
    3.47 +	scasw			// %di += 2
    3.48 +	addw	$4, %ax
    3.49 +	cmpb	%al, (%si)	
    3.50 +	jbe	sizedone
    3.51 +	cmpw	%bp, sizes-here(%di)
    3.52 +	jbe	sizeloop
    3.53 +	movb	%al, (%si)
    3.54 +sizedone:
    3.55 +	popal
    3.56 +	lret			// need %si
    3.57 +sizes:
    3.58 +
     4.1 --- a/syslinux/stuff/iso2exe/taziso	Fri Jun 19 19:56:46 2015 +0200
     4.2 +++ b/syslinux/stuff/iso2exe/taziso	Fri Jun 19 21:57:20 2015 +0200
     4.3 @@ -1050,6 +1050,8 @@
     4.4  }
     4.5  
     4.6  if [ "$1" == "--build" ]; then	#install-begin
     4.7 +	uuencode -m - < ifmem.bin | sed -e '/^ifmemcode$/r/dev/stdin' \
     4.8 +	  -e '/^ifmemcode$/d' -i $0
     4.9  	uuencode -m - < bootloader.bin | sed -e '/^bootloader$/r/dev/stdin' \
    4.10  	  -e '/^bootloader$/d' -e '/install-begin$/,/install-end$/d' -i $0
    4.11  	exit
    4.12 @@ -1103,6 +1105,13 @@
    4.13  	echo "$1" | tr [A-Z] [a-z]
    4.14  }
    4.15  
    4.16 +ifmemcode()
    4.17 +{
    4.18 +	uudecode <<EOT
    4.19 +ifmemcode
    4.20 +EOT
    4.21 +}
    4.22 +
    4.23  floppyset()
    4.24  {
    4.25  	gotcdfile isolinux.cfg
    4.26 @@ -1161,6 +1170,12 @@
    4.27  		i=$(($pos + 0x1FC - ($n*4)))
    4.28  		bytes2bin $(($i % 256)) $((i / 256)) 252 | ddq bs=1 \
    4.29  			conv=notrunc seek=494 count=3 of=/tmp/fd$$
    4.30 +		s=$(($i - 2*$(echo "$SIZES" | wc -w)))
    4.31 +		p=$(($s - $(ifmemcode | wc -c)))
    4.32 +		ifmemcode | ddq bs=1 conv=notrunc seek=$p of=/tmp/fd$$
    4.33 +		words2bin $SIZES | ddq bs=1 conv=notrunc seek=$s of=/tmp/fd$$
    4.34 +		bytes2bin 154 $(($p%256)) $(($p/256)) 0 144 | \
    4.35 +		ddq bs=1 conv=notrunc seek=60 of=/tmp/fd$$
    4.36  	fi
    4.37  	for r in $len ; do
    4.38  		words2bin $(($r & 0xFFFF)) $(($r >> 16)) | ddq conv=notrunc \