close

KERNAL

Ir para a navegação Ir para a pesquisa
KERNAL
Cbm kernal jmp table3.jpeg
Informações gerais
tipo de programa núcleo
desenvolvedor Comodoro Internacional
Modelo de desenvolvimento fonte fechada
Estado atual descontínuo
Informação técnica
Plataformas compatíveis

KERNAL [ 1 ] é o nome designado do Commodore para o kernel do sistema operacional residente em ROM em seus computadores domésticos de 8 bits ; do PET original de 1977 , seguido pelas versões estreitamente relacionadas, mas estendidas, usadas em seus sucessores: VIC-20 , Commodore 64 , Plus/4 , C16 e C128 .

Descrição

O KERNAL de máquinas Commodore de 8 bits consiste em rotinas de sistema operacional de baixo nível e quase hardware equivalente ao BIOS em PCs compatíveis com IBM ( em contraste com as rotinas de intérprete BASIC, também localizadas em ROM), bem como funcionalidade de E/S independente de dispositivo de nível, e pode ser chamada pelo usuário por meio de uma tabela de saltos cuja parte do meio (mais antiga), por motivos de compatibilidade com versões anteriores, [ 2 ] permanece praticamente idêntica em toda a série de 8 bits. A ROM KERNAL ocupa os últimos 8 KB do espaço de endereçamento de 64 KB da CPU de 8 bits ($E000-$FFFF).

A tabela de salto pode ser modificada para apontar para rotinas escritas pelo usuário, por exemplo, reescrevendo as rotinas de exibição de tela para exibir gráficos animados ou copiando o conjunto de caracteres na RAM. Esse uso de uma mesa de salto era novo para computadores pequenos na época. [ 3 ]

Os jogos Adventure International lançados para o VIC-20 em cartucho são um exemplo de software usando KERNAL. Como eles usam apenas a tabela de saltos, os jogos podem ser baixados na memória do disco , carregados em um Commodore 64 e executados sem modificação. [ 4 ]

O KERNAL foi escrito inicialmente para o Commodore PET por John Feagans, que introduziu a ideia de separar as rotinas BASIC do sistema operacional. Foi desenvolvido por várias pessoas, mais notavelmente Robert Russell, que adicionou muitos dos recursos para o VIC-20 e C64.

Exemplo

A seguinte sub- rotina de linguagem assembly 6502 [ 5 ]​ (escrita no formato/sintaxe do assembler ca65) fornece um exemplo simples, mas característico do uso de KERNAL:

CHROUT   =  $ffd2           ; CHROUT é o endereço da rotina de saída de caracteres
  CR       =  $0d             ; Código PETSCII para devolução de carro
  ;
  Olá:
          ldx  #0            ; comece com o caractere 0 carregando 0 no registrador de índice x
  próximo:
           mensagem lda , x     ; carregar byte da mensagem de endereço + x no acumulador
          beq  feito          ; se o acumulador mantiver zero, terminamos e queremos sair do loop
          jsr  CHROUT        ; chame CHROUT para enviar char para o dispositivo de saída atual (o padrão é a tela)
          em x               ; incrementa x para passar para o próximo caractere
          b ne  próximo          ; loop back enquanto o último caractere não é zero (comprimento máximo da string 255 bytes)
  doar:
          rs               ; retorno da sub-rotina
  ;
  mensagem:
          .byte  "Olá mundo"
          .byte  CR ,  0       ; Retorno de carro e final de marcação zero da string

Este stub usa a rotina CHROUT, cujo endereço está no endereço $FFD2(65490), para enviar uma string de texto para o dispositivo de saída padrão (por exemplo, a tela de exibição).

O nome

O KERNAL era conhecido como kernel [ 6 ] dentro do Commodore desde os dias do PET, mas em 1980 Robert Russell escreveu incorretamente a palavra kernal em seus cadernos. Quando os escritores técnicos da Commodore, Neil Harris e Andy Finkel, pegaram as notas de Russell e as usaram como base para o manual do programador VIC-20, o erro de ortografia os seguiu e permaneceu como estava. [ 7 ]

De acordo com o antigo mito do Commodore, e relatado pelo escritor/programador Jim Butterfield, entre outros, a " palavra " KERNAL é um acrônimo (ou talvez mais provavelmente, um retro-acrônimo ) que significa Keyboard Entry Read , Network , A nd L tinta. , o que realmente faz sentido considerando seu papel. Mais tarde, a Berkeley Softworks o usou ao nomear as rotinas principais de seu sistema operacional GUI para computadores domésticos de 8 bits: o GEOS KERNAL.

Em E/S independente do dispositivo

Surpreendentemente, o KERNAL implementou uma API de E/S independente de dispositivo que não é totalmente diferente do Unix ou do Plan-9 , que ninguém explorou, até onde é conhecido publicamente. Enquanto se poderia argumentar razoavelmente que "tudo é um arquivo" nos últimos sistemas, outros poderiam facilmente afirmar que "tudo é um dispositivo GPIB " no primeiro.

Devido às limitações da arquitetura 6502 na época, a abertura de um canal de E/S requer três chamadas de sistema. O primeiro geralmente define o nome do arquivo lógico por meio do SETNAM. A segunda chamada, SETLFS, define o endereço do "dispositivo" GPIB/IEEE-488 com o qual se comunicar. Finalmente é chamado para OPENrealizar a transação real. O aplicativo então usa as chamadas de sistema CHKINe para CHKOUTconfigurar os canais de entrada e saída atuais do aplicativo, respectivamente. Os aplicativos podem ter qualquer número de arquivos abertos simultaneamente (até algum limite dependente do sistema; por exemplo, o C64 permite que dez arquivos sejam abertos ao mesmo tempo). Depois disso, CHRINe CHROUTsão úteis para entrada e saída, respectivamente. CLOSEem seguida, feche um canal.

Observe que não há chamada de sistema para "criar" um canal de E/S, pois os dispositivos não podem ser criados ou destruídos dinamicamente em circunstâncias normais. Da mesma forma, não há meios de buscar, nem de executar funções de "controle de E/S" como ioctl () no Unix. De fato, o KERNAL demonstra muito mais próximo da filosofia do Plan-9 aqui, onde uma aplicação abriria um canal especial de " comando " para o dispositivo indicado para realizar tais transações " meta " ou " fora de banda ". Por exemplo, para " raspar " um arquivo de um disco, o usuário normalmente "abriria" o recurso nomeado S0:THE-FILE-TO-RMVno dispositivo 8 ou 9, canal 15. Por convenção estabelecida no mundo Commodore de 8 bits, o canal 15 representa o "canal de comando " para periféricos, contando com técnicas de mensagens para comunicar comandos e resultados, incluindo casos raros. Por exemplo, no Commodore BASIC , você pode encontrar um software semelhante ao seguinte:

  70  ... 
  80  REM ROTATE LOGS ATUALMENTE ABERTOS NO CANAL LÓGICO #1. 
  90  CLOSE  1 
  100  OPEN  15 , 8 , 15 , "R0:ERROR.1=0:ERROR.0" : REM RENOMEAR FILE ERROR.0 TO ERROR.1 
  110  INPUT#  15 , A , B$ , C , D : REM LEIA ERRO CANAL 
  120  FECHAR  15 
  130  SE  A = 0  ENTÃO  IR PARA  200 
  140  IMPRIMIR  "ERRO RENOMEAR ARQUIVO DE LOG:" 
  150  IMPRIMIR  " CÓDIGO: " + A 
  160  IMPRIMIR  " MSG : " + B$ 
  170  TERMINAR 
  200  REM CONTINUAR PROCESSANDO AQUI, CRIANDO NOVO ARQUIVO DE LOG À medida que avançamos... 
  210  OPEN  1 , 8 , 1 , "0:ERROR.0,S,W" 
  220  ...

