Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > hr.comp.programiranje.java > #27

Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u?

From Chupo <bad_n_mad@yahoo.com>
Newsgroups hr.comp.programiranje, hr.comp.programiranje.java
Subject Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u?
Date 2017-07-19 01:10 +0200
Organization Noname d.o.o.
Message-ID <MPG.33d8b3d68ccdbc5698afaf@news.t-com.hr> (permalink)
References (9 earlier) <okfc5i$vtn$1@sunce.iskon.hr> <MPG.33d58695c85cc16a98afad@news.t-com.hr> <oki3vr$2tl$1@sunce.iskon.hr> <MPG.33d75a81ee98a98098afae@news.t-com.hr> <okl956$h69$1@sunce.iskon.hr>

Cross-posted to 2 groups.

Show all headers | View raw


In article <okl956$h69$1@sunce.iskon.hr>, Bruno Babic <a@b.c> says...
> Istina, svaki cycle se mora emulirati jer razliciti efekti ustvari 
> cekaju da VIC dodje sa iscrtavanjem do neke linije ekrana kako bi 
> zapoceli svoj posao... ako se preskoci jedan cycle, teoretski se kod na 
> tom dijelu nece pozvati sve do slijedeceg iscrtavanja (kada se mozda 
> opet ne pozove) itd.


Na Spectrumu se takvi efekti mogu postici jedino tako da u interrupt 
rutini potrosis odredjeni broj T-stanja dok elektronski snop ne stigne 
na trazeno mjesto. Intrrupt se generira s VBLANK kad pocinje vertrical 
retrace i onda naprije treba pocekati da snop stigne natrag gore pa do 
vidljivog dijela ekrana i onda treba cekati u petlji koja uvijek traje 
tocno toliko taktova koliko traje iscrtavanje jedne linije. Posljedica 
je da cim se efekt nalazi nize ostaje manje vremena za stvari van 
interrupt rutine. Tako se moze crtati po borderu ili se moze postici 
vise od dvije boje po 8x8 pixela. Pretpostavljam da se na Pac-Man 
hardware-u na slican nacin moze iscrtati vise sprite-ova nego sta ih 
ima u hardware-u i da se tako moze postici vise od 4 boje po karakteru, 
napisao sam rutinu koja bi na pravom harware-u trebala raditi ali na 
MAME-u se to ne moze provjeriti jer se u njemu ekran update-a istog 
trenutka cim se nesta upise u odgovarajuci registar - bez obzira na to 
gdje se trenutno nalazi elektroniski snop. U mojim komentarima na ovaj 
video sam napisao opis rutine:

https://youtu.be/4-o57DPCt8k


> Tamo negdje '95 sam sanjao u 6502 assembleru i znao sve C64 memorijske 
> lokacije napamet, a sada bih najvjerojatnije morao sve ispocetka uciti :)


Brzo bi se sjetio svega. Ja sam prije par godina iz zezancije napisao 
par interrupt rutina za Spectruma:

https://youtu.be/I-oCUoGAaPA

https://youtu.be/eGDLdf3nZL0

i odma sam se sjetio svega.

Da sam nekad imao crosscompiler i emulator... SjASMPlus kojega sam 
koristio je najbolji Z80 compiler kojeg sam vidio a uz to jos moze i 
generirati Spectrum-om snapshot (.sna) file kojega se onda samo otvori 
u emulatoru. U vrijeme dok sam stalno pisao programe za Spectrum sam 
program od par desetaka byte-ova mogo napisati direktno u .hex-u bez da 
sam ucitavao assembler. Eventualno sam tu i tamo pogledao opcode od 
neke instrukcije.

Jos i sad znam napamet adrese dosta sistemskih variabli ili vaznijih 
rutina u ROM-u a na Spectrumu nema memorijski mapiranih portova ili 
periferija nego se koriste IN i OUT instrukcije. Jedino sta je mapirano 
u memoriju je video RAM.


> Recimo to ovako - vise-manje sve sam naucio reverse-engineeringom 
> introa... a bome ekipa je se znala posteno potruditi da ti otezaju da 
> dodjes do njihovog koda.


Ja sam najvise naucio na skidanju zastita koje su stavili ljudi koji su 
probili komercijalne zastite. Njihove su nerijetko bile kompilicranije 
od komercijalnih jer su kombinirali stvari koje su naucili dok su 
probijali pojedinacne komercijalne zastite. I puno sam naucio iz 
analiziranja SAVE i LOAD rutina iz ROM-a i speed loader-a koje su 
koristile neke igre. Tu mora isto sve biti tocno do na takt a na Z80 to 
nije bas jednostavno postici jer trajanja instrukicija su od 4 do 23 T.

 
> Nebi me bilo tesko nagovoriti da se nadjemo i uzivo... ako se ne varam, 
> mi smo obojica u okolici VZ?


Moramo se jednom dogovoriti da se nadjemo. Ja sam u ZG ali sam jako 
cesto u okolici Toplica. Dok sam tu onda se s biciklom krecem u krugu 
od Kalnika do Ivanscice, Beletinca, Beretinca, Vidovca i okolice a s 
autom sam cesto u Varazdinu.


> Uh, ako je to zbilja tako onda doslovno moras sve raditi metodom 
> pokusaja i pogresaka, a to mi se cini kao iznimno dugotrajan proces.
> 
> Jesi li barem u stanju napisati jednostavan program koji npr. pomjera 
> sprite kako korisnik pomjera joystick? (pod uvjetom da znas otkud 
> procitati stanje joysticka)


Za Pac-Man hardware mogu napisati sve i prije nego pocnem isprobavati s 
pisanjem koda za Scramble HW cu napraviti neku igru na Pac-Man-u. Mogo 
bi bas napraviti port Atomix-a!! :-)) S obzirom da Pac-Man HW nema ni 
jednu dodatnu tipku (Scramble ima Fire i Bomb) cu morati iskoristiti 
tipku za 1 Player Start. Mogu napraviti sve gdje ne trebaju kosi 
smjerovi, vise od dvije tipke (mogo bi iskoristiti i tipku za 2 Player 
Start) i gdje ne treba scroll background-a za po 1 pixel. Probao sam 
ocitavati kose smerove, napisao sam rutinu koja ispisuje hex vrijednost 
memorijske lokacije s koje se ocitava joystick ali nikad nije resetiran 
vise od jedan bit tako da se mogu ocitatati samo 4 smjera. Mislim da 
originalni Pac-Man-ov joystick niti nema hod u koso. Ovo sam si inace 
slozio za testiranje:

https://www.dropbox.com/sh/wzju38868exoybm/AAAWVaPnSqPqM07BIEYvfEsDa

Bas cu dok uhvatim malo vremena probati na Pac-Man hardware-u napraviti 
prvi ekran od Atomix-a. Za takve igre (u tu kategoriju spada i Sokoban) 
me je uvijek zanimalo kako izmisliti dovoljan broj sve tezih i tezih 
nivoa a koji se sigurno mogu rijesiti.


> Upravo tako, to je jedna od najosnovnijih zastita - dekriptiras svoj kod 
> kroz video RAM pa na taj nacin otezas posao onome tko zeli doci do 
> dekriptiranog koda jer ne smije napraviti nista sto mijenja sadrzaj 
> ekrana. No, onaj tko zna da lako promijenis lokaciju video RAM-a lako to 
> i zaobidje. Zato sam ubacio i jos jednu foru, a to je da se kod koji 
> dekriptira nalazi na memorijskim lokacijama koje su inace "ispod" ROM-a, 
> pa moras iskljuciti ROM da bi uopce mogao vidjeti moj kod.
 

