分享
 
 
 

虚拟实现汉字系统----VVDOS -- 源码 -- 保护模式程序 - 2

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

1、HZ27.INC

; HZ27.inc

;

;

;

;

;

;

;

os32_code segment use32 public

assume cs:os32_code,ds:data

BeginPut proc near

mov dx,3ceh

mov al,5 ; write 0

out dx,al

inc dx

mov al,0

out dx,al

mov dx,3ceh

mov al,1 ; enable set /reset register

out dx,al

inc dx

mov al,0fh

out dx,al

ret

BeginPut endp

EndPut proc near

mov dx,3ceh

mov al,0 ; default set/reset value

out dx,al

inc dx

out dx,al

dec dx

mov al,1 ; default enable set/reset value

out dx,al

inc dx

mov al,0

out dx,al

dec dx

mov al,8 ;default bit mask value

out dx,al

inc dx

mov al,0ffh

out dx,al

ret

EndPut endp

; seg: ds=OS32DataSel,es=User32DataSel

;par

;edi: GraphOffset

;ch: color

;cl: bitmask can put 8 points to screen

PutPixel macro

mov dx,3ceh

mov al,0 ; set /reset register

out dx,al

inc dx

mov al,ch ; color only 8 bits

out dx,al

dec dx

mov al,8 ; bit mask register

out dx,al

inc dx

mov al,cl

out dx,al

or byte ptr es:[edi],al ; update the pixel

endm

;para

;edi: first offset

;ax: ah:attrib,al:8bits

Put8Pixel proc near

push eax

mov ch,ah

and ch,0fh ; fore color

mov cl,al

;call PutPixel

PutPixel

pop eax

mov ch,ah

and ch,0f0h

shr ecx,4

not al

mov cl,al

;call PutPixel

PutPixel

ret

Put8Pixel endp

;para al:char,ah:attr

;edi: graphoffset

PutChar proc near

mov tmpcolor,ah

call GetTextCodeAddress ; get esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

add edi,(640/8)

mov loopvar,16

tloopcont:

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

inc esi

add edi,(640/8)

dec loopvar

cmp loopvar,0

ja tloopcont

dec esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

ret

PutChar endp

;para al: char code

;RET esi: first offset

GetTextCodeAddress proc near

and eax,0ffh ; only low 8 bits

sal eax,4

add eax,TextCodeAddress

mov esi,eax

ret

GetTextCodeAddress endp

;para ax:char,bl:color

;edi:offset

PutHZ proc near

push eax

mov tmpcolor,bl

mov tmpoffset,edi

call GetHZCodeAddress

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

add edi,(640/8)

mov loopvar,16

htloopcont:

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

inc esi

inc esi

add edi,640/8

dec loopvar

cmp loopvar,0

ja htloopcont

dec esi

dec esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

pop eax

call GetHZCodeAddress

mov edi,tmpoffset

inc edi

inc esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

add edi,640/8

dec esi

mov loopvar,16

htloopcont2:

inc esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

inc esi

add edi,640/8

dec loopvar

cmp loopvar,0

ja htloopcont2

dec esi

mov al,es:[esi]

mov ah,tmpcolor

call Put8Pixel

ret

PutHZ endp

;para ax: ax: al,first code ah: second code

;RET esi: 32 bits abs Address

GetHZCodeAddress proc near

xor ebx,ebx

mov ecx,ebx

sub al,0ah

sub ah,0ah

and ax,7f7fh

cmp al,24

jae goto

sub ah,23

mov cl,ah

xor eax,eax

mov al,cl

sal eax,5

sub eax,127*32

add eax,HZCodeAddress

mov esi,eax

ret

goto:

sub al,23

sub ah,23

mov cx,ax

xor eax,eax

mov al,cl

mov bl,94

mul bl ; ☆★

mov cl,ch

xor ch,ch

add ax,cx

sub ax,7fh ; think it

sal eax,5

add eax,HZCodeAddress

mov esi,eax

ret

GetHZCodeAddress endp

GetXY proc near

mov dl,BIOSCurX

mov dh,BIOSCurY

mov ch,7 ; first line

mov cl,9 ; last line

ret

GetXY endp

GotoXY proc near

mov BIOSCurX,dl

mov BIOSCurY,dh

ret

GotoXY endp

os32_code ends

data segment use16 public

textWidth dd 79

textHigh dd 24

GraphWidth dd 640

GraphHigh dd 480

GraphTextWidth dd 8

GraphTextHigh dd 16

data ends

data segment use16 public

Int8IsRun dd 0

Int8IsRun1 dd 0

error_code dd 0

curx dd 0

cury dd 0