Os números dos dispositivos, conforme documentação estabelecida, estão restritos ao intervalo [0,16]. No entanto, esta limitação decorre da adaptação específica do protocolo IEEE-488 e, com efeito, aplica-se apenas a periféricos externos. Com todas as chamadas de sistema KERNAL relevantes vetorizadas, os programadores podem interceptar chamadas de sistema para implementar dispositivos virtuais com qualquer endereço na faixa de 32.256). Pode-se carregar um driver de dispositivo binário na memória, corrigir os vetores de E/S KERNAL e, a partir de então, um novo dispositivo (virtual) pode ser endereçado. Até agora, esse recurso nunca foi conhecido publicamente para ser usado, presumivelmente por dois motivos: (1) KERNAL não fornece meios de atribuir IDs de dispositivo dinamicamente e (2) KERNAL não fornece meios de carregar uma imagem binária realocável. Assim, o ônus das colisões no espaço de E/S e no espaço de memória recai sobre o usuário, enquanto a compatibilidade de plataforma em uma ampla variedade de máquinas recai sobre o autor do software. No entanto, o software de suporte para essas funções pode ser facilmente implementado, se desejado.

Os formatos de nome de arquivo lógico tendem a depender do dispositivo específico endereçado. O dispositivo mais comum usado, é claro, é o sistema de disquete, que usa um formato semelhante a MD:NAME,ATTRS, onde M é algum tipo de sinalizador ($ para listagem de diretórios, @ para indicar o desejo de sobrescrever um arquivo se ele já existir, caso contrário não utilizado ), D é o número da unidade de disco físico (opcional) (0: ou 1: para sistemas de unidade dupla, apenas 0: para unidades de disco único como 1541, et al., cujo padrão é 0: se não especificado) , NAMEé um nome de recurso de até 16 caracteres (a maioria dos caracteres permitidos, exceto alguns caracteres especiais) e ATTRSé uma lista opcional de atributos ou sinalizadores separados por vírgulas. Por exemplo, se o usuário quiser sobrescrever um arquivo de programa chamado PRGFILE, ele poderá ver um nome de arquivo @0:PRGFILE,Pusado em conjunto com o dispositivo 8 ou 9. Enquanto isso, um nome de arquivo para o controlador RS-232 (dispositivo 2) consiste simplesmente em quatro caracteres , codificado em formato binário. [ 8 ]

Outros dispositivos, como o teclado (dispositivo 0), o cassete (dispositivo 1), a interface de exibição (dispositivo 3) e a impressora (dispositivo 4 e 5), não exigem nomes de arquivos para funcionar, assumindo padrões razoáveis ​​ou apenas eles não precisa deles. em absoluto.

Referências

  1. Guia de referência do programador do Commodore 64 . Commodore Business Machines, Inc., 1982, p. 268
  2. A tabela de salto KERNAL, usada para acessar todas as sub-rotinas no KERNAL, é um array de instruções JMP (salto) que levam às sub-rotinas reais. Esse recurso garante a compatibilidade com o software escrito pelo usuário no caso de o código dentro do KERNAL ROM precisar ser realocado em uma revisão posterior.
  3. ^ "Explorando o VIC-20" . 
  4. Kevelson, Morton (janeiro de 1986). "Sintetizadores de fala para os computadores Commodore / Parte II" . pág. 32 . Recuperado em 17 de julho de 2014 . 
  5. Muitas das sub-rotinas KERNAL (por exemplo, OPEN e CLOSE) foram vetorizadas através da página três na RAM, permitindo que um programador interceptasse as chamadas KERNAL associadas e adicionasse ou substituísse as funções originais.
  6. O kernel é a parte mais fundamental de um programa, normalmente um sistema operacional, que reside na memória o tempo todo e fornece os serviços básicos. É a parte do sistema operacional que está mais próxima da máquina e pode ativar o hardware diretamente ou fazer interface com outra camada de software que aciona o hardware
  7. On The Edge: The Spectacular Rise and Fall of Commodore , página 202.
  8. Commodore 128 Programmers Reference Guide , Commodore Business Machines, Inc., 1986, p. 382

Veja também

  • GEOS , sistema operacional gráfico para o Commodore 64 e 128.

Links externos