User Tag List

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

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

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

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

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

    По умолчанию

    Цитата Сообщение от andrews Посмотреть сообщение
    желателен простой пример с окружностью и/или Helloword.
    пример Helloworld есть на Github
    Код:
    // compile with
    // java -jar millfork.jar -I ${PATH}/include -t ${platform} ${PATH}/examples/hello_world/hello_world.mfk
    
    import stdio
    
    array hello_world = "Hello world"
    
    void main() {
        ensure_mixedcase()
    
    #if CBM_64 || CBM_264
        set_bg_color(white)
    #endif
    #if CBM_64 || CBM_264 || ZX_SPECTRUM
        set_border(red)
    #endif
    
        putstr(hello_world, hello_world.length)
        new_line()
        putstrz("Hello world again"z)
    
    #if not(CPM)
        while(true){}
    #endif
    
    }
    Окружность по Брезенхему написана, но есть один нюанс, пока выясняется
    Код:
    //Bresenham circle
    //http://members.chello.at/easyfilter/bresenham.html
    
    array(word) sa[192]
    array(byte) bw = [$80,$40,$20,$10,8,4,2,1]
    pointer sd
    
    asm word call_22b0(byte a,byte c) @ $22b0 extern
    
    void pp(ubyte x0,ubyte y0)
    {
    	sd=sa[y0]+(x0>>3)
    	sd[0] |= bw[x0&7]
    }
    
    void inits()
    {
     ubyte i
    	for i,0,to,191
    	{
    	sa[word(i)]=call_22b0(i,0)
    	}
    }
    
    void cls()
    {
    	asm
    	{
    //		xor a
    //		ld  b,$18
    //		call  3652
    	ld hl,$4000
    	ld de,$4001
    	ld bc,6144
    	ld (hl),l
    	ldir
    	ld (hl),$38
    	ld bc,767
    	ldir
    	}
    }
    void circle(ubyte xm,ubyte ym,ubyte r)
    {
    	sbyte x,y
    	unsigned16 err,rr
    
    	x=0-r// error with x=-r
    	y=0
    	err=2-r-r//2-2*r
    	do
    	{
    	pp(xm-x,ym+y)
    	pp(xm-y,ym-x)
    	pp(xm+x,ym-y)
    	pp(xm+y,ym+x)
    	rr=err
    
    	if (rr<=y) {
    		y=y+1
    		err=err+y+y+1//err+y*2+1
    	}
    
    	if (rr>x || err>y) {
    		x=x+1
    		err=err+x+x+1//err+x*2+1
    	}
    
    	} while (x<0)
    
    }
    void main() {
    
    	inits()//precalc screen lines adresses
    	cls()
    	circle(128,96,80)
    
        while true {}
    }

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

    andrews(02.09.2024)

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

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

Эту тему просматривают: 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

Ваши права

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