Форум программистов, компьютерный форум, киберфорум
Программирование драйверов
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 146
1

Как перевести буквенно-цифровой режим в 40x25

29.09.2012, 23:25. Просмотров 1212. Ответов 4
Метки нет (Все метки)


Используя функции биос-а буквенно-цифровой режим из 80x25 в 40x25 можно перевести следующим образом:

Assembler
1
2
3
mov ah,0
mov al,1
int 10h
как это сделать не используя функции биос-а и дос-а, только через регистры и порты.

И ещё как через порты и регистры погасить курсор, через функции биос-а это делается так:

Assembler
1
2
3
mov ah,1
mov ch,20h
int 10h
Только не спрашивайте зачем мне это надо.
Если кто знает как это сделать помогите пожалуйста.
За помощь заранее благодарен!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2012, 23:25
Ответы с готовыми решениями:

Преобразовать дату в буквенно-цифровой код
Подскажите, если можно на примере, как преобразовать дату в буквенно-цифровой код? Например...

Цифровой энергосберегающий режим
Здравствуйте, подскажите в чём может быть дело. Проблема следующая: при попытке вывести пк из сна...

Чёрный экран (цифровой энергосберегающий режим)
Здравствуйте. Имеется какая-то нерешаемая проблема, помогите пожалуйста. Монитор LG Flatron...

Как программно перевести монитор в спящий режим?
Подскажите, как программно перевести монитор в спящий режим?

__________________
Помогаю в написании курсовых работ и дипломов здесь.
4
197 / 197 / 78
Регистрация: 10.07.2012
Сообщений: 405
30.09.2012, 18:44 2
1. посмотреть в какие значения устанавливает регистры биос. установить в те же
2. установить координаты курсора за пределы экрана. Я делал вот так:
Код
_outpw(0x3D4, 0x070E);
_outpw(0x3D4, 0xD00F);
0
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 146
30.09.2012, 18:53  [ТС] 3
Цитата Сообщение от Vort_ Посмотреть сообщение
1. посмотреть в какие значения устанавливает регистры биос. установить в те же
Я написал небольшую прогу и запускал её под дос в отладчике.
Очень долго я лазил в этом 10 прерывании но так и не смог уяснить то что меня интересует.
0
197 / 197 / 78
Регистрация: 10.07.2012
Сообщений: 405
30.09.2012, 18:59 4
Цитата Сообщение от v4567 Посмотреть сообщение
Я написал небольшую прогу и запускал её под дос в отладчике.
Очень долго я лазил в этом 10 прерывании но так и не смог уяснить то что меня интересует.
повезло мой отладчик по биосу мог ходить только через Step Into (при Step Over ругался на read-only память)
---
лазить по прерыванию может понадобиться если неизвестно что от него ожидать
в случае же с такими простыми режимами (совместимыми с VGA) есть конечный набор регистров, больше которых и знать не надо (а именно: sequencer, misc reg, crtc, actl, grdc. есть ещё палитра - но я так понимаю её трогать не надо)
если кому интересна моя автоматическая лазалка по int 10h - вот она (FASM) [хардкор + возможны глюки - снимаю запреты прерываний]:
Assembler
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
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
org 0x100
 
; Move stack to new location
mov  sp, NewStackEnd - 2
 
; Set dump memory block
mov  ax, word [0x0002]
mov  bx, cs
add  bx, lastbyte shr 4
sub  ax, lastbyte shr 4
mov  [LastDumpSegment], bx
mov  [DumpSegment], bx
mov  [DumpPtrSeg], bx
mov  [DumpPtrOfs], 0
add  [LastDumpSegment], ax
dec  [LastDumpSegment]
 
; Set trap handler
push ds
push 0x0000
pop  ds
mov  ax, [1 * 4 + 0]
mov  [es:OldHandler + 0], ax
mov  ax, [1 * 4 + 2]
mov  [es:OldHandler + 2], ax
mov  [1 * 4 + 0], word TrapHandler
mov  [1 * 4 + 2], cs
pop  ds
 