oldx db 0

oldy db 0

loopvar dd 0

tmpcolor db 0

entervar dd 0

tmpoffset dd 0

tmpsave dw 0

tmpcurline db 0

data ends

data segment use16 public

TextCodeAddress dd 811934 ; rom 8*16 bits char code

ScreenBufBase dd 0b8000h

GraphDataBase dd 0a0000h ;may movable

PageA0000HBase dd ?

PageB8000HBase dd ?

PageE0000HBase dd ?

HZCodeAddress dd 0 ; HZ16 address

CodeAddress dd 0 ; 64k free memory,4k size

VirtualPageAddress dd 0 ; in CodeAddress

TextBufAddress dd 0

VirtualPage2Address dd 0

NowCodeAddress dd 0

HZExample db '王',0,0,0

data ends

os32_code segment use32 public

assume cs:os32_code,ds:data

CompScreenAndTextBuf proc near

mov cury,0

call BeginPut

NextLine:

mov esi,VirtualPageAddress ;ScreenBufBase

mov edi,TextBufAddress

mov curx,0

mov eax,cury

mov edx,160

mul edx

add esi,eax

add edi,eax

NextChar:

mov eax,es:[esi]

cmp curx,79

je ascChar

call IsTableChar

jc ascChar

cmp eax,es:[edi]

je DoneThisHZ

mov es:[edi],eax

pushad

call GetGraphAbsOffset

mov ax,es:[esi]

mov bl,ah

mov ah,es:[esi]+2

call PutHZ

popad

DoneThisHZ:

inc esi

inc esi

inc edi

inc edi

inc curx

jmp DoneThisChar

ascChar:

cmp ax,es:[edi]

je DoneThisChar

mov es:[edi],ax

pushad

call GetGraphAbsOffset

mov ax,es:[esi]

call PutChar

popad

DoneThisChar:

inc esi

inc esi

inc edi

inc edi

inc curx

cmp curx,80

jb NextChar

inc cury

cmp cury,25

jb NextLine

call EndPut

ret

CompScreenAndTextBuf endp

GetSameChar proc near ; cl: char :ch

push ebx

xor ecx,ecx

mov edx,ecx

sub ebx,6

cmp al,es:[ebx]

jne same_1

inc cl

same_1:

add ebx,2

cmp al,es:[ebx]

jne same_2

inc cl

same_2:

add ebx,2

cmp al,es:[ebx]

jne same_3

inc cl

inc dl

same_3:

add ebx,4

cmp al,es:[ebx]

jne same_4

inc dl

inc ch

same_4:

add ebx,2

cmp al,es:[ebx]

jne same_5

inc ch

same_5:

add ebx,2

cmp al,es:[ebx]

jne same_6

inc ch

same_6:

sub ebx,6

sub ebx,480

cmp al,es:[ebx]

jne same_7

inc dl

same_7:

add ebx,160

cmp al,es:[ebx]

jne same_71

inc dl

same_71:

add ebx,160

cmp al,es:[ebx]

jne same_8

inc dl

same_8:

add ebx,320

cmp al,es:[ebx]

jne same_9

inc dh

same_9:

add ebx,160

cmp al,es:[ebx]

jne same_10

inc dh

same_10:

add ebx,160

cmp al,es:[ebx]

jne same_101

inc dh

same_101:

pop ebx

ret

GetSameChar endp

GetNextChar proc near

push ebx

inc ebx

inc ebx

mov dx,es:[ebx]

pop ebx

ret

GetNextChar endp

GetLastChar proc near

push ebx

dec ebx

dec ebx

mov dx,es:[ebx]

pop ebx

ret

GetLastChar endp

GetUpChar proc near

push ebx

sub ebx,160

mov dx,es:[ebx]

pop ebx

ret

GetUpChar endp

GetDownChar proc near

push ebx

add ebx,160

mov dx,es:[ebx]

pop ebx

ret

GetDownChar endp

GetNextNextChar proc near

push ebx

inc ebx

inc ebx

inc ebx

inc ebx

mov dx,es:[ebx]

pop ebx

ret

GetNextNextChar endp

GetLastLastChar proc near

push ebx

dec ebx

dec ebx

dec ebx

dec ebx

mov dx,es:[ebx]

pop ebx

ret

GetLastLastChar endp

GetUpUpChar proc near

push ebx

sub ebx,320

mov dx,es:[ebx]

pop ebx

ret

GetUpUpChar endp

GetDownDownChar proc near

push ebx

add ebx,320

mov dx,es:[ebx]

pop ebx

ret

GetDownDownChar endp

IsTableChar proc near

mov ebx,esi

cmp al,176

