Programowanie: Dostęp do pamięci rozszerzonej
From Atariki
Wersja z dnia 02:06, 19 paź 2013 Mono (Dyskusja | wkład) (optymalizacja) ← Previous diff |
Wersja z dnia 02:08, 19 paź 2013 Mono (Dyskusja | wkład) (uszczegolowienie) Next diff → |
||
Linia 68: | Linia 68: | ||
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 | jne MALLOC | ||
Linia 89: | Linia 89: | ||
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 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. |
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
[[Kategoria:Niezbędnik kodera]] | [[Kategoria:Niezbędnik kodera]] |
Wersja z dnia 02:08, 19 paź 2013
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 - replacement for MALLOC ; hack for lack of MALLOC for XRAM (sdx 4.47-) memalloc: cpx #4 jne MALLOC 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 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.