; Enable trap flag
pushf
pop  ax
or   ax, 0x0100
push ax
popf
 
; Switch VESA mode
;mov  ah, 0x4F
;mov  al, 0x02
;mov  bx, 0x003;0x115
;int  0x10
 
mov  ah, 0x00
mov  al, 0x03 or 0x80
int  0x10
 
;mov  ah, 0x4F
;mov  al, 0x08
;mov  bl, 0x00
;mov  bh, 0x08
;int  0x10
 
; Disable trap flag
pushf
pop  ax
and  ax, 0xFEFF
push ax
popf
 
; Restore trap handler
push ds
push 0x0000
pop  ds
mov  ax, [es:OldHandler + 0]
mov  [1 * 4 + 0], ax
mov  ax, [es:OldHandler + 2]
mov  [1 * 4 + 2], ax
pop  ds
 
; Draw something
call DrawStripes
 
; Wait for keypress
mov  ah, 0x0
int  0x16
 
; Restore videomode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03
int  0x10
 
; Save dump
mov  ah, 0x3C
mov  dx, FilePath
mov  cx, 0
int  21h
 
mov  bx, ax
xor  dx, dx
xor  ecx, ecx
mov  si, [DumpSegment]
mov  edi, [DumpSize]
lb3:
cmp  edi, 0x10
jb   lb1
  mov  cx, 0x10
  sub  edi, 0x10
  jmp  lb2
lb1:
  mov  cx, di
  xor  edi, edi
lb2:
  push si
  pop  ds
  mov  ah, 0x40
  int  0x21
  jc   exit
  inc  si
  or   edi, edi
  jnz  lb3
 
; Exit
exit:
int  0x20
 
; ----------------------------------
FilePath db 'iodump.bin', 0
OldHandler rw 2
DumpSegment rw 1
LastDumpSegment rw 1
DumpPtrSeg rw 1
DumpPtrOfs rw 1
DumpSize dd 0
DumpOverflow db 0
IoType db 0
IoIP rw 1
 
SavedDS  rw 1
SavedEAX rd 1
SavedBX  rw 1
SavedCX  rw 1
SavedDX  rw 1
SavedSI  rw 1
SavedBP  rw 1
 
GuestIP  rw 1
GuestCS  rw 1
GuestFl  rw 1
 
; ----------------------------------
TrapHandler:
  mov  [cs:SavedDS], ds
  mov  [cs:SavedEAX], eax
  mov  [cs:SavedBX], bx
  mov  [cs:SavedCX], cx
  mov  [cs:SavedDX], dx
  mov  [cs:SavedSI], si
  mov  [cs:SavedBP], bp
 
  pop  [cs:GuestIP]
  pop  [cs:GuestCS]
  pop  [cs:GuestFl]
 
  cmp  [cs:DumpOverflow], 1
  je   exithandler
 
  cmp  [cs:IoType], 0
  je   NoPrevIo
    push [cs:DumpPtrSeg]
    pop  ds
    mov  si, [cs:DumpPtrOfs]
    mov  al, [cs:IoType]
    mov  [ds:si], al
    mov  dx, [cs:IoIP]
    mov  [ds:si+1], dx
    mov  dx, [cs:SavedDX]
    mov  [ds:si+3], dx
    mov  ebx, 5
    mov  ecx, [cs:SavedEAX]
    cmp  al, 0x01
    jne  @f
      add  bx, 1
      mov  [ds:si+5], cl
    @@:
    cmp  al, 0x02
    jne  @f
      add  bx, 2
      mov  [ds:si+5], cx
    @@:
    cmp  al, 0x03
    jne  @f
      add  bx, 4
      mov  [ds:si+5], ecx
    @@:
    cmp  al, 0x04
    jne  @f
      add  bx, 1
      mov  [ds:si+5], cl
    @@:
    cmp  al, 0x05
    jne  @f
      add  bx, 2
      mov  [ds:si+5], cx
    @@:
    cmp  al, 0x06
    jne  @f
      add  bx, 4
      mov  [ds:si+5], ecx
    @@:
 
    add  si, bx
    add  [cs:DumpSize], ebx
    mov  [cs:DumpPtrOfs], si
    and  [cs:DumpPtrOfs], 0x000F
    shr  si, 4
    add  [cs:DumpPtrSeg], si
 