je isBlockChar

cmp al,177

je isBlockChar

cmp al,178

je isBlockChar

cmp al,219

je isHalfBlockChar

cmp al,220

je isAscTableChar

cmp al,221

je isAscTableChar

cmp al,222

je isHZCodeChar

cmp al,223

je isAscTableChar

cmp al,196

je isLine196Char

cmp al,205

je isLine205Char

cmp al,179

je isLine179Char

cmp al,186

je isLine186Char

cmp al,218

je isLine218Char

cmp al,195

je isLine195Char

cmp al,192

je isLine192Char

cmp al,194

je isLine194Char

cmp al,197

je isLine197Char

cmp al,193

je isLine193Char

cmp al,191

je isLine191Char

cmp al,180

je isLine180Char

cmp al,217

je isLine217Char

cmp al,201

je isLine201Char

cmp al,204

je isLine204Char

cmp al,200

je isLine200Char

cmp al,203

je isLine203Char

cmp al,206

je isLine206Char

cmp al,202

je isLine202Char

cmp al,187

je isLine187Char

cmp al,185

je isLine185Char

cmp al,188

je isLine188Char

jmp isHZCodeChar

isBlockChar:

call GetSameChar

cmp cl,3

jae isAscTableChar

cmp ch,3

jae isAscTableChar

cmp dl,3

jae isAscTableChar

cmp dh,3

jae isAscTableChar

jmp isHZCodeChar

isHalfBlockChar:

call GetSameChar

cmp cl,3

jae isAscTableChar

cmp ch,3

jae isAscTableChar

cmp dl,3

jae isAscTableChar

cmp dh,3

jae isAscTableChar

jmp isHZCodeChar

isLine196Char:

call GetLastChar

cmp dl,196

je isChar196Cont1

call GetNextChar

cmp dl,196

je isChar196Cont2

jmp isHZCodeChar

isChar196Cont1:

call GetNextChar

cmp dl,196

je isChar196Cont1_1

cmp dl,194

je isChar196Cont1_1

cmp dl,197

je isChar196Cont1_1

cmp dl,193

je isChar196Cont1_1

cmp dl,191

je isChar196Cont1_1

cmp dl,180

je isChar196Cont1_1

cmp dl,217

je isChar196Cont1_1

jmp isHZCodeChar

isChar196Cont1_1:

call GetLastLastChar

cmp dl,196

je isChar196Cont1_2

cmp dl,218

je isChar196Cont1_2

cmp dl,195

je isChar196Cont1_2

cmp dl,192

je isChar196Cont1_2

cmp dl,194

je isChar196Cont1_2

cmp dl,197

je isChar196Cont1_2

cmp dl,193

je isChar196Cont1_2

jmp isHZCodeChar

isChar196Cont1_2:

jmp isAscTableChar

isChar196Cont2:

call GetLastChar

cmp dl,218

je isChar196Cont2_1

cmp dl,195

je isChar196Cont2_1

cmp dl,192

je isChar196Cont2_1

cmp dl,194

je isChar196Cont2_1

cmp dl,197

je isChar196Cont2_1

cmp dl,193

je isChar196Cont2_1

jmp isHZCodeChar

isChar196Cont2_1:

call GetNextNextChar

cmp dl,196

je isChar196Cont2_2

cmp dl,194

je isChar196Cont2_2

cmp dl,197

je isChar196Cont2_2

cmp dl,193

je isChar196Cont2_2

cmp dl,191

je isChar196Cont2_2

cmp dl,180

je isChar196Cont2_2

cmp dl,217

je isChar196Cont2_2

jmp isHZCodeChar

isChar196Cont2_2:

jmp isAscTableChar

isLine205Char:

call GetLastChar

cmp dl,205

je isChar205Cont1

call GetNextChar

cmp dl,205

je isChar205Cont2

jmp isHZCodeChar

isChar205Cont1:

call GetNextChar

cmp dl,205

je isAscTableChar

cmp dl,203

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,202

je isAscTableChar

cmp dl,187

je isAscTableChar

cmp dl,185

je isAscTableChar

cmp dl,188

je isAscTableChar

jmp isHZCodeChar

isChar205Cont2:

call GetLastChar

cmp dl,205

je isAscTableChar

cmp dl,203

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,202

je isAscTableChar

cmp dl,201

je isAscTableChar

cmp dl,204

je isAscTableChar

cmp dl,200

je isAscTableChar

jmp isHZCodeChar

isLine179Char:

call GetUpChar

cmp dl,179

je isChar179Cont1

call GetDownChar

cmp dl,179

je isChar179Cont2

jmp isHZCodeChar

