.MAIN. HCD65XX V3.1 6JUNE87 PAGE 1 0:RAMEXP.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 1 ; 2 ; =1800 3 *=$1800 4 ; 5 ; 6 ;======================================== 7 ; EQUATES 8 ;======================================== 9 ; 10 ; =1700 11 BUFFER = $1700 =00FB 12 NUMBANK = $FB =DF00 13 RAMEXP = $DF00 =D506 14 RCR = $D506 15 ; 16 ; 17 ;======================================== 18 ; JUMP TABLE 19 ;======================================== 20 ; 21 ; 1800 4C 1813 22 START JMP HOWBIG 1803 4C 187E 23 JMP STASH 1806 4C 187B 24 JMP FETCH 25 ; 26 ; 27 ;=========================================== 28 ; ÄÍÁ PARAMETERS 29 ;=========================================== 30 ; 31 ; 1809 0000 32 PARAMS .WORD $0000 ; ÈOST ADDRESS, LO, HI 180B 0000 33 .WORD $0000 ; ÅXP ADDRESS, LO, HI 180D 00 34 EXPBANK .BYTE $00 ; ÅXPANSION BANK NO. 180E 0100 35 .WORD $0100 ; # BYTES TO MOVE, LO, HI 1810 00 36 .BYTE $00 ; ÉNTERRUPT MASK REG. 1811 00 37 .BYTE $00 ; ÁDRESS CONTROL REG. 38 ; 1812 00 39 BNK128 .BYTE $00 ; ÂANK OF 128 TO WORK WITH 1813 40 PEND 41 ; 42 ; 43 ;=========================================== 44 ; ÔEST RAM EXPANDER TO DETERMINE SIZE 45 ;=========================================== 46 ; 47 ; ÎUMBER OF BANKS IS RETURNED IN .Á 48 ; AND IN NUMBANK. 49 ; 50 ; .Á = 8 FOR THE 1750 512Ë EXPANDER 51 ; .Á = 2 FOR THE 1700 128Ë EXPANDER 52 ; .Á = 4 FOR THE 1764 256Ë EXPANDER 53 ; .Á = 1 FOR NO ÒÁÍ EXPANDER 54 ; 55 ;=========================================== 56 ; 57 ; .MAIN. HCD65XX V3.1 6JUNE87 PAGE 2 0:RAMEXP.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 58 ; 59 ; ÈERE ARE THE 8 PARAMETERS WE 1813 A2 17 60 HOWBIG LDX #>BUFFER ; MUST SET FOR STASH AND FETCH: 1815 8E 180A 61 STX PARAMS+1 ; ÆIRST, SET UP THE HI BYTES OF 1818 8E 180C 62 STX PARAMS+3 ; THE CPU AND EXPANSION ADDRESS. 181B A2 01 63 LDX #$01 181D 8E 180F 64 STX PARAMS+6 ; ÓET UP THE BYTE COUNT HI 1820 CA 65 DEX ; AND THE BYTE COUNT LO. 1821 8E 180E 66 STX PARAMS+5 1824 8E 180D 67 STX EXPBANK ; ÓET UP THE EXPANSION BANK TO 1827 8E 1809 68 STX PARAMS+0 ; USE AND THE LO BYTES OF THE 182A 8E 180B 69 STX PARAMS+2 ; CPU AND EXPANSION ADDRESS. 182D 8E 1812 70 STX BNK128 ; ÓET THE 128 BANK TO WORK WITH. 71 ; 1830 8A 72 20$ TXA ; ÇENERATE A 1 BLOCK 1831 49 5A 73 EOR #$5A ; TEST PATTERN IN 1833 9D 1700 74 STA BUFFER,X ; BUFFER. 1836 CA 75 DEX 1837 D0 F7 76 BNE 20$ 77 ; 1839 20 187E 78 30$ JSR STASH ; ÎOW WRITE THE TEST 183C EE 180D 79 INC EXPBANK ; PATTERN IN BUFFER 183F AD 180D 80 LDA EXPBANK ; TO EACH OF THE 8 1842 C9 08 81 CMP #8 ; POSSIBLE EXP. BANKS. 1844 D0 F3 82 BNE 30$ 83 ; 1846 A2 00 84 LDX #0 1848 8E 180D 85 STX EXPBANK 86 ; 184B A2 00 87 40$ LDX #0 ; ÏË, NOW CHANGE 184D 8A 88 50$ TXA ; THE 1 BLOCK TEST 184E 49 3C 89 EOR #$3C ; PATTERN IN THE BUFFER 1850 9D 1700 90 STA BUFFER,X ; TO A NEW PATTERN. 1853 CA 91 DEX 1854 D0 F7 92 BNE 50$ 93 ; 1856 20 187E 94 JSR STASH ; ÎOW WRITE THE NEW 1859 EE 180D 95 INC EXPBANK ; PATTERN TO BANK (X)... 96 185C AD 180D 97 LDA EXPBANK ; (CHECK TO SEE 185F C9 08 98 CMP #8 ; IF WE ARE DONE) 1861 F0 12 99 BEQ 90$ 100 1863 20 187B 101 JSR FETCH ; ...AND READ THE PATTERN 1866 A2 00 102 LDX #0 ; FROM BANK (X+1). 1868 8A 103 60$ TXA ; 1869 49 5A 104 EOR #$5A ; ×E SHOULD SEE THE OLD PATTERN 186B DD 1700 105 CMP BUFFER,X ; HERE. ÉF WE DON'T THEN THE DATA 186E D0 05 106 BNE 90$ ; CHANGED AND WE HAVE FOUND THE END. 1870 CA 107 DEX 1871 D0 F5 108 BNE 60$ ; ÂYTES MATCH SO ALL IS WELL. 1873 F0 D6 109 BEQ 40$ ; ÌOOP BACK FOR NEXT BANK. 110 ; 1875 AD 180D 111 90$ LDA EXPBANK ; ÎUMBER OF BANKS IS RETURNED IN 1878 85 FB 112 STA NUMBANK ; THE ACCUMULATOR AND IN NUMBANK. 187A 60 113 RTS 114 ; .MAIN. HCD65XX V3.1 6JUNE87 PAGE 3 0:RAMEXP.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 115 ; 116 ;=============================================== 117 ; STASH & FETCH SUBROUTINES 118 ;=============================================== 119 ; 120 ; ÔHESE ROUTINES WILL TRANSFER ÒÁÍ BETWEEN THE 121 ; CPU AND EXPANSION UNIT ON THE C64 AND C128. 122 ; ÂEFORE CALLING, YOU MUST SET UP 8 PARAMETERS 123 ; FOR THE ÄÍÁ AS FOLLOWS: 124 ; 125 ; SOURCE ADDRESS (LO, HI) 126 ; DESTINATION ADDRESS (LO, HI) 127 ; EXAPNSION BANK 128 ; NUMBER OF BYTES (LO, HI) 129 ; 128 BANK TO USE 130 ; 131 ; (PARAMETERS ARE LOCATED AT "PARAMS") 132 ; 133 ; ÙOU MAY STASH OR FETCH AT ANY ADDRESS. 134 ; ÔHESE ROUTINES WILL BANK OUT ÒÏÍS AND É/Ï 135 ; BEFORE STARTING THE ÄÍÁ. 136 ; 137 ; ÉF YOU WANT TO FETCH OR STASH ÒÁÍ BANK 1 138 ; ON THE Ã128 BE SURE TO MAKE A COPY OF THIS 139 ; CODE IN BANK 1 TOO. 140 ; 141 ;=============================================== 142 ; 143 ; 187B A0 ED 144 FETCH LDY #$ED ; ÃOMMAND TO READ FROM EXPANDER 187D 2C 145 .BYTE $2C ; WITH ÆÆ00 OPTION ENABLED. 146 ; (SKIP 2 BYTES) 147 187E A0 EC 148 STASH LDY #$EC ; ÃOMMAND TO WRITE TO EXPANDER 149 ; WITH ÆÆ00 OPTION ENABLED. 1880 A2 08 150 LDX #PEND-PARAMS-2 1882 BD 1809 151 10$ LDA PARAMS,X ; ÉNITIALIZE THE ÄÍÁ 1885 9D DF02 152 STA $DF02,X ; CONTOLLER WITH OUR 1888 CA 153 DEX ; PARAMETERS, 1889 10 F7 154 BPL 10$ ; 188B 8C DF01 155 STY $DF01 ; AND ISSUE COMMAND. 156 188E AC 1812 157 LDY BNK128 ; ÓET THE .Y REGISTER TO THE 158 ; 128 BANK WE WANT (0 OR 1). 159 ; 160 ; 161 ;=============================== 162 ; TURN OFF ÒÏÍÓ AND START ÄÍÁ 163 ;=============================== 164 ; 165 ; 1891 166 DMAROM 1891 AD FFFD 167 LDA $FFFD ; ÔHE HIGH BYTE OF THE 1894 C9 FC 168 CMP #$FC ; RESET VECTOR ON ALL Ã64S 1896 F0 2A 169 BEQ XFER64 ; IS EQUAL TO $FC. 170 ; 171 ; .MAIN. HCD65XX V3.1 6JUNE87 PAGE 4 0:RAMEXP.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 172 ;============================ 173 ; C128: TURN OFF ALL ÒÏÍS 174 ;============================ 175 ; 1898 78 176 SEI 1899 AD D506 177 LDA RCR ; ÓAVE THE OLD VALUE OF 189C 48 178 PHA ; THE 128 RCR. ÎOW CONVERT 189D 98 179 TYA ; THE 128 BANK NUMBER TO A 189E F0 07 180 BEQ BK0128 ; MASK FOR THE ÖÉÃ/ÄÍÁ 18A0 A9 40 181 LDA #$40 ; POINTER IN THE RCR. 18A2 0D D506 182 ORA RCR ; ÔHIS ALLOWS A STASH OR 18A5 D0 05 183 BNE BANGIT ; FETCH TO BANK 0 OR BANK 1 18A7 A9 3F 184 BK0128 LDA #$3F ; OF THE 128. ×HEN USING 18A9 2D D506 185 AND RCR ; BANK 1, BE SURE TO MAKE A COPY 18AC 8D D506 186 BANGIT STA RCR ; OF THIS CODE IN BOTH BANKS. 187 ; 18AF AD FF00 188 LDA $FF00 ; ÓAVE THE 128 CONFIGURATION 18B2 48 189 PHA ; NOW KILL ÒÏÍS AND É/Ï. 18B3 09 3F 190 ORA #$3F ; ×HEN WE WRITE TO ÆÆ00 18B5 8D FF00 191 STA $FF00 ; ÄÍÁ EXECUTION BEGINS. 18B8 68 192 PLA 18B9 8D FF00 193 STA $FF00 ; ÒESTORE THE OLD 18BC 68 194 PLA ; CONFIGURATION AND 18BD 8D D506 195 STA RCR ; RESTORE THE OLD ÖÉÃ 18C0 58 196 CLI ; POINTER IN THE RCR. 18C1 60 197 RTS 198 ; 199 ;============================ 200 ; C64: TURN OFF ALL ÒÏÍS 201 ;============================ 202 ; 18C2 78 203 XFER64 SEI ; ÓAVE THE VALUE OF THE 18C3 A5 01 204 LDA $01 ; THE C64 CONTROL PORT 18C5 48 205 PHA ; AND TURN ON LOWER 3 BITS 18C6 09 03 206 ORA #$03 ; TO BANK OUT ÒÏÍS, É/Ï. 18C8 85 01 207 STA $01 18CA 8D FF00 208 STA $FF00 ; ÎOW START TRANSFER... 209 ; 18CD 68 210 PLA ; ÒESTORE THE OLD 18CE 85 01 211 STA $01 ; CONFIGURATION 18D0 58 212 CLI ; AND RETURN. 18D1 60 213 RTS 214 ; 18D2 215 END 216 ; 217 .END 0 ERRORS DETECTED .MAIN. HCD65XX V3.1 6JUNE87 PAGE 5 SYMBOL TABLE = LABEL, <=> = SYMBOL, <+>= MULTIBLY DEFINED BANGIT 18AC BK0128 18A7 BNK128 1812 BUFFER =1700 DMAROM 1891 END 18D2 EXPBANK 180D FETCH 187B HOWBIG 1813 NUMBANK =00FB PARAMS 1809 PEND 1813 RAMEXP =DF00 RCR =D506 START 1800 STASH 187E XFER64 18C2 .MAIN. HCD65XX V3.1 6JUNE87 PAGE 6 CROSS REFERENCE ( <#> = DEFINITION, <$> = WRITE, = READ ) BANGIT 18AC 183 186# BK0128 18A7 180 184# BNK128 1812 39# 70$ 157 BUFFER =1700 11# 60 74$ 90$ 105 DMAROM 1891 166# END 18D2 215# EXPBANK 180D 34# 67$ 79$ 80 85$ 95$ 97 111 FETCH 187B 24 101 144# HOWBIG 1813 22 60# NUMBANK =00FB 12# 112$ PARAMS 1809 32# 61$ 62$ 64$ 66$ 68$ 69$ 150 151 PEND 1813 40# 150 RAMEXP =DF00 13# RCR =D506 14# 177 182 185 186$ 195$ START 1800 22# STASH 187E 23 78 94 148# XFER64 18C2 169 203#