; Пример написания внешнего драйвера расширенной памяти BGE 3.12
; 
; Для примера используется конфигурация Pentagon 512 K
; Смена окна в 16 K по адресу #C000, также требуется сохранение 
;     активным основного экрана спектрум (page 5 addr: #4000) и пзу бейсика 48


        device  zxspectrum128    ; for SjASMPlus
        
            ORG #61C0  ; адрес расположения кода драйвера
            
; Вначале идёт байт номера страницы дополнительно исключаемой из пользования ( >7 )
; Если исключать ничего не нужно, то 0
             
              DB 0
                    
; Затем собственно сама программа драйвера
            
 ; A <- номер физической страницы
 ; регистры A,HL,DE,BC - сохраняются автоматически при вызове драйвера,
 ; если используются иные регистры, их нужно сохранять и восстанавливать
 ; в теле драйвера
            
                      
 ; Для Pentagon 512 - формат записи в порт #7FFD :
 
 ; bits 0-2  - младьшие разряды номера страницы
 ; bit 3     - обязательно 0 - выбор страницы экранной памяти
 ; bit 4     - обязательно 1 - номер страницы пзу бейсика 48K 
 ; bit 5     - обязательно 0 - защелчка режимов 48/128 должна быть открыта
 ; bits 6-7  - старшие разряды номера страницы  
 
            
p512ram       ld bc,#7FFD
              ld d,a   
              rlca
              rlca
              rlca
              and %11000000
              ld e,a
              ld a,d
              and 7        ; отсекаем верхние разряды, сохраняем bit 3 в 0 (основной экран) 
              or #10       ; сохраняем активным rom 48K
              or e         ; совмещаем
              out (c),a
             ret



;----------------------------------------------------------------------
len  EQU $-p512ram

     ASSERT  len < 64   ; проверка на допустимый размер драйвера
     
     DISPLAY "Lenght RAM driver :",/a, len
     
     savebin "Pent-512.ram",p512ram,len
     