Difference between revisions of "Homebrew:CCtro"
From veswiki
(Created page with "CCtro by [https://www.pouet.net/user.php?who=19315 Frog] //ROi (Peter Sobolev), released at Chaos Constructions'2019. https://www.pouet.net/prod.php?which=82729 <br> [http://...") |
|||
(4 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