什么是点阵?
以前,因为开发电脑的是美国,而英语只有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)再见。