Aprendendo PHP

Categories Blog

Olá, mundo!

Hoje eu acabo de completar o curso de PHP básico do Curso em Vídeo, yay! Eu fiz as aulas em uns 2 dias e agora me sinto mais preparado pra começar alguns projetos com a linguagem.

Prova final

Eu fiz 2 vezes a prova final. A primeira vez eu tive apenas 30% de precisão, mas na segunda tentativa eu fui melhor com 90% de precisão, assim conseguindo meu certificado.

Aprendendo a programar o NES

Categories Blog

Olá, mundo!

Faz bastante tempo que venho me interessando por fazer jogos para o NES, vi um vídeo muito bom do canal Morphcat Games sobre como eles fizeram o jogo de NES deles, mas só agora realmente comecei a fazer meus programinhas pro Nintendinho. Ainda não são jogos, mas estou caminhando para isso.

Recursos que eu utilizei

Eu utilizei o curso da Pikuma, um ótimo curso, e também utilizei a wiki do NesDev, que é uma comunidade de programadores, artistas e músicos que fazem coisas pro NES. Eu tive que aprender mais sobre o assembly de 6502 e muito sobre a arquitetura do Nintendinho em si para sequer começar a desenhar coisas na tela.

Aprendendo sobre o 6507

Categories Blog

Olá, mundo!

Hoje vou tentar ensinar sobre o 6507 pois eu comprei ele e não tenho nada melhor pra fazer e principalmente pois eu estou participando da Learning Jam 2024 da Handmade Network. Eu poderia fazer esse post em inglês mas acho que prefiro na nossa língua nativa (se você for brasileiro ou de algum outro país falante da língua portuguesa).

Introdução

O 6507 é um microprocessador feito originalmente pela MOS como uma versão mais acessível (e consequentemente mais limitada) do seu popular 6502.
Sendo utilizado no Atari 2600, ele tem:

  • 28 pinos
  • Um clock interno de 1.19MHz
  • Capacidade de endereçar até 8KB de ROM

Inicialização da CPU

Essa CPU inicia procurando por um endereço de entrada nos endereços FFFC e FFFD. Isso é um pouco complicado, mas quando ele lê os 2 bytes guardados nessas posições ele pula para o endereço formado ao juntar os bytes e começa a executar. Por exemplo, se eu guardar 00 do endereço FFFC e 60 no endereço FFFD o processador irá começar a executar no endereço 6000.

Como os bytes são interpretados?

Os bytes podem ser interpretados como um de dois tipos: um opcode e um argumento de um opcode. Opcodes são instruções para a CPU representadas por 1 byte, por exemplo, o byte A9 pode ser interpretado como a instrução que carrega um valor imediato no registrador A (mais sobre registradores depois).
Quando a CPU inicializa, ela automaticamente vai ler o byte no endereço especificado como um opcode, então tendo o primeiro byte como opcode podemos escrever o programa completo apenas entrando bytes e o 6507 irá interpretar corretamente se o programa estiver correto.

Registradores

O 6507 tem 3 registradores de uso geral: A, X e Y. Registradores são como containers de bytes, não necessariamente variáveis pois eles são compartilhados por todos os programas, são mais containers temporários mesmo. O Registrador A é usado para operações complexas com a Unidade Lógica e Aritmética (ALU), que é a unidade responsável por fazer as operações logicas como comparações de valores e aritméticas como adições e subtrações complexas. Ele é o único que tem acesso direto à ALU assim, podemos considerar ele o mais importante dos 3.
O X e o Y são usados geralmente para guardar valores que complementam o funcionamento do A. Vale ressaltar que apesar de não ter acesso à ALU, eles podem ser operados com adições/subtrações e podem até ser comparados. Um exemplo de uso dos registradores X e Y como auxiliares do A é na hora de fazer um loop:

LDX #3
Loop:
STA $0,X
DEX
BNE Loop

O código acima começa iniciando X com o decimal 3, logo após disso eu decidi criar uma label, o Loop. Labels são literalmente rótulos para um endereço da memória. Ao chamar Loop o assembler irá traduzir a palavra Loop para o endereço onde ela está. Depois de declarar essa label, eu guardo o valor que está no registrador A (o valor não importa) no endereço de memória 0 + X. Depois disso eu subtraio 1 de X e volto para o endereço de memória com a label Loop se for igual a 0. Um fato interessante é que quando uma adição ou subtração ocorre em qualquer registrador, o 6507 guardara um valor chamado de Zero Flag, que diz se a última operação aritmética teve o resultado de 0 assim salvando alguns bits de espaço e tempo de processamento neste caso que queremos saber se X for 0.

O que eu aprendi?

Nessa jam, eu aprendi sobre muitas coisas, mas eu sei que não sei nem um pouco sobre esse processador! Ainda preciso aprender sobre flags, sobre a stack, sobre como a ALU funciona entre outras coisas. Eu aprendi que eu gosto de anotar de uma maneira que ensina quem estiver lendo e não somente um lembrete da pesquisa. Eu gosto de aprender e ensinar, por isso quero ser professor 🙂

Conclusão

Com essa pequena introdução ao 6507 espero ter te mostrado o funcionamento básico dele. Espero que isso tenha te inspirado a fazer suas próprias perguntas e buscar suas próprias respostas sobre essa CPU. Muito obrigado!

Lendo: Sete breves lições de física

Categories Blog

Olá, mundo!

Hoje eu comprei o livro indicado no título do post e eu estou muito fazer lendo ele. Eu li os dois primeiros capítulos e gostaria de compartilhar sobre eles.

Ciência por meio do storrytelling

Este livro (até agora) não é um livro educativo. É um livro de pop science que explica de forma simples sobre a ciência mas, principalmente, sobre a história dos cientistas citados.

Eu estou achando isso um ótimo jeito de me interessar mais sobre ciência. Não que eu não me interesso, mas sempre foi um interesse superficial e agora, conhecendo sobre os cientistas eu estou querendo me aprofundar mais!

Voltei e me desculpe!

Categories Blog

Olá, mundo!

Quanto tempo, hein? Sim, eu sou o Gabriel e agora esse é o novo endereço do meu blog 🙂
Quero dizer que eu estou arrependido do último post, eu falei coisas apenas para ofender e provar uma ideia mesmo que não fosse a ideia que eu acreditasse. Porém, eu não vou remover pois esse blog NUNCA apaga a história, mesmo que falha.