TriOS-alt/flash/bellatrix/belf-vga.spin
hduhlig@gmail.com c39ffa7d23 g0key.spin - Bug bei horizontaler Textzentrierung beseitigt
belflash.spin - Interface VGA/TV vereinheitlicht, umschaltbar beim Compilieren (siehe make.bat)
belf-tv.spin, belf-vga.spin - treiberspezifische Konstanten und Funktionen für belflash.spin
bel-bus.spin - Auslagerung der Bus-Routinen aus Bellatrix-Sicht
beltest.spin - Anpassung an belflash.spin, auch im TV-Modus nutzbar
make.bat - tv.bel wird jetzt aus belflash.spin erzeugt; Einführung einer Variablen für den Compiler-Aufruf
reg-ios.spin - hmm... habsch vergessen, was da geändert wurde :-(
2013-02-18 22:14:40 +00:00

280 lines
17 KiB
Plaintext

{{ VGA-Spezifika für belflash
}}
CON
COLS = 64
ROWS = 48
TLINES_PER_ROW = 2
DEFAULT_Y0 = TLINES_PER_ROW ' 1 Zeile Platz lassen für HIVE-Logo
COLORANZ = 8
SPACETILE = $8000 + $20 << 6
VGA_BASPORT = 8 'vga startport
OBJ
vga : "bel-vga"
VAR
long vid_arr ' Kopie des Pointers auf den "Bildwiederholspeicher"
long ccolor ' aktuelle Anzeigefarbe
PUB start(array)
vid_arr := array
vga.start(VGA_BASPORT, array, @vgacolors, 0, 0, 0) 'vga-treiber starten
PUB set_dscr(scr_ptr)
vga.set_scrpointer(scr_ptr) 'screenpointer für den displaytreiber neu setzen
PUB get_color(cnr)
return long[@vgacolors][cnr]
PUB set_color(cnr, colr)
long[@vgacolors][cnr] := colr
PUB set_ccolor(colr)
ccolor := colr
PUB get_ccolor
return ccolor
PUB schar(offset, c) | i
i := $8000 + (c & $FE) << 6 + (ccolor << 1 + c & 1)
word[vid_arr][offset] := i 'oberes tile setzen
word[vid_arr][offset + cols] := i | $40 'unteres tile setzen
DAT
{{
'' array_ptr = Pointer to 3,072 long-aligned words, organized as 64 across by 48 down,
'' which will serve as the tile array. Each word specifies a tile bitmap and
'' a color palette for its tile area. The top 10 bits of each word form the
'' base address of a 16-long tile bitmap, while the lower 6 bits select a
'' color palette for the bitmap. For example, $B2E5 would specify the tile
'' bitmap spanning $B2C0..$B2FF and color palette $25.
'' color_ptr = Pointer to 64 longs which will define the 64 color palettes. The RGB data
'' in each long is arranged as %%RGBx_RGBx_RGBx_RGBx with the sub-bytes 3..0
'' providing the color data for pixel values %11..%00, respectively:
''
'' %%3330_0110_0020_3300: %11=white, %10=dark cyan, %01=blue, %00=gold
''
%% ist quaternary-darstellung; jedes digit von 0 bis 3, also 4-wertigkeit
bildaufbau: 24 zeilen zu je 64 zeichen; jedes zeichen wird durch zwei tiles gebildet
die ?bereinander liegen.
jedes tile belegt ein word: 10 bit bitmap und 6 bit color. zwei tiles ein long.
'0 %%RGBx_RGBx_RGBx_RGBx
long %%0330_0010_0330_0010
long %%0330_0330_0010_0010
long $3C043C04 'grau/blau erste - hive-version
long $3C3C0404
Color-Calculator:
http://www.rayslogic.com/propeller/Programming/Colors.htm
For the 1024x768 VGA tile driver:
2 longs are required for each text foreground/background color combo, arranged as:
$ff_bb_ff_bb
$ff_ff_bb_bb
where 'ff' is the foreground color and 'bb' is the background color
2 longs needed because characters are in an interleaved pair
The first long is the color for the first character in a pair, the second long is for the second character in a pair.
Demo routine "print()" only allows for 8 fore/back combinations (using longs 0 to 15)
1 long required for box colors, arranged as:
$tl_br_fi_bb
where 'tl' is top-left edge, 'br' is bottom-right edge, 'fi' is focus indicators, and 'bb' is background color
The demo "box()" procedure hardwired to add 16 to input color number to pick box color and adds 5 to input
color number to pick text color for box...
So, "box(left,top,clr,str)" uses color number 16+clr for box colors and 5+clr for text color. You probably want
the 'bb' background colors of these two to match! Note that this limits you to 4 box colors.
1 long used for graphics colors, arranged as
$00_11_22_33
where 00,11,22,33 are the selectable graphics colors 0,1,2,3
Demo hardwired to use the 21st long (last one) for the graphics colors
The Propeller's "tile driver" video uses 32-bit (long) values to define a four color palette
The "color_ptr" parameter, given to the tile driver, specifies the location of the data block of up to 64 different
long palette values
Each long palette represents 4 different colors, one byte each. Each color byte uses 2 bits for each primary colors,
RGB, arranged as RGBx. The "x" represents the two least significant bits, which are ignored.
Parallax gives this example of a 32-bit long palette, represented as a 16-digit quaternary (2-bit) number:
%%3330_0110_0020_3300 or $FC1408F0
The first byte, %%3330 (binary %11111100), is the color white
The second byte, %%0110, is the color dark cyan
}}
vgacolors long 'farbpalette
'============================================================
' v h v h ' v=Vordergrund, h=Hintergrund
' long $ 3C 04 3C 04 'Muster
' v v h h
' long $ 3C 3C 04 04 'Muster
'0 %%RGBx_RGBx_RGBx_RGBx
' long %%0330_0010_0330_0010
' long %%0330_0330_0010_0010
'============================================================
'set 1 - grau auf weiß
long $54FC54FC 'grau/weiß
long $5454FCFC
long $58FC58FC 'hellblau/weiß
long $5858FCFC
long $64FC64FC 'hellgrün/weiß
long $6464FCFC
long $94FC94FC 'hellrot/weiß
long $9494FCFC
long $00FC00FC 'schwarz/weiß
long $0000FCFC
long $0CFC0CFC 'blau/weiß
long $0C0CFCFC
long $30FC30FC 'grün/weiß
long $3030FCFC
long $C0FCC0FC 'rot/weiß
long $C0C0FCFC
long $C0408080 'redbox
long $CC440088 'magentabox
long $3C142828 'cyanbox
long $FC54A8A8 'greybox
long $3C14FF28 'cyanbox+underscore
long $F030C050 'graphics colors
long $881430FC
long $8008FCA4
'set 2 - weiß auf schwarz
{
long $FC00FC00 'schwarz/weiß
long $FCFC0000
long $A800A800 'schwarz/hellgrau
long $A8A80000
long $54005400 'schwarz/dunkelgrau
long $54540000
long $30043004 'grün/blau
long $30300404
long $043C043C 'Color 0 reverse
long $04043C3C
long $FC04FC04 'weiss/blau
long $FCFC0404
long $FF80FF80 'red/white
long $FFFF8080
long $88048804 'magenta/blau
long $88880404
long $C0408080 'redbox
long $CC440088 'magentabox
long $3C142828 'cyanbox
long $FC54A8A8 'greybox
long $3C14FF28 'cyanbox+underscore
long $F030C050 'graphics colors
long $881430FC
long $8008FCA4
}
'set 3 - hellblau auf dunkelblau
{
long $3C043C04 'grau/blau erste - hive-version
long $3C3C0404
long $F004F004 'yellow/blue
long $F0F00404
long $C004C004 'rot/blau
long $C0C00404
long $30043004 'grün/blau
long $30300404
long $043C043C 'Color 0 reverse
long $04043C3C
long $FC04FC04 'weiss/blau
long $FCFC0404
long $FF80FF80 'red/white
long $FFFF8080
long $88048804 'magenta/blau
long $88880404
long $C0408080 'redbox
long $CC440088 'magentabox
long $3C142828 'cyanbox
long $FC54A8A8 'greybox
long $3C14FF28 'cyanbox+underscore
long $F030C050 'graphics colors
long $881430FC
long $8008FCA4
}
'set 4 - chess
{
'0..1: text color 0:
long $F010F010 '0: Yellow on Green
long $F0F01010
'2..3: text color 1:
long $C0FCC0FC '1: red on white
long $C0C0FCFC
'4..5: text color 2:
long $00FC00FC '2: black on white
long $0000FCFC
'6..7: text color 3:
long $F010F010 '3: Yellow on Green
long $F0F01010
long $043C043C 'Color 0 reverse
long $04043C3C
long $FC04FC04 'weiss/blau
long $FCFC0404
long $FF80FF80 'red/white
long $FFFF8080
long $88048804 'magenta/blau
long $88880404
long $C0408080 'redbox
long $CC440088 'magentabox
long $3C142828 'cyanbox
long $FC54A8A8 'greybox
long $3C14FF28 'cyanbox+underscore
long $F030C050 'graphics colors
long $881430FC
long $8008FCA4
}
' alte definitionen
{
long $F010F010 'yellow on dk green
long $F0F01010
long $C000C000 'red
long $C0C00000
long $30003000 'green
long $30300000
long $0C000C00 'blue
long $0C0C0000
long $FC04FC04 'white
long $FCFC0404
long $FF88FF88 'magenta/white
long $FFFF8888
long $C0408080 'redbox
long $CC440088 'magentabox
long $3C142828 'cyanbox
long $FC54A8A8 'greybox
long $3C14FF28 'cyanbox+underscore
long $F030C050 'graphics colors
long $881430FC
long $8008FCA4
}