мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Это старая версия документа!
#include "crt.h" #include "m6845.h" #include "cursor.h" unsigned char __maxX (void) { if (! mode) return 40; else return 80; } int write (unsigned char * string) { int buf; unsigned char ch; int i=0; attribut = 7; while (*(string + i) != 0) { update_cursor (cursor); if (cursor >= (__maxX () * __maxY)) { scroll (); cursor = (__maxY-1) * __maxX (); } if (*(string+i)>=32) { ch = *(string+i); put_symbol (ch,attribut); cursor++; } else { switch (*(string+i)) { case '\a': case '\n': buf = cursor % __maxX (); cursor = cursor - buf + __maxX (); if (cursor >= (__maxX ()* __maxY)) { scroll (); cursor = (__maxY-1) * __maxX (); } break; case 0: break; default: cursor ++; } } i++; } return 0; }
sdf
.MODEL small _WIDTH equ 25 L_1 equ 80 L_0 equ 40 public _put_symbol, _scroll extrn _cursor, _type_crt, _mode .CODE _put_symbol proc near CLI push bp mov bp,sp mov cx,_type_crt cmp cx,0 je _monocrome mov dx,0b800h jmp _continue _monocrome: mov dx,0b000h _continue: mov es,dx mov bx,_cursor shl bx,1 mov al,[bp+4] mov ah,[bp+6] mov es:[bx],ax pop bp mov ax,0 STI ret _put_symbol endp _scroll proc near CLI push bp push ds push si push di cmp _mode,0 je mode0 mov dh,L_1 jmp contin mode0: mov dh,L_0 contin: mov al,_WIDTH mul dh sub al,dh mov cx,ax shl ax,1 mov bp,ax cld mov bx,0b800h ;надо этот участок переписать, но нет времени mov ds,bx ;DS:SI = 0b800h:0000H mov es,bx ;ES:DI = 0b800h:0019H xor bx,bx mov di,bx mov bl,dh shl bx,1 mov si,bx rep movsw mov cl,dh ; здесь тоже проблема: не получается стереть mov ax,0720H ; нижнюю строчку, остаётся мусор l2: mov ds:[bp],ax inc bp inc bp dec cl cmp cl,0 jne l2 xor ax,ax pop di pop si pop ds pop bp STI ret _scroll endp end
/* Хидерный файл контроллера Motorola 6845 */ char type_crt = 1; /* Тип монитора. 0 - MDA, 1 - CGA, EGA e t. c.*/ unsigned char mode = 03; /* Режим, очевидно */ #define __maxY 25 unsigned char __maxX (void); extern unsigned int cursor = 0; /* Позиция курсора в линейном режиме */ extern unsigned char attribut = 7; /* Его атрибут */ extern int put_symbol (unsigned char symbol, unsigned char attribut); extern int scroll (void); /* Прокручиваем экран на одну строчку */