Bilo je nevjerojatnih trikova za otezavanje pronalazenja koda. Recimo 
program se je s kazete poceo ucitavati u neku visoku memorijsku 
lokaciju i nakon sta je counter za memorijsku lokaciju u koju se byte 
ucitava doso do kraja RAM-a (65535) se je dalje 'ucitavalo' u 
memorijske lokacije od 0 pa dalje preko ROM-a i onda u video memoriju 
pa preko systemskih variabli gdje se je prebrisao vektor za skok u 
slucaju greske kod ucitavanja (ERRSP) a onda se je program nastavio 
ucitavati dalje preko nizih adresa RAM-a i snimka je namjerno imala 
jedan byte manje nego je bilo procitano iz header-a. To je uzrokovalo 
gresku kod ucitavanja zbog koje se je onda program pokrenuo od adrese 
na koju je pokazivao ERRSP a tamo je bila rutina za visestruko 
prebacivanje koda na drugu lokaciju i istovremeno XOR-iranje svakog 
byte-a s drugom vrijednoscu. Neki programi su cak radili XOR s 
vrijednoscu R registra koji se na Z80 nakon svake instrukcije povecava 
za jedan (osim sedmog bita koji se nikad ne mijenja) s tim da se za 
instrukcije koje imaju jedan od 4 prefixa R povecava za dva pa bi se 
moglo zakljuciti da se prefix racuna ko jos jedan instrukcija ali za 
instrukcije s 2 prefixa u opcode-u se R opet povecava za 2. Znalo je 
biti po 4 ili 5 premjestanja i XOR-iranja blokova byte-ova pa skoka na 
adresu u bloku i onda jos i premjestanje i XOR-iranje s R koji se 
stalno mijenja.

Ova zastita je osim otezavanja dolaska do koda uzrokovala i da program 
koji se ucitava bude duzi od ukupnog RAM-a (jer se je ucitavao i preko 
ROM-a pa su ti byte-ovi bili visak) tako da ga se nije moglo ucitati u 
neki od programa za kopiranje.

Da sam onda imao emulator i debugger ko sad bi stvari za koje su mi 
onda trebali dani napravio u par sati. Onda sam morao u RAM ucitavati 
dio po dio koda jer mi je dio RAM-a zauzimao disassembler pa sam, ako 
se je blok prije pokretanja kopirao na adrese koje je trenutno zauzimao 
disassembler, morao pripremiti rutinu koja ce otpakirati 'jedan korak' 
pa opet ispocetka i tako po 5-6 puta a kod je bio namjerno pisan tako 
da bi se moglo pomisliti da si ga pogresno otpakirao i da je to 
bezvezan niz byte-ova.
-- 
Let There Be Light
Custom LED driveri prema specifikacijama
http://tinyurl.com/customleddriver

Chupo

Back to hr.comp.programiranje.java | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-10 05:46 +0200
  Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-10 14:16 +0200
    Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-10 15:18 +0200
      Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-12 09:32 +0200
        Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-12 23:08 +0200
          Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 11:25 +0200
            Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 11:27 +0200
            Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-14 15:09 +0200
              Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-14 16:22 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-14 17:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-16 11:37 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-16 15:20 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-17 12:36 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-18 00:37 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-18 17:23 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-19 01:10 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-19 15:14 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-19 16:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Nikolaj Lazic <nlazicBEZ_OVOGA@mudrac.ffzg.hr> - 2017-07-19 17:08 +0000
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-20 18:04 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-20 19:17 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-20 20:42 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 03:58 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 05:14 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-21 12:04 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-21 17:24 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-08-04 13:10 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-04 17:21 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-08-07 17:30 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-07 18:30 +0200
                Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-08-07 18:35 +0200
        Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Chupo <bad_n_mad@yahoo.com> - 2017-07-16 01:04 +0200
          Re: Citanje color offset-a za svaki pixel u indexed color .bmp file-u? Bruno Babic <a@b.c> - 2017-07-16 11:32 +0200

csiph-web