isChar179Cont1:

call GetDownChar

cmp dl,179

je isChar179Cont1_1

cmp dl,195

je isChar179Cont1_2

cmp dl,197

je isChar179Cont1_2

cmp dl,180

je isChar179Cont1_2

cmp dl,192

je isChar179Cont1_2

cmp dl,193

je isChar179Cont1_2

cmp dl,217

je isChar179Cont1_2

jmp isHZCodeChar

isChar179Cont1_1:

call GetDownDownChar

cmp dl,179

je isAscTableChar

cmp dl,195

je isAscTableChar

cmp dl,197

je isAscTableChar

cmp dl,180

je isAscTableChar

cmp dl,192

je isAscTableChar

cmp dl,193

je isAscTableChar

cmp dl,217

je isAscTableChar

jmp isHZCodeChar

isChar179Cont1_2:

call GetUpUpChar

cmp dl,179

je isAscTableChar

cmp dl,195

je isAscTableChar

cmp dl,197

je isAscTableChar

cmp dl,180

je isAscTableChar

cmp dl,218

je isAscTableChar

cmp dl,194

je isAscTableChar

cmp dl,191

je isAscTableChar

jmp isHZCodeChar

isChar179Cont2:

call GetDownDownChar

cmp dl,179

je isChar179Cont2_1

cmp dl,195

je isChar179Cont2_1

cmp dl,197

je isChar179Cont2_1

cmp dl,180

je isChar179Cont2_1

cmp dl,192

je isChar179Cont2_1

cmp dl,193

je isChar179Cont2_1

cmp dl,217

je isChar179Cont2_1

jmp isHZCodeChar

isChar179Cont2_1:

call GetUpChar

cmp dl,179

je isAscTableChar

cmp dl,195

je isAscTableChar

cmp dl,197

je isAscTableChar

cmp dl,180

je isAscTableChar

cmp dl,218

je isAscTableChar

cmp dl,194

je isAscTableChar

cmp dl,191

je isAscTableChar

jmp isHZCodeChar

isLine186Char:

call GetSameChar

add dh,dl

cmp dh,3

jb isHZCodeChar

call GetUpChar

cmp dl,186

je isChar186Cont1

call GetDownChar

cmp dl,186

je isChar186Cont2

jmp isHZCodeChar

isChar186Cont1:

call GetUpUpChar

cmp dl,186

je isChar186Cont1_1

cmp dl,204

je isChar186Cont1_1

cmp dl,206

je isChar186Cont1_1

cmp dl,185

je isChar186Cont1_1

cmp dl,201

je isChar186Cont1_1

cmp dl,203

je isChar186Cont1_1

cmp dl,187

je isChar186Cont1_1

jmp isHZCodeChar

isChar186Cont1_1:

call GetDownChar

cmp dl,186

je isChar186Cont1_2

cmp dl,204

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,185

je isAscTableChar

cmp dl,200

je isAscTableChar

cmp dl,202

je isAscTableChar

cmp dl,188

je isAscTableChar

jmp isHZCodeChar

isChar186Cont1_2:

call GetDownDownChar

cmp dl,186

je isAscTableChar

cmp dl,204

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,185

je isAscTableChar

cmp dl,200

je isAscTableChar

cmp dl,202

je isAscTableChar

cmp dl,188

je isAscTableChar

jmp isHZCodeChar

isChar186Cont2:

call GetDownDownChar

cmp dl,186

je isChar186Cont2_1

cmp dl,204

je isChar186Cont2_1

cmp dl,206

je isChar186Cont2_1

cmp dl,185

je isChar186Cont2_1

cmp dl,200

je isChar186Cont2_1

cmp dl,202

je isChar186Cont2_1

cmp dl,188

je isChar186Cont2_1

jmp isHZCodeChar

isChar186Cont2_1:

call GetUpChar

cmp dl,186

je isChar186Cont2_2

cmp dl,204

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,185

je isAscTableChar

cmp dl,201

je isAscTableChar

cmp dl,203

je isAscTableChar

cmp dl,187

je isAscTableChar

jmp isHZCodeChar

isChar186Cont2_2:

call GetUpChar

cmp dl,186

je isAscTableChar

cmp dl,204

je isAscTableChar

cmp dl,206

je isAscTableChar

cmp dl,185

je isAscTableChar

cmp dl,201

je isAscTableChar

cmp dl,203

je isAscTableChar

cmp dl,187

je isAscTableChar

jmp isHZCodeChar

;Single line

isLine218Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

call GetDownDownChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine195Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

; call GetUpUpChar

; cmp dl,179

; jne isHZCodeChar

; call GetDownDownChar

