User Tag List

Страница 2 из 15 ПерваяПервая 123456 ... ПоследняяПоследняя
Показано с 11 по 20 из 151

Тема: Ретро-ЯП Millfork для Atari, Apple II, ZX Spectrum, MSX, CP/M, NES, Game Boy и MS-DOS

Комбинированный просмотр

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

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Маленькая бестолковая программа, написанная от нечего делать.
    Вложения Вложения
    • Тип файла: rar dhack.rar (1,016 байт, Просмотров: 119)

    Этот пользователь поблагодарил Shiny за это полезное сообщение:

    Dart Alver(31.08.2024)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    10.01.2010
    Адрес
    Смоленская обл.
    Сообщений
    556
    Спасибо Благодарностей отдано 
    187
    Спасибо Благодарностей получено 
    197
    Поблагодарили
    100 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Если б я чуть лучше по англицки понимал, а то переводчик чутка раздражает. ((
    А так забавная вещица. Не знаю конечно насколько компактный код выдаёт данная весчь, но в принципе забавно.
    Можно собственный вариант параметров машины подрисовать, только не понял, можно ли прописать форматы образов для вывода например как TRD (кажется нет). Хотя по сути это легко можно решить и внешними методами.
    Тот-же sjasm в помощь. ))

  4. #3

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Есть некое руководство по добавлению отдельного компьютера к компилятору, даже разработаны Mega65 и Aquarius.
    Насчет ужасма - слышал, что допиливали формат под ассемблер, но не видел.

  5. #4

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Наверное, спрайты и без макросов обойдутся(:
    Попробую на днях заняться с 6502, сейчас занимаюсь Спектрумом. Есть неплохая статья про PMG

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

    Как-то так
    Код:
    // compile java -jar millfork.jar -I .\include\ -t A8 -s pmg.mfk
    import stdlib
    
    const byte pmgmem=$80 //pmgmem*256 == place for sprites
    array(byte) sprd = [0,60,66,129,165,129,129,129,165,153,129,66,60,0]
    
    void main ()
    {
    	pointer pmg0
    	ubyte i
    
    	poke($D407,pmgmem)//PMGBASE place in memory
    
    	poke ($022F,%111110)//SDMCTL
    
    	poke ($D01D,3)//GRACTL Enable PM display
    
    	poke ($026F,1)//GPRIOR priority
    
    	poke ($D000,$30)//HPOSP0 horisontal place player 0
    
    	poke ($02C0,$CF)//PCOLR0 color of player 0
    
    	poke ($D008,0)//SIZEP0 size of player 0: ;0 = normal, 1 = double, 3 = quadruple
    
    // copy sprite data to defined place
    	pmg0=word((pmgmem*256)+1024+30)
    	for i,0,to,13
    	{
    		pmg0[i]=sprd[i]
    	}
     while true{}
    }
    Вложения Вложения
    • Тип файла: rar pmg.rar (1.3 Кб, Просмотров: 117)

    Этот пользователь поблагодарил Shiny за это полезное сообщение:

    breeze(01.09.2024)

  6. #5

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, я написал не совсем верно, вместо poke можно использовать запись antic_pmbase=pmgmem. Но на код это не влияет.
    Интересно посмотреть на генерацию кода копирования памяти
    Код:
        LDA #$1E
        STA main$pmg0
        LDA #$84
        STA main$pmg0 + 1
        LDA #0
        STA main$i
    .wh__00015:
        LDY main$i
        LDA sprd.array, Y
        LDY main$i
        STA (main$pmg0), Y
    .fp__00017:
        LDA main$i
        CMP #$D
        BNE .el__00019
    Сделано все четко - адресация нулевой страницы и цикл 14 итераций подходит для 8-битного индексного регистра Y(он может принимать значения 0-255). Но со счетчиком цикла замудрили. Вообще-то я с подозрением отношусь к разным компиляторам, насмотрелся полученный индусский код, но у millfork'a сделано четко.

    Конечно, можно написать лучше на ассемблере, но на то и сгенерированный исходник(:

    На следующей неделе появится обновление версии, автор пока допиливает. Об изменениях сообщу.

    Этот пользователь поблагодарил Shiny за это полезное сообщение:

    breeze(01.09.2024)

  7. #6

    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,870
    Спасибо Благодарностей отдано 
    522
    Спасибо Благодарностей получено 
    251
    Поблагодарили
    225 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Совсем другое дело. Только что вот это за предупреждение?
    Код:
    WARN:  (progas.mfk:21:17) Unsupported register parameter combination: (A,C)
               sa[word(i)]=call_22b0(i,0)
                           ^
    INFO:  Segment default: $8000-$81f9, size: 506 B (31820 B free, of which unused gaps 0 B)
    в результате выполнения командника
    Код:
    millfork.jar -I .\include\ -t zxspectrum -s progas.mfk
    Последний раз редактировалось andrews; 02.09.2024 в 18:23.

  8. #7

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    "Главное, что хотя бы заработало"(с)
    Это трюк для передачи параметров регистрам при вызове процедуры $22B0 - A=y координата, C=0.

  9. #8

    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,877
    Спасибо Благодарностей отдано 
    128
    Спасибо Благодарностей получено 
    130
    Поблагодарили
    81 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Однако здравствуйте. Я понимаю, что яп ещё «в разработке», но то, что в макрос нельзя передать указатель на array, ну такоэ:

    Код:
    import stdio
    
    array hello_world = "Hello ATARI!"
    
    macro void print(array s) {
    	putstr(s, s.length)
    }
    
    void main() {
    	print(hello_world)
    
    }
    Код:
    ERROR: Type `array` is not defined
    Замечательно, судя по документации, в качестве аргумента может быть только 1 байт? o_O

    Код:
    macro void inc(byte b) {
        b += 1
    }

    Ясно, чуть выше нашел:

    cannot contain variable or array declarations
    Последний раз редактировалось breeze; 03.09.2024 в 11:12. Причина: Супер!

  10. #9

    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,453
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    8
    Спасибо Благодарностей получено 
    168
    Поблагодарили
    120 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    stdio не понимает претензий

  11. #10

    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,877
    Спасибо Благодарностей отдано 
    128
    Спасибо Благодарностей получено 
    130
    Поблагодарили
    81 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    Cool

    Цитата Сообщение от Shiny Посмотреть сообщение
    stdio не понимает претензий
    Я нашел откуда «ноги» названиям растут При желании можно наклепать свои вариации
    Там вообще ооочень интересная ситуация с синтаксисом (по крайней мере в функциях), прям питоном повяло, когда оно начало ругаться, что не может скомпилировать потому что отступы нарушены XD

    Я тут набросал вариант с инклудом для спрайтов. но был немного неприятно удивлён, что вертикальное позиционирование спрайта это ещё тот гемор >_< я даж так и не понял как его менять нужно, на DLI что ли?
    Так же (если я правильно понял) ширина спрайта всегда 16 пикселей (x2), максимум что можно ещё ещё зажЫрнить (x4 и x8).

    Ну и зато теперь стало ясно как раскрашивают спрайтами картинки, когда оно на тексте ползает видно как его цвет меняется:



    Сырки:

    Код:
    import stdio
    import sprites
    
    array hello_world = "Hello ATARI!"
    
    array(byte) sprite0 = [
    	%00000000,
    	%00111100,
    	%01000010,
    	%10000001,
    	%10100101,
    	%10000001,
    	%10000001,
    	%10000001,
    	%10100101,
    	%10011001,
    	%10000001,
    	%01000010,
    	%00111100,
    	%00000000
    ]
    
    noinline asm void wait(byte register(a) f) {
      clc
      adc os_RTCLOK.b2
      .rt_check:
      cmp os_RTCLOK.b2
      bne .rt_check
      rts
    }
    
    void main() {
        putstr(hello_world, hello_world.length)
        new_line()
        putstrz("Hello world again"z)
    
        sprCreate(sprite0, sprite0.length, $CF)
    
        byte i 
        for i,48,to,200 {
    	sprPos(i, 0)
    	wait(1)
        }
    }

    Код:
    const byte pmgmem=$80 //pmgmem*256 == place for sprites
    
    void sprCreate(pointer _sprData, byte _sprSize, byte _sprColor) {
    	pointer pmg0
    	ubyte i
    	poke($D407,pmgmem)//PMGBASE place in memory
    	poke ($022F,%111110)//SDMCTL
    	poke ($D01D,3)//GRACTL Enable PM display
    	poke ($026F,1)//GPRIOR priority
    	poke ($02C0,_sprColor)//$CF - PCOLR0 color of player 0
    	poke ($D008,0)//SIZEP0 size of player 0: ;0 = normal, 1 = double, 3 = quadruple
    // copy sprite data to defined place
    	pmg0=word((pmgmem*256)+1024+30)
    	for i,0,to,_sprSize-1 {
    		pmg0[i]=_sprData[i]
    	}
    }
    
    void sprPos(byte x, byte y) {
    	poke ($D000,x)// $30 HPOSP0 horisontal place player 0
    }
    @Shiny буду признателен, если подскажешь как правильно позиционировать по вертикали


    atari.zip
    Последний раз редактировалось breeze; 03.09.2024 в 13:11.

Страница 2 из 15 ПерваяПервая 123456 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Ответов: 11
    Последнее: 08.12.2023, 17:18
  2. Bad Apple для MSX/MSX2
    от Pyhesty в разделе MSX
    Ответов: 4
    Последнее: 31.05.2021, 21:45
  3. Перенос игр с Game Boy на ZX Spectrum
    от CityAceE в разделе Программирование
    Ответов: 104
    Последнее: 14.02.2019, 10:56
  4. Game Boy Advance
    от megabyte в разделе Nintendo
    Ответов: 8
    Последнее: 22.05.2006, 14:48
  5. Game Boy Advance в Питере.
    от Surfin_Bird в разделе Nintendo
    Ответов: 10
    Последнее: 21.08.2005, 09:50

Ваши права

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