Curso Assembly

26 views
Skip to first unread message

Marcos Daniel Blanco de Oliveira

unread,
Nov 10, 2019, 12:39:09 PM11/10/19
to msx...@googlegroups.com
Boa tarde gente,

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.

-------------------------------------------------------------------------------------------------------------

Aula de Assembly: Memória

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 

-----------------------------------------------------------------------------------------------------------

Aula de Assembly: Compilação de arquivos .MAC

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:
"Origin below loader memory, move anyway (Y or N)?"

Basta apertar ENTER e pronto.  
----------------------------------------------------------------------------------------------------------- 
 
Bom, até as próxima aula amigos.

[]s
Marcos Daniel Blanco de Oliveira
MSXTIPS.zip

Julio Marchi

unread,
Nov 10, 2019, 1:38:32 PM11/10/19
to MSXALL :: Tudo sobre o Universo MSX
Excelente iniciativa Marcos!!!

Obrigado!

Julio Marchi
Coordenador do Time MSXALL
Site Oficial: www.msxall.com
Twitter: @msxall

Osvaldo Abreu

unread,
Nov 10, 2019, 1:52:51 PM11/10/19
to msx...@googlegroups.com
Marcos,

Obrigado pela iniciativa!!

Acompanhando...

Abraços.

--
Esta mensagem foi postada na Lista MSXALL via Google Groups.
https://groups.google.com/d/forum/msxall
--
O conteúdo da Lista é publicado via Creative Commons International License.
Todas as mensagens são postadas baixo CC Attribution (4.0) International.
---
Você recebeu essa mensagem porque está inscrito no grupo "MSXALL :: Tudo sobre o Universo MSX" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para msxall+un...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/msxall/ab2c8dd6-93b9-4320-8d90-854dfa4369ca%40googlegroups.com.

William Pereira Alves

unread,
Nov 10, 2019, 4:01:48 PM11/10/19
to msx...@googlegroups.com
Parabéns pela iniciativa Marcos.
Voltemos a escovar os bits. Programar de verdade.

Grande abraço,
William Alves
--
Esta mensagem foi postada na Lista MSXALL via Google Groups.
https://groups.google.com/d/forum/msxall
--
O conteúdo da Lista é publicado via Creative Commons International License.
Todas as mensagens são postadas baixo CC Attribution (4.0) International.
---
Você recebeu essa mensagem porque está inscrito no grupo "MSXALL :: Tudo sobre o Universo MSX" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para msxall+un...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/msxall/CAE1SxCVnYxhCRt8x80%2BS6H4t%3DUunetuf2xaGtwqp6NqWbqd%3DJA%40mail.gmail.com.


--
Atenciosamente,
William Pereira Alves

microdo...@yahoo.com

unread,
Nov 11, 2019, 2:15:32 AM11/11/19
to msx...@googlegroups.com

Parabéns pela iniciativa !

Valeu !

ABS

David
--
Reply all
Reply to author
Forward
0 new messages