[#1] Tajemnice exec.library :) + cardbase
Podczas disasemblacji card.resource natknąłem się na dwie funkcje exec.library, których nie ma ani w autododocach, ani w najnowszych(?) include'ach. Offset -810 i -816 (dziesiętnie), bladego pojęcia nie mam, do czego służą i nie za bardzo da się to wyśledzić na podstawie programu.
Funkcje wywoływane są podczas inicjalizacji card.resource, czyli podczas startu systemu.
Kick v40.48

Początek card.resource zawierający wywołania do tych przedziwnych funkcji:
INIT:
	MOVEM.L	D2/A2-A6,-(A7)
	MOVEA.L	ABSEXECBASE.W,A6
	JSR		-816(A6)			; Jakas ukryta funkcja exec.library???
; ostatnia "oficjalna" funkcja execa (ObtainQuickVector()) ma offset -786
	LSR.B	#4,		D0
	CMPI.B	#$0D,	D0
	BNE	exit
	MOVEA.L	#$00600100,	A1
	JSR		-534(A6)			; TypeOfMem(#$00600100)
	TST.L	D0					; <>0, czyli mamy w tym miejscu RAM
	BNE	exit					; niewazne, czy juz z karty, czy normalny
	MOVE.B	#$00,	GAYLE_CARDSTATUS
	LEA	lib_vector_tab(PC),A0	; vectors
	LEA	LAB_0003(PC),A1			; structure
	SUBA.L	A2,A2				; init
	MOVEQ	#25,D0
	ROL.L	#5,D0				; dSize(=800) rozmiar bazy biblioteki
; Brakuje D1=segList, ale, jest OK, bo biblioteka nie ma funkcji init
	JSR	-84(A6)					; MakeLibrary()
	TST.L	D0
	BEQ	exit					; Porazka :)
	MOVEA.L	D0,A5				; Adres biblioteki (struktura Library)
	MOVE.L	A6,36(A5)			; cardbase.execbase
	MOVEQ	#7,D0
	JSR	-810(A6)				; kolejna tajemnica exec.library :)
	MOVE.L	D0,40(A5)
	BEQ	exit




Druga sprawa, to includy do card.resource. Jak powszechnie wiadomo, resource może być obsługiwane jako biblioteka (posiada bazę i funkcje). Z funkcjami nie ma problemu, bo includy są dostępne, ale za cholerę nie mogę znaleźć include'ów do bazy tej biblioteki, czy w ogóle coś takiego istnieje?
W samej bazie jest mnóstwo ciekawych rzeczy, właściwie, to odtworzyłem prawie całą na podstawie disasemblacji card.resource, ale z kilkoma pozycjami mam nieco problemów.

