From a3c54c48fe6c02a5510aa024d67123e7685c12f6 Mon Sep 17 00:00:00 2001
From: gfdgd_xi <3025613752@qq.com>
Date: Sun, 5 Nov 2023 20:03:00 +0800
Subject: [PATCH] =?UTF-8?q?=E5=BD=A9=E8=9B=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 build.sh         |  12 +++++++
 test-kvm.asm     |  81 +++++++++++++++++++++++++++++++++++++++++++++++
 test-kvm.asm.bin | Bin 512 -> 512 bytes
 test.qcow2       | Bin 0 -> 1024 bytes
 4 files changed, 93 insertions(+)
 create mode 100755 build.sh
 create mode 100644 test.qcow2

diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..f651134
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+#cd `dirname $0`
+bin=$1
+nasm -f bin $1 -o `basename $1`.bin
+if [[ $? != 0 ]];then
+	exit
+fi
+sudo modprobe nbd 8
+sudo qemu-nbd `dirname $0`/test.qcow2 --connect /dev/nbd0
+sudo dd if=`basename $1`.bin of=/dev/nbd0
+sudo qemu-nbd -d /dev/nbd0
+kvm --hda `dirname $0`/test.qcow2 -rtc base=localtime
diff --git a/test-kvm.asm b/test-kvm.asm
index 563978e..a5ef235 100644
--- a/test-kvm.asm
+++ b/test-kvm.asm
@@ -74,6 +74,87 @@ showTailText:
 		mov al,[ds:si]
 		mov byte [es:di],al
 		loop showTailTextLoop
+	
+
+get_data:
+	mov di,80*2*25-2
+
+	; 读取秒
+	mov al,0x00
+	call read_time
+	mov byte [es:di-4],':'
+	mov byte [es:di-2],ah
+	mov byte [es:di],al
+	; 读取分钟
+	mov al,0x02
+	call read_time
+	mov byte [es:di-10],':'
+	mov byte [es:di-8],ah
+	mov byte [es:di-6],al
+	; 读取小时
+	mov al,0x04
+	call read_time
+	mov byte [es:di-14],ah
+	mov byte [es:di-12],al
+	; 读取日
+	mov al,0x07
+	call read_time
+	mov byte [es:di-22],'.'
+	mov byte [es:di-20],ah
+	mov byte [es:di-18],al
+	; 读取月
+	mov al,0x08
+	call read_time
+	mov byte [es:di-28],'.'
+	mov byte [es:di-26],ah
+	mov byte [es:di-24],al
+	; 读取年
+	mov al,0x09
+	call read_time
+	mov byte [es:di-32],ah
+	mov byte [es:di-30],al
+	mov cx,showTipsStr-tipsStr
+	sub di,30
+	mov ax,tipsStr
+	mov ds,ax
+	; 先跳过文本显示
+	jmp near showTipsStrEnd
+	; 显示提示文本
+	tipsStr: db 'Time:20'
+	showTipsStr:
+		mov di,cx
+		add di,showTipsStr+0x7c0
+		mov dl,[ds:di]
+		mov di,80*2*25-36
+		sub di,cx
+		mov byte [es:di],dl
+		loop showTipsStr
+	showTipsStrEnd:
+
+jmp near get_data
+
+
+read_time:
+	out 0x70,al
+	in al,0x71
+	call bcd_to_ascii
+	ret
+
+; 用于编码转换:BCD=》ASCII
+; 输入:AL=bcd码
+; 输出:AX=ascii
+bcd_to_ascii:
+	mov ah,al
+	and al,0x0f
+	add al,0x30
+
+	shr ah,4
+	and ah,0x0f
+	add ah,0x30
+	ret
+
+
+
 
 poweroff:
 	; 跳过关机
diff --git a/test-kvm.asm.bin b/test-kvm.asm.bin
index 9e528e26cbb67119bb57c02560c16419f751ca43..16207645af869120a079324615f8d9921891e1a2 100644
GIT binary patch
delta 181
zcmZo*X<(VKrGEcB{tXN-+8NZ2x&E<I>qz~l*1@`g=|vex;2TKbhgyg0uMI3OQW$`o
zPe9I>4eT$%LDH}EfFf^zBJVbEyl@4HJOPP31B$%Z!1=-$q~QUO^JphKL-TvN9cqky
zH(p9Hgk<KXS{WI1o^L$<mP5m?OLTt?zvg+h4$((%Ul#s<R`8_o1tY`Zjw34kECvVO
Turxg3Z#ZIbc;c4DOrfg)aIjHj

delta 21
bcmZo*X<(VKWpXs*;>it+bwI4i6uJrkR~HAb

diff --git a/test.qcow2 b/test.qcow2
new file mode 100644
index 0000000000000000000000000000000000000000..a6c28b68376b62994c54eb783191f08a9a231f67
GIT binary patch
literal 1024
zcmdnNu%qw5&I|0F=NbR29b;u^KF$cF_#eGjJI2Pqz_4>Z!+r*a&htRA4-f^9J^=-Q
z!ky<Ek2COt#6eo2Y=%cKUh*(_q~_%0D}?74<)kR?<YCxxfW7ZV=P8h~eIX3ZuNWDx
z*>$m~b+A5q^-_?*$iT>;&M&`QAw4Z6Jw>4+bEhD(4v@k78c}pT+dq$g1H+4U2DM|Z
zf2`CxQvU(X+Q9Up3?%RkB=AG6!}Zq&mKP}uK+Y#1=gS867vUi3S9(B^H$ahh8#rFL
zf<&HxM4kafUToleVGPpn0LXc?lbxaYz1$8p#=aXbr5Hjob5pI13_yN<%VF0gy1#~B
z^SoMz=%cqU3;#bWcvAR+k>PO15fy$Gg9C3^8lLbs95FcjlAB=%d+=^XhMmj|XGMX5
RIru>6s=?=`Q5VrO1OPaWoaF!j

literal 0
HcmV?d00001