Lo dudo muchisimo, en Windows (asumo que estamos hablando de una version de la gama NT) estaras trabajando con codigo de 16 bits de MS-DOS y este es EMULADO, de otra manera tu codigo es exactamente igual de "seguro". Ambos son S.O. modernos que trabajan en modo protegido/long (32,64 bits) y donde no podes acceder directamente a las interrupciones de la BIOS.
Hasta cierto punto trabajar en modo texto en Linux es simple y podes usar syscalls:
A grosso modo en Linux se pone en eax el numero del servicio y los parametros van en ebx, ecx, edx, esi, edi y ebp, despues se llama a la interrupcion 0x80 (
int 0x80, aca hay mas informacion aunque un poco subjetiva).
En /usr/include/asm/ unistd.h/unistd_32.h/unistd_64.h encontraras los numeros de los servicios.
Si solo necesitas escribir/leer caracteres lo haras con los servicios (syscalls) __NR_read y __NR_write, usando respectivamente 0 (stdin) y 1 (stdout) como primer parametro. Ver parametros:
http://linux.die.net/man/2/read http://linux.die.net/man/2/write
Para los atributos necesitaras un par de servicios mas: __NR_open, __NR_close y probablemente __NR_lseek. Asi podras abrir /dev/vcsa (vcsaN idem), aunque creo que funciona solo con terminales reales (no emulados por X) y puede que necesites ser root segun el caso.
http://linux.die.net/man/2/open
Extracto de ejemplo (NASM):
Código:
%defne __NR_open 5 ;esto depende del archivo unistd.h
%define O_RDONLY 0 ;esto depende del archivo /usr/include/asm/fcntl.h
section .data
Screen db '/dev/vcsa', 0
section .text
mov eax, __NR_open
mov ebx, Screen
mov ecx, O_RDONLY
mov edx, 0
int 80h