Programowanie: Dostęp do pamięci rozszerzonej

From Atariki

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

Personal tools