Важная информация

User Tag List

Страница 3 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 21 по 30 из 59

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

  1. #21
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,720
    Спасибо Благодарностей отдано 
    41
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    2 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. Причина: Супер!

  2. #22
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,274
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    97
    Поблагодарили
    70 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  3. #23
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,720
    Спасибо Благодарностей отдано 
    41
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    2 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.

  4. #24
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,274
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    97
    Поблагодарили
    70 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    [ @Shiny буду признателен, если подскажешь как правильно позиционировать по вертикали

    Ты с приоритетом поиграл что ли?(:
    Вертикальная позиция - адрес, куда ты записываешь данные
    Код:
    pmg0=word((pmgmem*256)+1024+30)
    сменишь адрес на +31 и спрайт сместится вниз на 1 линию.

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

    Код:
    	sprPos(i, 0)
    	wait(1)
    лучше использовать wait() в начале, чтобы спрайт не мерцал.

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

    breeze (03.09.2024)

  6. #25
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,720
    Спасибо Благодарностей отдано 
    41
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Thumbs up

    Цитата Сообщение от Shiny Посмотреть сообщение
    Ты с приоритетом поиграл что ли?(:
    Вроде нет.


    Цитата Сообщение от Shiny Посмотреть сообщение
    Вертикальная позиция - адрес, куда ты записываешь данные
    Код:
    pmg0=word((pmgmem*256)+1024+30)
    сменишь адрес на +31 и спрайт сместится вниз на 1 линию.
    ооо! зер гÿт попробую.


    Цитата Сообщение от Shiny Посмотреть сообщение
    лучше использовать wait() в начале, чтобы спрайт не мерцал.
    Логично, бездумно дёрнул из чужого примера)

  7. #26
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,274
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    97
    Поблагодарили
    70 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На обычных цветах
    Код:
    poke ($02C0,$CA)//PCOLR0 color of player 0
    нет наложений.
    На atariage много чего понаписано насчет сложения цветов. Удобнее отказаться от GR.0 - в нем два playfield сразу без фона.

  8. #27
    Guru Аватар для andrews
    Регистрация
    20.04.2006
    Адрес
    Санкт-Петербург
    Сообщений
    2,745
    Спасибо Благодарностей отдано 
    443
    Спасибо Благодарностей получено 
    212
    Поблагодарили
    190 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    И
    while true {}
    в конце void main(), а то Altirr-у корежит.
    А как теперь рожицу стрелками двигать по экрану?

  9. #28
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,720
    Спасибо Благодарностей отдано 
    41
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Shiny Посмотреть сообщение
    На обычных цветах
    Код:
    poke ($02C0,$CA)//PCOLR0 color of player 0
    нет наложений.
    На atariage много чего понаписано насчет сложения цветов. Удобнее отказаться от GR.0 - в нем два playfield сразу без фона.

    ооо! это уже интереснее



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

    Цитата Сообщение от andrews Посмотреть сообщение
    И
    while true {}
    в конце void main(), а то Altirr-у корежит.
    А как теперь рожицу стрелками двигать по экрану?
    Зачем? Оно после цикла в бейсик выходит. Если бейсика нет, вылетает в SelfTest.

    Движений пока никаких нет. Это просто тест вывода спрайта.

  10. #29
    Guru Аватар для breeze
    Регистрация
    11.02.2005
    Адрес
    【RB】
    Сообщений
    3,720
    Спасибо Благодарностей отдано 
    41
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Exclamation

    Короче немного переделал вывод. Разбил на блок инициализации и блок отрисовки.
    Добавил опрос джопстика и теперь рожу можно погонять по экрану.

    sprites.mfk:
    Код:
    const byte pmgmem=$80 //pmgmem*256 == place for sprites
    
    
    void sprInit() {
    	poke($D407,pmgmem)//PMGBASE place in memory
    	poke ($022F,%111110)//SDMCTL
    	poke ($D01D,3)//GRACTL Enable PM display
    	poke ($026F,1)//GPRIOR priority
    	
    	poke ($D008,0)//SIZEP0 size of player 0: ;0 = normal, 1 = double, 3 = quadruple
    }
    
    
    void sprShow(pointer _sprData, byte _sprSize, byte _sprColor, byte x, byte y) {
    	pointer pmg0
    	ubyte i
    
    
    	poke ($02C0,_sprColor)//$CF - PCOLR0 color of player 0
    	//poke ($02C0,$CA)//PCOLR0 color of player 0
    
    
    	poke ($D000,x)// $30 HPOSP0 horisontal place player 0
    
    
    	// copy sprite data to defined place
    	pmg0=word((pmgmem*256)+1024+y)
    	for i,0,to,_sprSize-1 {
    		pmg0[i]=_sprData[i]
    	}
    }
    test.mfk:
    Код:
    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() {
    	byte pX
    	byte pY
    	byte joy
    
    
    	putstr(hello_world, hello_world.length)
    	new_line()
    	putstrz("Hello world again"z)
    	new_line()
    	sprInit()
    
    
    //    byte i 
    //    for i,48,to,200 {
    //	wait(1)
    //	sprCreate(sprite0, sprite0.length, $CF, i, 30)
    //    }
    
    
    	pX = 60
    	pY = 30
    	putstrz("PosX: "z)
    	putword(pX)
            putstrz(" PosY: "z)
    	putword(pY)
    	sprShow(sprite0, sprite0.length, %11000000, pX, pY)
    
    
    	while (true) {
    		wait(1)
    		joy = peek(632)
    		if (joy == 11 || joy == 10 || joy == 9) {
    			pX -= 1
    		} else if (joy == 7 || joy == 6 || joy == 5) {
    			pX += 1
    		}
    		if (joy == 14 || joy == 10 || joy == 6) {
    			pY -= 1
    		} else if (joy == 13 || joy == 9 || joy == 5) {
    			pY += 1
    		}
    		if (joy != 15) {
    			sprShow(sprite0, sprite0.length, %11000000, pX, pY)
    		}
    
    
    	}
    
    
    
    
    }
    Вложения Вложения
    • Тип файла: zip joy.zip (2.0 Кб, Просмотров: 10)

  11. #30
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,274
    Записей в дневнике
    42
    Спасибо Благодарностей отдано 
    7
    Спасибо Благодарностей получено 
    97
    Поблагодарили
    70 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Любопытный подход (: Опрос джойстика можно использовать с помощью теста битов.

    Кстати, тут определяется игрок 0, а всего 0-3(не считая снарядов(missile) 0-3, которые можно объединить в спрайт.

Страница 3 из 6 ПерваяПервая 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

Ваши права

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