Aqui você vai encontrar material de apoio para linguagem de programação voltada ao MSX;
PASCAL / TURBO PASCAL
HISTÓRIA;
A linguagem Pascal foi nomeado para Blaise Pascal, um matemático francês que foi um pioneiro na história do desenvolvimento do computador.
Em 1641 , com a idade de dezoito anos, Pascal construiu a primeira máquina aritmética , sem dúvida, o primeiro computador.
Ele iria aperfeiçoar o instrumento, oito anos depois, Pascal deixou o mundo da geometria e física, e mudou seu foco para os estudos religiosos, ou como escreveu Pascal, “Para contemplar a grandeza e a miséria do homem”.
Pascal morreu em Paris em 19 de agosto, 1662 .
Niklaus Wirth completou o desenvolvimento da linguagem de programação Pascal original, em 1970.
Niklaus Wirth – Criador da linguagem Pascal
Ele baseou-a sobre o estilo do bloco estruturado da linguagem de programação Algol .
Havia dois objetivos originais para Pascal . De acordo com a Norma Pascal (ISO 7185) , esses objetivos eram;
a) disponibilizar uma linguagem adequada para o ensino de programação como uma disciplina sistemática baseada em conceitos fundamentais de forma clara e naturalmente refletida pela linguagem;
b ) para definir uma linguagem cujas implementações poderia ser confiável e eficiente em computadores então disponíveis.
Pascal foi usado nos anos setenta e oitenta para ensino da programação nos computadores.
A linguagem em si é padrão (ANSI ), mas também serviu como modelo utilizado pela Wirth ( modular ) para linguagens mais avançadas, tais como Modula e Oberon.
Borland Turbo Pascal foi produzido tanto para CP/M e MS-DOS, e a versão 3 foi um enorme sucesso e grande parte do software na década de oitenta em pequenos computadores foi escrito com Turbo Pascal.
Infelizmente não foi em Pascal padrão , foi adaptado para CP/M e ambiente MS-DOS.
A versão 3 foi a última versão para CP/M, no PC muitas versões se sucederam ( Borland Pascal 7 foi o baseado na ultima versão do DOS ) e eventualmente, evoluiu para Delphi (Windows) e Kylix (Linux) .
INTRODUÇÃO AO TURBO PASCAL;
A linguagem Turbo Pascal é uma linguagem estruturada, isto é, permite-nos uma melhor organização na maneira de trabalhar.
Como em maioria das linguagens de alto nível, o programa é traduzido para a linguagem de máquina e então executado (o Basic é interpretado).
Afinal, o que vem a ser traduzido ou interpretado? Um programa é traduzido quando um novo programa equivalente ao fonte é criado, em linguagem de máquina.
Por exemplo, o compilador pega seu programa fonte (.pas) e cria um novo programa equivalente ao seu em linguagem de máquina (.com o na memória). Já o programa interpretado, cada instrução do seu programa é interpretada com instruções em L.M. equivalentes, no momento da execução.
A versão do Pascal do MSX é perfeitamente compatível com a do PC, em termos de funcionamento e arquivo fonte .PAS, isto é, se você fizer um programa em pascal no MSX e levar o fonte para o PC e compilar, tudo bem (no Turbo Pascal 6 e 7 do PC, deve ser acrescido o comando USES CRT).
Este curso tem como finalidade familiarizar você ao Pascal do MSX, incluindo a utilização de blibliotecas criadas por Kari Lamassari, para o MSX 2.
INICIANDO;
Diferente do Basic, o Pascal e o C precisam que nós especifiquemos o tipo da variável que iremos trabalhar. Isto é importante saber para futuras aplicações.
Mas por quê fazer isto? Porque todas as variáveis armazenadas na memória são números e estes números podem representar duas coisas; código ASCII de uma letra ou um valor numérico.
Além de saber qual o tipo, é necessário saber o tamanho da variável: 1, 2, 3, 4, …, N bytes. Exemplificando, se dissermos que a variável IDADE é do tipo SHORT, indicamos que o dado é um valor numérico e de tamanho 1 byte.
Todo programa em Pascal precisa ter uma indicação de inicio e fim, no programa principal e nas decisões e loops como if, while, for.
No nosso site encontramos o Pascal para MSX. No mesmo arquivo compactado, encontramos tudo que precisamos para rodar o Turbo Pascal.
Assim que o pascal se inicia, ele irá perguntar se você quer que seja incluída as mensagens de erro, diga que sim, teclando Y.
Na tela principal do Pascal. Temos; E – Edita arquivo. C – Compila arquivo. R – Executa arquivo em uso (Work file). S – Salva arquivo. X – Executa. D – Mostra diretório. Q – Sai d Pascal. O – Opções de compilação: -> M – Compila o programa na memória. -> C – Compila no disco em formato .com. -> H – Compila em formato Chain. -> Q – Sai deste menu. |
---|
Uma outra tecla que pode ser pressionada, que não aparece no menu é a tecla W. Ela altera o arquivo ativo. Se nenhum arquivo estiver ativo, ao editarmos (E) um arquivo, ele pedira o nome do arquivo a abrir (Work file). Tecle E e escreva um nome qualquer, sem a extensão. Por sugestão, escreva prog1. Se ele já existir, será aberto, senão criará um novo. Ele criará um arquivo prog1.pas. Agora, digite o programa. A tecla CTRL+Y apaga a linha e CTRL+K e depois D sai da edição. |
---|
Ao digitar CTRL+K D, o propt reaparece. Se desejar, tecle uma das setas para voltar o menu. Agora, poderemos fazer duas coisas: primeiro, somente compilar o programa na memória. Tecle C. segundo, se quisermos rodar, podemos apertar o R, sem a necessidade do C. |
---|
Note que apenas escrevemos o programa, compilamos na memória e o rodamos.
Temos que salvar o fonte do nosso programa (o programa em Pascal). Tecle S. Este arquivo é salvo em formato texto e pode ser lido no Pascal do PC e também no Edit, Word etc.
Se quisermos criar um arquivo que rode fora do Pascal, teremos que compilá-lo em um arquivo .COM. Tecle O e em seguida C. Pressione Q e em seguida C.
Agora ele irá sempre que rodarmos ou compilarmos o programa gravar um formato .COM de nosso programa. Ah, cada linha de programa, exceto os begins e ends, são terminadas com um ponto e vírgula (;).
Entendendo o mecanismo do Pascal:
O pascal pode tanto compilar (transformar a sua fonte em Pascal para a linguagem de máquina) na memória, como direto para o disquete, no formato .COM. Entre no menu de compilação.
No esquema, compilamos na memória, para testar o programa.
Vejamos alguns exemplos;
Exemplo 1:
Basic | Pascal: |
---|---|
10 print”O MSX vive!” | begin write(‘O MSX vive!’); end. |
Exemplo 2:
Basic | Pascal: |
---|---|
10 for f=1 to 10 20 print f,”O MSX vive!” 30 next f |
var f : integer;begin for f:=1 to 10 do writeln(f,’ O MSX vive!’); end. |
As variáveis podem ser:
Nome | No Pascal | Tamanho |
Inteira | integer | 2 bytes (-32768 a 32767) |
Short | shortint | 1 byte (-128 a 127) |
Longa | longint | 4 bytes (-2147483648 a 21…) |
Byte | byte | 1 byte (0 a 255) |
Word | word | 2 bytes (0 a 65535) |
Booleana | boolean | 1 byte (0 ou 1) |
Caracter | char | 1 byte (valor ascii) |
String | string[n] | n bytes |
Exemplo 3:
Basic | Pascal: |
---|---|
10 input”Escreva MSX para sair”;n$ 20 if n$ “MSX” then 10 |
var n : string[255];begin while n ‘MSX’ do begin write(‘Escreva MSX para sair: ‘); readln(n); end; end. |
Quando o FOR, WHILE recebe apenas uma instrução, begin e end são dispensáveis.
A variável string tem que ser declarada com o numero total de caracteres. Ex: string[10] recebe texto com até 10 letras.
A instrução read lê dados do teclado. A inserção de ln ao final de write e read significa que após executar estas instruções, deve-se pular uma linha.
Os espaços entre as linhas e a tabulação são à seu critério.
Exemplo 4:
Basic | Pascal: |
---|---|
10 input”Escreva seu nome”;n$ 20 if n$=”MSX” then ?”Fala xará” else ? n$+” é o seu nome!” |
var n : string[255];begin write(‘Escreva seu nome: ‘); readln(n); if nome=’MSX’ then writeln(‘Fala xará’); else writeln(‘Seu nome é ‘,n); end. |
Todas as teclas de atalho do Pascal:
Controle do cursor | Teclas | Opcional |
Caracter à esquerda | CTRL-S | Seta à esquerda |
Caracter à direita | CTRL-D | Seta à direita |
Linha para cima | CTRL-E | Seta para cima |
Linha para baixo | CTRL-X | Seta para baixo |
Tela para cima | CTRL-R | |
Tela para baixo | CTRL-C | |
Palavra à esquerda | CTRL-A | |
Palavra à direita | CTRL-F | |
Scroll para cima | CTRL-W | |
Scroll para baixo | CTRL-Z | |
Começo da linha à esquerda | CTRL-QS | |
Fim da linha à direita | CTRL-QD | |
Topo da tela | CTRL-QE | |
Fim da tela | CTRL-QX | |
Topo do arquivo | CTRL-QR | |
Fim do arquivo | CTRL-QC | |
Começo do bloco | CTRL-QB | |
Fim do bloco | CTRL-QK | |
Posição anterior | CTRL-QP | |
Tabulação | CTRL-I | Tab |
Tabulação automática (S/N) | CTRL-QI | |
Inserção ou deleção | Teclas | Opcionais |
Inserção | CTRL-V | Ins |
Apaga caracter à esquerda | BS | |
Apaga caracter sob cursor | CTRL-G | Del |
Apaga palavra à direita | CTRL-T | |
Insere linha | CTRL-N | |
Apaga linha | CTRL-Y | |
Apaga até o fim da linha | CTRL-QY | |
Manuseio de blocos | Teclas | Opcional |
Marcar começo de bloco | CTRL-KB | |
Marcar fim de bloco | CTRL-KK | |
Marcar uma palavra | CTRL-KT | |
Mostar / esconder bloco | CTRL-KH | |
Copiar bloco marcado | CTRL-KC | |
Mover bloco marcado | CTRL-KV | |
Ler bloco de um arquivo | CTRL-KR | |
Escrever bloco num arquivo | CTRL-KW | |
Procura e troca | Teclas | Opcional |
Procurar string | CTRL-QF | |
Procurar/trocar string | CTRL-QA | |
Repetir procura/troca | CTRL-L | |
Outros comandos | Teclas | Opcional |
Inserir caracter de controle | CTRL-P, CTRL-X | |
Abandonar | CTRL-U | |
Restaurar linha | CTRL-QL | |
Terminar Edição | CTRL-KD |
Kari Lamassari criou “bibliotecas” para o uso da parte gráfica e de rotinas do MSX 2 e DOS-2. Biblioteca é um programa que contém novos comandos para uma linguagem.
São arquivos com extensão .INC e devem ser chamados dentro do programa em pascal da segunte maneira:
{$i date.inc}var hora : integer; |
begin
gettime:=hora;
End.
Note que o comando gettime não existe no pascal, mas com a biblioteca date.inc, o comando passa a ficar disponível. Repare que a inclusão da biblioteca deve ser a primeira coisa a ser feita.
DOWNLOAD TURBO PASCAL 3.0 – MSX 2.0
(*) Fonte – Marcelo’s HP – Curso de Pascal para MSX.
BASIC / MSX BASIC
“Os microcomputadores da linha MSX possuem um grande repertório de comandos, muitos deles ainda desconhecidos. Desfrute deste potencial, valendo-se das principais instruções do MSX BASIC”
Por uma questão de objetividade, dividimos os comandos em 11 grupos segundo suas funções: uso em programação, som, entrada e saída, fluxo, uso exclusivo em gráficos , uso em texto, manipulação de variáveis, manipulação de memória, tratamento de interrupções, funções matemáticas e outras.
Note que o MSX BASIC possui mais de 180 comandos e funções, sendo também a mais poderosa das linguagens para micros de 8 bits existente no mundo. A nível de mercado nacional, o MSX BASIC pode ser comparado com o BASIC do IBM-PC, pois este é uma máquina de 16 bits.
Nas tabelas abaixo, você encontrará os 11 grupos de funções e seus respectivos comandos do MSX BASIC.
Por questões de espaço, trataremos com alguma profundidade aqueles comandos que julgamos importantes em cada grupo.
Tratamento de Interrupções | |
ERROR |
INTERVAL ON/OFF/STOP
KEY <n> ON/OFF/STOP
SPRITE ON/OFF/STOP
STRIG ON/OFF/STOP
ON ERROR GOTOON INTERVAL
ON KEY GOSUB
ON SPRITE GOSUB
ON STOP GOSUB
ON STRIG GOSUB
RESUME
Outros Usos | |
BASE |
DEF USR
FRE
KEY LIST
KEY ON/OFF
KEY <n>,”<série>”LET
TIME
USR
VARPTR
VDP
Uso em Fluxo de Programas | |
FOR-NEXT |
GOSUB
GOTO
IF THEN ELSEON GOTO
RETURN
RESUME
ON GOSUB
Uso Exclusivo em Gráficos | |
CIRCLE |
CLS
COLOR
DRAW
LINE
PAINTPOINT
PRESET
PSET
PUT SPRITE
SCREEN
SPRITE$
Uso em Som | |
BEEP |
PLAYPLAY(<n>)
SOUND
Uso em Texto | |
CLS |
COLOR
CSRLN
LOCATE
PRINT USINGSCREEN
SPRITE$
SPC
TAB
WIDTH
POS
PUT SPRITE
Funções Matemáticas | |
ABS |
AND
ATN
BIN$
COS
DEF FN
EQV
EXP
FIX
HEX$
IMPINT
LOG
NOT
OCT$
OR
RND
SGN
SIN
SQR
TAN
XOR
Uso em Programação | |
AUTO |
CLEAR
CONT
DATA
DEF FN
DELETE
DIM
END
ERASE
ERR/ERLLIST
NEW
READ
REM
RENUM
RESTORE
RUN
STOP
TROFF
TRON
Uso em Entrada e Saída | ||
BLOAD |
BSAVE
CALL FORMAT
CALL SYSTEM
CLOAD
CLOSE
COPY
CSAVE
DSKF
EOF
FIELD
FILES
GET #
INKEY$
INP
INPUTINPUTS
INPUT #
KILL
LFILES
LINE INPUT
LINE INPUT #
LIST
LLIST
LOAD
LOF
LPOS
LPRINT
LSET
MAXFILES
MERGE
MOTOR ON/OFFNAME
OPEN
OUT
PAD
PDL
PRINT #
PRINT USING
RUN
RSET
SAVE
STICK
STRIG
WAIT
Manipulação de Memória | |
POKE |
VPOKEPEEK
VPEEK
Uso na Manipulação de Variáveis | |
ASC |
CDBL
CHR$
CINT
CSNG
CVD
CVI
CVS
DEFINT
DEFSNG
DEFDBL
DEFSTR
DIMINSTR
LEFT$
LEN
MID$
MKD$
MKI$
MK$
RIGHT$
SPACE$
STR$
STRING$
SWAP
VAL
Vamos ao Assunto
Uso em Texto
SCREEN: Serve para selecionar o tipo de tela. SCREEN 0 ajusta a tela de texto para 40 caracteres por 24 linhas, SCREEN 1 ajusta a tela para 32 caracteres por 24 linhas.
PRINT USING: Usado para imprimir séries de caracteres ou números em formatos específicos. Existem formatos para séries de caracteres e formatos pra números, que podem ser melhor visualizados na tabela abaixo:
Símbolo | Função | Exemplo |
“^^^^” | Retorna dados numéricos com notação em ponto flutuante | PRINT USING “#####^^^^”;234.56 |
“$$” | Adiciona $ antes de dados numéricos | PRINT USING “$$###.##”;12.35 |
“+” | Coloca o sinal + ou – conforme eles sejam positivos, negativos ou nulos | PRINT USING “+###.##”;1.25 |
“-“ | Coloca o sinal – após números negativos | PRINT USING “-“;-1.25 |
“#” | Formata o número de dígitos apresentados de um dado numérico | PRINT USING “###.##”;355.45 |
“**” | Preenche com asteriscos os espaços em branco de um dado numérico | PRINT USING “**”;1.2540 |
“$**” | Acrescenta o símbolo $ antes de dados numéricos e preenche com asteriscos os espaços não ocupados | |
“,” | Coloca uma vírgula em cada três dígitos à esquerda do ponto decimal | PRINT USING “####,##”;348.23,29 |
“!” | Retorna o primeiro caracter de uma série de caracteres | PRINT USING “!”;A$ |
“\n esp\” | Retorna n+2 caracteres de uma série de caracteres | PRINT USING “\ \”;D$ |
“&” | Retorna todos os caracteres de uma série | PRINT USING “&”;C$ |
PUT SPRITE: Este comando, que já foi explicado no artigo Comandos Gráficos no MSX (MS No 54), permite o uso de sprites em modo texto 1 (SCREEN 1).
O programa da listagem 1 faz o seguinte: a linha 10 coloca o micro em modo texto 1 com sprites de 8×8 pontos, a linha 20 define o sprite número 8 como sendo uma linha de 8 pontos (chr$(255)), a linha 30 imprime o texto “MOREIRA & BURD”, a linha 40 movimenta o sprite na horizontal da posição 0 até a posição 100, e a linha 50 finaliza o programa, permanecendo o micro em modo texto, porém, com o sprite fixo na tela (experimente pressionar ENTER várias vezes e veja o que ocorre com o sprite).
Manipulação de Memória
VPEEK: Retorna o conteúdo do byte de uma determinada posição da memória de vídeo (VRAM). Cabe lembrar que os MSX nacionais possuem 16 Kb de memória exclusiva para vídeo, a qual pode ser inclusive utilizada para armazenar dados. Este comando é semelhante ao comando PEEK.
VPOKE: Armazena um byte num dado endereço da VRAM, sendo similar ao comando POKE.
Tratamento de Interrupções
Este é um dos pontos altos do MSX BASIC, pois permite inclusive o uso de um relógio interno para interrupção por tempo.
ON INTERVAL GOSUB: Determina que a cada intervalo de tempo (especificado no comando), o fluxo do programa seja desviado para uma sub-rotina qualquer.
ON KEY GOSUB: Determina que uma sub-rotina seja executada quando uma das dez teclas de função for pressionada.
ON SPRITE GOSUB: Determina que uma sub-rotina seja executada quando ocorrer uma colisão de sprites, ou seja, quando um ponto de um sprite tocar um ponto acesso de outro sprite.
Funções Matemáticas
OCT$: Converte um número decimal em uma série de caracteres que representam o valor deste número (base 8).
HEX$: Semelhante à função anterior, retornando, porém, o seu equivalente na representação hexadecimal (base 16).
BIN$: Similar às funções anteriores, retornando, porém, o número na sua representação binária (base 2).
Uso em Programação
Os MSX trazem todos os comandos existentes nos micros mais avançados, tais como AUTO, RENUM, CLEAR, etc.. Falaremos, a seguir, dos comandos ERR e ERL que auxiliam na correção e manipulação de erros, inclusive do próprio usuário.
ERR: Retorna o código do erro
ERL: Retorna o número da linha onde ocorreu o erro.
Uso em Som
A geração de som e efeitos sonoros é mais um ponto forte do MSX, veja por quê:
PLAY: Este comando permite executar músicas segundo uma macrolinguagem musical. Nesta macrolinguagem é possível tocar oito oitavas, modificar o tempo de execução de uma música, utilizar até dez formatos de ondas sonoras diferentes, etc.
É importante lembrar que os MSX contam com três canais de som independentes (o que permite a geração de sons e músicas extremamente complexas) e que o integrado gerador de som pode executar uma tarefa musical independente da UPC, isto é, o micro pode tocar uma música enquanto a UPC executa operações diversas.
SOUND: Usado para manipular os registradores do integrado de som, também chamado de PSG (Programmable Sound Generator). Estes registradores controlam itens como volume, mixage de ruído, formas de ondas sonoras, etc..
Uso em Entrada e Saída
Neste segmento, incluímos, todos os comandos do sistema operaciona MSX DOS e os comandos do MSX BASIC. Trataremos apenas deste último, deixando os comando do MSX DOS para um próximo artigo.
LINE INPUT: Associaos caracteres digitados a uma variável alfanumerica, aceitando o delimitador vírcula (,) como um caracter qualquer (acabou a velha dor de cabeça).
STICK: Retorna um valor numérico conforme o estado do controlador de jogo (joystick) ou teclas de controle de cursor (as teclas que ficam à direita do teclado).
STRIG: Retorna o estado dos botões de disparo do controlador de jogo ou da barra de espaço. Se um destes elementos for pressionado, retorna o valor -1, em caso contrário, será retornado o valor 0
Uso em Fluxo de Programas
IF THEN ELSE: Este é o comando IF THEN, comum a todo BASIC, relacionado ainda com o ELSE (senão), que é realizado quando a comparação do IF resulta falso.
RESUME: Continua a execução de um programa BASIC após uma rotina de erro ter sido executada. Possui três modalidades: RESUME, onde o programa continua na instrução que causou o erro, RESUME NEXT, onde o programa continua na instrução imediatamente após o erro, e RESUME número da linha, onde o programa continua na linha de número indicado.
Uso na Manipulação de Variáveis
INSTR: Busca a primeira ocorrência de um ou mais caracteres dentro de outra série de caracteres, imprimindo os caracteres iniciais desta ocorrência.
SWAP: Troca o conteúdo de duas variáveis entre sí.
Outros Comandos
TIME: É uma variável reservada do sistema. Esta variável conta o tempo, sendo automaticamente incrementada a cada 1/60 segundo.
VARPTR: Descobre o endereço na memória do MSX em que uma determinada variável ou matriz em BASIC está. Uma vez determinado este endereço, você pode passá-lo para um programa em linguagem de máquina (por exemplo) que poderá ler o conteúdo da variável ou elemento da matriz. Este comando é muito útil para programadores experientes que trabalham com linguagem de máquina.
Manipulando Arquivos em Cassete
Nosso propósito, neste final, é fazer um breve relato dos comandos disponíveis para a manipulação de arquivos em fita cassete. Em seguida, daremos um exemplo simples de um programa para demonstrar alguns dos comandos.
BSAVE e BLOAD: Armazena e lê da fita um arquivo binário. Este arquivo pode conter dados de memória, uma tela gráfica, programas em linguagem de máquina, etc..
BLOAD”TESTE”:Carrega o arquivo TESTE na memória.
CSAVE e CLOAD: Armazena e lê arquivos BASIC exclusivamente em fita.
CSAVE “TESTE”
OPEN e CLOSE: Acessam um dispositivo como um arquivo de entrada ou saída. O dispositivo pode ser: gravador, impressora, tela de texto, etc. CLOSE fecha o dispositivo.
OPEN “CAS:” FOR OUTPUT AS #3, abre o gravador cassete como arquivo de saída com número de referência 3. Para se escrever um dado no gravador, usa-se, por exemplo, PRINT #3,”Testando…”
OPEN “CAS:” FOR INPUT AS #2, abre o gravador cassete como arquivo de entrada com número de referência 2. Para se ler do gravador, usa-se, por exemplo, INPUT #2,L$
Nossa observação final sobre este curso é de que ele representa apenas uma pequena amostra do MSX BASIC, pois seria impossível descrever todos os comandos em um único artigo.
Um aspecto observado por nós foi o de que em nenhum livro ou manual constam todos os comandos do MSX BASIC, fato este que só conseguimos ter acesso a todos os comandos através de uma guia de referência completo do MSX, que está disponível na internet e na época foi escrita pela MacGraw-Hill do Brasil.
Terminamos com uma observação pessoal: dentro do mercado de micros de 8 bits, o MSX é, sem dúvida, o melhor computador que já utilizamos, quer seja pelas facilidades que apresenta em programação, quer pela total padronização de seus periféricos.
Fonte: Cybernostra.com