NoPrevIo:
  mov  ds, [cs:GuestCS]
  mov  bx, [cs:GuestIP]
  mov  ax, [ds:bx]
 
  mov  [cs:IoIP], bx
  mov  [cs:IoType], 0
  cmp  al, 0xEE   ; out dx, al
  jne  @f
    mov  [cs:IoType], 1
  @@:
  cmp  al, 0xEF   ; out dx, ax
  jne  @f
    mov  [cs:IoType], 2
  @@:
  cmp  ax, 0xEF66 ; out dx, eax
  jne  @f
    mov  [cs:IoType], 3
  @@:
  cmp  al, 0xEC   ; in al, dx
  jne  @f
    mov  [cs:IoType], 4
  @@:
  cmp  al, 0xED   ; in ax, dx
  jne  @f
    mov  [cs:IoType], 5
  @@:
  cmp  ax, 0xED66 ; in eax, dx
  jne  @f
    mov  [cs:IoType], 6
  @@:
  cmp  al, 0xFA ; cli
  jne @f
    add  [cs:GuestIP], 1
  @@:
  cmp  al, 0xCD ; int X
  jne  @f
    xor  ch, ch
    mov  cl, ah
    mov  si, cx
    shl  si, 2
 
    add  [cs:GuestIP], 2
    push [cs:GuestFl]
    push [cs:GuestCS]
    push [cs:GuestIP]
 
    push 0
    pop  ds
    mov  ax, [ds:si]   ; ip
    mov  bx, [ds:si+2] ; cs
 
    mov  [cs:GuestIP], ax
    mov  [cs:GuestCS], bx
 
@@:
  mov  ax, [cs:LastDumpSegment]
  cmp  ax, [cs:DumpPtrSeg]
  jne  @f
    mov [cs:DumpOverflow], 1
  @@:
 
exithandler:
  mov  eax, [cs:SavedEAX]
  mov  bx, [cs:SavedBX]
  mov  cx, [cs:SavedCX]
  mov  dx, [cs:SavedDX]
  mov  si, [cs:SavedSI]
  mov  bp, [cs:SavedBP]
  mov  ds, [cs:SavedDS]
  push [cs:GuestFl]
  push [cs:GuestCS]
  push [cs:GuestIP]
  iret
 
; ----------------------------------
DrawStripes:
  pusha
  push es
  push 0xA000
  pop  es
  mov  bx, 5
  xor  si, si
  xor  di, di
  nextline:
    mov  cx, 640
    nextpixel:
      dec  cx
      xor  dx, dx
      mov  ax, cx
      shl  ax, 1
      div  bx
      xor  ah, ah
 
      cmp  si, 6
      jae  l1
    mov  ah, al
    xor  al, al
    stosb
    stosb
    mov  al, ah
    stosb
    xor  al, al
    stosb
    jmp  lf
      l1:
      cmp  si, 12
      jae  l2
    mov  ah, al
    xor  al, al
    stosb
    mov  al, ah
    stosb
    xor  al, al
    stosb
    stosb
    jmp  lf
      l2:
      cmp  si, 18
      jae  l3
    stosb
    xor  al, al
    stosb
    stosb
    stosb
    jmp  lf
      l3:
    stosb
    stosb
    stosb
    stosb
    jmp  lf
      lf:
 
      or  cx, cx
      jnz nextpixel
    inc si
    cmp si, 24
    jnz nextline
  pop es
  popa
  ret
 
align 16
NewStackStart rb 1024
NewStackEnd:
lastbyte:
декодер дампа I/O:
C#
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
using System;
using System.IO;
 
