Difference between revisions of "Homebrew:CCtro"
From veswiki
					
										
					
					| (3 intermediate revisions by the same user not shown) | |||
| Line 2: | Line 2: | ||
| https://www.pouet.net/prod.php?which=82729 <br> | https://www.pouet.net/prod.php?which=82729 <br> | ||
| − | [ | + | [https://channelf.se/veswiki/index.php?title=File:Cctro.bin Download bin (2048 Bytes)] | 
| <br><br> | <br><br> | ||
| − | + | Original assembly code of CCtro by Frog. | |
| <pre> | <pre> | ||
| − | + | ; CCtro - 256 bytes intro for Fairchild Channel F by Frog | |
| + | ; frog@enlight.ru | ||
| + | ; https://enlight.ru/roi | ||
| + | ;  | ||
| + | ; p.s. thanks to https://channelf.se/veswiki people | ||
| − | + | 	processor f8 | |
| − | |||
| − | |||
| − | + | clrscrn	= $00d0		; uses r31 | |
| − | + | delay	= $008f | |
| − | + | drawchar = $0679	; prints char r0 (code+color) at col r1, row r2 | |
| − | |||
| − | + | xc0 = 29	; chars x0 | |
| − | + | yc0 = 27	; chars y0  | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | 	org	$800 | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | cartridgeStart: | ||
| + | 	.byte	$55, $2B		; cartridge header | ||
| + | |||
| + | cartridgeEntry: | ||
| + | |||
| + | 	li	$c6			; $21 - b/w palette, fill with black. $c6 - color palette, fill with gray | ||
| + | 	lr	3, A | ||
| + | 	pi	clrscrn			; clrscrn BIOS call | ||
| + | |||
| + | |||
| + | ; draw checkerboard ----------------------------------------- | ||
| + | ;	clr	8			; 0-> r8. (r8 used to flip bit 0/1) [commented by e5frog, not needed and not working code] | ||
| + | 	li	2			; shift (0|1) | ||
| + | 	lr	5, a | ||
| + | |||
| + | 	li	11			; (r4) number of iterations (ysize) | ||
| + | 	lr	4,a			; a->r4 | ||
| + | |||
| + | 	li	$40			; color | ||
| + | 	lr	1, a | ||
| + | |||
| + | nextln: | ||
| + | |||
| + | 	lr	a,4			; load y0 | ||
| + | 	ai	23			; a+const->a  (y0) | ||
| + | 	lr	3, a | ||
| + | |||
| + | 	li	50			; related to xsize | ||
| + | 	lr	7,a			; (r7) number of iterations (x) | ||
| + | |||
| + | ; xor r8 with 1 (flip 1 <-> 0) | ||
| + | 	li	1 | ||
| + | 	xs	8				; a xor r8 -> a | ||
| + | 	lr	8,a | ||
| + | |||
| + | ; r8 + 103 -> r2 | ||
| + | 	li	103			; related to x0 WAS:42 | ||
| + | 	as	8			; x = x+y (shift by 1 pixel)  | ||
| + | 	lr	2,a			; (r2) coord (x) | ||
| + | |||
| + | |||
| + | ; draw dotted line | ||
| + | nextpx: | ||
| + | |||
| + | 	li	$80			; color ($00, $40, $80) | ||
| + | 	lr	1,a | ||
| + | |||
| + | 	pi plot			; r1 - color, r2 - x, r3 - y  (a,r6 also lost) | ||
| + | |||
| + | 	ds	2			; r2-- (coord) | ||
| + | 	ds	2			; r2-- (coord) | ||
| + | |||
| + | 	ds	7			; r7-- (number of iterations) | ||
| + | 	bnz nextpx		; until r7 = 0 | ||
| + | |||
| + | 	ds	4			; r4-- | ||
| + | 	bnz nextln		; until r2 = 0 | ||
| + | |||
| + | |||
| + | |||
| + | ; draw chars "CC2019" (GG1 used to make inversed CC because lack of "C" in BIOS) | ||
| + | ; "1" | ||
| + | 	li	20 + xc0	; x | ||
| + | 	lr	1,a | ||
| + | 	li	yc0			; y | ||
| + | 	lr	2,a | ||
| + | 	li	$c1 | ||
| + | 	lr	0,a			; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | |||
| + | ; "G" | ||
| + | 	li	12 + xc0	; x | ||
| + | 	lr	1,a | ||
| + | 	li	$ca | ||
| + | 	lr	0,a			; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | |||
| + | ; "G" | ||
| + | 	li	17 + xc0	; x | ||
| + | 	lr	1,a | ||
| + | 	li	$ca | ||
| + | 	lr	0,a			; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | |||
| + | ; "2" | ||
| + | 	li	24 + xc0	; x | ||
| + | 	lr	1,a | ||
| + | 	li	$82 | ||
| + | 	lr	0,a		; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | ; "1" | ||
| + | 	li	34 + xc0			; x | ||
| + | 	lr	1,a | ||
| + | 	li	$81 | ||
| + | 	lr	0,a		; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | ; "0" | ||
| + | 	li	30 + xc0			; x | ||
| + | 	lr	1,a | ||
| + | 	li	$80 | ||
| + | 	lr	0,a		; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | ; "9" | ||
| + | 	li	38 + xc0			; x | ||
| + | 	lr	1,a | ||
| + | 	li	$89 | ||
| + | 	lr	0,a		; combined color + char index -> r0 | ||
| + | 	pi	drawchar             | ||
| + | |||
| + | |||
| + | AGAIN: | ||
| + | |||
| + | 	li	13	; (r0) number of iterations  | ||
| + | 	lr	0,a	; a->r0 | ||
| + | |||
| + | nextline: | ||
| + | |||
| + | 	li	23	; y0 | ||
| + | 	as	0	;	r0+a->a | ||
| + | 	lr	3,a | ||
| + | |||
| + | ; set palette for line (y: r3) | ||
| + | ; | ||
| + | ; 00->125, 00->126: rgb, lightgreen back | ||
| + | ; 00->125, ff->126: rgb, lightblue back | ||
| + | ; ff->125, 00->126: rgb, transparent (gray) back | ||
| + | ; ff->125, ff->126: www, black back | ||
| + | |||
| + | |||
| + | ; restore color of lower line  (e.g. 5 with gray back) | ||
| + | |||
| + | 	clr				; color (0 -> a) | ||
| + | 	lr	1,a | ||
| + | |||
| + | 	li	126			; x | ||
| + | 	lr	2,a | ||
| + | |||
| + | 	pi plot | ||
| + | |||
| + | 	li	$ff			; color | ||
| + | 	lr	1,a | ||
| + | |||
| + | 	ds	2 | ||
| + | 	pi plot | ||
| + | |||
| + | 	lr	a,3		; save r3 | ||
| + | 	lr	4,a | ||
| + | |||
| + | 	ds	3 | ||
| + | |||
| + | ; change color of upper line  (e.g. 6 with black back) | ||
| + | |||
| + | 	li	$ff			; color | ||
| + | 	lr	1, a | ||
| + | |||
| + | 	li	126			; x | ||
| + | 	lr	2, a | ||
| + | |||
| + | 	pi plot | ||
| + | 	ds	2 | ||
| + | 	pi plot | ||
| + | |||
| + | ;------ | ||
| + | |||
| + | ; blinking lines | ||
| + | |||
| + | |||
| + | 	li	126			; x | ||
| + | 	lr	2, a | ||
| + | |||
| + | 	li	23			; y | ||
| + | 	lr	3, a | ||
| + | |||
| + | 	clr				; color | ||
| + | 	lr	1, a | ||
| + | |||
| + | |||
| + | 	lr	a,8			; color | ||
| + | 	lr	1, a | ||
| + | 	pi plot | ||
| + | |||
| + | 	ds	2 | ||
| + | |||
| + | 	clr				; color | ||
| + | 	lr	1, a | ||
| + | 	pi plot | ||
| + | |||
| + | 	lr	a,3 | ||
| + | 	ai 	12			; a+=12	 | ||
| + | 	lr	3,a | ||
| + | |||
| + | 	lr	a,2 | ||
| + | 	inc | ||
| + | 	lr	2,a | ||
| + | |||
| + | 	lr	a,8			; color | ||
| + | 	lr	1,a | ||
| + | 	pi plot | ||
| + | |||
| + | 	ds	2 | ||
| + | |||
| + | 	clr				; color | ||
| + | 	lr	1,a | ||
| + | 	pi plot | ||
| + | |||
| + | 	lr	a,8 | ||
| + | 	xi	$ff			; change 00 with FF to blink | ||
| + | 	lr	8,a | ||
| + | |||
| + | |||
| + | |||
| + | 	lr	a,4		; restore r3 | ||
| + | 	lr	3,a | ||
| + | |||
| + | |||
| + | ; setpal end | ||
| + | |||
| + | |||
| + | |||
| + | ; delay moving line through the checkerboard | ||
| + | |||
| + | 	li	40 | ||
| + | 	lr	1,a | ||
| + | delay2:           | ||
| + | 	li	$ff		 | ||
| + | 	lr	2,a                 | ||
| + | delay1:     | ||
| + | 	ds	2                   | ||
| + | 	bnz	delay1           | ||
| + | 	ds	1 | ||
| + | 	bnz	delay2             | ||
| + | |||
| + | |||
| + | |||
| + | 	ds	0			; r0-- | ||
| + | 	bnz nextline	; until r0 = 0 | ||
| + | |||
| + | ; restore top line | ||
| + | |||
| + | |||
| + | ; restore color of lower line  (e.g. 5 with gray back) | ||
| + | 	ds	3 | ||
| + | |||
| + | 	clr				; color (0->a) | ||
| + | 	lr	1, a | ||
| + | |||
| + | 	li	126			; x | ||
| + | 	lr	2, a | ||
| + | |||
| + | 	pi plot | ||
| + | |||
| + | 	li	$ff			; color | ||
| + | 	lr	1, a | ||
| + | |||
| + | 	ds	2 | ||
| + | 	pi plot | ||
| + | |||
| + | 	li	%11000000   ; 1kHz beep $40 (rather click) | ||
| + | 	outs 5 | ||
| + | 	clr | ||
| + | 	outs 5 | ||
| + | |||
| + | 	jmp	AGAIN | ||
| + | |||
| + | loop:	jmp	loop | ||
| + | |||
| + | |||
| + | ; plot point | ||
| + | ; r1 = color  $00 = green, $40 = %01000000 = red, $80 = %10000000 = blue, $C0 = %11000000 = background | ||
| + | ; r2 = x (to screen) (4-105) (0-101) | ||
| + | ; r3 = y (to screen) (4-61) (0-57) | ||
| + | |||
| + | plot: | ||
| + | 	; set the color using r1 | ||
| + | 	lr		A, 1 | ||
| + | 	outs	1 | ||
| + | |||
| + | 	; set the column using r2 | ||
| + | 	lr		A, 2 | ||
| + | 	com | ||
| + | 	outs	4 | ||
| + | |||
| + | 	; set the row using r3 | ||
| + | 	lr	A, 3 | ||
| + | 	com | ||
| + | 	outs	5 | ||
| + | |||
| + | 	; transfer data to the screen memory | ||
| + | 	li		$60 | ||
| + | 	outs	0 | ||
| + | 	li		$50 | ||
| + | 	outs	0 | ||
| + | |||
| + | 	; delay until it's fully updated | ||
| + | 	lis	6 | ||
| + | .plotDelay:	 | ||
| + | 	ai	$ff | ||
| + | 	bnz	.plotDelay | ||
| + | |||
| + | 	pop				; return from the subroutine | ||
| + | |||
| + | |||
| + | 	org $fff        ; added only to set a useable rom-size in MESS | ||
| + | 	.byte   $ff | ||
| </pre> | </pre> | ||
Latest revision as of 14:10, 12 April 2022
CCtro by Frog //ROi (Peter Sobolev), released at Chaos Constructions'2019.
https://www.pouet.net/prod.php?which=82729 
Download bin (2048 Bytes)
Original assembly code of CCtro by Frog.
; CCtro - 256 bytes intro for Fairchild Channel F by Frog ; frog@enlight.ru ; https://enlight.ru/roi ; ; p.s. thanks to https://channelf.se/veswiki people processor f8 clrscrn = $00d0 ; uses r31 delay = $008f drawchar = $0679 ; prints char r0 (code+color) at col r1, row r2 xc0 = 29 ; chars x0 yc0 = 27 ; chars y0 org $800 cartridgeStart: .byte $55, $2B ; cartridge header cartridgeEntry: li $c6 ; $21 - b/w palette, fill with black. $c6 - color palette, fill with gray lr 3, A pi clrscrn ; clrscrn BIOS call ; draw checkerboard ----------------------------------------- ; clr 8 ; 0-> r8. (r8 used to flip bit 0/1) [commented by e5frog, not needed and not working code] li 2 ; shift (0|1) lr 5, a li 11 ; (r4) number of iterations (ysize) lr 4,a ; a->r4 li $40 ; color lr 1, a nextln: lr a,4 ; load y0 ai 23 ; a+const->a (y0) lr 3, a li 50 ; related to xsize lr 7,a ; (r7) number of iterations (x) ; xor r8 with 1 (flip 1 <-> 0) li 1 xs 8 ; a xor r8 -> a lr 8,a ; r8 + 103 -> r2 li 103 ; related to x0 WAS:42 as 8 ; x = x+y (shift by 1 pixel) lr 2,a ; (r2) coord (x) ; draw dotted line nextpx: li $80 ; color ($00, $40, $80) lr 1,a pi plot ; r1 - color, r2 - x, r3 - y (a,r6 also lost) ds 2 ; r2-- (coord) ds 2 ; r2-- (coord) ds 7 ; r7-- (number of iterations) bnz nextpx ; until r7 = 0 ds 4 ; r4-- bnz nextln ; until r2 = 0 ; draw chars "CC2019" (GG1 used to make inversed CC because lack of "C" in BIOS) ; "1" li 20 + xc0 ; x lr 1,a li yc0 ; y lr 2,a li $c1 lr 0,a ; combined color + char index -> r0 pi drawchar ; "G" li 12 + xc0 ; x lr 1,a li $ca lr 0,a ; combined color + char index -> r0 pi drawchar ; "G" li 17 + xc0 ; x lr 1,a li $ca lr 0,a ; combined color + char index -> r0 pi drawchar ; "2" li 24 + xc0 ; x lr 1,a li $82 lr 0,a ; combined color + char index -> r0 pi drawchar ; "1" li 34 + xc0 ; x lr 1,a li $81 lr 0,a ; combined color + char index -> r0 pi drawchar ; "0" li 30 + xc0 ; x lr 1,a li $80 lr 0,a ; combined color + char index -> r0 pi drawchar ; "9" li 38 + xc0 ; x lr 1,a li $89 lr 0,a ; combined color + char index -> r0 pi drawchar AGAIN: li 13 ; (r0) number of iterations lr 0,a ; a->r0 nextline: li 23 ; y0 as 0 ; r0+a->a lr 3,a ; set palette for line (y: r3) ; ; 00->125, 00->126: rgb, lightgreen back ; 00->125, ff->126: rgb, lightblue back ; ff->125, 00->126: rgb, transparent (gray) back ; ff->125, ff->126: www, black back ; restore color of lower line (e.g. 5 with gray back) clr ; color (0 -> a) lr 1,a li 126 ; x lr 2,a pi plot li $ff ; color lr 1,a ds 2 pi plot lr a,3 ; save r3 lr 4,a ds 3 ; change color of upper line (e.g. 6 with black back) li $ff ; color lr 1, a li 126 ; x lr 2, a pi plot ds 2 pi plot ;------ ; blinking lines li 126 ; x lr 2, a li 23 ; y lr 3, a clr ; color lr 1, a lr a,8 ; color lr 1, a pi plot ds 2 clr ; color lr 1, a pi plot lr a,3 ai 12 ; a+=12 lr 3,a lr a,2 inc lr 2,a lr a,8 ; color lr 1,a pi plot ds 2 clr ; color lr 1,a pi plot lr a,8 xi $ff ; change 00 with FF to blink lr 8,a lr a,4 ; restore r3 lr 3,a ; setpal end ; delay moving line through the checkerboard li 40 lr 1,a delay2: li $ff lr 2,a delay1: ds 2 bnz delay1 ds 1 bnz delay2 ds 0 ; r0-- bnz nextline ; until r0 = 0 ; restore top line ; restore color of lower line (e.g. 5 with gray back) ds 3 clr ; color (0->a) lr 1, a li 126 ; x lr 2, a pi plot li $ff ; color lr 1, a ds 2 pi plot li %11000000 ; 1kHz beep $40 (rather click) outs 5 clr outs 5 jmp AGAIN loop: jmp loop ; plot point ; r1 = color $00 = green, $40 = %01000000 = red, $80 = %10000000 = blue, $C0 = %11000000 = background ; r2 = x (to screen) (4-105) (0-101) ; r3 = y (to screen) (4-61) (0-57) plot: ; set the color using r1 lr A, 1 outs 1 ; set the column using r2 lr A, 2 com outs 4 ; set the row using r3 lr A, 3 com outs 5 ; transfer data to the screen memory li $60 outs 0 li $50 outs 0 ; delay until it's fully updated lis 6 .plotDelay: ai $ff bnz .plotDelay pop ; return from the subroutine org $fff ; added only to set a useable rom-size in MESS .byte $ff
