Amiga forum / AmigaOS 2.x i starsze / amiga 500 assembler czemu to nie działa????
Czytasz wątek: amiga 500 assembler czemu to nie działa????
-
amiga 500 assembler czemu to nie działa???? wysłany: 2009-04-12 15:07
Czy ktoś potrafi jeszcze napisać coś na Amige (v34) w assemblerze??
Program jest prosty chodzi o ręczne odpalenie osobnego procesu..... ale nie działa czemu?
Co trzeba poprawić???
;-------------------------------------------------------------------------
;Tworzenie procesu pierwsze testy.
;OPIS: Tworzymy recznie nowy proces w systemie i uruchamiamy go oczekując
;na klawisz 'Esc' kończący aktualnie uruchomiony proces....
;Testy: Nie dziala!!!!!!
;CPU: MC 68000
;System: Amiga 500 OS v1.3 Kickstart (v34)
;Assembler: DevPac v3.02 (HiSoft)
Exec: equ 4
OldOpenLibrary: equ -408
CloseLibrary: equ -414
CreateProc: equ -138 ;Tworzy nowy proces w systemie.
Delay: equ -198
;Blok podstawowy umieszczamy w pamieci CHIP_RAM
SECTION Program,CODE_C
Start: move.l Exec.w,a6
lea DosName(pc),a1
jsr OldOpenLibrary(a6)
tst.l d0
beq.s Error_0
move.l d0,DosBase
;-----------------------
;Teraz tworzymy nowy process w pamieci
move.l DosBase,a6
move.l #ProcName,d1 ;Nazwa dla nowego procesu.
move.l #2,d2 ;Priorytet procesu (od -128(Najmniejszy) do +127(Najwiekszy))
lea Action(pc),a0 ;ręczna pozycja
move.l a0,d3 ;Lista segmentow programu zwracana np: przez funkcje LoadSeg()
move.l #4000,d4 ;Rozmiar w bajtach (Stosu) przydzielanego procesowi.Wartosc ta musi byc podzielna przez 4.
jsr CreateProc(a6)
tst.l d0 ;Wskaznik na nowo utworzony (IORequest) lub NULL jesli blad.
beq.s Error_0
Wait_Key: cmp.b #$75,$BFEC01 ;Sprawdzamy czy wcisnieto klawisz 'ESC'
bne.s Wait_Key
bra.s Koniec
DS.L 0
Action: DC.L 16
DC.L 0
;.... tutaj kod wykonywalny procesu ....
Process_Code:
PP_Loop0: move.w #10,d0 ;Odczekujemy okreslony czas.
PP_Loop2: move.w #$1FFF,d1
PP_Loop1: dbf d1,PP_Loop1
dbf d0,PP_Loop2
bchg.b #1,$BFE001 ;Zmieniamy stan diody PowerLED na przeciwny.
bra.s PP_Loop0
Process_End:
Error_0: moveq #-1,d0
rts
Koniec: moveq #0,d0
rts
ProcName: DC.B "-->Nowy<--",0
DosBase: DC.L 0
DosName: DC.B "dos.library",0
-
amiga 500 assembler czemu to nie działa???? wysłany: 2009-04-12 20:19
@68k_tester
ale nie działa czemu?
Prawdopodobnie dlatego, że jako seglistę kodu podajesz adres kodu podprocesu, a to raczej nie zadziała. W autodocu funkcji CreateProc() jest przykład "oszukanej" seglisty jaką można zastosować, gdy kod nie jest ładowany z dysku. Więcej Ci niestety nie pomogę, bo procesami zacząłem się bawić dopiero od kickstartu v39, a tam jest o wiele wygodniejsza CreateNewProc().
-
amiga 500 assembler czemu to nie działa???? wysłany: 2009-04-12 21:25
Dobra problem rozwiązany ale dzień zmarnowany...
Parametr podawany w rej.D3 do funkcji CreateProc()
powinien zawierac adres o 8 bajtow wiekszy od poczatku kodu jednak adres ten musi byc podzielny bez reszty przez 4 kiedy uzyskamy juz takie ustawienie to przed zapisem do rej. D3 wartosc adresu dzielimy na 4 i dopiero to stanowi prawidlowy parametr.
- Menu
- Baza wiedzy
- AmigaOS.pl