summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2008-05-23 02:48:03 +0000
committerDimitri Sokolyuk <demon@dim13.org>2008-05-23 02:48:03 +0000
commitf1c0dc7e14109cd1b7d0bebdc114e005352f1dae (patch)
tree79572096eb58b0ee82382d17c83e2d0f78450426
parentf1e0ff8f952ad82eb337a523c78568983c84c5f7 (diff)
reboot with CRT turn off effect, GAS version, standallone
-rw-r--r--Makefile23
-rw-r--r--reboot.S54
2 files changed, 77 insertions, 0 deletions
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 <bsd.prog.mk>
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 */