kategoria: Asembler
[#31] Re: ASM68k

@selur, post #30

..i cale szczescie

[#32] Re: ASM68k

@sachy, post #29

Sachy: sorka za offtop ale to Ty jesteś Sachy z DinxProject?

[#33] Re: ASM68k

@asman, post #25

W zamieszczonym przykładzie jest pewien problem.

Kiedy skompilujemy ten program na A500 i odpalimy go... ekran zrobi się
czarny co jest zresztą zamierzonym efektem tej CopperListy jednak
po wciśnięciu klawisza myszki rozkaz asemblerowy RTS wraca nas do systemu
ale nie do systemowej CopperListy czyli ekran dalej pozostaje czarny?

Jak uaktywnić poprzednią CopperListę ???


Jak napisać CoperListe otwierającą ekran graficzny 640x400 z jednym bitplanem
w określonym najlepiej przydzielonym wcześniej miejscu pamięci tak aby nie było
widać na nim pionowych kresek prawdopodobnie pozostałości po systemowym kursorze????
[#34] Re: ASM68k

@kiero, post #31

> ..i cale szczescie

...bo pisanie czegokolwiek na Classic'a i do tego nie pod system to ZŁO!!!

Ok, juz wczolguje sie z powrotem pod swoj stary kamien :) Pozdrawiam.

[#35] Re: ASM68k

@sachy, post #34

Ale jaja to rzeczywiście Ty - Sachy z DXP, pamiętasz mnie jeszcze? :D Wieki temu swappowaliśmy chwilę...

[#36] Re: ASM68k

@pampers, post #35

Czesc Pamp, kope lat :)

Pamietam, pamietam, bo z niewieloma osobami swappowalem. Widze sentyment zagania nas w podobne okolice. Odezwij sie na priv.

Pozdro.
[#37] Re: ASM68k

@sachy, post #36

Tu nie ma priva a Ty nie masz w profilu żadnych danych, skrybnij do mnie na emalię z profilu. Ale jaja, tyle czasu :D

[#38] Re: ASM68k

@68k_tester, post #33

Witam

Ze względu na prostotę tego przykładziku, działa on poprawnie - jeśli można tak rzec - gdy zostaje uruchomiony z poziomu AsmOne ( przy włączonej opcji Safety w Preferences Environment ). Aby odzyskać systemową copperlistę trzeba by tak jak w przykładzie Sachy'ego: otworzyć graphics.library i tam jest pole gb_copinit struktury GfxBase, które wskazuje na systemową coperrlistę. Czyli powinno to wyglądać mniej więcej tak.

move.l	4.w,a6
	moveq	#0,d0
	lea	(gfx_name,pc),a1
	jsr	(-552,a6)
	move.l	d0,(gfx_base)

	; tutaj wklej lub wywołaj przykładzik

	lea	$dff000,a5
	move.l	(gfx_base,pc),a1
	move.l	($26,a1),($80,a5)
	move.l	#4.w,a6
	jsr	(-414,a6)
	rts


Mam nadzieję, że powyższy kod działa bo klepałem z głowy. Na własne potrzeby używam coś takiego

; Startup-Code for ASM-ONE
;
; Author:	Asman
;
;important labels
; keystab


		incdir	"include:"
		include	"hardware/cia.i"
		include	"hardware/custom.i"
		include	"hardware/dmabits.i"
		include	"hardware/intbits.i"

_custom		equ	$dff000
_ciaa		equ	$bfe001
_ciab		equ	$bfd000


	SECTION	startup,code

startupcode

	RSRESET
.gfxbase	rs.l	1
.oldview	rs.l	1
.intena		rs.w	1
.dmacon		rs.w	1
.vbr		rs.l	1
.intvertb	rs.l	1
.intports	rs.l	1
.SIZEOF		rs.b	0

;=== exec ===
.OpenLibrary	= -552
.CloseLibrary	= -414
.Forbid		= -132
.Permit		= -138
.Supervisor	= -30
;=== graphics ===
.LoadView	= -222
.WaitTOF	= -270
.OwnBlitter	= -456
.DisownBlitter	= -462

.gb_ActiView	= $22
.gb_copinit	= $26
.AFB_68010	= 0
.AttnFlags	= $128


		movem.l	d0-a6,-(sp)
		
		lea	(.store,pc),a4

	;open graphics library
		move.l	4.w,a6
		moveq	#0,d0
		lea	(.gfxname,pc),a1
		jsr	(.OpenLibrary,a6)
		move.l	d0,(.gfxbase,a4)
		beq.w	.errexit
		move.l	d0,a6
	
	;get blitter
		jsr	(.OwnBlitter,a6)

	;save old view
		move.l  (.gb_ActiView,a6),(.oldview,a4)

	;reset display
		sub.l	a1,a1		
		jsr	(.LoadView,a6)
		jsr	(.WaitTOF,a6)
		jsr	(.WaitTOF,a6)

	;multitaskig off
		move.l	4.w,a6
		jsr	(.Forbid,a6)

	;get vbr
		moveq	#0,d0
		move.l	4.w,a6
		btst.b	#.AFB_68010,.AttnFlags+1(a6)
		beq	.mc68000
		lea	(.movectrap,pc),a5
		jsr	(.Supervisor,a6)
.mc68000	move.l	d0,(.vbr,a4)

		lea	_custom,a5

	;Check AGA 
		move.w	(deniseid,a5),d0
		cmpi.b	#$f8,d0		;AGA ?
		bne.b	.no
		moveq	#0,d0

	;Reset to ECS
		move.w	d0,(bplcon3,a5)
		move.w	d0,(fmode,a5)
.no		

	;store
		move.w	(intenar,a5),d0
		or.w	#$c000,d0
		move.w	d0,(.intena,a4)

		move.w	(dmaconr,a5),d0
		or.w	#$8000,d0
		move.w	d0,(.dmacon,a4)
				
	;stop int & dma
		move.w	#$7fff,(intena,a5)
		move.w	#$7fff,(dmacon,a5)
		move.w	#$7fff,(intreq,a5)

	;store int pointers
		move.l	(.vbr,a4),a0
		move.l	($6c,a0),(.intvertb,a4)
		move.l	($68,a0),(.intports,a4)
	;set the interrupt vector
		pea	(.PORTS,pc)
		move.l	(sp)+,($68,a0)
	;allow interrupts from the keyboard
		move.b	#CIAICRF_SETCLR|CIAICRF_SP,(ciaicr+_ciaa)
	;clear all ciaa-interrupts
		tst.b	(ciaicr+_ciaa)
	;set input mode
		and.b	#~(CIACRAF_SPMODE),(ciacra+_ciaa)
	;clear ports interrupt
		move.w	#INTF_PORTS,(intreq+_custom)
	;allow ports interrupt
		move.w	#INTF_SETCLR|INTF_INTEN|INTF_PORTS,(intena+_custom)


		movem.l	(sp)+,d0-a6

;###############

		bsr	start

;###############
;resore system

		movem.l	d0-a6,-(sp)
		
		lea	(.store,pc),a4
		lea	_custom,a5

	;stop int & dma
		move.w	#$7fff,(intena,a5)
		move.w	#$7fff,(dmacon,a5)
		move.w	#$7fff,(intreq,a5)

	;restore ints pointers
		move.l	(.vbr,a4),a0
		move.l	(.intvertb,a4),($6c,a0)
		move.l	(.intports,a4),($68,a0)

	;restore
		move.w	(.dmacon,a4),(dmacon,a5)
		move.w	(.intena,a4),(intena,a5)

	;multitasking on
		move.l	4.w,a6
		jsr	(.Permit,a6)

	;load old view
		move.l	(.gfxbase,a4),a6
		move.l	(.oldview,a4),a1
		jsr	(.LoadView,a6)

		move.l	(.gb_copinit,a6),($80,a5) ; restore system clist

	;blitter
		jsr	(.DisownBlitter,a6)

	;close graphics library
		move.l	4.w,a6
		move.l	(.gfxbase,a4),a1
		jsr	(.CloseLibrary,a6)
	
		movem.l	(sp)+,d0-a6
		rts

.errexit	moveq	#-1,d0
		rts

.movectrap	movec	vbr,d0
		rte

.PORTS:	movem.l	d0-d1/a0-a1,-(a7)
		lea	(_custom),a0
		lea	(_ciaa),a1
	;check if keyboard has caused interrupt
		btst	#INTB_PORTS,(intreqr+1,a0)
		beq	.end
		btst	#CIAICRB_SP,(ciaicr,a1)
		beq	.end
	;read keycode
		move.b	(ciasdr,a1),d0
	;set output mode (handshake)
		or.b	#CIACRAF_SPMODE,(ciacra,a1)
	;calculate rawkeycode
		not.b	d0
		ror.b	#1,d0
	;store key in keystab
		movem.l	a0,-(sp)

		moveq	#1,d1
		lea	(keystab,pc),a0
		and.w	#$ff,d0
		move.b	d1,(a0,d0.w)

		movem.l	(sp)+,a0

	;wait for handshake
		moveq	#3-1,d1
.wait1		move.b	(vhposr,a0),d0
.wait2		cmp.b	(vhposr,a0),d0
		beq	.wait2
		dbf	d1,.wait1

	;set input mode
		and.b	#~(CIACRAF_SPMODE),(ciacra,a1)
.end		move.w	#INTF_PORTS,(intreq,a0)
		tst.w	(intreqr,a0)
		movem.l	(a7)+,d0-d1/a0-a1
		rte


.gfxname	dc.b	"graphics.library",0
	EVEN
.store		ds.b	.SIZEOF
keystab:	ds.b	$100


Najlepiej będzie jak zapiszesz sobie powyższy kod jako sartupcode.i i wystarczy przed każdą źródłówka dołączyć ją

INCLUDE startupcode.i


I zdefiniować etykietę start:
Wtedy to nasz przykładzik wygląda tak ( zauważ, że nie potrzeba SECTION w przykładziku, w przeciwnym razie wyrzuci błąd ( bo użyłem skoku bsr ) )

INCLUDE startup.i

start:
; ustawienie copperlisty

	lea	$dff000,a5

	move.l	#cp,($80,a5)
	move.w	#0,($88,a5)

 ; czekamy na lewy klawisz myszki

.lmb	btst	#6,$bfe001
	bne	.lmb

	rts

  SECTION gfxdata,DATA_C


cp:	dc.l $01000000	; wyłączenie bitplanów
	dc.l $01800000	; ustawienie czarnego koloru tła
	dc.l $fffffffe	; koniec copperlisty
	dc.l $fffffffe	; stary agnus potrzebuje jeszcze raz koniec

start:


Oczywiście teraz jest to można i pozmieniać niektóre tajemnicze liczby typu $80 albo $88 na właściwe, czyli cop1lc i copjmp1.

Startup code działa w ten sposób, że najpierw ubija system i skacze pod etykiętę start a po zakończeniu zwraca system.

Z pewnością na necie można znaleźć inne startupcody, które na przykład od razu zapamiętują pamięć od 0 do $400 i wtedy można dowolnie se używać wektorów przerwań ( pamiętaj o vbr na nowszych prockach!!!). Ja przeważnie używam przerwania PORTS do odczytania klawiatury ( z lenistwa szybciej jest nacisnąć ESC niż lewy przycisk myszy ). I przerwanie VERTB ( bardzo sporadycznie ). Dlatego w moim startupie jest już przerwanie PORTS, które w tablicy $100 bajtów przechowuje stany wszystkich klawiszy. Czyli aby sprawdzić czy został wciśnięty ESC robię coś
takiego.

loop:

 ;tutaj co się dzieje typu czekanie na ramke i inne rzeczy

 lea (keystab,pc),a0
 tst.b ($45,a0)
 bne exit ;

 bra loop

exit: rts


W razie jakichkolwiek pytań daj znak.

Pozdrawiam

[#39] Re: ASM68k

@68k_tester, post #33

Witam ponownie

rozkaz asemblerowy RTS wraca nas do systemu
ale nie do systemowej CopperListy czyli ekran dalej pozostaje czarny?

W tym przypadku tak, bo nie została ustawiona copperlista.

Jak uaktywnić poprzednią CopperListę ???
W poprzednim poście znajdziesz rozwiązanie

Jak napisać CoperListe otwierającą ekran graficzny 640x400 z jednym bitplanem
w określonym najlepiej przydzielonym wcześniej miejscu pamięci tak aby nie było
widać na nim pionowych kresek prawdopodobnie pozostałości po systemowym kursorze????


Masz na myśli 1-dno bitplanowy ekran HIRES+LACE ? Jeśli chodzi o te pionowe kreski to aby się ich pozbyć trzeba by w copperlisćie ustawić pustego sprajta dla wszystkich sprajtów w copperliscie, warto też wyłączyć DMA sprajtów w dmacon jeśli nie używasz ich. W każdym razie ja zawsze ustawiam fejkowego spraja dla wszystkich i wyłączam dma spajtów w dmacon. Jak potrzebujesz przykładu to daj znak.

Pozdrawiam

[#40] Re: ASM68k

@asman, post #39

No, to na najblizszym party Riverwash widze, ze szykuje nam sie masa dem i 25-lecie istnienia Amigi bedzie tym samym hucznie świetowane

ps. Pozdro Sachy :)

[#41] Re: ASM68k

@sachy, post #34

Jeśli kogoś to bawi to niech sobie pisze pod Classic'a.
Byleby nie pisał własnych copperlist, i nie odwoływał się bezpośrednio do sprzetu - bo to jest ZŁO !!!
[#42] Re: ASM68k

@qwerty4000, post #41

> Jeśli kogoś to bawi to niech sobie pisze pod Classic'a.
> Byleby nie pisał własnych copperlist, i nie odwoływał sić
> bezpośrednio do sprzetu - bo to jest ZŁO !!!

Czesc,

ZŁO czy nie ZŁO - koledzy prosili o najprostszy przyklad efektow na Copper-List wiec dostali (HOŁDYS tez napisal: "..bardzo chetnie bym sobie przegladnal przykladowy kod jakiegos starego dema NDOS", patrz [1]). Uwaga wiec: ten kod ma prawie 20 lat, tak to WTEDY wygladalo. Pozniej pisalem juz bardziej system-friendly, teraz pewnie pisalbym jeszcze inaczej.

W dyskietkowych czasach A500 i pre-HD malo kogo interesowalo przywracanie systemu, pisanie pod system uwazane bylo za... malo "cool" (wolne, nieoptymalne, wynikajace z braku wiedzy o dzialaniu komputera) i w zasadzie prawie lamerskie, bo zapanowanie nad sprzetem (co bylo celem) taki koder zrzucal czesciowo na system czyli oddawal czesc dzialania programu poza swoja kontrole. O systemie trzeba bylo wiedziec przede wszystkim jedno - jak go wylaczyc :) Wtedy to koderzy wyznaczali trendy i granice mozliwosci sprzetu (nawet poza wiedze jego konstruktorow) a zawodowi programisci probowali ich gonic. Teraz jest odwrotnie :)

Jak juz pisalem, wiedze o kodowaniu wyciagalo sie nie z googla czy dostepnych doc'ow a np. z disassemblacji bootblock'a NDOS czy crack intra (jak ktos przeszedl przez depack) i na bazie wlasnych eksperymentow (na kilka efektow np. zoomer w pionie grafiki rastrowej wpadlem poprzez swoj bledny kod napisany na blitter'a).

Czasy sie zmienily. Asman pokazal fajny kawalek kodu, cos aktualnie do wykorzystania. Mnie jednak zamiast odpalania np. okienek na karte graficzna bardziej zawsze interesowalo rozczajenie "magicznych" zapiskow typu dc.l $fffffffe a nie bibliotek czy API, bo wlasnie te numerki znajdziesz w debug'u probojac zlamac lub train'owac jakas gre lub rozczajajac "jak te skubance to zrobili". Magiczny numerek $fffffffe czy inny charakterystyczny dla Coppera swietnie nadawal sie do zlokalizowania custom copper-listy w pamieci i np. rozpoczecia analizy kodu wlasnie od tego.

Wieksza radosc znajduje w opanowaniu amigowego HW i wyciagniecie maxa z 500ki lub czystej AGA'i niz z zabaw z PPC, cgfx, Morfosem czy Pegazosem. A ze wynik taki trafi do mojej szuflady czy do garstki Classic'owcow - who cares :) Sprobojcie przekonac fanow Kommody ze z pojawieniem sie GEOSa wszelkie produkcje non-GEOS sa "niekoszerne" :D

Oczywiscie to wylacznie moje osobiste podejscie, nikogo nie namawiam na takie samo bo dla niektorych to czysta strata czasu lub co gorsza "sianie fermentu". Nikt jednak nie moze mi zabronic pisac na czysty HW, NDOS, mieszac z Copper'em i co gorsza tego publikowac w necie. To wolny kraj i wolne medium (net).

Z innej jeszcze strony dla niektorych w ogole zajmowanie sie Amiga to dopiero jest ZŁO :D

Pozdrawiam.

Slay: piatka Stary Trollu:)

[#43] Re: ASM68k

@qwerty4000, post #41

A dlaczego zło? Moim zdaniem to żadne zło, ot co najwyżej zawężanie sobie kręgu odbiorców. A to, jak napisał powyżej sachy, ma w tym przypadku znaczenie drugorzędne. Poza tym prawdą jest też i to, że to co np. na mojej Efice chodzi sobie płynnie pod systemem, na gołej A500 płynnie chodzić nie będzie z przyczyn oczywistych. Żądanie od produkcji scenowych, czy nawet gier na pięćsetkę działania pod systemem jest absurdem.

[#44] Re: ASM68k

@Grzegorz Kraszewski, post #43

Za moją maszynę do Morphos G4 1.5 GHz 512 MB RAM 40 GB dałem 400 PLN.
Sprzęt teraz tani jak barszcz, każdego stać.
I wszystko powinno być robione pod system.
[#45] Re: ASM68k

@sachy, post #42

Sachy dzieki wielkie juz odpalam AsmOne na A500 !!!

[#46] Re: ASM68k

@asman, post #39

W przypływie wiedzy dostarczonej w przykładach "Asman'a" napisałem pierwsze demko na A500
Jest skromne ale i efektowne.

Podczas testów kodu nieco kłopotu sprawiły mi pewne różnice w zapisie składniowym pomiędzy
DevPac'iem a AsmOne dla przykładu:

Zapis w AsmOne jsr (-552,a6)
Zapis w DevPac jsr -552(a6)

czy to znaczy ,że jedna z tych składni jest poza oficjalnym standardem?


A oto demo:

;=================================================

;CPU: MC68000
;Assembler: DevPac v3.02
;Platforma: Amiga 500 Kickstart v1.3


incdir ":include/"
include "hardware/custom.i"
include "hardware/dmabits.i"
include "hardware/hw_examples.i"
TABLICA equ 120
Exec equ 4
AllocMem equ -198
FreeMem equ -210
OldOpenLibrary equ -408
CloseLibrary equ -414

START: MOVEM.L D0-D7/A0-A6,-(SP)
CLR.L D0
LEA COPPERL(PC),A0
P1: ADD.L #4,D0
CMPI.L #$FFFFFFFE,(A0)+
BNE.S P1
ADD.L #8000,D0
LEA DLUGOSCOBSZARUALLOKOWANEGO(PC),A0
MOVE.L D0,(A0)
MOVE.L #$10002,D1
MOVE.L Exec,A6
JSR AllocMem(A6)
TST.L D0
BEQ ERROR
LEA ADRESOBSZARUALLOKOWANEGO(PC),A0
MOVE.L D0,(A0)
MOVE.L D0,D1
LEA M(PC),A0
MOVE.W D1,(A0)
SWAP D1
LEA S(PC),A0
MOVE.W D1,(A0)
LEA COPPERL(PC),A0
MOVE.L D0,A1
ADDA.L #8000,A1
MOVE.L A1,D1
P2: MOVE.L (A0),(A1)+
CMPI.L #$FFFFFFFE,(A0)+
BNE.S P2
LEA CUSTOM,A0
MOVE.W #(DMAF_COPPER!DMAF_SPRITE),DMACON(A0)
MOVE.W #$1200,BPLCON0(A0)
MOVE.W #0,BPLCON1(A0)
MOVE.W #0,BPL1MOD(A0)
MOVE.W #$0038,DDFSTRT(A0)
MOVE.W #$00D0,DDFSTOP(A0)
MOVE.W #$2C81,DIWSTRT(A0)
MOVE.W #$F4C1,DIWSTOP(A0)
MOVE.W #$0000,COLOR00(A0)
MOVE.W #$0FFF,COLOR01(A0)
MOVE.L D1,COP1LCH(A0)
MOVE.W COPJMP1(A0),D1
MOVE.W #(DMAF_SETCLR!DMAF_COPPER!DMAF_RASTER!DMAF_MASTER),DMACON(A0)
BSR.S DALEJ0
LEA CUSTOM,A0
MOVE.W #(DMAF_SETCLR!DMAF_SPRITE),DMACON(A0)
MOVE.L Exec,A6
LEA GFXNAME(PC),A1
JSR OldOpenLibrary(A6)
TST.L D0
BEQ.S ERROR
MOVE.L D0,A1
MOVE.L $26(A1),$DFF080
CLR.W $DFF088
MOVE.L Exec,A6
JSR CloseLibrary(A6)
BSR FMEM
MOVEM.L (SP)+,D0-D7/A0-A6
CLR.L D0
RTS
ERROR: BSR FMEM
MOVEM.L (SP)+,D0-D7/A0-A6
MOVE.L #-1,D0
RTS
FMEM: LEA DLUGOSCOBSZARUALLOKOWANEGO(PC),A0
MOVE.L (A0),D0
LEA ADRESOBSZARUALLOKOWANEGO(PC),A0
MOVE.L (A0),A1
MOVE.L Exec,A6
JSR FreeMem(A6)
RTS


DALEJ0: LEA ADRESOBSZARUALLOKOWANEGO(PC),A0
MOVE.L (A0),A0
ADDA.L #7960,A0
CLR.L D0
NOT.L D0 ;LINIA NA DOLE EKRANU
MOVEQ.W #9,D1
ZARYSUJ: MOVE.L D0,(A0)+
DBF D1,ZARYSUJ
;---------------------
MOVE.L Exec,A6
MOVE.L #TABLICA,D0
MOVE.L #$10002,D1
JSR AllocMem(a6)
TST.L D0
BEQ NOMEM
MOVE.L D0,ADRESTABLICY
;----------------------------
CHOP: BSR WSKAZANIENAELEMENT
CMPI.L #0,(A0)
BNE.S CHOP1
BSR LOSUJZAPIS
CHOP1: BSR SPADANIESNIEGU
ADDQ.W #4,WSKAZNIKELEMENTOWTABLICY
CMPI.W #TABLICA,WSKAZNIKELEMENTOWTABLICY
BNE.S CHOP
CLR.W WSKAZNIKELEMENTOWTABLICY
;--------- Tutaj petla opuzniajonca -----------
BCHG.B #1,$BFE001
BTST #6,$BFE001
BNE.S CHOP
ZAKONCZENIE: MOVE.L Exec,A6
MOVE.L #TABLICA,D0
LEA ADRESTABLICY(PC),A0
MOVE.L (A0),A1
JSR FreeMem(A6)
NOMEM: RTS
POINT: LEA ADRESOBSZARUALLOKOWANEGO(PC),A1
MOVE.L (A1),A1
TST.W D1
BEQ.S KOLIZJA
TST.W D2
BEQ.S KOLIZJA
MOVE.W #200,D0
PETLA: SUBQ.W #1,D1
BEQ.S DALEJ
ADDA.L #40,A1
SUBQ.W #1,D0
BNE.S PETLA
BRA.S KOLIZJA
DALEJ: MOVE.W #320,D0
MOVE.B #7,D1
PETLA1: SUBQ.W #1,D2
BEQ.S DALEJ1
CMPI.B #0,D1
BNE.S DA
MOVE.B #8,D1
ADDA.L #1,A1
DA: SUBQ.W #1,D1
SUBQ.W #1,D0
BNE.S PETLA1
KOLIZJA: MOVE.L #-1,D0
RTS
DALEJ1: CLR.L D0
RTS

LOSUJ: CLR.L D0
MOVE.W LOSOWA(PC),D0
ADDQ.L #1,D0
MOVE.L D0,A0
ADD.L D0,D0
ADD.L D0,D0
ADD.L A0,D0
LEA LOSOWA(PC),A0
MOVE.W D0,(A0)
RTS

LOSUJZAPIS: BSR.S LOSUJ
TST.W D0
BEQ.S LOSUJZAPIS
DIVU #255,D0
SWAP D0
TST.W D0
BNE.S LZ_RTS
LZ_320: BSR.S LOSUJ
TST.W D0
BEQ.S LZ_320
DIVU #321,D0
SWAP D0
TST.W D0
BEQ.S LZ_320
BSR.S WSKAZANIENAELEMENT
MOVE.W D0,(A0)
LZ_RTS: RTS

WSKAZANIENAELEMENT: LEA ADRESTABLICY(PC),A0
MOVE.L (A0),A0
CLR.L D1
MOVE.W WSKAZNIKELEMENTOWTABLICY,D1
ADDA.L D1,A0
RTS

SPADANIESNIEGU: BSR.S WSKAZANIENAELEMENT
CMPI.L #0,(A0)
BEQ.S SS_RTS
ADD.W #1,2(A0)
MOVE.W (A0),D4
MOVE.W 2(A0),D3
MOVE.W D4,D2
MOVE.W D3,D1
BSR POINT
TST.L D0
BNE.S WYZERUJ
BSET.B D1,(A1)
BEQ.S KASUJPOPRZEDNI
LEWA: MOVE.W D4,D2
MOVE.W D3,D1
SUBQ.W #1,D2
BSR POINT
TST.L D0
BNE.S PRAWA
BSET.B D1,(A1)
BNE.S PRAWA
BSR.S KASUJPOPRZEDNI
SUBQ.W #1,D4
MOVE.W D4,(A0)
RTS
PRAWA: MOVE.W D4,D2
MOVE.W D3,D1
ADDQ.W #1,D2
BSR POINT
TST.L D0
BNE.S WYZERUJ
BSET.B D1,(A1)
BNE.S WYZERUJ
BSR.S KASUJPOPRZEDNI
ADDQ.W #1,D4
MOVE.W D4,(A0)
RTS

WYZERUJ: BSR.S WSKAZANIENAELEMENT
CLR.L (A0)
SS_RTS: RTS
KASUJPOPRZEDNI: SUBQ.W #1,D3
MOVE.W D4,D2
MOVE.W D3,D1
BSR POINT
TST.L D0
BNE.S SS_RTS
BCLR.B D1,(A1)
RTS

COPPERL: DC.W BPL1PTH
S: DC.W $0000
DC.W BPL1PTL
M: DC.W $0000
DC.W $FFFF
DC.W $FFFE
DLUGOSCOBSZARUALLOKOWANEGO: DC.L 0
ADRESOBSZARUALLOKOWANEGO: DC.L 0
GFXNAME: DC.B "graphics.library",0
ADRESTABLICY: DC.L 0
LOSOWA: DC.W 16384
WSKAZNIKELEMENTOWTABLICY: DC.W 0

;========================================
[#47] Re: ASM68k

@qwerty4000, post #44

Ja moją maszynę do MophOS-a dostałem za darmo i co z tego? Są ludzie którzy głęboko gdzieś mają wszystkie MorphOS-y, Pegasosy, PowerPC tak dalej, bawi ich programowanie w asemblerze 68k i męczenie rejestrów AGA. Można się z ich podejściem nie zgadzać, ale wypadałoby uszanować. Wygłaszanie kategorycznych stwierdzeń w rodzaju "wszystko powinno być robione pod system" wygląda dziwnie, żeby nie powiedzieć zabawnie. Jeżeli piszesz coś pod MorphOS-a i piszesz to dla ludzi wtedy owszem, oparcie się o procedury systemowe jest jedynym rozsądnym wyjściem. Ale nie wymagaj tego od ludzi programujących sobie dla rozrywki pięćsetkę...

[#48] Re: ASM68k

@qwerty4000, post #44

To nie cena sprzetu decyduje o tym kto chce na co i jak programować - w przypadku klasyków to czynnikiem podstawowym jest pasja.

Także nie widzę nic złego w tworzeniu dem niekoniecznie zgodnych z systemem choć oczywiście utrudnia to potem pracę autorom emulatorów. Co innego oprogramowanie narzędziowe - to faktycznie powinno korzystać z udokumentowanego interfejsu jakim jest API.
[#49] Re: ASM68k

@68k_tester, post #46

Witam,

Jeśli chodzi i różnice składniowe to z tego co ja wiem nie ma oficjalnego standardu. Ja się jakoś przyzwyczaiłem do tego sposobu składania instrukcji i faktycznie nie działa ona na devpacu. W żadnej mierze nie oznacza to, że moje przyzwyczajenia są w jakimś stopniu lepsze.


Pozdrawiam

[#50] Re: ASM68k

@selur, post #30

Fajny temat Dołączam się do poparcia dla osobnego działu ami_asm_m68k, choćby tylko w celach szkoleniowych. Przy okazji - nie można klasyfikować pisania bezpośrednio pod hardware jako zła. To tak jakby mówić, że dzieło rzeźbiarza jest złe, bo pracował dłutem a nie obrabiarką cnc ... Tego typu programowanie to tworzenie jednorazowego dzieła a nie produktu strawnego dla "konserwujących kod" - zabawa i w zasadzie tylko zabawa. Wystarczy spojrzeć na wciąż powstające demka dla C64, niektórym z nich trudno odmówić wartości, choć na tyle tylko pozwala tworzywo
[#51] Re: ASM68k

@68k_tester, post #46

Lepsza jest druga składnia, ASMOne też ją łyka, i jest rozpoznawana chyba przez wszystkie asemblery. ReSource traktuje pierwszą składnię jako New Syntax (kod pod 68020+) a drugą jako kod pod 68000. Choć w obu składniach da się zapisać ten sam kod. DevPac w wersji do 3.14 nie rozpoznaje komend pod 68020+, i pewnie paru innych rzeczy też np. "odd". Zresztą chyba każdy asembler ma swoje wady i błędy, które wychodzą przy częstszym używaniu, jak np. crash przy asemblacji ponad 2 megowego źrodła (exek z Biinga) pod ASMOne'em.
BTW. Jak ktoś ma ochotę napisać nowe cracktro dla Wanted Team, to byłbym wdzięczny. Ja mam tylko ewentualne 2 pomysły na nie, ale może byc też jakies inne.
[#52] Re: ASM68k

@Don_Adan, post #51

No panowie admini i co bedzie z tym naszym dzialem... ?
[#53] Re: ASM68k

@Don_Adan, post #51

niestety przejscie z jezykow wysokiego poziomu na assembler okazuje sie nie lada wyzwaniem bez dobrze komentowanego kodu leze..

[#54] Re: ASM68k

@HOŁDYS, post #53

Witam,

A z czym masz problem ?

Pozdrawiam

[#55] Re: ASM68k

@Don_Adan, post #51

Chęci to są, gorzej z czasem, szczególnie jak się chce parę rzeczy naraz zrobić :). Ja też mam ze trzy pomysły na cracktro ( z czego dwa opierają się na efektach typu plot ( czyli szalejące punkty na ekranie ) , i jeden bazujący na game preview ( takiego cracktra jeszcze nie widziałem ).

[#56] Re: ASM68k

@asman, post #55

Moje pomysły są chyba dużo (?) prostsze.
Pierwszy to coś w stylu starego filmu, czyli widać jest ekran kinowy a na nim 4,3,2,1, Start, Wanted Team, Presents, a new itd. Czyli coś jak czołówka starego (przedwojennego) filmu, jak ktoś kiedyś widzial taki film to wie chyba o co chodzi.
Drugi to jest deska a na niej są wystrzeliwane napisy lub tylko pierwszy tekst czyli Wanted Team, a dalej mogą być inne efekty, czy tylko zwykły tekst.
[#57] Re: ASM68k

@asman, post #55

A będzie do czego to cracktro dołączyć? ;)
[#58] Re: ASM68k

@alekc, post #57

A będzie, parę rzeczy nigdy nie ujrzało światła dziennego lub jeszcze nie jest w pełni ukończonych, choćby ABC Chemii, Biing ENG, czy Hannibal PL.
[#59] Re: ASM68k

@Don_Adan, post #58

a ten Biing w wersji ECS czy AGA ? ..szkoda ze szwabski jezyk zabil ta gre..

[#60] Re: ASM68k

@HOŁDYS, post #59

W dzisiejszych czasach trochę o kodowaniu na starą motorolkę i Ami można znależć też na tym forum:

http://ada.untergrund.net/forum/index.php?action=vtopic&forum=4

A szczególnie chyba ten nowy temat może się przydać:

http://ada.untergrund.net/forum/index.php?action=vthread&forum=4&topic=505



Ostatnia modyfikacja: 23.02.2010 09:35:56
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem