Excelente vídeo! eu sempre falo que para se tornar um verdadeiro programador é necessário ter ao menos a noção de como os dados são computados em baixo nível, pois essas abstrações das linguagens de alto nível nos colocam um mau costume de não saber o que está ocorrendo, pois quando digitamos printf(); a máquina não entende o que isso significa e por trás dessa mesma função há diversas outras instruções para chegar no resultado de imprimir na tela que por sua vez é um código em assembly e que por sua vez é um mnemônico para o binário, o Fábio Akita salvo engano disse que cada arquivo é apenas um monte de binário e que a informação é interpretada conforme olhamos para ela, se olharmos para aquele dado como texto vemos apenas linguagem de máquina no editor, se olharmos como imagem pode muito bem ser um .png, e isso fica muito claro no exemplo da rom, que ao abrirmos com um editor hexa é um amontoado de bytes, mas em um editor de sprites podemos encontrar imagens amontoadas. Mas em fim, aula preciosa para quem quer se aprofundar na arquitetura de computadores, também muito importante para os romhackers que traduzem ou editam jogos, gosto muito de manipular jogos antigos, espero um dia ser capaz de compreender assembly para arquiteturas como mips, 6502, entre outros usados por consoles antigos.
@@faloaverdaderasga8773 Se eu até hoje nunca fui então continuarei sem ser, mas se tu tá interessado deve ser porque tá querendo uma leitada quente no teu rabo né kkkkkkkkkk
me encaixo na categ de curioso. programo, mas n tive a curiosidade p programar nesse nivel rs excelente video hein. n sabia da questao do mega drive e do snes comparado c os computadores tradicionais. foi bem esclarecedor td. c ref a ROM hacking tb. mandou bem demais. n preciso nem dizer q vou compartilhar, pq conteudos como os seus, o de Filipe Deschamps merecem ser exaltados. parabens. vlw
4 ปีที่แล้ว +2
Obrigado Rogerio. Agradeço pela força. Abraço.....
Ótimo conteúdo. Só pra pontuar, vc pode reproduzir esse conceito de arquivo binário "rom" em linguagens de programação mais alto nivel como as do .NET e Java, com as classes de Stream de ambos os casos. Tudo que voce precisa fazer é alocar um bloco X de bytes, daí dentro dele são criados N blocos menores. Estamos falando aqui no fim das contas de um grande Array onde sempre precisamos saber a posição inicial e final de um bloco pra ter acesso ao dado Se uma gravação for feita numa posição errada, pode facilmente corromper TODO o bloco raíz fazendo as leituras ficarem erradas e inutilizando a "imagem" por completa
Que conteúdo bom!!! eu trabalho como programador de máquinas CNC, sempre tive curiosidade como funcionava a programação desses jogos antigos e esse video passou muita coisa boa de forma esclarecida!!! vou acompanhar mais esse canal abraços!!!
SDS de quando eu estava estudando o 6502 do NES, assembly é bem legal, pena q na época eu não tinha ninguém interessado no assunto pra eu trocar ideia, cheguei a criar algumas coisas, mas só demos mesmo. Legal seria arrumar uns 2 ou 3 q tivessem interesse pra fazer junto alguma coisa
ปีที่แล้ว
É difícil achar viu. Tenta criar um projeto no Github e tentar divulgar pra ver se alguém se interesse em mexer junto.
Ótimo vídeo! Os outros vídeos fizeram com que eu pesquisasse sobre assembly, porque finalmente eu pude entender o básico do básico pra criar curiosidade. Sucesso!
4 ปีที่แล้ว +4
Nos próximos vídeos vou começar a entrar mais no assembly. Continua assistindo os próximos vídeos.
Deu até um frio na espinha quando você falou do segmentation fault hahaha. Adorei a explicação.
4 ปีที่แล้ว +2
😄 É Natan, já sofri muito com esses Segmentation Faults. Já implementei muitos drivers, e com driver é pior pois se der pau tem que reiniciar a máquina. Já passei muita raiva 😄 Abraço.....
Fala, man! Assistindo vídeo do Akita acabei caindo nesse vídeo do seu canal! Cara, que aula! Parabéns demais pela sua didática e pelo vídeo de qualidade! Com certeza vou maratonar seu canal! E tomara que um dia role um colab entre você e o Akita! Dois mestres da comp 😄 Parabéns demais!
eu rindo 😅 depois que ele falou que não dava pra mudar o arquivo depois que coloca o arquivo no chip te amo "game genie🥰" video top parabéns
ปีที่แล้ว +1
E aí Fábio. O Game Genie serve pra monitorar escritas e leituras para mudar os dados no barramento de dados em tempo real, permitindo um monte de modificações na execução do jogo. Valeu.....
Tecnologia de programação bem antiga. Assembler. Quem progamava nisto, era fera. Hoje, dificilmente teremos programadores habilitados para esta linguagem. A unica linguagem de prog que chega proximo a este nivel, é o C. Valeu por mostrar isto.
Que assembly bonito. Quando mexi com assembly de PIC, era uma parada muito mais rudimentar. Os assemblers de "engines" de consoles antigos devem dar uma forcinha pra abstração e deixar menos impeditivo. Mas essa galera de devs empenhados sempre dão um jeito "ah, não tem sistema operacional... Não tem problema, vou fazer um cartucho que emula cartuchos a partir de arquivos ROM em um cartão microSD" e, "tadá", que se façam esses everdrive da vida. Alguns tem até um chupa-cabra embutido pra fazer o dump de cartuchos direto pro cartão SD.
ปีที่แล้ว +3
Sim, os assembly desses consoles são bem legais, e o assembler Bass que eu uso tb é bem legal. Eu estou terminando uma extensão pro Vscode pra programação em Mega e Snes que tem syntax highlight, mostra os erros, etc. Já tenho uma versão pra Vim disponível no meu github.
Top demais o vídeo!! Chegou a falar mais detalhadamente sobre ponteiros? Tem tudo a ver com oq vc explicou. E tbm seria legal falar sobre a compactação, igual vc citou a strings para tradução e elas sempre estão compactadas e "perdidas" pelo código. Poderia falar da parte de extrai-las. Já fiz romhacking para tradução e usada muito essa noção de ponteiros e compactação.
ปีที่แล้ว +1
E aí marcos eu tenho alguns vídeos sobre compressão e descompressão aqui no canal. Tem um bem longo onde fiz a engenharia reversa de um algoritmo de descompressão para extrair uns gráficos.
@ eu achei o vídeo, legal. Vc poderia fazer agora com outros métodos tipo lz e seus derivados, são muito usados nos jogos e tbm falar como achar os dados onde se inicia os binários do gráfico ou dos textos na ROM. Acho que seria interessante.
Excelente conteúdo, parabéns. Faz uma série depois sobre CPU e schedulers do SO 😀
3 ปีที่แล้ว
Olá, obrigado pela mensagem. Você diz schedulers tipo do Kernel do Linux? Eu tenho vontade de fazer uma série sobre implementação de drivers pra Linux, mas não sei quando.
@ Drivers para linux também seria super legal. Schduele no nível kenel com hardware, como o kernel "configura" a CPU para obedecer o tempo determinado, como é feito a troca de contexto em si.
Adorei cara, faz um de gameboy color tbm? Tem bastante coisa tbm, usam tanto C quanto Assembly e tem até uma IDE no code pra programar pra gameboy color.
Muito interessante seu vídeo amigos bem informativo parabéns. Você poderia fazer um vídeo explicando sobre aqueles Chips de bolha, o funcionamento, igual esse vídeo seu.
ปีที่แล้ว +1
E aí Paulo, boa sugestão. Vou deixar no backlog aqui. Valeu.....
@ obrigado amigo. Seria ótimo. Gostei muito do seu vídeo por que você explica pra até um leigo que não entende nada, entende bem. Continue assim e faça o vídeo. Parabéns.
Muito bom o conteúdo do vídeo. Não sou da área, mas sou muito curioso no assunto. Desculpa meu preciosismo, mas quero contribuir com duas informações. 1. A pronúncia é rom (não rum), mesmo em português. 2. Os sufixos de unidades de medidas (kilos, mega, giga) não tem plural, o plural se dá pela unidade de medida (bytes, bits, metros).
Muito massa o vídeo! Mas quando você mostra o dump da ROM em hexadecimal, você está mostrando a representação do código compilado pra aquele CPU específico. Mas em que linguagem esses jogos são programados? Imagino que o programador não programa direto ali em hexadecimal.
Muito bom teu vídeo! Muito bom aprender assembly assim. Tecnicamente acha que seria possivel fazer um minisistema para um processador do SNES ou MEGA? Tambem achei muito massa o MenuetOS, um sistema todo feito em assembly pra x86.
3 ปีที่แล้ว +1
Olá Samuell, vc diz um sistema operacional? Até daria, mas o problema é a interface que é muito limitada pra expansões, então não faria muito sentido. Até o Nintendinho tem um console chamado Magic Computer que é tipo um sistema operacional com algumas aplicações básicas. Na verdade é uma rom pro nintendinho. Se tiver interesse dá um procurada. Agora, o processador do Mega Drive, o Motorola 68000, fui muito usado em computadores. A linha de computadores Amiga usa a família do 68000. Amiga foi um computador muito famoso nos anos 80 e 90. Até em jogos o Amiga tem muita coisa boa. Principalmente o jogo Enemy: Tempest of Violence, uma obra prima.
No n64 eu tinha um adaptador pra rodar cartucho pirata, daqueles que se colocava o cartucho original junto com o pirata, acredito que era pra fazer o jump no CIC, o pirata era bem simples e nao tinha chip de Ram, so que quando eu usava o pirata junto com o original o pirata salvava, ficava salvo na ram do cartucho original?
ปีที่แล้ว
Olá Eder, não conheço esse adaptador, mas pelo que vc está falando o adaptador tem dois conectores, um pro pirata e um pro original? Se sim, então internamente os fios dos barramentos devem estar conectados nos dois cartuchos, e deve ter alguma lógica que detecta se o endereço é na região de save e ativa os pinos de controle do original, caso contrário contrário apenas o pirata é ativado.
Tecnicamente, devem sim haver arquivos e pastas em cartuchos de Snes e consoles semelhantes, o problema é que quase ninguém até hoje conseguiu organizar os dados para humanos verem com algum programa de leitura universal. Os unicos programas que poderiam mostrar a organização real das ROMs é o SDK aonde os jogos são criados. Agente somente ver arquivos dos jogos atuais porque todos os PCs e consoles modernos tem SISTEMA operacional, e são os mesmos aonde o programador cria os jogos, o que muda é a extensão de arquivos que precisa de plug-in específico pra abrir. Mas um OS é uma parte dos SDK. Se os SDK do Snes aparecerem algum dia, talvez possamos acessar os arquivos das ROMs sem recorrer a engenharia reversa ou leitores de hex.
2 ปีที่แล้ว
E aí, neste sentido que vc falou, sim, pois quando criamos um jogo de Snes temos muitos arquivos. Mas uma vez criada a Rom lá dentro é um mistura de coisas. É diferente de uma imagem de Cd por exemplo que é um container e dentro pode ter múltiplos arquivos que podem ser separados. O ponto do vídeo é explicar que um jogo de Snes não tem uma estrutura interna que pode ser definida certinha. Varia de jogo pra jogo e só debugando mesmo pra ir encontrando as coisas.
Esses consoles antigos tem sistema operacional porém o jogo é o próprio sistema, inclusive existe gente que já fez versões de Linux pra ser colocado em cartucho customizado e rodar no SNES. Os jogos antigos tinham uma API da Nintendo e seguiam um padrão, esse padrão era como se fosse um sistema operacional, e toda vez que você trocava de jogo era como se tivesse uma instalação diferente de Windows por jogo. E no caso os dados estão bagunçados no hexa porque assim como quando você compila um programa não fica aparecendo as bibliotecas, ele também foi compilado pra ser colocado no cartucho...Muito jogo de DOS também não é arquivo único?
ปีที่แล้ว
E aí, eu nunca vi um port do kernel do Linux pra Snes. Já vi pra Nintendo 64. Acho difícil o Linux rodar em um Snes. E um jogo de Snes não acho que pode ser considerado um sistema operacional. Um jogo de Snes é uma aplicação bare metal que acessa diretamente os registradores do sistema mapeados em memória. Se você está chamando os registradores do sistema de Api, tudo bem, mas isso é diferente de uma Api de um sistema operacional. E um jogo de Snes é um binário praticamente sem estrutura interna. Já uma aplicação que roda em um sistema operacional, como o Windows, pode ser composta de um único executável (que tem bastante estrutura interna comparado com uma Rom de Snes), ou de múltiplos arquivos, que pode chegar a milhares dependendo da aplicação.
Boa tarde. Excelente vídeo! muito interessante! Eu tenho uma dúvida: Se uma aplicação não consegue acessar a memória de outra aplicação, então, como é possível pegar um debugger com editor de RAM e mudar um valor dentro de outro programa que está rodando? Por exemplo: Tenho aqui um programa de um equipamento de laboratório caro e perderam o cd com o serial e a fábrica se recusa a vender outra cópia. Qual foi a solução? peguei o CheatEngine que é um debugger e mudei o assembly para pular a verificação do serial e o programa instalou normalmente. como o cheat engine consegue mudar o programa que está rodando, se um programa não enxerga o outro?
ปีที่แล้ว +1
Pra isso o debugger usa a Api correta do sistema operacional e tem que ter as permissões corretas de administrador.
No começo de minha "carreira" como tradutor de jogos eu já estraguei muitos arquivos ROM por sobrescrever dados ao invés de texto. Inclusive, vários anos depois perdi uma tradução de The Legend of Zelda Ocarina of Time por ter feito alguma besteira na hora modificar texturas e texto, o jogo trava numa cutscene já perto do final.
Muito bom! Eu já venho estudando o assembly a um tempo mas ainda n pesquisei como desativar randomizacão de endereço de memória no Windows tu sabes como fazer isso professor?????
4 ปีที่แล้ว
Fala Jonatas. Já ouvi falar disso no Linux, mas não sei se tem como desativar isso. É uma questão de segurança importante. Toda vez que a aplicação roda o kernel joga pra um endereço diferente.
Olá Douglas!! Parabéns pelo seu vídeo e conteúdo!! Por favor, me tira uma dúvida: Estou tentando modificar algumas ROMS de certos jogos beat'em up (Final Fight 2 e 3), e as modificações consistem em fazer coisas como estender as barras de vida dos inimigos, aumentar o número de vidas e "nerfar" um pouco os personagens que a gente controla (pra deixar o jogo um pouquinho mais emocionante kkk). Como faço pra localizar estas informações no editor HEX e como faço para atribuir os valores que vão fazer essas "mágicas" na ROM? Desde já agradeço a atenção!! Mais uma vez, parabéns pelo trabalho e tutoriais!!
3 ปีที่แล้ว +1
Olá, editor hexa não tem muita a ver com isso. Vc precisa debugar o jogo para encontrar o que procura. É possível usar um editor hexa posteriormenta caso vc queira mudar bytes diretamente no arquivo, porém não é indicado. O indicado é usar um assembler (como o Bass) que vai fazer o patch no arquivo, o que te dá uma liberdade muito maior e vc não fica perdido editando bytes. Mais pra frente nesta série isso vai ficar claro, mas vai demorar um pouquinho. Abraço.....
Como faço pra ter uma rom licenciada pela nintendo,so basta eu ter o cartucho original e converter pra uma rom,ou tem que ter uma rom expecifica da nintendo
2 ปีที่แล้ว
Vc fala o arquivo da Rom do jogo disponibilizado pela própria Nintendo? Se for então eu nunca vi a Nintendo fazer isso. O máximo que vc vai conseguir é rodar os jogos antigos que ela disponibiliza para compra nas lojas virtuais dela.
Tem algum livro que você recomenda para aprender o básico dessa parte mais "fisica"(arquitetura) dos consoles em geral? Abraço :)
3 ปีที่แล้ว +2
Olá Maycon, especificamente de consoles não tem. Se quiser aprender mais a fundo a parte de arquitetura, eu gosto muito do livro Computer Organization and Design: The Hardware/Software Interface, do Patterson. Também tem vários livros do Motorola 68000 que tem muito essa parte de arquitetura. Tem um vídeo aqui no canal onde eu faço uma engenharia reversa em um jogo de Mega Drive onde no começo do vídeo eu mostro vários livros que eu tenho sobre o tema. Dá uma procurada lá. Abraço.....
Professor, é possível criar uma rom Word para Snes como se fosse um programa de PC?
3 ปีที่แล้ว +1
Olá Felipe, não entendi o "rom World". A pergunta é se dá pra transforma um jogo de Snes em um executável pra rodar no Pc? Se for então não tem como, pois uma rom de Snes nada tem a ver com um .exe que rodamos no Pc, pois é outro assembly e outros hardwares. Tem que ter um emulador pra rodar. O que daria pra fazer seria modificar um emulador aí pra já embutir a rom e virar tudo um .exe único, aí quando rodar já abriria o jogo. Mas não faz muito sentido fazer isso. Os emuladores já existem para que a gente já abra a Rom desejada. Abraço.....
Pelo oque eu entendi o emulador só precisa apenas da rom (software) já o console necessita da parte física (hardware) certo ?
ปีที่แล้ว
Olá, os emuladores tb precisam saber o que o cartuchos faz. É por isso que em alguns emuladores, como o Bsnes/Higan vc precisa de arquivos de manifesto pra indicar o que o cartucho faz. Outros emuladores que não tem manifesto, como o Snes9x, usam heurísticas pra tentar detectar como é o cartucho, olhando para o header, etc. No Nes por exemplo existem diversos tipos de mappers dentro do cartucho, então os emuladores tb precisam implementar isso pra conseguir rodar o jogo. Sem falar nos cartuchos com chips extras, que tb precisam ser emulados.
Porque os endereços começam SEMPRE con 0x0000 etc.? Sabendo que Computadores só lêem 0 e 1...
2 ปีที่แล้ว +2
Olá, não entendi a pergunta. Os zeros à esquerda podem ser desconsiderados. Por exemplo um jogo de Snes pode ter jogo no endereço 0xc00000. Daria na mesma se vc falar 0x0000c00000. No editor hexa a seção de endereços geralmente tem o número de dígitos pra suportar o maior endereço do arquivo. Então se o maior endereço for 0xffffff, vai começar do 0x000000, mas esses zeros são apenas pros endereços ficar do mesmo tamanho. A partir do meio do arquivo já não é pra ter zeros na frente.
Na verdade os códigos poderiam ser identificados de qualquer forma poderíamos ter um código em vez de 0 e 1 poderia ser X e Y, e este 000 poderia ser XXX ou YYY ou qualquer outra notação por exemplo, mas como convenção foi identificado como zeros e uns pois eles identificam que um determinado local físico da memória ou referência eletrônica está fisicamente ligado ou desligado. Como cada endereço identificado representa um ponto físico na memória se temos por exemplo uma memória de 8 posições físicas então para representar essas 8 posições precisamos apenas de 3 bits iniciando em 000 até 111 nesse intervalo binário temos 8 representações que indicam as 8 posições físicas. Então esse início 000 representa que uma posição na memória física representa o local 0 e não necessariamente o número 0. Você está associando o 0 como valor numérico por isso acha estranho iniciar por 0 mas este endereço 0000 que ele mostrou indica que em alguma posição da memória esse endereço 0000 representa um endereço físico na memória
só não concordei na parte que diz que não tendo pilha e deixando o cartucho no slot fica energizado e mantém o save...eu acho que não kkk
ปีที่แล้ว
E aí Henrique. Não lembro de ter disso isso. A pilha é que deixa o chip de Sram energizado quando o cartucho está desconectado do console (ou conectado com o console desligado). A pilha tem 3,3V e quando está conectado e o console está ligado, os 5V do console desativam a pilha pois tem um diodo na frente da pilha. Quando o console desliga, os 5V desaparecem e os 3,3V da pilha entram na Sram, mantendo o chip ativo.
Pelo que eu entedi a rom do cartucho é como se ram e o hd é se fossem uma coisa só.
ปีที่แล้ว
E aí, a Rom é como se fosse o HD. A Ram existe e é embutida dentro do console. O cartucho então é como se fosse um HD removível. Dá pra ter Ram de Save dentro do cartucho pra guardar os saves e tb pra realizar tarefas igual a Ram interna do sistema. Mas no geral a Sram dentro do cartucho é usado só pra save mesmo.
Eu pensava que a rom era tipo o cara pegar um leitor de cartucho do SNES, Mega Drive etc, conectar no computador e copiar os dados do cartucho kkkk pq a rom é uma cópia fiel do jogo.
ปีที่แล้ว +1
Sim, os dados dentro do chip são extraídos com algum leitor, o que gera o arquivo da Rom que usamos nos emuladores.
Deu para entender que ele estava falando da memória do computador,mas sempre tem alguém que gosta de se aparecer e corrigir os outro!!!! Parabéns ao dono do canal!!! Super legal parabéns!!
Na verdade não o chip de rom da para ser gravado sim eu mesmo ja peguei muito cartucho de jogo japones vagabundo e já regravei em cima outros jogo é sim eu tenho um gravdor de cartucho
ปีที่แล้ว
E aí, isso só é possível se o cartucho tiver uma eprom ou algum tipo de flash, porém os cartuchos originais de Snes e Mega tem maskroms, das quais só é possível ler. Valeu.....
@@papelhigienico1374 Opa, tudo bem? Mas do que vc está falando, amigo? Eu apenas coloquei quais eram os games mostrados no vídeo, baseado na info do chip dos mesmos... Acho que vc errou e comentou no video errado! Mas tamo junto mesmo assim!
O vídeo é sobre ROM e ainda tem uma ótima aula sobre sistemas operacionais! Valeu pelo vídeo!
Valeu Willian...
Excelente vídeo! eu sempre falo que para se tornar um verdadeiro programador é necessário ter ao menos a noção de como os dados são computados em baixo nível, pois essas abstrações das linguagens de alto nível nos colocam um mau costume de não saber o que está ocorrendo, pois quando digitamos printf(); a máquina não entende o que isso significa e por trás dessa mesma função há diversas outras instruções para chegar no resultado de imprimir na tela que por sua vez é um código em assembly e que por sua vez é um mnemônico para o binário, o Fábio Akita salvo engano disse que cada arquivo é apenas um monte de binário e que a informação é interpretada conforme olhamos para ela, se olharmos para aquele dado como texto vemos apenas linguagem de máquina no editor, se olharmos como imagem pode muito bem ser um .png, e isso fica muito claro no exemplo da rom, que ao abrirmos com um editor hexa é um amontoado de bytes, mas em um editor de sprites podemos encontrar imagens amontoadas. Mas em fim, aula preciosa para quem quer se aprofundar na arquitetura de computadores, também muito importante para os romhackers que traduzem ou editam jogos, gosto muito de manipular jogos antigos, espero um dia ser capaz de compreender assembly para arquiteturas como mips, 6502, entre outros usados por consoles antigos.
Kkkkkkkkkkkk tu e gay só pode
@@faloaverdaderasga8773 Se eu até hoje nunca fui então continuarei sem ser, mas se tu tá interessado deve ser porque tá querendo uma leitada quente no teu rabo né kkkkkkkkkk
@@faloaverdaderasga8773????
me encaixo na categ de curioso. programo, mas n tive a curiosidade p programar nesse nivel rs
excelente video hein. n sabia da questao do mega drive e do snes comparado c os computadores tradicionais.
foi bem esclarecedor td. c ref a ROM hacking tb.
mandou bem demais.
n preciso nem dizer q vou compartilhar, pq conteudos como os seus, o de Filipe Deschamps merecem ser exaltados.
parabens. vlw
Obrigado Rogerio. Agradeço pela força. Abraço.....
Cara, excelente vídeo. Uma verdadeira aula!
Mas toda vez que vc fala "rum" e não "rom", dá uma tristeza.
Fora isso, tá bem explicadinho!
Valeu Souza. Nem sei pq eu falei Rum nesse vídeo. Dói meu ouvido tb kkkk
caracas....que video show...eu estava so navegando mais tive que ver este video aula...😄.valeu...+1 escrito
Rapaz que aula top, obrigado demais !
Esse vídeo me respondeu todas as perguntas que eu tinha sobre programação!
Sempre uma excelente aula, muito didatica 👏
Ótimo conteúdo, uma verdadeira aula. Como não vi isso antes?
Nem sei como vim parar aqui kkk. Mas achei o vídeo sensacional.
Valeu Wesley...
Ótimo conteúdo.
Só pra pontuar, vc pode reproduzir esse conceito de arquivo binário "rom" em linguagens de programação mais alto nivel como as do .NET e Java, com as classes de Stream de ambos os casos.
Tudo que voce precisa fazer é alocar um bloco X de bytes, daí dentro dele são criados N blocos menores.
Estamos falando aqui no fim das contas de um grande Array onde sempre precisamos saber a posição inicial e final de um bloco pra ter acesso ao dado
Se uma gravação for feita numa posição errada, pode facilmente corromper TODO o bloco raíz fazendo as leituras ficarem erradas e inutilizando a "imagem" por completa
Valeu! Muito obrigado!
Valeu André...
Que conteúdo bom!!! eu trabalho como programador de máquinas CNC, sempre tive curiosidade como funcionava a programação desses jogos antigos e esse video passou muita coisa boa de forma esclarecida!!! vou acompanhar mais esse canal abraços!!!
SDS de quando eu estava estudando o 6502 do NES, assembly é bem legal, pena q na época eu não tinha ninguém interessado no assunto pra eu trocar ideia, cheguei a criar algumas coisas, mas só demos mesmo. Legal seria arrumar uns 2 ou 3 q tivessem interesse pra fazer junto alguma coisa
É difícil achar viu. Tenta criar um projeto no Github e tentar divulgar pra ver se alguém se interesse em mexer junto.
Ótimo vídeo! Os outros vídeos fizeram com que eu pesquisasse sobre assembly, porque finalmente eu pude entender o básico do básico pra criar curiosidade. Sucesso!
Nos próximos vídeos vou começar a entrar mais no assembly. Continua assistindo os próximos vídeos.
Que vídeo legal, cara!
Valeu George...
Show 👏👏
Valeu Douglas...
Sempre tive a curiosidade de saber, obrigado
Valeu Rafael...
Cara, parabéns! Ótimo vídeo!
Olá, obrigado por assistir. Valeu...
Muito bom contéudo, sempre quiz saber isso.
Agradeço o apoio Hyper Joy. Abraço......
Aulas e aulas! Parabéns
Deu até um frio na espinha quando você falou do segmentation fault hahaha. Adorei a explicação.
😄 É Natan, já sofri muito com esses Segmentation Faults. Já implementei muitos drivers, e com driver é pior pois se der pau tem que reiniciar a máquina. Já passei muita raiva 😄 Abraço.....
Mas que aula top demais essa.
Valeu Rafa...
Muito bem explicado! Parabéns!
Valeu Daniel, abraço...
Fala, man! Assistindo vídeo do Akita acabei caindo nesse vídeo do seu canal! Cara, que aula! Parabéns demais pela sua didática e pelo vídeo de qualidade! Com certeza vou maratonar seu canal!
E tomara que um dia role um colab entre você e o Akita! Dois mestres da comp 😄
Parabéns demais!
Excelente
Que conteúdo incrível, muito obrigado, aprendi mais no seu vídeo do que em 1 semestre na faculdade.😂
Ótimo vídeo! 👏🏼👏🏼👏🏼
Valeu Lukkas, abração.....
eu rindo 😅 depois que ele falou que não dava pra mudar o arquivo depois que coloca o arquivo no chip te amo "game genie🥰" video top parabéns
E aí Fábio. O Game Genie serve pra monitorar escritas e leituras para mudar os dados no barramento de dados em tempo real, permitindo um monte de modificações na execução do jogo. Valeu.....
Voltei para rever o vídeo. Continua muito bom. Poderia falar um pouco sobre como é feito o disassembler de roms?
No futuro quero fazer uma playlist fazendo um emulador e vou falar sobre isso.
@ Aguardo ansiosamente!🤩
Tecnologia de programação bem antiga. Assembler. Quem progamava nisto, era fera. Hoje, dificilmente teremos programadores habilitados para esta linguagem. A unica linguagem de prog que chega proximo a este nivel, é o C. Valeu por mostrar isto.
Obrigado pelo conteúdo 😉
Valeu João, abração...
Que assembly bonito. Quando mexi com assembly de PIC, era uma parada muito mais rudimentar. Os assemblers de "engines" de consoles antigos devem dar uma forcinha pra abstração e deixar menos impeditivo.
Mas essa galera de devs empenhados sempre dão um jeito "ah, não tem sistema operacional... Não tem problema, vou fazer um cartucho que emula cartuchos a partir de arquivos ROM em um cartão microSD" e, "tadá", que se façam esses everdrive da vida. Alguns tem até um chupa-cabra embutido pra fazer o dump de cartuchos direto pro cartão SD.
Sim, os assembly desses consoles são bem legais, e o assembler Bass que eu uso tb é bem legal. Eu estou terminando uma extensão pro Vscode pra programação em Mega e Snes que tem syntax highlight, mostra os erros, etc. Já tenho uma versão pra Vim disponível no meu github.
@opa isso me interessa muito
Top demais o vídeo!!
Chegou a falar mais detalhadamente sobre ponteiros? Tem tudo a ver com oq vc explicou.
E tbm seria legal falar sobre a compactação, igual vc citou a strings para tradução e elas sempre estão compactadas e "perdidas" pelo código. Poderia falar da parte de extrai-las.
Já fiz romhacking para tradução e usada muito essa noção de ponteiros e compactação.
E aí marcos eu tenho alguns vídeos sobre compressão e descompressão aqui no canal. Tem um bem longo onde fiz a engenharia reversa de um algoritmo de descompressão para extrair uns gráficos.
@ eu achei o vídeo, legal.
Vc poderia fazer agora com outros métodos tipo lz e seus derivados, são muito usados nos jogos e tbm falar como achar os dados onde se inicia os binários do gráfico ou dos textos na ROM.
Acho que seria interessante.
Cara, teu canal é muito show! Parabéns!
Obrigado pelo elogio João Vitor. Abração....
cara o seu canal foi uma das melhores descobertas que tive no mundo de tech, pra mim tá nivel Akita
akita não ensina nada, o douglas sim. Onde o Akita explica alguma coisa com esse video?
E pra traduzir uma ROM por exemplo ou modificar? Muito interessante isso, eu tava querendo saber como era agora apareceu seu vídeo do nada
Pra traduzir tem que usar os debuggers. Aqui nessa série já mostrei bastante os debuggers de Snes e Mega.
Ótimo conteúdo, sempre quis saber como são feitos modificações nesses arquivos ROM, como são feito as hackroms. Creio que esse seja o caminho.
Sim, continua assistindo a série. Abraço.....
Excelente conteúdo, parabéns.
Faz uma série depois sobre CPU e schedulers do SO 😀
Olá, obrigado pela mensagem. Você diz schedulers tipo do Kernel do Linux? Eu tenho vontade de fazer uma série sobre implementação de drivers pra Linux, mas não sei quando.
@ Drivers para linux também seria super legal. Schduele no nível kenel com hardware, como o kernel "configura" a CPU para obedecer o tempo determinado, como é feito a troca de contexto em si.
Parabéns, conteúdo de qualidade
Obrigado Rodrigo....
Parabéns pelo vídeo amigo, inscrito no canal, @arduinomaquinas" agradece suas informações técnicas 😉👍👏👏👏👏👏👏
Obrigsdo pela explicação
Valeu Carlos...
curto pra caramba essa série to sempre acompanhando só queria saber quando vai partir pro assembly kkkk da vontade de botar a mão na massa
Fala Thieres, tá chegando 😀
Excelente vídeo 👏👏👏
Valeu Isaias, obrigado por acompanhar.
Adorei cara, faz um de gameboy color tbm? Tem bastante coisa tbm, usam tanto C quanto Assembly e tem até uma IDE no code pra programar pra gameboy color.
Muito interessante seu vídeo amigos bem informativo parabéns. Você poderia fazer um vídeo explicando sobre aqueles Chips de bolha, o funcionamento, igual esse vídeo seu.
E aí Paulo, boa sugestão. Vou deixar no backlog aqui. Valeu.....
O chip de bolha nada mais é do que um die sem o encapsulamento e terminais , pra reduzir custo . Muito utilizado nos cartuchos piratas
@ obrigado amigo. Seria ótimo. Gostei muito do seu vídeo por que você explica pra até um leigo que não entende nada, entende bem. Continue assim e faça o vídeo. Parabéns.
@@renatonascimento7885 Bela e cirúrgica resposta.
É um bom começo de engenharia reversa.
Valeu Tux....
Muito bom o conteúdo do vídeo. Não sou da área, mas sou muito curioso no assunto. Desculpa meu preciosismo, mas quero contribuir com duas informações.
1. A pronúncia é rom (não rum), mesmo em português.
2. Os sufixos de unidades de medidas (kilos, mega, giga) não tem plural, o plural se dá pela unidade de medida (bytes, bits, metros).
Show🤙🏼
Valeu Expedito....
Show
Valeu Cícero...
Muito massa o vídeo! Mas quando você mostra o dump da ROM em hexadecimal, você está mostrando a representação do código compilado pra aquele CPU específico. Mas em que linguagem esses jogos são programados? Imagino que o programador não programa direto ali em hexadecimal.
Muito bom teu vídeo! Muito bom aprender assembly assim. Tecnicamente acha que seria possivel fazer um minisistema para um processador do SNES ou MEGA? Tambem achei muito massa o MenuetOS, um sistema todo feito em assembly pra x86.
Olá Samuell, vc diz um sistema operacional? Até daria, mas o problema é a interface que é muito limitada pra expansões, então não faria muito sentido. Até o Nintendinho tem um console chamado Magic Computer que é tipo um sistema operacional com algumas aplicações básicas. Na verdade é uma rom pro nintendinho. Se tiver interesse dá um procurada. Agora, o processador do Mega Drive, o Motorola 68000, fui muito usado em computadores. A linha de computadores Amiga usa a família do 68000. Amiga foi um computador muito famoso nos anos 80 e 90. Até em jogos o Amiga tem muita coisa boa. Principalmente o jogo Enemy: Tempest of Violence, uma obra prima.
Ta muito top.
Obrigado Moba, valeu...
No n64 eu tinha um adaptador pra rodar cartucho pirata, daqueles que se colocava o cartucho original junto com o pirata, acredito que era pra fazer o jump no CIC, o pirata era bem simples e nao tinha chip de Ram, so que quando eu usava o pirata junto com o original o pirata salvava, ficava salvo na ram do cartucho original?
Olá Eder, não conheço esse adaptador, mas pelo que vc está falando o adaptador tem dois conectores, um pro pirata e um pro original? Se sim, então internamente os fios dos barramentos devem estar conectados nos dois cartuchos, e deve ter alguma lógica que detecta se o endereço é na região de save e ativa os pinos de controle do original, caso contrário contrário apenas o pirata é ativado.
Conteúdo Top e didático Br top, nível da gringa!
Valeu Lucard...
Show!!!
Como um pendrive por exemplo consegue manter os dados salvos sem ter uma pilha?
Duas perguntas, Da pra criar jogos de snes ainda hoje, os jogos de máster system também eram feitos em assembly ???
Olá, sim, hoje em dia é mais fácil, pois já tem muita coisa pronta e ferramentas. Master System era assembly sim.
Tecnicamente, devem sim haver arquivos e pastas em cartuchos de Snes e consoles semelhantes, o problema é que quase ninguém até hoje conseguiu organizar os dados para humanos verem com algum programa de leitura universal.
Os unicos programas que poderiam mostrar a organização real das ROMs é o SDK aonde os jogos são criados. Agente somente ver arquivos dos jogos atuais porque todos os PCs e consoles modernos tem SISTEMA operacional, e são os mesmos aonde o programador cria os jogos, o que muda é a extensão de arquivos que precisa de plug-in específico pra abrir. Mas um OS é uma parte dos SDK.
Se os SDK do Snes aparecerem algum dia, talvez possamos acessar os arquivos das ROMs sem recorrer a engenharia reversa ou leitores de hex.
E aí, neste sentido que vc falou, sim, pois quando criamos um jogo de Snes temos muitos arquivos. Mas uma vez criada a Rom lá dentro é um mistura de coisas. É diferente de uma imagem de Cd por exemplo que é um container e dentro pode ter múltiplos arquivos que podem ser separados. O ponto do vídeo é explicar que um jogo de Snes não tem uma estrutura interna que pode ser definida certinha. Varia de jogo pra jogo e só debugando mesmo pra ir encontrando as coisas.
gostei muito
Esses consoles antigos tem sistema operacional porém o jogo é o próprio sistema, inclusive existe gente que já fez versões de Linux pra ser colocado em cartucho customizado e rodar no SNES. Os jogos antigos tinham uma API da Nintendo e seguiam um padrão, esse padrão era como se fosse um sistema operacional, e toda vez que você trocava de jogo era como se tivesse uma instalação diferente de Windows por jogo.
E no caso os dados estão bagunçados no hexa porque assim como quando você compila um programa não fica aparecendo as bibliotecas, ele também foi compilado pra ser colocado no cartucho...Muito jogo de DOS também não é arquivo único?
E aí, eu nunca vi um port do kernel do Linux pra Snes. Já vi pra Nintendo 64. Acho difícil o Linux rodar em um Snes. E um jogo de Snes não acho que pode ser considerado um sistema operacional. Um jogo de Snes é uma aplicação bare metal que acessa diretamente os registradores do sistema mapeados em memória. Se você está chamando os registradores do sistema de Api, tudo bem, mas isso é diferente de uma Api de um sistema operacional. E um jogo de Snes é um binário praticamente sem estrutura interna. Já uma aplicação que roda em um sistema operacional, como o Windows, pode ser composta de um único executável (que tem bastante estrutura interna comparado com uma Rom de Snes), ou de múltiplos arquivos, que pode chegar a milhares dependendo da aplicação.
Boa tarde. Excelente vídeo! muito interessante! Eu tenho uma dúvida: Se uma aplicação não consegue acessar a memória de outra aplicação, então, como é possível pegar um debugger com editor de RAM e mudar um valor dentro de outro programa que está rodando? Por exemplo: Tenho aqui um programa de um equipamento de laboratório caro e perderam o cd com o serial e a fábrica se recusa a vender outra cópia. Qual foi a solução? peguei o CheatEngine que é um debugger e mudei o assembly para pular a verificação do serial e o programa instalou normalmente. como o cheat engine consegue mudar o programa que está rodando, se um programa não enxerga o outro?
Pra isso o debugger usa a Api correta do sistema operacional e tem que ter as permissões corretas de administrador.
Até ver esse vídeo eu achava que um exe era só um exe. Muito bom.
Obrigado Marcus. Abraço.....
7:30 o nome desse video e qual ?
Acho que é o vídeo 2 da série.
No começo de minha "carreira" como tradutor de jogos eu já estraguei muitos arquivos ROM por sobrescrever dados ao invés de texto. Inclusive, vários anos depois perdi uma tradução de The Legend of Zelda Ocarina of Time por ter feito alguma besteira na hora modificar texturas e texto, o jogo trava numa cutscene já perto do final.
Muito bom! Eu já venho estudando o assembly a um tempo mas ainda n pesquisei como desativar randomizacão de endereço de memória no Windows tu sabes como fazer isso professor?????
Fala Jonatas. Já ouvi falar disso no Linux, mas não sei se tem como desativar isso. É uma questão de segurança importante. Toda vez que a aplicação roda o kernel joga pra um endereço diferente.
@ 😄 eu pagaria $$$ pra aprender desativar essa randomizacão ou ter que pesquisar né 😄😄😄
Top...
Valeu Flavio...
Olá Douglas!! Parabéns pelo seu vídeo e conteúdo!!
Por favor, me tira uma dúvida: Estou tentando modificar algumas ROMS de certos jogos beat'em up (Final Fight 2 e 3), e as modificações consistem em fazer coisas como estender as barras de vida dos inimigos, aumentar o número de vidas e "nerfar" um pouco os personagens que a gente controla (pra deixar o jogo um pouquinho mais emocionante kkk). Como faço pra localizar estas informações no editor HEX e como faço para atribuir os valores que vão fazer essas "mágicas" na ROM?
Desde já agradeço a atenção!!
Mais uma vez, parabéns pelo trabalho e tutoriais!!
Olá, editor hexa não tem muita a ver com isso. Vc precisa debugar o jogo para encontrar o que procura. É possível usar um editor hexa posteriormenta caso vc queira mudar bytes diretamente no arquivo, porém não é indicado. O indicado é usar um assembler (como o Bass) que vai fazer o patch no arquivo, o que te dá uma liberdade muito maior e vc não fica perdido editando bytes. Mais pra frente nesta série isso vai ficar claro, mas vai demorar um pouquinho. Abraço.....
Super Nintendo sempre teve a arquitetura de seus hardware mais complexos e trabalhados.! Bom demais.! Amo esse console.!
Valeu Retrono, o Snes é legal demais...
Como faço pra ter uma rom licenciada pela nintendo,so basta eu ter o cartucho original e converter pra uma rom,ou tem que ter uma rom expecifica da nintendo
Vc fala o arquivo da Rom do jogo disponibilizado pela própria Nintendo? Se for então eu nunca vi a Nintendo fazer isso. O máximo que vc vai conseguir é rodar os jogos antigos que ela disponibiliza para compra nas lojas virtuais dela.
24:34 Sem sistema operacional o código ativa a eletrônica diretamente.
Sempre quis saber como os jogos eram gravados no chip da fita
Valeu John.....
Tem algum livro que você recomenda para aprender o básico dessa parte mais "fisica"(arquitetura) dos consoles em geral? Abraço :)
Olá Maycon, especificamente de consoles não tem. Se quiser aprender mais a fundo a parte de arquitetura, eu gosto muito do livro Computer Organization and Design: The Hardware/Software Interface, do Patterson. Também tem vários livros do Motorola 68000 que tem muito essa parte de arquitetura. Tem um vídeo aqui no canal onde eu faço uma engenharia reversa em um jogo de Mega Drive onde no começo do vídeo eu mostro vários livros que eu tenho sobre o tema. Dá uma procurada lá. Abraço.....
Professor, é possível criar uma rom Word para Snes como se fosse um programa de PC?
Olá Felipe, não entendi o "rom World". A pergunta é se dá pra transforma um jogo de Snes em um executável pra rodar no Pc? Se for então não tem como, pois uma rom de Snes nada tem a ver com um .exe que rodamos no Pc, pois é outro assembly e outros hardwares. Tem que ter um emulador pra rodar. O que daria pra fazer seria modificar um emulador aí pra já embutir a rom e virar tudo um .exe único, aí quando rodar já abriria o jogo. Mas não faz muito sentido fazer isso. Os emuladores já existem para que a gente já abra a Rom desejada. Abraço.....
Pelo oque eu entendi o emulador só precisa apenas da rom (software) já o console necessita da parte física (hardware) certo ?
Olá, os emuladores tb precisam saber o que o cartuchos faz. É por isso que em alguns emuladores, como o Bsnes/Higan vc precisa de arquivos de manifesto pra indicar o que o cartucho faz. Outros emuladores que não tem manifesto, como o Snes9x, usam heurísticas pra tentar detectar como é o cartucho, olhando para o header, etc. No Nes por exemplo existem diversos tipos de mappers dentro do cartucho, então os emuladores tb precisam implementar isso pra conseguir rodar o jogo. Sem falar nos cartuchos com chips extras, que tb precisam ser emulados.
Porque os endereços começam SEMPRE con 0x0000 etc.? Sabendo que Computadores só lêem 0 e 1...
Olá, não entendi a pergunta. Os zeros à esquerda podem ser desconsiderados. Por exemplo um jogo de Snes pode ter jogo no endereço 0xc00000. Daria na mesma se vc falar 0x0000c00000. No editor hexa a seção de endereços geralmente tem o número de dígitos pra suportar o maior endereço do arquivo. Então se o maior endereço for 0xffffff, vai começar do 0x000000, mas esses zeros são apenas pros endereços ficar do mesmo tamanho. A partir do meio do arquivo já não é pra ter zeros na frente.
Na verdade os códigos poderiam ser identificados de qualquer forma poderíamos ter um código em vez de 0 e 1 poderia ser X e Y, e este 000 poderia ser XXX ou YYY ou qualquer outra notação por exemplo, mas como convenção foi identificado como zeros e uns pois eles identificam que um determinado local físico da memória ou referência eletrônica está fisicamente ligado ou desligado. Como cada endereço identificado representa um ponto físico na memória se temos por exemplo uma memória de 8 posições físicas então para representar essas 8 posições precisamos apenas de 3 bits iniciando em 000 até 111 nesse intervalo binário temos 8 representações que indicam as 8 posições físicas.
Então esse início 000 representa que uma posição na memória física representa o local 0 e não necessariamente o número 0. Você está associando o 0 como valor numérico por isso acha estranho iniciar por 0 mas este endereço 0000 que ele mostrou indica que em alguma posição da memória esse endereço 0000 representa um endereço físico na memória
só não concordei na parte que diz que não tendo
pilha e deixando o cartucho no slot fica energizado e mantém o save...eu acho que não kkk
E aí Henrique. Não lembro de ter disso isso. A pilha é que deixa o chip de Sram energizado quando o cartucho está desconectado do console (ou conectado com o console desligado). A pilha tem 3,3V e quando está conectado e o console está ligado, os 5V do console desativam a pilha pois tem um diodo na frente da pilha. Quando o console desliga, os 5V desaparecem e os 3,3V da pilha entram na Sram, mantendo o chip ativo.
Pelo que eu entedi a rom do cartucho é como se ram e o hd é se fossem uma coisa só.
E aí, a Rom é como se fosse o HD. A Ram existe e é embutida dentro do console. O cartucho então é como se fosse um HD removível. Dá pra ter Ram de Save dentro do cartucho pra guardar os saves e tb pra realizar tarefas igual a Ram interna do sistema. Mas no geral a Sram dentro do cartucho é usado só pra save mesmo.
É como no mundo real, não existe arquivos é tudo de forma aleatória, você faz o que quiser na ordem desejada.
hehe Mais ou menos isso Jonathon. Abraço.....
Sdd de quando eu tinha problemas com Kernel e .DLL no Windows. ahahah
É, mexer com isso é um desafio legal :D Abraço.....
Vc é formado em eletrônica ?
Fiz engenharia de computação.
O vídeo é bastante interessante. Porém vários conceitos teóricos de Ciência da Computação estão aplicadas de forma equivocada
Olá, quais conceitos vc se refere?
Eu pensava que a rom era tipo o cara pegar um leitor de cartucho do SNES, Mega Drive etc, conectar no computador e copiar os dados do cartucho kkkk pq a rom é uma cópia fiel do jogo.
Sim, os dados dentro do chip são extraídos com algum leitor, o que gera o arquivo da Rom que usamos nos emuladores.
Kkkkk eu tô imaginando o trabalho sofrimento que os Roms Hack ou Rom mod fazendo do super Mario kkkkk
Achava que room era tipo de bebida
Rum é bebida kkk
Rum? Com limão e mel fica ótimo! 😄
Kkkkk Acostumei falar Rum e agora já era 😀 Valeu Sebastião......
Amigo não se fala "RUM" e sim "RÓM", seria RUM se a palavra fosse "ROOM" 🕹️
Sim, tem hora que falo Rum sem querer. Abraço.....
Para de ser chato
Deu para entender que ele estava falando da memória do computador,mas sempre tem alguém que gosta de se aparecer e corrigir os outro!!!! Parabéns ao dono do canal!!! Super legal parabéns!!
E aquelas fitinhas piratas 🏴☠️ que parece que a carcacinha é pelada???
Sem querer ser chato e já sendo, a pronúncia é rom e não room. Um "O" som de O e "OO" som de u.
Vlw pela dica, gosto muito desses temas de Rum de vídio gueimi
Na verdade não o chip de rom da para ser gravado sim eu mesmo ja peguei muito cartucho de jogo japones vagabundo e já regravei em cima outros jogo é sim eu tenho um gravdor de cartucho
E aí, isso só é possível se o cartucho tiver uma eprom ou algum tipo de flash, porém os cartuchos originais de Snes e Mega tem maskroms, das quais só é possível ler. Valeu.....
Fale mais "Voltagem" não...
E aí Rafael, qual é o termo correto?
aja miolo
Obrigado pela mensagem...
Rum é uma bebida , o nome é ROM, se pronuncia como se escreve, com "O" e não "u"
Sim, eu dei uma bugada no vídeo. Às vezes sai Rum.
Cartucho sai mais caro que um CD
Opa!
SHVC-A2LJ-0
O game é "Bounty Sword", pro Super Famicom.
SHVC-ACKJ-0
O jogo é "Go go Ackman" pro Super Famicom
Um abraço!
Snes rodaria - mas mega drove jamais rodaria pois tem pouca paleta de cores
@@papelhigienico1374 Opa, tudo bem? Mas do que vc está falando, amigo?
Eu apenas coloquei quais eram os games mostrados no vídeo, baseado na info do chip dos mesmos... Acho que vc errou e comentou no video errado! Mas tamo junto mesmo assim!
Legal !