{{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ Autor: Ingo Kripahle │ │ Copyright (c) 2010 Ingo Kripahle │ │ See end of file for terms of use. │ │ Die Nutzungsbedingungen befinden sich am Ende der Datei │ └──────────────────────────────────────────────────────────────────────────────────────────────────────┘ Informationen : hive-project.de Kontakt : drohne235@googlemail.com System : TriOS Name : VGA-Text-Treiber 1024x768 Pixel, 128x64 Zeichen Chip : Bellatrix Typ : Treiber Version : 00 Subversion : 01 Funktion : VGA-Text- und Tastatur-Treiber Komponenten : VGA 1024x768 Tile Driver v0.9 Chip Gracey MIT PS/2 Keyboard Driver v1.0.1 Chip Gracey, ogg MIT COG's : MANAGMENT 1 COG VGA 2 COG's KEYB 1 COG ------------------- 4 COG's Logbuch : 23-10-2008-dr235 - erste funktionsfähige version erstellt - cursor eingebaut 06-11-2008-dr235 - keyb auf deutsche zeichenbelegung angepasst (ohne umlaute) 24-11-2008-dr235 - tab, setcur, pos1, setx, sety, getx, gety, setcol, sline, screeninit curon, curoff - beltest 13-03-2009-dr235 - LF als Zeichencode ausgeblendet 22-03-2009-dr235 - abfrage für statustasten eingefügt 05-09-2009-dr235 - abfrage der laufenden cogs eingefügt - deutschen tastaturtreiber mit vollständiger belegung! von ogg eingebunden 22-03-2010-dr235 - anpassung trios 01-05-2010-dr235 - scrollup/scrolldown eingebunden & getestet 03-05-2010-dr235 - settab/getcols/getrows/getresx/getresy eingefügt & getestet - hive-logo eingefügt Kommandoliste: 0 1 Tastaturstatus abfragen 0 2 Tastaturzeichen holen 0 3 n Screensteuerzeichen 0 3 0 CLS 0 3 1 Home 0 3 2 Backspace 0 3 3 TAB 0 3 4 n SETCUR Cursorzeichen auf n setzen 0 3 5 POS1 0 3 6 x SETX 0 3 7 y SETY 0 3 8 (x) GETX 0 3 9 (y) GETY 0 3 10 c SETCOL 0 3 11 n SLINE 0 3 13 SCREENINIT 0 3 14 CURON 0 3 15 CUROFF 0 3 16 SCROLLUP 0 3 17 SCROLLDOWN 0 3 18 n0..n7 SETTABS 0 4 (status) Status der Sondertasten abfragen 0 5 x y Hive-Logo ausgeben 0 90 cnr (c0) (c1) Farbregister auslesen 0 91 cnr c0 c1 Farbregister setzen 0 92 (res-x) 0 93 (res-y) 0 94 (cols) 0 95 (rows) 0 96 (cogs) Status der belegten COG's abfragen 0 97 (spez) Spezifikation abfragen 0 98 (ver) Version abfragen 0 99 Reboot und neuen Treiber laden 1..255 Zeichenausgabe Notizen: - setheader ACHTUNG: row ist nicht die Zeilenposition, da zwei tiles untereinander ein zeichen bilden. vielmehr ist die reale zeilenposition row/2. }} CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 'signaldefinitionen bellatrixix #0, D0,D1,D2,D3,D4,D5,D6,D7 'datenbus #8, BEL_VGABASE 'vga-signale (8pin) #16, BEL_KEYBC,BEL_KEYBD 'keyboard-signale #18, BEL_MOUSEC,BEL_MOUSED 'maus-signale #20, BEL_VIDBASE 'video-signale(3pin) #23, BEL_SELECT 'belatrix-auswahlsignal #24, HBEAT 'front-led BUSCLK 'bustakt BUS_WR '/wr - schreibsignal BUS_HS ' '/hs - quittungssignal ' +---------- ' | +------- system ' | | +---- version (änderungen) ' | | | +- subversion (hinzufügungen) CHIP_VER = $00_01_01_01 ' ' +---------- ' | +-------- ' | |+------- vektor ' | ||+------ grafik ' | |||+----- text ' | ||||+---- maus ' | |||||+--- tastatur ' | ||||||+-- vga ' | |||||||+- tv CHIP_SPEC = %00000000_00000000_00000000_00010110 COLS = VGA#cols 'anzahl der spalten ROWS = VGA#rows 'anzahl der zeilen TILES = COLS * ROWS RESX = 1024 RESY = 768 COLORANZ = 8 USERCHARS = 16 '8x2 logo TAB1 = 16 TAB2 = 32 TAB3 = 48 TABANZ = 8 SPACETILE = $8000 + $20 << 6 VGA_BASPORT = 8 'vga startport VGA_RESX = COLS * 16 'vga anzahl pixel x VGA_RESY = ROWS * 16 'vga anzahl pixel y KEYB_DPORT = BEL_KEYBD 'tastatur datenport KEYB_CPORT = BEL_KEYBC 'tastatur taktport CURSORCHAR = $0E 'cursorzeichen ' hbeat --------+ ' clk -------+| ' /wr ------+|| ' /hs -----+||| +------------------------- /cs ' |||| | -------- d0..d7 DB_IN = %00001001_00000000_00000000_00000000 'maske: dbus-eingabe DB_OUT = %00001001_00000000_00000000_11111111 'maske: dbus-ausgabe M1 = %00000010_00000000_00000000_00000000 M2 = %00000010_10000000_00000000_00000000 'busclk=1? & /cs=0? M3 = %00000000_00000000_00000000_00000000 M4 = %00000010_00000000_00000000_00000000 'busclk=0? OBJ vga : "bel-htext" keyb : "bel-keyb" VAR long keycode 'letzter tastencode long col, row, color 'spalten-, zeilenposition und zeichenfarbe byte cursor 'cursorzeichen byte curstat 'cursorstatus 1 = ein byte sline 'startzeile des scrollfensters (0 = 1. zeile) byte eline 'endzeile des scrollfensters (0 = 1. zeile) byte tab[TABANZ] 'tabulatorpositionen word user_charbase 'adresse der userzeichen ' htext-variablen byte array[TILES] 'bildschirmspeicher byte VGACogStatus 'status des vga-treiber-cogs byte cx0, cy0, cm0 'x, y, mode von cursor 0 byte cx1, cy1, cm1 'x, y, mode von cursor 1 word colors[rows] 'zeilenfarbenspeicher long ScreenIndex 'index im bildschirmspeicher long RowIndex 'zeilenindex long ColumnIndex 'spaltenindex long sync 'gets signal for vertical refresh sync CON ''------------------------------------------------- BELLATRIX PUB main | zeichen,n 'chip: kommandointerpreter ''funktionsgruppe : chip ''funktion : kommandointerpreter ''eingabe : - ''ausgabe : - init_subsysteme 'bus/vga/keyboard/maus initialisieren repeat zeichen := bus_getchar '1. zeichen empfangen if zeichen > 0 print_char(zeichen) else zeichen := bus_getchar '2. zeichen kommando empfangen case zeichen 1: key_stat '1: Tastaturstatus senden 2: key_code '2: Tastaturzeichen senden 3: print_ctrl(bus_getchar) '3: Steuerzeichen ($100..$1FF) ausgeben 4: key_spec '4: Statustasten ($100..$1FF) abfragen 5: print_logo '5: hive-logo ausgeben ' ---------------------------------------------- CHIP-MANAGMENT 90: mgr_getcolor 'farbregister auslesen 91: mgr_setcolor 'farbregister setzen 92: mgr_getresx 'x-auflösung abfragen 93: mgr_getresy 'y-auflösung abfragen 94: mgr_getcols 'spaltenanzahl abfragen 95: mgr_getrows 'zeilenanzahl abfragen 96: mgr_getcogs 'freie cogs abfragen 97: mgr_getspec 'codeversion abfragen 98: mgr_getver '5: Belegte Cogs abfragen 99: reboot '99: bellatrix neu starten PUB init_subsysteme|i 'chip: initialisierung des bellatrix-chips ''funktionsgruppe : chip ''funktion : - initialisierung des businterface '' : - vga & keyboard-treiber starten ''eingabe : - ''ausgabe : - dira := db_in 'datenbus auf eingabe schalten outa[bus_hs] := 1 'handshake inaktiv keyb.start(keyb_dport, keyb_cport) 'tastaturport starten start_htext(vga_basport, @sync) 'vga-treiber starten print_char($100) 'bildschirm löschen cursor := CURSORCHAR 'cursorzeichen setzen curstat := 1 'cursor anschalten sline := 2 'startzeile des scrollbereichs setzen eline := rows 'enbdzeile des scrollbereichs setzen repeat i from 0 to TABANZ-1 'tabulatoren setzen tab[i] := i * 4 user_charbase := @uchar & $FFC0 'berechnet die nächste 64-byte-grenze hinter dem zeichensatz longmove(user_charbase,@uchar,16*USERCHARS) 'verschiebt den zeichensatz auf die nächste 64-byte-grenze PUB start_htext(BasePin,pSyncAddress)| ColorIndex vga.stop 'stopt ein bereits laufenden vga-task cm0 := %000 'cursor 0 aus cm1 := %110 'cursor 1 unterstrich blinkend print_char($0E) 'bildschirm löschen ColorIndex := 0 'graue balken auf scharzem grund repeat rows colors[ColorIndex++] := %00000100_01101000 'rrggbb00_rrggbb00 VGACogStatus := VGA.Start(BasePin,@array, @colors, @cx0, pSyncAddress) 'startet vga-treiber (2cogs) return true PUB bus_putchar(zeichen) 'chip: ein byte an regnatix senden ''funktionsgruppe : chip ''funktion : ein byte an regnatix senden ''eingabe : byte ''ausgabe : - waitpeq(M1,M2,0) 'busclk=1? & prop2=0? dira := db_out 'datenbus auf ausgabe stellen outa[7..0] := zeichen 'daten ausgeben outa[bus_hs] := 0 'daten gültig waitpeq(M3,M4,0) 'busclk=0? dira := db_in 'bus freigeben outa[bus_hs] := 1 'daten ungültig PUB bus_getchar : zeichen 'chip: ein byte von regnatix empfangen ''funktionsgruppe : chip ''funktion : ein byte von regnatix empfangen ''eingabe : - ''ausgabe : byte waitpeq(M1,M2,0) 'busclk=1? & prop2=0? zeichen := ina[7..0] 'daten einlesen outa[bus_hs] := 0 'daten quittieren outa[bus_hs] := 1 waitpeq(M3,M4,0) 'busclk=0? CON ''------------------------------------------------- SUBPROTOKOLL-FUNKTIONEN PUB sub_putlong(wert) 'sub: long senden ''funktionsgruppe : sub ''funktion : subprotokoll um einen long-wert an regnatix zu senden ''eingabe : 32bit wert der gesendet werden soll ''ausgabe : - ''busprotokoll : [put.byte1][put.byte2][put.byte3][put.byte4] '' : [ hsb ][ ][ ][ lsb ] bus_putchar(wert >> 24) '32bit wert senden hsb/lsb bus_putchar(wert >> 16) bus_putchar(wert >> 8) bus_putchar(wert) PUB sub_getlong:wert 'sub: long empfangen ''funktionsgruppe : sub ''funktion : subprotokoll um einen long-wert von regnatix zu empfangen ''eingabe : - ''ausgabe : 32bit-wert der empfangen wurde ''busprotokoll : [get.byte1][get.byte2][get.byte3][get.byte4] '' : [ hsb ][ ][ ][ lsb ] wert := bus_getchar << 24 '32 bit empfangen hsb/lsb wert := wert + bus_getchar << 16 wert := wert + bus_getchar << 8 wert := wert + bus_getchar CON ''------------------------------------------------- CHIP-MANAGMENT-FUNKTIONEN PUB mgr_getcolor|cnr 'cmgr: farbregister auslesen ''funktionsgruppe : cmgr ''funktion : farbregister auslesen ''eingabe : - ''ausgabe : - ''busprotokoll : [0][091][get.cnr][sub_putlong.color] '' : cnr - nummer des farbregisters 0..15 '' : color - erster wert cnr := bus_getchar sub_putlong(long[@vgacolors][cnr]) PUB mgr_setcolor|cnr 'cmgr: farbregister setzen ''funktionsgruppe : cmgr ''funktion : farbregister setzen ''eingabe : - ''ausgabe : - ''busprotokoll : [0][091][get.cnr][sub_getlong.color] '' : cnr - nummer des farbregisters 0..15 '' : color - farbwert cnr := bus_getchar long[@vgacolors][cnr] := sub_getlong PUB mgr_getresx 'cmgr: abfrage der x-auflösung ''funktionsgruppe : cmgr ''funktion : abfrage der x-auflösung ''eingabe : - ''ausgabe : - ''busprotokoll : [0][092][put.resx] '' : resx - x-auflösung sub_putlong(RESX) PUB mgr_getresy 'cmgr: abfrage der y-auflösung ''funktionsgruppe : cmgr ''funktion : abfrage der y-auflösung ''eingabe : - ''ausgabe : - ''busprotokoll : [0][093][put.resy] '' : resy - y-auflösung sub_putlong(RESY) PUB mgr_getcols 'cmgr: abfrage der Textspalten ''funktionsgruppe : cmgr ''funktion : abfrage der textspalten ''eingabe : - ''ausgabe : - ''busprotokoll : [0][094][put.cols] '' : cols - anzahl der textspalten bus_putchar(COLS) PUB mgr_getrows 'cmgr: abfrage der textzeilen ''funktionsgruppe : cmgr ''funktion : abfrage der textzeilen ''eingabe : - ''ausgabe : - ''busprotokoll : [0][095][put.rows] '' : rows - anzahl der textzeilen bus_putchar(ROWS/2) PUB mgr_getcogs: cogs |i,c,cog[8] 'cmgr: abfragen wie viele cogs in benutzung sind ''funktionsgruppe : cmgr ''funktion : abfrage wie viele cogs in benutzung sind ''eingabe : - ''ausgabe : cogs - anzahl der cogs ''busprotokoll : [0][096][put.cogs] '' : cogs - anzahl der belegten cogs cogs := i := 0 repeat 'loads as many cogs as possible and stores their cog numbers c := cog[i] := cognew(@entry, 0) if c=>0 i++ while c => 0 cogs := i repeat 'unloads the cogs and updates the string i-- if i=>0 cogstop(cog[i]) while i=>0 bus_putchar(cogs) PUB mgr_getspec 'cmgr: abfrage der spezifikation des chips ''funktionsgruppe : cmgr ''funktion : abfrage der version und spezifikation des chips ''eingabe : - ''ausgabe : cogs - anzahl der cogs ''busprotokoll : [097][sub_putlong.spec] '' : spec - spezifikation '' '' '' +---------- '' | +-------- '' | |+------- vektor '' | ||+------ grafik '' | |||+----- text '' | ||||+---- maus '' | |||||+--- tastatur '' | ||||||+-- vga '' | |||||||+- tv ''CHIP_SPEC = %00000000_00000000_00000000_00010110 sub_putlong(CHIP_SPEC) PUB mgr_getver 'cmgr: abfrage der version ''funktionsgruppe : cmgr ''funktion : abfrage der version und spezifikation des chips ''eingabe : - ''ausgabe : cogs - anzahl der cogs ''busprotokoll : [098][sub_putlong.ver] '' : ver - version '' '' +---------- '' | +------- system '' | | +---- version (änderungen) '' | | | +- subversion (hinzufügungen) ''CHIP_VER = $00_01_01_01 sub_putlong(CHIP_VER) CON ''------------------------------------------------- KEYBOARD-FUNKTIONEN PUB key_stat 'key: tastaturstatus abfragen bus_putchar(keyb.gotkey) PUB key_code 'key: tastencode abfragen keycode := keyb.key bus_putchar(keycode) PUB key_spec 'key: statustaten vom letzten tastencode abfragen bus_putchar(keycode >> 8) CON ''------------------------------------------------- SCREEN-FUNKTIONEN PUB print_char(c) | code,n 'screen: zeichen auf bildschirm ausgeben {{zeichen auf bildschirm ausgeben}} case c $0A: 'LF ausblenden return $00..$0C: schar(c) $0D: 'return? newline $0E..$FF: 'character? schar(c) PUB home '' move writing place to upper left without clearing screen SetXY(0,sline) PUB SetXY(x,y) ColumnIndex := x <# cols 'setzt spalte mit begrenzung auf spaltenzahl RowIndex := y <# rows 'setzt zeile mit begrenzung auf zeilenzahl ScreenIndex := ColumnIndex + (RowIndex * cols) 'berechnet bildschirmindex PUB print_ctrl(c) | code,n,m 'screen: steuerzeichen ausgeben case c $00: 'clear screen? ScreenIndex := 0 n := sline * cols repeat TILES - n array[n + ScreenIndex++] := 32 home { if curstat == 1 'cursor ausschalten? schar($20) n := sline * cols 'wordfill(@array + n, spacetile, tiles - n) wordfill(@array.word[n], spacetile, tiles-n) row := sline col := 0 if curstat == 1 'cursor einschalten schar(cursor) } $01: 'home? row := sline col := 0 $02: 'backspace? if col col-- $03: 'tab repeat n from 0 to TABANZ-1 if col < tab[n] col := tab[n] quit $04: 'setcur code := bus_getchar cursor := code $05: 'pos1 col := 0 $06: 'setx col := bus_getchar $07: 'sety row := bus_getchar * 2 + sline '2 tiles pro zeichen! $08: 'getx bus_putchar(col) $09: 'gety bus_putchar(row / 2) $10: 'setcolor color := bus_getchar $11: 'sline sline := bus_getchar * 2 $12: 'eline eline := bus_getchar * 2 $13: 'screeninit ScreenIndex := 0 repeat TILES array[ScreenIndex++] := 32 RowIndex := 0 ColumnIndex := 0 sline := 0 { wordfill(@array, spacetile, tiles) row := 0 col := 0 sline := 0 } $14: 'curon curstat := 1 $15: 'curoff curstat := 0 $16: 'scrollup scrollup $17: 'scrolldown scrolldown $18: 'tabulator setzen n := bus_getchar m := bus_getchar if n =< (TABANZ-1) tab[n] := m PRI xschar(c)| i,k 'screen: schreibt zeichen an aktuelle position ohne cursor k := color << 1 + c & 1 i := $8000 + (c & $FE) << 6 + k array.word[row * cols + col] := i 'oberes tile setzen array.word[(row + 1) * cols + col] := i | $40 'unteres tile setzen PRI schar(c) 'schreibt zeichen an aktuelle position ohne cursorposition zu verändern array[RowIndex * cols + ColumnIndex] := c if ++ColumnIndex == cols newline cx1 := ColumnIndex cy1 := RowIndex PRI xpchar(c) 'screen: schreibt zeichen mit cursor an aktuelle position schar(c) if ++col == cols newline PRI pchar(c) 'schreibt zeichen an aktuelle position z?hlt position weiter schar(c) if ++ColumnIndex == cols newline PUB xnewline | i 'screen: zeilenwechsel, inkl. scrolling am screenende col := 0 if (row += 2) => eline row -= 2 'scroll lines repeat i from sline to eline-3 wordmove(@array.word[i*cols], @array.word[(i+2)*cols], cols) 'wordmove(dest,src,cnt) 'clear new line wordfill(@array.word[(eline-2)*cols], spacetile, cols<<1) PUB newline | i ColumnIndex := 0 if (RowIndex += 1) == rows RowIndex -= 1 'scroll lines repeat i from sline to rows-2 bytemove(@array[i*cols], @array[(i+1)*cols], cols) 'BYTEMOVE (DestAddress, SrcAddress, Count) 'clear new line ' bytefill(@array[(rows-1)*cols], 32, cols<<1) 'BYTEFILL (StartAddress, Value, Count) ' code fehlerhaft, zähler ist falsch gesetzt! bytefill(@array[(rows-1)*cols], 32, cols) 'BYTEFILL (StartAddress, Value, Count) PUB scrollup | i 'screen: scrollt den screen nach oben 'scroll lines wordmove(@array.word[sline*cols],@array.word[(sline+2)*cols],(eline-1-sline)*cols) 'wordmove(dest,src,cnt) 'clear new line wordfill(@array.word[(eline-2)*cols], spacetile, cols<<1) PUB scrolldown | i 'screen: scrollt den screen nach unten 'scroll lines i := eline - 1 repeat eline-sline-1 wordmove(@array.word[i*cols], @array.word[(i-2)*cols], cols) 'wordmove(dest,src,cnt) i-- 'clear new line wordfill(@array.word[(sline)*cols], spacetile, cols<<1) PRI print_logo|padr,x,y 'screen: hive-logo ausgeben x := bus_getchar y := bus_getchar padr := @hive+user_charbase-@uchar DrawBitmap(padr, x, y, 8, 2, 1) 'logo zeichnen PRI DrawBitmap(pBitmap, xPos, yPos, xSize, ySize, clr)|c,i,j,pcol,prow 'screen: zeichnet ein einzelnes tilefeld { - setzt in der tilemap des vga-treibers die adressen auf das entsprechende zeichen - setzt mehrer tiles je nach xSize und ySize - jedes tile besteht aus 16x16 pixel, weshalb die adresse jedes tiles mit c<<6 gebildet wird - alle 64 byte (c<<6) beginnt im bitmap ein tile } prow:=yPos pcol:=xPos c:=0 repeat j from 0 to (ySize-1) repeat i from 0 to (xSize-1) array.word[prow * cols + pcol] := pBitmap + (c<<6) + clr c++ pcol++ prow++ pcol:=xPos 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 }} org ' ' Entry: dummy-assemblercode fuer cogtest ' entry jmp entry 'just loops 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 } DAT padding long 1[16] '64-byte raum für die ausrichtung des zeichensatzes uchar long hive long file "logo-hive-8x2.dat" '8x2=16 DAT {{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ TERMS OF USE: MIT License │ ├──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation │ │files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, │ │modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software│ │is furnished to do so, subject to the following conditions: │ │ │ │The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.│ │ │ │THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE │ │WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR │ │COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, │ │ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}