Enterprise Forever  |  :HUN  |  Programozás  |  Topic: ASM EP-n - hogyan kezdjem?
Author Topic: ASM EP-n - hogyan kezdjem?  (Read 5858 times)« previous next »
Jubatian
Newbie
Offline Offline

Hungary

Posts: 20


OS:
Linux
Browser:
Firefox 3.6.15


View Profile WWW
New Posts
« on: 2011.March.22. 22:39:21 »

Üdv!

Kis segedelmet szeretnék kérni abban, hogyan tudnám az EP-t Assemblerben programozni? Azaz konkrétan abban, mi is kellene ahhoz, hogy egy ilyen ASM program elinduljon pl. BASIC alól betöltés és futtatásra. C64-en ezt úgy oldottam meg, hogy valahonnan kihalásztam, mi is van a .prg fájlokban, aztán írtam egy stub-ot (Egy SYS ugrás az utána következő ASM első utasítására), amit a fordítóval generált bináris elejére applikálok. Valami ilyesmihez szeretnék EP-vel is eljutni. Hol kellene ugyan nézelődnöm? Esetleg itt ez azért bonyolultabb lenne, hogy az EXOS-al is jóban legyek? Hát na, a BASIC-et annyira nem szeretem, bár próbálgattam azért Smiley

Esetleg így a technikaiakról akad ez-az? Játékok szervezése például? Arra gondolok, hogy hogyan alakulnak az alap gép-specifikus dolgok, például akár a játékok mondjuk miért olyan fájlokra vannak lebontva, amilyenekre (Ennek az egy-egy szegmensbe szánt binárisnak az lenne a szerepe, hogy az indító .com majd bepakolná őket egyenként betöltéskor? Momentán a Wriggler van előttem). Vagy csak én nem nézelődnék a dolog után jó helyen, pedig ott az orrom előtt...

Köszi a segítséget!
Logged

Enterprise Forever
« on: 2011.March.22. 22:39:21 »

 Logged

Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 3.6.15


View Profile WWW
New Posts
« Reply #1 on: 2011.March.22. 23:32:39 »

Használ EP assemblert (HEASS ajánlott), és akkor csak annyi a dolgod, hogy 5-ös fejléccel fordítod le a programodat. A LOAD ezt 100H-tól fogja betölteni, és indítani, lásd új alkalmazói programok betöltése.

Itt egy példaprogramocska, ami tartalmazza a program szabályos indulását, memória foglalást, LPT felépítést, kilépést. A főprogram jelenleg kimerül SPACE gomb figyelésben
Code
                MACRO EXOS n
                 RST 30H
                 DB  n
               ENDM
 
ORG 0F0H
 
;16 bájtos EXOS fejléc
 
DB 0,5 ;5-ös típus, vagyis gépi kódú felhasználói program
DW VEGE-100H ;hossz 16 biten
DB 0,0,0,0,0,0,0,0,0,0,0,0 ;többi bájt nem használt
 
;program kezdete, 100H-ra töltödik be
 
               LD SP,100H ;felhasználói veremmutató beállítása, 164 bájt szabad
;Az EXOS-nak saját belső verme van a rendszerszegmensben
;EXOS hívások vagy EXOS megszakítás kiszolgálása esetén
;8 bájt kerül felhasználásra a felhasználói veremből
               LD HL,HIBA
               LD (0BFF8H),HL ;EXOS melegindítási rutin címének beállítása
 
;ez a rutin fut le a Reset gomb egyszeri megnyomásakor
;jelen esetben ugyanazt a kilépési rutint használjuk,
;amit egyéb hibák esetén is. A HIBA rutin felszabadítja
;a programunk által használt memóriát, majd szabályosan
;kilép a villogó ENTERPRISE felírathoz.
;így a reset megnyomásakor a program szabályosan kilép,
;nem történik teljes hidegindítás, így a gépben lévő
;adatok (pl RAMDISK vagy rendszerbővítők) megőrződnek
 
               LD A,12 ;memória várakozások
               OUT (191),A ;tiltása (opcionális :-)
 
;keretszín feketére állítása
 
               LD BC,100H+27 ;B=1 írás kódja
