83 lines
2.1 KiB
NASM
83 lines
2.1 KiB
NASM
use32 ; включить 32-битный режим ассемблера
|
||
org 0 ; адресация с нуля
|
||
db 'MENUET01' ; 8-байтный идентификатор MenuetOS
|
||
dd 1 ; версия заголовка (1 либо 2, см. док-ю)
|
||
dd START ; адрес первой команды
|
||
dd I_END ; размер программы
|
||
dd MEM ; количество памяти
|
||
dd STACKTOP ; адрес вершины стэка
|
||
dd DEF_CMDLINE ; адрес буфера для параметров
|
||
dd 0 ; под адрес на путь к файлу
|
||
include "macros.inc"
|
||
; display_d -emul
|
||
; display_d
|
||
START:
|
||
mcall 68, 11
|
||
; parse cmdline
|
||
cmp dword[DEF_CMDLINE], '-emu'
|
||
je start_emul
|
||
; start demon for input in serial port
|
||
jmp exit
|
||
start_emul:
|
||
; init shared buffer
|
||
mcall 68, 22, SHARED_NAME, 16*2, 8+1
|
||
test edx, edx
|
||
jnz exit
|
||
test eax, eax
|
||
jz exit
|
||
mov [buff_ptr], eax
|
||
|
||
|
||
mcall 40, 101b ; btn + readraw
|
||
.win_draw:
|
||
mcall 12, 1
|
||
mcall 48, 4
|
||
mov ecx, eax
|
||
add ecx, 16*2+20
|
||
mcall 0, 16*8+2*15, , 0x330f0f0f, 0, title;
|
||
mcall 12, 2
|
||
|
||
.loop:
|
||
call draw_info
|
||
mcall 23, 100 ; 1s
|
||
test eax, eax
|
||
jz .loop
|
||
|
||
dec eax ; rdrw
|
||
jz .win_draw
|
||
|
||
cmp eax, 3-1 ; btn
|
||
jne .loop
|
||
|
||
mcall 17
|
||
cmp eax, 1
|
||
je .loop
|
||
exit:
|
||
mcall -1
|
||
|
||
|
||
|
||
draw_info:
|
||
mov edx, [buff_ptr]
|
||
mov ebx, (10 shl 16) + 10
|
||
mcall 4, , 0x5000FFFF, , 16, 0x000000FF
|
||
|
||
add edx, 16
|
||
add ebx, 16
|
||
mcall 4, , ;0x5000FFFF, , 16, 0x000000FF
|
||
ret
|
||
|
||
title: db 3, 'Эмулятор '
|
||
SHARED_NAME: db 'DISPLAY_16_2_D',0
|
||
buff_ptr: dd ?
|
||
|
||
align 16
|
||
I_END:
|
||
|
||
DEF_CMDLINE:
|
||
rb 256
|
||
align 16
|
||
rb 1024; one page
|
||
STACKTOP:
|
||
align 16
|
||
MEM: |