home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Amiga Demo Collection
/
TheAmigaDemoCollectionCDCUE.img
/
S
/
showtime05
/
Bonus
/
BScreen.lha
/
Blitterscreen
/
BScreen.doc
next >
Wrap
Text File
|
1992-12-20
|
5KB
|
138 lines
BlitterScreenInterLaced by Voodoo Chile of Degeneration
v1.0 5-1-97
based on the original blitterscreen from:
Juergen "Rally" Fischer
e-mail: fischerj@Informatik.TU-Muenchen.DE
Is a routine that convert a 8 bit Chunky screen on an Amiga planar screen
using blitter.
I have semplified the usage a lot, I spent two days to understand the
original blitterscreen.lha archive.
I've included the original archive, too.
I expanded the routine that now use a big "FAKE" to avoid the bad
"Black hole" effect that appear in the original routine.
Advantages:
- Just two parameters for the Inizialization (BScreenInit) and
conversion (BScreenConvert) routines.
- A pair of Routines to simplify the usage (BScreenWait and BScreenReStart)
- Removed all unusefull data allocation, only needed ds.x are present.
- More clear interrupt routine in a separate include file text
- All datas to be placed in your code ready in BScreenData.txt
- Special Interlaced mode to avoid black pixels. (Fake Mode)
Disadvantages:
- The chunky source screen must be in chip mem, too.
Missing:
- Code Optimization ... NO WAY!!! ... I Haven't understand a byte of the
conversion mode ;-)
- 2x1 mode. I worked only on the 2x2 mode.
METHOD
I'll go to explain what I have understand.. maybe something miss.
The blitterscreen is a method to convert a 8 bit chunky image in
amiga planar mode using blitter.
Read the original text of the author for speed and advantages
considerations.
Since the blitter need 3 pass to convert the image, a list of
values to put in blitter register is stored in a special buffer
that will be used by the interrupt routine to reinitialize the blitter
and make the successive step.
So you can't use the $dff002 to wait the blitter because he can be
restarted by the interrupt routine, use the BScreenWait routine instead.
The only disadvantage is that the sprites are needed to cover one pixel
each two. All 8 sprites are used.
The "Interlaced Method"
I've added this feature to avoid the black holes in teh screen.
If you've already seen the original blitter screen, you noticed
that every two lines the first is normal, and the second is shifted
right by one pixel.
I modified the coplist handling and the IntLev3 routine so every
frame the shift condition of all lines is switched.
This cause the screen ti have a little flickering (different from
the normal interlaced one) and a little loose of colour.
Package content:
- BScreen.i there are all the subroutines you need.
- BScreenInt3.i is the interrupt subroutine, I used a separate file
for it because you can insert your own level 3
interrupt routines here.
- BScreenData.txt Here there are all the storage definitions ready
to be cutted and pasted in your own code.
How to use:
- Go to edit the initials EQU's in the BScreen.i file.
They are ready for a 2x2 160x128 screen (i.e. full screen)
But if you modify them maybe you'll need to change some value
in the copperlist.
- Go in BScreenData.txt and copy all the specified section in your own code.
- Select in the copper list the bank color selection for the sprites.
they'll conver the screen with their color 1 (0 is transparent),
so find the right section in your own palette.
- Call BScreenInit passing:
This initialize the copperlists inserting sprites pointers and datas.
- Use the supplied Interrupt Level 3 routine and start it.
- Now You can call BScreenConvert:
a0.l pointer to 8 bit chunky screen to convert
a1.l pointer to planar screen
After a little calculation (about 5-6 rastlines on a basic 1200) the
blitter will start to make the conversion.
- Use BScreenWait to wait for the conversion to finish.
Remember:!!! DO NOT USE THE NORMAL BLITTER WAIT UING $dff002 !!!
the blitter is restarted three times by the interrupt routine,
so probably you'll go to wait the end of the wrong pass.
The supplied function is just 3 instructions and waits the internal
right flag.
- Use BScreenReStart to make the same conversion you just did with
BScreenConvert. This avoid to repeat the calculation and is just
5 instruction large.
DO NOT call before the first use of BScreenConvert!!!
REMEMBER to use BScreenWait first!!!
OK, I think that's all.
Follow the steps made in main.s for help, is very self-explanatory.
NOTE: I use DevPac 3, so kill the first line if you use AsmOne or others.
My address:
Fabrizio Nunnari
via Vittime di Bologna 4
10032 Brandizzo (TO)
ITALY
e-mail:
nunnari.fabrizio@educ.di.unito.it
alias:
Voodoo Chile / DeGeNeRaTiOn
All done with : A1200 KS3.0 - 420M HD - External low density Drive
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Check out for our last music disk:
'...in death of disco' on Aminet:
IdodDisk1.lha demo/sound 594K 28+A MeTaL MuSiC DiSk By DeGeNeRaTiOn
IdodDisk2.lha demo/sound 641K 28+A MeTaL MuSiC DiSk By DeGeNeRaTiOn