2006-01-03 12:43:31 +03:00
|
|
|
|
;
|
2007-05-17 06:22:27 +04:00
|
|
|
|
; PONG for MENUET v1.0
|
|
|
|
|
; 2001 by Mario Birkner, Germany
|
|
|
|
|
; cyflexx@digitalrice.com
|
|
|
|
|
;
|
|
|
|
|
; PONG for MENUET is
|
|
|
|
|
; a small PONG-clone for MenuetOS
|
|
|
|
|
;
|
|
|
|
|
; HINT: If the Paddle moves too slow,increase the
|
|
|
|
|
; typematic Rate in your BIOS
|
2006-01-03 12:43:31 +03:00
|
|
|
|
;
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
include '..\..\..\macros.inc'
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
CK_UP1 equ 113
|
|
|
|
|
CK_DOWN1 equ 97
|
|
|
|
|
CK_UP2 equ 130+48
|
|
|
|
|
CK_DOWN2 equ 129+48
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
use32
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
org 0x0
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
db 'MENUET00' ; 8 byte id
|
|
|
|
|
dd 38 ; required os
|
|
|
|
|
dd START ; program start
|
|
|
|
|
dd I_END ; program image size
|
|
|
|
|
dd 0x2000 ; required amount of memory
|
|
|
|
|
dd 0x2000 ; esp = 0x7FFF0
|
|
|
|
|
dd 0x00000000 ; reserved=no extended header
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
START:
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
call draw_window
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
still:
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,10
|
|
|
|
|
add eax,[control]
|
2007-05-10 17:48:35 +04:00
|
|
|
|
mcall
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp eax,1
|
2006-01-03 12:43:31 +03:00
|
|
|
|
je red
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp eax,2
|
2006-01-03 12:43:31 +03:00
|
|
|
|
je key
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp eax,3
|
2006-01-03 12:43:31 +03:00
|
|
|
|
je button
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp [control],1
|
|
|
|
|
jne still
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,5
|
|
|
|
|
mov ebx,[delay]
|
2007-05-10 17:48:35 +04:00
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
jmp move
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
red:
|
2006-01-03 12:43:31 +03:00
|
|
|
|
call draw_window
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp [control],1
|
|
|
|
|
jne still
|
|
|
|
|
call clall
|
|
|
|
|
call drawpad
|
2006-01-03 12:43:31 +03:00
|
|
|
|
jmp still
|
2007-05-17 06:22:27 +04:00
|
|
|
|
key:
|
|
|
|
|
mov eax,2
|
|
|
|
|
mcall
|
|
|
|
|
cmp [control],1
|
|
|
|
|
jne still
|
|
|
|
|
|
|
|
|
|
up1:
|
|
|
|
|
cmp ah,CK_UP1
|
|
|
|
|
jne dn1
|
|
|
|
|
cmp [posya],52*65536+64
|
|
|
|
|
je still
|
|
|
|
|
sub [posya],4*65536
|
|
|
|
|
call cl0
|
|
|
|
|
call drawpad
|
|
|
|
|
jmp still
|
|
|
|
|
dn1:
|
|
|
|
|
cmp ah,CK_DOWN1
|
|
|
|
|
jne up2
|
|
|
|
|
cmp [posya],140*65536+64
|
|
|
|
|
je still
|
|
|
|
|
add [posya],4*65536
|
|
|
|
|
call cl0
|
|
|
|
|
call drawpad
|
|
|
|
|
jmp still
|
|
|
|
|
up2:
|
|
|
|
|
cmp ah,CK_UP2
|
|
|
|
|
jne dn2
|
|
|
|
|
cmp [posyb],52*65536+64
|
|
|
|
|
je still
|
|
|
|
|
sub [posyb],4*65536
|
|
|
|
|
call cl1
|
|
|
|
|
call drawpad
|
|
|
|
|
jmp still
|
|
|
|
|
dn2:
|
|
|
|
|
cmp ah,CK_DOWN2
|
|
|
|
|
jne still
|
|
|
|
|
cmp [posyb],140*65536+64
|
|
|
|
|
je still
|
|
|
|
|
add [posyb],4*65536
|
|
|
|
|
call cl1
|
|
|
|
|
call drawpad
|
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
|
|
button:
|
|
|
|
|
mov eax,17
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cmp ah,1
|
|
|
|
|
jne button2
|
|
|
|
|
mov eax,-1
|
2007-05-10 17:48:35 +04:00
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
jmp still
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
button2:
|
|
|
|
|
cmp ah,2
|
|
|
|
|
jne still
|
|
|
|
|
mov [control],1
|
|
|
|
|
mov [scp1],0
|
|
|
|
|
mov [scp2],0
|
|
|
|
|
jmp res
|
|
|
|
|
move:
|
|
|
|
|
mov eax,[mposx]
|
|
|
|
|
mov ebx,[mposy]
|
|
|
|
|
add [bposx],eax
|
|
|
|
|
add [bposy],ebx
|
|
|
|
|
cmp [bposx],16*65536+16
|
|
|
|
|
je pf1
|
|
|
|
|
cmp [bposx],272*65536+16
|
|
|
|
|
je pf2
|
|
|
|
|
cmp [bposy],191*65536+16
|
|
|
|
|
je bot
|
|
|
|
|
cmp [bposy],48*65536+16
|
|
|
|
|
je top
|
|
|
|
|
cmp [bposx],247*65536+16
|
|
|
|
|
je rig
|
|
|
|
|
jg padr
|
|
|
|
|
cmp [bposx],55*65536+16
|
|
|
|
|
je lef
|
|
|
|
|
jl padl
|
|
|
|
|
jmp draw
|
|
|
|
|
|
|
|
|
|
padr:
|
|
|
|
|
mov ecx,[posyb]
|
|
|
|
|
jmp pad
|
|
|
|
|
padl:
|
|
|
|
|
mov ecx,[posya]
|
|
|
|
|
pad:
|
|
|
|
|
mov eax,[bposy]
|
|
|
|
|
sub eax,16
|
|
|
|
|
mov ebx,eax
|
|
|
|
|
add ebx,17*65536
|
|
|
|
|
sub ecx,64
|
|
|
|
|
mov edx,ecx
|
|
|
|
|
add edx,65*65536
|
|
|
|
|
cmp eax,edx
|
|
|
|
|
je top
|
|
|
|
|
cmp ebx,ecx
|
|
|
|
|
je bot
|
|
|
|
|
jmp draw
|
|
|
|
|
|
|
|
|
|
bot:
|
|
|
|
|
mov [mposy],-65536
|
|
|
|
|
jmp draw
|
|
|
|
|
top:
|
|
|
|
|
mov [mposy],65536
|
|
|
|
|
jmp draw
|
|
|
|
|
rig:
|
|
|
|
|
mov eax,[posyb]
|
|
|
|
|
sub eax,1*65536-64 ;verhindert das der ball ins paddle eindringt
|
|
|
|
|
mov ebx,[posyb]
|
|
|
|
|
add ebx,64*65536-64
|
|
|
|
|
mov ecx,[bposy]
|
|
|
|
|
add ecx,16*65536-16
|
|
|
|
|
mov edx,[bposy]
|
|
|
|
|
sub edx,16
|
|
|
|
|
cmp ecx,eax
|
|
|
|
|
je blr
|
|
|
|
|
jl draw
|
|
|
|
|
cmp edx,ebx
|
|
|
|
|
je blr
|
|
|
|
|
jl blr
|
|
|
|
|
jg draw
|
|
|
|
|
blr:
|
|
|
|
|
mov [mposx],-65536
|
|
|
|
|
jmp draw
|
|
|
|
|
|
|
|
|
|
lef:
|
|
|
|
|
mov eax,[posya]
|
|
|
|
|
sub eax,1*65536+64
|
|
|
|
|
mov ebx,[posya]
|
|
|
|
|
add ebx,64*65536-64
|
|
|
|
|
mov ecx,[bposy]
|
|
|
|
|
add ecx,16*65536-16
|
|
|
|
|
mov edx,[bposy]
|
|
|
|
|
add edx,16
|
|
|
|
|
cmp ecx,eax
|
|
|
|
|
je bll
|
|
|
|
|
jl draw
|
|
|
|
|
cmp edx,ebx
|
|
|
|
|
je bll
|
|
|
|
|
jl bll
|
|
|
|
|
jg draw
|
|
|
|
|
bll:
|
|
|
|
|
mov [mposx],65536
|
|
|
|
|
jmp draw
|
|
|
|
|
|
|
|
|
|
drawpad:
|
|
|
|
|
; draw paddle
|
|
|
|
|
mov edx,[posya]
|
|
|
|
|
shr edx,16
|
|
|
|
|
add edx,32*65536
|
|
|
|
|
mov ecx,24*65536+64
|
|
|
|
|
mov ebx,paddle
|
|
|
|
|
mov eax,7
|
|
|
|
|
mcall
|
|
|
|
|
mov edx,[posyb]
|
|
|
|
|
shr edx,16
|
|
|
|
|
add edx,264*65536
|
|
|
|
|
mov eax,7
|
|
|
|
|
mov ebx,paddle
|
|
|
|
|
mov ecx,24*65536+64
|
|
|
|
|
mcall
|
|
|
|
|
ret
|
|
|
|
|
|
|
|
|
|
draw:
|
|
|
|
|
; draw ball
|
|
|
|
|
mov eax,13
|
|
|
|
|
mov ebx,-65536+2
|
|
|
|
|
mov ecx,-65536+2
|
|
|
|
|
add ebx,[bposx]
|
|
|
|
|
add ecx,[bposy]
|
|
|
|
|
xor edx,edx
|
2007-05-10 17:48:35 +04:00
|
|
|
|
mcall
|
2007-05-17 06:22:27 +04:00
|
|
|
|
add ebx,65536-2
|
|
|
|
|
add ecx,65536-2
|
|
|
|
|
mov edx,ebx
|
|
|
|
|
and edx,0xffff0000
|
|
|
|
|
mov esi,ecx
|
|
|
|
|
shr esi,16
|
|
|
|
|
add edx,esi
|
|
|
|
|
mov esi,ebx
|
|
|
|
|
shl esi,16
|
|
|
|
|
mov edi,ecx
|
|
|
|
|
and edi,0x0000ffff
|
|
|
|
|
add esi,edi
|
|
|
|
|
mov ecx,esi
|
|
|
|
|
mov ebx,ball
|
|
|
|
|
mov eax,7
|
2007-05-10 17:48:35 +04:00
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
jmp still
|
2007-05-17 06:22:27 +04:00
|
|
|
|
cls:
|
|
|
|
|
mov eax,13
|
|
|
|
|
mov edx,0x00000000
|
|
|
|
|
mcall
|
|
|
|
|
ret
|
|
|
|
|
cl0:
|
|
|
|
|
mov ebx,32*65536+24
|
|
|
|
|
mov ecx,[posya]
|
|
|
|
|
sub ecx,4*65536+60
|
|
|
|
|
call cls
|
|
|
|
|
mov ecx,[posya]
|
|
|
|
|
add ecx,64*65536-60
|
|
|
|
|
call cls
|
|
|
|
|
ret
|
|
|
|
|
cl1:
|
|
|
|
|
mov ebx,264*65536+24
|
|
|
|
|
mov ecx,[posyb]
|
|
|
|
|
sub ecx,4*65536+60
|
|
|
|
|
call cls
|
|
|
|
|
mov ecx,[posyb]
|
|
|
|
|
add ecx,64*65536-60
|
|
|
|
|
call cls
|
|
|
|
|
ret
|
|
|
|
|
clall:
|
|
|
|
|
mov ebx,16*65536+288
|
|
|
|
|
mov ecx,47*65536+161
|
|
|
|
|
call cls
|
|
|
|
|
ret
|
|
|
|
|
pf1:
|
|
|
|
|
inc [scp2]
|
|
|
|
|
jmp res
|
|
|
|
|
pf2:
|
|
|
|
|
inc [scp1]
|
|
|
|
|
res:
|
|
|
|
|
cmp [scp2],20
|
|
|
|
|
je over
|
|
|
|
|
cmp [scp1],20
|
|
|
|
|
je over
|
|
|
|
|
mov [bposx],152*65536+16 ;default position ball
|
|
|
|
|
mov [bposy],119*65536+16
|
|
|
|
|
call draw_window
|
|
|
|
|
call clall
|
|
|
|
|
call drawpad
|
|
|
|
|
jmp draw
|
|
|
|
|
over:
|
|
|
|
|
mov [control],0
|
|
|
|
|
call draw_window
|
|
|
|
|
mov eax,4
|
|
|
|
|
mov ebx,120*65536+100
|
|
|
|
|
mov ecx,0x00ffdd00
|
|
|
|
|
mov esi,14
|
|
|
|
|
cmp [scp1],20
|
|
|
|
|
jne win
|
|
|
|
|
mov edx,w1
|
|
|
|
|
mcall
|
|
|
|
|
jmp still
|
|
|
|
|
win:
|
|
|
|
|
mov edx,w2
|
|
|
|
|
mcall
|
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
|
|
; *********************************************
|
|
|
|
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
|
|
|
; *********************************************
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
draw_window:
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,12
|
|
|
|
|
mov ebx,1
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,0
|
|
|
|
|
mov ebx,100*65536+320
|
|
|
|
|
mov ecx,100*65536+250
|
2007-06-23 00:24:06 +04:00
|
|
|
|
mov edx,0x144873a0 ;70d0
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov edi,labelt
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,8
|
|
|
|
|
mov ebx,20*65536+80
|
|
|
|
|
mov ecx,220*65536+20
|
|
|
|
|
mov edx,2
|
|
|
|
|
mov esi,0x900000
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,4
|
|
|
|
|
mov ebx,38*65536+227
|
|
|
|
|
mov ecx,0x00FFFFFF
|
|
|
|
|
mov edx,b0lab
|
|
|
|
|
mov esi,8
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,4
|
|
|
|
|
mov ebx,25*65536+30
|
|
|
|
|
mov ecx,0x00ffdd00
|
|
|
|
|
mov edx,welcome
|
|
|
|
|
mov esi,40
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,4
|
|
|
|
|
mov ebx,220*65536+228
|
|
|
|
|
mov ecx,0x00ffdd00
|
|
|
|
|
mov edx,scotext
|
|
|
|
|
mov esi,11
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,47
|
|
|
|
|
mov ebx,0x00020000
|
|
|
|
|
mov ecx,[scp1]
|
|
|
|
|
mov edx,268 shl 16+228
|
|
|
|
|
mov esi,0x0000ddff
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,47
|
|
|
|
|
mov ebx,0x00020000
|
|
|
|
|
mov ecx,[scp2]
|
|
|
|
|
mov edx,285 shl 16+228
|
|
|
|
|
mov esi,0x0000ddff
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
mov eax,12
|
|
|
|
|
mov ebx,2
|
|
|
|
|
mcall
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
ret
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
|
2007-05-17 06:22:27 +04:00
|
|
|
|
; DATA AREA
|
|
|
|
|
posya dd 96*65536+64 ;default position paddle
|
|
|
|
|
posyb dd 96*65536+64
|
|
|
|
|
bposx dd 152*65536+16 ;default position ball
|
|
|
|
|
bposy dd 119*65536+16
|
|
|
|
|
mposx dd 65536 ;richtung ball
|
|
|
|
|
mposy dd 65536
|
|
|
|
|
control dd 0x0
|
|
|
|
|
delay dd 0x1 ;delay betw. frames
|
|
|
|
|
scp1 dd 0x0
|
|
|
|
|
scp2 dd 0x0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scotext:
|
|
|
|
|
db 'SCORE: :'
|
|
|
|
|
welcome:
|
|
|
|
|
db 'PLAYER1: Q , A PLAYER2: , '
|
|
|
|
|
b0lab:
|
|
|
|
|
db 'NEW GAME'
|
|
|
|
|
labelt:
|
|
|
|
|
db 'PONG FOR MENUET v1.0',0
|
|
|
|
|
w1:
|
|
|
|
|
db 'Player 1 wins!'
|
|
|
|
|
w2:
|
|
|
|
|
db 'Player 2 wins!'
|
|
|
|
|
clsign:
|
|
|
|
|
db 'x'
|
|
|
|
|
|
|
|
|
|
ball:
|
|
|
|
|
file "ball.raw"
|
|
|
|
|
|
|
|
|
|
paddle:
|
|
|
|
|
file "paddle.raw"
|
2006-01-03 12:43:31 +03:00
|
|
|
|
|
|
|
|
|
I_END:
|