Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2023, 18:58   #1
Окоза-Окоза
Пользователь
 
Регистрация: 09.01.2023
Сообщений: 19
По умолчанию ОС на fasm - графическая оболочка

Здравствуйте! Есть ОС на fasm которая загружает "ядро" и запускает программы. Хочу добавить программу, в которой будет меню, пусть и текстовое. Но когда я пробовал вывести подкрашенный текст выводилась пустота. Пожалуйста помогите: Исправить ошибку с отображением текста, Перемещать курсор кнопками, и сделать "кнопки". Моя теория: нужно сравнивать положение курсора с положением текста "кнопки" или ссылки, если совпадет, то jump-иться на программу(ОС будет без ФС). Пожалуйста помогите!
Код программы с "плохим" текстом:
Код:
org 1c00h
include 'LIB\BASE_FUNC.asm'
start:
  clear_scr
         
    mov dx,0h
    call SetCursorPos
        mov bp, msg
        mov cx, 29
        mov bl,0Ah
        xor bh,bh
        mov ax,1301h
        int 10h
         
        add dh,2
        call SetCursorPos
        mov si,0
        jmp Escape



      ; jmp $

Escape:
             mov ah,10h
        int 16h
        cmp al, 1Bh     ;Если нажата клавиша Esc - выход из приложения
        jz Esc
    jmp Escape

Esc:
     jmp 0000:0500h

SetCursorPos:
        mov ah,2h
        xor bh,bh
        int 10h 
        ret

  PrintMes:               
        mov bl,0Ah         
        mov ax,1301h
        int 10h
        ret
msg db 'the paper with a black ink...',0
times 512 - ($ - $$) db 0
Макрос очистки экрана в BASE_FUNC:
Код:
macro clear_scr
{
mov ax, 0002h ;очищаем экран
int 10h
}
Спасибо
Окоза-Окоза вне форума Ответить с цитированием
Старый 22.06.2023, 18:59   #2
Окоза-Окоза
Пользователь
 
Регистрация: 09.01.2023
Сообщений: 19
По умолчанию

P.S Для создания "Тела" меню нужно красить фон текста.
Окоза-Окоза вне форума Ответить с цитированием
Старый 23.06.2023, 07:18   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от Окоза-Окоза Посмотреть сообщение
вывести подкрашенный текст выводилась пустота
А регистр ES чему равен?
waleri вне форума Ответить с цитированием
Старый 24.06.2023, 23:02   #4
Окоза-Окоза
Пользователь
 
Регистрация: 09.01.2023
Сообщений: 19
По умолчанию

Ответ был удален.

Последний раз редактировалось Окоза-Окоза; 24.06.2023 в 23:10.
Окоза-Окоза вне форума Ответить с цитированием
Старый 24.06.2023, 23:07   #5
Окоза-Окоза
Пользователь
 
Регистрация: 09.01.2023
Сообщений: 19
По умолчанию

waleri, Эту проблему я исправил, и вопрос поменялся все-таки решился использовать 4 видеорежим. код поменялся:
Код:
org 900h
include 'LIB\BASE_FUNC.asm'
start:
  clear_scr
        xor bp, bp
        call setvideo
        jmp drawback
metka:
     ;   call setgraphicscur
        call settextcur
        call drawgrap
        jmp wtkeys


       jmp $

settextcur:
        mov ah, 02h
        mov bh, 0
        mov dh, 3
        mov dl, 4
        int 10h
        ret

drawgrap:
        mov ah, 0Eh
        mov al, 'N'
        mov bh, 0
        mov bl, 02h
        int 10h
        ret

;setgraphicscur:
 ;       mov ax, 4
  ;      mov cx, 100
   ;     mov dx, 150
    ;    int 33h
     ;   ret

setvideo:
        mov ah, 00h
        mov al, 4
        int 10h
        ret

drawback:
        mov ah, 0Bh
        mov bh, 00h
        mov bl, 02h
        int 10h
        jmp drawline

drawline:
        cmp bp, 100
        jz metka
        mov ah, 0Ch
        mov al, 04h
        mov bh, 0
        mov cx, bp
        mov dx, bp
        int 10h
        add bp, 1
        jmp drawline

wtkeys:
             mov ah,10h
        int 16h
        cmp al, 1Bh     ;Если нажата клавиша Esc - выход из приложения
        jz Esc
    jmp wtkeys

Esc:
     mov ah, 00h
     mov al, 2
     int 10h
     jmp 0000:0500h





times 512 - ($ - $$) db 0

Последний раз редактировалось Окоза-Окоза; 24.06.2023 в 23:27.
Окоза-Окоза вне форума Ответить с цитированием
Старый 25.06.2023, 17:56   #6
Окоза-Окоза
Пользователь
 
Регистрация: 09.01.2023
Сообщений: 19
По умолчанию

Остался вопрос с мышкой и кнопками.
Окоза-Окоза вне форума Ответить с цитированием
Старый 02.07.2023, 15:38   #7
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от Окоза-Окоза Посмотреть сообщение
Хочу добавить программу, в которой будет меню, пусть и текстовое. Моя теория: нужно сравнивать положение курсора с положением текста "кнопки" или ссылки, если совпадет, то jump-иться на программу(ОС будет без ФС).
Если хотите сделать меню в реальном режиме ЦП, то нужно привязывать его пункты к клавишам F1..F12, а не искать курсором положение кнопок. Посмотрите, как это сделано например в программах HIEW, FAR, Victoria и многих других.
Нашедшего выход - затаптывают первым..

Последний раз редактировалось R71MT; 02.07.2023 в 15:43.
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ОС на fasm - мини графическая оболочка Окоза-Окоза Помощь студентам 1 21.06.2023 22:48
Собственная графическая оболочка Studik Паскаль, Turbo Pascal, PascalABC.NET 4 05.07.2011 14:43
Графическая оболочка (вьюер) guru2002 Фриланс 3 21.05.2011 12:36
Графическая оболочка для UPX (GUI-UPX) >>arty<< Общие вопросы Delphi 33 13.02.2011 11:38
Графическая оболочка C++ Якъ Общие вопросы C/C++ 2 09.02.2011 00:32