# HG changeset patch # User Paul Boddie # Date 1456445383 -3600 # Node ID a2d51d81fa864870d7866340b372504624a3eb09 # Parent 7981e27344ab289dccbdb6819d25fdef4500b2a1 Introduced a method of invoking task routines for testing. diff -r 7981e27344ab -r a2d51d81fa86 stage2/irq.c --- a/stage2/irq.c Fri Feb 26 00:44:01 2016 +0100 +++ b/stage2/irq.c Fri Feb 26 01:09:43 2016 +0100 @@ -185,3 +185,52 @@ current_stack_pointer = stack_pointers[current_task]; } + +void invoke_task(unsigned short task) +{ + current_task = task; + current_stack_pointer = stack_pointers[current_task]; + map_page(stack_start - stack_size, stack_start + stack_size * current_task - stack_size, pagesize, 0x1e, current_task); + set_task(current_task); + + asm volatile( + ".set noat\n" + "move $sp, %0\n" + "addi $sp, $sp, 120\n" + "lw $at, -4($sp)\n" + "lw $v0, -8($sp)\n" + "lw $v1, -12($sp)\n" + "lw $a0, -16($sp)\n" + "lw $a1, -20($sp)\n" + "lw $a2, -24($sp)\n" + "lw $a3, -28($sp)\n" + "lw $t0, -32($sp)\n" + "lw $t1, -36($sp)\n" + "lw $t2, -40($sp)\n" + "lw $t3, -44($sp)\n" + "lw $t4, -48($sp)\n" + "lw $t5, -52($sp)\n" + "lw $t6, -56($sp)\n" + "lw $t7, -60($sp)\n" + "lw $s0, -64($sp)\n" + "lw $s1, -68($sp)\n" + "lw $s2, -72($sp)\n" + "lw $s3, -76($sp)\n" + "lw $s4, -80($sp)\n" + "lw $s5, -84($sp)\n" + "lw $s6, -88($sp)\n" + "lw $s7, -92($sp)\n" + "lw $t8, -96($sp)\n" + "lw $t9, -100($sp)\n" + "lw $gp, -104($sp)\n" + "lw $fp, -108($sp)\n" + "lw $ra, -112($sp)\n" + "lw $k0, -116($sp)\n" + "mtc0 $k0, $14\n" /* CP0_EPC */ + "nop\n" + "jr $ra\n" + "nop" + : + : "r" (current_stack_pointer) + ); +} diff -r 7981e27344ab -r a2d51d81fa86 stage2/stage2.c --- a/stage2/stage2.c Fri Feb 26 00:44:01 2016 +0100 +++ b/stage2/stage2.c Fri Feb 26 01:09:43 2016 +0100 @@ -55,7 +55,7 @@ /* Now, wait for the tasks to be selected as interrupts occur. */ irq_init(); - plot_pattern(1, 0, 0); + invoke_task(1); while (1) asm volatile("wait"); }