Programowanie: Dostęp do pamięci rozszerzonej
From Atariki
SpartaDOS X posiada 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 nich. W tym celu przydatne mogą okazać się 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 _800FLG bpl ?130xe bit _EXTTYP ?130xe: rts
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 ; hack for lack of MALLOC for XRAM (sdx 4.47-) memalloc: cpx #4 ;emulujemy chwilowo tylko pamiec dodatkowa jne MALLOC lda banksfree beq ?noroom dec banksfree ldx #<$4000 ldy #>$4000 stx FAUX1 sty FAUX2 clc lda banksfree adc #4 tax rts ?noroom: lda #$80 rts
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.