19087

Christmas Star Challenge

NOTICE / MANUAL

TXT (2)

## NOTICE TEXTE n° 1 (3.62 Ko)

*********************************************** [ A ] ******************************************************************* ;8B8R8PS.ASM ;8 Bytes, ;8 Registers ; and an ;8-Pointed Star ;ENTRY FOR THE #VCC2022 ;By Leosoft (arnOLdE) ;size = 37 bytes ;Draw a simple triangle [(8,4),(-8,4),(0,-4)] full of *s, but mirror ;every * in all 4 directions ;registers use: ;A all purpose & calc, of course ;B counter for 4x swap_n_print ;C x-coord (relative) ;D starting x for current y ;E y-coord (relative) ;H x-coord (absolute) ;L y-coord (absolute) ;addresses of the two firmware functions used: TXT_OUTPUT equ #bb5a ;A=ascii of character to print SET_CURSOR equ #bb75 ;input H=x, L=y org #B000 ;but can be loaded wherever ld de,#0804 ;initial y=4, initial starting x=8 y_loop: ld c,d ;load starting coord x_loop: ld b,4 ;four iterations/stars swap_n_print: xor a sub e ;negate y ld e,c ;y = x ld c,a ;x = -y add 17 ;convert to absolute coords with center in 17,17 ld h,a ;H=absolute x sub c ;=17 again add e ;+y ld l,a ;L=absolute y call SET_CURSOR ld a,"*" ;this way, we print *s at call TXT_OUTPUT ;(-y,x),(-x,-y),(y,-x),(x,y) djnz swap_n_print ;after 4 iterations, C & E are back to original values) dec c ;next x in row/column ld a,d cpl ;=0-D-1 (cpl is one byte less than neg and it cp c ;provides us with the exact value we need!) jr nz,x_loop dec e ;next y (1 up) dec d ;next x starts 1 left (and ends 1 right) ret m ;done if D<0 done jr y_loop *********************************************** [ B ] ******************************************************************* ORG #A000 ; ETOILE DE NOEL RETROPOKE 12/2022 LG 73 OCTETS CALL #BBFF ; REINITIALISER LE GESTIONNAIRE DE L'ECRAN LD DE, #1109 ; 'D'=17 ETOILES PAR COLONNE ET PAR LIGNG ; 'E'=COMPTEUR DE 9 COL & 9 LIG COL_LIG ; POSITIONNER ET AFFICHER HORIZONTAL LD B, D ; 'B'=NB ETOILES OPCODE_HOR ; AFFICHAGE HORIZONTAL LD HL, #0B0A ; 'H'=COL & 'L'=LIG (AUTOMODIFIER) INC H ; INC L ; LD (OPCODE_HOR + 1), HL ; SAUVEGARDE POUR PROCHAIN APPEL CALL #BB75 ; EQU LOCATE 'H', 'L' LARGEUR LD A, 42 ; 'A'=CHR\$(42) [*] CALL #BB5A ; EQU PRINT 'A' DJNZ, LARGEUR ; AFFICHER LA LIGNE D'ETOILE HORISONTALEMENT LD B, D ; 'B'=NB ETOILES OPCODE_VER ; AFFICHAGE VERTICAL LD HL, #0F06 ; 'H'=COL & 'L'=LIG (AUTOMODIFIER) INC L ; INC H ; LD (OPCODE_VER + 1), HL ; SAUVEGARDE POUR PROCHAIN APPEL HAUTEUR PUSH HL CALL #BB75 ; EQU LOCATE 'H', 'L' LD A, 42 ; 'A'=CHR\$(42) [*] CALL #BB5A ; EQU PRINT 'A' POP HL INC L ; PASSER A LA LIGNE DE DESSOUS DJNZ, HAUTEUR ; ET FAIRE TOUTE LA COLONNE VERTICALEMENT LD A, E ; REGARDER SI IL FAUT INVERSER LES SENS CP A, 6 ; SI LE COMPTEUR EST < 6 JR NC, TOURNE ; NON LD HL, #1414 ; OPCODE EQU 'INC D' * 2 LD (TOURNE), HL ; AUGMENTER LE NOMBRE D'ETOILE LD A, #25 ; OPCODE EQU 'DEC H' LD (OPCODE_HOR + 3), A ; INVERSER LE SENS HORIZONTAL LD A, #2D ; OPCODE EQU 'DEC L' LD (OPCODE_VER + 3), A ; INVERSER LE SENS VERTICAL TOURNE DEC D ; ENLEVER 2 ETOILES A CHAQUE FOIS DEC D DEC E ; ET NE FAIRE QUE 9 ITERATIONS JR NZ, COL_LIG ; RET ; TERMINER LE PROCESSUS FIN

## NOTICE TEXTE n° 2 (1.71 Ko)

*********************************************** [ C ] ******************************************************************* ; Demoniak org #A000 run \$ write direct "xmas.bin" LD DE,#050E LD H,17 ; y=17 LoopY LD B,17 ; x=17 LoopX LD C,0 LD A,H ADD A,B CP E ; x+y<14 ? JR NC,Test2 DEC C Test2 CP 23 ; x+y<21? JR NC,Test3 INC C Test3 LD A,H ADD A,4 ; A=y+4 CP B ; y+4<x ? JR NC,Test4 DEC C Test4 LD A,B ADD A,D LD L,A ; L=x+5 LD A,H CP L ; y<x+5 ? JR NC,Test5 INC C Test5 LD A,H CALL TstAbs LD A,B CALL TstAbs LD A,' ' ; space DEC C ; c = 1 ? JR Z,PrintChar LD A,'*' ; star PrintChar CALL #BB5A DJNZ LoopX ; loop for 17 x LD A,10 ; print CR CALL #BB5A LD A,13 ; print LF CALL #BB5A DEC H JR NZ,LoopY JP #BB18 ; At the end wait key TstAbs: CP D RET C CP E RET NC INC C RET _endcode *********************************************** [ D ] ******************************************************************* ;; Author: Gallegux ;; Category: Christmas Challenge or Wild ;; System: Amstrad CPC ;; Len code only: 77 INIC equ #4005 org INIC ld hl, datos ld bc, #320a ld a, l loop1 push bc ld b, (hl) : inc hl loop2 push hl push bc push af call #bb5d pop af pop bc pop hl djnz loop2 pop bc xor c djnz loop1 ;ret ; return to basic -> 76 bytes and basic loader jr \$ ; 77 bytes and no basic loader datos db 16,1,7,1,31,2,5,2,31,3,3,3,31,4,1,4,27,17 db 24,15,26,13,28,11,30,9,30,11,28,13,26,15 db 24,17,27,4,1,4,31,3,3,3,31,2,5,2,31,1,7,1 size equ \$-INIC print "SIZE: &size"