;C=27 rendszerváltozó száma (BORDER)
               LD D,0 ;változó új értéke
               EXOS 16 ;EXOS változó kezelése
 
               CALL VID ;egy videó szegmens igénylése
               JP NZ,HIBA ;ha nem sikerült, akkor kilépés
               LD A,C ;kapott szegmens számának
               LD (VIDS),A ;letárolása
OUT (0B3H),A ;szegmens belapozása a 3. lapra
 
 
               LD DE,0 ;szegmensszám alsó
               RRA ;két bitje
               RR D ;lesz a videócím
               RRA ;felső két
               RR D ;bítje
               LD (VIDCIM1),DE ;ezzel adjuk majd meg
;a pixel adatok helyét
 
LD HL,3F00H ;a pixel adatok mögött
ADD HL,DE ;lesz a képernyőt leíró
LD (LPTCIM),HL ;sorparaméter tábla videó címe
               EXOS 24 ;szegmens igénylése
JP NZ,HIBA ;ha nem sikerült, akkor kilépés
               LD A,C ;kapott szegmens számának
               LD (P1S),A ;letárolása
               OUT (0B1H),A ;és belapozása az 1. lapra
               EXOS 24 ;szegmens igénylése
JP NZ,HIBA ;ha nem sikerült, akkor kilépés
               LD A,C ;kapott szegmens számának
               LD (P2S),A ;letárolása
               OUT (0B2H),A ;és belapozása a 2. lapra
 
LD HL,4000H ;minden
LD DE,4001H ;kapott
LD (HL),L ;memória
LD BC,0C000H ;törlése
LDIR
 
               LD HL,LPT ;sorparaméter tábla
               LD DE,0FF00H ;másolása a videó
               LD BC,LPTH ;szegmens végére
               LDIR
 
               LD HL,(LPTCIM) ;LPT videó címe
               LD B,4 ;4 bittel elforgatás
LPTA:           SRL H
               RR L
               DJNZ LPTA
               LD A,L ;alsó bájt
               OUT (82H),A ;kiküldése NICK-nek
               LD A,H ;felső 4 bit
               OR 0C0H ;NICK futás engedélyezése,
;és áttérés az új LPT-re
;az aktuális képkocka végén
               OUT (83H),A ;kiküldés NICK-nek
 
;készen áll a memória, és felépült a 320x200-as 4 színű képernyő
;kezdődhet a főprogram
 
 
               DI
               LD A,8 ;SPACE sorának
               OUT (0B5H),A ;kijelőlése a billentyűzet mátrixban
SPACE           IN A,(0B5H) ;billentyűzet mátrix kijelölt sorának olvasása
               BIT 6,A ;SPACE gomb lenyomva?
               JR NZ,SPACE ;várakozás, ha nem
               JP HIBA ;kilépés
 
