Rotinas completas da BIOS do MSX 2


Você está em: MarMSX >> Cursos >> Assembly Z80   Descrição de cada item da instrução:

  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:
  1. exibe em 16x16 pontos
  2. exibe os pontos pares
  3. 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.