Consulta rápida: erros comuns, mapa de memória, limites conhecidos e a lista resumida dos comandos.
Apêndice A — Erros comuns
- Type mismatch in expression: Você está misturando tipos incompatíveis.
- Variable 'X' not declared: Toda variável precisa de um DIM antes do primeiro uso.
- Array index out of bounds: Um índice constante passa do tamanho declarado.
- Expected 'END IF' or 'ELSE': Você abriu um IF mas esqueceu o END IF.
- FOR variable redeclared: Você tem dois FORs aninhados usando a mesma variável.
Apêndice B — Mapa de memória do MSX1
| Faixa | Uso |
|---|
$0000–$3FFF | ROM do BIOS do MSX1 (16 KB) |
$4000–$BFFF | Cartucho — sua ROM (até 32 KB) |
$C000–$C1FF | Stack e área de scratch da runtime CSX |
$C200–$E7FF | Variáveis e arrays do seu programa (~9.5 KB) |
$E800–$EFFF | Reservado para buffers (INPUT, etc) |
$F000–$FFFF | BIOS work area (não mexer) |
DICA
Cartucho > 64 KB
Com PLAYBANK ou USES GRAPHICSBANK, o CrossScript gera uma MegaROM ASCII8 de 64 KB ou mais, até 2 MB. O programa continua limitado a 32 KB; música e gráficos ficam nos bancos adicionais. Não é uma promoção automática de qualquer código grande. Veja o capítulo 17 para gráficos e o 16 para música.
Apêndice C — Limites conhecidos desta versão
| Área | Situação |
|---|
| Recursão | Não suportada: uma procedure não pode chamar a si mesma, nem direta nem indiretamente, porque parâmetros e variáveis locais ocupam endereços fixos e seriam sobrescritos. Use um laço com um array como pilha. Veja o capítulo 18. |
DIM em procedure | Compartilha a área global de variáveis. |
| V9968 | Disponível na edição gratuita. O giro geométrico da unidade de rotação ainda é parcial; uso comercial exige autorização do autor do chip. |
| Emulador interno | Não reproduz o som FM (MSX-MUSIC). Use o WebMSX para ouvir .PRO. |
| Paleta no meio do quadro | Trocas durante o desenho da tela não têm tempo exato no emulador interno. |
| Cartucho ASCII8 | Música e gráficos opt-in nos bancos adicionais; até 2 MB com programa nos primeiros 32 KB. Não segmenta o código. |
LOOP / UNTIL | Palavras reservadas; o laço ainda não existe. |
Apêndice D — Referência completa dos comandos
Todos os comandos e funções que o compilador reconhece, em ordem de assunto. Entre colchetes [ ] ficam as partes opcionais; a coluna Cap. indica onde o comando é explicado com exemplos.
Estrutura do programa
| Comando | O que faz | Cap. |
|---|
USES recurso, ... | declara os recursos usados (SCREEN n, SPRITES, TILES, SOUND, MUSIC, KEYBOARD, RANDOM, PAINT, BPRINT, BOBS, PAGES, MAPPER, SCROLL, SCROLL2, SCROLL4, PALETTE, DISK, PT3, PRO, MACHINE MSX2/MSX2+/V9968) | 2 |
MEMORY 16K | 32K | AUTO [, MAPPER] | tamanho do cartucho e uso do mapper | 26 |
MEMORY COM NAME "NOME" [NEXTOR] / MEMORY DSK ... | gera programa .COM ou disco .DSK | 31 |
CONST nome = valor | constante | 3 |
DIM var AS tipo [= valor] / DIM arr(n) AS tipo | variável ou array | 3, 5 |
VAR nome: ARRAY(n) OF tipo = (v1, v2, ...) | array com valores iniciais | 5 |
DATA n, ... / READ var, ... / RESTORE [rótulo] | tabelas de números | 5 |
PROCEDURE nome(p AS tipo, ...) BEGIN ... END | procedimento | 8 |
FUNCTION nome(p AS tipo) AS tipo BEGIN ... RETURN valor ... END | função | 8 |
ASM ... END ASM / ASM "instruções" | Z80 escrito à mão (@var = endereço da variável) | 18 |
END | termina o programa | 2 |
Tipos: BYTE, WORD, INT, BOOL (TRUE/FALSE), STRING, XPTR. As palavras TYPE, RECORD, REPEAT, UNTIL, DO e LOOP estão reservadas para versões futuras.
Decisões e repetições
| Comando | O que faz | Cap. |
|---|
IF c THEN ... ELSEIF c THEN ... ELSE ... END IF (ou ENDIF) | decisão | 6 |
FOR v = a TO b [STEP s] ... NEXT [v] / FOR v = a DOWNTO b | contagem (STEP negativo conta para trás) | 7 |
WHILE c ... WEND (ou END WHILE) | repete enquanto c for verdadeiro | 7 |
GOTO rótulo / GOSUB rótulo ... RETURN | saltos e sub-rotinas | 8 |
LET v = valor | atribuição (o LET é opcional; := também vale) | 3 |
Operadores: + - * / MOD, SHL SHR, AND OR XOR NOT, ~ (inverte bits), = <> < <= > >= (capítulo 4).
Texto, tela e tempo
| Comando | O que faz | Cap. |
|---|
SCREEN n | modo de vídeo (0, 1, 2, 3, 4, 5, 7, 8) | 10 |
SCREEN OFF / SCREEN ON | apaga e acende a imagem (desenhar com a tela apagada não aparece) | 10 |
CLS | limpa a tela | 10 |
COLOR frente [, fundo [, borda]] | cores | 10 |
LOCATE col, lin | posição do cursor | 10 |
PRINT a; b, c | escreve (; no fim mantém na mesma linha) | 2, 9 |
BPRINT col, lin, texto, cor [, fundo] | texto em modos gráficos (SCREEN 2, 4, 5) | 19 |
BPRINT SIZE n | tamanho da letra do BPRINT em SCREEN 5 (1 a 7) | 19 |
DELAY n | espera n quadros (1/60 s) | 10 |
WAIT | espera o próximo quadro | 10 |
ON VBLANK GOSUB rótulo | chama a rotina 60 vezes por segundo | 16 |
CPU R800 / CPU Z80 | troca o processador (só Turbo R) | 28 |
Gráficos em bancos do cartucho
| Comando | O que faz | Cap. |
|---|
USES GRAPHICSBANK | habilita dados gráficos em MegaROM ASCII8 | 17 |
GFXDATA nome, bytes... | declara um bloco gráfico fora dos 32 KB do programa | 17 |
GFXLOAD nome, destino [, offset, quantidade [, página64K]] | transfere bytes crus dos bancos para VRAM | 17 |
GFXCOPY nome, array [, offset, quantidade] | transfere para ARRAY OF BYTE em RAM | 17 |
Teclado, joystick e sorteio
| Comando / função | O que faz | Cap. |
|---|
STICK(p) | direção do joystick/setas (0 parado, 1 a 8 no sentido do relógio) | 11 |
STRIG(p) | botão de tiro / espaço | 11 |
KEY(tecla) | TRUE se a tecla está apertada (KEY("A"), KEY(SPACE)...) | 11 |
INPUT ["pergunta";] var | lê um número ou texto | 11 |
INPUT$(n) (ou INPUTS(n)) | espera n teclas | 9 |
RND(n) | número sorteado de 1 a n | 12 |
RANDOMIZE [semente] | embaralha o sorteio | 12 |
LEN(s) | tamanho de um texto | 9 |
Desenho (USES PAINT)
| Comando / função | O que faz | Cap. |
|---|
PSET (x, y), cor | um ponto | 13 |
POINT(x, y) | cor de um ponto | 13 |
LINE (x1,y1)-(x2,y2), cor [, B | BF] | reta, caixa ou caixa cheia | 13 |
CIRCLE (x,y), raio, cor [, CF [, cor2]] | círculo vazado, cheio ou quadriculado | 13 |
PAINT (x,y) [, cor [, borda]] | pinta área fechada | 13 |
DRAW "U D L R M C" | desenho com caneta | 13 |
GET (x1,y1)-(x2,y2), buf / PUT (x,y), buf [, PSET|OR|AND|XOR] | copia e cola pedaços da tela | 13 |
Blocos (USES TILES)
| Comando | O que faz | Cap. |
|---|
TILECREATE n, b1..b8 | desenha o bloco n (16 bytes em SCREEN 2/4 incluem as cores) | 14 |
TILE col, lin, n [, cor] | põe o bloco n na tela | 14 |
TILECOLOR grupo, frente, fundo | cores de um grupo de 8 blocos | 14 |
TILETRANSPARENT ON | OFF | cor 0 do bloco deixa ver o fundo (SCREEN 5) | 14 |
TILEMAPLOAD inicio, qtd, array | carrega vários blocos de uma vez | 14 |
TILEROLL n, dir, pontos | gira o desenho de um bloco | 14 |
TILEFX n, efeito [, p] | efeitos prontos no desenho do bloco | 14 |
BLOCKMOVE orig, trab, dir, sub | move um objeto de 2×2 blocos | 14 |
SCENERY(mapa) / SCENERYRLE(mapa) | desenha a tela inteira de um mapa | 14 |
Sprites (USES SPRITES)
| Comando / função | O que faz | Cap. |
|---|
SPRITECREATE padrao, b1..b8 | desenho de um sprite 8×8 | 15 |
SPRITE n, x, y, padrao, cor | põe o sprite na tela | 15 |
SPRITECOLOR n, cor | troca a cor | 15 |
SPRITESIZE 0 | 1 | sprites 8×8 ou 16×16 | 15 |
SPRITEMAG 0 | 1 | ampliação em dobro | 15 |
METASPRITE n, x, y, padrao, cor | bloco 32×32 com 4 sprites | 15 |
COLLISION() | TRUE se dois sprites se tocaram | 15 |
Som e música
| Comando / função | O que faz | Cap. |
|---|
SOUND canal, freq, volume [, grosso] | toca um tom | 16 |
SOUND NOTE canal, nota, volume | toca uma nota | 16 |
SOUND NOISE período, volume [, canais] / SOUND ENV período, forma / SOUND MIX tons, ruídos | ruído, envelope e mixer | 16 |
SOUND REG r, v / SOUND OFF | registrador do PSG / silêncio | 16 |
PSGREG(r) | lê um registrador do PSG | 32 |
PLAYMUSIC rótulo | endereço / PAUSEMUSIC / STOPMUSIC / TICKMUSIC | música embutida (USES MUSIC) | 16 |
PLAYPT3 end / TICKPT3 / STOPPT3 | músicas PT3 (USES PT3) | 32 |
PLAYPRO end / TICKPRO / STOPPRO / PRONOTE(c) / PROVOL(c) | músicas MSX-MUSIC (USES PRO) | 32 |
Memória e portas
| Comando / função | O que faz | Cap. |
|---|
PEEK(end) / POKE end, v | lê e grava na RAM | 17 |
VPEEK(end) / VPOKE end, v | lê e grava na memória de vídeo | 17 |
IN(porta) / OUT porta, v | portas do Z80 | 17 |
XPTR(seg, end) | endereço além dos 64 KB (USES MAPPER) | 25 |
MSX 2: bitmap, BOBs e telas prontas
| Comando | O que faz | Cap. |
|---|
PALETTE cor, r, g, b | muda uma cor da paleta (0 a 7 cada) | 19 |
BOB CREATE slot, dados, w, h / BOB CREATEBIG ... | cria um objeto animado | 20 |
BOB MOVE slot, x, y / BOB ERASE slot / BOB HFLIP slot | move, apaga, espelha | 20 |
BOB PAGEFLIP ON | OFF / BOB FLIP / BOB SYNC | duas páginas sem piscar | 20 |
PAGELOAD nome [, página] | carrega uma tela pronta (USES PAGES) | 21 |
Scroll
| Comando | O que faz | Cap. |
|---|
SCROLL dx, dy / SCROLLCONFIG x, y, w, h / SCROLLMAP w, h, mapa | janela e mapa de scroll (MSX 1) | 22 |
SCROLLTILE dx, dy [, linhas] / SCROLLTILES qtd, padrões, cores | casa a casa e ponto a ponto em SCREEN 1 | 22 |
SMOOTHROLL dir, pontos, l1, l2, modo (ou SCROLLFINE) / SMOOTHROLLMIX ... | rola faixas da tela; paralaxe | 22 |
BLOCKROLL bloco, dir, pontos | gira um objeto 2×2 | 22 |
VSCROLL y / VSCROLL ROW n / VSCROLL FINE INIT + VSCROLL FINE n | rolagem vertical | 22 |
SCROLL2 VIEWPORT x, y, w, h / HSTRIP id, pág, sx, sy, dy, h, vel / VSCROLL v / HADJUST n / TICK / STOP | scroll em SCREEN 5 | 23 |
SCROLL4 MAP mapa, w, h / HSCROLL v / VSCROLL v / HUD n / HUD REFRESH / BAND id, l1, l2, div / BANDOFF / MASK ... / FRAME / TICK / STOP | scroll em SCREEN 4 | 24 |
SCROLL4SUB() | posição fina atual do SCROLL4 | 24 |
Disco (USES DISK)
| Comando / função | O que faz | Cap. |
|---|
LOADFILE "NOME.EXT", end [, status] | carrega um arquivo na memória | 27 |
DIRFIRST "*.EXT", nome [, status] / DIRNEXT nome [, status] | lista arquivos | 27 |
DSKERR() / DSKVER() | último erro / versão do DOS | 32 |
V9968 (USES MACHINE V9968)
| Comando | O que faz | Cap. |
|---|
V9968 INIT / V9968 WAIT / V9968 DETECT var / VDPID() | liga, espera o chip, detecta | 28 |
V9968 FILL / COPY / MOVE / CLEAR / LOAD / SAVE | blocos de memória de vídeo | 28 |
V9968 PSET / POINT / LINE / BOX [, FILL] / CIRCLE | desenho pelo chip | 28 |
V9968 WINDOW / ROTATE / ROTATE ANGLE / ZOOM / ZOOM SEQ / FLIP H|V | giro, zoom e espelho | 28 |
V9968 LOGIC IMP|AND|OR|EOR|NOT|TIMP... | modo de desenho | 28 |
V9968 PALETTE i, r, g, b / PALETTE LOAD / FADE / CYCLE | paleta | 28 |
V9968 PAGE p / SHOW p / SCROLL x, y | páginas e scroll | 28 |
V9968 SPRITE MODE n / SPRITE SHEET / SPRITE PUT / SPRITE END | sprites do modo 3 | 28 |
V9968 INTERRUPT linha GOSUB rótulo / INTERRUPT OFF | interrupção por linha | 28 |
GEO3D (coprocessador 3D, junto com o V9968)
| Comando | O que faz | Cap. |
|---|
GEO3D INIT | prepara o chip e a câmera | 28 |
GEO3D MODEL vértices, nv, arestas, na | envia um modelo | 28, 29 |
GEO3D ROTATE ax, ay / GEO3D MOVE tx, ty, tz | gira e posiciona | 28 |
GEO3D COLOR c / GEO3D LOGIC IMP|AND|OR|XOR|NOT | cor e modo das linhas | 28 |
GEO3D RUN | desenha o modelo | 28 |