User Tag List

Показано с 1 по 10 из 26

Тема: Старый-Новый Язык Noahsoft PL65

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #23

    Регистрация
    26.02.2011
    Адрес
    Москва
    Сообщений
    258
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    25
    Поблагодарили
    18 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ну, значит, продолжение истории...
    Связался я с Avery Lee - создатель Алтирры и он тут же намекнул в чём проблема кода.
    Почему намекнул, а потому, что он же не знал как именно я включаю реальную Атарьку.

    В общем, располагая данными программки XRAM, я отмаскировал все биты в PORTB, которые нас не могли интересовать и получил значение включённого нулевого(main) фрейма как $91. Здесь, почти ВСЁ было правильно, кроме первого(второй по счёту справа) бита.
    Для PORTB он работает инверсно по отношению к остальным.

    То есть когда я обнулял его программно, ОН ВКЛЮЧАЛ БЕЙСИК, а бейсик при загрузке вызывал GR. 0, то есть, переносил память и инициализировал новый экран, что и портило мою программку.

    Вот рабочий код:
    Код:
    !====================================!
    ! BANKS.PRG                          !
    !   Using 130XE Extended Banks in    !
    !     PL65 Programming Language      !
    !------------------------------------!
    ! Evgeny Zolotarev,(aka 576XE), 2020 !
    !====================================!
    INCLUDE TERMINAL.LIB
    
    !- CONSTANTS & VARIABLES:
    CONST bkMask=%10010001
    BYTE PORTB=$D301,NMIEN=$D40E,bkTag
    INT bkNum
    
    !- DUMMY array representing ---------!
    !- selected BANK's slice ------------!
    BYTE bkMem[$4000]=$4000
    
    !- Bank Selector Values -------------!
    !- Atari800WinPlus 576XE ------------!
    BYTE bkSel[33]
    DATA $93,
      $81,$83,$85,$87,$89,$8B,$8D,$8F,
      $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,
      $C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF,
      $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF;
    
    !- Bank Selector Values -------------!
    !- Altirra 576XE Compy scheme -------!
    ! BYTE bkSel[33]
    ! DATA $33,
    !      $21,$23,$25,$27,$29,$2B,$2D,$2F,
    !      $61,$63,$65,$67,$69,$6B,$6D,$6F,
    !      $A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF,
    !      $E1,$E3,$E5,$E7,$E9,$EB,$ED,$EF;
    
    ! String VAR  to store in all BANKS
    STRING inp$[4+27]
      DATA "==> User DATA from Bank #00";
    
    ! Set string as VAR for appending
    STRING out$[4+27]
      DATA "                           ";
    
    !- PROCEDURES:
    !- Clear Screen Procedure -----------!
    PROC clrScr()
      CONST clr=255
    BEGIN WRTSTR(CHR$(125)) END
    
    !- Wait for Any Key Pressed ---------!
    PROC anyKey()
      CONST none=255
      BYTE CH=764
    BEGIN
      WRTSTR("Wait for a Key...") CR()
      WHILE CH=none DO ENDWHILE
      CH=none
    END
    
    !- Place bkSel Tags into PORTB ------!
    PROC setBk*(BYTE bkTag)
    BEGIN
    !- Wrapper STOPs/STARTs IRQ & NMI ---!
      SEI LDA #$00 STA NMIEN
      LDA PORTB
      AND bkMask OR bkTag
      STA PORTB
      LDA #$40 STA NMIEN CLI
    END
    
    !- Send bkNum to setBk subroutine ---!
    PROC setBank(INT bkNum)
    BEGIN
      bkTag=bkSel[bkNum]
      setBk*(bkTag)
    END
    
    !- Writes to Bank -------------------!
    PROC writBk()
    BEGIN
      FOR bkNum=0 TO 32 DO
        WRTSTR("Writing to BANK #") WRITE(bkNum) CR()
        IF bkNum<10 THEN
          inp$[25,25]=STR$(0) inp$[26,26]=STR$(bkNum)
        ELSE inp$[25]=STR$(bkNum) ENDIF
        out$=inp$
        setBank(bkNum)
        MOVE(.out,LEN(out$),.bkMem)
      NEXT
    END
    
    !- Reads from Bank ------------------!
    PROC readBk()
    BEGIN
      FOR bkNum=0 TO 32 DO
        WRTSTR("Reading BANK #") WRITE(bkNum) CR()
        setBank(bkNum)
        MOVE(.bkMem,LEN(out$),.out)
        WRTSTR(out$) CR()
      NEXT
    END
    
    !------------------------------------!
    MAIN()
    BEGIN
      clrScr() anyKey() writBk()
      anyKey() clrScr() readBk()
    END
    ! >>> EOF <<< !
    Заметьте, что я оставил маску ПРЕЖНЕЙ (Маска просто сохраняет от стирания системные данные в PORTB), зато значение нулевого тэга поменял. Можно ещё в конце MAIN добавить восстановление PORTB, но мне не это было нужно, а работа с EXTMEM.

    zen

    - - - Добавлено - - -

    Ну, хотелось бы прояснить как с этим можно работать.

    Раз у нас есть доступ ко всей памяти, мы можем исключить из списка основную память - $93, 130XE память - ($E3,$E7,$EB,$EF), например для рамдиска или программ её использующих (MAE assembler, CLSN Pascal etc.), зато остальную память отдать программной Куче.

    zen
    Последний раз редактировалось ezswift; 24.12.2020 в 12:07.
    MAC и PC - это всего лишь периферия для Атари...
    130XE|XC12|CA2001|XF551|IDEPlus2.0|SIO2SD|SIO2IDE| RAM576XE+Covoх|SIO2PC|MAXFLASH8|MAXFLASH1|The Ultimate Cartridge|

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. ПК8000 - Софт: Старый и Новый
    от ivagor в разделе ПК8000
    Ответов: 344
    Последнее: 08.11.2025, 06:55
  2. Новый старый ZX-Next: сборка, тестирование, производство.
    от ZXFanat в разделе Несортированное железо
    Ответов: 51
    Последнее: 01.10.2011, 08:41
  3. про новый-старый спектрум
    от xailar в разделе ZX Концепции
    Ответов: 3
    Последнее: 06.12.2010, 10:42

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •