KERNAL
KERNAL[1] es el nombre designado por Commodore para el núcleo del sistema operativo residente en ROM en sus computadoras domésticas de 8 bits; desde el PET original de 1977, seguido de las versiones extendidas pero fuertemente relacionadas utilizadas en sus sucesores: el VIC-20, Commodore 64, Plus/4, C16 y C128. DescripciónEl KERNAL de las máquinas Commodore de 8 bits consta de rutinas del sistema operativo de bajo nivel, cercanas al hardware, más o menos equivalentes al BIOS en las PC compatibles con IBM (en contraste con las rutinas del intérprete BASIC, también ubicadas en ROM), así como funcionalidad de E/S independiente del dispositivo de nivel superior, y puede ser llamada por el usuario a través de una tabla de saltos cuya parte central (la más antigua), por razones de compatibilidad con versiones anteriores,[2] permanece en gran medida idéntica en toda la serie de 8 bits. La ROM KERNAL ocupa los últimos 8 KB del espacio de direcciones de los 64 KB de la CPU de 8 bits ($E000- $FFFF). La tabla de salto se puede modificar para apuntar a rutinas escritas por el usuario, por ejemplo, reescribiendo las rutinas de visualización de pantalla para mostrar gráficos animados o copiando el conjunto de caracteres en la RAM. Este uso de una mesa de salto era nuevo para las computadoras pequeñas en ese momento.[3] Los juegos de Adventure International publicados para el VIC-20 en cartucho son un ejemplo de software que utiliza KERNAL. Debido a que solo usan la tabla de salto, los juegos pueden descargarse en la memoria del disco, cargarse en un Commodore 64 y ejecutarse sin modificaciones.[4] El KERNAL fue escrito inicialmente para el Commodore PET por John Feagans, quien introdujo la idea de separar las rutinas de BASIC del sistema operativo. Fue desarrollado por varias personas, especialmente Robert Russell, quien agregó muchas de las características para el VIC-20 y el C64. EjemploLa siguiente subrutina de lenguaje ensamblador 6502[5] (escrita en formato/sintaxis de ensamblador ca65) proporciona un ejemplo simple pero característico del uso de KERNAL: CHROUT = $ffd2 ; CHROUT is the address of the character output routine
CR = $0d ; PETSCII code for Carriage Return
;
hello:
ldx #0 ; start with character 0 by loading 0 into the x index register
next:
lda message,x ; load byte from address message+x into the accumulator
beq done ; if the accumulator holds zero, we're done and want to branch out of the loop
jsr CHROUT ; call CHROUT to output char to current output device (defaults to screen)
inx ; increment x to move to the next character
bne next ; loop back while the last character is not zero (max string length 255 bytes)
done:
rts ; return from subroutine
;
message:
.byte "Hola mundo"
.byte CR, 0 ; Carriage Return and zero marking end of string
Este código auxiliar emplea la rutina El nombreEl KERNAL era conocido como kernel[6] dentro de Commodore desde los días de PET, pero en 1980 Robert Russell escribió mal la palabra como kernal en sus cuadernos. Cuando los escritores técnicos de Commodore Neil Harris y Andy Finkel recogieron las notas de Russell y las usaron como base para el manual del programador VIC-20, la falta de ortografía los siguió y quedó como estaba.[7] Según el antiguo mito de Commodore, e informado por el escritor/programador Jim Butterfield, entre otros, la "palabra" KERNAL es un acrónimo (o quizás más probable, un retroacrónimo) que significa Keyboard Entry Read, Network, And Link., lo que de hecho tiene sentido teniendo en cuenta su papel. Berkeley Softworks más tarde lo usó al nombrar las rutinas centrales de su sistema operativo GUI para computadoras hogareñas de 8 bits: el GEOS KERNAL. En E/S independientes del dispositivoSorprendentemente, el KERNAL implementó una API de E/S independiente del dispositivo que no es completamente diferente de la de Unix o Plan-9, que nadie explotó, hasta donde se sabe públicamente. Mientras que uno podría argumentar razonablemente que "todo es un archivo" en estos últimos sistemas, otros podrían afirmar fácilmente que "todo es un dispositivo GPIB" en el primero. Debido a las limitaciones con la arquitectura 6502 en ese momento, abrir un canal de E/S requiere tres llamadas al sistema. El primero generalmente establece el nombre de archivo lógico a través de la llamada
Observe que no existe una llamada al sistema para "crear" un canal de E/S, ya que los dispositivos no pueden crearse ni destruirse dinámicamente en circunstancias normales. Del mismo modo, no existen medios para buscar, ni para realizar funciones de "control de E/S" como ioctl() en Unix. De hecho, el KERNAL demuestra mucho más cerca de la filosofía del Plan-9 aquí, donde una aplicación abriría un canal especial de "command" al dispositivo indicado para realizar tales transacciones "meta" o "out-of-band". Por ejemplo, para eliminar ("scratch") un archivo de un disco, el usuario normalmente "abrirá" el recurso llamado 70 ...
80 REM ROTATE LOGS CURRENTLY OPENED ON LOGICAL CHANNEL #1.
90 CLOSE 1
100 OPEN 15,8,15,"R0:ERROR.1=0:ERROR.0":REM RENAME FILE ERROR.0 TO ERROR.1
110 INPUT# 15,A,B$,C,D:REM READ ERROR CHANNEL
120 CLOSE 15
130 IF A=0 THEN GOTO 200
140 PRINT "ERROR RENAMING LOG FILE:"
150 PRINT " CODE: "+A
160 PRINT " MSG : "+B$
170 END
200 REM CONTINUE PROCESSING HERE, CREATING NEW LOG FILE AS WE GO...
210 OPEN 1,8,1,"0:ERROR.0,S,W"
220 ...
Los números de dispositivo, según la documentación establecida, están restringidos al rango [0,16]. Sin embargo, esta limitación proviene de la adaptación específica del protocolo IEEE-488 y, en efecto, se aplica solo a periféricos externos. Con todas las llamadas relevantes del sistema KERNAL vectorizadas, los programadores pueden interceptar llamadas del sistema para implementar dispositivos virtuales con cualquier dirección en el rango de 32,256). Posiblemente, uno puede cargar un controlador de dispositivo binario en la memoria, parchear los vectores de E/S KERNAL y, a partir de ese momento, se podría abordar un nuevo dispositivo (virtual). Hasta ahora, esta capacidad nunca se ha conocido públicamente como utilizada, presumiblemente por dos razones: (1) KERNAL no proporciona medios para asignar dinámicamente ID de dispositivo, y (2) KERNAL no proporciona medios para cargar una imagen binaria reubicable. Por lo tanto, la carga de las colisiones tanto en el espacio de E/S como en el espacio de memoria recae en el usuario, mientras que la compatibilidad de la plataforma en una amplia gama de máquinas recae en el autor del software. No obstante, el software de soporte para estas funciones podría implementarse fácilmente si se desea. Los formatos lógicos de nombre de archivo tienden a depender del dispositivo específico direccionado. El dispositivo más común utilizado, por supuesto, es el sistema de disquete, que usa un formato similar a Otros dispositivos, como el teclado (dispositivo 0), el casete (dispositivo 1), la interfaz de pantalla (dispositivo 3) y la impresora (dispositivo 4 y 5), no requieren nombres de archivo para funcionar, suponiendo valores predeterminados razonables o simplemente no los necesitan. en absoluto. Referencias
Véase también
Enlaces externos |