6,15 → 6,51 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
use32 |
org 0x0 |
org 0x0 |
|
db 'MENUET00' ; 8 byte id |
dd 38 ; required os |
dd STARTAPP ; program start |
dd I_END ; program image size |
dd 0x100000 ; required amount of memory |
dd 0x00000000 ; reserved=no extended header |
;db 'MENUET00' ; 8 byte id |
;dd 38 ; required os |
;dd STARTAPP ; program start |
;dd I_END ; program image size |
;dd 0x100000 ; required amount of memory |
;dd 0x00000000 ; reserved=no extended header |
|
db 'MENUET01' |
dd 1 |
dd STARTAPP |
dd I_END |
dd MEM |
dd STACKTOP |
dd 0 |
dd 0 |
|
;macro start_draw_window x,y,xsize,ysize,areacolor,caption;,capsize |
;{ |
; mov eax, 12 ; function 12:tell os about windowdraw |
; mov ebx, 1 ; 1, start of draw |
; int 0x40 |
; ; DRAW WINDOW |
; mov eax, 48 ; function 48.4 : get skin height |
; mov ebx, 4 |
; int 0x40 |
; push eax |
; lea ecx, [y*65536+ysize+eax]; [y start] *65536 + [y size] + [skin_height] |
; xor eax, eax ; function 0 : define and draw window |
; mov ebx, x*65536+xsize ; [x start] *65536 + [x size] |
; mov edx, areacolor ; color of work area RRGGBB |
; ;mov esi, 0x00334455 ; color of grab bar RRGGBB |
; mov edi, caption;0x00ddeeff ; color of frames RRGGBB |
; int 0x40 |
; pop eax |
;} |
; |
;macro end_draw_window |
;{ |
; mov eax, 12 ; end of redraw |
; mov ebx, 2 |
; int 0x40 |
;} |
|
include "aspapi.inc" |
SCREEN_WIDTH equ 100h |
SCREEN_HEIGHT equ 100h |
22,7 → 58,7 |
|
STARTAPP: |
|
mov eax, 18 ;Get CPU speed |
mov eax, 18 ;Get CPU speed |
mov ebx, 5 |
int 0x40 |
shr eax, 28 |
72,88 → 108,91 |
inc si |
jnz l11 |
|
call copy_buffer_to_video |
call copy_buffer_to_video |
|
|
still: |
mov eax, 11 ; Test if there is an event in the queue. |
int 0x40 |
mov eax, 11 ; Test if there is an event in the queue. |
int 0x40 |
|
cmp al,1 ; redraw request ? |
jz red |
cmp al,2 ; key in buffer ? |
jz key |
cmp al,3 ; button in buffer ? |
jz button |
cmp al,1 ; redraw request ? |
jz red |
cmp al,2 ; key in buffer ? |
jz key |
cmp al,3 ; button in buffer ? |
jz button |
|
jmp MAIN |
jmp MAIN |
|
red: |
call draw_window |
jmp MAIN |
call draw_window |
jmp MAIN |
|
|
key: |
mov eax, 2 |
int 0x40 |
cmp ah, 27 ; Test Esc in ASCII |
je close_app |
jmp MAIN |
mov eax, 2 |
int 0x40 |
cmp ah, 27 ; Test Esc in ASCII |
je close_app |
jmp MAIN |
|
button: |
mov eax, 17 ; Get pressed button code |
int 0x40 |
cmp ah, 1 ; Test x button |
je close_app |
jmp MAIN |
mov eax, 17 ; Get pressed button code |
int 0x40 |
cmp ah, 1 ; Test x button |
je close_app |
jmp MAIN |
|
draw_window: |
start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+4,0x54224466,labelt;, 14;labellen-labelt |
mov dword [skin_h], eax |
end_draw_window |
start_draw_window 100,70,SCREEN_WIDTH+9,SCREEN_HEIGHT+4,0x54224466,labelt;, 14;labellen-labelt |
mov dword [skin_h], eax |
end_draw_window |
ret |
|
|
fail: |
; Type something here. |
; Type something here. |
close_app: |
mov eax, -1 ; close this program |
int 0x40 |
mov eax, -1 ; close this program |
int 0x40 |
|
|
|
copy_buffer_to_video: |
pusha |
pusha |
; mov eax, 18 ;@WAITVSYNC(); |
; mov ebx, 14 |
; int 0x40 |
mov eax, 5 ;delay |
mov ebx, dword [delay] |
int 0x40 |
mov eax, 5 ;delay |
mov ebx, dword [delay] |
int 0x40 |
|
mov eax, dword [skin_h] |
lea edx, [5*65536+eax] |
mov eax, dword [skin_h] |
lea edx, [5*65536+eax] |
|
mov eax, 65 |
mov ebx, img |
mov ecx, SCREEN_WIDTH*65536+SCREEN_HEIGHT ;ecx = w*65536+h |
mov eax, 65 |
mov ebx, img |
mov ecx, SCREEN_WIDTH*65536+SCREEN_HEIGHT ;ecx = w*65536+h |
; mov edx, 5*65536+25 ;edx = x*65536+y |
mov esi, 8 |
mov edi, Paleta |
xor ebp, ebp |
int 0x40 |
popa |
mov esi, 8 |
mov edi, Paleta |
xor ebp, ebp |
int 0x40 |
popa |
ret |
|
; DATA AREA |
|
; Application Title |
labelt db 'UnvWater demo',0 |
delay dd 0 |
skin_h dd 25 ; Skin height. |
labelt db 'UnvWater demo',0 |
delay dd 0 |
skin_h dd 25 ; Skin height. |
|
I_END: |
Paleta rb 1024 |
img db 1 |
rb 10000h |
Paleta rb 1024 |
img db 1 |
rb 10000h |
|
rb 256 |
STACKTOP: |
MEM: |