2020-09-25, 10:10 PM
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, S_BASE 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, S_STEP 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 ?
; - fetch bytes from successive memory addresses,
MOV VREG_PBS_STEPL, 1
MOV VREG_PBS_STEPH, 0
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:
; - apart from turning on the sequencer, we also request mirroring,
; because the logo is in .xbm format, which for some reason stores pixels
; in a byte using right-to-left order,
MOV VREG_PBS_CONTROL, 1 << PBS_CONTROL_ACTIVE_BIT | PBS_CONTROL_SWIZZLE_MIRROR
In only found the values but not the meaning (I can guess some but)
PBS_CONTROL_ACTIVE_BIT = 3
PBS_CONTROL_RAMBANK_BIT = 0 ; bits 0-2
PBS_CONTROL_RAMBANK_MASK = (%111 << PBS_CONTROL_RAMBANK_BIT)
PBS_CONTROL_UPDATE_BIT = 4 ; bits 4-5
PBS_CONTROL_UPDATE_MASK = (%11 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_NONE = (%00 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_EOL = (%01 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_ALWAYS = (%10 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_SWIZZLE_BIT = 6 ; bits 6-7
PBS_CONTROL_SWIZZLE_MASK = (%11 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_NONE = (%00 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_MIRROR = (%01 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_MULTIMIRROR = (%10 << PBS_CONTROL_SWIZZLE_BIT)
Sorry for the dumb questions...
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, S_BASE 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, S_STEP 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 ?
; - fetch bytes from successive memory addresses,
MOV VREG_PBS_STEPL, 1
MOV VREG_PBS_STEPH, 0
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:
; - apart from turning on the sequencer, we also request mirroring,
; because the logo is in .xbm format, which for some reason stores pixels
; in a byte using right-to-left order,
MOV VREG_PBS_CONTROL, 1 << PBS_CONTROL_ACTIVE_BIT | PBS_CONTROL_SWIZZLE_MIRROR
In only found the values but not the meaning (I can guess some but)
PBS_CONTROL_ACTIVE_BIT = 3
PBS_CONTROL_RAMBANK_BIT = 0 ; bits 0-2
PBS_CONTROL_RAMBANK_MASK = (%111 << PBS_CONTROL_RAMBANK_BIT)
PBS_CONTROL_UPDATE_BIT = 4 ; bits 4-5
PBS_CONTROL_UPDATE_MASK = (%11 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_NONE = (%00 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_EOL = (%01 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_UPDATE_ALWAYS = (%10 << PBS_CONTROL_UPDATE_BIT)
PBS_CONTROL_SWIZZLE_BIT = 6 ; bits 6-7
PBS_CONTROL_SWIZZLE_MASK = (%11 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_NONE = (%00 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_MIRROR = (%01 << PBS_CONTROL_SWIZZLE_BIT)
PBS_CONTROL_SWIZZLE_MULTIMIRROR = (%10 << PBS_CONTROL_SWIZZLE_BIT)
Sorry for the dumb questions...