Programowanie: Dostęp do pamięci rozszerzonej: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
dodatnia wartość _800FLG nie znaczy, że rozszerzenie nie jest Axlon
Nie podano opisu zmian
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).

Wersja z 19 paź 2013, 08:43

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