STAR81 AUTHOR zxpope CATEGORY Christmas Challenge https://logiker.com/Vintage-Computing-Christmas-Challenge-2022 http://retrowiki.es/viewtopic.php?f=83&t=200038966 SYSTEM Sinclair ZX81 LANGUAGE C Z80 cross-c compiler zcc z88dk v20407-915a4fecb-20221212 LEN SOURCE CODE 150 Bytes LEN EXE FILE 1976 Bytes LEN CODE ONLY 344 Bytes INSTRUCTIONS download EightyOne emulator execute "wine EightyOne.exe" select MENU>OPTIONS>HARDWARE>ZX81 with 4k BYTES RAM select MENU>OPTIONS>HARDWARE>ADVANCED SETTINGS>ROM FILE>ZX81.ROM select MENU>FILE>OPEN TAPE>STAR81.P enjoy DESCRIPTION This 150 Bytes source code shows a nice xmas star in a 32 column screen. The star is a 32*18 matrix stored in a compressed vector. Compression algorithm is simple, N identical characters are substitured with the letter in ASCII A+N In a ZX81 machine with 8-bit Z80 microprocesor code size is 314 Bytes, 344 Bytes in a new 64-bit microprocessor. It is portable code, so you can run it in any retrocomputer, mainframe or CRAY supercomputer. AS400 remains untested. ---------------------------------------------------------------------------- #include char u[]=" z 1 8 xMBHBXCFCXDDDXEBETRQPSNULWJWLUNSPQRTEBEXDDDXCFCXBHBL",v=59; main(){while(v-->8)while((u[v]--)-'A')putchar(u[v&7]);} ---------------------------------------------------------------------------- * * ** ** *** *** **** **** ***************** *************** ************* *********** ********* *********** ************* *************** ***************** **** **** *** *** ** ** * * COMMENTS ========= SIZE ==== wc *.c *.p *.exe 3 9 152 star81.c 3 34 1976 star81.p 1 47 16120 star81.exe 0 1 8 nop.c 3 28 1662 nop.p 2 38 15776 nop.exe NOP.C main(){} NOP.P 1662 BYTES START81.C 152BYTES STAR81.P FILE OF 1976 BYTES 314 BYTES OF Z80 REAL CODE START81.EXE NOP.EXE SAME CODE COMPILED UNDER AMD64 GCC COMPILER GENERATES 344 BYTES OF REAL CODE 16120-15776=344 bytes (gcc version 11.3.0 (Ubuntu 11.3.0-1ubuntu1~22.04)) GENERATED ASSEMBLER CODE ======================== star81.c: 1 C_LINE 2,"star81.c" 2 SECTION data_compiler 2 ._u 2 0000 207a203120382078 defm " z 1 8 xMBHBXCFCXDDDXEBETRQPSN" 4d42484258434643 5844444458454245 54525150534e 2 001e 554c574a574c554e defm "ULWJWLUNSPQRTEBEXDDDXCFCXBHBL" 5350515254454245 5844444458434643 584248424c 2 003b 00 defb 0 2 2 SECTION code_compiler 2 SECTION data_compiler 2 ._v 2 003c 00 defb 59 2 SECTION code_compiler 2 C_LINE 3,"star81.c" 3 3 ; Function main flags 0x00000000 __stdc 3 ; int main() 3 C_LINE 3,"star81.c::main::0::1" star81.c::main::0::1: 3 ._main 3 .i_4 3 0000 213c00 ld hl,_v 3 0003 cd0000 call l_gchar 3 0006 2b dec hl 3 0007 7d ld a,l 3 0008 323c00 ld (_v),a 3 000b 23 inc hl 3 000c 110800 ld de,8 3 000f eb ex de,hl 3 0010 cd0000 call l_gt 3 0013 d0 ret nc 3 .i_6 3 0014 210000 ld hl,_u 3 0017 e5 push hl 3 0018 213c00 ld hl,_v 3 001b cd0000 call l_gchar 3 001e d1 pop de 3 001f 19 add hl,de 3 0020 e5 push hl 3 0021 cd0000 call l_gchar 3 0024 2b dec hl 3 0025 d1 pop de 3 0026 7d ld a,l 3 0027 12 ld (de),a 3 0028 23 inc hl 3 0029 01bfff ld bc,-65 3 002c 09 add hl,bc 3 002d 7c ld a,h 3 002e b5 or l 3 002f ca0000 jp z,i_7 ; 3 0032 210000 ld hl,_u 3 0035 e5 push hl 3 0036 213c00 ld hl,_v 3 0039 cd0000 call l_gchar 3 003c 3b ld a,l 3 003d e607 and 7 3 003f 6f ld l,a 3 0040 2600 ld h,0 3 0042 d1 pop de 3 0043 19 add hl,de 3 0044 cd0000 call l_gchar 3 0047 e5 push hl 3 0048 210a00 ld hl,__sgoioblk+10 3 004b e5 push hl 3 004c cd0000 call fputc_callee 3 004f c31400 jp i_6 ;EOS 3 .i_5 3 0052 c9 ret INSTALL NOTES ============= sudo apt install -y build-essential bison flex libxml2-dev subversion zlib1g-dev m4 ragel re2c dos2unix texinfo texi2html gdb curl cpanminus ccache libboost-all-dev libmodern-perl-perl libyaml-perl liblocal-lib-perl libcapture-tiny-perl libpath-tiny-perl libtext-table-perl libdata-hexdump-perl libregexp-common-perl libclone-perl libfile-slurp-perl cpanm --local-lib=~/perl5 App::Prove CPU::Z80::Assembler Data::Dump Data::HexDump File::Path List::Uniq Modern::Perl Object::Tiny::RW Regexp::Common Test::Harness Text::Diff Text::Table YAML::Tiny eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) git clone --recursive https://github.com/z88dk/z88dk.git cd z88dk export BUILD_SDCC=1 export BUILD_SDCC_HTTP=1 chmod 777 build.sh ./build.sh sudo apt install ttyrec ttygif .profile: export PATH=${PATH}:${HOME}/z88dk/bin export ZCCCFG=${HOME}/z88dk/lib/config