Programowanie: Dostęp do pamięci rozszerzonej
From Atariki
Wersja z dnia 07:42, 19 paź 2013 KMK (Dyskusja | wkład) (dodatnia wartość _800FLG nie znaczy, że rozszerzenie nie jest Axlon) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (makra -) |
||
Linia 11: | Linia 11: | ||
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 70: | ||
memalloc: | memalloc: | ||
cpx #4 | cpx #4 | ||
- | jne MALLOC | + | beq ?ext |
- | + | jmp MALLOC | |
+ | ?ext: | ||
lda banksfree | lda banksfree | ||
beq ?noroom | beq ?noroom |
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.