; cmp dl,179

; jne isHZCodeChar

jmp isAscTableChar

isLine192Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

; call GetUpUpChar

; cmp dl,179

; jne isHZCodeChar

jmp isAscTableChar

isLine194Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetDownDownChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine197Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetUpUpChar

cmp dl,179

jne isHZCodeChar

call GetDownDownChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine193Char:

call GetNextChar

cmp dl,196

jne isHZCodeChar

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetNextNextChar

cmp dl,196

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetUpUpChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine191Char:

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetDownDownChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine180Char:

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetDownChar

cmp dl,179

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetUpUpChar

cmp dl,179

jne isHZCodeChar

call GetDownDownChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

isLine217Char:

call GetLastChar

cmp dl,196

jne isHZCodeChar

call GetUpChar

cmp dl,179

jne isHZCodeChar

call GetLastLastChar

cmp dl,196

jne isHZCodeChar

call GetUpUpChar

cmp dl,179

jne isHZCodeChar

jmp isAscTableChar

; Double Line

isLine201Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine204Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine200Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine203Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine206Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine202Char:

call GetNextChar

cmp dl,205

jne isHZCodeChar

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetNextNextChar

cmp dl,205

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine187Char:

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine185Char:

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetDownChar

cmp dl,186

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

call GetDownDownChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

isLine188Char:

call GetLastChar

cmp dl,205

jne isHZCodeChar

call GetUpChar

cmp dl,186

jne isHZCodeChar

call GetLastLastChar

cmp dl,205

jne isHZCodeChar

call GetUpUpChar

cmp dl,186

jne isHZCodeChar

jmp isAscTableChar

jmp isHZCodeChar

isAscTableChar:

stc

ret

isHZCodeChar:

cmp byte ptr es:[ebx],161

jb isAscTableChar

cmp byte ptr es:[ebx]+2,161

jb isAscTableChar

isRealHZCodeChar:

clc

ret

IsTableChar endp

;para

;ecx:line,edx,col

GetGraphAbsOffset proc near

mov eax,cury

mov edx,1440 ; a line byte size 18*80

mul edx

add eax,curx

add eax,GraphDataBase

mov edi,eax

ret

GetGraphAbsOffset endp

; ret eax:number

GetNumber proc near ;y*160+x*2

push edx

xor eax,eax

mov al,BIOSCurY

mov dl,160

mul dl

xor edx,edx

mov dl,BIOSCurX

sal edx,1

add eax,edx

pop edx

ret

GetNumber endp

;ret al:char,ah:attrib

GetCharAndAttrib proc near

xor eax,eax

mov al,oldy

mov dl,160

mul dl

xor edx,edx

mov dl,oldx

sal edx,1

add eax,edx

mov esi,TextBufAddress

add esi,eax

mov ax,es:[esi]

ret

GetCharAndAttrib endp

; para oldx,oldy

GetTextAbsOffset proc near

mov dh,oldy

mov dl,oldx

xor eax,eax

mov al,dh

mov bl,dl

mov edx,1440 ; a line byte size 18*80

mul edx

xor edx,edx

mov dl,bl

add eax,edx

add eax,GraphDataBase

mov edi,eax

ret

GetTextAbsOffset endp

DrawLineArrow proc near

mov tmpsave,ax

xor eax,eax

mov edx,eax

mov eax,(640/8)*16

add edi,eax

call BeginPut

mov ax,tmpsave

call Put8Pixel

add edi,640/8

mov ax,tmpsave

call Put8Pixel

call EndPut

ret

DrawLineArrow endp

DrawArrow proc near

cmp CurFirstLine,0fh

ja nodraw

call GetTextAbsOffset

call GetCharAndAttrib

mov al,0ffh

call DrawLineArrow

nodraw:

ret

DrawArrow endp

ClrArrow proc near

call GetTextAbsOffset

call GetCharAndAttrib

mov al,0

call DrawLineArrow

ret

ClrArrow endp

Arrow proc near

inc isArrow

cmp isArrow,2

je DrawIt

cmp isArrow,4

je nodrawIt

jmp endArrow

noDrawIt:

call ClrArrow

mov isArrow,0

jmp endArrow

drawIt:

call ClrArrow

call GetXY

mov oldx,dl

mov oldy,dh

call DrawArrow

endArrow:

ret

Arrow endp

os32_code ends

data segment use16 public

promptX db 0

promptY db 25

promptLen db 96/2 ; only 96 char from 4096 bytes.(48 HZ)

promptBuf dd 0

data ends

os32_code segment use32 public

assume cs:os32_code,ds:data

os32_code ends

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有