Programowanie: Dostęp do pamięci rozszerzonej

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 02:08, 19 paź 2013
Mono (Dyskusja | wkład)
(uszczegolowienie)
← Previous diff
Wersja z dnia 07:42, 19 paź 2013
KMK (Dyskusja | wkład)
(dodatnia wartość _800FLG nie znaczy, że rozszerzenie nie jest Axlon)
Next diff →
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>
Linia 89: Linia 85:
rts rts
</pre> </pre>
-'''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.+'''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]]

Wersja z dnia 07:42, 19 paź 2013

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

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 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