1000 REM --- GARBAGE COLLECTOR MESSAGE --- 1010 REM ----- BY MICHAEL T. GRAHAM ------ 1020 REM OPEN8,8,8,"0:GARBMSG,P,W" 1030 SYS700 1040 ;.OPT O8 1050 ;PAL ASSEMBLER SOURCE CODE 1060 ; 1070 ;THIS BASIC PATCH PUTS A MESSAGE 1080 ;ON SCREEN WHEN BASIC'S GARBAGE 1090 ;COLLECTOR RUNS. BASIC IS MOVED TO 1100 ;RAM AT INITIALIZATION. 1110 ; 1120 HIBASE =$0288 ;KERNAL SCREEN PAGE ADDR 1130 ADDR =$FB ;MOVE VECTOR 1140 PATCH1 =$B526 ;"PATCH START OF COLLECTOR 1150 PATCH2 [178]$B606 ;"PATCH END OF COLLECTTOR 1160 RET1 =$B52A ;CONTINUE START 1170 CONT =$B60C ;(null)OR NOT DONE 1180 QUIT =$B601 ;"END COLLECTION 1190 COL[176] [178]$02 ;MESSAGE COL[176] S[164]RAGE 1200 CMEM [178]$D80A ;COL[176] MEM[176]Y START 1210 SCREEN [178]$FD ;SCREEN VEC[164]R S[164]RAGE 1220 ; 1230 [172][178]$033C ;CASSETTE BUFFER 1240 ; 1250 ;INITIALIZE MESSAGE PATCH ([158] 828) 1260 ; 1270 INIT LDA #$00 ;SET UP 1280 STA ADDR ;INDIRECT 1290 LDA #$A0 ;ADDRESS 1300 STA ADDR[170]1 ;[164] MOVE 1310 LDY #$00 ;BASIC 1320 XFER LDA (ADDR),Y ;MOVE BASIC ROM 1330 STA (ADDR),Y ;[164] RAM 1340 INY 1350 BNE XFER 1360 INC ADDR[170]1 ;BUMP PAGE ADDRESS 1370 LDA ADDR[170]1 ;[154]INUE MOVE 1380 CMP #$C0 ; UP [164] 1390 BMI XFER ;$BFFF 1400 LDA #$4C ;JMP INSTRUCTI[145] OP CODE 1410 STA PATCH1 ;S[164]RE THE JUMPS [129] THE 1420 STA PATCH2 ;PATCHES 1430 LDA #[179]FIX1 ;JUMP [164] FIX1 AT START 1440 STA PATCH1[170]1 1450 LDA #[177]FIX1 1460 STA PATCH1[170]2 1470 LDA #[179]FIX2 ;JUMP [164] FIX2 AT [128] 1480 STA PATCH2[170]1 1490 LDA #[177]FIX2 1500 STA PATCH2[170]2 1510 LDA #$EF ;MAP 1520 STA $00 ;OUT 1530 LDA $01 ;THE BASIC 1540 [175] #$FE ;ROM 1550 STA $01 1560 LDA #01 ;INITIALIZE 1570 STA COL[176] ;COL[176] [164] WHITE 1580 RTS ;[128] INIT 1590 ; 1600 ;PATCH H[175]LER 1610 ; 1620 ;FIX1 [178] PATCH [164] START OF [209][176] 1630 ; 1640 FIX1 JSR MS[203]N ;DISPLAY MESSAGE 1650 LDX $37 ;FINISH DISPLACED BASIC 1660 LDA $38 ;CODE 1670 JMP RET1 ;[142] [164] BASIC 1680 ; 1690 ;FIX2 [178] PATCH [164] [128] OF [209][176] 1700 ; 1710 FIX2 LDA $4F ;FINISH BASIC'S 1720 [176]A $4E ;STUFF 1730 BEQ RETRN ;D[145]E [209]I[145] 1740 JMP [154] ;[154]INUE [209]I[145] 1750 RETRN JSR MS[203]FF ;PUT SCREEN BACK 1760 JMP QUIT ;[209][176] D[145]E 1770 ; 1780 ;[148] USER SCREEN [175] PUT MESSAGE 1790 ;[145] SCREEN BE[129]E STARTING 1800 ;GARBAGE [209][176]. 1810 ; 1820 MS[203]N PHP ;[148] STATUS 1830 TYA ;[175] Y 1840 PHA ;REGISTER 1850 LDA #10 ;START AT 1860 STA SCREEN ;11TH CHAR 1870 LDA HIBASE ;[161] SCREEN 1880 STA SCREEN[170]1 ;PAGE ADDR 1890 LDY #19 ;20 CHARACTERS 1900 LDX COL[176] ;MESSAGE COL[176] 1910 MOVE LDA (SCREEN),Y ;[148] EXISTING 1920 STA BUFFER,Y ;SCREEN [154]ENTS 1930 LDA MESSAG,Y ;[161] MESSAGE 1940 [175] #$BF ;C[145]VERT [164] SCREEN CODE 1950 STA (SCREEN),Y ;DISPLAY MESSAGE 1960 LDA CMEM,Y ;[148] EXISTING 1970 STA CBUFF,Y ;COL[176] MEM[176]Y 1980 TXA ;REPLACE WITH 1990 STA CMEM,Y ;MESSAGE COL[176] 2000 DEY ;BUMP INDEX 2010 BPL MOVE ;MOVE 20 CHARACTERS 2020 PLA ;[140] 2030 TAY ;REGISTERS 2040 PLP 2050 RTS ;D[145]E 2060 ; 2070 ;PUT USER'S SCREEN [154]ENTS BACK 2080 ;AFTER COLLEC[164]R IS D[145]E. 2090 ; 2100 MS[203]FF PHP ;[148] 2110 PHA 2120 TYA ;REGISTERS 2130 PHA 2140 LDA #10 ;11TH CHARACTER 2150 STA SCREEN ;[145] SCREEN 2160 LDA HIBASE ;SCREEN PAGE 2170 STA SCREEN[170]1 ;ADDRESS 2180 LDY #19 ;20 CHARACTERS 2190 RES[164]R LDA BUFFER,Y ;PUT TEXT 2200 STA (SCREEN),Y ;BACK 2210 LDA CBUFF,Y ;[140] 2220 STA CMEM,Y ;COL[176]S 2230 DEY ;BUMP INDEX 2240 BPL RES[164]R ;[140] 20 CHARACTERS 2250 PLA ;[140] 2260 TAY 2270 PLA ;REGISTERS 2280 PLP 2290 RTS ;D[145]E 2300 ; 2310 MESSAG .[198] " >WAIT,SYSTEM BUSY< " 2320 ; 2330 ;[131] STORAGE - 40 BYTES AT $02A7 2340 ; 2350 [172][178]$02A7 2360 ; 2370 BUFFER [172][178][172][170]20 2380 CBUFF [172][178][172][170]20 2390 ; 2400 .[128]