Sierpinski Triangle [test]

Using, learning, programming and modding the Gigatron and anything related.
Forum rules
Be nice. No drama.
Post Reply
Phibrizzo
Posts: 69
Joined: 09 Nov 2022, 22:46

Sierpinski Triangle [test]

Post by Phibrizzo »

Hello
This time very easy Siepinski Trinagle generator.
I used no recursion method. Very strange method, based on random numbers.
SierpTriangle.gt1
(146 Bytes) Downloaded 166 times

Code: Select all

_CPU    v5.vcpu

_VAR    FC_Main #$20A0
_VAR    FC_Fill #$21A0
_VAR    TableX  #$22A0
_VAR    TableY  #$22A4

_RUN    FC_Main

_VAR    random  #129
_VAR    coordX  #131
_VAR    coordY  #132
_VAR    temp    #133
_VAR    mask    #135

_ORG    FC_Main

; -- Clear screen -----
        LDWI    FC_Fill
        CALL    vAC

        LDI     #0
        STW     coordX
        LDWI    #$3fff
        STW     mask

; -- random point ------
_LAB #1
        LDWI    #$04a7  ; SYS_Random
        STW     sysFn
        
        SYS     #34
        ANDW    mask
        STW     random

        LDWI    #$04b9  ; SYS_LSRW7
        STW     sysFn

        LDW     random
        LSLW
        ADDW    random  ; quick *3
        SYS     #30
        SYS     #30
        STW     random  ; >>14

; -- math coordinates ---
        LDWI    #$0600  ; SYS_LSRW1
        STW     sysFn

        LDWI    TableX
        ADDW    random
        PEEK
        STW     temp
        LD      coordX
        ADDW    temp
        SYS     #48
        ST      coordX

        LDWI    TableY
        ADDW    random
        PEEK
        STW     temp
        LD      coordY
        ADDW    temp
        SYS     #48
        ST      coordY

; --- Draw point --------
        LDI     #63
        POKE    coordX
        BRA     #1

; ---- Clear screen -----
_ORG FC_Fill

_VAR d  #129
_VAR D  #130
_VAR s  #131
_VAR S  #132

_ORG FC_Fill

        LDWI    #$0B03  ; SYS_SetMemory
        STW     #$22
        LDWI    #$78A0
        STW     @s
        LDWI    #$0800  ; address of screen
        STW     @d
        LD      #0      ; color
        ST      #$25    ; copy value
_LAB #1        
        LD      @s      ; lenght area
        ST      #$24    ; copy count (c)
        LDW     @d
        STW     #$26    ; dest addr (c)
        SYS     #54
        INC     @D
        LD      @S      ; height area
        SUBI    #1
        ST      @S
        BNE     #1
        RET
; -----------------------

_ORG    TableX
DC_B    #80,  #11, #149

_ORG    TableY
DC_B    #8,  #128, #128
lb3361
Posts: 367
Joined: 17 Feb 2021, 23:07

Re: Sierpinski Triangle [test]

Post by lb3361 »

I am curious. If you're using CPU.v5, why not using CALLI FC_Fill ?

Code: Select all

_CPU    v5.vcpu
      LDWI    FC_Fill
      CALL    vAC
Phibrizzo
Posts: 69
Joined: 09 Nov 2022, 22:46

Re: Sierpinski Triangle [test]

Post by Phibrizzo »

Yes, You're right. But, according to documentation CALLI is experimental instruction from a DEV ROM.
at67
Site Admin
Posts: 647
Joined: 14 May 2018, 08:29

Re: Sierpinski Triangle [test]

Post by at67 »

CALLI is canonical for all ROM's > ROMv4.
Phibrizzo
Posts: 69
Joined: 09 Nov 2022, 22:46

Re: Sierpinski Triangle [test]

Post by Phibrizzo »

Thanks for explanation.
To this moment i was based on this file:

https://github.com/kervinck/gigatron-ro ... ummary.txt
petersieg
Posts: 111
Joined: 28 Jun 2023, 09:06

Re: Sierpinski Triangle [test]

Post by petersieg »

Thx.
Maybe changing colors after 1 min and / or drawing with random colors each pixel?

best, Peter
Attachments
Bildschirmfoto 2023-11-17 um 10.57.44.png
Bildschirmfoto 2023-11-17 um 10.57.44.png (49.8 KiB) Viewed 2415 times
Phibrizzo
Posts: 69
Joined: 09 Nov 2022, 22:46

Re: Sierpinski Triangle [test]

Post by Phibrizzo »

I did some optymalizations.
Now coordinates X and Y are calculated in the same time.

Code: Select all

_CPU    v5.vcpu

_VAR    FC_Main #$20A0
_VAR    FC_Fill #$21A0
_VAR    TableXY  #$22A0

_RUN    FC_Main

; -----------------------

_VAR    random  #129
_VAR    coordXY #131
_VAR    coordY  #132
_VAR    mask    #135
_VAR    mask2   #137

_ORG    FC_Main

        CALLI   FC_Fill

        LDI     #0
        STW     coordXY

        LDWI    #$3fff
        STW     mask

        LDWI    #$7f7f
        STW     mask2

; -- random point ------
        
_LAB #1
        LDWI    #$04a7  ; SYS_Random
        STW     sysFn
        
        SYS     #34
        ANDW    mask
        STW     random

        LDWI    #$04b9  ; SYS_LSRW7
        STW     sysFn

        LDW     random
        LSLW
        ADDW    random  ; quick *3
        SYS     #30
        SYS     #30
        LSLW
        STW     random  ; (>>14) <<1

; -- math coordinates ---

        LDWI    #$0600  ; SYS_LSRW1
        STW     sysFn

        LDW     coordXY
        SYS     #48
        ANDW    mask2
        STW     coordXY
        LDWI    TableXY
        ADDW    random
        DEEK
        ADDW    coordXY
        STW     coordXY

        LDI     #62
        POKE    coordXY

        BRA     #1

; ---- Clear screen -----

_VAR d  #129
_VAR D  #130
_VAR s  #131
_VAR S  #132

_ORG FC_Fill

        LDWI    #$0B03  ; SYS_SetMemory
        STW     #$22

        LDWI    #$78A0
        STW     @s

        LDWI    #$0800  ; address of screen
        STW     @d

        LD      #0      ; color
        ST      #$25    ; copy value
_LAB #1        
        LD      @s      ; lenght area
        ST      #$24    ; copy count (c)
    
        LDW     @d
        STW     #$26    ; dest addr (c)
        
        SYS     #54
        
        INC     @D

        LD      @S      ; height area
        SUBI    #1
        ST      @S
        BNE     #1

        RET
; -----------------------
_ORG    TableXY

DC_B    #40,  #4
DC_B     #6, #64
DC_B    #75, #64
SierpTrangle2.gt1
(133 Bytes) Downloaded 145 times
Post Reply