Rotinas completas da BIOS do MSX 2
Você está em: MarMSX >> Cursos >> Assembly Z80
Descrição de cada item da instrução:
- Ponteiro - endereço que deverá ser chamado pelo CALL, padronizado em todos os MSXs.
- Entrada - registradores que devem ser modificados de modo a passarem parâmetros de entrada para a sub-rotina.
- Saída - registradores que armazenam informações de saída da sub-rotina (retorno da função).
- Modifica - registradores modificados durante a execução da sub-rotina.
Rotinas da ROM
SUBROM (015CH)
Ponteiro: 015CH
Entrada: IX=Endereço chamado (IX vai para a pilha)
Saída: Depende da rotina chamada
Modifica: -
Executa chamada inter-slot para a SUB-ROM.
EXTROM (015FH)
Ponteiro: 015FH
Entrada: IX=Endereço chamado
Saída: Depende da rotina chamada
Modifica: -
Executa chamada inter-slot para a SUB-ROM.
EOL (0168H)
Ponteiro: 0168H
Entradas: H=Coordenada X do cursor
L=Coordenada Y do cursor
Saída: Nada
Modifica: Todos
Apaga até o final da linha.
BIGFIL (016BH)
Ponteiro: 016BH
Entrada: A=Byte de dado, BC=Comprimento, HL=Endereço VRAM
Saída: Nada
Modifica: AF, BC, EI
O mesmo que FILVRM. A diferença é o seguinte: no FILVRM é testado se o modo de tela é de 0 a 3. Se for, trata o VDP como se tivesse apenas 16 Kb de VRAM. No BIGFIL, o teste de tela não é realizado e as ações são feitas de acordo com os parâmetros passados.
NSETRD (016EH)
Ponteiro: 016EH
Entradas: HL=Endereço VRAM
Saída: Nada
Modifica: AF
Ajusta a VRAM para ser lida a partir de um endereço.
NSTWRT (0171H)
Ponteiro: 0171H
Entradas: HL=Endereço VRAM
Saída: Nada
Modifica: AF
Ajusta a VRAM para ser escrita a partir de um endereço.
NRDVRM (0174H)
Ponteiro: 0174H
Entradas: HL=Endereço VRAM
Saída: A=Valor lido
Modifica: F
Lê o conteúdo da VRAM.
NWRVRM (0177H)
Ponteiro: 0177H
Entradas: HL=Endereço VRAM, A=Dado
Saída: Nada
Modifica: AF
Lê o conteúdo da VRAM.
Rotinas da SUB-ROM
A SUB-ROM do MSX 2 se localiza em outro sub-slot diferente da BIOS. Assim, a rotina "EXTROM" da BIOS deverá ser utilizada, de forma a realizar uma chamada inter-slot e executar a rotina da SUB-ROM. O registrador IX contém o endereço da rotina da SUB-ROM a ser executada.
LD IX, rotina
CALL EXTROM
Entretanto, se for necessário o uso do registrador IX por parte do seu programa, salve o conteúdo de IX e utilize a rotina SUBROM.
PUSH IX
LD IX, rotina
JP SUBROM
GRPRT (0089H)
Ponteiro: 0089H (SUB-ROM)
Entradas: A=Código do caractere
Saída: Nada
Modifica: Nada
Escreve um caractere em uma tela gráfica (screens 5 a 8).
NVBXLN (00C9H)
Ponteiro: 00C9H (SUB-ROM)
Entradas: BC=Coordenada X inicial
DE=Coordenada Y inicial
GXPOS(FCB3H)=Coordenada X final
GYPOS(FCB5H)=Coordenada Y final
ATRBYT(F3F3H)=Cor
LOGOPR(FB02H)=Operação lógica
Saída: Nada
Modifica: Todos
Desenha um retângulo.
Obs: os valores das variáveis GXPOS, GYPOS, ATRBYT e LOGOPR são endereços de memória RAM. No artigo Rotinas da BIOS e SUB-ROM do MSX 2 desse curso, há um programa-exemplo de como desenhar um retângulo.
NVBXFL (00CDH)
Ponteiro: 00CDH (SUB-ROM)
Entradas: BC=Coordenada X inicial
DE=Coordenada Y inicial
GXPOS(FCB3H)=Coordenada X final
GYPOS(FCB5H)=Coordenada Y final
ATRBYT(F3F3H)=Cor
LOGOPR(FB02H)=Operação lógica
Saída: Nada
Modifica: Todos
Desenha um retângulo preenchido.
Obs: os valores das variáveis GXPOS, GYPOS, ATRBYT e LOGOPR são endereços de memória RAM.
CHGMOD (00D1H)
Ponteiro: 00D1H (SUB-ROM)
Entradas: A=Modo de tela (0 a 8)
Saída: Nada
Modifica: Todos
Muda o modo de tela (screen).
INITXT (00D5H) / SETTXT (00E5H)
Ponteiro: 00D5H ou 00E5H (SUB-ROM)
Entradas: TXTNAM(F3B3H)=Endereço da tabela de nomes
TXTCGP(F3B7H)=Endereço da tabela de padrões
LINL40(F3AEH)=Comprimento da linha
Saída: Nada
Modifica: Todos
O equivalente a screen 0, width 40.
INIT32 (00D9H) / SETT32 (00E9H)
Ponteiro: 00D9H ou 00E9H (SUB-ROM)
Entradas: T32NAM(F3BDH)=Endereço da tabela de nomes
T32COL(F3BFH)=Endereço da tabela de cores
T32CGP(F3C1H)=Endereço da tabela de padrões
T32ATR(F3C3H)=Endereço da tabela de atributos do sprite
T32PAT(F3C5H)=Endereço da tabela de padrões do sprite
Saída: Nada
Modifica: Todos
O equivalente a screen 1.
INIGRP (00DDH) / SETGRP (00EDH)
Ponteiro: 00DDH ou 00EDH (SUB-ROM)
Entradas: GRPNAM(F3C7H)=Endereço da tabela de nomes
GRPCOL(F3C9H)=Endereço da tabela de cores
GRPCGP(F3CBH)=Endereço da tabela de padrões
GRPATR(F3CDH)=Endereço da tabela de atributos do sprite
GRPPAT(F3CFH)=Endereço da tabela de padrões do sprite
Saída: Nada
Modifica: Todos
O equivalente a screen 2.
INIMLT (00E1H) / SETMLT (00F1H)
Ponteiro: 00E1H ou 00F1H (SUB-ROM)
Entradas: MLTNAM(F3D1H)=Endereço da tabela de nomes
MLTCOL(F3D3H)=Endereço da tabela de cores
MLTCGP(F3D5H)=Endereço da tabela de padrões
MLTATR(F3D7H)=Endereço da tabela de atributos do sprite
MLTPAT(F3D9H)=Endereço da tabela de padrões do sprite
Saída: Nada
Modifica: Todos
O equivalente a screen 3.
LRSPR (00F5H)
Ponteiro: 00F5H (SUB-ROM)
Entrada: SCRMOD(FCAFH) para o modo de tela
Saída: Nada
Modifica: Todos
Inicia todos os sprites: apaga todos os padrões de sprites, zera os números de sprites, ajusta a cor dos sprites para a cor de texto e a localização vertical para 217.
CALPAT (00F9H)
Ponteiro: 00F9H (SUB-ROM)
Entrada: A=Número do sprite
Saída: HL=Endereço
Modifica: AF, DE, HL
Retorna o endereço da tabela de padrões do sprite.
CALATR (00FDH)
Ponteiro: 00FDH (SUB-ROM)
Entrada: A=Número do sprite
Saída: HL=Endereço
Modifica: AF, DE, HL
Retorna o endereço da tabela de atributos do sprite.
GSPSIZ (0101H)
Ponteiro: 0101H (SUB-ROM)
Entrada: Nada
Saída: A=Tamanho do sprite
Flag CY=Vale 1 quando sprites 16x16
Modifica: AF
Retorna o tamanho do sprite corrente.
GETPAT (0105H)
Ponteiro: 0105H (SUB-ROM)
Entrada: A=Código do caractere
Saída: PATWRK(FC40H)=Padrão do caractere
Modifica: Todos
Retorna o padrão do caractere.
WRTVRM (0109H)
Ponteiro: 0109H (SUB-ROM)
Entrada: HL=Endereço da VRAM (0 a FFFFH)
A=Dado
Saída: Nada
Modifica: AF
Escreve um dado na VRAM.
RDVRM (010DH)
Ponteiro: 010DH (SUB-ROM)
Entrada: HL=Endereço da VRAM (0 a FFFFH)
Saída: A=Dado lido
Modifica: AF
Escreve um dado na VRAM.
CHGCLR (0111H)
Ponteiro: 0111H (SUB-ROM)
Entrada: A=Modo
FORCLR(F3E9H)=Cor de frente (texto)
BAKCLR(F3EAH)=Cor de fundo
BDRCLR(F3EBH)=Cor da borda
Saída: Nada
Modifica: Todos
Muda a cor da tela.
CLSSUB (0115H)
Ponteiro: 0115H (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: Todos
Apaga a tela.
DSPFNK (011DH)
Ponteiro: 011DH (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: Todos
Mostra as teclas de função (key on).
WRTVDP (012DH)
Ponteiro: 012DH (SUB-ROM)
Entradas: C=Número do registro
B=Dado
Saída: Nada
Modifica: AF,BC
Escreve um dado no registro do VDP.
VDPSTA (0131H)
Ponteiro: 0131H (SUB-ROM)
Entradas: A=Número do registro (0 a 9)
Saída: A=Dado
Modifica: F
Lê um registro do VDP.
SETPAG (013DH)
Ponteiro: 013DH (SUB-ROM)
Entradas: DPPAGE(FAF5H)= página exibida
ACPAGE(FAF6H)= página ativa
Saída: Nada
Modifica: AF
Troca a página.
INIPLT (0141H)
Ponteiro: 0141H (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: AF, BC, DE
Inicia a paleta: a paleta é salva na VRAM.
RSTPLT (0145H)
Ponteiro: 0145H (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: AF, BC, DE
Recupera a paleta da VRAM.
GETPLT (0149H)
Ponteiro: 0149H (SUB-ROM)
Entrada: D=Índice da paleta (0 a 15)
Saída: B=Bits para vermelho (R) e azul (B): RRRRBBBB
C=Bits para verde (G): 0000GGGG
Modifica: AF, DE
Obtém o código de cores da paleta de cores para um determinado índice.
SETPLT (014DH)
Ponteiro: 014DH (SUB-ROM)
Entradas: D=Índice da paleta (0 a 15)
B=Bits para vermelho (R) e azul (B): RRRRBBBB
C=Bits para verde (G): 0000GGGG
Saída: Nada
Modifica: AF
Ajusta o código de cores da paleta de cores para um determinado índice.
BEEP (017DH)
Ponteiro: 017DH (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: Todos
Gera um BEEP.
PROMPT (0181H)
Ponteiro: 0181H (SUB-ROM)
Entrada: Nada
Saída: Nada
Modifica: Todos
Mostra o prompt.
NEWPAD (01ADH)
Ponteiro: 01ADH (SUB-ROM)
Entrada: A=Especifica uma função (valores retornados em parêntesis):
8 ... verifica light pen (valido em 0FFH)
9 ... retorna a coordenada X
10 ... retorna a coordenada Y
11 ... retorna o status de alteração da light pen
(0FFH, quando pressionada)
12 ... verifica se mouse está na porta 1 (válido se 0FFH)
13 ... retorna o offset na direção X
14 ... retorna o offset na direção Y
15 ... sempre 0
16 ... verifica se mouse está na porta 2 (válido se 0FFH)
17 ... retorna o offset na direção X
18 ... retorna o offset na direção Y
19 ... sempre 0
Saída: A=Valor retornado
Modifica: Todos
Lê o status do mouse ou light pen.
CHGMDP (01B5H)
Ponteiro: 01B5H (SUB-ROM)
Entrada: A=Modo de tela (0 a 8)
Saída: Nada
Modifica: Todos
Altera o modo de tela. Aqui, a paleta é iniciada.
KNJPRT (01BDH)
Ponteiro: 01BDH (SUB-ROM)
Entrada: BC=JIS kanji code
A=Modo de exibição do kanji
Saída: Nada
Modifica: Todos
Envia um caractere kanji para os modos gráficos (5 a 8).
Obs: o modo de exibição do kanji é semelhante ao comando em Basic PUT KANJI:
- exibe em 16x16 pontos
- exibe os pontos pares
- exibe os pontos ímpares
As funções REDCLK (01F5H) e WRTCLK (01F9H) estão explicadas no artigo Rotinas da BIOS e SUB-ROM do MSX 2.
Referências:
1- MSX2 Technical Handbook, ASCII Corporation, 1987.