[comp.os.minix] Assembly conversions

ast@cs.vu.nl (Andy Tanenbaum) (06/12/91)

echo x - asld_to_xenix
sed '/^X/s///' > asld_to_xenix << '/'
X# Conversion from PC/IX assembler to Xenix assembler.
X
X# 	asld_to_xenix file.x >file.s
X
X
X
X# Check for args
Xcase $# in
X1) ;;
X*) echo "Usage: $0 oldfile >newfile
X   exit 1
X   ;;
Xesac
X
X
Xsed -e '
X:start
Xs/^\([^|]*\)!/\1~/g
X/^[ 	]*!/{
Xp
Xd
X}
X/^[_a-zA-Z][_a-zA-Z0-9]*:/!s/^/:/
Xh
Xs/^:[ 	]*//
Xs/^[_a-zA-Z][_a-zA-Z0-9]*:[ 	]*//
Xs/^\.byte\([ 	]\)/.data1\1/
Xs/^\.word\([ 	]\)/.data2\1/
Xs/^\.long\([ 	]\)/.data4\1/
Xs/;\([ 	]*\.\)byte\([ 	]\)/;\1data1\2/g
Xs/;\([ 	]*\.\)word\([ 	]\)/;\1data2\2/g
Xs/;\([ 	]*\.\)long\([ 	]\)/;\1data4\2/g
Xs/^\.globl\([ 	]\)/.extern\1/
Xs/(b\([xp]\)_\([sd]\)i)/(b\1),(\2i)/g
Xs/^seg[ 	][ 	]*\([ecsd]\)s$/\1seg/
Xs/^seg[ 	][ 	]*\([ecsd]\)s\([ 	]\)/\1seg\2/
Xs/^in\([ 	]\)/inb\1/
Xs/^in$/inb/
Xs/^out\([ 	]\)/outb\1/
Xs/^out$/outb/
Xs/^stob\([ 	]\)/stosb\1/
Xs/^stob$/stosb/
Xs/^stow\([ 	]\)/stos\1/
Xs/^stow$/stos/
Xs/^lodb\([ 	]\)/lodsb\1/
Xs/^lodb$/lodsb/
Xs/^lodw\([ 	]\)/1lods\1/
Xs/^lodw$/lods/
Xs/^scab\([ 	]\)/scasb\1/
Xs/^scab$/scasb/
Xs/^scaw\([ 	]\)/scas\1/
Xs/^scaw$/scas/
Xs/^jc\([ 	]\)/jb\1/
Xs/^jnc\([ 	]\)/jnb\1/
Xs/^calli\([ 	]\)/callf\1/
Xs/^jmpi\([ 	]\)/jmpf\1/
Xs/^reti\([ 	]\)/retf\1/
Xs/^reti$/retf/
Xs/^j\([ 	]\)/jmp\1/
Xs/^br\([ 	]\)/jmp\1/
Xs/^beq\([ 	]\)/je\1/
Xs/^bge\([ 	]\)/jge\1/
Xs/^bgt\([ 	]\)/jg\1/
Xs/^bhi\([ 	]\)/jnbe\1/
Xs/^bhis\([ 	]\)/jnb\1/
Xs/^ble\([ 	]\)/jle\1/
Xs/^blo\([ 	]\)/jb\1/
Xs/^blos\([ 	]\)/jbe\1/
Xs/^blt\([ 	]\)/jnge\1/
Xs/^bne\([ 	]\)/jne\1/
Xs/|/!/
XH
Xg
X/^[_a-zA-Z][_a-zA-Z0-9]*:/{
Xs/:\([ 	]*\)[^ 	]*.*\n/:\1/
X}
X/^:/{
Xs/:\([ 	]*\)[^ 	]*.*\n/\1/
X}' <$1
/
echo x - xenix_to_asld
sed '/^X/s///' > xenix_to_asld << '/'
X# This shell script converts the kernel assmebly language files from V2
X# (Xenix) format to V1 (asld) format.  The call is:
X# 	xenix_to_asld file.x >file.s
X
XKERDIR=/usr/src/kernel
XLIBDIR=/usr/lib.old
XCPPFLAGS="-DASLD -P"
X
Xif test -r $KERDIR; then : ; else echo Cannot read $KERDIR; exit 1; fi
Xif test -r $LIBDIR; then : ; else echo Cannot read $LIBDIR; exit 1; fi
Xecho DONE
X
X# Check for args
Xcase $# in
X1) ;;
X*) echo "Usage: $0 file.x >file.s"
X   exit 1
X   ;;
Xesac
X
X# Run cpp first to handle #include and expand macros
X$LIBDIR/cpp $CPPFLAGS $1 -I$KERDIR  >tmp.1
X
Xsed -e '
X:start
X/^#/{
Xn
Xbstart
X}
Xs/^[ 	][ 	]*//
Xs/[!].*//
Xs/[ 	]*$//
Xh
Xs/^[_a-zA-Z][_a-zA-Z0-9]*:[ 	]*//
Xs/\.data1/.byte /g
Xs/\.data2/.word /g
Xs/\.data4/.long /g
X#
X# Old .globl and old .extern are mapped to new .extern. Thus it is
X# not possible to simply map .extern to .globl.
X#
X#s/^\.extern[ 	][ 	]*/.globl /g
Xs/(b\([xp]\)),(\([sd]\)i)/(b\1_\2i)/g
Xs/^\([ecsd]\)seg$/seg \1s/g
Xs/^inb\([ 	]*\)/in\1/g
Xs/^outb\([ 	]*\)/out\1/g
Xs/^stosb$/stob/g
Xs/^stos$/stow/g
Xs/^lodsb$/lodb/g
Xs/^lods$/lodw/g
Xs/^scasb$/scab/g
Xs/^scas$/scaw/g
Xs/^callf[ 	][ 	]*/calli /g
Xs/^jmpf[ 	][ 	]*/jmpi /g
Xs/^retf$/reti/
X#
X# Old bcc uses j for short jumps and does not do jump sizing on jmp.
X#
Xs/^jmp[ 	][ 	]*\([_a-zA-Z]\)/j \1/g
Xs/^br[ 	][ 	]*/jmp /g
XH
Xg
X/^[_a-zA-Z][_a-zA-Z0-9]*:/{
Xs/:.*\n/: /
Xs/^/\
X/
X}
Xs/^.*\n//' <tmp.1 >tmp.2
X
X
Xsed -e 'y/$/#/' <tmp.2 | grep "."
Xrm -f $$.?
Xexit 0
X
Xrm -rf tmp.?
/