A u t o r : A u t o r : E D I S O N A N T O N I O P I R E S D E M O R A E S E D I S O N A N T O N I O P I R E S D E M O R A E S
e-mail: [email protected]
e-mail: [email protected]
2ª Edição - Abril/2004
2ª Edição - Abril/2004
Edição revisada e ampliada Edição revisada e ampliada
NOTA DO AUTOR
Finalmente, depois de cinco anos, resolvi encarar o desafio de revisar e aprimorar o MSX Top Secret. O resultado é este MSX Top Secret
II , decorrente de muito trabalho e marcado por inúmeros contratempos, mas que acabou saindo com quase o dobro de informações em relação ao primeiro.
Humildemente, pretendo que esta obra seja a maior coletânea de informações existente sobre o MSX, reconhecendo, entretanto, que ainda faltam nela muitos elementos para que o assunto possa ser esgotado. É direcionada basicamente ao desenvolvimento de software para o nosso querido MSX, mesmo para aqueles que não têm interesse em se aprofundar na linguagem de máquina e preferem programar em BASIC. Foi escrita com a mesma dedicação e carinho que ao primeiro
MSX Top Secret e, como ele, resultou de quase três anos de pesquisas,
várias delas executadas no próprio micro MSX.
Alguns termos usados no MSX Top Secret II podem causar estranheza, como colocar BIOS no masculino e não no feminino. Isso decorre do fato de que a tradução para o português leva-o ao masculino, por isso resolvi mantê-lo assim. Outros termos, como “MSXDOS1” em vez de “MSXDOS” ou “SCC simples” em vez de “SCC”, estão lá para tornar mais clara a compreensão. Uma certa redundância em alguns ca-sos visa a facilitar a consulta.
Espero, enfim, que esta obra seja do agrado de todos os que se dispuserem a lê-la. Abraços a todos.
Agradecimentos
Agradecimentos
Agradecimentos
Agradecimentos
Agradecimentos
Agradeço aos meus amigos Adriano Camargo Rodrigues da Cunha, por fornecer prontamente informações sobre o UZIX, Alex Mitsio Sato, por traduzir vários textos em japonês, Hans Otten, por traduzir vários textos do holandês para o inglês, à minha esposa, a quem chamo carinhosamente de amoi, pela paciência, compreensão e incentivo
à minha filha Lívia, que me deu novo alento para a vida,
ao meu pai e à minha mãe,
pela vida, à minha irmã, pelo companheirismo, e a todos que, de forma direta ou indireta, ajudaram na conclusão desta obra.
MSX é marca registrada da MSX Association MSDOS e PC são marcas registradas da IBM Corp MSXDOS é marca registrada da Microsoft Corp MSXDOS2 é marca registrada da ASCII Corp SCC é marca registrada da Konami Corp UNIX é marca registrada da SCO Corp
Í N D I C E
CAPÍTULO 1 - INTRODUÇÃO AO SISTEMA
1
-CAPÍTULO 2 - SLOTS E CARTUCHOS
1 2
-CAPÍTULO 3 - A MEMÓRIA ROM
1 2 3 -ARQUITETURA INTERNA ... 16 1.1 - A CPU ... 16 1.1.1 - Wait states ... 17 1.2 - O VDP ... 17 1.3 - O PSG ... 17 1.4 - A PPI ... 17 SLOTS ... 18 1.1 - Chamadas inter-slot ... 20 1.2 - Área de trabalho ... 21
DESENVOLVENDO SOFTWARE EM CARTUCHO ... 23
2.1 - Alocando área de trabalho para cartuchos ... 27
BIOS ... 29
1.1 - Rotinas RST ... 30
1.2 - Rotinas para inicialização de I/O ... 33
1.3 - Rotinas para acesso ao VDP... 33
1.4 - Rotinas para acesso ao PSG ... 39
1.5 - Rotinas para acesso ao teclado, tela e impressora ... 39
1.6 - Rotinas de acesso I/O para games ... 42
1.7 - Rotinas para o cassete ... 44
1.8 - Rotinas para a fila do PSG ... 44
1.9 - Rotinas para as telas gráficas do MSX1 ... 44
1.10 - Miscelânea ... 47
1.11 - Rotinas para acesso ao sistema de disco ... 49
1.12 - Rotinas adicionadas para o MSX2 ... 50
1.13 - Rotinas adicionadas para o MSX2+ ... 51
1.14 - Rotinas adicionadas para o MSX turbo R ... 52
1.15 - Rotinas da Sub-ROM ... 53
1.16 - Rotinas de tranferência de dados (Bit Block Transfer) ... 60
O MATH-PACK (PACOTE MATEMÁTICO) ... 63
2.1 - Área de trabalho ... 65
2.2 - Funções matemáticas em ponto flutuante ... 66
2.3 - Operações com números inteiros ... 66
2.4 - Outras funções ... 66
2.5 - Conversão de tipo ... 67
2.6 - Movimento ... 67
2.7 - Comparações ... 68
2.8 - Outras operações de ponto flutuante e I/O ... 68
O INTERPRETADOR BASIC ... 69
3.1 - Os tokens ... 69
3.2 - Estrutura das linhas de progama ... 70
3.3 - Armazenamento de números ... 71
3.4 - A área de variáveis do interpretador ... 72
CAPÍTULO 4 - A MEMÓRIA RAM
1 2 3-CAPÍTULO 5 - O VÍDEO E O VDP
1 2-3.6 - Chamando comandos do interpretador ... 76
3.7 - Rotinas do interpretador ... 81
EXPANSÕES DE MEMÓRIA ... 83
1.1 - Memória Mapeada ... 83
1.2 - Megaram ... 85
1.3 - Megaram x Memória Mapeada ... 86
MAPEAMENTO DA RAM ... 86
2.1 - O FCB (File Control Block) ... 87
A ÁREA DE TRABALHO ... 88
3.1 - Subrotinas inter-slot ... 89
3.2 - Função USR e modos texto ... 89
3.3 - Valores para os modos de tela (Screens 0 a 3) ... 90
3.4 - Outros valores para a tela ... 92
3.5 - Área dos registradores do VDP ... 92
3.6 - Miscelânea ... 93
3.7 - Área usada pelo comando PLAY ... 94
3.8 - Área para o teclado ... 94
3.9 - Área usada pelo cassete ... 95
3.10 - Área usada pelo comando CIRCLE ... 95
3.11 - Área usada pelo interpretador ... 95
3.12 - Área para as funções do usuário ... 101
3.13 - Área para o Math-Pack ... 102
3.14 - Área de dados do interpretador ... 103
3.15 - Área de dados para o comando CIRCLE ... 105
3.16 - Área usada pelo comando PAINT ... 107
3.17 - Área usada pelo comando PLAY ... 107
3.18 - Área adicionada para o MSX2 e MSX2+ ... 108
3.19 - Área usada pela RS232C ... 110
3.20 - Área usada pelo sistema de disco ... 112
3.21 - Área usada pelo comando PLAY ... 112
3.22 - Área de dados gerais ... 113
3.23 - Área de dados para os slots e páginas ... 118
3.24 - Os hooks ... 119
3.25 - Área usada para o VDP V9938 ... 129
3.26 - Slot da Main-ROM ... 131
3.27 - Área usada para o VDP V9958 ... 131
3.28 - Registrador de slot secundário ... 131
CONFIGURAÇÕES DO MSX-VIDEO ... 132
1.1 - Descrição dos registradores ... 133
1.2 - A VRAM ... 135
1.3 - A ADVRAM ... 135
1.4 - Portas de acesso ao VDP ... 136
ACESSO À VRAM E AO VDP ... 137
2.1 - Acesso aos registradores de controle ... 137
2.2 - Acesso aos registradores de paleta ... 138
2.3 - Lendo os registradores de status ... 139
3
4 5
6
-MODOS DE TELA DOS VDP´S TMS9918, V9938 e V9958 ... 141
3.1 - Modo texto 1 ... 142 3.2 - Modo texto 2 ... 143 3.3 - Modo multicor ... 146 3.4 - Modo gráfico 1 ... 148 3.5 - Modos gráficos 2 e 3 ... 150 3.6 - Modo gráfico 4 ... 153 3.7 - Modo gráfico 5 ... 154 3.8 - Modo gráfico 6 ... 156 3.9 - Modo gráfico 7 ... 158 3.10 - Modo gráfico 8 ... 160 3.11 - Modo gráfico 9 ... 163
3.12 - Variáveis de sistema dos modos de tela ... 165
SPRITES ... 165
4.1 - Sprites modo 1 ... 166
4.2 - Sprites modo 2 ... 169
COMANDOS DO VDP ... 171
5.1 - Descrição dos comandos do VDP ... 172
5.2 - Operações lógicas ... 173
5.3 - Especificação de áreas ... 173
5.4 - Usando os comandos do VDP ... 174
5.5 - Tornando os comandos mais rápidos ... 193
MISCELÂNEA DE FUNÇÕES DO VDP ... 194
6.1 - Ajuste de localização de tela ... 194
6.2 - Número de pontos na direção vertical ... 194
6.3 - Freqüência de interrupção (PAL/NTSC) ... 195
6.4 - Troca das páginas de vídeo ... 195
6.5 - Troca automática de tela ... 196
6.6 - Modo entrelaçado ... 196
6.7 - Scroll vertical ... 197
6.8 - Scroll horizontal (V9958 somente) ... 197
6.9 - Código de cor 0 ... 197
6.10 - Interrupção por varredura de linha ... 198
6.11 - Liga/desliga a tela ... 198
6.12 - Modos de sincronização ... 198
6.13 - Digitalização ... 199
6.14 - O registrador de informação e controle ... 199
6.15 - O registrador de modo #2 ... 199
6.16 - O registrador de modo #4 ... 200
5.4.1 - HMMC (Transferência rápida - (CPU → VRAM) .... 175
5.4.2 - YMMM (Tranferência rápida - VRAM na direção Y) ... 177
5.4.3 - HMMM (Transferência rápida - VRAM → VRAM) ... 179
5.4.4 - HMMV (Desenha retângulo em alta velocidade) .... 180
5.4.5 - LMMC (Transferência lógica - CPU → VRAM) ... 182
5.4.6 - LMCM (Transferência lógica - VRAM → CPU) ... 183
5.4.7 - LMMM (Transferência lógica - VRAM → VRAM) ... 185
5.4.8 - LMMV (Pintura lógica da VRAM) ... 187
5.4.9 - LINE (Desenha uma linha) ... 188
5.4.10 - SRCH (Procura código de cor) ... 190
5.4.11 - PSET (Desenha um ponto) ... 191
7 - O VDP V9990 ... 201
7.1 - Os registradores do V9990 ... 201
7.2 - Acesso ao V9990 ... 203
7.3 - Modos de tela do V9990 ... 206
7.4 - Mapa de memória dos modos B1~B6 ... 219
7.5 - Especificações de cores para os modos B1~B6 ... 220
7.6 - Especificações de cores para os modos P1~P2 ... 227
7.7 - Sprites e cursores ... 228
7.8 - Comandos do VDP V9990 ... 231
7.9 - Scroll e área de imagem ... 257
7.2.1 - Acesso aos registradores ... 203
7.2.2 - Acesso à VRAM ... 204
7.2.3 - Acesso à paleta ... 204
7.2.4 - Acesso à Kanji ROM ... 205
7.3.1 - Modo P1 ... 211 7.3.2 - Modo P2 ... 213 7.3.3 - Modo B1 ... 215 7.3.4 - Modo B2 ... 215 7.3.5 - Modo B3 ... 216 7.3.6 - Modo B4 ... 217 7.3.7 - Modo B5 ... 217 7.3.8 - Modo B6 ... 218 7.5.1 - Modo BYUV ... 220 7.5.2 - Modo BYUVP ... 222 7.5.3 - Modo BYJK ... 224 7.5.4 - Modo BYJKP ... 224 7.5.5 - Modo BD16 ... 224 7.5.6 - Modo BD8 ... 225 7.5.7 - Modo BP6 ... 226 7.5.8 - Modo BP4 ... 226 7.5.9 - Modo BP2 ... 227
7.7.1 - Sprites para os modos P1 e P2 ... 228
7.7.2 - Cursores para os modos B1~B6 ... 230
7.8.1 - Formato dos dados para os comandos ... 232
7.8.2 - Parâmetros para os comandos ... 233
7.8.3 - Executando os comandos ... 238
7.8.4 - LMMC (Transferência lógica → VRAM) ... 238
7.8.5 - LMMV (Desenha retângulo) ... 239
7.8.6 - LMCM (Transferência lógica VRAM → CPU) ... 240
7.8.7 - LMMM (Transferência lógica VRAM → VRAM) ... 242
7.8.8 - CMMC (Tranferência de caractere CPU → VRAM) ... 243
7.8.9 - CMMK (Transferência de caractere Kanji ROM → VRAM).. 245
7.8.10 - CMMM (Tranferência de caractere VRAM → VRAM) .... 246
7.8.11 - BMXL (Tranferência de bytes - linear → coordenadas) .. 248
7.8.12 - BMLX (Transferência de bytes - coordenadas → linear) .. 249
7.8.13 - BMLL (Transferência de bytes - linear → linear) .. 251
7.8.14 - LINE (Desenha linha) ... 252
7.8.15 - SRCH (Procura código de cor de um ponto) ... 253
7.8.16 - POINT (Lê código de cor de um ponto) ... 254
7.8.17 - PSET (Desenha um ponto e avança) ... 255
CAPÍTULO 6 - GERADORES DE ÁUDIO
1 2 3 4 5 -7.10 - Funções adicionais do V9990 ... 258 O PSG ... 2621.1 - Descrição dos registradores ... 263
1.2 - Acesso ao PSG ... 265
GERAÇÃO DE SONS PELA PORTA 1-bit ... 266
O OPLL (MSX-MUSIC) ... 267
3.1 - Descrição da síntese FM ... 267
3.2 - Mapa dos registradores do OPLL ... 268
3.3 - Descrição dos registradores ... 270
3.4 - O FM-BIOS ... 277 3.5 - O FM estéreo ... 279 3.6 - Acesso ao OPLL ... 279 O PCM ... 280 4.1 - Acesso ao PCM ... 281 O MSX-AUDIO ... 285
5.1 - Descrição da análise e síntese ADPCM ... 286
5.2 - Mapa dos registradores do MSX-Audio ... 287
5.3 - Descrição dos registradores ... 289
5.4 - Protocolos para acesso à memória de áudio e ADPCM ... 303
5.3 - Acesso ao MSX-Audio ... 306
7.10.1 - O registrador de modo #1 ... 259
7.10.2 - O registrador de controle ... 259
7.10.3 - Controle de interrupção ... 260
7.10.4 - Especificação da cor de fundo ... 261
7.10.5 - Ajuste de tela ... 261
1.1.1 - Especificação da freqüência ... 263
1.1.2 - Gerador de ruído branco ... 263
1.1.3 - Mixando os sons ... 264
1.1.4 - Ajuste de volume ... 264
1.1.5 - Freqüência da envoltória ... 264
1.1.6 - Forma da envoltória ... 265
3.3.1 - Registrador de teste ... 270
3.3.2 - Registradores para definição de instrumento ... 270
3.3.3 - Registradores de seleção ... 274
5.3.1 - Registrador de teste ... 289
5.3.2 - Registradores de tempo ... 289
5.3.3 - Controle de flags (sinalizadores) ... 289
5.3.4 - Controle de teclado, memória e ADPCM ... 290
5.3.5 - Endereços de acesso ... 292
5.3.6 - Acesso ao ADPCM e I/O 4 bits ... 294
5.3.7 - Acesso ao gerador FM ... 295
5.3.8 - O registrador de status ... 302
5.4.1 - Análise de som (MSX-Audio → CPU) ... 303
5.4.2 - Síntese de som (CPU → MSX-Audio) ... 303
5.4.3 - Análise de som (MSX-Audio → Memória de áudio) ... 304
5.4.4 - Síntese de som (Memória de áudio → MSX-Audio) ... 304
5.4.5 - Escrita na RAM de áudio (CPU → Memória de áudio) ... 305
6
7
8
-CAPÍTULO 7 - OS SISTEMAS DE DISCO
1 -O SCC ... 307 6.1 - O SCC “simples” ... 308 6.2 - O SCC+ ... 311 6.3 - Acesso ao SCC ... 313 O OPL4 ... 313
7.1 - Descrição dos registradores para síntese wave ... 313
7.2 - Descrição dos registradores para o gerador FM ... 325
7.3 - Acesso ao OPL4 ... 337 COVOX ... 337 8.1 - Acesso ao Covox ... 337 MSXDOS E MSXDOS2 ... 338 1.1 - O COMMAND.COM ... 339 1.2 - O MSXDOS.SYS ... 340 1.3 - O DOS Kernel ... 340
1.4 - Estrutura dos arquivos no disco ... 340
1.5 - Acesso aos arquivos em disco ... 348
1.6 - Descrição das funções do BDOS ... 352
1.7 - Área de sistema para o MSXDOS ... 379
6.1.1 - Forma de onda ... 308
6.1.2 - Ajuste da freqüência ... 309
6.1.3 - Ajuste do volume ... 310
6.1.4 - O registrador de chaves ... 310
6.1.5 - O registrador de deformação ... 310
7.1.1 - Acesso à memória de áudio ... 315
7.1.2 - Acesso ao modo wave ... 316
7.1.3 - Formato da “Wave Table Synthesis” ... 323
7.1.4 - Controle de mixagem Wave/FM ... 324
7.2.1 - Timers ... 326
7.2.2 - Acesso ao modo FM ... 327
1.4.1 - Setores ... 340
1.4.2 - Clusters (aglomerados) ... 341
1.4.3 - Divisão de dados no disco ... 341
1.4.4 - O setor de boot e o DPB ... 341
1.4.5 - O FIB (MSXDOS2) ... 342
1.4.6 - A FAT (File allocation table) ... 343
1.4.7 - O Diretório ... 346
1.5.1 - Abrindo um arquivo ... 350
1.5.2 - Fechando um arquivo ... 350
1.5.3 - Acesso seqüencial e aletório ... 350
1.5.4 - Headers (cabeçalhos) ... 351
1.5.5 - Arquivos handle (MSXDOS2) ... 352
1.6.1 - Manipulação de I/O ... 353
1.6.2 - Definição e leitura de parâmetros ... 355
1.6.3 - Leitura/escrita absoluta de setores ... 358
1.6.4 - Acesso aos arquivos usando o FCB ... 359
1.6.5 - Funções adicionadas para o MSXDOS2 ... 363
1.7.1 - Área de sistema para o MSXDOS1 ... 379
1.7.2 - Área de sistema para o MSXDOS2 ... 388
2
3
-CAPÍTULO 8 - DISPOSITIVOS ADICIONAIS
1 2 3 4
-CAPÍTULO 9 - O MSX TURBO R
1 2 3 4-1.8 - Rotinas da interface de disco ... 397
1.9 - A página zero ... 400
1.10 - O setor de boot ... 402
O UZIX ... 405
2.1 - Sistemas de arquivos no Uzix ... 406
2.2 - Permissões de acesso a arquivos ... 408
2.3 - Estrutura dos arquivos no disco ... 408
2.4 - Mapeamento de memória ... 411
2.5 - Desenvolvendo software para o Uzix ... 413
ACESSO DIRETO AO FDC ... 414 3.1 - Comandos do FDC ... 414 3.2 - O registrador de status ... 419 3.3 - Funções adicionais ... 420 3.4 - Formatação ... 420 3.5 - Endereços de acesso ao FDC ... 421 O RELÓGIO E A SRAM ... 423 1.1 - Funções do CLOCK-IC ... 423
1.2 - Estrutura e registradores do CLOCK-IC ... 423
1.3 - Acesso ao CLOCK-IC ... ... 429 INTERFACE DE IMPRESSORA ... 429 2.1 - Acesso à impressora ... 430 INTERFACE DE TECLADO ... 431 3.1 - Acesso ao teclado ... 432 3.2 - Varredura de teclado ... 433
INTERFACE UNIVERSAL DE I/O ... 434
ORGANIZAÇÃO DE SLOTS E PÁGINAS ... 436
WAIT STATES ... 437 MODOS DE OPERAÇÃO ... 437 3.1 - Comparação de velocidade... 439 3.2 - Instruções específicas do R800 ... 439 A MSX-MIDI ... 441 4.1 - Acesso à MSX-MIDI ... 441
4.2 - Descrição da portas de MIDI externa ... 442
1.8.1 - Descrição das rotinas da interface ... 397
1.10.1 - A rotina de inicialização ... 403 2.1.1 - Tipos de arquivos ... 406 2.1.2 - Estrutura Hierárquica ... 407 2.3.1 - Setor de boot ... 408 2.3.2 - Superblock ... 409 2.3.3 - Inodes ... 409 2.3.4 - Arquivos diretórios ... 411 2.3.5 - Montagem ... 411 1.2.1 - O registrador de modo (#13) ... 424 1.2.2 - O registrador de teste ... 425 1.2.3 - O registrador de Reset ... 425
1.2.4 - Acertando o relógio e o alarme ... 425
5 6 7
-APÊNDICE
1 2 3 4 5 6 7 8-GUIAS DE CONSULTA RÁPIDA
1
2 3 4
-BIBLIOGRAFIA ... 529
4.3 - Descrição das portas da MIDI interna ... 442
4.4 - MIDI interna e MIDI externa ... 444
TEMPORIZAÇÃO PARA O V9958 ... 444
A SRAM INTERNA ... 445
O MSX-ENGINE S1990 ... 446
TABELAS DE CARACTERES ... 448
1.1 - Tabela de caracteres japonesa ... 448
1.2 - Tabela de caracteres internacional ... 449
1.3 - Tabela de caracteres brasileira ... 450
TABELA DE CORES PADRÃO ... 451
CÓDIGOS DE CONTROLE ... 452
MAPA DAS PORTAS DE I/O DO Z80 ... 453
CÓDIGOS DE ERRO DO MSX-BASIC ... 457
CÓDIGOS DE ERRO DO MSXDOS1 ... 459
CÓDIGOS DE ERRO DO MSXDOS2 ... 460
7.1 - Erros de disco ... 460
7.2 - Erros das funções do MSXDOS2 ... 460
7.3 - Erros de término de programas ... 461
7.4 - Erros de comando ... 461
CÓDIGOS DE ERRO DO UZIX ... 462
MSX-BASIC ... 464 1.1 - Seqüência CALL ... 483 1.2 - Seqüência SET ... 487 1.3 - Tabelas e notações ... 488 1.4 - Formato ... 488 MSXDOS ... 490 2.1 - Formato ... 499 UZIX ... 501 3.1 - Formato ... 513 MEMÔNICOS Z80/R800 ... 515
4.1 - Grupo de carga de 8 bits ... 515
4.2 - Grupo de carga de 16 bits ... 516
4.3 - Grupo de troca ... 517
4.4 - Grupo de tranferência de bloco ... 517
4.5 - Grupo de pesquisas ... 518
4.6 - Grupo lógico e de comparação ... 518
4.7 - Grupo aritmético de 8 bits ... 520
4.8 - Grupo aritmético de 16 bits ... 522
4.9 - Grupo de deslocamento e rotação ... 522
4.10 - Grupo de teste e manipulação de bits ... 524
4.11 - Grupo de salto ... 525
4.12 - Grupo de chamada e retorno ... 526
4.13 - Grupo de entrada e saída ... 526
4.14 - Grupo de controle e miscelânea ... 527