100 SYS700 ;ENABLE PAL 64 110 ; 120 ; PICTURE COMPRESSOR - 130 ; OPTIMIZES HI-RES PICTURE 140 ; AND SAVES ON DISK 150 ; THIS VERSION CONVERTS FILE#8 (R) 160 ; TO FILE#9 (W) WITH SAME LOAD ADDR 170 ; SYS(*) COMPRESSES 8 TO 9 180 ; SYS(*+3) LOADS 8 TO MEMORY 190 ; 200 ;SAVE"@0:COMP1.PAL",8 210 ; 220 .OPT OO 230 *=$C000 240 ; 250 JMP COMPRESS 260 JMP DECOMP 270 ; 280 REPCOUNT .BYTE 1 290 NEWBYT .BYTE 0 300 PREVBYT .BYTE 0 310 ST8 .BYTE 0 320 ; 330 PICPTR =$FB 340 ;KERNEL ROUTINES: 350 CHROUT =$FFD2 360 GETIN =$FFE4 370 CLOSE =$FFC3 380 CHKOUT =$FFC9 390 CHKIN =$FFC6 400 CLRCHN =$FFCC 410 READST =$FFB7 420 ; 430 COMPRESS =* 440 JSR SETIN 450 JSR GETIN ;START ADDR LO 460 JSR SETOUT 470 JSR CHROUT 480 JSR SETIN 490 JSR GETIN ;START ADDR HI 500 JSR SETOUT 510 JSR CHROUT 520 JSR SENDPIC ;SEND PICTURE TO FILE 530 JMP FIN 540 ; 550 DECOMP =* 560 JSR SETIN 570 JSR GETIN: STA PICPTR ;LOAD ADDR LO 580 JSR GETIN: STA PICPTR+1 ;" " HI 590 LDY #0 600 JSR GETPIC ;GET PICTURE 610 ; 620 FIN =* 630 JSR CLRCHN 640 LDA #8: JSR CLOSE 650 LDA #9: JSR CLOSE 660 RTS 670 ; 680 ; 690 SENDPIC =* 700 JSR SETIN 710 JSR GETIN 720 STA PREVBYT 730 NEXTOUT =* 740 JSR OUTBYTE 750 LDA ST8 760 BEQ NEXTOUT 770 JSR WRITEREP ;LAST SEQUENCE 780 RTS 790 ; 800 ; 810 OUTBYTE =* 820 JSR SETIN 830 JSR GETIN 840 PHA 850 JSR READST: STA ST8 ;SAVE STATUS 860 PLA 870 STA NEWBYT 880 CMP PREVBYT 890 BNE DIFF 900 ; 910 INC REPCOUNT 920 BNE OK ;COUNT PAST 255"? 930 DEC REPCOUNT 940 JSR WRITEREP ;WRITE REP CODE 950 OK [178][172] 960 JMP OBFIN 970 ; 980 D[139]F [178][172] ;[162] BYTE D[139]FERENT 990 LDA REPCOUNT 1000 CMP #6 1010 BCS DOCODE ;M[176]E THAN 4 THE SAME"? 1020 ;NO, JUST PRINT BYTE N TIMES 1030 TAX ;# REPS FOR LOOP 1040 LDA PREVBYT 1050 CMP #254 ;CTRL BYTE"? 1060 BEQ DOCODE ;YES, HAVE [164] CODE IT 1070 ; 1080 JSR SE[164]UT 1090 LDA PREVBYT 1100 NLP [178][172] 1110 JSR CHROUT 1120 DEX 1130 BNE NLP 1140 LDA #1: STA REPCOUNT 1150 JMP OBFIN 1160 ; 1170 DOCODE [178][172] 1180 JSR WRITEREP 1190 ; 1200 OBFIN [178][172] 1210 LDA [162]BYT 1220 STA PREVBYT 1230 RTS 1240 ; 1250 ; 1260 WRITEREP [178][172] ;WRITE REPEAT CODE 1270 JSR SE[164]UT 1280 LDA #254 ;SPECIAL [154]ROL BYTE 1290 JSR CHROUT 1300 LDA PREVBYT ;BYTE [164] REPEAT 1310 JSR CHROUT 1320 LDA REPCOUNT ;NUMBER OF REPS 1330 JSR CHROUT 1340 LDA #1 1350 STA REPCOUNT ;RE[171]INITIALIZE COUNT 1360 RTS 1370 ; 1380 ; 1390 [161]PIC [178][172] ;UNCOMPRESS 1400 JSR [161]IN 1410 CMP #254 ;REP INDICA[164]R 1420 BEQ [161]REP 1430 ;N[176]MAL BYTE, JUST S[164]RE IT 1440 JSR S[164]RBYT 1450 JMP GPFIN 1460 ; 1470 [161]REP [178][172] ;REPEAT BYTE N TIMES 1480 JSR [161]IN ;BYTE [164] REPEAT 1490 PHA 1500 JSR [161]IN ;# OF REPETITI[145]S 1510 TAX 1520 PLA 1530 REPLP [178][172] 1540 JSR S[164]RBYT ;STICK IT IN MEM[176]Y 1550 DEX 1560 BNE REPLP ;DO IT .X TIMES 1570 ; 1580 GPFIN [178][172] 1590 JSR [135]ST ;CHECK DISK STATUS 1600 BEQ [161]PIC ;DO UNTIL [128][171]OF[171]FILE 1610 RTS 1620 ; 1630 ; 1640 S[164]RBYT [178][172] ;PUT .A IN MEM[176]Y 1650 STA (PICPTR),Y 1660 INC PICPTR ;INC[143]ENT POINTER 1670 BNE SB0 1680 INC PICPTR[170]1 1690 SB0 [178][172] 1700 RTS 1710 ; 1720 ; 1730 SETIN [178][172] ;SET [133] [164] FILE #8 1740 PHA:TXA:PHA 1750 LDX #8 1760 JSR CHKIN 1770 PLA:TAX:PLA 1780 RTS 1790 ; 1800 ; 1810 SE[164]UT [178][172] ;SET OUTPUT [164] FILE #9 1820 PHA:TXA:PHA 1830 LDX #9 1840 JSR CHKOUT 1850 PLA:TAX:PLA 1860 RTS 1870 .[128]