( inverse video / FORTH translation from assembly language stack: row col len - | RGM 090584) BASE->R DECIMAL 0 VARIABLE CARBUF 39 ALLOT ( character buffer ) 0 VARIABLE INVBUF 319 ALLOT ( pattern buffer ) 0 VARIABLE LOC 0 VARIABLE LEN ( variables ) : VARS LEN ! >R 1- SCRN_WIDTH @ * R> 1- + LOC ! ; ( sets variables ) : READSCR LOC @ ( screen address in vdp ) CARBUF ( buffer address ) LEN @ ( length to read ) VMBR ; ( read section to invert ) --> ( invert -- screen 2 ) : READCHAR LEN @ 0 DO ( loop index ) CARBUF I + C@ 8 * 2048 + ( address in patt table ) INVBUF I 8 * + ( offset into char buffer ) 8 ( bytes to read ) VMBR LOOP ; ( read charpat into buff ) : INVERTBUF INVBUF 319 + INVBUF DO ( loop index ) I @ MINUS 1- I ! 2 +LOOP ; ( invert entire buff ) : PATTTOVDP INVBUF ( inversion buffer ) 3072 ( address of char #128 ) 320 ( bytes to write ) VMBW ; ( read to patt table ) --> ( invert - screen 3 ) : WRITESC LEN @ 0 DO I 128 + ( character to write ) LOC @ I + ( location on screen ) VSBW LOOP ; ( re-write screen ) : INVERT VARS READSCR READCHAR INVERTBUF PATTTOVDP WRITESC ; : REVERT CARBUF LOC @ LEN @ VMBW ; : INVERTS >R VARS READSCR READCHAR INVERTBUF PATTTOVDP WRITESC R> 0 DO REVERT 2000 0 DO LOOP WRITESC 2000 0 DO LOOP LOOP REVERT ; R->BASE