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 15: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