; ;.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 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 "------------------------------"