From f1c0dc7e14109cd1b7d0bebdc114e005352f1dae Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Fri, 23 May 2008 02:48:03 +0000 Subject: reboot with CRT turn off effect, GAS version, standallone --- Makefile | 23 +++++++++++++++++++++++ reboot.S | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 Makefile create mode 100644 reboot.S diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..81a22c8 --- /dev/null +++ b/Makefile @@ -0,0 +1,23 @@ +# $Id$ + +PROG= reboot +SRCS= reboot.S +AFLAGS+=-I${.CURDIR} +LD= ld +LDFLAGS=-nostdlib -Ttext 0 -x -N -s -Bstatic -e start +NOMAN= + +INSTALL_STRIP= +SADIR=${.CURDIR}/.. +S= ${.CURDIR}/../../../.. + +${PROG}: $(OBJS) $(DPADD) + $(LD) $(LDFLAGS) -o $(PROG) $(OBJS) $(LDADD) + @size $(PROG) + @if [ -x ${.OBJDIR}/${PROG} ]; then \ + objcopy -O binary ${PROG} ${.OBJDIR}/.tmp;\ + mv -f ${.OBJDIR}/.tmp ${.OBJDIR}/${PROG}; \ + ls -l ${.OBJDIR}/${PROG}; \ + fi + +.include diff --git a/reboot.S b/reboot.S new file mode 100644 index 0000000..bfab971 --- /dev/null +++ b/reboot.S @@ -0,0 +1,54 @@ +/* $Id$ */ + + .file "reboot.S" + .text + .code16 + .globl start +start: + push %cs /* go */ + pop %ds + mov $0x13, %ax + int $0x10 + push $0xa000 + pop %es + mov $0x60, %dx + mov $64000, %cx + + xor %di ,%di /* clear screen */ + xor %ax, %ax + mov $320*200/2, %cx + rep + stosw + + mov $320*100, %di /* reducing line */ + mov $320/2, %dx +clear: xor %ax, %ax /* left black dot */ + stosb + mov %dx, %cx + dec %cx + mov $0xf0f, %ax + rep + stosw + xor %ax, %ax /* right black dot */ + stosb + sub %dx, %di + sub %dx, %di + inc %di + mov $15000, %cx +1: loop 1b + dec %dx + jne clear + + mov $32, %ax /* blinking dot */ +dot: stosb + dec %di +1: loop 1b +2: loop 2b +3: loop 3b + dec %ax + cmp $16, %ax + jne dot + + mov $0x3, %ax + int $0x10 + ljmp $0xffff, $0x0 /* reboot */ -- cgit v1.2.3