;EP billentyűzetmátrix:
;        b7    b6    b5    b4    b3    b2    b1    b0
;Sor    80H   40H   20H   10H   08H   04H   02H   01H
; 0   B.SH.     Z     X     V     C     B     \     N
; 1    CTRL     A     S     F     D     G  LOCK     H
; 2     TAB     W     E     T     R     Y     Q     U
; 3     ESC     2     3     5     4     6     1     7
; 4      F1    F2    F7    F5    F6    F3    F8    F4
; 5         ERASE     ^     0     -     9           8
; 6             ]     :     L     ;     K           J
; 7     ALT ENTER   BAL  HOLD   FEL  JOBB    LE  STOP
; 8     INS SPACE J.SH.     .     /     ,   DEL     M
; 9                   [     P     @     0           I
 
 
HIBA:           DI
               LD SP,100H ;felhasználói veremmutató beállítása
               LD A,255 ;rendszerszegmens
               OUT (0B2H),A ;2. lapra
               LD HL,HIBA
               LD (0BFF8H),HL ;melegindítási cím beállítása
               LD HL,(0BFF4H) ;EXOS LPT címe
               SET 6,H ;konvertálás videócímmé
               LD B,4 ;4 bittel elforgatás
ELPT:           SRL H
               RR L
               DJNZ ELPT
               LD A,L ;alsó bájt
               OUT (82H),A ;kiküldése NICK-nek
               LD A,H ;felső 4 bit
               OR 0C0H ;NICK futás engedélyezése,
;és áttérés az új LPT-re
;az aktuális képkocka végén
               OUT (83H),A ;kiküldés NICK-nek
               LD A,0F5H ;eredeti
               LD HL,1837H ;EXOS IRQ rutin
               LD (38H),A ;kezdetének
               LD (39H),HL ;visszaállítása
;arra az esetre, ha a 38H-ra
;helyezett JP-vel átvettük volna
;saját rutinnal az IRQ kezelést
 
               LD C,40H ;felhasználói RAM felszabadítása
               EXOS 0 ;rendszer reset hívása
               LD A,1 ;1-es ROM szegmens
               OUT (0B3H),A ;3-as lapra
               LD A,6 ;6-os funkció=bejelentkező képernyő
               JP 0C00DH ;vezérlés átadása a ROM-nak, vagyis kilépés
 
;videószegmens igénylő rutin
 
VID:            LD HL,VEGE ;puffer terület
               LD (HL),0 ;lista elejének jelzése
KER:            EXOS 24 ;szegmens igénylése
               JR Z,NAMIVAN ;siker esetén szegmensszám vizsgálat
               CP 7FH ;hibakód=a kiutalt szegmens a rendszerrel
;megosztott közös használatú?
               JP NZ,HIBA ;egyéb hiba esetén kilépés
NAMIVAN:        EX AF,AF' ;hibakód háttérbe
               LD A,C ;kapott szegmens száma
               CP 0FCH ;<0FCh?, azaz mint a legkisebb
;videószegmens
               JR NC,NEMKER ;kilépés hamár videó
;szegmenst kaptunk
               INC HL ;következő puffercím
               LD (HL),C ;szegmensszám letárolása
               JR KER ;újabb szegmens igénylése
NEMKER          PUSH BC ;szegmensszám mentése
VISSZA          LD C,(HL) ;felesleges szegmens
               EXOS 25 ;felszabadítása
               DEC HL ;elöző puffercím
               JR Z,VISSZA ;felszabadítás folytatása
;amikor a lista elején lévő 0-val hívjuk
;a szegmens felszabadítása funkciót, akkor
;hiba keletkezik, amely az NZ flag-gel kilép
;a ciklusból (0=ROM, így nem lehet felszabadítani)
               EX AF,AF' ;hibakód előtérbe
               POP BC ;kapott szegmensszám
               OR A ;Z flag beállítása a hibakód alapján
;NZ jelzi ha megosztott szegmenst kaptunk
               RET
 
VIDS            DB 0
P1S             DB 0
P2S             DB 0
LPTCIM          DW 0
 
;NICK sorparaméter tábla (LPT)
 
LPT:        DB -200 ;200 sor
           DB 32H  ;0 01 1 001 0
                   ;VINT=0, nincs megszakítás
                   ;Colour Mode=01, 4 szín mód
                   ;VRES=1, teljes függőleges felbontás
                   ;Video Mode=001, pixel grafikus mód
                   ;Reload=0, még nincs vége az LPT-nek
           DB 11   ;bal margó=11
           DB 51   ;jobb margó=51
VIDCIM1:    DW 0    ;elsődleges videócím, pixel adatok kezdete
           DW 0    ;másodlagos videócím, pixel grafikánál nem használt
PALETTE:    DB 0,36,219,73,0,0,0,0 ;fekete, kék, sárga, piros (a nem használt színek feketék)
 
           DB -50,12H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
              ;50 keretszínű sor, ez határozza meg a also margó nagyságat,
 
           DB -3,16,63,0,0,0,0,0,0,0,0,0,0,0,0,0
              ;3 fekete sor, a szinkronizáció kikapcsolva
 
           DB -4,16,6,63,0,0,0,0,0,0,0,0,0,0,0,0
              ;4 sor, a szinkronizacio bekapcsolva
 
           DB -1,90H,63,32,0,0,0,0,0,0,0,0,0,0,0,0
              ;1 sor, a szinkronizáció a sor felénél kikapcsol,
              ;a NICK chip ennél a sornal ad megszakitást
 
           DB 252,12H,6,63,0,0,0,0,0,0,0,0,0,0,0,0
              ;4 fekete sor
 
           DB -50,13H,63,0,0,0,0,0,0,0,0,0,0,0,0,0
              ;50 keretszínű sor, ez határozza meg a felső margó nagyságát
 
 
LPTH:           EQU $-LPT ;LPT hossza
VEGE EQU $  ;programkód vége, innentől szabad terület
               END
 
 
 

Az elején itt általános Z80 assemblerhez létre van hozva az EXOS macro, valamint adatként definiálva az EP fájlfejléc.
HEASS esetén így kell kezdeni:
Code
		HEADER 5		;5-ös típus, vagyis gépi kódú felhasználói program
               OBJECT filename.com ;lefordított program fájl neve
ORG 0100H
 
;program kezdete, 100H-ra töltödik be
Logged


Ferro73
EP user
*
Offline Offline

Hungary

Posts: 317

OS:
Windows XP
Browser:
Firefox 2.0.0.9


View Profile
New Posts
« Reply #2 on: 2011.March.23. 05:29:21 »

Én meg az ASMEN-t ajánlom ha nemvagy biztos a rutinok müködésében,
Ennek is van EDITOR, forditó és Debugge? rész ahol a rutint, programrészt figyelheted lépésröl, lépésre vagy csak a végeredmént.
Hátránya  max 40-48Kb lehet az *.ASM fájl
Logged

geco
EP addict
*
Offline Offline

Hungary

Posts: 1170


OS:
Windows XP
Browser:
Firefox 3.6.15


View Profile
New Posts
« Reply #3 on: 2011.March.23. 08:59:24 »

Én a SJASM-ot ajánlom, hozzá a CONTextet Z80 assembly highligterrel, így nincs semmilyen memóriakorlát a forrás méretére Cheesy, igaz ez mind PC-s tool, de nagyban megkönnyíti az ember életét, debugolni meg ott az EP128 debuggere, attól jobb, használhatóbb egy emulátorban sincs.
Csak annyi, hogy minden egyes 5-ös fejlécű programot a Zozo példájában leírt sorokkal kell kezdeni a ";program kezdete, 100H-ra töltödik be" sorig, meg természetesen a forrás végére betenni a VEGE címkét Smiley
Logged

Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 3.6.15


View Profile WWW
New Posts
« Reply #4 on: 2011.March.23. 09:04:43 »

Debugge? rész ahol a rutint, programrészt figyelheted lépésröl, lépésre vagy csak a végeredmént.
Erre manapság az ep128emu debuggere sokkal-sokkal-sokkal-sokkal-...  ds_icon_cheesygrin alkalmasabb!
Logged


geco
EP addict
*
Offline Offline

Hungary

Posts: 1170


OS:
Windows XP
Browser:
Firefox 3.6.15


View Profile
New Posts
« Reply #5 on: 2011.March.23. 14:08:47 »

bocsánat, sajtóhiba történt, EP128emu-t akartam írni én is,csak az emu lemaradt Cheesy
Logged

szipucsu
EP addict
*
Offline Offline

Hungary

Posts: 2887


OS:
Windows XP
Browser:
Firefox 3.6


View Profile WWW
New Posts
« Reply #6 on: 2011.March.23. 15:03:39 »

bocsánat, sajtóhiba történt, EP128emu-t akartam írni én is,csak az emu lemaradt Cheesy
Nekem fel se tűnt, alapból arra gondoltam.
Logged

Az EP jobb volt, mint a PC, nem volt hirtelen kikapcsolás után scandisk, és nem kellett újratelepíteni a Windows-t, kék képernyő pedig legfeljebb a DOS ablakban volt, az is más funkcióval.
The EP was better than the PC- no scandisk/reinstall/blue screen.

Ferro73
EP user
*
Offline Offline

Hungary

Posts: 317

OS:
Windows XP
Browser:
Firefox 2.0.0.9


View Profile
New Posts
« Reply #7 on: 2011.March.23. 18:43:25 »

Erre manapság az ep128emu debuggere sokkal-sokkal-sokkal-sokkal-...  ds_icon_cheesygrin alkalmasabb!
Gondolod ?
Csináljak külön egy betöltö rész csak azért hogy teszteljen a rutint, ha nemjó inditsam újra a gépet /EMU-t/ modositsam a rutint forditsam le betöltöbe /5-ös fejléc/..... tisztára mikor TAPE: egységem volt
Akkor már ASMEN-ben röktön memoriába forditom és máris tesztelhetem ha nemjó akkor modositom a rutint az EDITOR-ban leforditom a memoriába, és még kise léptem a programból.
Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2104

OS:
Linux 64 bit (Suse)
Browser:
Firefox 3.5.4


View Profile
New Posts
« Reply #8 on: 2011.March.23. 19:48:41 »

Én a SJASM-ot ajánlom

Ez az assembler megtalálható a letöltéseknél is az EPvideoconv csomagban, amely Linux verziót is tartalmaz, egy javítással (eredetileg lefagyott module/endmod használatakor). Hasznos tulajdonsága, hogy egy .lst kiterjesztésű file-ba disassembly listát készít az eredeti forráskódot címekkel és a lefordított gépi kód byte-jaival kiegészítve, ami debug célra használható.

Gondolod ?
Csináljak külön egy betöltö rész csak azért hogy teszteljen a rutint, ha nemjó inditsam újra a gépet /EMU-t/ modositsam a rutint forditsam le betöltöbe /5-ös fejléc/..... tisztára mikor TAPE: egységem volt

A debuggerben van L parancs (erről a wiki-n található leírás), amellyel fejléc nélküli bináris file közvetlenül a memóriába tölthető, így elkerülhető az emulált gép újraindítása. Smiley Természetesen az új kódot le kell fordítani pl. SjASM-el és újra betölteni - ez azonban ismételt fordításnál csak fel + Enter billentyű a parancssorban, illetve újra Enter a monitorban valószínűleg már meglevő L parancson - viszont elkerülhető az ASMON lassúsága és korlátozásai. Rövid, néhány soros módosításra használható az A monitor parancs is.
Logged

Jubatian
Newbie
Offline Offline

Hungary

Posts: 20


OS:
Linux
Browser:
Firefox 3.6.16


View Profile WWW
New Posts
« Reply #9 on: 2011.March.24. 17:27:28 »

Ejha! Szép kis bevezető, köszönöm! Na, és úgy látom, akkor a Linuxom alatt se lesz nyűg a dolog, assembler, kazetta - emulátor (MrPrise - TAPir), aztán az audiokábelen már csoroghat is át a próba az asztal túlvégére, az EP hátujába! Smiley Háát, ha már van gép, szerintem nem fogok én emulálni, bár nem tudom. Már hozzászoktam, hogy nincsenek debuggereim, csak amit én lapátolok a kódba. Lényeg: Indulhat a játék! Köszi a segítséget!
Logged

Attus
EP lover
*
Offline Offline

Hungary

Posts: 887


OS:
Linux
Browser:
Firefox 3.6.15


View Profile
New Posts
« Reply #10 on: 2011.March.24. 22:24:48 »

Valós gépen és nem emulátorban...
Én a MON -GEN párost használtam, mindent a MON-ban próbáltam ki először. Assembly rutinokat meg az asmon -ban, vagy a fenas -ban írtam, ezeket lefordított eredményét meg a MON-ba töltve futtattam.
Annál jobb debugger akkortájt nem volt, az asmon a nyomába sem érhet.
Rövidebb rutinkákat meg közvetlen hexa pötyogéssel illesztettem be.
A GEN is nagyon jó assembler, kicsit nehézkes, de nagytudású és nagyon passzol a MON -hoz. Az ed editoromat például azzal írtam.
Logged

IstvanV
EP addict
*
Offline Offline

Posts: 2104

OS:
Linux 64 bit (Suse)
Browser:
Firefox 3.5.4


View Profile
New Posts
« Reply #11 on: 2011.April.03. 17:45:28 »

A fenti példa program kisebb módosításokkal, és kiegészítve IVIEW formátumú file választásával (ehhez a program beépített FILE bővítést használ) és megjelenítésével:
  * asmdemo.s (11.15 KB - downloaded 32 times.)
  * asmdemo.asm (12.08 KB - downloaded 34 times.)
  * asmdemo.hea (7.2 KB - downloaded 34 times.)
  * file.s (16.83 KB - downloaded 32 times.)
  * file.asm (16.83 KB - downloaded 35 times.)
  * file.hea (7.5 KB - downloaded 34 times.)
  * asmconv.sh (0.46 KB - downloaded 28 times.)
Az .s kiterjesztésű file-ok SjASM-el fordíthatók. Az .asm-ek átmeneti file-ok, amelyeket HEASS segítségével lehet .HEA formátumra konvertálni; ehhez előbb "TAB/DELETE TAB-POINTS" (F2,F2) is kell, mert egyébként a HEASS a forrásszöveget eltolja jobbra és nem ismeri fel a címkéket ds_icon_redface A konvertálás ezt követően a "FILE/CREATE", majd "CONV/ASC LOAD" használatával történik.
Az .s -> .asm konverzióhoz az "asmconv.sh" shell scriptet használtam, amely az UTF-8 formátumú ékezetes karaktereket HFONT-ra konvertálja, az IXL/IXH/IYL/IYH regisztereket átnevezi "I" nélküli változatra, a TAB karaktereket szóközökké alakítja, és LF -> CR-LF sorvégződés konverziót is végez, ha a bemeneti file unix formátumú.

A programmal megnyitható IVIEW kép csak 320x200 méretű, 4 színű, nem interlace módú, és fix palettájú lehet (-mode 1 -size 40 200 -palres 0 -scalemode 1 -quality 9 -outfmt 1).

Egy másik példa program:
  * asmdemo2.s (23.42 KB - downloaded 39 times.)
  * asmdemo2.asm (24.88 KB - downloaded 35 times.)
  * asmdemo2.hea (13.3 KB - downloaded 36 times.)
Sok értelme ugyan nincs, de tartalmaz megszakítás kezelést, rajzolást, és kezdetleges hangot is.
Logged

Zozosoft
EP addict
*
Online Online

Hungary

Posts: 5611


OS:
Windows XP
Browser:
Firefox 4.0


View Profile WWW
New Posts
« Reply #12 on: 2011.April.03. 19:05:52 »

Az .asm-ek átmeneti file-ok, amelyeket HEASS segítségével lehet .HEA formátumra konvertálni; ehhez előbb "TAB/DELETE TAB-POINTS" (F2,F2) is kell, mert egyébként a HEASS a forrásszöveget eltolja jobbra és nem ismeri fel a címkéket ds_icon_redface
Én egy TAB pontot szoktam rakni az első oszlopba, az is jó. Aztán el kell menteni a HEASS Setup-ot, és legközelebb már nem kell foglalkozni vele.


Quote
Az .s -> .asm konverzióhoz az "asmconv.sh" shell scriptet használtam, amely az UTF-8 formátumú éke
Ezt mivel lehet futtatni?
Logged


Ferro73
EP user
*
Offline Offline

Hungary

Posts: 317

OS:
Linux
Browser:
Firefox 4.0


View Profile
New Posts
« Reply #13 on: 2011.April.03. 20:26:05 »


Ezt mivel lehet futtatni?
[/quote]
Olyan linuxos jellegü lehet
Logged

Attus
EP lover
*
Offline Offline

Hungary

Posts: 887


OS:
Linux
Browser:
Firefox 3.6.15


View Profile
New Posts
« Reply #14 on: 2011.April.05. 17:40:45 »

Jó kis bash szkript, gondolom jólirányzott "sed" parancsokkal telitűzdelve a cserékhez.
Logged

Enterprise Forever
« Reply #14 on: 2011.April.05. 17:40:45 »

 Logged
Tags:
Enterprise Forever  |  :HUN  |  Programozás  |  Topic: ASM EP-n - hogyan kezdjem?

Powered by SMF 1.1.2 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks

Template made by Mr.Prise
Page created in 0.284 seconds with 25 queries.
Google visited last this page 2012.May.16. 20:34:37
Follow ep4ever_news on Twitter