PETSCII - PETSCII
Diller) | İngilizce ile pseudographics |
---|---|
sınıflandırma | 8 bit genişletilmiş erken ASCII |
Dayalı | ABD-ASCII (1963 versiyonu) |
PETSCII ( PET S tandard C arasında gazel I nformation ben nterchange ) olarak da bilinen CBM ASCII , kullanılan karakter kümesidir Commodore Business Machines (CBM) 'ın 8 bit ev bilgisayarları ile başlayan PET 1977 den ve dahil C16 , C64 , C116 , C128 , CBM-II , Plus/4 ve VIC-20 .
Tarih
Karakter seti büyük ölçüde Leonard Tramiel ( Comodore CEO'su Jack Tramiel'in oğlu ) ve PET tasarımcısı Chuck Peddle tarafından tasarlandı . PETSCII'nin grafik karakterleri, Commodore'un 1977'de Microsoft'un mevcut 6502 BASIC'inde Microsoft'un Ric Weiland'ında istenen değişiklikleri düzenlerken Commodore BASIC için belirlediği uzantılardan biriydi. VIC-20 , PET ile aynı piksel piksel yazı tipini kullandı. VIC'nin 22 sütunlu ekranı nedeniyle karakterler daha geniş görünüyordu. Ancak Commodore 64, makinenin daha yüksek çözünürlüklü ekranı tarafından oluşturulan renk bozulmalarını önlemek için biraz yeniden tasarlanmış, ağır büyük harfli bir yazı tipi, esasen PET'lerin daha kalın bir versiyonu kullandı. C64'ün küçük harf karakterleri, Atari 800'ün sistem yazı tipindeki (birkaç yıl önce yayınlanmış) küçük harf karakterleriyle aynıdır .
Peddle, kart takımı sembollerinin dahil edilmesinin, PET'e kart oyunları yazmanın kolay olması gerektiği talebiyle (aldığı özellik listesinin bir parçası olarak) teşvik edildiğini iddia ediyor.
Özellikler
PETSCII, ASCII'nin 1963 sürümüne dayanmaktadır ( 1967 sürümü yerine , çoğu diğer bilgisayar karakter kümeleri olmasa da ASCII kullanımına dayalıdır). Grafik modunun kaydırılmamış olduğunu varsayarsak , PETSCII'nin açılış durumunda yalnızca büyük harfler, $ 5E konumunda bir şapka ( ^ ) yerine bir yukarı ok ( ↑ ) ve bir alt çizgi ( _ ) yerine bir sol ok ( ← ) vardır. 5F konumunda, bu iki değişken ASCII-1963'te yaygındır. Ayrıca, VIC-20 ve C64 versiyonunda, $5C konumundaki ters eğik çizgi ( \ ) bir İngiliz sterlini işareti ( £ ) tarafından işgal edilir (aynı ASCII kodunun ISO 646'nın Japonca ve Korece versiyonları tarafından kendi kullanımları için kullanılmasından önce gelir). ilgili para birimi simgeleri). Gelen elenmemiş modunda , $ 60- $ 7F ve $ A0- $ FF kodları blok grafik karakterler (yatay ve dikey çizgiler, kapakları, gölgeler, üçgenler, daireler ve CBM özgü tahsis edilir kart takım elbise ). $00–$1F ve $80–$9F aralıkları kontrol kodlarına sahiptir.
Commodore PET 'in bir programlanabilir eksikliği bit eşlem için biçem bilgisayar grafik hiçbir Yeniden tanımlanabilir karakter kümesi kapasitesine sahip olarak PETSCII geliştirilmiştir nedenlerinden biri olabilir, hem de; iyi düşünülmüş blok grafikleri yaratıcı bir şekilde kullanarak, ekran grafiklerinde düz ASCII'nin harf/rakam/noktalama karakterlerini kullanmaktan daha yüksek derecede gelişmişlik elde edilebilir. Bu şekilde üretilebilen nispeten çeşitli geometrik şekillere ek olarak, PETSCII , farklı şekilde taranmış dama tahtası kareler/yarım kareler sağlayarak birkaç gri tonlama düzeyine izin verir . Son olarak, ters video modu (aşağıya bakın), yansıtılmış yarım kare bloklar sağladığı için grafik karakter aralığını tamamlamak için kullanılır.
PETSCII ayrıca küçük harflerin $41–$5A aralığını ve büyük harflerin $C1–$DA aralığını işgal ettiği bir metin moduna sahiptir . Mod, SHIFT tuşlarından biri basılı tutularak ve ardından Commodore tuşuna basılarak ve bırakılarak değiştirilir . Çipin bu grafik "kaymasını" geçirip geçirmediğine bakılmaksızın, $E0-FF aralığında blok grafik karakterleri vardır. Bu, PETSCII'yi ASCII-1967'den daha geriye gitmeyen ASCII türlerinden ayırmaya yarar, bu nedenle 8-bit Commodore makinesi ile 1967'den türetilen ASCII kullanan bir makine arasındaki herhangi bir metin aktarımı, büyük harflerin küçük göründüğü metinle sonuçlanacaktır. , ve küçük harfler büyük. Bu durumları uygun duruma değiştirmek için kolay bir Boole işlemi yoktur . Bu nedenle, standart olmayan ASCII karakter kümelerine dayalı diğer bilgisayarlarda olduğu gibi, metin dosyalarını değiştirirken ve/veya standart ASCII sistemleriyle telekomünikasyon yaparken yazılım dönüştürmesi gerekir. Diğer aralıklar, kaydırılmış modda değişmez; bu, ASCII-1967'de küçük harflerin yanı sıra eklenen diğer karakterlerin - yani mezar vurgusu, kaşlı ayraçlar, dikey çubuk ve tilde - PETSCII'de bulunmadığı anlamına gelir.
PETSCII'de , , , ve (son iki etkinleştirme/devre dışı bırakma ters video karakter gösterimi) gibi imleç ve ekran kontrol kodları bulunur . Kontrol kodları, program listelerinde ters video grafik karakterleri olarak göründü, ancak bazı bilgisayar dergileri, daha net okunabilir listeler sağlama çabalarında , yukarıdaki örnekler gibi gerçek adlarını kullanarak kodları güzelce yazdırdı . Bu tür isimler genellikle listelerde kaşlı ayraçlar içine alındı. Bu, belirsizliği önledi, çünkü belirtildiği gibi, PETSCII'nin küme ayracı karakterleri yoktu. Ekran kontrol kodları, esasen metin tabanlı bilgisayar terminalleri için kaçış kodlarına benzerdi .
{HOME}
{CLR}
{RVS ON}
{RVS OFF}
Yukarıda belirtildiği gibi, PETSCII, açılışta varsayılan (kaydırılmamış) büyük harf+grafik karakter seti ile alternatif (kaydırılmış) küçük+büyük harf seti (kaydırılmış set, kaydırılmamış setin blok grafik karakterlerinin bir alt setini içerir) arasında geçiş sağlar. . Modlar arasındaki geçiş , alternatif grubu seçmek için 14 değeri veya standarda geri dönmek için 12 değeri ile 59468 konumu POKE yapılarak yapılır . C64'te kümeler, bayt 53272'nin bit 2'sinin çevrilmesiyle değiştirilir. Bazı PET modellerinde bu PRINT CHR$(14)
, karakter kümesini değiştirmenin yanı sıra satır aralığını ayarlayan özel kontrol koduyla da elde edilebilir ; POKE yöntemi hala kullanılabilir ve satır aralığını değiştirmez. Bu nedenle, ayrı ASCII kodlarının kullanılması yerine ekran düzenleyici durum değişiklikleri, tek durum (tüm büyük harfler) ve çift durum arasında seçim yapmak için kullanılır. VIC-20, C64 ve sonraki makinelerde (CBM iş bilgisayarları hariç), renk kodları diğer ekran kontrol kodlarını tamamlar. (VIC-20 ve C64/128'in renkleri VIC-II makalesinde listelenmiştir .)
Karakter seti
PETSCII tarafından kodlanan karakterlerin tümü 'grafik' değildir ve hepsinin karşılık gelen bir Unicode gösterimi yoktur. Aşağıdaki tablo, PETSCII karakterleri için karşılık gelen Unicode karakterini ve kod noktasını gösterir . Kontrol karakterleri ve diğer yazdırılamayan karakterler adlarıyla temsil edilir. Belirli bir kod noktasının hem kaydırılmış hem de kaydırılmamış bir karakteri kodladığı durumlarda, kaydırılmamış karakter solda ve kaydırılmış karakter sağda olacak şekilde her iki karakter de gösterilir. Satır ve sütun başlıkları , sekiz bitlik kod değerini üretmek için onaltılık basamak kombinasyonlarını belirtir ; örneğin, L harfi 4C kod değerindedir.
Aşağıdaki tablonun Commodore 64 , Commodore 16 ve Commodore 128 için olduğunu unutmayın . Kontrol karakterleri bu makineler arasında farklılık gösterir ve ayrı tablolarda sunulur . Diğer Commodore makineleri, farklı kontrol karakterleri ve bazı durumlarda farklı grafik karakterleri kullanan PETSCII'nin biraz farklı versiyonlarını kullandı. Örneğin, VIC-20'den önceki CBM makinelerinde , 2C ve 6C $ karakterlerinin her ikisi de biraz farklı semantiklere sahip olsa da bir virgül karakteri üretti.
Gerçek karakter oluşturucu ROM, farklı bir atama seti kullandı. Örneğin, "@ABC" karakterlerini doğrudan ekran belleğine yazarak ekranda görüntülemek için 64, 65, 66 ve 67 yerine 0, 1, 2 ve 3 ondalık değerleri POKE olacaktır.
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1_ 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2_ 32 |
SP 0020 |
! 0021 |
" 0022 |
# 0023 |
0024 $ |
% 0025 |
& 0026 |
' 0027 |
( 0028 |
) 0029 |
* 002A |
+ 002B |
, 002C |
- 002D |
. 002E |
/ 002F |
3_ 48 |
0 0030 |
1 0031 |
2 0032 |
3 0033 |
4 0034 |
5 0035 |
6 0036 |
7 0037 |
8 0038 |
9 0039 |
: 003A |
; 003B |
< 003C |
= 003D |
> 003E |
? 003F |
4_ 64 |
@ 0040 |
Bir bir 0041 0061 |
B b 0042 0062 |
C c 0043 0063 |
D d 0044 0064 |
E e 0065 0045 |
F f 0046 0066 |
G g 0047 0067 |
H h 0048 0068 |
Ben i 0069 0049 |
J J 004A 006A |
K k 004B 006B |
L l 004C 006C |
E m 004D 006D |
N n 004E 006E |
O o 004F 006F |
5_ 80 |
P p 0050 0070 |
Q q 0051 0071 |
R r 0052 0072 |
S s 0053 0073 |
T T 0054 0074 |
U u 0055 0075 |
V v 0056 0076 |
W w 0057 0077 |
X x 0058 0078 |
Y, Y 0059 0079 |
Z z 005A 007A |
[ 005B |
£ 00A3 |
] 005D |
↑ 2191 |
← 2190 |
6_ 96 |
🭹 1FB79 |
♠ bir 2660 0041 |
🭲 B 1FB72 0042 |
🭸 C 1FB78 0043 |
🭷 D 1FB77 0044 |
🭶 E 1FB76 0045 |
🭺 F 1FB7A 0046 |
🭱 G 1FB71 0047 |
🭴 H 1FB74 0048 |
╮ ben 256E 0049 |
╰ J 2570 004A |
╯ K 256F 004B |
🭼 L 1FB7C 004C |
╲ M 2572 004D |
╱ N 2571 004E |
🭽 O 1FB7D 004F |
7_ 112 |
🭾 P 1FB7E 0050 |
● Q 25CF 0051 |
🭻 R 1FB7B 0052 |
♥ S 0053 2665 |
🭰 T 1FB70 0054 |
╭ U 256D 0055 |
╳ V 2573 0056 |
○ W 25CB 0057 |
♣ X 2663 0058 |
🭵 Y 1FB75 0059 |
♦ Z 2666 005A |
┼ 253C |
🮌 1FB8C |
│ 2502 |
π 🮖 03C0 1FB96 |
◥ 🮘 25E5 1FB98 |
8_ 128 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9_ 144 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A_ 160 |
NBSP 00A0 |
▌ 258C |
▄ 2584 |
▔ 2594 |
▁ 2581 |
▏ 258F |
▒ 2592 |
▕ 2595 |
🮏 1FB8F |
◤ 🮙 25E4 1FB99 |
🮇 1FB87 |
├ 251C |
▗ 2597 |
└ 2514 |
┐ 2510 |
▂ 2582 |
B_ 176 |
┌ 250C |
┴ 2534 |
┬ 252C |
┤ 2524 |
▎ 258E |
▍ 258D |
🮈 1FB88 |
🮂 1FB82 |
🮃 1FB83 |
▃ 2583 |
🭿 ✓ 1FB7F 2713 |
▖ 2596 |
▝ 259D |
┘ 2518 |
▘ 2598 |
▚ 259A |
C_ 192 |
🭹 1FB79 |
♠ bir 2660 0041 |
🭲 B 1FB72 0042 |
🭸 C 1FB78 0043 |
🭷 D 1FB77 0044 |
🭶 E 1FB76 0045 |
🭺 F 1FB7A 0046 |
🭱 G 1FB71 0047 |
🭴 H 1FB74 0048 |
╮ ben 256E 0049 |
╰ J 2570 004A |
╯ K 256F 004B |
🭼 L 1FB7C 004C |
╲ M 2572 004D |
╱ N 2571 004E |
🭽 O 1FB7D 004F |
D_ 208 |
🭾 P 1FB7E 0050 |
● Q 25CF 0051 |
🭻 R 1FB7B 0052 |
♥ S 0053 2665 |
🭰 T 1FB70 0054 |
╭ U 256D 0055 |
╳ V 2573 0056 |
○ W 25CB 0057 |
♣ X 2663 0058 |
🭵 Y 1FB75 0059 |
♦ Z 2666 005A |
┼ 253C |
🮌 1FB8C |
│ 2502 |
π 🮖 03C0 1FB96 |
◥ 🮘 25E5 1FB98 |
E_ 224 |
NBSP 00A0 |
▌ 258C |
▄ 2584 |
▔ 2594 |
▁ 2581 |
▏ 258F |
▒ 2592 |
▕ 2595 |
🮏 1FB8F |
◤ 🮙 25E4 1FB99 |
🮇 1FB87 |
├ 251C |
▗ 2597 |
└ 2514 |
┐ 2510 |
▂ 2582 |
F_ 240 |
┌ 250C |
┴ 2534 |
┬ 252C |
┤ 2524 |
▎ 258E |
▍ 258D |
🮈 1FB88 |
🮂 1FB82 |
🮃 1FB83 |
▃ 2583 |
🭿 ✓ 1FB7F 2713 |
▖ 2596 |
▝ 259D |
┘ 2518 |
▘ 2598 |
π 🮖 03C0 1FB96 |
Mektup Sayı Noktalama Sembol Başka Tanımsız
Klavye varsayılan olarak kod sayfasının alt yarısına erişim sağlar. shift+tuşuna basmak, karşılık gelen üst yarı kod noktasını verir.
Kontrol karakterleri
Bazı PETSCII kodları yazdırılamaz ve yalnızca klavye girişi için kullanılır (örn. F1, RUN/STOP).
Commodore 64 kontrol karakterleri
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
|
DUR |
|
BEYAZ |
|
|
SHIFT DEVRE DIŞI |
SHIFT ETKİN |
|
|
|
DÖNÜŞ |
METİN MODU 000E |
|
1_ 16 |
|
İMLEÇ AŞAĞI 0084 |
TERS AÇIK |
EV |
DEL 0008 |
|
|
|
|
|
|
|
KIRMIZI |
İMLEÇ SAĞ |
YEŞİL |
MAVİ |
8_ 128 |
|
TURUNCU |
|
ÇALIŞTIRMAK |
|
F1 |
F3 |
F5 |
F7 |
F2 |
F4 |
F6 |
F8 |
LF 000A |
GRAFİK 000F |
|
9_ 144 |
SİYAH |
İMLEÇ YUKARI 008D |
TERS KAPALI |
CLR |
SOKMAK |
KAHVERENGİ |
PEMBE |
KOYU GRİ |
ORTA GRİ |
AÇIK YEŞİL |
AÇIK MAVİ |
AÇIK GRİ |
MOR |
SOL İMLEÇ |
SARI |
camgöbeği |
Commodore 16 kontrol karakteri
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
|
DUR |
|
BEYAZ |
|
|
SHIFT DEVRE DIŞI |
SHIFT ETKİN |
|
|
|
DÖNÜŞ |
METİN MODU 000E |
|
1_ 16 |
|
İMLEÇ AŞAĞI 0084 |
TERS AÇIK |
EV |
DEL 0008 |
|
|
|
|
|
|
ESC 001B |
KIRMIZI |
İMLEÇ SAĞ |
YEŞİL |
MAVİ |
8_ 128 |
|
TURUNCU |
YANIP YANIYOR |
ÇALIŞTIRMAK |
YANIP KAPALI |
F1 |
F3 |
F5 |
F7 |
F2 |
F4 |
F6 |
YARDIM |
LF 000A |
GRAFİK 000F |
|
9_ 144 |
SİYAH |
İMLEÇ YUKARI 008D |
TERS KAPALI |
CLR |
SOKMAK |
KAHVERENGİ |
SARI YEŞİL |
PEMBE |
MAVİ YEŞİL |
AÇIK MAVİ |
KOYU MAVİ |
AÇIK YEŞİL |
MOR |
SOL İMLEÇ |
SARI |
camgöbeği |
Commodore 128, 40 sütunlu mod kontrol karakterleri
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
|
DUR |
|
BEYAZ |
|
ZİL 0007 |
|
HT 0009 |
LF 000A |
SHIFT ETKİN |
SHIFT DEVRE DIŞI |
DÖNÜŞ |
METİN MODU 000E |
|
1_ 16 |
|
İMLEÇ AŞAĞI 0084 |
TERS AÇIK |
EV |
DEL 0008 |
|
|
|
SEKME AYARI/ SİL 0088 |
|
|
ESC 001B |
KIRMIZI |
İMLEÇ SAĞ |
YEŞİL |
MAVİ |
8_ 128 |
|
TURUNCU |
|
ÇALIŞTIRMAK |
|
F1 |
F3 |
F5 |
F7 |
F2 |
F4 |
F6 |
F8 |
LF 000A |
GRAFİK 000F |
|
9_ 144 |
SİYAH |
İMLEÇ YUKARI 008D |
TERS KAPALI |
CLR |
SOKMAK |
KAHVERENGİ |
PEMBE |
KOYU GRİ |
ORTA GRİ |
AÇIK YEŞİL |
AÇIK MAVİ |
AÇIK GRİ |
MOR |
SOL İMLEÇ |
SARI |
camgöbeği |
Commodore 128, 80 sütunlu mod kontrol karakterleri
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
ALT ÇİZGİ AÇIK |
DUR |
|
BEYAZ |
|
ZİL 0007 |
|
HT 0009 |
LF 000A |
SHIFT ETKİN |
SHIFT DEVRE DIŞI |
DÖNÜŞ |
METİN MODU 000E |
YANIP YANIYOR |
1_ 16 |
|
İMLEÇ AŞAĞI |
TERS AÇIK |
EV |
DEL 0008 |
|
|
|
SEKME AYARI/ SİL 0088 |
|
|
ESC 001B |
KIRMIZI |
İMLEÇ SAĞ |
YEŞİL |
MAVİ |
8_ 128 |
|
KOYU MOR |
ALT ÇİZGİ KAPALI |
ÇALIŞTIRMAK |
|
F1 |
F3 |
F5 |
F7 |
F2 |
F4 |
F6 |
F8 |
LF 000A |
GRAFİK 000F |
YANIP KAPALI |
9_ 144 |
SİYAH |
İMLEÇ YUKARI 008D |
TERS KAPALI |
CLR |
SOKMAK |
KOYU SARI |
PEMBE |
KOYU CYAN |
ORTA GRİ |
AÇIK YEŞİL |
AÇIK MAVİ |
AÇIK GRİ |
MOR |
SOL İMLEÇ |
SARI |
camgöbeği |
Commodore 65 prototip, 80 sütun modu kontrol karakterleri
_0 | _1 | _2 | _3 | _4 | _5 | _6 | _7 | _8 | _9 | _A | _B | _C | _NS | _E | _F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0_ 0 |
|
|
ALT ÇİZGİ AÇIK |
DUR |
|
BEYAZ |
|
ZİL 0007 |
|
HT 0009 |
LF 000A |
SHIFT ETKİN |
SHIFT DEVRE DIŞI |
DÖNÜŞ |
METİN MODU 000E |
YANIP YANIYOR |
1_ 16 |
F9 |
İMLEÇ AŞAĞI |
TERS AÇIK |
EV |
DEL 0008 |
F10 |
F11 |
F12 |
SEKME AYARI/ SİL 0088 |
F13 |
F14 |
ESC 001B |
KIRMIZI |
İMLEÇ SAĞ |
YEŞİL |
MAVİ |
8_ 128 |
|
TURUNCU |
ALT ÇİZGİ KAPALI |
ÇALIŞTIRMAK |
YARDIM |
F1 |
F3 |
F5 |
F7 |
F2 |
F4 |
F6 |
F8 |
LF 000A |
GRAFİK 000F |
YANIP KAPALI |
9_ 144 |
SİYAH |
İMLEÇ YUKARI 008D |
TERS KAPALI |
CLR |
SOKMAK |
KAHVERENGİ |
AÇIK KIRMIZI |
AÇIK GRİ |
ORTA GRİ |
AÇIK YEŞİL |
AÇIK MAVİ |
KOYU GRİ |
MOR |
SOL İMLEÇ |
SARI |
camgöbeği |
Temel 128
PETSCII'nin ilk 192 kodunun 164'ü görünür temsillere sahiptir (kontrol kodları için bunlar alıntı yapıldığında görünür ): 5 (beyaz), 17–20 ve 28–31 (renkler ve imleç kontrolleri), 32–90 ( ASCII eşdeğeri) , 91–127 (grafikler), 129 (turuncu), 133–140 (işlev tuşları), 144–159 (renkler ve imleç kontrolleri) ve 160–192 (grafikler). Bu teorik olarak, DATA ifadelerinde veya belki de PETSCII konuşan makineler arasında base128 gibi kodlamalara izin verir; örneğin, 33-127, 160-192.
Ayrıca bakınız
Notlar
- ^ Amigaev / kişisel bilgisayar ailesi standardı ISO-8859-1 kullanır.
- ^ bkz.On The Edgeby Brian Bagnall, ISBN 0-9738649-0-7, s. 43, 54–55.
Referanslar
Dış bağlantılar
- PETSCII karakter haritası, bölüm 1 , bölüm 2 , bölüm 3 ( JPEG )
- Unicode eşleştirme PETSCII bir girişim, elenmemiş , kaymıştır
- Unicode eşlemeye başka bir PETSCII ve bu eşlemeyi kullanan bir TrueType yazı tipi
- Commodore 128 PETSCII kontrol karakterleri
- 8 bit tipografi: Sistem yazı tipleri
- Çevrimiçi PETSCII sanat editörü
- PETSCII-sanat