Programowanie: Dostęp do pamięci rozszerzonej
From Atariki
Wersja z dnia 02:06, 19 paź 2013 Mono (Dyskusja | wkład) (optymalizacja) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (makra -) |
||
Linia 1: | Linia 1: | ||
- | [[SpartaDOS X]] posiada procedury zarządzania dostępem do pamięci opisane w rozdziale 3 [http://sdx.atari8.info/index.php?show=en_docs podręcznika programowania]. | + | [[SpartaDOS X]] udostępnia procedury zarządzania dostępem do pamięci opisane w rozdziale 3 [http://sdx.atari8.info/index.php?show=en_docs podręcznika programowania]. |
- | Podczas pisania operacji szczególnie krytycznych czasowo zachodzi czasem potrzeba własnoręcznego przełączania banków pamięci i dostępu do nich. | + | Podczas pisania operacji szczególnie krytycznych czasowo zachodzi czasem potrzeba własnoręcznego przełączania banków pamięci i dostępu do ich rejestrów sterujących. W tym celu przydatne mogą okazać się następujące procedury: |
- | W tym celu przydatne mogą okazać się procedury: | + | |
1. Sprawdzenia jakiego rodzaju jest rozszerzenie, które mamy zainstalowane. | 1. Sprawdzenia jakiego rodzaju jest rozszerzenie, które mamy zainstalowane. | ||
Linia 9: | Linia 8: | ||
; N=0 - 130xe, N=1 - Axlon | ; N=0 - 130xe, N=1 - Axlon | ||
ismemaxlon: | ismemaxlon: | ||
- | bit _800FLG | ||
- | bpl ?130xe | ||
bit _EXTTYP | bit _EXTTYP | ||
- | ?130xe: | ||
rts | rts | ||
</pre> | </pre> | ||
+ | |||
+ | Od SpartaDOS X 4.46 rozszerzenie typu [[Axlon]] jest wykrywane i obsługiwane również na Atari [[XL]] i [[XE]]. | ||
2. Przetworzenia indeksu banku używanego przez procedury SDX na wartość wpisywaną do portu (PORTB lub rejestr banków Axlona). | 2. Przetworzenia indeksu banku używanego przez procedury SDX na wartość wpisywaną do portu (PORTB lub rejestr banków Axlona). | ||
Linia 68: | Linia 66: | ||
4. Emulacji alokacji pamięci rozszerzonej. | 4. Emulacji alokacji pamięci rozszerzonej. | ||
<pre> | <pre> | ||
- | ; Allocate XRAM memory | + | ; Allocate XRAM memory - replacement for MALLOC |
; hack for lack of MALLOC for XRAM (sdx 4.47-) | ; hack for lack of MALLOC for XRAM (sdx 4.47-) | ||
memalloc: | memalloc: | ||
- | cpx #4 ;emulujemy chwilowo tylko pamiec dodatkowa | + | cpx #4 |
- | jne MALLOC | + | beq ?ext |
- | + | jmp MALLOC | |
+ | ?ext: | ||
lda banksfree | lda banksfree | ||
beq ?noroom | beq ?noroom | ||
Linia 89: | Linia 88: | ||
rts | rts | ||
</pre> | </pre> | ||
- | '''UWAGA!''' Procedura alokacji nie markuje w systemie banków pamięci rozszerzonej (więc de-facto nie rezerwuje pamięci XRAM), lecz pozwala z niej korzystać w programach przeznaczonych dla wersji DOS-a mniejszych niż 4.47 i powinna być używana po uprzednim wywołaniu procedury memdetect. | + | '''UWAGA!''' Procedura alokacji powinna być używana zamiast MALLOC. Nie oznacza w systemie banków pamięci rozszerzonej jako zajętych (więc de facto nie rezerwuje pamięci XRAM), lecz pozwala z niej korzystać w programach przeznaczonych dla wersji DOS-a mniejszych niż 4.47 i powinna być używana po uprzednim wywołaniu procedury memdetect. |
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Aktualna wersja
SpartaDOS X udostępnia procedury zarządzania dostępem do pamięci opisane w rozdziale 3 podręcznika programowania.
Podczas pisania operacji szczególnie krytycznych czasowo zachodzi czasem potrzeba własnoręcznego przełączania banków pamięci i dostępu do ich rejestrów sterujących. W tym celu przydatne mogą okazać się następujące procedury:
1. Sprawdzenia jakiego rodzaju jest rozszerzenie, które mamy zainstalowane.
; Checks if Axlon or 130xe extension exist ; N=0 - 130xe, N=1 - Axlon ismemaxlon: bit _EXTTYP rts
Od SpartaDOS X 4.46 rozszerzenie typu Axlon jest wykrywane i obsługiwane również na Atari XL i XE.
2. Przetworzenia indeksu banku używanego przez procedury SDX na wartość wpisywaną do portu (PORTB lub rejestr banków Axlona).
; Convert memory index to port value ; IN: A-mem index ; OUT: A-port value toportvalue: stx temp jsr ismemaxlon bpl ?130xe ?axlon: tax beq ?axlonbase ?axlonext: sec sbc #3 ldx temp rts ?axlonbase: lda T_,x ldx temp rts ?130xe: tax beq ?130xebase ?130xeext: pha lsr lsr tax pla and #%11 asl asl ora T_+8-1,x ldx temp rts ?130xebase: lda T_+4,x ldx temp rts
3. Obliczenia ilości wolnych banków pamięci.
memdetect: lda NBANKS sta banksfree rts
4. Emulacji alokacji pamięci rozszerzonej.
; Allocate XRAM memory - replacement for MALLOC ; hack for lack of MALLOC for XRAM (sdx 4.47-) memalloc: cpx #4 beq ?ext jmp MALLOC ?ext: lda banksfree beq ?noroom dec banksfree ldx #<$4000 ldy #>$4000 stx FAUX1 sty FAUX2 clc adc #3 tax rts ?noroom: lda #$80 rts
UWAGA! Procedura alokacji powinna być używana zamiast MALLOC. Nie oznacza w systemie banków pamięci rozszerzonej jako zajętych (więc de facto nie rezerwuje pamięci XRAM), lecz pozwala z niej korzystać w programach przeznaczonych dla wersji DOS-a mniejszych niż 4.47 i powinna być używana po uprzednim wywołaniu procedury memdetect.