Najstarszym sposobem rozszerzenia funkcjonalności karty jest modyfikacja istniejącego systemu operacyjnego karty lub napisanie własnego i umieszczenie go w pamięci tylko do odczytu (ROM). Umieszczenie własnego kodu w pamięci tego typu jest możliwe tylko w procesie produkcyjnym karty. Wybranie tej drogi wiąże się więc ze ścisłą współpracą z producentem kart. Oprogramowanie tworzone i umieszczane w ten sposób na karcie nosi nazwę maski (ang. mask lub hard mask). Maska musi być napisana w języku maszynowym procesora karty, co czyni proces jej tworzenia długotrwałym i wiąże się z powstawaniem wielu, trudnych do wykrycia błędów. Co więcej wykrycie takich błędów po umieszczeniu oprogramowania na kartach powoduje konieczność wyrzucenia tych kart do kosza i rozpoczęcia produkcji od nowa, co może okazać się bardzo kosztowne. Procesory wykorzystywane w kartach procesorowych pochodzą od bardzo wielu producentów. Każdy z nich ma nieco inną architekturę i zestaw instrukcji. W konsekwencji, maska stworzona dla jednego typu kart jest z dużym prawdopodobieństwem bezużyteczna w przypadku innej karty. Zatem zastąpienie wybranego modelu karty w przyszłości przez inny (lepszy lub tańszy) wiąże się z dużymi kosztami. W praktyce na taki sposób modyfikacji oprogramowania karty mogą sobie pozwolić tylko największe firmy i organizacje.