Sie sind auf Seite 1von 8

DVD Lab Pro

Button Processing Programming in VM

Lesson #2
Page 1 of 8

Purpose This lesson will walk through a simple example of determining which
button the user picked from an interactive menu that contains several
buttons. We will also demonstrate how to use the branching object and
virtual machine commands to only play those chapters of interest in two
different video title sets.

VTS Video Title Set
GPMR General Purpose Memory Registers
SPMR System Memory Registers
Empty PGC Program chain that does not contain
any cells but only VM commands.
Sometimes referred to as a pass-
thru PGC.
VM Virtual Machine (instructions)
PTT Part of Title User Defined Chapter
in a movie

Background The programming requirements are:

• Single Menu in VMG domain for all chapter selections

• Play chapters in two different movies, each movie has a different
audio elementary streams (AC3 and LPCM)

Authoring Step DLP Output

Because the two movies
have different audio
streams, we will need to
create two VTS’. Start off
by creating an advanced
project. Then add a second
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 2 of 8

Authoring Step DLP Output

Import the four elementary
streams and set the
chapters. For this example,
we’ll set three chapters in
each movie.

Starting with VTS movie1,

select it to make it active
and use the auto chapter
feature. Please note that
we will only ask DLP to
create two (2) chapters
since the first chapter (by
default) starts at the
beginning of the movie.
This leaves us a total of
three chapters per movie.

Note the red markers in the

movie object’s timeline.
These are the chapters.

Repeat for VTS2 movie.

DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 3 of 8

Authoring Step DLP Output

By DVD design, we cannot
jump from VMG domain
into VTS –part of the title
(PTT) directly. To solve
this problem, we will create
branching objects in both
VTS domains to access the

Start with VTS1 movie.

Select the movie object to
make VTS1 active. With
VTS1 active, select the
movie branching object to
add three branching objects
to the VTS1 domain.

In this example I deleted

the return links from the
branching objects (for
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 4 of 8

Authoring Step DLP Output

Double click on branch 1 in
VTS1. The following pull
down menu will appear.

Select ‘chapter 1’ and then

click on ‘add to list’. Then
click on ‘ok’. We have
created a virtual movie that
will only play the first
chapter of VTS1 movie.
In the background DLP has
created a second title in
VTS1 that is only chapter1.

Note that we didn’t cut out

a portion of VTS1 movie
and added it a second time
Note the warning at the bottom of the object menu. Branching objects are only a snapshoot in
to the VTS1 domain. time. There are no ‘active’ connections back to the movie. If you add and or delete chapters,
you must redo your branching objects.
We’re actually using the
PTT definitions defined by
creating chapters in the
movie. Write the movie
once and use it in several
different ways!

Repeat for chapters two

and three using branching
objects 2 and 3,

Repeat the same steps

above for VTS2. The
output is shown.
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 5 of 8

Authoring Step DLP Output

We will now add the
buttons to the VMG menu.

Our menu design will have

eight buttons, four for each
VTS movie.

‘Movie 1’ plays the entire

movie. ‘Cx’ is the
respective chapter.

Lets spice up the menu by

adding a lens flair to the
screen. Note the icon to do
it. Select it and drag a
small box on the menu.
Release it. DLP will create
a nice lens flair to the

We will now create the

custom VM to help us
navigate through the DVD.

In the connections window

there is a VM ICON.
Select it and add the empty
PGC in VMG domain.

We renamed it to clarify
it’s purposed in this design.
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 6 of 8

Authoring Step DLP Output

Using the button routing
tool link all the buttons (8)
on the menu to the VM

For clarity, link all VTS1

buttons first (top down )
then link all VTS2 buttons
(top down). Thus buttons
1-4 belong to VTS1 and
buttons 5-8 belong to

The yellow number

indicates the button
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 7 of 8

Authoring Step DLP Output

Double click on the VM
object and add the
following VM commands.

Complete and save down

and try compiling it. Does
it work?

Can you do the same

function in a different

An Explanation of the VM code .

• (lines 1,2) The player will put into SPRM8 the last highlited button in multiples of 1024
decimal. Thus button one is stored as 1024decimal and button two = 2048decimal, etc. . We
will need to compare the same way. Note that you can enter in the decimal value and DLP
will convert to hex.
• (lines3-17) The VM command JumpTT only allows comparison by ‘indirect’, meaning, you
can only compare one GPRM to another GPRM. You cannot compare to a ‘direct value’ like
1024 or 2048 etc. So what we will do is used GPRM1 and change its value before doing a
compare. So, having eight buttons we will need to do eight comparisons.
• (line 18) As a default, we will link back to the VMG menu. Just in case we hosed ourself
and forget to check for a certain button.
• The ‘quicklink’ button is essential for VM programming in DLP. To successfully jump to a
PGCN, you must know the number assigned to it by DLP. It is not necessary the sequential
number displayed with the object. Use the ‘quicklink’ button to ensure you will call the
correct PGCN. DLP will fill in the VM code whereever the cursor is located in the edit

Completed VM command:
DVD Lab Pro
Button Processing Programming in VM
Lesson #2
Page 8 of 8

Authoring Step DLP Output

Final Words: The objective of this lesson was to show you how (via VM commands and PGCs) to see which
button was pressed by the user in the VMG menu and perform a certain action. We designed in
VMG because we knew the chapters resided in two different VTS’ due to the two different audio
streams of the source material. If we created the VM in VTS domain, we could not jump across
VTS domains easily.

There are always pitfalls whenever hardcoding in VM. In this example, if you add or take away
titles (movies) in the VTS’, chances are the PGCNs will need to be updated in the VMG VM
object. The JumpTT’s are hard-code using a snapshot of the network at the time of creation. If
you make changes (awl-sheets ☺ ) you must go back and examine your JumpTTs.

You could have just as easily used the button linking tool to link each button to the appropriate
branching object and accomplished the same thing. And in someways, it is much easier to do and
manage down the road. Everything is graphical and easy to understand 6 months down the road.

In this example I purposely left out the return links for all the branching objects in VTS1. What
will occur if you left them out? Will the player lock up or do something else? (hint: IFOedit will
help you find the answer!)

Also, I would like to acknowledge ‘markham’ and ‘moonman’ from the mmbforums with their
VM programming expertise and mentoring. What they shared with me is documented in this
lesson. Thanks guys!