Como utilizar o ADMA?

    Compartilhe
    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Como utilizar o ADMA?

    Mensagem por Kevin Prestes em Seg 17 Fev 2014, 00:37

    Como se utiliza o ADMA (Advanced Direct Memory Acess) ? Nunca vi algum SCRIPT utilizando isso.


    Última edição por Kevin Prestes em Seg 17 Fev 2014, 00:59, editado 1 vez(es)
    avatar
    LINK/2012
    Programador - Avançado
    Programador - Avançado

    Título : Veterano
    Mensagens : 7857
    Reputação : 347
    Desde : 03/05/2012

    Re: Como utilizar o ADMA?

    Mensagem por LINK/2012 em Seg 17 Fev 2014, 00:44

    pq não precisa e alem de ser mais complicado e mais limitado em relação ao read_memory/write_memory


    ____________________
    "Give a man a game engine and he delivers a game. Teach a man to make a game engine and he never delivers anything."

    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Como utilizar o ADMA?

    Mensagem por Kevin Prestes em Seg 17 Fev 2014, 00:47

    Mas, mesmo assim queria saber usar. Poderia me explicar?
    avatar
    LINK/2012
    Programador - Avançado
    Programador - Avançado

    Título : Veterano
    Mensagens : 7857
    Reputação : 347
    Desde : 03/05/2012

    Re: Como utilizar o ADMA?

    Mensagem por LINK/2012 em Seg 17 Fev 2014, 01:11

    é uma tecnica bastante inteligente e esta de parabéns o rapaz que a inventou. Foi usado pra conseguir reproduzir a CLEO 1 e CLEO 2 :)

    O inicio do main.scm é cheio de zeros, esses zeros são espaços reservados para variaveis globais.
    O jogo lé o main.scm inteiro para a memoria e quando é necessario ler ou escrever uma global ele so faz ir no inicio desse espaço e escrever/ler.
    Então quanto você acessa a variavel $0 você esta acessando o offset 0 do main.scm, quando você acessa a variavel $1 o offset 4, a variavel $2 o offset 8, etc, levando em consideração que cada global toma 4 bytes.

    Bem, como você sabe é possivel utilizar arrays para acessar sequencialmente as variaveis, por exemplo $0[0] acessaria o offset 0 e $0[2] o offset 8.
    Agora vamos internamente.... Lembra que disse que o main é lido pra memoria e dai ocorre as operações na memoria? Então, ele é lido para 0xA49960.
    Portando quando você acessa o offset 8 do main.scm você ta acessando 0xA49960 + 8 = 0xA49968

    Ja entendeu a brincadeira? Com isso é possivel basicamente acessar toda a memoria do jogo partido do 0xA49960 como principio!
    Se quiser acessar antes do 0xA49960 usa offsets negativos e se quiser acessar depois de 0xA49960 offsets positivos.

    $0[-1] vai acessar 0xA49960 - 4 = 0xA4995C e assim a vida acontece.

    Pra aplicar isso no Sanny Builder você tem que usar & em vez de $, pois o Sanny não aceita que você utilize as primeiras 2 globais ja que tem um jump nelas...  & acessa os offsets diretos, ou seja &4 é a $1 e &0 a $0.
    Tambem vai precisar usar uma variavel no lugar do numero do indice.

    Então por exemplo
    Código:
    0@ = -1
    &0(0@, 1i) = 2012
    Você vai estar escreve 4 bytes, 2012, em 0xA4995C


    ____________________
    "Give a man a game engine and he delivers a game. Teach a man to make a game engine and he never delivers anything."

    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Não quero acreditar, quero saber.
    Mensagens : 21619
    Reputação : 635
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Como utilizar o ADMA?

    Mensagem por Junior_Djjr em Seg 17 Fev 2014, 01:22

    legal isso↑
    inutil mas eh legal pakas

    e dah pra usar hexadecimal sem problemas? (se nao me engano sim pq o sanny compila o hexadecimal pra decimal neh, nem lembro)
    Código:
    0@ = -0x4DAC
    &0(0@, 1i) = 1.0
    ps: o limite eh pq soh escreve 4 bytes sempre neh?


    ____________________
    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Como utilizar o ADMA?

    Mensagem por Kevin Prestes em Seg 17 Fev 2014, 01:46

    Compila pra Decimal sim Junior. Mistura isso com Array confunde maisto ainda. Mas é legal.
    avatar
    LINK/2012
    Programador - Avançado
    Programador - Avançado

    Título : Veterano
    Mensagens : 7857
    Reputação : 347
    Desde : 03/05/2012

    Re: Como utilizar o ADMA?

    Mensagem por LINK/2012 em Seg 17 Fev 2014, 01:50

    ps: o limite eh pq soh escreve 4 bytes sempre neh?
    sim


    ____________________
    "Give a man a game engine and he delivers a game. Teach a man to make a game engine and he never delivers anything."

    avatar
    Fabio
    Programador - Avançado
    Programador - Avançado

    Título : CEO da Fabio's Gambiarra Industries
    Mensagens : 18631
    Reputação : 338
    Desde : 04/05/2012
    Idade : 20
    Localização : Reserva, Paraná, Brasil, América Latina, America do Sul, América, Planeta Terra, Sistema Solar, Via láctea, Universo
    Link : gtamodvicio.blogspot.com

    Re: Como utilizar o ADMA?

    Mensagem por Fabio em Seg 17 Fev 2014, 12:24

    @Junior_Djjr escreveu:legal isso↑
    inutil mas eh legal pakas

    Era muito útil quando não se tinham read_memory/write_memory

    @Kevin Prestes escreveu:Compila pra Decimal sim Junior. Mistura isso com Array confunde maisto ainda. Mas é legal.

    Hexadecimal, decimal, octal, etc. é apenas uma forma pra humanos ler, tudo vira binário


    ____________________

    Modifico quase qualquer coisa.   :)
    ------------------>>>http://gtamodvicio.blogspot.com/<<<------------------

    Meu PC:
    Spoiler:

    Configurações PC:
    *Processador: Intel Core i7 4790K 4.00GHz LGA1150
    *Placa Mãe: GIGABYTE GA-H97M-D3H Intel (LGA1150)
    *HD: 1TB Seagate Barracuda 64MB Sata III 7200RPM (2x - RAID 0)
    *HD²: SAMSUNG M3 Externo USB 5400RPM 1TB
    *Placa de vídeo: Nvidia GTX660 2GB DDR5 192bit EVGA
    *RAM: 8GB DDR3 1600MHZ Kingston HYPER X BEAST (2x4GB)
    *Fonte: Corsair 600W Reais CX600M Modular - CP-9020060-WW (80 Plus Bronze)
    *Gabinete: Gabinete Raidmax Super Hurricane Branco - 248WB
    *Monitor: LG 23MP55HQ Full HD HDMI 23'
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Não quero acreditar, quero saber.
    Mensagens : 21619
    Reputação : 635
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: Como utilizar o ADMA?

    Mensagem por Junior_Djjr em Seg 17 Fev 2014, 13:25

    @Fabio escreveu:Hexadecimal, decimal, octal, etc. é apenas uma forma pra humanos ler, tudo vira binário
    sim, lembro q eu tinha lido isso, mas como nao me foco tanto em programação começou a bater essa duvida :hm:


    ____________________
    avatar
    Kevin Prestes
    Scripter CLEO - Intermediário
    Scripter CLEO - Intermediário

    Mensagens : 1892
    Reputação : 18
    Desde : 30/05/2013
    Localização : Estância Velha - RS

    Re: Como utilizar o ADMA?

    Mensagem por Kevin Prestes em Seg 17 Fev 2014, 20:24

    Já aprendi OK, podem Closar se quiserem.

    Conteúdo patrocinado

    Re: Como utilizar o ADMA?

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui 29 Jun 2017, 02:32