-
Notifications
You must be signed in to change notification settings - Fork 0
/
wdex.ASM
171 lines (154 loc) · 2.28 KB
/
wdex.ASM
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
dseg segment
cury db 0 ;current row
curx db 0 ;current column
luy db 10 ;upper_left row
lux db 30 ;upper_left col
rdy db 15 ;lower_right row
rdx db 40 ;lower_right col
cont db 5 ;row num of window
dseg ends
clear macro ;clear screen macro
mov ah,6
mov al,0
mov ch,0
mov cl,0
mov dh,24
mov dl,79
mov bh,7
int 10h
endm
scroll macro cont ;make a window macro
mov ah,6
mov al,cont
mov ch,luy
mov cl,lux
mov dh,rdy
mov dl,rdx
mov bh,70h
int 10h
endm
postc macro ;position cursor macro
mov ah,2
mov dh,cury
mov dl,curx
mov bh,0
int 10h
endm
cseg segment
assume cs:cseg, ds:dseg
main proc far
push ds ;save for return
sub ax,ax
push ax
mov ax,dseg ;set data segment addr.
mov ds,ax
clear ;clear screen
scroll cont ;make a window in centre
postc ;position cursor at (0,0)
input:
mov ah,0 ;keyboard input function
int 16h
cmp ah,4bh
jnz no_left
cmp curx,0
jnz l1
cmp cury,0
jnz l3
jmp input
l1:
dec curx
jmp l5
l3:
dec cury
mov curx,79
l5:
postc
jmp input
no_left:
cmp ah,4dh
jnz no_right
cmp curx,79
jnz r1
cmp cury,24
jnz r3
jmp input
r1:
inc curx
jmp r5
r3:
inc cury
mov curx,0
r5:
postc
jmp input
no_right:
cmp ah,48h
jnz no_up
cmp cury,0
jz up1
dec cury
postc
up1:
jmp input
no_up:
cmp ah,50h
jnz no_down
cmp cury,24
jz d1
inc cury
postc
d1:
jmp input
no_down:
cmp ah,4fh
jz setxy
cmp ah,01
jnz disp
ret
disp:
mov ah,0ah ;display a character
mov bh,0 ;video page
mov cx,1 ;count of repeat
int 10h ;video ROM call
inc curx
mov al,curx
cmp al,rdx
jl next
scroll 1
mov al,lux
mov curx,al
next:
postc
jmp input
setxy:
mov al,cury
mov bl,curx
cmp al,luy
jl s1
cmp bl,lux
jl s2
mov rdy,al
mov rdx,bl
jmp new
s1:
cmp bl,rdx
jle s3
jmp input
s2:
cmp al,rdy
jg s5
s3:
mov luy,al
mov lux,bl
new:
mov al,rdy
sub al,luy
inc al
mov cont,al
clear
scroll cont
s5:
jmp input
main endp
cseg ends
end main