;
;.snowflake
;
;author:          bfox
;category:        christmas challenge
;system:          ZX Spectrum (any) or compatible
;language:        assembler
;len source code: 0x0120, 288 bytes
;len exe file:    0x002c, 44 bytes
;len code only:   0x0023, 35 bytes
;instructions:
;                 you can use any emulator of your choice. I recommend SpecEMU (windows) & FUSE (macOS/linux);
;                 in most cases it's enough to drag&drop the .tap file into emulator's window,
;                 then go to BASIC and type:
;                                             LOAD""CODE
;                                             LIST USR 3e4 (or something like that)
;
;                 source code follows below.
;                 you can compile it using sjasmplus (for example) from terminal/command promt:
;
;                                            sjasmplus.exe snowflake.asm
;                                                         or
;                                              sjasmplus snowflake.asm
;
;                 you will get two files on the disk:         snowflake.tap - emulator image
;                                                             snowflake.bin - raw machine code compiled to 30000
;description:
;                 I divided the figure into four right-angled triangles that overlap each other.
;                 the ROM character print procedure at address 16 (#10) is used for the output.
;                 unfortunately, on the ZX Spectrum it's impossible to set the coordinates for the output via
;                 system variables, so I had to use <AT> control code with the parameters, also passed through
;                 that [goddamned] RST16.  the procedure in #200a helped with this.
;                 my code doesn't clear the screen and doesn't open the 'main screen' channel - I'm sure you'll
;                 do it just fine on your own:) especially since it's not really necessary here... everything
;                 starts successfully from BASIC (see video).
;
;video:           https://youtu.be/ZPhEGh3yPtg
;
;comments:        thanks to the organizers for a great contest! see you next year:)
;
;----------------------------------------------------------------------- ----- ---- --- -- - -  -   -    -     -

               device  zxspectrum48

               org     30000
start
               ld      de,13
loop
               ld      c,e
               call    lines
               ld      a,d : add 5 :   ld c,a
               call    lines

               inc     d
               dec     e
               jr      nz,loop
               ret
lines
               ld      b,d
               call    line
               ld      b,4
line
               call    #200a

               ld      b,e
1               ld      a,#2a : rst 16 : djnz 1b
               ret

end
;----------------------------------------------------------------------- ----- ---- --- -- - -  -   -    -     -

               savebin "snowflake.bin",start,end-start
               savetap "snowflake.tap",code,"snowflake",start,end-start

               display "------------------------------"
               display "start:   ",/A,start," bytes"
               display "total:   ",/A,end-start," bytes"
               display "------------------------------"