Hi!
I did not received my beamracer yet but this is a good time to train myself!
So I started to look in details at the demo_seq example which looks simple… only displaying an imagine using Display List and the sequenc
But only looks simple:)
A few questions,
1. S_BASE
From the docs, *[font=Courier New]S_BASE[/font] is the memory location where to fetch bitmap data from. *
So, it should point to the start of the logo data right ?
But in the code I see:
MOV VREG_PBS_BASEL, <(mhl_logo - dl_start)
MOV VREG_PBS_BASEH, >(mhl_logo - dl_start)
Why dl_start
address should be subtracted to the logo address ?
2. S_PADDING
From the docs, S_PADDING
contains a 16bits value added to the bitmap sequencer’s internal memory pointer at the end of every line.
What does it mean? At each rasterline, the sequencer skip n bytes. Is 1 byte representing a 8 pixels block ? Starting from the border ?
In the code it says:
- when end-of-line reached, continue to the next byte (no padding),
MOV VREG_PBS_PADDINGL, 0
MOV VREG_PBS_PADDINGH, 0
Continue to the next byte, which byte ? In the logo data ? is it to create a window in the logo’s data?
3. S_STEP
From the docs, [font=Courier New]S_STEP[/font] contains a 16bits value added to the bitmap sequencer’s internal memory pointer after every fetch.
In the code, I understand it increments the pointer of 1 byte, so I guess it means logo’s data will be written sequentially except if the step is different than 1 ? Right ?
[font=Courier New]; - fetch bytes from successive memory addresses,[/font]
[font=Courier New]MOV VREG_PBS_STEPL, 1[/font]
[font=Courier New]MOV VREG_PBS_STEPH, 0[/font]
So, same guess? Is it to write the logo’s data in a non contiguous manner (as I guess the step is not used while reading the logo’s data, only for writing)
4. PBS_CONTROL
I guess this register trigger the sequencer but I did not find in the docs how it works. Where can I find the role of each bit?
In the code:
[font=Courier New]; - apart from turning on the sequencer, we also request mirroring,[/font]
[font=Courier New]; because the logo is in .xbm format, which for some reason stores pixels[/font]
[font=Courier New]; in a byte using right-to-left order,[/font]
[font=Courier New]MOV VREG_PBS_CONTROL, 1 << PBS_CONTROL_ACTIVE_BIT | PBS_CONTROL_SWIZZLE_MIRROR[/font]
[font=Arial]In only found the values but not the meaning (I can guess some but)[/font]
[font=Courier New]PBS_CONTROL_ACTIVE_BIT = 3[/font]
[font=Courier New]PBS_CONTROL_RAMBANK_BIT = 0 ; bits 0-2[/font]
[font=Courier New]PBS_CONTROL_RAMBANK_MASK = (%111 << PBS_CONTROL_RAMBANK_BIT)[/font]
[font=Courier New]PBS_CONTROL_UPDATE_BIT = 4 ; bits 4-5[/font]
[font=Courier New]PBS_CONTROL_UPDATE_MASK = (%11 << PBS_CONTROL_UPDATE_BIT)[/font]
[font=Courier New]PBS_CONTROL_UPDATE_NONE = (%00 << PBS_CONTROL_UPDATE_BIT)[/font]
[font=Courier New]PBS_CONTROL_UPDATE_EOL = (%01 << PBS_CONTROL_UPDATE_BIT)[/font]
[font=Courier New]PBS_CONTROL_UPDATE_ALWAYS = (%10 << PBS_CONTROL_UPDATE_BIT)[/font]
[font=Courier New]PBS_CONTROL_SWIZZLE_BIT = 6 ; bits 6-7[/font]
[font=Courier New]PBS_CONTROL_SWIZZLE_MASK = (%11 << PBS_CONTROL_SWIZZLE_BIT)[/font]
[font=Courier New]PBS_CONTROL_SWIZZLE_NONE = (%00 << PBS_CONTROL_SWIZZLE_BIT)[/font]
[font=Courier New]PBS_CONTROL_SWIZZLE_MIRROR = (%01 << PBS_CONTROL_SWIZZLE_BIT)[/font]
[font=Courier New]PBS_CONTROL_SWIZZLE_MULTIMIRROR = (%10 << PBS_CONTROL_SWIZZLE_BIT)[/font]
[font=Courier New][font=Arial]Sorry for the dumb questions…[/font][/font]