¢ ORG 1536¢; ***************************¢; * DUMPMATE M-L UTILITY *¢; * used to process screen *¢; * memory for printing *¢; * with the Okimate 10 *¢; * printer and the Dumpmate*¢; * BASIC program *¢; * revision of 9/23/85 *¢; * by Arthur F. Horan *¢; ***************************¢;¢;¢;Equates:¢ROWCRS = 84; Y-coordinate¢COLCRS = 85; x-coordinate¢PRINT = 203; pointer to PRINT$¢PBL = 205; stores processed screen data - low byte¢PBH = 206; screen data - hi byte¢SAVMSC = 88; start of screen memory¢SHIFT = 207; shift factor¢LAST = 216; flag for column 0¢SCREENAD = 212;pointer to screen byte¢NOLFT = 214;flag for sh. direction¢OFFSET = 215; for current line dump¢CIOV = 58454; vector to CIO¢;Program starts here¢ CLD¢ PLA ;discard # arguments¢ PLA ;pull hi-byte of PRYNT$¢ STA PRINT+1 ;and save¢ PLA ;now get lo-byte¢ STA PRINT ;save it too¢;¢;Initialize variables¢ LDA #0¢ STA OFFSET¢ STA SHIFT¢ STA NOLFT¢ STA LAST¢;¢;Check if column 0¢ LDA COLCRS+1¢ BNE GETOFF¢ LDA COLCRS¢ BNE GETOFF¢ INC LAST ;yes, set flag¢;¢;Loop to get offset¢GETOFF LDY #3¢DIV8 LSR COLCRS+1; (divide x-position¢ ROR COLCRS ;by 8 for offset into¢ ROR OFFSET ;screen mem and save¢ DEY ;remainder as offset¢; into lo-byte¢ BNE DIV8 ;of 7-bit pixel array¢;¢;Now right-justify remainder¢ LDY #5¢JUST LSR OFFSET¢ DEY¢ BNE JUST¢;¢;Initialize shift factor according to¢;bit-offset of cursor position in¢;screen¢INSH LDA OFFSET¢ BNE OF1¢ LDA #1¢ STA SHIFT¢ STA NOLFT¢ BNE PROCESS¢OF1 LDA OFFSET¢ STA SHIFT¢ DEC SHIFT¢;¢; Now process screen bytes¢;¢PROCESS LDA SAVMSC ;set up pointer¢ CLC¢ ADC COLCRS¢ STA SCREENAD¢ LDA SAVMSC+1¢ ADC #0¢ STA SCREENAD+1¢;¢;Loop through a vertical "STRIPE" of¢;screen & process it for printing¢GBYTE LDY #0¢ LDA (SCREENAD),Y¢ STA PBL ;get pic-byte lo¢ INY;¢ LDA (SCREENAD),Y¢ STA PBH ;& pic-byte hi¢ LDA NOLFT ;shift right?¢ BEQ SH2 ;no, so skip ahead¢ LSR PBL ;shift right one bit¢ LDA PBL¢ CLC ;force branch¢ BCC FILBUF¢;¢SH2 LDY SHIFT ;shift 7-bit field¢; left according¢ BEQ NOSH ;to calculated factor¢;¢DOSHL ASL PBH ;shift hi-byte¢ ROL PBL ;and rotate lo-byte¢ DEY¢ BNE DOSHL ¢;¢NOSH LDA PBL¢ AND #127 ;mask out bit 7¢;¢;Fill buffer string with¢;processed byte¢FILBUF NOP ;padding to allow¢; later¢ NOP ;modification for¢; reverse printing¢ LDY ROWCRS¢ LDX LAST¢ BEQ FILL ;handle last stripe?¢ LSR A¢ LSR A ;yes, so shift¢FILL STA (PRINT),Y ;fill PRINT$¢ LDA #40 ;set pointer to next¢ CLC¢ ADC SCREENAD ;screen row¢ STA SCREENAD¢ LDA #0¢ ADC SCREENAD+1¢ STA SCREENAD+1¢ INY¢ STY ROWCRS¢ CPY #192 ;done?¢ BNE GBYTE ;no, go back.¢ DEC ROWCRS¢ RTS ;That's it!¢