Quem sempre curtiu Assembly mas sempre achou muito difícil, vou lançar aqui uma pequena aula das coisas básicas para quem quer ingressar nesse maravilhoso mundo dos bits.
E vou lançar alguns exemplos práticos pq é assim que se aprende, vendo exemplos simples.
Bom, divirtam-se e mandem seus comentários.
-------------------------------------------------------------------------------------------------------------
Vamos falar agora sobre as páginas de memória:
O MSX pode endereçar diretamente 64 Kbytes de memória.
Ou seja, o Z80(Processador) do MSX enxerga de uma só vez no máximo 64 Kbytes, ou 65.536 bytes.
Esses 64K são divididos em 4 páginas da seguinte forma:
Página 0: 0000h -> 3FFFh
Página 1: 4000h -> 7FFFh
Página 2: 8000h -> BFFFh
Página 3: C000h -> FFFFh
Obs: O "h" do final dos números é pra indicar que é em Hexadecimal
O MSX tem 4 SLOTS. No caso do Expert, funciona assim:
Slot 0: É onde fica a BIOS e o Interpretador Basic.
Slot 1: É o SLOT A frontal do micro.
Slot 2: É onde fica a memória RAM, ou seja, a memória principal.
Slot 3: É o SLOT B frontal do micro.
Obs: Não vamos falar de SLOTS Expandidos pois não vem ao caso para iniciantes. Só atrapalha entender isso agora. Vamos deixar isso mais pra frente.
Cada Slot pode ter até 64 Kbytes.
No caso do nosso Expert, olha como estão configurados os Slots:
Slot 0:
Página 0: É onde fica a BIOS, que são as rotinas que fazem a inicialização do computador e um monte de outras coisas.
Página 1: É onde fica o Interpretador Basic
Página 2: Nada
Página 3: Nada
Slot 1: Nada pois é o SLOT A frontal do computador e enquanto não se conecta um cartucho nele, não tem nada.
Caso você conectasse o jogo Knightmare da Konami(que tem 32 Kbytes) nesse Slot, as páginas ficariam assim:
Página 0: Nada
Página 1: Primeiros 16 Kbytes do jogo Knightmare
Página 2: Segundos 16 Kbytes do jogo Knightmare
Página 3: Nada
Slot 2:
Página 0: Memória RAM
Página 1: Memória RAM
Página 2: Memória RAM
Página 3: Memória RAM
Slot 3: Nada pois é o SLOT B frontal do computador e enquanto não se conecta um cartucho nele, não tem nada.
Caso você conectasse uma Interface de Drive DDX(que tem 16 Kbytes) nesse Slot, as páginas ficariam assim:
Página 0: Nada
Página 1: 16 Kbytes da Interface DDX
Página 2: Nada
Página 3: Nada
Como eu disse acima,O Z80 do MSX só enxerga 64K de uma vez. Se você somar todas as págnas ocupadas acima de todos os SLOTS, dá muito mais de 64K. Mas o Z80 só enxerga 64k de uma vez.
Ou seja, o Z80 enxerga 4 páginas de memória, que precisam vir de algum lugar.
Ao ligar o micro, a BIOS é acionada na página 0 do SLOT 0 e é feito uma varredura em todos os slots e subslots a procura de cartuchos inseridos ou mesmo ROM's novas instaladas na placa.
Então, se não tiver nenhum cartucho conectado ao Expert e for para o BASIC, as 4 páginas de memória que o Z80 enxerga ficam assim:
Página 0: Vem do Slot 0, que tem a BIOS
Página 1: Vem do Slot 0, que tem o Interpretador Basic
Página 2: Vem do Slot 2, que tem a RAM
Página 3: Vem do Slot 2, que tem a RAM
Já se você ligar o micro com uma interface de drive conectada, após a busca nos slots, é achada a interface de disco e o controle é desviado pras rotinas presentes dentro da interface.
Daí a configuração das páginas fica assim:
página 0 - slot 0 (Bios)
página 1 - slot 1 (Interface de Disco)
página 2 - slot 2 (Memória Ram)
página 3 - slot 2 (Memória Ram)
Mas as rotinas da Interface de Disco chamam os arquivos MSXDOS.SYS e
COMMAND.COM do disquete e daí o DOS é carregado. E o DOS após ser carregado altera a configuração das páginas pra todas elas acessarem a memória Ram, como mostrado abaixo:
página 0 - slot 2 (Memória Ram)
página 1 - slot 2 (Memória Ram)
página 2 - slot 2 (Memória Ram)
página 3 - slot 2 (Memória Ram)
o DOS Faz isso pra se ter todos os 64 Kbytes livres pra cópia por exemplo, pra se poder carregar arquivos .COM a partir do endereço 100h, etc
Mas a configuração das páginas pode-se mudar com um simples comando OUT(0A8h),xx
Por exemplo: Se eu quero fazer o processador enxergar nas paginas 0,1 o SLOT 0, e nas páginas 2,3 o SLOT 2, faço assim:
OUT(0A8h),10100000b ("b" que fizer que o valor está em binário, ou seja, 0 e 1 dígitos apenas)
Pra quem não sabe:
00 = 0
01 = 1
10 = 2
11 = 3
No comando OUT acima, temos 4 pares de números, um pra cada página.
Da esquerda pra direita, temos:
Página 3 = 10 (SLOT 2)
Página 2 = 10 (SLOT 2)
Página 1 = 00 (SLOT 0) [Interpretador Basic]
Página 0 = 00 (SLOT 0) [BIOS]
Assim, defini com esse comando que as páginas 3 e 2 vem do SLOT 2(RAM) e as páginas 1,0 vem do SLOT 0
-----------------------------------------------------------------------------------------------------------
Antes de mais nada, em anexo a esta mensagem tem um arquvio ".zip" com uma imagem de disco ".dsk" chamada "MSXTIPS.DSK" que tem tudo para se compilar um arquivo ".mac".
É uma imagem bootável e pode ser usada em qualquer MSX real ou emulador de MSX, como o BlueMSX ou o OpenMSX.
No nosso curso existem 3 arquivos Hello World, o HELLO.MAC, o HELLODOS.MAC e o HELLOADV.MAC.
Os 2 primeiros fazem a mesma coisa, mas o primeiro é pra funcionar sob o BASIC e o segundo é pra funcionar sob o MSXDOS. Ambos imprimem uma mensagem HELLO WORLD na tela. Bem simples.
O arquivo HELLOADV.MAC é uma versão do HELLO WORLD avançada onde você pode imprimir várias palavras em sequência apertando ENTER para mostrar a palavra seguinte.
Para compilar o arquivo HELLO.MAC, façam o seguinte:
A>CL80 HELLO
Vai gerar no final o arquivo HELLO.BIN, e para carregar ele no BASIC basta digitar:
BLOAD"HELLO.BIN",R
Para compilar o arquivo HELLODOS.MAC, façam o seguinte:
A>CL80DOS HELLODOS
Vai gerar no final o arquivo
HELLODOS.COM e para carregar ele MSXDOS basta digitar:
A>HELLODOS
Para compilar o arquivo HELLOADV.MAC, façam o seguinte:
A>CL80 HELLOADV
Vai gerar no final o arquivo HELLOADV.BIN, e para carregar ele no BASIC basta digitar:
BLOAD"HELLOADV.BIN",R
Obs: Quando compilarem os seus programas em Assembly, os arquivos ".MAC", no final vai aparecer:
-----------------------------------------------------------------------------------------------------------
Bom, até as próxima aula amigos.