0,0 → 1,482 |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
; |
; CD PLAYER - Compile with fasm |
; |
|
use32 |
|
org 0x0 |
db 'MENUET00' ; 8 byte id |
dd 38 ; required os |
dd START ; program start |
dd I_END ; program image size |
dd 0x1000 ; reguired amount of memory |
dd 0x1000 |
dd 0x00000000 ; reserved=no extended header |
|
include 'lang.inc' |
include 'macros.inc' |
|
START: |
|
call draw_window |
|
still: |
|
mov eax,10 |
int 0x40 |
|
cmp eax,1 |
jz red |
cmp eax,2 |
jz key |
cmp eax,3 |
jz button |
jmp still |
|
red: |
call draw_window |
jmp still |
|
key: |
mov eax,2 |
int 0x40 |
jmp still |
|
button: |
mov eax,17 |
int 0x40 |
|
cmp ah,byte 41 |
jnz nostop |
call stop |
jmp still |
nostop: |
|
cmp ah,byte 42 |
jnz nogetinfo |
call getinfo |
jmp still |
nogetinfo: |
|
pusha |
|
cmp ah,100 |
jnz err |
|
jmp noerr |
|
err: |
|
xor ecx,ecx |
mov cl,ah |
shl ecx,3 |
add ecx,cdinfo |
add ecx,1 |
xor ebx,ebx |
mov ebx,[ecx] |
and ebx,0x00ffffff |
mov ecx,ebx |
|
mov ebx,1 |
mov eax,24 |
int 0x40 |
|
cmp eax,0 |
je noerr |
|
error: |
|
mov eax,13 |
mov ebx,10*65536+215 |
mov ecx,115*65536+13 |
mov edx,0x0088aacc |
int 0x40 |
|
mov eax,dword 0x00000004 ; write text |
mov ebx,12*65536+117 |
mov ecx,[tcolor] |
mov edx,infotext2 |
mov esi,itl2-infotext2 |
int 0x40 |
|
mov eax,5 |
mov ebx,200 |
int 0x40 |
|
noerr: |
|
popa |
|
shr eax,8 |
and eax,255 |
mov ebx,0 |
mov ecx,10 |
|
cmp eax,100 |
jnz noend |
mov eax,-1 |
int 0x40 |
noend: |
|
newc: |
|
cmp eax,ecx |
jb dri |
inc ebx |
sub eax,ecx |
|
jmp newc |
|
|
dri: |
|
mov ecx,48 |
add ebx,ecx |
mov [infotext+0],bl |
add eax,ecx |
mov [infotext+1],al |
call drawinfo |
jmp still |
|
|
getinfo: |
|
mov eax,24 ; get info |
mov ebx,1 |
mov ecx,0x010100 |
int 0x40 |
|
cmp eax,0 |
jnz gierror |
|
mov eax,13 |
mov ebx,10*65536+215 |
mov ecx,115*65536+13 |
mov edx,0x0088aacc |
int 0x40 |
mov eax,dword 0x00000004 ; write text |
mov ebx,12*65536+117 |
mov ecx,dword 0x00ffffff ; 8b window nro - RR GG BB color |
mov edx,infotext3 ; pointer to text beginning |
mov esi,itl3-infotext3 ; text length |
int 0x40 |
|
mov eax,5 |
mov ebx,100*10 |
int 0x40 |
|
mov eax,24 ; get info |
mov ebx,2 |
mov ecx,cdinfo |
mov edx,256 |
int 0x40 |
|
cmp eax,0 |
jz gi1 |
|
gierror: |
|
mov eax,13 |
mov ebx,10*65536+215 |
mov ecx,115*65536+13 |
mov edx,0x0088aacc |
int 0x40 |
|
mov eax,dword 0x00000004 ; write text |
mov ebx,12*65536+117 |
mov ecx,dword 0x00ffffff ; 8b window nro - RR GG BB color |
mov edx,infotext2 ; pointer to text beginning |
mov esi,itl2-infotext2 ; text length |
int 0x40 |
|
mov eax,5 |
mov ebx,200 |
int 0x40 |
|
gi1: |
|
call drawinfo |
ret |
|
|
|
stop: |
|
mov eax,24 ; get info |
mov ebx,3 |
int 0x40 |
|
ret |
|
|
|
; info bar |
|
|
drawinfo: |
|
|
; end |
|
xor eax,eax |
xor ebx,ebx |
mov ecx,10 |
mov al,[cdinfo+3] |
cld |
|
newco: |
|
cmp eax,ecx |
jb noco |
|
add ebx,1 |
sub eax,ecx |
jmp newco |
|
noco: |
|
add al,48 |
mov [infotext+32],al |
|
add bl,48 |
mov [infotext+31],bl |
|
|
; start |
|
xor eax,eax |
xor ebx,ebx |
mov al,[cdinfo+2] |
cld |
|
newco2: |
|
cmp eax,ecx |
jb noco2 |
|
add ebx,1 |
sub eax,ecx |
jmp newco2 |
|
noco2: |
|
add al,48 |
mov [infotext+17],al |
|
add bl,48 |
mov [infotext+16],bl |
|
mov eax,13 |
mov ebx,10*65536+219 |
mov ecx,115*65536+13 |
mov edx,[col] |
sub edx,0x101010 |
int 0x40 |
|
mov eax,4 ; write text |
mov ebx,12*65536+117 |
mov ecx,dword 0x00ffffff ; 8b window nro - RR GG BB color |
mov edx,infotext ; pointer to text beginning |
mov esi,itl-infotext ; text length |
int 0x40 |
|
ret |
|
|
draw_window: |
|
pusha |
|
mov eax,12 ; tell os about redraw |
mov ebx,1 |
int 0x40 |
|
mov eax,0 ; define and draw window |
mov ebx,170*65536+240 |
mov ecx,40*65536+135 |
mov edx,0x00b6aaff |
mov esi,0x80b9aaff; bbee - 0x202020 |
mov edi,0x00b9aaff ;bbee |
mov edx,[col] |
add edx,0x00000000 |
mov esi,[col] |
add esi,0x80000000 |
mov edi,[col] |
int 0x40 |
|
mov eax,4 ; write text |
mov ebx,8*65536+8 |
mov ecx,[tcolor] |
mov edx,labelt |
mov esi,labellen-labelt |
int 0x40 |
|
mov eax,8 ; CLOSE BUTTON |
mov ebx,(240-18)*65536+10 |
mov ecx,6 *65536+10 |
mov edx,100 |
mov esi,[col] |
sub esi,0x302010 |
int 0x40 |
|
|
; first row |
|
mov eax,8 ; button |
mov edx,1 ; button number |
mov ebx,9*65536+21 ; button start x & size |
mov ecx,30*65536+13 ; button start y & size |
mov esi,[bcolor] ; button color |
newbutton1: |
pusha |
int 0x40 |
popa |
|
pusha |
mov eax,dword 0x00000004 |
and ebx,65535*65536 |
shr ecx,16 |
add ebx,ecx |
add ebx,6*65536+3 |
mov ecx,[tcolor] |
shl edx,1 |
add edx,nro-2 |
mov esi,2 |
int 0x40 |
popa |
|
add ebx,22*65536 |
inc edx |
cmp edx,11 |
jnz newbutton1 |
|
; second row |
|
mov eax,8 ; button |
mov edx,11 ; button number |
mov ebx,9*65536+21 ; button start x & size |
mov ecx,50*65536+13 ; button start y & size |
mov esi,[bcolor] ; button color |
newbutton2: |
pusha |
int 0x40 |
popa |
|
pusha |
mov eax,dword 0x00000004 |
and ebx,65535*65536 |
shr ecx,16 |
add ebx,ecx |
add ebx,6*65536+3 |
mov ecx,[tcolor] |
shl edx,1 |
add edx,nro2-2-20 |
mov esi,2 |
int 0x40 |
popa |
|
|
add ebx,22*65536 |
inc edx |
cmp edx,21 |
jnz newbutton2 |
|
; third row |
|
mov eax,8 ; button |
mov edx,21 ; button number |
mov ebx,9*65536+21 ; button start x & size |
mov ecx,70*65536+13 ; button start y & size |
mov esi,[bcolor] ; button color |
newbutton3: |
pusha |
int 0x40 |
popa |
|
pusha |
mov eax,dword 0x00000004 |
and ebx,65535*65536 |
shr ecx,16 |
add ebx,ecx |
add ebx,6*65536+3 |
mov ecx,[tcolor] |
shl edx,1 |
add edx,nro3-2-40 |
mov esi,2 |
int 0x40 |
popa |
|
add ebx,22*65536 |
inc edx |
cmp edx,31 |
jnz newbutton3 |
|
|
; fourth row |
|
mov eax,8 ; button |
mov edx,41 ; button number |
mov ebx,9*65536+109 ; button start x & size |
mov ecx,90*65536+13 ; button start y & size |
mov esi,0x00aabbcc ; button color |
newbutton4: |
pusha |
int 0x40 |
popa |
|
pusha |
mov eax,4 |
and ebx,65535*65536 |
shr ecx,16 |
add ebx,ecx |
add ebx,9*65536+3 |
mov ecx,[tcolor] |
sub edx,41 |
shl edx,4 |
add edx,text |
mov esi,16 |
int 0x40 |
popa |
|
add ebx,110*65536 |
inc edx |
cmp edx,43 |
jnz newbutton4 |
|
call drawinfo |
|
mov eax,12 ; tell os about redraw end |
mov ebx,2 |
int 0x40 |
|
popa |
ret |
|
|
|
|
; DATA AREA |
|
col dd 0x7777aa |
tcolor dd 0xffffff |
bcolor dd 0xaabbcc |
labelt: db 'CD PLAYER' |
labellen: |
infotext: db '01 First Track: xx Last Track: xx ' |
itl: |
infotext2: db 'DEFINE CD ROM BASE WITH SETUP ' |
itl2: |
infotext3: db 'READING PLAYLIST - (10 secs) ' |
itl3: |
nro: db '01020304050607080910' |
nro2: db '11121314151617181920' |
nro3: db '21222324252627282930' |
text: db ' STOP READ PLAYLIST ' |
|
cdinfo: |
|
I_END: |
|
|
|
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |