ENTERPRISE KLUB
2019. május 25., 1055 Budapest, Nyugati tér 9. 14-19 óráig
Részletek
Welcome, Guest. Please login or register.


Author Topic: Assembly programozás (Read 133941 times)

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #225 on: 2011.October.04. 15:53:26 »
De ha leírod, mit kellene észrevenni egy laikusnak, szívesen kirakom!  :oops:

Elõször is hiányzik az évszám, az utolsó fordítás pontos ideje 1991.08.21 1:11, amúgy aznap lettem 16 éves :-) (Atyaég, ez már több mint 20 éve volt!  :shock: )
Besorolásra pontosabb lenne a "poénkodás, és némi grafika" :-)

Ez volt az éltem elsõ gépi kódú próbálkozása, mintegy 2 évi EP-zés után. Ekkor már két gépünk volt, hálózatba kötve, így úgy ment a fejlesztés, hogy az egyik gépen futott az ASMON, és a NET-re lett lefordítva, ill. a másik gépen betöltve a kipróbálandó program. Az adatfájlokat a saját magnójáról töltötte utána. A fejlesztés közben tettünk szert EXDOS kártyára ennek (mag annak, hogy beállítottam a TIME/DATE-t :-) ) köszönhetõ, hogy meg van a pontos idõpont.
Megjelenítónk ekkor még csak Junoszty tv volt, Kurczu-nak volt színes tévéje, így suli után nála keresgéltem színkódokat a rasztercsíkokhoz.

A program egybõl egy kis poénkodással indul, a névsorból a titokzatos Dr. Préry a padtársam volt 4 éven keresztül, neki Atari ST-je volt ebben az idõben, közremûködött pl a Interlace Demo képeinek elõállításában, valamint õ rajzolta a Zozolace Garfield-os képeit.

A kezdõképernyõ után jön az adatfájlok betöltése, a korábban már kitárgyalt módon a képernyõ közepére áthelyezett, de mégis mûködõ status sorral. (Egyébként ez az LPT-s trükk lett késöbb a ZT órájának a status sor fölé való helyezésére felhasználva.)
Az adatfájlok tömörítve lettek az egyszerû bájtismétlõdéseket kiszûrõ módszerrel, itt még a betömörítés egy külön BASIC programmal történt. Késõbb ez lett tovább fejlesztve a tömörített VS/VL-hez. (Még késõbb meg az egész évfolyamon egyedül *5-ös programozás érettségit írtam, amikor Pascal-ban tömörítõ programot kellett írni. Mindenki más rosszul volt, hogyan lehet ilyen bonyolult feladatot adni  :ds_icon_cheesygrin: )
Visszatérve a demo-hoz, az adatfájlok direkt maradtak sok külön fájlban, hogy jól látszódjon a status sor mûködõ volta.
Betöltés közben is van poénkodás, konfigurációtól függõen, a magnósokat egy lemezes üzenet lepi meg (helyezzünk lemezt az E: meghajtóba :-) ), a lemezeseket pedig kazetta CRC hiba, de EXDOS-os módra Retry/Abort kérdéssel :-)

Töltés végeztével egy figyelmeztetést kapunk, hogy ne Resettel lépjünk ki. Ha nem fogadjuk meg ezt a tanácsot, akkor egy újabb poénos üzenettel búcsúzik a program :-)
Ezután jön a fergeteges Paintbox munkásságom némi scroll és sok rasztercsík effekttel feldobva.
Következõ kép az elsõ Paintbox próbálkozások egyike volt, aminél ott poénkodtunk Apucival, hogy vajon mi a fenét is sikerült rajzolni. A magyarázatot olvashatjátok a képen  :ds_icon_cheesygrin:

A kép alatt egy egy újfajta rasztercsík effekt látható, továbbgondoltam 3D-ben a sima rasztercsíkot, ha úgy néz ki mint egy rúd, akkor félbe is lehet vágni! Ilyen félbevágott rasztercsík látható két darab, a 3D hatás erõsítésére a harmadik sima rasztercsík 8-as alakban kering ezek között.
Kilépéskor a rasztercsíkok valósítják meg a képernyõtörlést. Majd ezután egy poénkodó kérdés következik, miszerint örülnénk-e egy hideg resetnek?
A választól függõen más-más üzenettel búcsúzik a gép, itt ismét egy félbevágott, forgó rasztercsík a fõszereplõ, új effektként a domború felületére van nyomtatva a szöveg.

