5 MODE1 6 *LO. FIN 10 REM All-mode dump 20 REM for Epson/Epson compatible printers 30 REM by George Hill 40 REM (c) Acorn User Sept. 1983 50 : 60 DIM S% &FF 70 passnumber=S% 80 pattern0=S%+1 90 !pattern0=&0300 100 pattern4=S%+3 110 !pattern4=&3F00 120 pattern1=S%+5 130 !pattern1=&3F260400 140 pattern2=S%+9 150 !pattern2=&49841000 160 !(pattern2+4)=&FF6FB966 170 S%=S%+17 180 PROClimits 190 IF NOT graphics THEN PRINT"Not a graphics MODE. Can't dump.":VDU7:END 200 PROCassemble 210 REM enable printer, set linefeed (ESC A B) 220 VDU2,1,27,1,65,1,8 230 REM clear paper 240 VDU1,10,1,10,1,10 250 FOR Y%=1023 TO 0 STEP -16 260 REM send bit code (ESC L 192 3 - 960 dots per line, 640 dots for mode 0) 270 VDU1,27,1,76,1,n1,1,n2 280 FOR X%=0 TO 1279 STEP stepsize 290 !Xlo=X%+Y%*&10000 300 ?pass=0 310 CALL pixel 320 NEXT 330 VDU1,10 340 NEXT 350 REM reset linefeed & disable printer 360 VDU1,27,1,65,1,12,1,12,3 370 END 380 DEFPROClimits 390 DIM user 3 400 A%=&87 410 !user=USR(&FFF4) 420 mode=user?2 430 IF mode>5 OR mode=3 THEN graphics=FALSE ELSE graphics=TRUE 440 IF mode=0 THEN n1=128:n2=2 ELSE n1=192:n2=3 450 IF mode=0 THEN stepsize=2:?passnumber=1:?&80=pattern0 MOD 256:?&81=pattern0 DIV 256 460 IF mode=4 THEN stepsize=4:?passnumber=3:?&80=pattern4 MOD 256:?&81=pattern4 DIV 256 470 IF mode=1 OR mode=5 THEN stepsize=4:?passnumber=3:?&80=pattern1 MOD 256:?&81=pattern1 DIV 256 480 IF mode=2 THEN stepsize=8:?passnumber=6:?&80=pattern2 MOD 256:?&81=pattern2 DIV 256 490 ENDPROC 500 DEFPROCassemble 510 osword=&FFF1 520 oswrch=&FFEE 530 Xlo=S% 540 Xhi=S%+1 550 Ylo=S%+2 560 Yhi=S%+3 570 value=S%+4 580 byte=S%+5 590 pass=S%+6 600 count4=S%+7 610 S%=S%+8 620 FOR opt=0 TO 2 STEP 2 630 P%=S% 640 [OPT opt 650 \ Subroutines 660 \ to calculate POINT(X,Y) 670 .point 680 LDX #Xlo MOD 256 690 LDY #Xlo DIV 256 700 LDA #9 710 JSR osword 720 RTS 730 \ to print a character 740 .printchar 750 LDA #1 760 JSR oswrch 770 LDA byte 780 JSR oswrch 790 RTS 800 \ to decrement Y by 4 810 .decy4 820 SEC 830 LDA Ylo 840 SBC #4 850 STA Ylo 860 BCC decYhi 870 RTS 880 .decYhi 890 DEC Yhi 900 RTS 910 \ increment Y by 16 920 .incy16 930 CLC 940 LDA Ylo 950 ADC #16 960 STA Ylo 970 BCS incYhi 980 RTS 990 .incYhi 1000 INC Yhi 1010 RTS 1020 \ to rotate in two bits. Enter with X=pass, Y=colour. 1030 .twobits 1040 LDA (&80),Y 1050 CPX #0 1060 BEQ rotatein 1070 .rotateout 1080 ROR A 1090 ROR A 1100 DEX 1110 BNE rotateout 1120 .rotatein 1130 ROR A 1140 ROL byte 1150 ROR A 1160 ROL byte 1170 RTS 1180 \ to calculate a whole byte 1190 .onebyte 1200 JSR point 1210 LDY value 1220 LDA pass 1230 AND #3 1240 TAX 1250 JSR twobits 1260 JSR decy4 1270 DEC count4 1280 BNE onebyte 1290 JSR printchar 1300 RTS 1310 \ Main program 1320 \ to calculate and print the pattern for one pixel 1330 .pixel 1340 LDA #4 1350 STA count4 1360 JSR onebyte 1370 JSR incy16 1380 INC pass 1390 LDA pass 1400 CMP passnumber 1410 BNE pixel 1420 RTS 1430 ] 1440 NEXT 1450 ENDPROC