1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-11-16 21:07:56 +00:00

Added slope initialization and a few fragments.

This commit is contained in:
jespergravgaard 2021-04-02 11:49:28 +02:00
parent 2c6947a600
commit 3de1834b35
3 changed files with 48 additions and 7 deletions

View File

@ -0,0 +1,7 @@
clc
lda {c1}
adc #1
sta {m1}
lda {c1}+1
adc #0
sta {m1}+1

View File

@ -0,0 +1,6 @@
lda {c1}+1
lsr
sta {m1}+1
lda {c1}
ror
sta {m1}

View File

@ -44,6 +44,8 @@ char line_dma_command[] = {
DMA_OPTION_LINE_XSTEP_HI, (25*64 - 8) >> 8, // Line X step bytes 64x25
DMA_OPTION_LINE_SLOPE_LO, 0, // Line Slope
DMA_OPTION_LINE_SLOPE_HI, 0, // Line Slope
DMA_OPTION_LINE_SLOPE_INIT_LO, 0, // Line slope init
DMA_OPTION_LINE_SLOPE_INIT_HI, 0, // Line slope init
DMA_OPTION_LINE_MODE, 0, // Line Mode
DMA_OPTION_FORMAT_F018A, // F018A list format
DMA_OPTION_END, // end of options
@ -58,14 +60,16 @@ char line_dma_command[] = {
// Offset of the DMA line SLOPE
const char LINE_DMA_COMMAND_SLOPE_OFFSET = 5;
// Offset of the DMA line SLOPE init
const char LINE_DMA_COMMAND_SLOPE_INIT_OFFSET = 9;
// Offset of the DMA line MODE
const char LINE_DMA_COMMAND_MODE_OFFSET = 9;
const char LINE_DMA_COMMAND_MODE_OFFSET = 13;
// Offset of the DMA count
const char LINE_DMA_COMMAND_COUNT_OFFSET = 13;
const char LINE_DMA_COMMAND_COUNT_OFFSET = 17;
// Offset of the DMA source
const char LINE_DMA_COMMAND_SRC_OFFSET = 15;
const char LINE_DMA_COMMAND_SRC_OFFSET = 19;
// Offset of the DMA destination
const char LINE_DMA_COMMAND_DEST_OFFSET = 18;
const char LINE_DMA_COMMAND_DEST_OFFSET = 22;
void main() {
@ -85,11 +89,26 @@ void main() {
VICIV->CONTROLC |= VICIV_VFAST;
graphics_mode();
draw_line(0, 100, 319, 0, 1);
/*
draw_line(160, 100, 0, 199, 1);
draw_line(160, 100, 319, 199, 2);
draw_line( 0, 0, 160, 100, 3);
draw_line(160, 100, 319, 0, 4);
for(int x1=0;x1<320;x1+=10) {
draw_line(x1, 0, 160, 199, 5);
draw_line(160, 0, x1, 199, 5);
}
for(int y1=0;y1<200;y1+=10) {
draw_line(0, y1, 319, 100, 6);
draw_line(0, 100, 319, y1, 6);
}
*/
for(;;) ;
}
@ -182,11 +201,15 @@ void draw_line(int x1, int y1, int x2, int y2, unsigned char colour) {
// Slope is the most significant bytes of the fractional part
// of the division result
int slope = *MATH_DIVOUT_FRAC_INT1;
unsigned int slope = (unsigned int)*MATH_DIVOUT_FRAC_INT1;
// Put slope into DMA options
line_dma_command[LINE_DMA_COMMAND_SLOPE_OFFSET] = LOBYTE(slope);
line_dma_command[LINE_DMA_COMMAND_SLOPE_OFFSET + 2] = HIBYTE(slope);
// Put slope init into DMA options
unsigned int slope_init = slope/2;
line_dma_command[LINE_DMA_COMMAND_SLOPE_INIT_OFFSET] = LOBYTE(slope_init);
line_dma_command[LINE_DMA_COMMAND_SLOPE_INIT_OFFSET + 2] = HIBYTE(slope_init);
// Load DMA dest address with the address of the first pixel
unsigned long addr = GRAPHICS + (x1/8) * 64 * 25 + (y1*8) + (x1&7);
@ -236,12 +259,17 @@ void draw_line(int x1, int y1, int x2, int y2, unsigned char colour) {
VICIV->BORDER_COLOR = 0;
// Slope is the most significant bytes of the fractional part of the division result
int slope = *MATH_DIVOUT_FRAC_INT1;
unsigned int slope = (unsigned int)*MATH_DIVOUT_FRAC_INT1;
// Put slope into DMA options
line_dma_command[LINE_DMA_COMMAND_SLOPE_OFFSET] = LOBYTE(slope);
line_dma_command[LINE_DMA_COMMAND_SLOPE_OFFSET + 2] = HIBYTE(slope);
// Put slope init into DMA options
unsigned int slope_init = slope/2;
line_dma_command[LINE_DMA_COMMAND_SLOPE_INIT_OFFSET] = LOBYTE(slope_init);
line_dma_command[LINE_DMA_COMMAND_SLOPE_INIT_OFFSET + 2] = HIBYTE(slope_init);
// Load DMA dest address with the address of the first pixel
unsigned long addr = GRAPHICS + (x1/8) * 64 * 25 + (y1*8) + (x1&7);
line_dma_command[LINE_DMA_COMMAND_DEST_OFFSET + 0] = BYTE0(addr);