A BTW (czytaj: odnośnie tematu "Dostęp do PCMCIA" ) disasemblacja przebiega całkiem sprawnie, może jakiegoś FAQa napiszę :D
jestem już za półmetkiem (żródło pełne komentarzy (po polskiemu)) jeszcze czekają mnie testy praktyczne (własna karta) :D
[#2] Re: Tajemnice exec.library :) + cardbase

@shg, post #1

generalnie jeśli funkcje nie są opisane w autodokach, to raczej ciężko będzie z identyfikacją ich działania. Być może ludzie od AROSa, OS4 bądź MOSa byli by w stanie więcej na ten temat powiedzieć/napisać.

[#3] Re: Tajemnice exec.library :) + cardbase

@shg, post #1

-810 to execPrivate13(D0) znana także jako TaggedOpenLibrary(D0). W D0 przyjmuje parametr liczbowy mówiący, którą bibliotekę otworzyć a zna takie:

1 - "graphics.library"
2 - "layers.library"
3 - "intuition.library"
4 - "dos.library"
5 - "icon.library"
6 - "expansion.library"
7 - "utility.library"
8 - "keymap.library"
9 - "gadtools.library"
10 - "workbench.library"

Oczywiście żadne normalny programista nie powinien tego używać, więc otwórz sobie tę utility.library w normalny sposób. Funkcja powstała dla oszczędzenia innym elementom ROMu przechowywania stringów z nazwą biblioteki do otwarcia. Poza tym używali jej koderzy w konkursach na najkrótsze HelloWorld

-816 to execPrivate14(), ale nigdy nie spotkałem się z opisem co tam się znajduje, więc chyba musisz do ReSource'a wrzucić ten kawałek ROMu i sam sprawdzić co tam siedzi :)

[#4] Re: Tajemnice exec.library :) + cardbase

@jrzeuski, post #3

A co mi tam, zaciekawiło mnie i zapuściłem ReSource. Funkcja spod -816 skacze do kodu wywołującego funkcję Supervisor() z podprogramem umieszczonym w ROMie kawałek dalej, którego jednak już mi się nie chciało analizować,ale jak dojdziesz co ten podprogram wyprawia to napisz :)

[#5] Re: Tajemnice exec.library :) + cardbase

@jrzeuski, post #4

Ale mnie wzięło...

Przeszukałem Amiga Developer CD 2.1 i m.in. znalazłem coś takiego:

"On machines with PCMCIA cards, EXEC now makes sure the interface is turned on at boot time and then will turn it off before configuration. This should let a full 8-meg of RAM be added in the Zorro-II space. This change requires an update to the credit card resource/device such that it will correctly turn on the interface if needed."

To może być to, co robi ten kod w Supervisor(). Tekst ten pochodzi z OS38_OS39_Release_Notes.txt z NDK3.1. Jest tam też katalog Examples/PCMCIA, który pewnie masz, ale jeżeli nie, to pisz do mnie na priv. Nie sprawdzałem czy dokładnie to samo jest w materiałach z DevCon93, bo i tam wyszukiwarka coś namierzyła na temat PCMCIA.

[#6] Re: Tajemnice exec.library :) + cardbase

@shg, post #1

OK Dzięki, :D
W takim razie -810 otwiera utility.base i to by się zgadzało, bo potem są skoki do dwóch funkcji - UMult32() i UDivMod32(), prawdopodobnie służące do zamiany systemu liczb, albo stringa na liczbę (Używa tabeli kolejnych potęg 10)

-------------

-816 jest baaaaaardzo dziwna.
Wygląda to tak, jakby sprawdzała, czy na adres $DE1000 jest mapowane to samo, co na $DFF000, czyli custom chips. Próbuje wyłączyć i przywrócić przerwania za pomocą rejestru $DE1000, no i do tego włącza/wyłącza wszystkie przerwania, dziwne...
GAYLE'a, albo kartę można resetować jakoś przez rejestr przerwań (CardReset.lha z aminetu). O, właśnie tak:
.reset		movea.l	#$DA9000,a2		;GAYLE INTREQ register
		move.b	#$FF,(a2)		;PCMCIA reset start
		movea.l	d6,a6
		move.l	d3,d1
		jsr	_LVODelay(a6)
		move.b	#$FC,(a2)		;PCMCIA reset stop

A tu funkcja -816:
; w kicku 40.48 adres $F8045E

;-------------------------------
;F8045E:
;	moveq	#$00,	d0
;	movea.l	a5,		a0
;	lea		$F8046A(pc),	a5
;	jmp		-30(a6)				; Supervisor()
;F8046A:						; to jest wykonywane w trybie supervisor
;	movea.l	$DFF000,	a0		; CUSTOM chips
;	lea		$DE1000,	a1		; a to co za cholera???
								; trzeba to zbadac, bo niektore
								; uklady sa mapowane w pamieci kilkakrotnie
								; wyzerowane linie A13-A16
;	ori		#$0700,		sr		; maska przerwan.
								; uaktywnia przerwania od 0 do 7 (?)
								; na poziomie CPU
;	move.w	$1C(a0),	-(sp)	; $DFF01C = INTENAR na stos
;	move.w	#$BFFF,		$9A(a1) ; ??? wyglada jak dodatkowy CUSTOM CHIP :)
								; i wlaczenie wszystkich przerwan
;	move.w	#$3FFF,		d1		; maska = wszystkie przerwania
;	cmp.w	$1C(a0),	d1		; $DFF01C = INTENAR
;	bne.s	$F8049C				; niewszystkie przerwania aktywne
;	move.w	d1,			$9A(a1)	; wylacza wszystkie przerwania (?)
;	tst.w	$1C(a0)				; $DFF01C = INTENAR
;	bne.s	$F8049C				; sprawdza, czy udalo sie wylaczyc, nie=skok
;	moveq	#$00,		d1		; jezeli $de1000 = $dff000, to d1=0, jak nie,
								; to d1 = #$3FFF
;F8049C:
;	move.w	#$3FFF,	$9A(a0)		; wylacza wszystkie przerwania
;	ori.w	#$8000,	(sp)		; na stosie jest poprzednia zawartosc
								; rejestru INTENA, trzeba ustawic najstarszy
								; bit, zeby potem przywrocic te przerwania
;	move.w	(sp)+,	$9A(a0)		; no i przywracamy przerwania :)
;	tst.w	d1					; uadlo sie wylaczyc przez rejestr $DE109A?
;	beq.s	$F804C0				; tak=skok
;	move.b	d0,	(a1)			; #$00, do $de1000
;	bsr.s	$F804CA				; patrz: komentarz do F804CA
;	bsr.s	$F804CA				; i tak 8 razy :|
;	bsr.s	$F804CA				; nie lepiej? (chyba, ze o czyms nie wiem):
;	bsr.s	$F804CA				; BTST.B 	#7,$DE1000
;	bsr.s	$F804CA				; SNE		D0
;	bsr.s	$F804CA				; SNE ustawia d0 na -1, jezeli ustawiony
;	bsr.s	$F804CA				; bit #7 w $DE1000 (co sprawdza nam BTST)
;	bsr.s	$F804CA
;F804C0:
;	cmp.b	#$FF,	d0
;	bne.s	$F804C8
;	moveq	#$00,	d0
;F804C8:
;	rte
;F804CA:
;	move.b	(a1),	d1			; poje...(źle zrobione) *ceznura* :) przesuwa do w lewo d0
;	lsl.b	#1,	d1				; i w miejsce najmlodszego bitu
;	addx.b	d0,d0				; wstawia najstarszy bit z $de1000
;	rts
;-------------------------------
v


I jeszcze jedna zagadka:
Co się dzieje, gdy do OpenDevice() podamy wszysko, co trzeba, ale nazwa (A0) będzie = 0 ? Czy to ma inicjalizować strukturę IORequest? w Autodocach oczywiście na ten temat cisza :D
LEA	120(A5),A0				; cardbase.ioReplyPort
	MOVEA.L	A0,A3
	MOVEQ	#40,D0				; size
	JSR	-654(A6)				; CreateIORequest
	MOVE.L	D0,60(A5)
	MOVEA.L	D0,A1				; IORequest
	SUBA.L	A0,A0				; nazwa, brak?????
								; prawdopodobne chodzi o sama inicjalizacje
								; struktury IORequest, bo nawet nie jest
								; sprawdzany rezultat.
	MOVEQ	#1,D0				; unit = 1
	MOVEQ	#0,D1				; flagi
	JSR	-444(A6)				; OpenDevice()
[#7] Re: Tajemnice exec.library :) + cardbase

@shg, post #6

Przy pomocy Google znalazłem coś na temat tego dziwnego adresu. Ale nie uwierzysz...

http://www.thule.no/haynie/research/a3000p/docs/a3000p.pdf

[#8] Re: Tajemnice exec.library :) + cardbase

@shg, post #1

DSP

Dzięki za materiały, na 100% się przydadzą

W sumie to już jestem w stanie zrobić kartę niekompatybilną ze standardem :D

Trzeba będzie teraz pomyśleć, jak w łatwy sposób rozwiązać te Tuple :D (od strony hardware'owej)
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