Biblioteca GLIB


  O Hi-Tech C original foi desenvolvido para o sistema operacional CP/M. Entretanto, o pacote do Hi-Tech C da Funet (www.msxarchive.nl) possui alguns patches desenvolvidos por Pierre Gielen (1994) contendo uma série de adaptações e correções para o MSX, dentre elas uma biblioteca que permite acessar os recursos gráficos do MSX como desenhos, sprites, modos de tela etc.
  O arquivo hitech-4.pma contém o pacote LIBG1193.PMA, no qual contém três arquivos necessários: "libg.lib", "glib.h" e "msxbios.h". Os arquivos restantes são os fontes da biblioteca em Assembly.
  Assim, deve-se copiar os arquivos para o disquete do Hi-Tech C.

  Para utilizar a bilioteca, adicione a seguinte linha ao seu programa:
#include <glib.h>

  O capítulo 9 e o capítulo 11 possuem exemplos de como utilizar as funções da biblioteca GLIB.


  As funções dessa biblioteca são:


  void boxfill (uint x1, uint y1, uint x2, uint y2, uchar color, uchar logop)

  Desenha uma caixa preenchida na tela, definida pelas coordenadas x1,y1 e x2,y2 e a cor da linha em color. As operações lógicas (logop) disponíveis são:   Funções relacionadas: boxline.


  void boxline (uint x1, uint y1, uint x2, uint y2, uchar color, uchar logop)

  Desenha uma caixa NÃO preenchida na tela, definida pelas coordenadas x1,y1 e x2,y2 e a cor da linha em color.

  Funções relacionadas: boxfill.


  uint calatr (uchar plane)

  Obtém endereço da tabela de planos do sprite, de acordo com o número do plano.

  Funções relacionadas: calpat, colorspr, inispr, putspr, sprite.


  uint calpat (uchar pat)

  Obtém o endereço da tabela de padrões do sprite, de acordo com a identificação do sprite pat.

  Funções relacionadas: calatr, colorspr, inispr, putspr, sprite.


  void circle (uint x, uint y, uint r, uchar color, int s_angle, int e_angle, uint aspect)

  Desenha um círculo de raio r nas coordenadas x,y da tela.
  A cor é definida por color, o ângulo inicial por s_angle, o ângulo final por e_angle e o achatamento por aspect.
  Os ângulos são passados através de um número inteiro, onde:
angle = angulo_rad / 0.000191748
  Assim, para fechar um círculo deve-se utilizar o valor 0 para s_angle, e 32768 para e_angle.