namespace VesaTrapDecode
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryReader br = new BinaryReader(File.Open(
                "e:\\_Research\\Vesa\\IoDump_20_115.bin", FileMode.Open));
            for (; ; )
            {
                int recordType = br.ReadByte();
                br.ReadUInt16();
                //Console.Write("{0:X4}: ", br.ReadUInt16());
                Console.Write("{0:X4}", br.ReadUInt16());
                if (recordType == 0x01)
                    Console.WriteLine(" <- {0:X2}", br.ReadByte());
                else if (recordType == 0x02)
                    Console.WriteLine(" <- {0:X4}", br.ReadUInt16());
                else if (recordType == 0x03)
                    Console.WriteLine(" <- {0:X8}", br.ReadUInt32());
                else if (recordType == 0x04)
                    Console.WriteLine(" -> {0:X2}", br.ReadByte());
                else if (recordType == 0x05)
                    Console.WriteLine(" -> {0:X4}", br.ReadUInt16());
                else if (recordType == 0x06)
                    Console.WriteLine(" -> {0:X8}", br.ReadUInt32());
 
                if (br.BaseStream.Position == br.BaseStream.Length)
                    break;
            }
        }
    }
}
а вот то что может непосредственно понадобиться. дампер регистров:
Assembler
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
; ==============================
org  0x100
 
; set desired mode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03;0x115
int  0x10
 
; unlock CRTC regs - разлочка для GeForce`ов
;mov  ax, 0x573F
;mov  dx, 0x03D4
;out  dx, ax
 
; Dump registers: CRTC
mov  cx, 0x0100
mov  bx, 0x0000
mov  dx, 0x03D4
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [crregs + bx], ah
inc  bx
loop @b
 
; Dump registers: ACTL
mov  cx, 0x0005
mov  bx, 0x0010
mov  dx, 0x03C0
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [actlregs + bx - 0x10], ah
inc  bx
loop @b
 
; Dump registers: SEQ
mov  cx, 0x0005
mov  bx, 0x0000
mov  dx, 0x03C4
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [seqregs + bx], ah
inc  bx
loop @b
 
; Dump registers: GRAPH
mov  cx, 0x0009
mov  bx, 0x0000
mov  dx, 0x03CE
@@:
mov  al, bl
out  dx, al
in   ax, dx
mov  [graphregs + bx], ah
inc  bx
loop @b
 
; Dump register: MISC
mov dx, 0x3CC
in  al, dx
mov [miscreg], al
 
; wait any key
mov  ah, 0x0
int  0x16
 
; restore mode
mov  ah, 0x4F
mov  al, 0x02
mov  bx, 0x03
int  0x10
 
; save file
mov  ah, 0x3C
mov  dx, filepath
mov  cx, 0
int  21h
 
mov  bx, ax
mov  ah, 0x40
mov  dx, regsstart
mov  cx, regsend - regsstart
int  21h
 
; exit
int  0x20
 
; -----------------------------
filepath   db 'regs.bin', 0
 
regsstart:
crregs     rb 0x100
actlregs   rb 5
seqregs    rb 5
graphregs  rb 9
miscreg    rb 1
 
regsend:
; ==============================
1
3 / 2 / 4
Регистрация: 10.05.2008
Сообщений: 146
30.09.2012, 19:05  [ТС] 5
Цитата Сообщение от Vort_ Посмотреть сообщение
повезло мой отладчик по биосу мог ходить только через Step Into (при Step Over ругался на read-only память)
не знаю может я что то не так делал, но запускал повторяю в досе и использовал отладчик afdpro

За код огромное спасибо! Сейчас смотрю.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2012, 19:05

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Как перевести форму в режим добавления записи?
есть кнопочка в панели навигации по таблице - 'добавить запись' надо чтобы форма открывалась уже в...

как перевести монитор в режим 4:3 без кнопки
Всем привет, так уж сложилось, что на моем мониторе залипла кнопка &quot;4:3&quot; и отказывается работать,...

Как перевести монитор в черно белый режим в Windows ?
вот думал заработает зашел в Свойства:Экран/Параметры/Дополнительно/управление цветом там есть...

Как из командной строки перевести ОС в гибридный спящий режим и как назначить кнопку клавиатуры для этого?
Ребята, 1. Можно ли из командной строки перевести компьютер в ГИБРИДНЫЙ спящий режим? Если да то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.