diff --git a/demo/demo.c b/demo/demo.c index b80f392..24d101c 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -6,6 +6,7 @@ #include "demo_interrupt.h" #include "demo_extvid.h" #include "demo_blank.h" +#include "demo_end_of_frame.h" void help() { woz_puts( @@ -16,6 +17,7 @@ void help() { "A AMIGA HAND\r" "I INTERRUPT\r" "E FLIP EXT VIDEO\r" + "F TEST END-OF-FRAME\r" "B BLANK ON/OFF\r" "H HELP\r" "0 EXITS\r\r" @@ -35,6 +37,7 @@ void main() { else if(key == 'A') demo_amiga_hand(); else if(key == 'I') demo_interrupt(); else if(key == 'E') flip_external_input(); + else if(key == 'F') demo_end_of_frame(); else if(key == 'B') flip_blank(); else if(key == 'H') help(); else if(key == '0') break; diff --git a/demo/demo_end_of_frame.h b/demo/demo_end_of_frame.h new file mode 100644 index 0000000..7f54199 --- /dev/null +++ b/demo/demo_end_of_frame.h @@ -0,0 +1,26 @@ +void demo_end_of_frame() { + tms_init_regs(SCREEN1_TABLE); + screen1_prepare(); + screen1_load_font(); + + screen1_puts( + CLS "\n" + "Waitining for 600 ticks by\n" + "counting the " REVERSE_ON "END-OF-FRAME" REVERSE_OFF " bit.\n\n" + "It will take about 10 seconds.\n\n" + ); + + word secs = 0; + word ticks = 0; + while(secs<10) { + tms_wait_end_of_frame(); + ticks++; + if(ticks==60) { + secs++; + ticks = 0; + screen1_puts("60 ticks!\n"); + } + } + screen1_puts("\n\nDONE!"); +} + diff --git a/lib/tms9918.h b/lib/tms9918.h index 723c5e7..c4c7e54 100644 --- a/lib/tms9918.h +++ b/lib/tms9918.h @@ -8,6 +8,7 @@ // TODO finalize hexdump.js and update README.md // TODO allow redefinition of I/O ports // TODO wait_end_of_frame() +// TODO screen1() and screen2() helpers #pragma encoding(ascii) // encode strings in plain ascii @@ -157,7 +158,7 @@ void tms_set_external_video(byte val) { tms_write_reg(0, regvalue); } -void tms_wait_end_of_frame() { +inline void tms_wait_end_of_frame() { while(!FRAME_BIT(TMS_READ_CTRL_PORT)); }