e_angle = ROUND(2*3,1415928 / 0.000191748) = ROUND(32767,93) = 32768
  Para o achatamento, deve-se utilizar um valor positivo para achatar o eixo y, e um valor negativo para achatar o eixo x. O valor utilizado para o círculo normal é 32768.

  Funções relacionadas: paint.


  void color (uchar fore, uchar back, uchar border)

  Define as cores do texto (fore), do fundo de tela (back) e da borda (border).
  Funções relacionadas: nenhuma.


  void colspr (uchar num, char *color)

  Altera a cor do sprite (sprites modo 2).
  Color é um vetor de 8 ou 16 caracteres, de acordo com o tamanho do sprite.

  Funções relacionadas: calatr, calpat, inispr, putspr, sprite.


  void cpym2v (char * src_address, uchar direction, uint dx, uint dy, uchar dp, uchar logop)

  Copia dados da RAM para a VRAM.
  Onde: src_address é um ponteiro para o endereço inicial da memória RAM, direction é o sentido da cópia (ver Recortando e colando áreas - COPY, do curso de Basic), dx e dy são as coordenadas de destino, logop a operação lógica aplicada (ver boxfill).
  Funções relacionadas: cpyv2m, cpyv2v.


  void cpyv2m (uint sx1, uint sy1, uint sx2, uint sy2, uchar sp, char * dest_address)

  Copia da VRAM para a RAM.
  Onde: sx e sy são as coordenadas de origem, sp a página de origem, dest_address o endereço inicial da RAM para a cópia.

  Funções relacionadas: cpym2v, cpyv2v.


  void cpyv2v (uint sx1, uint sy1, uint sx2, uint sy2, uchar sp, uint dx, uint dy, uchar dp, uchar logop)

  Copia da VRAM para a VRAM.
  Onde: sx e sy são as coordenadas de origem, dx e dy as coordenadas de destino, sp a página de origem, dp a página de destino e logop a operação lógica aplicada (ver boxfill).

  Funções relacionadas: cpym2v, cpyv2m.


  void filvrm (uint address, uint length, uchar data_byte); /* fill(address,length,databyte) */

  Preenche um bloco na memória VRAM com o valor definido por data_byte, de tamanho definido por length, começando por address.

  Funções relacionadas: nenhuma.


  uint getplt (uchar color_index)

  Retona as cores RGB de uma cor da paleta, definida por color_index.
  O retorno é um número inteiro de 2 bytes, onde a configuração R,G,B é:
  rrr0bbb 00000ggg

  Funções relacionadas: setplt.


  void ginit (void)

  Acesso a porta do VPD (0x98).

  Funções relacionadas: nenhuma.


  void glocate (uint x, uint y)

  Modifica a localização do ponteiro na tela.

  Funções relacionadas: grpprt.


  void grpprt (char , char )

  Imprime um caractere na tela gráfica.

  Funções relacionadas: glocate.


  uint gtxmax (void)

  Retona o valor máximo de x na largura da tela.

  Funções relacionadas: gtymax.


  uint gtymax (void)

  Retona o valor máximo de y na altura da tela.

  Funções relacionadas: gtxmax.


  void iniplt (void)

  Inicia a paleta de cores, após as modificações.

  Funções relacionadas: setplt.


  void inispr (uchar size)

  Define o tamanho do sprite.
  Opções:   Funções relacionadas: calatr, calpat, colspr, putspr, sprite.


  void interlace (uchar mode)

  Modifica o modo de interlace.

  Funções relacionadas: screen.


  uchar invdp (void)

  Obtém o byte correspondente ao endereço atual do VDP.

  Funções relacionadas: rdvdp, setrd, wrtvdp.


  void knjprt (uint char, char logop, char mode)

  Imprime um caractere do tipo Kanji na tela.

  Funções relacionadas: nehuma.


  void ldirmv (char * dest, uint src, uint len)

  Copia da VRAM para a RAM.

  Funções relacionadas: ldirvm.


  void ldirvm (uint dest, char * src, uint len)

  Copia da RAM para a VRAM.

  Funções relacionadas: ldirmv.


  void line (uint x1, uint y1, uint x2, uint y2, uchar color, uchar logop)

  Desenha uma linha reta entre x1,y1 e x2,y2.

  Funções relacionadas: nenhuma.


  void outvdp (uchar byte)

  Envia um byte para o endereço VDP corrente.

  Funções relacionadas: nenhuma.


  void paint (uint x, uint y, uchar color, uchar b_color)

  Pinta uma região da cor color, começando pela coordenada x,y, delimitada pela cor b_color.

  Funções relacionadas: nenhuma.


  uchar point (uint x, uint y)

  Obtém a cor nas coordenadas x,y.

  Funções relacionadas: pset.


  void pset (uint x, uint y, uchar color, uchar logop)

  Desenha um ponto nas coordenadas x,y.

  Funções relacionadas: point


  void putspr (uchar level, uint x, uint y, uchar color, uchar pat)

  Desenha o sprite definido na tela.

  Funções relacionadas: calatr, calpat, colspr, inispr, putspr, sprite.


  uchar rdvsts (uchar register)

  Lê o status do registrador do VDP.

  Funções relacionadas: rdvdp.


  uchar rdvdp (uchar register)

  Lê registro do VDP.

  Funções relacionadas: rdvsts, setrd.


  void rstplt(void)

  Reseta a paleta para as cores do MSX 1.

  Funções relacionadas: getplt, setplt.


  void screen (uchar scr)

  Altera o modo de tela do MSX.

  Funções relacionadas: cls.


  void setpg(uchar display, uchar active)

  Altera a página das screens 5-12.

  Funções relacionadas: screen.


  void setplt (uchar color_index, uint RGBdata)

  Modifica a cor da paleta apontada por color_index.
  Em getplt, o formato RGBdata é descrito.

  Funções relacionadas: getplt.


  void setrd (uint address)

  Define o endereço para ser lido pelo VDP.

  Funções relacionadas: invdp, rdvdp.


  void setwrt (uint address)

  Ajusta um endereço para ser gravado pelo VDP.

  Funções relacionadas: wrtvdp.


  void sprite (uchar pat, char *pattern)

  Define o padrão de um sprite, com id igual ao pat e o padrão como um vetor de 8 ou 32 bytes.

  Funções relacionadas: colorspr, inispr, putspr, sprite.


  void totext (void)

  Muda a tela para o modo texto.

  Funções relacionadas: screen.


  uchar vpeek(uint address)

  Obtém um byte da VRAM.

  Funções relacionadas: vpoke.


  void vpoke(uint address, uchar byte)

  Escreve um byte na VRAM.

  Funções relacionadas: vpeek.


  uint vramsize(void)

  Obtém o tamanho da VRAM.
  Pode ser: 16, 64 ou 128 Kb.

  Funções relacionadas: nenhuma.


  void wrtvdp(uchar register, uchar value)

  Escreve no VDP.

  Funções relacionadas: setwrt.





  Referências:

  [1]- http://msx.hansotten.com/software/msx-c/


/MARMSX/CURSOS/C