Concurso BASIC Apascalado 2022
(ZX Spectrum)






Introdução

Ganha um ZX-UNO (clone do ZX Spectrum) com apenas algumas linhas de programa BASIC!

O blog Planeta Sinclair e o arquivo Arca Lusitana apresentam: Concurso BASIC Apascalado 2022.

Se prestaste atenção ao lançamento do ZX Spectrum Next em 2017, talvez saibas que o NextBASIC permite programar sem GOTOs com os novos comandos:

Ora, nem todos podem ter um ZX Spectrum Next...
Mas todos podem fingir que estão a programar no ZX Spectrum Next!

É esse o desafio deste concurso:
Programar em BASIC sem usar GOTOs!


Um pouco de história

A programação estruturada não é um disparate qualquer nem nenhuma novidade.
Actualmente quase todas as linguagens são estruturadas (excepto as linguagens Assembly e pouco mais). Isso está tão estabelecido que os novos programadores nunca ouviram falar de linguagem estruturada...


Regulamento

Prémio
O primeiro prémio é um ZX-UNO oferecido pelo depósito Arca Lusitana. Os outros prémios serão anunciados em breve.
O ZX-UNO é um clone moderno do Spectrum (e outros).
O ZX-UNO oferecido é apenas uma placa funcional com caixa (No mínimo é necessário adicionar os seguintes periféricos: fonte de alimentação de telemóvel micro-B USB, cabo amarelo de video RCA, TV/monitor com entrada RCA (amarelo-branco-vermelho), teclado PS2 ou USB com adaptador PS2 (alguns teclados USB antigos podem não funcionar), auscultadores jack ou adaptador jack branco-vermelho e, para fazer load de programas, é necessário fonte de som externa via jack).
Prazo limite
O prazo limite é 30-Setembro-2022.
Género de programa
Podes concorrer em 2 categorias:
     Categoria A - Jogos
     Categoria B - Outros (educativos, utilitários, etc.)
Mas, não serão admitidos a concurso programas que contenham o comando GO TO (ou RUN).
Linguagem humana
O programa só pode ter 2 linguagens: português e/ou inglês (tanto no ecran como na listagem).
Envio do programa
O programa deverá ser enviado para o email: concurso@ArcaLusitana.fun
Muitos programas
Cada concorrente pode concorrer com a quantidade de programas que quiser.
Cada concorrente pode enviar o número de versões que quiser até ao limite de tempo. A última versão será a que entrará a concurso mesmo que essa tenha mais erros que as anteriores.
Velocidade
O concorrente pode pedir para o programa ser avaliado num emulador a uma velocidade superior ao normal. Velocidades permitidas: *1, *2, *3, *4, *5, *6, *7 ou *8.
Copyright
O concorrente mantém os direitos sobre o programa mas o blog Planeta Sinclair e o depósito Arca Lusitana terão o direito de colocar cópias na internet.
Se o programa tiver sistema de segurança anti-pirataria, terá que ser fornecida também uma versão desbloqueada (apenas para fins de avaliação).
Júri
O júri é constituído por (em ordem alfabética): André Leão (blog Planeta Sinclair), Zé Oliveira (site Arca Lusitana), João Ramos (museu LOAD ""), Mário Viegas (blog Planeta Sinclair), Filipe Veiga (blog Planeta Sinclair).
Os programas serão avaliados segundos os seguintes critérios:
     Categoria A - Jogos - Estética (visual), jogabilidade (teclas), capacidade de entretenimento e estruturação do programa.
     Categoria B - Outros - Utilidade e estruturação do programa.
O juri poderá alterar o prazo limite e/ou a quantidade de prémios se a quantidade e/ou a qualidade dos trabalhos o exigir.
Os membros do júri não poderão concorrer.

Requesitos do programa a concurso

Apenas BASIC
Não podes usar assembly.
Se achas que é uma desvantagem não usar assembly então lembra-te que os adversários também não podem usar assembly.
A programação tem que ser estruturada (BASIC Estruturado)
O programa não pode usar o comando GO TO (nem RUN porque RUN = CLEAR : GO TO).
O programa tem que usar subrotinas (GO SUB, RETURN) (o comando GO SUB não pode ser usado no lugar de GO TO).
Cada subrotina não pode ter mais de 100 linhas.
O comando RETURN só pode ser usado na última linha duma subrotina.
É necessário entregar 1 snapshot desbloqueado (TAP, TZX, SNA, Z80)
Quem quiser pode enviar mais ficheiros para facilitar a avaliação: listagem de texto BASIC estruturado (sem GOTOs), listagem de texto BASIC Apascalado e snapshot bloqueado (TAP, TZX, SNA, Z80).
Editor/conversor de BASIC Apascalado
É disponibilizado um editor/conversor de BASIC Apascalado no depósito Arca Lusitana.
Não é obrigatório usar este editor mas é aconselhável porque torna a programação mais fácil.

Como escrever o programa

