开发操作系统(3)点阵

什么是点阵?

以前,因为开发电脑的是美国,而英语只有26个字母(加大写52个),用1byte就足以了。但是,在其他国家可就不一样了。(例如中国,常用汉字就有2500个!)但,使用点阵可以自行绘图,就可以绘制出汉字!

输入:

ah=0ch

al=颜色

cx=x坐标

dx=y坐标

注意!0ch写点阵只在绘图模式下生效!

一般用12h来写点阵(640x480,16色)

现在,我想做一个操作系统,名字就叫:Task OS(任务操作系统)

例如,我想绘制一个鼠标。si为x坐标,bp为y坐标。

mov ah,0
mov al,12h
int 10h
mov ah,06h
mov al,0
mov bh,0x07
mov ch,0
mov cl,0
mov dh,29
mov dl,79
int 10h
mov si,2
mov bp,2
mov bl,10
mov dx,bp
WriteMouse1:
mov ah,0ch
mov bh,0
mov cx,si
mov al,0
int 10h
add dx,1
dec bl
jnz WriteMouse1
mov ah,0ch
mov bh,0
mov cx,si
add cx,1
mov dx,bp
add dx,1
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,2
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,3
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,4
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,5
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,6
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,1
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,7
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,7
mov al,0
int 10h

jmp $

成功使用点阵打印出一个鼠标!

 但现在它还不能移动,我们可以用上一篇文章的键盘支持来移动。

org 0x7c00
mov ah,0
mov al,12h
int 10h
mov ah,13h
mov al,01h
mov bp,Msg1
mov cx,Msg1len
mov bl,0xf
mov dh,0
mov dl,0
int 10h
call GuiInit
jmp Kernel
Msg1 db "GuiInit..."
Msg1len equ $-Msg1
PrintStrInit:
sub dl,32
sub dh,19
ret
GuiInit:
push bp
mov ah,06h
mov al,0
mov bh,0x07
mov ch,0
mov cl,0
mov dh,29
mov dl,79
int 10h
mov ah,13h
mov al,01h
mov bp,Msg2
mov cx,Msg2len
mov bl,0x8f
mov dl,48
mov dh,0
call PrintStrInit
int 10h
mov bp,641
mov cx,511
mov dx,-290
jmp WriteFExian
Msg2 db "Task OS 1.0"
Msg2len equ $-Msg2
WriteFExian:
mov ah,0ch
mov al,0x01
int 10h
add cx,1
dec bp
jnz WriteFExian
pop bp
ret
MouseShow:
mov bl,10
mov dx,bp
WriteMouse1:
mov ah,0ch
mov bh,0
mov cx,si
mov al,0
int 10h
add dx,1
dec bl
jnz WriteMouse1
mov ah,0ch
mov bh,0
mov cx,si
add cx,1
mov dx,bp
add dx,1
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,2
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,3
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,4
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,5
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,6
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,1
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,7
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,6
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,2
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,3
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,4
mov dx,bp
add dx,9
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,8
mov al,0
int 10h
mov ah,0ch
mov bh,0
mov cx,si
add cx,5
mov dx,bp
add dx,7
mov al,0
int 10h
ret
WriteAN:
;si,bx
push bx
mov cl,20
mov dx,si
WriteAN1:
Kernel:
mov si,300
mov bp,200
KeyWait1:
call GuiInit
call MouseShow
mov ah,0
int 16h
cmp ah,"H"
je MouseUp
cmp ah,"P"
je MouseDown
cmp ah,"K"
je MouseLeft
cmp ah,"M"
je MouseRight
jmp KeyWait1
MouseUp:
sub bp,7
jmp KeyWait1
MouseDown:
add bp,7
jmp KeyWait1
MouseLeft:
sub si,7
jmp KeyWait1
MouseRight:
add si,7
jmp KeyWait1

 

这篇文章到这里就结束了。

我们在开发操作系统(4)再见。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值