mj@myriasb.UUCP (Michal Jaegermann) (04/27/85)
Recently I posted some anouncement about availability of a decent screen dump for TI. I wa asked to post a code. This would be quite difficult for many reasons. To substitute I am posting a TI Forth code for a screen dump for all bit-map modes. This is not as fast as the machine language one but still quite decent. ----------------------------- CUT HERE --------------------------------- ( Bit-map Screen Dump - shadow screen * M. Jaegermann 21APR85 ) --> This program dumps a whole bit-map screen in double size - 8 in across - double density graphics on every Epson-like printer with graphics capabilities. Changing values of of LASTCOL and 1STCOL ( n ' LASTCOL ! will do ) and using .PICT with proper addresses one may dump only part of a screen. LMSET sets a left margin for a printout and is for people with wide printers or for dumping part of the screen ( I know that Gemini has left margin option - but some others printers don't ). Playing with the program is easy to adapt it to work in single size, print white on black and so on. In particular the word H>V - horizon- tal to vertical accepts any bit pattern to substitute for a single bit. To test use the following HEX : DEMO GRAPHICS2 0 BF FF BF LINE C0 0 DO 0 I I 4 3 */ BF LINE 8 +LOOP SCREEN/DUMP ; DEMO ( Bit-map Screen Dump 1st scn * Michal Jaegermann 21APR85 ) BASE->R -PRINT -GRAPH -TEXT -GRAPH2 HEX 20 CONSTANT LASTCOL 0 CONSTANT 1STCOL 0 VARIABLE OBUF FE ALLOT O VARIABLE OPNTR O VARIABLE BLFLG 0 VARIABLE CHR# 0 VARIABLE LMAR 2000 VARIABLE SCRNS 3800 , 2000 , 3000 , 3800 , 2400 , : LMSET ( n -- ) SWCH 1B EMIT 40 EMIT DUP IF 1B EMIT 44 EMIT DUP EMIT 0 EMIT ENDIF CR UNSWCH LMAR ! ; : H>V ( pattern,b -- pattern ) 8 SLA BEGIN DUP WHILE DUP 0< IF OVER OPNTR @ C@ XOR OPNTR @ C! 1 BLFLG ! ENDIF 1 OPNTR +! 1 SLA REPEAT DROP ; : TRBITS ( addr,source -- f ) 0 BLFLG ! C0 ( pattern ) 4 0 DO >R >R DUP OPNTR ! R> R> OVER I + VSBR H>V 2 SRA LOOP DROP DROP DROP BLFLG @ ; --> ( Bit-map Screen Dump 2nd scn * Michal Jaegermann 21APR85 ) : HFLINE ( vaddr -- vaddr ) 0 CHR# ! OBUF 100 ERASE LASTCOL 1STCOL - 0 DO OBUF I 3 SLA + OVER I 1STCOL + 3 SLA TRBITS IF I 1+ CHR# ! ENDIF LOOP ; : GCODE ( count -- ) LMAR @ IF 9 EMIT ENDIF ( printer code ) 1B EMIT 4C EMIT DUP FF AND EMIT8 8 SRL EMIT8 ; : GRPH ( count -- ) DUP 1E * GCODE 3 SLA OBUF + OBUF DO I C@ 4 I 3 AND 0= - 0 DO DUP EMIT8 LOOP DROP LOOP ; : .GLINE ( vaddr -- ) 2 0 DO I 2 SLA + HLFLINE CHR# @ -DUP IF GRPH ENDIF CR LOOP DROP ; : .PICT ( vaddr1,vaddr2 -- ) SWCH CR 1B EMIT 41 EMIT 8 EMIT DO I .GLINE ?TERMINAL IF LEAVE ENDIF 100 +LOOP CR UNSWCH ; : SCREEN/DUMP VDPMDE @ 4 - DUP 0< IF DROP CR ." Error -- wrong vmode" ELSE 4 * SCRNS + DUP 2 + @ SWAP @ .PICT ENDIF ; R->BASE ------------------------ CUT HERE ----------------------------- Now use your beloved utility to copy that onto Forth screens and happy dumping. If you have a code for a nice picture please post it to the net. Michal Jaegermann ...ihnp4!alberta!myrias!mj