Apple II Technical Notes _____________________________________________________________________________ Developer Technical Support Apple II Miscellaneous #1: 80-Column Screen Dump Revised by: Pete McDonald November 1988 Written by: Greg Seitz December 1984 This Technical Note presents an example assembly language program which dumps the contents of the 80-column text screen to whatever is connected to COUT. _____________________________________________________________________________ 0000: 1 * 0000: 2 * 80-column screen dump 0000: 3 * 0000: 4 * By 0000: 5 * Greg Seitz 0000: 6 * 12-Jul-84 0000: 7 * 0000: 8 * This program will allow you to dump the contents 0000: 9 * of your 80-column text screen to whatever device is 0000: 10 * connected through COUT. If it is still connected to 0000: 11 * the screen, you will obviously be printing back 0000: 12 * what you were reading. 0000: 13 * 0000: FBC1 14 BASCALC EQU $FBC1 ;convert A reg to line addr on scrn 0000: FDED 15 COUT EQU $FDED ;A register out as ASCII 0000: C001 16 SET80COL EQU $C001 ;enable page 1/2 switches to control aux 0000: C055 17 TXTPAGE2 EQU $C055 ;page 2 or Aux depending 0000: C054 18 TXTPAGE1 EQU $C054 ;page 1 or main depending 0000: 0028 19 BASL EQU $28 ;BASCALC puts base addr. here 0000: 0029 20 BASH EQU $29 ;and high byte here. 0000: 21 * 1000: 1000 22 ORG $1000 ;or anywhere 1000: 1000 23 SCREENDMP EQU * 1000:A2 00 24 LDX #0 ;START AT LINE 0 1002: 25 * 1002:8A 26 SCRNLP TXA ;CALL BASCALC 1003:20 C1 FB 27 JSR BASCALC ;FOR ADDRESS OF LINE X 1006:A0 00 28 LDY #00 ;DO 80 CHARS STARTING FROM CHARACTER 0 1008: 29 * 1008: 1008 30 SCRNLP2 EQU * 1008:8D 01 C0 31 STA SET80COL ;SET UP FOR MAIN/AUX SWITCHING 100B:8D 55 C0 32 STA TXTPAGE2 ;START ON AUX 100E:98 33 TYA ;GET CURRENT INDEX FOR DIVIDE BY 2 100F:48 34 PHA ;SAVE ACTUAL COLUMN NUM WE'RE ON 1010:4A 35 LSR ;COLUMN/2=ODD OR EVEN BRANCH IF EVEN 1011:90 03 1016 36 BCC SCRNDMP1 ;TAKEN IF EVEN SINCE STATE IS PROPER 1013:8D 54 C0 37 STA TXTPAGE1 ;ELSE IF ODD TURN ON MAIN MEM 1016: 38 * 1016: 1016 39 SCRNDMP1 EQU * 1016:A8 40 TAY ;USE COLUMN/2 FOR INDEX NOW 1017:B1 28 41 LDA (BASL),Y ;GRAB THE CHARACTER 1019:8D 54 C0 42 STA TXTPAGE1 ;SEL MAIN SO IT SEES RIGHT SCREEN HOLES 101C:20 ED FD 43 JSR COUT ;PRINT THE CHARACTER 101F:68 44 PLA ;RECOVER COLUMN NUM 1020:A8 45 TAY ;INTO Y FOR NEXT TRIP 1021:C8 46 INY ;NEXT COLUMN NUM 1022:C0 50 47 CPY #80 ;ANY MORE? 1024:90 E2 1008 48 BCC SCRNLP2 ;TAKEN IF YES 1026:A9 8D 49 LDA #$8D ;ELSE CARRIAGE RETURN 1028:20 ED FD 50 JSR COUT ;OUT 102B:A9 8A 51 LDA #$8A ;LINE FEED 102D:20 ED FD 52 JSR COUT ;OUT 1030:E8 53 INX ;NEXT LINE 1031:E0 18 54 CPX #24 ;ANYMORE? 1033:90 CD 1002 55 BCC SCRNLP ;TAKEN IF YES 1035:60 56 RTS FBC1 BASCALC ? 29 BASH 28 BASL FDED COUT C054 TXTPAGE1 C055 TXTPAGE2 ?1000 SCREENDMP 1016 SCRNDMP1 1008 SCRNLP2 1002 SCRNLP C001 SET80COL ** SUCCESSFUL ASSEMBLY := NO ERRORS ** ASSEMBLER CREATED ON 15-JAN-84 21:28 ** TOTAL LINES ASSEMBLED 56 ** FREE SPACE PAGE COUNT 84