Ezután úgy tûnik, mintha resetelne a gép, azonban amikor tovább lépünk EP logótól, kiderül, hogy csak átverés volt, mert még fut a program, és megfenyeget minket a következõ résszel.
Ilyen reset szimuláció volt már korábban is egy demóban (most nem jut eszembe a neve, nekem igazából csak az EP logót átrajzoló, zenélõ része tetszett, azt külön ki is vettem EP-KACAJ.COM néven), viszont az csak az alapgép indulását utánozta.
Az enyém az EXOS-tól veszi a RAM listát, így bõvített gépen is annyi RAM-ot tesztel amennyi van, ill. érzékeli a gyorstesztes cartridge-t, így akkor gyorstesztet szimulál (az akkoriban létezõ eredeti Gyányi Sanyi félét, amit most pl. az ep128emu TASMON-os konfigjaiban láthatunk.)
Persze ma már ez is elavult, azóta jöttek újabb EXOS verziók, újabb gyorstesztek...
Ill. az egész program nem EP64 kompatibilis, mivel akkor arról még semmit se tudtam :-(
Igény esetén készülhet javított verzió  :lol:

És végül egy kis poénos üzengetés jut azoknak is, akik a program kódjába néznek bele :-)
 
« Last Edit: 2011.October.04. 16:09:09 by Zozosoft »

Offline szipucsu

  • EP addict
  • *
  • Posts: 7645
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Assembly programozás
« Reply #226 on: 2011.October.07. 14:38:55 »
Nem tudom, ebbe a topikba illik-e leginkább:
Nem lehet, hanem biztos! :-)
A maradék karakterekkel ne foglalkozz, a hoszbájt (05) adja meg az EXOS-nak, hogy mennyit nézzen.
Az miért rontja el a programot, ha a maradék karaktereket egyszerûen kitörlöm onnan, és így pár bájttal rövidebb lesz a file?
(Mivel csak a basic-et ismerem, arra tudok gondolni, hogy így is, úgy is megy sorban az utasításokon a gép, és ha még nem is kell azt a pár karaktert átugrani, még örül is neki.)
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #227 on: 2011.October.07. 15:06:24 »
Nem tudom, ebbe a topikba illik-e leginkább:Az miért rontja el a programot, ha a maradék karaktereket egyszerûen kitörlöm onnan, és így pár bájttal rövidebb lesz a file?
Azért mert a gépi kódú programban minden címkezelés (ugrás, eljáráshívás, "változók") közvetlenül direktben hivatkozik címekre.
Hogy Basicesen mondjam: nincs Renumber :-)
Ha pl valami az 1000. címre hívatkozik, de te elõle kitöröltél 3 bájtot, akkor a hívatkozás az eredetileg 1003. címen lévõ bájtot fogja elérni.
Hogy mûködjön a dolog, ahhoz megkéne keresni a programban minden címhívatkozást, és ami a törlés után van, azoknak az érték hárommal csökkenteni, hogy a helyükre mutassanak.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #228 on: 2011.October.07. 15:20:25 »
Egyébként pont ezzel szenvedek én is. Elkezdtem felboncolni a guruló-fáraós :-) Nasa&Guy demót, hogy majd kiszedjük az SNG lejátszást...
Elsõ lépésként rendbe akartam tenni az LPT kezelést, hogy legyen végre EP64 kompatibilis demó is. Itt sikerült is vagy 160 bájttal rövidebbre venni a kódot. Ekkor derült ki, hogy valahol bujkál egy rejtett direkt hivatkozás a byte_CFB nevû adatkupacra, mert ha az elmozdul az eredeti helyérõl, akkor elromlik a zene... a mellékelt fájlban ezért van egy rakás dw 0, hogy visszatolja a helyére.
Már több órát nézegettem, de még nem találtam meg, hol maradt még direkt hivatkozás.
(Visszafejtéskor a gépi direkt címzéseket az assemblernek szóló címkenevekre cseréljük, így aztán lehet majd betoldani, kitörölni a programból.)

Remélem, hátha valaki friss szemmel rögtön kiszúrja, mit néztem el!  :oops:


Offline geco

  • EP addict
  • *
  • Posts: 5328
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
Re: Assembly programozás
« Reply #229 on: 2011.October.07. 15:59:10 »
Egyelőre nem találtam semmit, pedig néztem, már majdnem megvakultam :D
Az add hl,-es részek végére nem jutottam, meg még ami felmerült bennem, hogy valami bittologatós rész eredménye is lehet.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: Assembly programozás
« Reply #230 on: 2011.October.07. 16:32:42 »
Szerintem nem a byte_CFB-vel van probléma, hanem az adatfile-okkal, amit ez után tölt be a program. A CFB-s területre nem találtam hivatkozást a debuggerrel a kezdőcím 1000h-val való eltolása után. Viszont egy abszolút címet már találtam a word_B9A címkénél. Érdemes átnézni az adatokat, mert azokban is előfordulhatnak címek.

UI.: Még egy abszolút cím: "ld a, (1009h)". De talán egyszerűbb lenne az adatokat az eredeti fix címre tölteni, és nem a VEGE címkének megfelelően ?
« Last Edit: 2011.October.07. 16:42:04 by IstvanV »

Offline IstvanV

  • EP addict
  • *
  • Posts: 4806
  • OS:
  • Linux 64 bit Linux 64 bit
  • Browser:
  • Firefox 5.0 Firefox 5.0
    • View Profile
Re: Assembly programozás
« Reply #231 on: 2011.October.07. 16:43:10 »
Ha a forráskódban kicserélem a fix 1009h és 100Dh címre való hivatkozásokat VEGE+20Fh-ra illetve VEGE+213h-ra, akkor már jónak tűnik.

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #232 on: 2011.October.07. 16:49:00 »
Ha a forráskódban kicserélem a fix 1009h és 100Dh címre való hivatkozásokat VEGE+20Fh-ra illetve VEGE+213h-ra, akkor már jónak tûnik.
Köszi!  :smt038

Offline szipucsu

  • EP addict
  • *
  • Posts: 7645
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Assembly programozás
« Reply #233 on: 2011.October.08. 11:12:08 »
Azért mert a gépi kódú programban minden címkezelés (ugrás, eljáráshívás, "változók") közvetlenül direktben hivatkozik címekre.
Hogy Basicesen mondjam: nincs Renumber :-)

Akkor csoda, hogy egyáltalán mûködött úgy is a program és csak hang nem volt, nem? :D
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows 7 Windows 7
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #234 on: 2011.October.08. 11:21:53 »
Akkor csoda, hogy egyáltalán mûködött úgy is a program és csak hang nem volt, nem? :D
Igen  :ds_icon_cheesygrin:

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows 7 Windows 7
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #235 on: 2011.October.08. 23:22:45 »
VEGE+20Fh-ra illetve VEGE+213h-ra, akkor már jónak tûnik.
Ahhoz, hogy azt megtudjuk, ezek mire is vonatkoznak, ismerni kéne az .SNG fájlok felépítését...
...kb 3 órányi googlézéssal, nem találtam semmit! Pedig mint kiderült, Music Studio nem csak Atarira volt, hanem Apple II-re, Amigara, C64-re, de még PC-re is... de sehol egy nyamvadt fájl formátum leírás  :evil:
Nem elõször gondolom azt, hogy csak az EP-nek és a Spectrumnak van rendes internetes archívuma  :)

Végül véletlenül akadtam egy Ataris gyûjteményre, ahol szerepel egy ilyen
Quote
songdump/   Dump a music studio song, playing the notes as they occur.
Belenézve ott egy leírás, amivel meg van fõnyeremény!  :ds_icon_cheesygrin:
Quote
Song file structure

512 byte header structure:
   10 byte header CD,'Mstudio',CD,02
   15*10 byte atari instrument names (null terminated)
   15*8 byte atari instrument settings
   15*10 byte casio instrument names (null terminated)
   15 bytes casio settings
   15 bytes casio settings
   5 pointers (file displacement) to lyric lines
   32 byte null terminated title string

after the 512 byte header (hexadecimal unless noted):

track 1-4 bitmap (4 * 1 word)
   instrument active, [15:14:13...2:1:track enable]
00:80:01:key
   1= C G D A E B F# C# F Bb Eb Ab Db Gb Cb =15
83:time
   1= 2/2 3/2 2/4 3/4 4/4 5/4 6/8 =7
81:tempo
   quarternote = tempo, 57..200
84:01:volume
   0F pianissimo .. fortissimo 7F

music, 00 delimits beginning of column data, 0xff marks end of music info
82
   bar
85:number
   repeat number of times
86
   end repeat

note format
 0 : tie start : tie end : rest(not note) : [instrument:4]
 [0=inkey 1=nat 2=sharp 3=flat :2] : accent : [duration:5]
 pitch in C major midi coding (18(24d)=C2)

  duration: 12d = quarter note, (+2 for dotted(*3/2) , -2 for triplet (*2/3) )
   9d = 1/8th , 6d = 1/16th  15d = half, 18d = whole, etc.
  pitch is always the natural note, later adjusted for key, or explicit sharp,
   natural, or flat.
  d means decimal.  all other numbers in hex.

Ez alapján a programban hivatkozott elsõ érték a tempó, a második pedig zeneadatok elejére mutat.

Amúgy meg ennyit arról, hogy a Google mindent tud  :evil: na majd most jól beindexeli az EP fórumról az Atari .SNG leírást  :ds_icon_cheesygrin:

Offline endi

  • EP addict
  • *
  • Posts: 7007
  • Country: hu
  • grafikus, játékfejlesztõ, programozás, scifi, tudományok, vallás
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Opera 9.80 Opera 9.80
    • View Profile
    • Honlapom
Re: Assembly programozás
« Reply #236 on: 2011.October.08. 23:57:55 »
Ide írom be, jobb topikot nem tudok.
Vannak (voltak) olyan EP-k amiken az IM2 megszakítás nem mûködött rendesen, volt már errõl szó itt valahol a fórumon. Egyik porton ami az IM2 megszakítás rutin címének alsó bájtját adta (valami ilyesmi) random érték volt.
Na most. Tök kíváncsi lennék hogy milyen jelet rögzítenénk, ha kiírnánk ennek a portnak az értékét memóriába. :) Aztán kimentenénk egy file-ba és pc-n is meg lehetne vizsgálni.

Lehet hogy pár EP-nek valódivéletlen-generátora volt? :)
Tök kíváncsi lennék honnan jön az a "zaj" ami ott van.
A diplomás magyar programozó megcsinált egy pacmant egy év alatt, majd lefikázta a világ legjobb játékait. :D

Offline szipucsu

  • EP addict
  • *
  • Posts: 7645
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re: Assembly programozás
« Reply #237 on: 2011.October.08. 23:58:54 »
Az SNG és a MIDI fájlok felépítésének ismeretében távolabbi cél lehet talán, hogy MIDI -> SNG konverter készülhessen. Ez azt jelenti, hogy PC-n kényelmesen midi formátumba lehetne a zenét beírni, amit aztán átkonvertálva EP-n meg lehet hallgatni Dave-es hangzásban. Bár lehet, nem sok haszna lenne már. :D De azért érdekes lenne.
De lehet, hogy már létezik mid->sng konverter, ha az sng annyira elterjedt.
SOUND SOURCE 3,STYLE 16,LEFT 16,RIGHT 64,SYNC 2
SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 2
SOUND PITCH 25,SYNC 2
Videos

Offline Povi

  • EP addict
  • *
  • Posts: 1847
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0 Firefox 7.0
    • View Profile
    • http://povi.fw.hu
Re: Assembly programozás
« Reply #238 on: 2011.October.27. 10:25:29 »
Van egy játék, ahol külön fájlban van tárolva a hiscore.
Viszont magnóról elég kényelmetlen lenne a fájl használata (a betöltés még nem, de a mentés igen).

Meg lehet-e oldani azt elegánsan, hogy magnós rendszerben ne mentse el a hiscore fájlt, csak ha lemezes / vinyós / file eszköz van?

Én azt találtam ki, hogy "DISK:HISCORE.DAT" nevet adok a fájlnak, így magnóra nem írja ki, csak lemezre (vinyóra nem tudom), de FILE: eszközre se (emulátoron).

Van-e valami megoldás, hogy az EXOS-t megkérdezzük, mi az alapértelmezett eszköz, és ha az nem TAPE:, akkor írjon?
*** Speicherplatz zu klein

Offline Zozosoft

  • EP addict
  • *
  • Posts: 13334
  • Country: hu
  • OS:
  • Windows XP Windows XP
  • Browser:
  • Firefox 7.0.1 Firefox 7.0.1
    • View Profile
    • http://enterprise.iko.hu/
Re: Assembly programozás
« Reply #239 on: 2011.October.27. 10:58:30 »
Van-e valami megoldás, hogy az EXOS-t megkérdezzük, mi az alapértelmezett eszköz, és ha az nem TAPE:, akkor írjon?
Lenne rá szép megoldás: 3-as EXOS változó értéke 1.
Viszont ezzel felfedeztem egy hibát a FILEIO.ROM-ban: nem fájl-orientált eszköznek mutatja magát. (Azaz marad a 3-as változó értéke 0 mint a TAPE esetén.)