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
@shg, post #1
@jrzeuski, post #3
@jrzeuski, post #4
@shg, post #1
.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
; 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
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()