______ ____ ______ _____ ______ | ____| | _ \| ____| / / _ \| ____| | |__ _ __ ___ ___| |_) | |__ / / |_| | |__ | __| '__/ _ \/ _ \ _ <| __| / /| _ | __| | | | | | __/ __/ |_) | |____ / / | | | | | |_| |_| \___|\___|____/|______/_/ |_| |_|_| Cirrus 54x driver implementation notes. Pattern fills may be improved quite a lot for cards which supports starting on different place of pattern than upper left corner (now I always assume accelerator can't do that so whenever upper left corner changes I change the pattern). I also don't understand the notation of raster operations cirrus supports and so SetMix isn't probably implemented properly. Because of lack of precise specification of right input data to functions, some of them may be implemented wrong. Optimization with -O3 helps a bit, also port accesses are on RING 3 quite slow so checking is the content of registers changed helped quite a bit. I expect there might be quite a lot of problem with newer cirruses now, definitely should work with 5426,5428,7541 and 7543. ***Note: Now also tested with a 5446 (rev A) and modified to work (Keir Fraser, email: kaf24@cam.ac.uk) I have had some problems with the memory-mapped IO, specifically when the registers are mapped to low memory (0xb8000). If you are having problems getting the driver to work, you can disable MMIO by uncommenting the DISABLE_MMIO line at the top of driver.c. You should also contact me at the email address given above to look for a more permanent solution! Supported functions: WaitTillIdle() SetMix() Set8x8MonoPattern() Set8x8ColorPattern() Use8x8ColorPattern() DrawScan() DrawPattScan() DrawColorPattScan() DrawRect() DrawPattRect() DrawColorPattRect() BitBlt() SrcTransBlt() SetCursor SetCursorPos SetCursorColor ShowCursor SrcTransBltSys() BitBltSys() PutMonoImage() Author: Michal Mertl (Czech Republic) Email: mime@eunet.cz