NASM 纯汇编打造简单中文操作系统(3 kernel.asm 内核(实现汉字的显示,鼠标的支持等))

三、kernel.asm 内核(实现汉字的显示,鼠标的支持等)

[BITS 32]
[ORG 0x0000]
jmp main

;-------------------------------------------------------------------------------------------------------- 
;数据区
;-------------------------------------------------------------------------------------------------
SYSTB: EQU 0x10000
SYSVAR: EQU 0x13800
SYSSOUND: EQU 0x127ff
SYSMOUSEBUF: EQU 0x4000 ;鼠标指针双缓冲地址
VBE_FILP: EQU 0x100000 ;显示交换缓存
FontLibrary: EQU 0x20000 ;0x20000 ;字库地址+0*32是第一个汉字阿的地址
;------------------------------------------------------------------------------------------------
Delay:;利用clk2的gate2产生1.5us.6*1.5us=1毫秒
 PUSH EBP
 MOV EBP,ESP
 MOV EAX,[ESP+8] ;得到延迟数
 MOV ECX,6
 MUL ECX  ;6=1毫秒
 MOV ECX,EAX
GETT: 
 IN AL,0x61
 AND AL,0x10 ;是否是PB4发生的时钟
 CMP AL,AH
 JE GETT
 MOV AH,AL
 LOOP GETT
 MOV ESP,EBP
 POP EBP
ret


main:
 MOV AX,0x10
 MOV ES,AX
 MOV GS,AX
 MOV DS,AX
 MOV FS,AX
 MOV SS,AX
 MOV ESP,0x3FFF
 ;在数据段开辟空间
 MOV EBX,[DS:SYSVAR+0]  ;VESA_ADDRESS
 MOV [DS:SYSVAR+4],DWORD 0 ;NULL 
 MOV [DS:SYSVAR+8],WORD 800 ;SCREEN_WIDTH
 MOV [DS:SYSVAR+0x0A],WORD 600 ;SCREEN_HEIGHT
 ;鼠标变量申明
 MOV [DS:SYSVAR+0x0C],WORD 440  ;MouseXPOS
 MOV [DS:SYSVAR+0x0E],WORD 330  ;MouseYPOS
 MOV [DS:SYSVAR+0x10],BYTE 0x0  ;MouseEventCount 
 MOV [DS:SYSVAR+0x11],BYTE 0  ;MouseButton
 MOV [DS:SYSVAR+0x12],WORD 0  ;TempPos
 MOV [DS:SYSVAR+0x14],WORD 440  ;oldx
 MOV [DS:SYSVAR+0x16],WORD 330  ;oldy
 MOV [DS:SYSVAR+0x18],WORD 0 ;0

 MOV [DS:SYSVAR+0x20],WORD 0xB1C7 ;鼻
 MOV [DS:SYSVAR+0x22],WORD 0xCCE9 ;涕
 MOV [DS:SYSVAR+0x24],WORD 0xD6D0 ;中
 MOV [DS:SYSVAR+0x26],WORD 0xCEC4 ;文
 MOV [DS:SYSVAR+0x28],WORD 0xB2D9 ;操
 MOV [DS:SYSVAR+0x2A],WORD 0xD7F7 ;作
 MOV [DS:SYSVAR+0x2C],WORD 0xCFB5 ;系
 MOV [DS:SYSVAR+0x2E],WORD 0xCDB3 ;统
 MOV [DS:SYSVAR+0x30],WORD 0xA3F6 ;v
 MOV [DS:SYSVAR+0x32],WORD 0xA3B1 ;1
 MOV [DS:SYSVAR+0x34],WORD 0xA3AE ;.
 MOV [DS:SYSVAR+0x36],WORD 0xA3B0 ;0

  
 CALL SetChip8259A  ;初始化8259A芯片
 CALL CreateIdtTable ;创建IDT表

 PUSH WORD 0
 PUSH WORD 180
 PUSH WORD 255
 CALL RGB
 PUSH WORD 1  ;使用缓冲
 PUSH WORD 0  ;starty
 PUSH WORD 0  ;startx
 PUSH WORD 600  ;endy 
 PUSH WORD 800  ;endx
 PUSH AX
 CALL DrawBox  ;画出桌面背景

 MOV ECX,12
 MOV EBX,0x36
sh:
 PUSH BX
 PUSH CX
 PUSH WORD [DS:SYSVAR+EBX] ;汉字编码0xB0A1开始
 PUSH WORD 0;颜色
 PUSH WORD 0;是否使用背景颜色0不使用1使用
 PUSH WORD  0;背景颜色
 PUSH WORD 0;1是与背景求反色0不求反色
 PUSH WORD 0;y坐标
 MOV AX,CX
 MOV CX,20
 MUL CX
 SUB AX,20
 PUSH AX ;x坐标
 CALL DrawText
 POP CX
 POP BX
 SUB BX,2
LOOP sh
 
 CALL SetCursorColor ;初始化鼠标光标

 
 CALL InitKeybeyboard ;初始化键盘驱动 
 ;画出鼠标
 PUSH  DWORD SYSMOUSEBUF+0x80;鼠标像素所在位置
 PUSH WORD  0x80
 PUSH WORD  8
 PUSH WORD  8
 PUSH WORD  [DS:SYSVAR+0x0E];y
 PUSH WORD  [DS:SYSVAR+0x0C];x
 CALL  DrawPixelBuf   
 CALL InitMouse ;初始化鼠标驱动
 
 JMP $
%include "interrupt.inc" ;中断控制
%include "mouse.inc"  ;鼠标驱动
%include "vesa.inc"  ;显卡支持
%include "keyboard.inc"  ;键盘驱动
TIMES 0x1000-($-$$) DB 0

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

替计划实验室Plan T Labs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值