v1.0.0-final
·
19 commits
to master
since this release
Primeira versão oficial do Compilador HCBasic.
A Linguagem HCBasic é uma variação moderna BASIC destinada para retrocomputação, que busca a união do baixo nível que o C/C++ permite, somado com a simplicidade de uma linguagem da família BASIC, inspirado principalmente na sua última interação da linhagem Microsoft, tendo sua estrutura e comandos originados no VisualBASIC.NET
OBS: A Documentação esta desatualizada, faltando alguns recursos novos do compilador e da biblioteca.
Requisitos mínimos dos executáveis gerados:
- IBM PC 5150 ou Compatíveis
- Intel 8088/8086 ou Compatíveis
- MS-DOS 3.0 ou Compatíveis
- 128 KiB de RAM
Novidades desde a última versão:
- Implementado Módulo Stream para facilitar chamada a rotinas da Stream
Dim s as Stream ' Declara uma variavel (Ponteiro) do tipo Stream
s = New ' Aloca espaço (Temporário na Pilha que deve ser usado apenas dentro da rotina e nas suas sub rotinas chamadas) para a variavel do tipo Stream
Try
File.Open s, "arquivo" ' Abre um arquivo ou gera um erro do tipo AccessDeniedError ou NotFoundError
Stream.Write s, "Teste" ' Grava na stream um texto
Stream.Close s ' Fecha o arquivo
Catch Error
Console.Write "Deu ruim" ' Caso um dos comandos dentro do try derem erro escreve uma mensagem
End
- Verifica automaticamente uso de variáveis locais não inicializadas, o que poderia gerar erros "misteriosos".
Dim teste as PtrByteArray
teste = 0 ' Tentativa de colocar 0 no destino do ponteiro antes de atribuir o seu destino, gerará um erro de compilação
- Implementado Manipulador de Interrupções com suporte a manipular todos os registradores disponíveis direto da linguagem HCBasic
Imports System
Module Program
Public Sub Main(args as String)
Dim intPtr as PtrWordArray
Dim handlerPtr as PtrByteArray
handlerPtr = AddressOf(Interrupcao) ' Le o endereço do manipulador de interrupção
#intPtr = 0
@intPtr = 0x99 * 4 ' Calcula o endereço na tabela de interrupções do processador intel
asm "cli" ' Impede interrupcoes enquanto grava na tabela de interrupcoes
intPtr = @handlerPtr ' Grava o Offset do Manipulador
@intPtr++
@intPtr++
intPtr = #handlerPtr ' Grava o Segment do Manipulador
asm "sti" ' Reativa as interrupções
asm "int 0x99" ' Chama as interrupções
End
' Não precisa declarar todos os argumentos, na verdade não precisa declarar nenhum se não usar, mas caso declare deve ser feito exatamente na sequencia abaixo, não podendo pular os argumentos que não utiliza e só declarar os que utiliza, por exemplo se usar apenas o AX, deve declarar ele e todos antes dele
' IMPORTANTE: Se alterar qualquer argumento, isso será passado para o respectivo registrador, tome cuidado, por exemplo alterando o SS ou SP para um valor aleatório, a pilha será perdida, e a execução com certeza ira gerar erros inesperados.
Sub Interrupcao(ss as UInt16, sp as UInt16, bp as UInt16, ax as UInt16, bx as UInt16, cx as UInt16, dx as UInt16, ds as UInt16, si as UInt16, es as UInt16, di as UInt16, ip as UInt16, cs as UInt16, flags as UInt16) Handles Interrupt
Console.WriteLine "Interrupcao numero 0x99 chamada"
End
End
Requisitos mínimos
- Montador NASM
- Windows 7 SP1 com Suporte Extendido OU Superior
- macOS HighSierra ou Superior
- Linux x86-64 OU ARM64 OU ARM32 OU MUSL64
Nos pacotes de distribuição constam as bibliotecas necessárias do DotNET 7.0 para execução.
Biblioteca incluída:
- System: Biblioteca base com suporte a arquivos e strings
Bibliotecas em desenvolvimento (NÃO USAR)
- System.Drawing (BETA): Esta biblioteca está em desenvolvimento, encontrando parcialmente desenvolvida, suportando modos monocromáticos do CGA e VGA, sem suporte a desenho de elipses ainda, e fontes apenas maiúsculas sem acento.
- Fonte Padrão embutida(ALFA): Contém apenas caracteres numéricos e letras maiúsculas, ainda não implementado acentuação
- System.Forms (ALFA): Esta no inicio de desenvolvimento, e ira mudar muito ainda, não usar