{{ ┌──────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ 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 : Bellatrix-Test Chip : Regnatix Typ : Programm Version : 00 Subversion : 01 Funktion : Test für die grundlegenden Textausgabe- und Tastaturfunktionen. Komponenten : - COG's : - Logbuch : 22-03-2010-dr235 - anpassung trios Kommandoliste : Notizen : }} OBJ ios: "reg-ios" str: "glob-string" CON _CLKMODE = XTAL1 + PLL16X _XINFREQ = 5_000_000 OS_TIBLEN = 64 'größe des inputbuffers VAR 'systemvariablen byte tib[OS_TIBLEN] 'tastatur-input-buffer byte tibpos 'aktuelle position im tib byte tbuf[32] long cols,rows byte vidmod 'videomodus: 0 - vga, 1 - tv PUB main|fnr ios.start os_testvideo repeat ios.print(string("0 - Alle Tests",13)) ios.print(string("1 - Zeichensatz",13)) ios.print(string("2 - Hive-Logo",13)) ios.print(string("3 - Funktion TAB",13)) ios.print(string("4 - Funktion CLS",13)) ios.print(string("5 - Scrolling",13)) ios.print(string("6 - Funktion SCREENINIT",13)) ios.print(string("7 - Funktion SETCOLOR",13)) ios.print(string("8 - Funktion SETX/SETY",13)) ios.print(string("9 - Windows",13)) ios.print(string("10 - Funktion INPUT/BACKSPACE",13)) ios.print(string("11 - Funktion HOME/POS1/CURCHAR",13)) ios.print(string("99 - Ende ")) fnr := str.decimalToNumber(fInput(string(" Funktion : "))) case fnr 0: test_all 1: test_charmap 2: test_logo 3: test_tab 4: test_cls 5: test_scroll 6: test_screeninit 7: test_setcolor 8: test_setxy 9: test_windows 10: test_inputbackspace 11: test_home test_pos1 test_curchar 99: ios.stop pri os_testvideo 'sys: passt div. variablen an videomodus an vidmod := ios.belgetspec & 1 rows := ios.belgetrows 'zeilenzahl bei bella abfragen cols := ios.belgetcols 'spaltenzahl bei bella abfragen pri fInput(stradr1): stradr2 ios.setcolor(1) ios.printq(string("▶")) ios.print(stradr1) ios.input(@tbuf,32) ios.setcolor(0) ios.printnl return @tbuf pri test_all test_charmap test_logo test_tab test_cls test_scroll test_screeninit test_setcolor test_setxy test_windows test_inputbackspace test_home test_pos1 test_curchar pri test_charmap|i,j ios.print(string("Zeichensatz:")) ios.printnl ios.print(string(" 0123456789ABCDEF0123456789ABCDEF")) ios.printnl ios.print(string(" ┌────────────────────────────────┐")) repeat i from 0 to 7 ios.printnl ios.printhex(i*j,2) ios.printchar("│") repeat j from 0 to 31 ios.printqchar((i*31)+j) ios.printchar("│") ios.printnl ios.print(string(" └────────────────────────────────┘")) weiter pri test_logo ios.print(string("Hive-Logo:")) ios.printcls ios.printlogo(0,0) weiter pri test_tab|a,b,i,j ios.print(string("Test TAB:")) if cols < 50 a := 3 b := 5 else a := 3 b := 7 repeat j from a to b repeat i from 0 to 7 ios.settabs(i,j*i) ios.printcls repeat 8 ios.print(string("tab")) ios.printtab ios.printnl repeat i from 1 to 5 repeat 8 ios.printdec(i) ios.printtab ios.printnl waitcnt(10_000_000+cnt) weiter pri test_cls ios.print(string("Test CLS:")) ios.printcls repeat 10 charset ios.printnl ios.printnl ios.print(string("Bildschirm wird gleich gelöscht...")) waitcnt(cnt + clkfreq*3) ios.printcls ios.print(string("Bildschirm löschen OK")) weiter pri test_scroll ios.print(string("Test ScrollUp:")) repeat 10 charset repeat 20 waitcnt(10_000_000+cnt) ios.scrollup ios.printnl ios.printnl '------------------------------------------------------------------------------------ ios.print(string("Test ScrollDown:")) weiter repeat 10 charset repeat 15 <# rows - 2 waitcnt(10_000_000+cnt) ios.scrolldown repeat 16 repeat 15 <# rows - 2 waitcnt(1_000_000+cnt) ios.scrollup repeat 15 <# rows - 2 waitcnt(1_000_000+cnt) ios.scrolldown weiter pri test_screeninit ios.print(string("Test SCREENINIT:")) ios.screeninit(string("▶Funktionstest Bellatrix-BIOS [SCREENINIT OK]"),1) weiter pri test_setcolor|i,j,n if vidmod == ios#TV n := 7 else n := 15 ios.print(string("Test SETCOLOR:",13)) repeat i from 0 to n repeat j from 0 to 32 ios.setcolor(i) ios.printchar(j + 65) ios.printchar(":") ios.printdec(i) ios.printchar(":") ios.printhex(i,2) ios.printnl ios.setcolor(0) weiter pri test_setxy|i,j,n ios.print(string("Test SETX/SETY (CURON/CUROFF):")) ios.printcls ios.printnl ios.curoff repeat n from 1 to 50 repeat j from 1 to 5 repeat i from 1 to 8 <# cols/5-1 ios.cursetx(i * 5) ios.cursety(j * 2) ios.printchar(":") ios.printdec(n) ios.cursetx(5) ios.cursety(12 <# rows) ios.printchar(":") ios.printdec(j) ios.printchar(":") ios.printdec(i) ios.printchar(":") ios.printdec(n) ios.curon ios.printnl weiter pri test_windows ios.print(string("Test Windows:")) windows1 windows2 ios.printcls weiter pri test_inputbackspace ios.print(string("Test Eingabe/Backspace (bis Enter): ")) input ios.printnl ios.print(string("Eingabe :")) ios.print(@tib) weiter pri test_home|i ios.printcls ios.print(string("Test Home:")) repeat i from 0 to 1000 ios.curhome ios.printdec(i) weiter pri test_pos1|i ios.print(string("Test POS1:")) ios.printnl repeat i from 0 to 1000 ios.curpos1 ios.printdec(i) weiter pri test_curchar|i ios.print(string("Test CURCHAR: ")) repeat i from 1 to 100 ios.curchar(i) waitcnt(cnt + clkfreq/20) ios.curchar($0E) weiter PRI weiter | tast ios.printnl ios.print(string("Weiter [q|*] : ")) tast := ios.keywait if tast == "q" OR tast == "Q" ios.stop ios.printnl PUB charset | i,j repeat i from 20 to 255 ios.printchar(i) PUB input | charc repeat if ios.keystat > 0 'taste gedrückt? charc := ios.key 'tastencode holen if (tibpos + 1) < OS_TIBLEN 'tastaturpuffer voll? case charc ios#CHAR_BS: 'backspace if tibpos > 0 tibpos-- tib[tibpos] := $0 'letztes zeichen im puffer löschen ios.printbs 'steuerzeichen anterminal senden other: ios.bus_putchar2(charc) 'sonstige zeichen if (charc <> ios#CHAR_NL) & (charc <> ios#CHAR_BS) 'ausser sonderzeichen alles in tib if (tibpos + 1) < OS_TIBLEN 'tastaturpuffer voll? tib[tibpos++] := charc tib[tibpos] := $0 until charc == $0D 'schleife bis RETURN VAR long h[3], z[3], r[3] PUB windows1 | gx, gy, i, j, tast cols := ios.belgetcols rows := ios.belgetrows gx := cols / 2 gy := rows * 2 / 3 ios.printcls ios.print(string(" ### Window-Test ###")) ios.windefine(1, 2, 3, gx - 1, gy - 1) ios.windefine(2, gx + 2, 3, cols - 2, gy - 1) ios.windefine(3, 2, gy + 2, cols - 2, rows - 2) repeat i from 1 to 3 ios.winset(i) ios.printcls ios.winoframe waitcnt(cnt + clkfreq) repeat i from 1 to 3 ios.winset(i) repeat 3 charset waitcnt(cnt + clkfreq) repeat i from 1 to 3 ios.winset(i) j := ios.wingetrows repeat 8 repeat 15 <# j - 2 waitcnt(1_000_000+cnt) ios.scrollup repeat 15 <# j - 2 waitcnt(1_000_000+cnt) ios.scrolldown repeat i from 0 to 2 ios.winset(i+1) h[i] := ios.wingetrows - 2 z[i] := 0 r[i] := 1 repeat 3 charset i := 0 repeat 16*3*4 i := (i + 1) // 3 ios.winset(i+1) z[i] += r[i] if r[i] > 0 ios.scrollup else ios.scrolldown if z[i] == 0 or z[i] == h[i] r[i] *= -1 waitcnt(1_000_000+cnt) ios.winset(3) ios.printcls ios.print(string("Test Screen 2")) weiter screen2 repeat i from 1 to 3 ios.winset(i) ios.printcls ios.curoff ios.winset(1) ios.printcls ios.print(string("Test relative Positionierung")) weiter ios.winset(2) repeat j from 2 to 3 ios.winset(j) repeat i from 1 to 3 setpos(i, i) waitcnt(cnt + clkfreq/2) setpos(-i, -i) waitcnt(cnt + clkfreq/2) ios.winset(1) ios.curon ios.printnl ios.printnl ios.print(string("Weiter */uit : ")) tast := ios.keywait ios.screeninit(0,0) if tast == "q" OR tast == "Q" ios.stop PUB windows2 | gx, gy, i, j, tast cols := ios.belgetcols rows := ios.belgetrows gx := cols / 2 gy := rows * 2 / 3 ios.printcls ios.print(string(" ### Window-Test - Randkollision ###")) ios.windefine(1, 2, 3, gx - 1, gy - 1) ios.windefine(2, gx + 2, 3, cols + 4, gy - 1) ios.windefine(3, 2, gy + 2, cols + 4, rows + 4) repeat i from 1 to 3 ios.winset(i) ios.printcls ios.winoframe waitcnt(cnt + clkfreq) repeat i from 1 to 3 ios.winset(i) repeat 3 charset waitcnt(cnt + clkfreq) repeat i from 1 to 3 ios.winset(i) j := ios.wingetrows repeat 8 repeat 15 <# j - 2 waitcnt(1_000_000+cnt) ios.scrollup repeat 15 <# j - 2 waitcnt(1_000_000+cnt) ios.scrolldown repeat i from 0 to 2 ios.winset(i+1) h[i] := ios.wingetrows - 2 z[i] := 0 r[i] := 1 repeat 3 charset i := 0 repeat 16*3*4 i := (i + 1) // 3 ios.winset(i+1) z[i] += r[i] if r[i] > 0 ios.scrollup else ios.scrolldown if z[i] == 0 or z[i] == h[i] r[i] *= -1 waitcnt(1_000_000+cnt) ios.winset(3) ios.printcls ios.print(string("Test Screen 2")) weiter screen2 repeat i from 1 to 3 ios.winset(i) ios.printcls ios.curoff ios.winset(1) ios.printcls ios.print(string("Test relative Positionierung")) weiter ios.winset(2) repeat j from 2 to 3 ios.winset(j) repeat i from 1 to 3 setpos(i, i) waitcnt(cnt + clkfreq/2) setpos(-i, -i) waitcnt(cnt + clkfreq/2) ios.winset(1) ios.curon ios.printnl ios.printnl ios.print(string("Weiter */uit : ")) tast := ios.keywait ios.screeninit(0,0) if tast == "q" OR tast == "Q" ios.stop PRI setpos(x, y) ios.wincursetx(x) ios.wincursety(y) printpos(x, y) PRI printpos(x, y) ios.printqchar(15) waitcnt(cnt + clkfreq/3) if x < 0 ios.curpos1 else ios.printqchar(2) ios.printchar("(") ios.printdec(x) ios.printchar(",") ios.printdec(y) ios.printchar(")") if x < 0 ios.printqchar(3) PRI screen2 ios.set_wscr(2) ios.set_dscr(2) ios.print(string("hier ist Screen 2")) ios.printnl ' Window anzeigen, Scrolling ios.print(string("definiere Window 2 abweichend zu Screen 1: (8, 2)-(30, 8)")) ios.printnl ios.windefine(2, 8, 2, 30, 8) ios.print(string("weiter mit beliebiger Taste...")) ios.keywait ios.winset(2) ios.winoframe ios.printcls ios.print(string("Ausgabe in Window 2")) ios.printnl ios.print(string("zurück zu Screen 1 mit beliebiger Taste...")) ios.keywait ios.set_wscr(1) ios.set_dscr(1) 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. │ └──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ }}