home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FreeWare Collection 2
/
FreeSoftwareCollection2pd199x-jp.img
/
ms_dos
/
exetoexp
/
sample.asm
< prev
next >
Wrap
Assembly Source File
|
1990-06-14
|
3KB
|
248 lines
.386p
TOWNS equ 0C0h
DEVNO equ TOWNS
TBIOS equ 0110h
SND equ 080h
assume cs:code,ds:data,ss:sseg
;
;
;
data segment dword 'DATA' use32
TOCDATA db 303 dup(0)
PLAY3 db 6 dup(0)
PARABLK label far
RINT dw 0
DSWD dw 0
ESWD dw 0
FSWD dw 0
GSWD dw 0
EAXWD dd 0
EDXWD dd 0
data ends
;
;
;
code segment dword 'CODE' use32
mov ax,ds
mov es,ax
;
;
;
TOC_READ:
mov ax,250Fh
lea ebx,TOCDATA
mov ecx,303
int 21h
jc error
mov di,cx
ror ecx,16
mov DSWD,cx
mov ah,54h
mov al,DEVNO
mov ch,00h
mov cl,00h
mov EAXWD,eax
mov bx,93h
mov RINT,bx
mov ax,2511h
lea edx,PARABLK
int 21h
cmp ah,00h
je short CD_PLAY3
cmp ah,80h
je short TOC_READ
cmp ah,10h
jne error
mov ah,55h
mov al,DEVNO
mov ch,00h
jmp TOC_READ
;
;
;
CD_PLAY3:
mov ax,TBIOS
mov fs,ax
mov ah,46h
mov bl,00110000b
call pword ptr fs:[SND]
mov ah,49h
mov dl,0ffh
call pword ptr fs:[SND]
lea esi,TOCDATA
lea edi,PLAY3
mov al,[esi+12]
mov [edi+00],al
mov al,[esi+13]
mov [edi+01],al
mov al,[esi+14]
mov [edi+02],al
mov al,[esi+02]
cmp al,3
jl error
je short Disc_Time
Track_Time:
mov dl,[esi+15]
mov ah,[esi+16]
mov al,[esi+17]
jmp short Calc_Music_End_Time
Disc_Time:
mov dl,[esi+03]
mov ah,[esi+04]
mov al,[esi+05]
Calc_Music_End_Time:
call conv_msf2lsn
dec ax
sbb dx,0
call conv_lsn2msf
mov [edi+03],dl
mov [edi+04],ah
mov [edi+05],al
mov ax,250Fh
lea ebx,PLAY3
mov ecx,6
int 21h
jc error
mov di,cx
ror ecx,16
mov DSWD,cx
mov ah,50h
mov al,DEVNO
mov ch,00h
mov cl,01h
mov EAXWD,eax
mov bx,93h
mov RINT,bx
mov ax,2511h
lea edx,PARABLK
int 21h
check:
mov ah,53h
mov al,DEVNO
mov ch,00
mov cl,00
int 93h
cmp al,1
jz check
stop:
mov ah,52h
mov al,DEVNO
mov ch,00
int 93h
jmp short owari
;
;
;
owari:
mov ax,4c00h
int 21h
;
;
;
error:
;
;
;
jmp short owari
;
;
;
;
;
;
conv_msf2lsn:
push bx
push cx
mov bx,ax
mov al,dl
mov cl,60
mul cl
add al,bh
adc ah,0
mov cx,75
mul cx
mov bh,0
add ax,bx
adc dx,0
sub ax,150
sbb dx,0
pop cx
pop bx
ret
;
;
;
;
;
;
conv_lsn2msf:
push cx
add ax,150
adc dx,0
mov cx,75*60
div cx
xchg dx,ax
mov cl,75
div cl
xchg ah,al
xor dh,dh
pop cx
ret
code ends
;
;
sseg segment dword stack use32
db 4096 dup(?)
sseg ends
end