Programowanie: Dostęp do pamięci rozszerzonej

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
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.

Personal tools