O editor de BASIC Apascalado
Podes aceder a um editor/conversor aqui: Conversor de BASIC Apascalado.
Basta escrever ou colar o teu programa na área da esquerda.
O editor aceita um programa BASIC Estruturado ou um programa BASIC Apascalado.
Quando acabares de escrever o programa, copia o texto da área da direita para o emulador BASinC.
Se alterares o programa no BASinC e quiseres usar de novo o editor BASIC Apascalado então podes copiar o texto para a área esquerda e o editor converterá o texto de volta para BASIC Apascalado.
O emulador BASinC
Para correr o programa, selecciona o texto BASIC Estruturado (CTRL-A), copia o texto para a área de transferência (CTRL-C) e cola o texto (CTRL-V) no emulador BASinC.
Para copiar o texto do emulador BASinC para o editor BASIC Apascalado, usa Edit/Copy_Listing e cola o texto no editor de BASIC Apascalado.
No BASinC, para exportar texto BASIC para ficheiro tens que gravar com extensão BAS (clica SAVE e escolhe escreve um nome com extensão BAS).
No BASinC, para exportar um snapshop usa File/Export_Tap com extensão TAP ou SAVE com extensão SNA ou Z80.
Sintax do BASIC Estruturado
Não usar GOTOs
Cada programa é um conjunto de rotinas.
Cada rotina começa com ": REM NomeDaRotina".
Cada rotina termina com "RETURN" - não colocar RETURNs extra no corpo da rotina.
A primeira rotina deve terminar com "STOP" em vez de "RETURN".
No editor de BASIC Apascalado, as palavras reservadas devem ser escritas em maiúsculas.
Sintax do BASIC Apascalado
Não tentar usar GOTOs.
Cada programa é um conjunto de rotinas.
Cada rotina começa com "DEFPROC NomeDaRotina" e termina com "ENDPROC".
A primeira rotina deve começar com "PROGRAM NomeDoPrograma" e terminar com "END" em vez de "ENDPROC".
No editor de BASIC Apascalado, as palavras reservadas devem ser escritas em maiúsculas.
Cada palavra reservada do BASIC Apascalado deve ser escrita numa linha separada (no início).
Palavras reservadas do BASIC Apascalado
PROGRAM e END veem da linguagem Pascal.
REPEAT, UNTIL e WHILE veem de Pascal e NextBASIC do ZX Spectrum Next.
DEFPROC, ENDPROC e PROC veem do NextBASIC do ZX Spectrum Next.
IF-BEGIN-ELSEIF-ELSE-ENDIF veem de várias linguagens. Em SQL existe IF c BEGIN - END. Em Fortran existe IF c THEN - ELSE IF c2 - ELSE - END IF.
Mais informação
Estuda o programa que aparece na página do editor de BASIC Apascalado.
Estuda as conversões Apascalado-BASIC na secção seguinte.
Modifica o programa do início e escreve outro programa.
Experimenta os programas de 1987 no fim desta página.
O BASIC do Spectrum corre mais rápido no início! Coloca no início do programa as rotinas que precisam ser mais rápidas.
O editor/conversor não está a detectar todos os erros de sintaxe. Informa-nos quais os erros que não detecta.
Contacta o email concurso@ArcaLusita.fun.

Especificação da sintax

	
	

Pascal

BASIC Apascalado

BASIC estruturado
para ZX Spectrum

Nota


REPEAT 
  ...
UNTIL condição; 			
		

REPEAT variável
  ...
UNTIL condição; 			
		

FOR i = 0 TO 0.5 STEP 0
  ...
  LET i = condição
NEXT i   			
		

REPEAT	
(a variável só pode ter 1 caracter)
(cuidado: a variável não pode ser usada por outro ciclo ao mesmo tempo)		
		

WHILE condição DO 
BEGIN 
  ...
END			
		

WHILE condição DO variável
  ...
ENDWHILE 			
		

FOR i = NOT( condição ) TO 0.5 STEP 0
  ...
  LET i = NOT ( condição )
NEXT i   			
		

WHILE
(não é necessário "BEGIN")			
		

IF condição1 THEN
  BEGIN 
  ...
  END			
ELSE IF condição2 THEN
  BEGIN 
  ...
  END			
ELSE
  BEGIN 
  ...
  END			
		

IF condição1 BEGIN variable
  ...
ELSEIF condição2 
  ...
ELSE
  ...
ENDIF 			
		

LET i = condição1 : REM IF-BEGIN
FOR i = i TO 0.5 STEP -1 : REM IF-BEGIN
  ...
NEXT i : REM ENDIF
LET i = (i<0)*-1 + (i=0)*( condição2 ) : REM ELSEIF
FOR i=i TO 0.5 STEP -2 : REM ELSEIF
  ...
NEXT i : REM ENDIF
LET i = (i=0) : REM ELSE
FOR i = i TO 0.5 STEP -2 : REM ELSE
  ...
NEXT i : REM ENDIF
		

IF ... BEGIN ... END
(sometimes ':' is not enough)			
		

nome_rotina(arg)
		

LET arg1 = arg
PROC NomeDaRotina
		

LET arg1 = arg
GO SUB NomeDaRotina
		

chamada de procedimento
		

PROCEDURE nome_rotina
BEGIN
  ...
END
		

DEFPROC NomeDaRotina 
  ...
ENDPROC
		

: REM NomeDaRotina		
  ...
RETURN
		

declaração de procedimento
		

t := nome_rotina(arg)
		

LET arg1 = arg
GO SUB NomeDaRotina
LET t = resultado
		

LET arg1 = arg
GO SUB NomeDaRotina
LET t = resultado
		

chamada de função
		

FUNCTION nome_rotina (arg:REAL):REAL;
BEGIN
  ...
END;  
		

DEFPROC NomeDaRotina		
LET v = arg1
...
LET resultado = v
ENDPROC
		

: REM NomeDaRotina		
LET v = arg1
...
LET resultado = v
RETURN 
		

declaração de função
		

total_laranjas := 0
		

LET TotalLaranjas = 0
		

LET TotalLaranjas = 0
		

Notação da linguagem Java.
(Lembrar que um array tipo string e uma variável string  
não podem ter o mesmo nome - ao contrário das variáveis numéricas)
		

total_laranjas := 0
		

LET total laranjas = 0
		

LET total laranjas = 0
		

Podes usar espaços (eles são ignorados)
Aviso: o emulador BASinC remove os espaços.
(Apenas variáveis numéricas podem ter mais do que 1 caracter.)
		

Concorrentes do Concurso BASIC Apascalado 2022



Pascalated BASIC (c) 1987 by ZarSoft