MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; 00002 ; gbread21.asm GB Serial Reader V1.1 00003 ; for Microchip PIC16C74A-20 00004 ; Copyright(C)1998 By H.Kashima 00005 ; 00006 ; 98/05/22 Ver1.0 FirstRelease 00007 ; 98/06/29 Ver1.0a SecondRelease, 00008 ; changed 1) Info-table proccess routine 00009 ; not kill when info-table is invalid. 00010 ; 98/08/28 Ver1.0b ThardRelease, 00011 ; added 1) 'ir' command, print infomation with 00012 ; table re-reload 00013 ; 98/09/28 Ver1.0c 4th Release, 00014 ; changed 1) 'dl xxxx xxxx' comannd is not work 00015 ; on unknown ROM type cartridges. 00016 ; changed to free accessable. 00017 ; 98/10/05 Ver1.1 5th 00018 ; added 1) support MBC5 bank method 00019 ; changed 1-1) extend register for GBBANK, CUBANKs for MBC5 00020 ; changed 1-2) information tables extract method(PRINTPB) 00021 ; added 2) information of ROM type 16Mbit, 32Mbit, 64Mbit. 00022 ; added 3) print software type: GBColor, SuperGB, Standard 00023 ; changed 4) unknown cartridge is set to MBC1+ROM+SRAM+BATT. 00024 ; added 5) filename generator identify '/', '\' 00025 ; 00026 ; 00027 ; PIN I/O 00028 ; 00029 ; RA0: a8 out 00030 ; 1: a9 out 00031 ; 2: a10 out 00032 ; 3: a11 out 00033 ; 4: LED out 00034 ; 5: a12 out 00035 ; RB0: d0 in/out 00036 ; 1: d1 in/out 00037 ; 2: d2 in/out 00038 ; 3: d3 in/out 00039 ; 4: d4 in/out 00040 ; 5: d5 in/out 00041 ; 6: d6 in/out 00042 ; 7: d7 in/out 00043 ; RC0: /we out 00044 ; 1: /rd out 00045 ; 2: clk out(PWM1), (/reset testver.) 00046 ; 3: /mreq out 00047 ; 4: DTE.CTS out 00048 ; 5: DTE.RTS in 00049 ; 6: DTE.RxD out(SCI) 00050 ; 7: DTE.TxD in(SCI) 00051 ; RD0: a0 out 00052 ; 1: a1 out 00053 ; 2: a2 out MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 ; 3: a3 out 00055 ; 4: a4 out 00056 ; 5: a5 out 00057 ; 6: a6 out 00058 ; 7: a7 out 00059 ; RE0: a13 out 00060 ; 1: a14 out 00061 ; 2: a15 out 00062 00063 00064 title gbread21 00065 processor 16c74a Warning[216]: Radix superceded by command line. 00066 radix dec 00067 list c = 110, n = 88 00068 00069 ;#define debug 1 00070 #include 00001 LIST 00002 ; P16C74A.INC Standard Header File, Version 1.01 Microchip Technology, Inc. 00323 LIST 00071 2007 3FF2 00072 __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON 00073 00074 00075 #define BS(x) ( 1 << x ) ; bit set 00076 00077 ; supplyed clock 00078 #define XTAL 14745600 ; supplyed clock 00079 #define RTCLK ( XTAL / 4 ) ; internal timer clock 00080 00081 ; baudrate 00082 #define baud(X) ( ((10 * XTAL / (16 * X)) + 5) / 10 - 1 ) 00083 #define baud_l(X) ( ((10 * XTAL / (64 * X)) + 5) / 10 - 1 ) 00084 00085 #define BAUDRATE 115200 ; communication speed 00086 #define BRGVALUE baud_l( BAUDRATE ) 00087 00088 ; 00089 ; Receive buffer size 00090 #define LBUFLEN 64 00091 00092 ; 00093 ; maximum of autodetect memory size 00094 #define ROMMAX 8 00095 #define RAMMAX 4 00096 00097 ; bit define 00098 ; 00000000 00099 P_WR equ 0 00000001 00100 P_RD equ 1 00000002 00101 P_CLK equ 2 00000003 00102 P_MREQ equ 3 00000004 00103 P_CTS equ 4 00000005 00104 P_RTS equ 5 00105 00106 ; DMODE flags 00000000 00107 D_SRAM equ 0 ; DL ROM: 0, DL SRAM:1 00000001 00108 D_ECHO equ 1 ; echo: 0, noecho: 1 00000002 00109 D_PROT equ 2 ; SRAM Protect(enable/disable) flag 00000003 00110 D_ACT equ 3 ; Cartridge detect 00000004 00111 D_MBC2 equ 4 ; flag for MBC2 RAM data filter 00000005 00112 D_CKSM equ 5 ; flag for calc CheckSum only 00000006 00113 D_INFO equ 6 ; infomation activated 00114 00115 ; CTFLAG contents 00000000 00116 C_CAR equ 0 ; 1: Unknown Cartridge type 00000001 00117 C_ROM equ 1 ; 1: Unknown ROM type 00000002 00118 C_RAM equ 2 ; 1: Unknown SRAM type 00119 00120 ; CTYPEB Cartridge type 00000000 00121 CT_ROM equ 0 00000001 00122 CT_SRAM equ 1 00000002 00123 CT_BATT equ 2 00000003 00124 CT_MBC1 equ 3 ; MBC bank chips 00000004 00125 CT_MBC2 equ 4 00000005 00126 CT_MBC3 equ 5 00000006 00127 CT_MBC5 equ 6 00128 00129 ; CFUNC contents 00000000 00130 CF_NORM equ 0 00000001 00131 CF_SUPR equ 1 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 3 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00000002 00132 CF_COLR equ 2 00133 00134 00135 ; CRSIZE contents 00000000 00136 CRS_256 equ 0 00000001 00137 CRS_512 equ 1 00000002 00138 CRS_1M equ 2 00000003 00139 CRS_2M equ 3 00000004 00140 CRS_4M equ 4 00000005 00141 CRS_8M equ 5 00000006 00142 CRS_16M equ 6 00000007 00143 CRS_32M equ 7 00000008 00144 CRS_64M equ 8 00145 00146 ; work area 00147 ; 00148 cblock 0x20 00000020 00149 VAR1, VAR2, VAR3, VAR4, VAR5 00000025 00150 CONVT1, CONVT2, DMODE 00000028 00151 LBUFP, ARGP, ARGPP, ARGC, ARGCT 0000002D 00152 GBADRH, GBADRL, GBDATA 00000030 00153 GBBANK_H, GBBANK_L 00000032 00154 CUBANK_H, CUBANK_L 00000034 00155 COLUMN, CTFLAG 00000036 00156 UUDAT1, UUDAT2, UUDAT3, UASCP ; binary temp for UUENCODE 0000003A 00157 ARG0H, ARG0L, ARG1H, ARG1L ; argument values 0000003E 00158 ARG2H, ARG2L, ARG3H, ARG3L 00000042 00159 ARGT_H, ARGT_L, CMP_H, CMP_L 00000046 00160 D_ADRH, D_ADRL, E_ADRH, E_ADRL ; dump address 0000004A 00161 DMCURH, DMCURL ; current dump address 0000004C 00162 CKSUMH, CKSUML 0000004E 00163 CTITLE:16 ; Cartridge Infotable 0000005E 00164 CTYPE, CSSIZE, CRSIZE 00000061 00165 CSUM_L, CSUM_H, CFUNC 00000064 00166 CTYPEB ; bitflaged Cartridge type 00167 endc 00168 00169 cblock 0xa0 000000A0 00170 ASCBUF:16 ; ASCII buffer for dump 000000B0 00171 LBUF:64 ; line buffer 64byte 00172 endc 00173 ; 00174 ; macros (0x000-0x7ff only) 00175 PRINT macro ptr ; print ptr string 00176 clrf VAR1 00177 PAGESEL ptr ; loop 00178 movfw VAR1 00179 call ptr 00180 bcf PCLATH, 3 ; reset PCL 00181 andlw 0xff 00182 btfsc STATUS, Z 00183 goto $ + 4 00184 call PutC 00185 incf VAR1, F 00186 goto $ - 10 00187 endm 00188 00189 PRINTP macro ptr, skip ; print ptr string table with skip 00190 clrf VAR1 ; pointer 00191 movfw skip 00192 movwf VAR2 ; skip count 00193 00194 PAGESEL ptr ; (l1) 00195 movfw VAR1 00196 call ptr ; string data 00197 bcf PCLATH, 3 ; reset PCL 00198 movwf VAR3 00199 incf VAR1, F ; incriment pointer 00200 00201 andlw 0xff 00202 btfss STATUS, Z 00203 goto $ + 6 ; char != null (goto l2) 00204 00205 movfw VAR2 ; char == null 00206 btfsc STATUS, Z 00207 goto $ + 9 ; skip == 0, exit. 00208 00209 decf VAR2, F ; decriment skip count(skip) 00210 goto $ - 14 ; goto l1 00211 00212 movfw VAR2 ; skip == 0 ? (l2) 00213 btfss STATUS, Z MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 4 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00214 goto $ - 17 ; skip, next char 00215 00216 movfw VAR3 00217 call PutC ; print char 00218 goto $ - 20 ; goto l1 00219 00220 endm 00221 00222 PRINTPB macro ptr, take ; print ptr string table with skip 00223 clrf VAR1 ; pointer 00224 movfw take 00225 movwf VAR2 ; take bits 00226 00227 PAGESEL ptr ; (l1) 00228 movfw VAR1 00229 call ptr ; string data 00230 bcf PCLATH, 3 ; reset PCL 00231 movwf VAR3 00232 incf VAR1, F ; incriment pointer 00233 00234 andlw 0xff 00235 btfss STATUS, Z 00236 goto $ + 11 ; char != null (goto l2) 00237 00238 bcf STATUS, C 00239 rrf VAR2, F ; shift take bit 00240 movfw VAR2 00241 btfsc STATUS, Z ; take bit is zero? 00242 goto $ + 11 ; VAR2 == 0, no flag. exit. 00243 00244 btfss VAR2, 0 ; next is takely turn? 00245 goto $ - 16 ; no print "+", goto l1 00246 00247 movlw '+' 00248 call PutC 00249 goto $ - 19 ; goto l1 00250 00251 btfss VAR2, 0 ; (l2), is takely turn? 00252 goto $ - 21 ; not use, next char 00253 00254 movfw VAR3 00255 call PutC ; print char 00256 goto $ - 24 ; goto l1 00257 00258 endm 00259 00260 ; 00261 ; reset vector 00262 ; 0000 00263 org 0x000 0000 2801 00264 goto start 00265 00266 ; interrupt vector 00267 ; 00268 ; org 0x004 00269 ; goto int_sub 00270 00271 ; 00272 ; cold start 00273 ; MCU initialize 00274 ; 0001 00275 start 0001 1683 00276 BANKSEL OPTION_REG ; bank select RP0 = 1 00277 0002 3007 00278 movlw BS(PS2) | BS(PS1) | BS(PS0) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0003 0081 00279 movwf OPTION_REG ; pullup PORTB, PS=1:256 00280 0004 30C0 00281 movlw b'11000000' ; initialize I/O port Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0005 0085 00282 movwf TRISA 0006 30FF 00283 movlw b'11111111' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0007 0086 00284 movwf TRISB 0008 30A0 00285 movlw b'10100000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0009 0087 00286 movwf TRISC 000A 3000 00287 movlw b'00000000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000B 0088 00288 movwf TRISD 000C 3000 00289 movlw b'00000000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 5 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 000D 0089 00290 movwf TRISE 00291 000E 3006 00292 movlw BS(PCFG2) | BS(PCFG1) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000F 009F 00293 movwf ADCON1 00294 0010 3001 00295 movlw BRGVALUE Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0011 0099 00296 movwf SPBRG 00297 00298 ; movlw BS(TXEN) | BS(BRGH) ; enable transmitter 0012 3020 00299 movlw BS(TXEN) ; on old 16C74, BRGH = 0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0013 0098 00300 movwf TXSTA 0014 3003 00301 movlw 3 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0015 0092 00302 movwf PR2 ; PWM freq = XTAL / 16 00303 0016 1283 00304 BANKSEL PORTA ; bank select RP0 = 0 0017 0185 00305 clrf PORTA ; initialize output 0018 0186 00306 clrf PORTB 0019 303F 00307 movlw b'00111111' 001A 0087 00308 movwf PORTC 001B 0188 00309 clrf PORTD 001C 0189 00310 clrf PORTE 00311 001D 3090 00312 movlw BS(SPEN) | BS(CREN) ; enable receiver 001E 0098 00313 movwf RCSTA 00314 001F 3002 00315 movlw 2 0020 0095 00316 movwf CCPR1L ; DC1:MSB = 2 0021 300C 00317 movlw BS(CCP1M3) | BS(CCP1M2) ; PWM1 setup, PWM on, DC1:LSB = 0 0022 0097 00318 movwf CCP1CON 00319 0023 3004 00320 movlw b'00000100' ; TMR2 control 0024 0092 00321 movwf T2CON 00322 0025 1207 00323 bcf PORTC, P_CTS ; CTS goes low 0026 01CA 00324 clrf DMCURH ; clear current dump 0027 01CB 00325 clrf DMCURL ; pointer 0028 01A7 00326 clrf DMODE ; clear mode flags 00327 00328 ; 00329 ; main loop 00330 ; 0029 00331 main 00332 mloop1 PRINT prom_s ; print prompt 0029 01A0 M clrf VAR1 002A 3008 008A M PAGESEL prom_s ; loop 002C 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 002D 2077 M call prom_s 002E 118A M bcf PCLATH, 3 ; reset PCL 002F 39FF M andlw 0xff 0030 1903 M btfsc STATUS, Z 0031 2835 M goto $ + 4 0032 27A1 M call PutC 0033 0AA0 M incf VAR1, F 0034 282A M goto $ - 10 0035 10A7 00333 bcf DMODE, D_ECHO ; echo on 0036 27A7 00334 call GetS ; get line 0037 00A1 00335 movwf VAR2 ; push return code 00336 0038 1087 00337 bcf PORTC, P_RD ; CR or other, set access readable 0039 0805 00338 movfw PORTA 003A 0084 00339 movwf FSR ; push PORTA 003B 1605 00340 bsf PORTA, 4 ; LED active for read fixed code 00341 003C 243A 00342 call ChkCart ; check cartridge 003D 00A2 00343 movwf VAR3 ; store condition 00344 003E 1E04 00345 mloop0b btfss FSR, 4 003F 1205 00346 bcf PORTA, 4 ; pull PORTA:4 00347 0040 0821 00348 movfw VAR2 ; recall GetS return code 0041 3CFF 00349 sublw 0xff ; ESC inputed? 0042 1D03 00350 btfss STATUS, Z 0043 2857 00351 goto mloop0c 00352 0044 1E05 00353 btfss PORTA, 4 ; ESC inputed, already disactived? 0045 2829 00354 goto mloop1 00355 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 6 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0046 1327 00356 bcf DMODE, D_INFO ; information disactive 0047 2724 00357 call MBCoff ; MBC disactive 0048 1487 00358 bsf PORTC, P_RD ; set access IDLE 0049 1205 00359 bcf PORTA, 4 ; disactive LED 00360 PRINT disc_s ; print disable cartridge 004A 01A0 M clrf VAR1 004B 300A 008A M PAGESEL disc_s ; loop 004D 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 004E 2284 M call disc_s 004F 118A M bcf PCLATH, 3 ; reset PCL 0050 39FF M andlw 0xff 0051 1903 M btfsc STATUS, Z 0052 2856 M goto $ + 4 0053 27A1 M call PutC 0054 0AA0 M incf VAR1, F 0055 284B M goto $ - 10 0056 2829 00361 goto mloop1 00362 0057 1A05 00363 mloop0c btfsc PORTA, 4 ; already actived? 0058 287D 00364 goto mloop0f 00365 0059 1FA2 00366 btfss VAR3, 7 ; check current condition 005A 2869 00367 goto mloop0d ; valid infomation 00368 00369 PRINT ninfo_s ; print info not found 005B 01A0 M clrf VAR1 005C 300A 008A M PAGESEL ninfo_s ; loop 005E 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 005F 22B5 M call ninfo_s 0060 118A M bcf PCLATH, 3 ; reset PCL 0061 39FF M andlw 0xff 0062 1903 M btfsc STATUS, Z 0063 2867 M goto $ + 4 0064 27A1 M call PutC 0065 0AA0 M incf VAR1, F 0066 285C M goto $ - 10 0067 1327 00370 bcf DMODE, D_INFO ; information disactive 0068 286A 00371 goto mloop0e 00372 0069 1727 00373 mloop0d bsf DMODE, D_INFO ; information active 00374 006A 1605 00375 mloop0e bsf PORTA, 4 ; cartridge inserted, LED active 00376 PRINT cenab_s ; print poweruped(with powerup wait) 006B 01A0 M clrf VAR1 006C 300A 008A M PAGESEL cenab_s ; loop 006E 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 006F 229D M call cenab_s 0070 118A M bcf PCLATH, 3 ; reset PCL 0071 39FF M andlw 0xff 0072 1903 M btfsc STATUS, Z 0073 2877 M goto $ + 4 0074 27A1 M call PutC 0075 0AA0 M incf VAR1, F 0076 286C M goto $ - 10 0077 2719 00377 call MBCact ; MBC active 0078 3008 008A 00378 PAGESEL GetInfo Message[306]: Crossing page boundary -- ensure page bits are set. 007A 2000 00379 call GetInfo ; get information 007B 118A 00380 bcf PCLATH, 3 007C 00B5 00381 movwf CTFLAG ; store condition 00382 007D 0821 00383 mloop0f movfw VAR2 ; GetS return code 007E 39FF 00384 andlw 0xff 007F 1903 00385 btfsc STATUS, Z 0080 2829 00386 goto mloop1 ; non argument, only CR 00387 0081 27DF 00388 call PutLF ; line feed 0082 25FD 00389 call cmdpar ; parse command 00390 0083 16BA 00391 bsf ARG0H, 5 ; to lower 0084 16BB 00392 bsf ARG0L, 5 00393 0085 3001 00394 movlw 1 0086 022B 00395 subwf ARGC, W 0087 1D03 00396 btfss STATUS, Z 0088 28BC 00397 goto mloop2 ; 1 arg 00398 0089 083A 00399 movfw ARG0H 008A 3C69 00400 sublw 'i' ; information MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 7 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 008B 1D03 00401 btfss STATUS, Z 008C 2897 00402 goto mloop1b 008D 083B 00403 movfw ARG0L 008E 3C72 00404 sublw 'r' 008F 1D03 00405 btfss STATUS, Z 0090 2943 00406 goto C_info 00407 ; print info with update 0091 3008 008A 00408 PAGESEL GetInfo Message[306]: Crossing page boundary -- ensure page bits are set. 0093 2000 00409 call GetInfo ; get information 0094 118A 00410 bcf PCLATH, 3 0095 00B5 00411 movwf CTFLAG ; store condition 0096 2943 00412 goto C_info 00413 0097 083A 00414 mloop1b movfw ARG0H ; help 0098 3C68 00415 sublw 'h' 0099 1D03 00416 btfss STATUS, Z 009A 289C 00417 goto mloop1d 009B 291E 00418 goto C_help 00419 009C 083A 00420 mloop1d movfw ARG0H ; download all of SRAM 009D 3C64 00421 sublw 'd' 009E 1D03 00422 btfss STATUS, Z 009F 28A7 00423 goto mloop1e 00A0 083B 00424 movfw ARG0L 00A1 3C73 00425 sublw 's' 00A2 1D03 00426 btfss STATUS, Z 00A3 28A7 00427 goto mloop1e 00428 00A4 1427 00429 bsf DMODE, D_SRAM ; set SRAM mode 00A5 12A7 00430 bcf DMODE, D_CKSM ; clear CheckSum flag 00A6 2A45 00431 goto C_down 00432 00A7 083A 00433 mloop1e movfw ARG0H ; download all of SRAM 00A8 3C75 00434 sublw 'u' 00A9 1D03 00435 btfss STATUS, Z 00AA 28B1 00436 goto mloop1f 00AB 083B 00437 movfw ARG0L 00AC 3C73 00438 sublw 's' 00AD 1D03 00439 btfss STATUS, Z 00AE 28B1 00440 goto mloop1f 00AF 1427 00441 bsf DMODE, D_SRAM ; set SRAM mode 00B0 2B42 00442 goto C_up 00443 00B1 083A 00444 mloop1f movfw ARG0H ; calc SRAM CheckSum 00B2 3C63 00445 sublw 'c' 00B3 1D03 00446 btfss STATUS, Z 00B4 28E8 00447 goto mloop5 00B5 083B 00448 movfw ARG0L 00B6 3C73 00449 sublw 's' 00B7 1D03 00450 btfss STATUS, Z 00B8 28E8 00451 goto mloop5 00452 00B9 1427 00453 bsf DMODE, D_SRAM ; set SRAM mode 00BA 16A7 00454 bsf DMODE, D_CKSM ; clear CheckSum flag 00BB 2A45 00455 goto C_down 00456 00BC 3002 00457 mloop2 movlw 2 00BD 022B 00458 subwf ARGC, W 00BE 1D03 00459 btfss STATUS, Z 00BF 28DB 00460 goto mloop3 00461 ; 2 args 00C0 083A 00462 movfw ARG0H ; read 00C1 3C72 00463 sublw 'r' 00C2 1D03 00464 btfss STATUS, Z 00C3 28C9 00465 goto mloop2b 00C4 083B 00466 movfw ARG0L 00C5 3C64 00467 sublw 'd' 00C6 1D03 00468 btfss STATUS, Z 00C7 28C9 00469 goto mloop2b 00C8 2C5E 00470 goto C_read 00471 00C9 083A 00472 mloop2b movfw ARG0H ; select ROM bank 00CA 3C62 00473 sublw 'b' 00CB 1D03 00474 btfss STATUS, Z 00CC 28D2 00475 goto mloop2c 00CD 083B 00476 movfw ARG0L 00CE 3C72 00477 sublw 'r' 00CF 1D03 00478 btfss STATUS, Z 00D0 28D2 00479 goto mloop2c 00D1 2C67 00480 goto C_sbR 00481 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 8 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00D2 083A 00482 mloop2c movfw ARG0H ; select SRAM bank 00D3 3C62 00483 sublw 'b' 00D4 1D03 00484 btfss STATUS, Z 00D5 28E8 00485 goto mloop5 00D6 083B 00486 movfw ARG0L 00D7 3C73 00487 sublw 's' 00D8 1D03 00488 btfss STATUS, Z 00D9 28E8 00489 goto mloop5 00DA 2C6F 00490 goto C_sbS 00491 00DB 3003 00492 mloop3 movlw 3 00DC 022B 00493 subwf ARGC, W 00DD 1D03 00494 btfss STATUS, Z 00DE 28E8 00495 goto mloop5 00496 ; 3 args 00DF 083A 00497 movfw ARG0H ; write 00E0 3C77 00498 sublw 'w' 00E1 1D03 00499 btfss STATUS, Z 00E2 28E8 00500 goto mloop5 00E3 083B 00501 movfw ARG0L 00E4 3C64 00502 sublw 'd' 00E5 1D03 00503 btfss STATUS, Z 00E6 28E8 00504 goto mloop5 00E7 2C56 00505 goto C_wd 00506 00507 ; any args 00E8 083A 00508 mloop5 movfw ARG0H ; download 00E9 3C64 00509 sublw 'd' 00EA 1D03 00510 btfss STATUS, Z 00EB 28F3 00511 goto mloop5b 00EC 083B 00512 movfw ARG0L 00ED 3C6C 00513 sublw 'l' 00EE 1D03 00514 btfss STATUS, Z 00EF 28F3 00515 goto mloop5b 00516 00F0 1027 00517 bcf DMODE, D_SRAM ; set ROM mode 00F1 12A7 00518 bcf DMODE, D_CKSM ; clear CheckSum flag 00F2 2A45 00519 goto C_down 00520 00F3 083A 00521 mloop5b movfw ARG0H ; upload 00F4 3C75 00522 sublw 'u' 00F5 1D03 00523 btfss STATUS, Z 00F6 28FD 00524 goto mloop5c 00F7 083B 00525 movfw ARG0L 00F8 3C70 00526 sublw 'p' 00F9 1D03 00527 btfss STATUS, Z 00FA 28FD 00528 goto mloop5c 00FB 1027 00529 bcf DMODE, D_SRAM ; set ROM mode 00FC 2B42 00530 goto C_up 00531 00FD 083A 00532 mloop5c movfw ARG0H ; memory dump 00FE 3C64 00533 sublw 'd' 00FF 1D03 00534 btfss STATUS, Z 0100 2906 00535 goto mloop5d 0101 083B 00536 movfw ARG0L 0102 3C6D 00537 sublw 'm' 0103 1D03 00538 btfss STATUS, Z 0104 2906 00539 goto mloop5d 0105 2C75 00540 goto C_dump 00541 0106 083A 00542 mloop5d movfw ARG0H ; calc ROM CheckSum 0107 3C63 00543 sublw 'c' 0108 1D03 00544 btfss STATUS, Z 0109 2911 00545 goto mloop4 010A 083B 00546 movfw ARG0L 010B 3C72 00547 sublw 'r' 010C 1D03 00548 btfss STATUS, Z 010D 2911 00549 goto mloop4 00550 010E 1027 00551 bcf DMODE, D_SRAM ; set ROM mode 010F 16A7 00552 bsf DMODE, D_CKSM ; set CheckSum flag 0110 2A45 00553 goto C_down 00554 0111 00555 merror 00556 mloop4 PRINT err_s ; error 0111 01A0 M clrf VAR1 0112 3009 008A M PAGESEL err_s ; loop 0114 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0115 21E0 M call err_s 0116 118A M bcf PCLATH, 3 ; reset PCL 0117 39FF M andlw 0xff MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 9 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0118 1903 M btfsc STATUS, Z 0119 291D M goto $ + 4 011A 27A1 M call PutC 011B 0AA0 M incf VAR1, F 011C 2912 M goto $ - 10 011D 2829 00557 goto mloop1 00558 00559 ; 00560 ; command proc. 00561 ; 00562 ; "h" print help 00563 C_help PRINT ver_s ; print version 011E 01A0 M clrf VAR1 011F 300A 008A M PAGESEL ver_s ; loop 0121 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0122 2200 M call ver_s 0123 118A M bcf PCLATH, 3 ; reset PCL 0124 39FF M andlw 0xff 0125 1903 M btfsc STATUS, Z 0126 292A M goto $ + 4 0127 27A1 M call PutC 0128 0AA0 M incf VAR1, F 0129 291F M goto $ - 10 00564 PRINT help1_s ; print help1 012A 01A0 M clrf VAR1 012B 300B 008A M PAGESEL help1_s ; loop 012D 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 012E 2300 M call help1_s 012F 118A M bcf PCLATH, 3 ; reset PCL 0130 39FF M andlw 0xff 0131 1903 M btfsc STATUS, Z 0132 2936 M goto $ + 4 0133 27A1 M call PutC 0134 0AA0 M incf VAR1, F 0135 292B M goto $ - 10 00565 PRINT help2_s ; print help2 0136 01A0 M clrf VAR1 0137 300C 008A M PAGESEL help2_s ; loop 0139 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 013A 2400 M call help2_s 013B 118A M bcf PCLATH, 3 ; reset PCL 013C 39FF M andlw 0xff 013D 1903 M btfsc STATUS, Z 013E 2942 M goto $ + 4 013F 27A1 M call PutC 0140 0AA0 M incf VAR1, F 0141 2937 M goto $ - 10 0142 2829 00566 goto mloop1 00567 ; 00568 ; "i" print cartridge information 0143 1A05 00569 C_info btfsc PORTA, 4 ; LED is active? 0144 2952 00570 goto info1 00571 00572 norom PRINT norom_s ; print no ROM 0145 01A0 M clrf VAR1 0146 300A 008A M PAGESEL norom_s ; loop 0148 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0149 2237 M call norom_s 014A 118A M bcf PCLATH, 3 ; reset PCL 014B 39FF M andlw 0xff 014C 1903 M btfsc STATUS, Z 014D 2951 M goto $ + 4 014E 27A1 M call PutC 014F 0AA0 M incf VAR1, F 0150 2946 M goto $ - 10 0151 2829 00573 goto mloop1 00574 0152 1F27 00575 info1 btfss DMODE, D_INFO ; check information 0153 2945 00576 goto norom 00577 00578 PRINT inf1_s ; print title 0154 01A0 M clrf VAR1 0155 3008 008A M PAGESEL inf1_s ; loop 0157 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0158 207F M call inf1_s 0159 118A M bcf PCLATH, 3 ; reset PCL 015A 39FF M andlw 0xff MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 10 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 015B 1903 M btfsc STATUS, Z 015C 2960 M goto $ + 4 015D 27A1 M call PutC 015E 0AA0 M incf VAR1, F 015F 2955 M goto $ - 10 00579 0160 304E 00580 movlw CTITLE 0161 0084 00581 movwf FSR 0162 0800 00582 info2 movfw INDF ; get title 0163 39FF 00583 andlw 0xff 0164 1903 00584 btfsc STATUS, Z 0165 296C 00585 goto info3 ; expected null char 00586 0166 27A1 00587 call PutC ; print title char 0167 0A84 00588 incf FSR, F 0168 0804 00589 movfw FSR 0169 3C5E 00590 sublw CTITLE + 16 016A 1D03 00591 btfss STATUS, Z 016B 2962 00592 goto info2 00593 016C 27DF 00594 info3 call PutLF 00595 PRINT inf2_s 016D 01A0 M clrf VAR1 016E 3008 008A M PAGESEL inf2_s ; loop 0170 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0171 2088 M call inf2_s 0172 118A M bcf PCLATH, 3 ; reset PCL 0173 39FF M andlw 0xff 0174 1903 M btfsc STATUS, Z 0175 2979 M goto $ + 4 0176 27A1 M call PutC 0177 0AA0 M incf VAR1, F 0178 296E M goto $ - 10 0179 085E 00596 movfw CTYPE ; print type code 017A 2699 00597 call hex2pr 017B 302C 00598 movlw ',' 017C 27A1 00599 call PutC 017D 1C35 00600 btfss CTFLAG, C_CAR ; check known cartridge 017E 2981 00601 goto info3a 017F 2449 00602 call prunknw 0180 299E 00603 goto info3b 00604 info3a PRINTPB type_s, CTYPEB ; print type 0181 01A0 M clrf VAR1 ; pointer 0182 0864 M movfw CTYPEB 0183 00A1 M movwf VAR2 ; take bits M 0184 3009 008A M PAGESEL type_s ; (l1) 0186 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0187 2135 M call type_s ; string data 0188 118A M bcf PCLATH, 3 ; reset PCL 0189 00A2 M movwf VAR3 018A 0AA0 M incf VAR1, F ; incriment pointer M 018B 39FF M andlw 0xff 018C 1D03 M btfss STATUS, Z 018D 2998 M goto $ + 11 ; char != null (goto l2) M 018E 1003 M bcf STATUS, C 018F 0CA1 M rrf VAR2, F ; shift take bit 0190 0821 M movfw VAR2 0191 1903 M btfsc STATUS, Z ; take bit is zero? 0192 299D M goto $ + 11 ; VAR2 == 0, no flag. exit. M 0193 1C21 M btfss VAR2, 0 ; next is takely turn? 0194 2984 M goto $ - 16 ; no print "+", goto l1 M 0195 302B M movlw '+' 0196 27A1 M call PutC 0197 2984 M goto $ - 19 ; goto l1 M 0198 1C21 M btfss VAR2, 0 ; (l2), is takely turn? 0199 2984 M goto $ - 21 ; not use, next char M 019A 0822 M movfw VAR3 019B 27A1 M call PutC ; print char 019C 2984 M goto $ - 24 ; goto l1 M 019D 27DF 00605 call PutLF 00606 00607 info3b PRINT inf3_s ; ROM type MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 11 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 019E 01A0 M clrf VAR1 019F 3008 008A M PAGESEL inf3_s ; loop 01A1 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01A2 2091 M call inf3_s 01A3 118A M bcf PCLATH, 3 ; reset PCL 01A4 39FF M andlw 0xff 01A5 1903 M btfsc STATUS, Z 01A6 29AA M goto $ + 4 01A7 27A1 M call PutC 01A8 0AA0 M incf VAR1, F 01A9 299F M goto $ - 10 01AA 0860 00608 movfw CRSIZE ; print size code 01AB 2699 00609 call hex2pr 01AC 302C 00610 movlw ',' 01AD 27A1 00611 call PutC 01AE 1CB5 00612 btfss CTFLAG, C_ROM ; check known cartridge 01AF 29B2 00613 goto info3c 01B0 2449 00614 call prunknw 01B1 29CA 00615 goto info3d 00616 info3c PRINTP roms_s, CRSIZE ; print ROM size 01B2 01A0 M clrf VAR1 ; pointer 01B3 0860 M movfw CRSIZE 01B4 00A1 M movwf VAR2 ; skip count M 01B5 3009 008A M PAGESEL roms_s ; (l1) 01B7 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01B8 2100 M call roms_s ; string data 01B9 118A M bcf PCLATH, 3 ; reset PCL 01BA 00A2 M movwf VAR3 01BB 0AA0 M incf VAR1, F ; incriment pointer M 01BC 39FF M andlw 0xff 01BD 1D03 M btfss STATUS, Z 01BE 29C4 M goto $ + 6 ; char != null (goto l2) M 01BF 0821 M movfw VAR2 ; char == null 01C0 1903 M btfsc STATUS, Z 01C1 29CA M goto $ + 9 ; skip == 0, exit. M 01C2 03A1 M decf VAR2, F ; decriment skip count(skip) 01C3 29B5 M goto $ - 14 ; goto l1 M 01C4 0821 M movfw VAR2 ; skip == 0 ? (l2) 01C5 1D03 M btfss STATUS, Z 01C6 29B5 M goto $ - 17 ; skip, next char M 01C7 0822 M movfw VAR3 01C8 27A1 M call PutC ; print char 01C9 29B5 M goto $ - 20 ; goto l1 M 00617 00618 info3d PRINT inf4_s 01CA 01A0 M clrf VAR1 01CB 3008 008A M PAGESEL inf4_s ; loop 01CD 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01CE 209A M call inf4_s 01CF 118A M bcf PCLATH, 3 ; reset PCL 01D0 39FF M andlw 0xff 01D1 1903 M btfsc STATUS, Z 01D2 29D6 M goto $ + 4 01D3 27A1 M call PutC 01D4 0AA0 M incf VAR1, F 01D5 29CB M goto $ - 10 01D6 085F 00619 movfw CSSIZE ; print size code 01D7 2699 00620 call hex2pr 01D8 302C 00621 movlw ',' 01D9 27A1 00622 call PutC 01DA 1D35 00623 btfss CTFLAG, C_RAM ; check known cartridge 01DB 29DE 00624 goto info3e 01DC 2449 00625 call prunknw 01DD 29F6 00626 goto info3f 00627 info3e PRINTP rams_s, CSSIZE ; print RAM size 01DE 01A0 M clrf VAR1 ; pointer 01DF 085F M movfw CSSIZE 01E0 00A1 M movwf VAR2 ; skip count M 01E1 3008 008A M PAGESEL rams_s ; (l1) 01E3 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 12 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01E4 20DF M call rams_s ; string data 01E5 118A M bcf PCLATH, 3 ; reset PCL 01E6 00A2 M movwf VAR3 01E7 0AA0 M incf VAR1, F ; incriment pointer M 01E8 39FF M andlw 0xff 01E9 1D03 M btfss STATUS, Z 01EA 29F0 M goto $ + 6 ; char != null (goto l2) M 01EB 0821 M movfw VAR2 ; char == null 01EC 1903 M btfsc STATUS, Z 01ED 29F6 M goto $ + 9 ; skip == 0, exit. M 01EE 03A1 M decf VAR2, F ; decriment skip count(skip) 01EF 29E1 M goto $ - 14 ; goto l1 M 01F0 0821 M movfw VAR2 ; skip == 0 ? (l2) 01F1 1D03 M btfss STATUS, Z 01F2 29E1 M goto $ - 17 ; skip, next char M 01F3 0822 M movfw VAR3 01F4 27A1 M call PutC ; print char 01F5 29E1 M goto $ - 20 ; goto l1 M 00628 00629 info3f PRINT inf6_s ; used function flag 01F6 01A0 M clrf VAR1 01F7 3008 008A M PAGESEL inf6_s ; loop 01F9 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01FA 20AC M call inf6_s 01FB 118A M bcf PCLATH, 3 ; reset PCL 01FC 39FF M andlw 0xff 01FD 1903 M btfsc STATUS, Z 01FE 2A02 M goto $ + 4 01FF 27A1 M call PutC 0200 0AA0 M incf VAR1, F 0201 29F7 M goto $ - 10 00630 PRINTPB func_s, CFUNC 0202 01A0 M clrf VAR1 ; pointer 0203 0863 M movfw CFUNC 0204 00A1 M movwf VAR2 ; take bits M 0205 3008 008A M PAGESEL func_s ; (l1) 0207 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0208 20BB M call func_s ; string data 0209 118A M bcf PCLATH, 3 ; reset PCL 020A 00A2 M movwf VAR3 020B 0AA0 M incf VAR1, F ; incriment pointer M 020C 39FF M andlw 0xff 020D 1D03 M btfss STATUS, Z 020E 2A19 M goto $ + 11 ; char != null (goto l2) M 020F 1003 M bcf STATUS, C 0210 0CA1 M rrf VAR2, F ; shift take bit 0211 0821 M movfw VAR2 0212 1903 M btfsc STATUS, Z ; take bit is zero? 0213 2A1E M goto $ + 11 ; VAR2 == 0, no flag. exit. M 0214 1C21 M btfss VAR2, 0 ; next is takely turn? 0215 2A05 M goto $ - 16 ; no print "+", goto l1 M 0216 302B M movlw '+' 0217 27A1 M call PutC 0218 2A05 M goto $ - 19 ; goto l1 M 0219 1C21 M btfss VAR2, 0 ; (l2), is takely turn? 021A 2A05 M goto $ - 21 ; not use, next char M 021B 0822 M movfw VAR3 021C 27A1 M call PutC ; print char 021D 2A05 M goto $ - 24 ; goto l1 M 021E 27DF 00631 call PutLF 00632 00633 PRINT inf5_s 021F 01A0 M clrf VAR1 0220 3008 008A M PAGESEL inf5_s ; loop 0222 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 13 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0223 20A3 M call inf5_s 0224 118A M bcf PCLATH, 3 ; reset PCL 0225 39FF M andlw 0xff 0226 1903 M btfsc STATUS, Z 0227 2A2B M goto $ + 4 0228 27A1 M call PutC 0229 0AA0 M incf VAR1, F 022A 2A20 M goto $ - 10 022B 0862 00634 movfw CSUM_H ; get SUM MSB 022C 00CC 00635 movwf CKSUMH 022D 00C4 00636 movwf CMP_H 022E 2699 00637 call hex2pr 00638 022F 0861 00639 movfw CSUM_L ; get SUM LSB 0230 00CD 00640 movwf CKSUML 0231 00C5 00641 movwf CMP_L 00642 0232 2699 00643 call hex2pr ; print sum 00644 0233 3028 00645 movlw '(' ; print calc'ed sum 0234 27A1 00646 call PutC 0235 084C 00647 movfw CKSUMH ; sum = sum + 0236 07C5 00648 addwf CMP_L, F ; sum_l + sum_h 0237 1803 00649 btfsc STATUS, C 0238 0AC4 00650 incf CMP_H, F 0239 084D 00651 movfw CKSUML 023A 07C5 00652 addwf CMP_L, F 023B 1803 00653 btfsc STATUS, C 023C 0AC4 00654 incf CMP_H, F 00655 023D 0844 00656 movfw CMP_H 023E 2699 00657 call hex2pr 023F 0845 00658 movfw CMP_L 0240 2699 00659 call hex2pr 0241 3029 00660 movlw ')' 0242 27A1 00661 call PutC 0243 27DF 00662 call PutLF 00663 0244 2829 00664 goto mloop1 00665 00666 ; 00667 ; "dl {ADDR} {END}" download with UUENCODE 00668 ; "ds" download SRAM with UUENCODE in case of DMODE:D_SRAM == 1 00669 ; "cr {ADDR} {END}" caluculate ROM checksum DMODE:D_CKSM == 1 00670 ; "cs" caluculate SRAM checksum 0245 1E05 00671 C_down btfss PORTA, 4 ; LED is active? 0246 2945 00672 goto norom ; print no ROM 00673 0247 1F27 00674 btfss DMODE, D_INFO ; infomation active? 0248 2945 00675 goto norom 00676 0249 1EA7 00677 btfss DMODE, D_CKSM 024A 2A4E 00678 goto sram0 00679 024B 01B4 00680 clrf COLUMN ; calculate animation 024C 3020 00681 movlw ' ' ; initialize 024D 27A1 00682 call PutC 00683 024E 1827 00684 sram0 btfsc DMODE, D_SRAM ; check DMODE 024F 2A5F 00685 goto sram1 00686 ; ROM dl mode 0250 3003 00687 movlw 3 ; Check ABS DUMP 0251 022B 00688 subwf ARGC, W 0252 1903 00689 btfsc STATUS, Z 0253 2B15 00690 goto down6 ; Absolute DUMP 00691 0254 0835 00692 movfw CTFLAG ; correct cartridge flag 0255 3902 00693 andlw BS(C_ROM) ; check known size ROM 0256 1903 00694 btfsc STATUS, Z 0257 2A5A 00695 goto down0 00696 0258 2449 00697 unknown call prunknw ; print unknown type 0259 2829 00698 goto mloop1 00699 025A 3001 00700 down0 movlw 1 ; DMODE:0 == 0, download ROM 025B 022B 00701 subwf ARGC, W 025C 1903 00702 btfsc STATUS, Z 025D 2A7C 00703 goto down1 00704 025E 2911 00705 goto merror ; ARGC != [1|3], error 00706 00707 ; unknown type is set to MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 14 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00708 ; MBC5 + SRAM 025F 0835 00709 sram1 movfw CTFLAG ; SRAM dl mode, correct cartridge flag 0260 3904 00710 andlw BS(C_RAM) ; check known size ROM, SRAM 0261 1D03 00711 btfss STATUS, Z 0262 2A58 00712 goto unknown ; reading with unknown SRAM size 00713 0263 1A64 00714 btfsc CTYPEB, CT_MBC2 ; check have SRAM or MBC2 0264 2A74 00715 goto sram1b 00716 0265 18E4 00717 btfsc CTYPEB, CT_SRAM 0266 2A74 00718 goto sram1b 00719 00720 nosram PRINT only_s ; haven't SRAM 0267 01A0 M clrf VAR1 0268 3009 008A M PAGESEL only_s ; loop 026A 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 026B 219C M call only_s 026C 118A M bcf PCLATH, 3 ; reset PCL 026D 39FF M andlw 0xff 026E 1903 M btfsc STATUS, Z 026F 2A73 M goto $ + 4 0270 27A1 M call PutC 0271 0AA0 M incf VAR1, F 0272 2A68 M goto $ - 10 0273 2829 00721 goto mloop1 00722 0274 00723 sram1b 0274 3009 008A 00724 PAGESEL ram_t ; translate SRAM bank 0276 085F 00725 movfw CSSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 0277 2196 00726 call ram_t 0278 00B3 00727 movwf CUBANK_L 0279 118A 00728 bcf PCLATH, 3 ; reset PCL 027A 01B2 00729 clrf CUBANK_H 027B 2A89 00730 goto down3 ; all bank down only at SRAM mode 00731 027C 00732 down1 027C 3009 008A 00733 PAGESEL rom_t ; translate ROM bank 027E 1003 00734 bcf STATUS, C 027F 0D60 00735 rlf CRSIZE, W ; W = rom_t[2 * CRSIZE] 0280 0084 00736 movwf FSR Message[306]: Crossing page boundary -- ensure page bits are set. 0281 2183 00737 call rom_t 0282 00B2 00738 movwf CUBANK_H 0283 3009 008A 00739 PAGESEL rom_t 0285 0A04 00740 incf FSR, W Message[306]: Crossing page boundary -- ensure page bits are set. 0286 2183 00741 call rom_t 0287 00B3 00742 movwf CUBANK_L 0288 118A 00743 bcf PCLATH, 3 ; reset PCL 00744 0289 01CC 00745 down3 clrf CKSUMH ; clear check sum 028A 01CD 00746 clrf CKSUML 028B 01B0 00747 clrf GBBANK_H ; set bank 0 028C 01B1 00748 clrf GBBANK_L ; set bank 0 028D 1C27 00749 btfss DMODE, D_SRAM ; check DMODE 028E 2A91 00750 goto sram2 00751 028F 274C 00752 call RAMBank ; SRAM mode, reset BANK 0290 2A92 00753 goto sram3 00754 0291 272C 00755 sram2 call ROMBank ; ROM mode, reset BANK 0292 1AA7 00756 sram3 btfsc DMODE, D_CKSM ; calc only? 0293 2ABA 00757 goto down4 ; skip print header 00758 00759 PRINT begin_s ; print header 0294 01A0 M clrf VAR1 0295 3009 008A M PAGESEL begin_s ; loop 0297 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0298 21C1 M call begin_s 0299 118A M bcf PCLATH, 3 ; reset PCL 029A 39FF M andlw 0xff 029B 1903 M btfsc STATUS, Z 029C 2AA0 M goto $ + 4 029D 27A1 M call PutC 029E 0AA0 M incf VAR1, F 029F 2A95 M goto $ - 10 02A0 24EC 00760 call GenFN ; generate filename 02A1 3008 00761 movlw 8 ; print filename 02A2 00A0 00762 movwf VAR1 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 15 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02A3 30A0 00763 movlw ASCBUF 02A4 0084 00764 movwf FSR 02A5 0800 00765 down3b movfw INDF 02A6 27A1 00766 call PutC 02A7 0A84 00767 incf FSR, F 02A8 0BA0 00768 decfsz VAR1, F 02A9 2AA5 00769 goto down3b 00770 02AA 302E 00771 movlw '.' ; add extention 02AB 27A1 00772 call PutC 00773 02AC 1827 00774 btfsc DMODE, D_SRAM 02AD 2AB3 00775 goto sram3a 00776 02AE 3047 00777 movlw 'G' ; ROM mode 02AF 27A1 00778 call PutC 02B0 3042 00779 movlw 'B' 02B1 27A1 00780 call PutC 02B2 2AB9 00781 goto sram3b 00782 02B3 3053 00783 sram3a movlw 'S' ; SRAM mode 02B4 27A1 00784 call PutC 02B5 3041 00785 movlw 'A' 02B6 27A1 00786 call PutC 02B7 3056 00787 movlw 'V' 02B8 27A1 00788 call PutC 00789 02B9 27DF 00790 sram3b call PutLF ; line feed 00791 02BA 1C27 00792 down4 btfss DMODE, D_SRAM ; bank loop 02BB 2AD3 00793 goto sram4 00794 02BC 30A0 00795 movlw 0xa0 ; SRAM mode 02BD 00C6 00796 movwf D_ADRH ; addr = 0xa000 to 0xbfff 00797 02BE 1E64 00798 btfss CTYPEB, CT_MBC2 ; is MBC2 type ? 02BF 2AC6 00799 goto sram3c 00800 02C0 30A1 00801 movlw 0xa1 ; MBC2, addr = 0xa000 - 0xa1ff 02C1 00C8 00802 movwf E_ADRH 02C2 01B2 00803 clrf CUBANK_H 02C3 3001 00804 movlw 1 02C4 00B3 00805 movwf CUBANK_L ; N of BANK = 1 02C5 2ADF 00806 goto sram5 00807 02C6 3001 00808 sram3c movlw 1 02C7 025F 00809 subwf CSSIZE, W 02C8 1D03 00810 btfss STATUS, Z ; SRAM size is 2KB? 02C9 2AD0 00811 goto sram3d 00812 02CA 30A7 00813 movlw 0xa7 ; at SRAM 2KB, - 0xa7ff 02CB 00C8 00814 movwf E_ADRH 02CC 01B2 00815 clrf CUBANK_H 02CD 3001 00816 movlw 1 02CE 00B3 00817 movwf CUBANK_L ; N of BANK = 1 02CF 2ADF 00818 goto sram5 00819 02D0 30BF 00820 sram3d movlw 0xbf ; MBC1 and not 2KB SRAM, - 0xbfff 02D1 00C8 00821 movwf E_ADRH 02D2 2ADF 00822 goto sram5 00823 02D3 3040 00824 sram4 movlw 0x40 ; set ROM bank window 02D4 00C6 00825 movwf D_ADRH ; addr = 0x4000 to 0x7fff 02D5 307F 00826 movlw 0x7f 02D6 00C8 00827 movwf E_ADRH 00828 02D7 0831 00829 movfw GBBANK_L ; first bank? 02D8 1D03 00830 btfss STATUS, Z 02D9 2ADF 00831 goto sram5 00832 02DA 0830 00833 movfw GBBANK_H 02DB 1D03 00834 btfss STATUS, Z 02DC 2ADF 00835 goto sram5 00836 02DD 1346 00837 bcf D_ADRH, 6 ; if bank == 0, 02DE 1348 00838 bcf E_ADRH, 6 ; translate 0x0000 - 0x3fff 00839 02DF 01C7 00840 sram5 clrf D_ADRL 02E0 30FF 00841 movlw 0xff 02E1 00C9 00842 movwf E_ADRL 00843 02E2 1EA7 00844 btfss DMODE, D_CKSM ; checksum calc mode? MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 16 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02E3 2AE7 00845 goto sram4a 00846 02E4 258E 00847 call TurnC ; put loading animation 02E5 24C7 00848 call CalcSUM ; calc SUM(D_ADR to E_ADR) 02E6 2AEC 00849 goto down4b 00850 02E7 25AE 00851 sram4a call UUDump ; start dump in UUENCODE 02E8 39FF 00852 andlw 0xff ; aborted? 02E9 1903 00853 btfsc STATUS, Z 02EA 2AEC 00854 goto down4b 00855 02EB 2BD7 00856 goto cabort ; print abort, done 00857 02EC 3001 00858 down4b movlw 1 02ED 07B1 00859 addwf GBBANK_L, F ; window dumped, incriment bank and end chec k 02EE 1803 00860 btfsc STATUS, C 02EF 0AB0 00861 incf GBBANK_H, F ; carried, incriment MSB 00862 02F0 0832 00863 movfw CUBANK_H ; compare bank, 02F1 0230 00864 subwf GBBANK_H, W ; end of bank reached ? 02F2 1C03 00865 btfss STATUS, C ; GB - CU >= 0 02F3 2AF8 00866 goto down4d 00867 02F4 0833 00868 movfw CUBANK_L 02F5 0231 00869 subwf GBBANK_L, W 02F6 1903 00870 btfsc STATUS, Z 02F7 2AFE 00871 goto down5 ; end of bank 00872 02F8 1C27 00873 down4d btfss DMODE, D_SRAM ; not end, continue 02F9 2AFC 00874 goto sram6 00875 02FA 274C 00876 call RAMBank ; SRAM mode, set bank 02FB 2ABA 00877 goto down4 00878 02FC 272C 00879 sram6 call ROMBank ; set bank 02FD 2ABA 00880 goto down4 ; next bank 00881 02FE 1AA7 00882 down5 btfsc DMODE, D_CKSM ; check calc only 02FF 2B0D 00883 goto down5a ; skip print tailer 00884 00885 PRINT end_s ; print tailer 0300 01A0 M clrf VAR1 0301 3009 008A M PAGESEL end_s ; loop 0303 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0304 21D6 M call end_s 0305 118A M bcf PCLATH, 3 ; reset PCL 0306 39FF M andlw 0xff 0307 1903 M btfsc STATUS, Z 0308 2B0C M goto $ + 4 0309 27A1 M call PutC 030A 0AA0 M incf VAR1, F 030B 2B01 M goto $ - 10 030C 2829 00886 goto mloop1 ; dump done. 00887 030D 3008 00888 down5a movlw 0x08 ; delete animation char 030E 27A1 00889 call PutC 030F 084C 00890 movfw CKSUMH ; print check sum 0310 2699 00891 call hex2pr 0311 084D 00892 movfw CKSUML 0312 2699 00893 call hex2pr 0313 27DF 00894 call PutLF 0314 2829 00895 goto mloop1 ; calc done. 00896 0315 01CD 00897 down6 clrf CKSUML ; absolute dump 0316 01CC 00898 clrf CKSUMH 0317 1AA7 00899 btfsc DMODE, D_CKSM 0318 2B31 00900 goto down6a 00901 00902 PRINT begin_s ; print header 0319 01A0 M clrf VAR1 031A 3009 008A M PAGESEL begin_s ; loop 031C 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 031D 21C1 M call begin_s 031E 118A M bcf PCLATH, 3 ; reset PCL 031F 39FF M andlw 0xff 0320 1903 M btfsc STATUS, Z 0321 2B25 M goto $ + 4 0322 27A1 M call PutC 0323 0AA0 M incf VAR1, F MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 17 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0324 2B1A M goto $ - 10 00903 PRINT partf_s ; dummy file name 0325 01A0 M clrf VAR1 0326 3009 008A M PAGESEL partf_s ; loop 0328 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0329 21CD M call partf_s 032A 118A M bcf PCLATH, 3 ; reset PCL 032B 39FF M andlw 0xff 032C 1903 M btfsc STATUS, Z 032D 2B31 M goto $ + 4 032E 27A1 M call PutC 032F 0AA0 M incf VAR1, F 0330 2B26 M goto $ - 10 0331 083C 00904 down6a movfw ARG1H 0332 00C6 00905 movwf D_ADRH ; set start addr 0333 083D 00906 movfw ARG1L 0334 00C7 00907 movwf D_ADRL 0335 083E 00908 movfw ARG2H 0336 00C8 00909 movwf E_ADRH ; set end addr 0337 083F 00910 movfw ARG2L 0338 00C9 00911 movwf E_ADRL 0339 1EA7 00912 btfss DMODE, D_CKSM 033A 2B3D 00913 goto down6b 00914 033B 24C7 00915 call CalcSUM ; calc checksum 033C 2B0D 00916 goto down5a ; print sum 00917 033D 25AE 00918 down6b call UUDump 033E 39FF 00919 andlw 0xff 033F 1903 00920 btfsc STATUS, Z 0340 2AFE 00921 goto down5 ; print tailer, done 00922 0341 2BD7 00923 goto cabort ; print abort, done 00924 00925 ; 00926 ; "up" upload with UUDECODE 00927 ; "us" upload to SRAM with UUENCODE 0342 1E05 00928 C_up btfss PORTA, 4 ; LED is active? 0343 2945 00929 goto norom ; print no ROM 00930 0344 3003 00931 movlw 3 ; arg1, arg2 given 0345 022B 00932 subwf ARGC, W 0346 1903 00933 btfsc STATUS, Z 0347 2BE4 00934 goto up13 ; ABS upload mode 00935 0348 1F27 00936 btfss DMODE, D_INFO ; infomation active? 0349 2945 00937 goto norom 00938 034A 0835 00939 movfw CTFLAG ; correct cartridge flag 034B 3906 00940 andlw BS(C_ROM) | BS(C_RAM) ; check known size ROM, SRAM 034C 1D03 00941 btfss STATUS, Z 034D 2A58 00942 goto unknown ; unknown cartridge 00943 034E 3001 00944 movlw 1 ; arg1 given 034F 022B 00945 subwf ARGC, W 0350 1903 00946 btfsc STATUS, Z 0351 2B53 00947 goto up1 00948 0352 2911 00949 goto merror ; argc != [1|3], goto error 00950 0353 1C27 00951 up1 btfss DMODE, D_SRAM ; check DMODE 0354 2B62 00952 goto up3 00953 0355 1A64 00954 up2 btfsc CTYPEB, CT_MBC2 ; check have SRAM or MBC2 0356 2B5A 00955 goto up2a 00956 0357 18E4 00957 btfsc CTYPEB, CT_SRAM 0358 2B5A 00958 goto up2a 00959 0359 2A67 00960 goto nosram 00961 035A 00962 up2a 035A 3009 008A 00963 PAGESEL ram_t ; translare SRAM bank 035C 085F 00964 movfw CSSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 035D 2196 00965 call ram_t 035E 00B3 00966 movwf CUBANK_L 035F 118A 00967 bcf PCLATH, 3 ; reset PCL 0360 01B2 00968 clrf CUBANK_H 0361 2B6F 00969 goto up4 00970 ; all bank down MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 18 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0362 00971 up3 0362 3009 008A 00972 PAGESEL rom_t ; translate ROM bank 0364 1003 00973 bcf STATUS, C 0365 0D60 00974 rlf CRSIZE, W 0366 0084 00975 movwf FSR Message[306]: Crossing page boundary -- ensure page bits are set. 0367 2183 00976 call rom_t 0368 00B2 00977 movwf CUBANK_H 0369 0A04 00978 incf FSR, W 036A 3009 008A 00979 PAGESEL rom_t Message[306]: Crossing page boundary -- ensure page bits are set. 036C 2183 00980 call rom_t 036D 00B3 00981 movwf CUBANK_L 036E 118A 00982 bcf PCLATH, 3 ; reset PCL 00983 036F 01CC 00984 up4 clrf CKSUMH ; clear check sum 0370 01CD 00985 clrf CKSUML 0371 23FA 00986 call Wbegin ; wait the begin 0372 39FF 00987 andlw 0xff 0373 1D03 00988 btfss STATUS, Z 0374 2BD7 00989 goto up12 00990 0375 01B0 00991 clrf GBBANK_H ; set bank 0 0376 01B1 00992 clrf GBBANK_L 0377 1C27 00993 btfss DMODE, D_SRAM ; check DMODE 0378 2B7B 00994 goto up4a 00995 0379 274C 00996 call RAMBank 037A 2B7C 00997 goto up5 00998 037B 272C 00999 up4a call ROMBank 01000 037C 1C27 01001 up5 btfss DMODE, D_SRAM ; bank loop 037D 2B95 01002 goto up6 01003 037E 30A0 01004 movlw 0xa0 ; SRAM mode 037F 00C6 01005 movwf D_ADRH ; addr = 0xa000 to 0xbfff 01006 0380 1E64 01007 btfss CTYPEB, CT_MBC2 ; is MBC2 type? 0381 2B88 01008 goto up5a 01009 0382 30A1 01010 movlw 0xa1 ; MBC2, addr = 0xa000 - 0xa1ff 0383 00C8 01011 movwf E_ADRH 0384 3001 01012 movlw 1 0385 00B3 01013 movwf CUBANK_L ; N of BANK = 1 0386 01B2 01014 clrf CUBANK_H 0387 2BA1 01015 goto up7 01016 0388 3001 01017 up5a movlw 1 0389 025F 01018 subwf CSSIZE, W 038A 1D03 01019 btfss STATUS, Z ; SRAM size is 2KB? 038B 2B92 01020 goto up5b 01021 038C 30A7 01022 movlw 0xa7 ; at SRAM 2KB, - 0xa7ff 038D 00C8 01023 movwf E_ADRH 038E 3001 01024 movlw 1 038F 00B3 01025 movwf CUBANK_L ; N of BANK = 1 0390 01B2 01026 clrf CUBANK_H 0391 2B95 01027 goto up6 01028 0392 30BF 01029 up5b movlw 0xbf ; MBC1 and SRAM not 2KB 0393 00C8 01030 movwf E_ADRH 0394 2BA1 01031 goto up7 01032 0395 3040 01033 up6 movlw 0x40 ; set ROM bank window 0396 00C6 01034 movwf D_ADRH ; addr = 0x4000 to 0x7fff 0397 307F 01035 movlw 0x7f 0398 00C8 01036 movwf E_ADRH 01037 0399 0831 01038 movfw GBBANK_L ; first bank? 039A 1D03 01039 btfss STATUS, Z 039B 2BA1 01040 goto up7 039C 0830 01041 movfw GBBANK_H 039D 1D03 01042 btfss STATUS, Z 039E 2BA1 01043 goto up7 01044 039F 1346 01045 bcf D_ADRH, 6 ; if bank == 0, 03A0 1348 01046 bcf E_ADRH, 6 ; translate 0x0000 - 0x3fff 01047 03A1 01C7 01048 up7 clrf D_ADRL 03A2 30FF 01049 movlw 0xff 03A3 00C9 01050 movwf E_ADRL MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 19 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01051 03A4 2548 01052 call UURecv ; start receive 03A5 39FF 01053 andlw 0xff ; aborted? 03A6 1903 01054 btfsc STATUS, Z 03A7 2BA9 01055 goto up8 01056 03A8 2BD7 01057 goto up12 ; abort exit. 01058 03A9 3001 01059 up8 movlw 1 03AA 07B1 01060 addwf GBBANK_L, F ; window dumped, incriment bank 03AB 1803 01061 btfsc STATUS, C 03AC 0AB0 01062 incf GBBANK_H, F 01063 03AD 0833 01064 movfw CUBANK_L ; compare bank 03AE 0231 01065 subwf GBBANK_L, W ; GB >= CU ? 03AF 1C03 01066 btfss STATUS, C 03B0 2BB5 01067 goto up8b 03B1 0832 01068 movfw CUBANK_H 03B2 0230 01069 subwf GBBANK_H, W 03B3 1803 01070 btfsc STATUS, C 03B4 2BBF 01071 goto up10 ; end of bank 01072 03B5 3008 01073 up8b movlw 0x08 ; continue, print bank meter 03B6 27A1 01074 call PutC 03B7 306F 01075 movlw 'o' 03B8 27A1 01076 call PutC 01077 03B9 1C27 01078 btfss DMODE, D_SRAM 03BA 2BBD 01079 goto up9 01080 03BB 274C 01081 call RAMBank ; SRAM mode, set bank 03BC 2B7C 01082 goto up5 01083 03BD 272C 01084 up9 call ROMBank ; set bank 03BE 2B7C 01085 goto up5 ; next bank 01086 03BF 241A 01087 up10 call Wend ; wait the end 03C0 39FF 01088 andlw 0xff 03C1 1D03 01089 btfss STATUS, Z 03C2 2BD7 01090 goto up12 01091 01092 up11 PRINT done_s 03C3 01A0 M clrf VAR1 03C4 300A 008A M PAGESEL done_s ; loop 03C6 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 03C7 2277 M call done_s 03C8 118A M bcf PCLATH, 3 ; reset PCL 03C9 39FF M andlw 0xff 03CA 1903 M btfsc STATUS, Z 03CB 2BCF M goto $ + 4 03CC 27A1 M call PutC 03CD 0AA0 M incf VAR1, F 03CE 2BC4 M goto $ - 10 03CF 084C 01093 movfw CKSUMH ; print check sum 03D0 2699 01094 call hex2pr 03D1 084D 01095 movfw CKSUML 03D2 2699 01096 call hex2pr 03D3 302C 01097 movlw ',' 03D4 27A1 01098 call PutC 03D5 16A7 01099 bsf DMODE, D_CKSM ; set calc mode 03D6 2A45 01100 goto C_down ; calculate CheckSUM 01101 03D7 01102 cabort 01103 up12 PRINT abort_s ; print abort 03D7 01A0 M clrf VAR1 03D8 300C 008A M PAGESEL abort_s ; loop 03DA 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 03DB 24F1 M call abort_s 03DC 118A M bcf PCLATH, 3 ; reset PCL 03DD 39FF M andlw 0xff 03DE 1903 M btfsc STATUS, Z 03DF 2BE3 M goto $ + 4 03E0 27A1 M call PutC 03E1 0AA0 M incf VAR1, F 03E2 2BD8 M goto $ - 10 03E3 2829 01104 goto mloop1 ; done. 01105 01106 ; absolute dump 03E4 083C 01107 up13 movfw ARG1H 03E5 00C6 01108 movwf D_ADRH ; set start addr MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 20 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 03E6 083D 01109 movfw ARG1L 03E7 00C7 01110 movwf D_ADRL 03E8 083E 01111 movfw ARG2H 03E9 00C8 01112 movwf E_ADRH ; set end addr 03EA 083F 01113 movfw ARG2L 03EB 00C9 01114 movwf E_ADRL 01115 03EC 23FA 01116 call Wbegin ; wait the begin 03ED 39FF 01117 andlw 0xff 03EE 1903 01118 btfsc STATUS, Z ; aborted? 03EF 2BD7 01119 goto up12 01120 03F0 2548 01121 call UURecv ; get uudecode 03F1 39FF 01122 andlw 0xff 03F2 1D03 01123 btfss STATUS, Z ; aborted? 03F3 2BD7 01124 goto up12 01125 03F4 27DF 01126 call PutLF ; line feed 03F5 241A 01127 call Wend ; wait the begin 03F6 39FF 01128 andlw 0xff 03F7 1903 01129 btfsc STATUS, Z ; aborted? 03F8 2BD7 01130 goto up12 01131 03F9 2BC3 01132 goto up11 ; print sum, done 01133 01134 01135 ; wait "begin" 01136 ; 03FA 01137 Wbegin 03FA 1283 01138 BANKSEL 0 01139 PRINT wbeg_s ; print the waiting 03FB 01A0 M clrf VAR1 03FC 300A 008A M PAGESEL wbeg_s ; loop 03FE 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 03FF 225C M call wbeg_s 0400 118A M bcf PCLATH, 3 ; reset PCL 0401 39FF M andlw 0xff 0402 1903 M btfsc STATUS, Z 0403 2C07 M goto $ + 4 0404 27A1 M call PutC 0405 0AA0 M incf VAR1, F 0406 2BFC M goto $ - 10 01140 0407 14A7 01141 bsf DMODE, D_ECHO ; set noecho 0408 27A7 01142 call GetS ; wait "begin" 0409 3CFF 01143 sublw 0xff 040A 1D03 01144 btfss STATUS, Z 040B 2C0E 01145 goto wbeg2 01146 040C 10A7 01147 bcf DMODE, D_ECHO ; echo 040D 34FF 01148 retlw 0xff ; ESC expected, abort 040E 01149 wbeg2 040E 1683 01150 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 040F 0830 01151 movfw LBUF 0410 3C62 01152 sublw 'b' 0411 1D03 01153 btfss STATUS, Z 0412 2BFA 01154 goto Wbegin 01155 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0413 0831 01156 movfw LBUF + 1 0414 3C65 01157 sublw 'e' 0415 1D03 01158 btfss STATUS, Z 0416 2BFA 01159 goto Wbegin 01160 0417 1283 01161 BANKSEL 0 0418 10A7 01162 bcf DMODE, D_ECHO ; echo 0419 3400 01163 retlw 0 01164 01165 01166 ; wait "end" 01167 ; 041A 01168 Wend 041A 1283 01169 BANKSEL 0 01170 PRINT wend_s ; print the waiting 041B 01A0 M clrf VAR1 041C 300A 008A M PAGESEL wend_s ; loop 041E 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 041F 2269 M call wend_s 0420 118A M bcf PCLATH, 3 ; reset PCL MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 21 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0421 39FF M andlw 0xff 0422 1903 M btfsc STATUS, Z 0423 2C27 M goto $ + 4 0424 27A1 M call PutC 0425 0AA0 M incf VAR1, F 0426 2C1C M goto $ - 10 01171 0427 14A7 01172 bsf DMODE, D_ECHO ; set noecho 0428 27A7 01173 call GetS ; wait the end 0429 3CFF 01174 sublw 0xff 042A 1D03 01175 btfss STATUS, Z 042B 2C2E 01176 goto wend2 01177 042C 10A7 01178 bcf DMODE, D_ECHO ; echo 042D 34FF 01179 retlw 0xff ; ESC expected, abort 01180 042E 01181 wend2 042E 1683 01182 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 042F 0830 01183 movfw LBUF 0430 3C65 01184 sublw 'e' 0431 1D03 01185 btfss STATUS, Z 0432 2C1A 01186 goto Wend 01187 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0433 0831 01188 movfw LBUF + 1 0434 3C6E 01189 sublw 'n' 0435 1D03 01190 btfss STATUS, Z 0436 2C1A 01191 goto Wend 01192 0437 1283 01193 BANKSEL 0 0438 10A7 01194 bcf DMODE, D_ECHO ; echo 0439 3400 01195 retlw 0 01196 01197 ; 01198 ; get cartdidge information 01199 ; 043A 3001 01200 ChkCart movlw 0x01 ; check cartridge 043B 00AD 01201 movwf GBADRH 043C 01AE 01202 clrf GBADRL 043D 276C 01203 call GBread 043E 082F 01204 movfw GBDATA 043F 1D03 01205 btfss STATUS, Z ; ROM[0x0100] == 0x00 0440 2C47 01206 goto ginf1 0441 3001 01207 movlw 0x01 0442 00AE 01208 movwf GBADRL 0443 276C 01209 call GBread 0444 082F 01210 movfw GBDATA 0445 3CC3 01211 sublw 0xc3 0446 1D03 01212 btfss STATUS, Z ; ROM[0x0101] == 0xc3 0447 34FF 01213 ginf1 retlw 0xff ; invalid cartridge, return 0x80 01214 0448 3400 01215 retlw 0 01216 01217 ; 01218 ; print unknown 01219 prunknw PRINT unknw_s ; print unknown types 0449 01A0 M clrf VAR1 044A 3009 008A M PAGESEL unknw_s ; loop 044C 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 044D 21A7 M call unknw_s 044E 118A M bcf PCLATH, 3 ; reset PCL 044F 39FF M andlw 0xff 0450 1903 M btfsc STATUS, Z 0451 2C55 M goto $ + 4 0452 27A1 M call PutC 0453 0AA0 M incf VAR1, F 0454 2C4A M goto $ - 10 0455 0008 01220 return 01221 01222 01223 ; 01224 ; "wd" write data 0456 083C 01225 C_wd movfw ARG1H 0457 00AD 01226 movwf GBADRH 0458 083D 01227 movfw ARG1L 0459 00AE 01228 movwf GBADRL 045A 083F 01229 movfw ARG2L 045B 00AF 01230 movwf GBDATA 045C 277D 01231 call GBwrite 01232 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 22 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 045D 2829 01233 goto mloop1 01234 ; 01235 ; "rd" read data 045E 083C 01236 C_read movfw ARG1H 045F 00AD 01237 movwf GBADRH 0460 083D 01238 movfw ARG1L 0461 00AE 01239 movwf GBADRL 0462 276C 01240 call GBread 0463 082F 01241 movfw GBDATA 0464 2699 01242 call hex2pr 0465 27DF 01243 call PutLF 01244 0466 2829 01245 goto mloop1 01246 ; 01247 ; "br" set ROM bank 0467 1E05 01248 C_sbR btfss PORTA, 4 ; LED is active? 0468 2945 01249 goto norom ; print no ROM 01250 0469 083C 01251 movfw ARG1H 046A 00B0 01252 movwf GBBANK_H 046B 083D 01253 movfw ARG1L 046C 00B1 01254 movwf GBBANK_L 046D 272C 01255 call ROMBank 01256 046E 2829 01257 goto mloop1 01258 ; 01259 ; "bs" set SRAM bank 046F 1E05 01260 C_sbS btfss PORTA, 4 ; LED is active? 0470 2945 01261 goto norom ; print no ROM 01262 0471 083D 01263 movfw ARG1L 0472 00B1 01264 movwf GBBANK_L 0473 274C 01265 call RAMBank 01266 0474 2829 01267 goto mloop1 01268 01269 ; 01270 ; "dm" dump memory 0475 1207 01271 C_dump bcf PORTC, P_CTS ; CTS goes low restart flow 0476 3001 01272 movlw 1 ; no given address? 0477 022B 01273 subwf ARGC, W 0478 1D03 01274 btfss STATUS, Z 0479 2C81 01275 goto cdmp0a 01276 047A 084A 01277 movfw DMCURH ; no given 047B 00C6 01278 movwf D_ADRH 047C 00C8 01279 movwf E_ADRH 047D 084B 01280 movfw DMCURL 047E 00C7 01281 movwf D_ADRL 047F 00C9 01282 movwf E_ADRL 0480 2C8B 01283 goto cdmp0b 01284 0481 3002 01285 cdmp0a movlw 2 ; 1 set address ? 0482 022B 01286 subwf ARGC, W 0483 1D03 01287 btfss STATUS, Z 0484 2C97 01288 goto cdmp0c 01289 0485 083C 01290 movfw ARG1H ; 1 args 0486 00C6 01291 movwf D_ADRH 0487 00C8 01292 movwf E_ADRH 0488 083D 01293 movfw ARG1L 0489 00C7 01294 movwf D_ADRL 048A 00C9 01295 movwf E_ADRL 01296 048B 3080 01297 cdmp0b movlw 0x80 ; E_ADR = GBADR + 0x80 048C 07C9 01298 addwf E_ADRL, F 048D 1C03 01299 btfss STATUS, C 048E 2CA3 01300 goto cdmp1 01301 048F 3001 01302 movlw 1 ; carry, E_ADRH++ 0490 07C8 01303 addwf E_ADRH, F 0491 1C03 01304 btfss STATUS, C 0492 2CA3 01305 goto cdmp1 01306 0493 30FF 01307 movlw 0xff ; over 0xffff, set 0xffff 0494 00C9 01308 movwf E_ADRL 0495 00C8 01309 movwf E_ADRH 0496 2CA3 01310 goto cdmp1 01311 0497 3003 01312 cdmp0c movlw 3 ; 2 set address 0498 022B 01313 subwf ARGC, W 0499 1D03 01314 btfss STATUS, Z MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 23 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 049A 2911 01315 goto merror ; error 01316 049B 083C 01317 movfw ARG1H ; start address 049C 00C6 01318 movwf D_ADRH 049D 083D 01319 movfw ARG1L 049E 00C7 01320 movwf D_ADRL 049F 083E 01321 movfw ARG2H ; set end address 04A0 00C8 01322 movwf E_ADRH 04A1 083F 01323 movfw ARG2L 04A2 00C9 01324 movwf E_ADRL 01325 04A3 0846 01326 cdmp1 movfw D_ADRH ; set address 04A4 00AD 01327 movwf GBADRH 04A5 0847 01328 movfw D_ADRL 04A6 00AE 01329 movwf GBADRL 04A7 250E 01330 call Dump16 ; 16byte dump, GBADR += 16 04A8 39FF 01331 andlw 0xff 04A9 1903 01332 btfsc STATUS, Z ; ESC expected, exit 04AA 2CAD 01333 goto cdmp2 01334 04AB 1607 01335 bsf PORTC, P_CTS ; CTS goes high flow stop 04AC 2BD7 01336 goto cabort ; print abort, return 01337 04AD 3010 01338 cdmp2 movlw 16 ; D_ADR += 16 04AE 07C7 01339 addwf D_ADRL, F 04AF 1C03 01340 btfss STATUS, C 04B0 2CB5 01341 goto cdmp2a 01342 04B1 3001 01343 movlw 1 04B2 07C6 01344 addwf D_ADRH, F 04B3 1803 01345 btfsc STATUS, C 04B4 2CC1 01346 goto cdmp3 ; over 0xffff, exit 01347 04B5 0846 01348 cdmp2a movfw D_ADRH ; E_ADR >= D_ADR ? 04B6 0248 01349 subwf E_ADRH, W 04B7 1C03 01350 btfss STATUS, C 04B8 2CC1 01351 goto cdmp3 01352 04B9 1D03 01353 btfss STATUS, Z 04BA 2CA3 01354 goto cdmp1 01355 04BB 0847 01356 movfw D_ADRL 04BC 0249 01357 subwf E_ADRL, W 04BD 1903 01358 btfsc STATUS, Z 04BE 2CC1 01359 goto cdmp3 01360 04BF 1803 01361 btfsc STATUS, C 04C0 2CA3 01362 goto cdmp1 01363 04C1 0846 01364 cdmp3 movfw D_ADRH ; store current address 04C2 00CA 01365 movwf DMCURH 04C3 0847 01366 movfw D_ADRL 04C4 00CB 01367 movwf DMCURL 01368 04C5 1607 01369 bsf PORTC, P_CTS ; CTS goes high flow stop 04C6 2829 01370 goto mloop1 ; return main 01371 01372 01373 ; 01374 ; subroutines 01375 ; 01376 ; 01377 ; 01378 ; calculate CheckSUM, D_ADR to E_ADR 04C7 0848 01379 CalcSUM movfw E_ADRH ; D_ADR > E_ADR? 04C8 00C4 01380 movwf CMP_H 04C9 0847 01381 movfw D_ADRL ; E_ADR - D_ADR 04CA 0249 01382 subwf E_ADRL, W 04CB 1803 01383 btfsc STATUS, C 04CC 2CD2 01384 goto csum1 01385 04CD 3001 01386 movlw 1 ; borrow 04CE 0248 01387 subwf E_ADRH, W 04CF 00C4 01388 movwf CMP_H 04D0 1C03 01389 btfss STATUS, C 04D1 0008 01390 return 01391 04D2 0846 01392 csum1 movfw D_ADRH 04D3 0244 01393 subwf CMP_H, W 04D4 1C03 01394 btfss STATUS, C 04D5 0008 01395 return ; D_ADR > E_ADR 01396 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 24 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 04D6 0846 01397 movfw D_ADRH ; D_ADR =< E_ADR 04D7 00AD 01398 movwf GBADRH 04D8 0847 01399 movfw D_ADRL 04D9 00AE 01400 movwf GBADRL 04DA 276C 01401 call GBread ; read data 04DB 082F 01402 movfw GBDATA 04DC 07CD 01403 addwf CKSUML, F 04DD 1803 01404 btfsc STATUS, C 04DE 0ACC 01405 incf CKSUMH, F 01406 04DF 0846 01407 movfw D_ADRH ; D_ADR == E_ADR? 04E0 0248 01408 subwf E_ADRH, W 04E1 1D03 01409 btfss STATUS, Z 04E2 2CE7 01410 goto csum2 01411 04E3 0847 01412 movfw D_ADRL 04E4 0249 01413 subwf E_ADRL, W 04E5 1903 01414 btfsc STATUS, Z 04E6 0008 01415 return ; same, return 01416 04E7 3001 01417 csum2 movlw 1 ; D_ADR++ 04E8 07C7 01418 addwf D_ADRL, F 04E9 1803 01419 btfsc STATUS, C 04EA 0AC6 01420 incf D_ADRH, F 01421 04EB 2CC7 01422 goto CalcSUM 01423 01424 01425 ; 01426 ; generate filename for download from cartridge 04EC 30A0 01427 GenFN movlw ASCBUF 04ED 0084 01428 movwf FSR 04EE 3008 01429 movlw 8 04EF 00A0 01430 movwf VAR1 04F0 3001 01431 movlw 0x01 04F1 00AD 01432 movwf GBADRH 04F2 3034 01433 movlw 0x34 04F3 00AE 01434 movwf GBADRL 01435 04F4 276C 01436 genf0 call GBread 04F5 0AAE 01437 incf GBADRL, F 01438 04F6 305C 01439 movlw '\\' 04F7 022F 01440 subwf GBDATA, W 04F8 1903 01441 btfsc STATUS, Z 04F9 2D06 01442 goto genf1 01443 04FA 302F 01444 movlw '/' 04FB 022F 01445 subwf GBDATA, W 04FC 1903 01446 btfsc STATUS, Z 04FD 2D06 01447 goto genf1 01448 04FE 3020 01449 movlw ' ' 04FF 022F 01450 subwf GBDATA, W 0500 1903 01451 btfsc STATUS, Z 0501 2D06 01452 goto genf1 01453 0502 302E 01454 movlw '.' 0503 022F 01455 subwf GBDATA, W 0504 1D03 01456 btfss STATUS, Z 0505 2D08 01457 goto genf2 01458 0506 305F 01459 genf1 movlw '_' 0507 2D09 01460 goto genf3 01461 0508 082F 01462 genf2 movfw GBDATA 0509 0080 01463 genf3 movwf INDF 050A 0A84 01464 incf FSR, F 050B 0BA0 01465 decfsz VAR1, F 050C 2CF4 01466 goto genf0 01467 050D 0008 01468 return 01469 ; 01470 ; print dump GBADR to +16 with ASCII 050E 3010 01471 Dump16 movlw 16 050F 00A1 01472 movwf VAR2 0510 30A0 01473 movlw ASCBUF 0511 0084 01474 movwf FSR 01475 0512 082D 01476 movfw GBADRH ; print address 0513 2699 01477 call hex2pr 0514 082E 01478 movfw GBADRL MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 25 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0515 2699 01479 call hex2pr 0516 3020 01480 movlw 0x20 ; two spaces 0517 27A1 01481 call PutC 0518 3020 01482 movlw 0x20 0519 27A1 01483 call PutC 01484 051A 27D9 01485 dmp0 call GetCNP ; get char non blocking 051B 39FF 01486 andlw 0xff 051C 1903 01487 btfsc STATUS, Z 051D 2D21 01488 goto dmp0a 01489 051E 3C1B 01490 sublw 0x1b ; ESC inputed? 051F 1903 01491 btfsc STATUS, Z 0520 34FF 01492 retlw 0xff ; ESC expected, return 0xff 01493 0521 276C 01494 dmp0a call GBread ; read data 0522 082F 01495 movfw GBDATA 0523 2699 01496 call hex2pr ; print data 0524 3020 01497 movlw 0x20 0525 022F 01498 subwf GBDATA, W 0526 1C03 01499 btfss STATUS, C 0527 2D2C 01500 goto dmp1 0528 307E 01501 movlw 0x7e 0529 022F 01502 subwf GBDATA, W 052A 1C03 01503 btfss STATUS, C 052B 2D2E 01504 goto dmp2 052C 302E 01505 dmp1 movlw '.' ; X >= 7f or X < 0x20 052D 2D2F 01506 goto dmp3 052E 082F 01507 dmp2 movfw GBDATA 052F 0080 01508 dmp3 movwf INDF ; store ascii data 0530 0A84 01509 incf FSR, F 01510 0531 3020 01511 movlw 0x20 ; print one space 0532 27A1 01512 call PutC 01513 0533 3001 01514 movlw 1 0534 07AE 01515 addwf GBADRL, F ; GBADRL++ 0535 1C03 01516 btfss STATUS, C 0536 2D39 01517 goto dmp3a 0537 3001 01518 movlw 1 0538 07AD 01519 addwf GBADRH, F 01520 0539 0BA1 01521 dmp3a decfsz VAR2, F 053A 2D1A 01522 goto dmp0 01523 053B 3020 01524 movlw 0x20 ; print one space 053C 27A1 01525 call PutC 053D 3010 01526 movlw 16 ; print ascii chars 053E 00A1 01527 movwf VAR2 053F 30A0 01528 movlw ASCBUF 0540 0084 01529 movwf FSR 01530 0541 0800 01531 dmp4 movfw INDF 0542 27A1 01532 call PutC 0543 0A84 01533 incf FSR, F 0544 0BA1 01534 decfsz VAR2, F 0545 2D41 01535 goto dmp4 01536 0546 27DF 01537 call PutLF ; line feed 0547 3400 01538 retlw 0 01539 01540 ; 01541 ; receive uudecode D_ADR to E_ADR 01542 ; 0548 0847 01543 UURecv movfw D_ADRL ; set top address 0549 00AE 01544 movwf GBADRL 054A 0846 01545 movfw D_ADRH 054B 00AD 01546 movwf GBADRH 054C 01B4 01547 clrf COLUMN ; reset LF counter 054D 3020 01548 movlw ' ' 054E 27A1 01549 call PutC ; print SP for turn chars. 01550 054F 258E 01551 uurec1 call TurnC ; put loading animation 01552 0550 14A7 01553 bsf DMODE, D_ECHO ; noecho 0551 27A7 01554 call GetS ; get 1 line 0552 10A7 01555 bcf DMODE, D_ECHO ; echo 0553 3CFF 01556 sublw 0xff 0554 1903 01557 btfsc STATUS, Z 0555 34FF 01558 retlw 0xff ; ESC expected, abort. return 0xff 01559 0556 30B0 01560 uurec2 movlw LBUF MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 26 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0557 0084 01561 movwf FSR ; get size char 0558 0800 01562 movfw INDF 0559 1903 01563 btfsc STATUS, Z ; if buffer empty, reread 055A 2D4F 01564 goto uurec1 01565 055B 26B7 01566 call UDecChG ; translate 055C 00A2 01567 movwf VAR3 ; byte / line count 055D 39FF 01568 andlw 0xff 055E 1903 01569 btfsc STATUS, Z ; size == 0, end of all? 055F 3400 01570 retlw 0 ; normal exit 01571 0560 30B1 01572 movlw LBUF + 1 ; reset UASCP 0561 00B9 01573 movwf UASCP 01574 0562 26E0 01575 uurec3 call UDec3 ; get 4 char and translate 0563 3CFF 01576 sublw 0xff 0564 1903 01577 btfsc STATUS, Z 0565 2D4F 01578 goto uurec1 ; length != 3, eol expected 01579 0566 3036 01580 uurec5 movlw UUDAT1 0567 0084 01581 movwf FSR ; reset UUDAT index 0568 3003 01582 movlw 3 0569 00A3 01583 movwf VAR4 01584 056A 0800 01585 uurec6 movfw INDF ; memory store loop 056B 00AF 01586 movwf GBDATA 056C 277D 01587 call GBwrite ; store data 01588 056D 0800 01589 movfw INDF 056E 07CD 01590 addwf CKSUML, F ; add check sum 056F 1803 01591 btfsc STATUS, C 0570 0ACC 01592 incf CKSUMH, F 01593 0571 3001 01594 movlw 1 ; addr += 1 0572 07AE 01595 addwf GBADRL, F 0573 1C03 01596 btfss STATUS, C 0574 2D76 01597 goto uurec7 ; non carry 0575 0AAD 01598 incf GBADRH, F 01599 0576 082D 01600 uurec7 movfw GBADRH ; 16bit end address compare 0577 0248 01601 subwf E_ADRH, W 0578 1C03 01602 btfss STATUS, C 0579 3400 01603 retlw 0 ; grater than (GBADR > E_ADR), normal exit 01604 057A 1D03 01605 btfss STATUS, Z 057B 2D84 01606 goto uurec8 ; less than (GBADR < E_ADR) 01607 057C 082E 01608 movfw GBADRL 057D 0249 01609 subwf E_ADRL, W 057E 1C03 01610 btfss STATUS, C 057F 3400 01611 retlw 0 ; grater than, normal exit 01612 0580 3001 01613 movlw 1 0581 02A2 01614 subwf VAR3, F ; byte/line counter -= 1 0582 1903 01615 btfsc STATUS, Z 0583 2D4F 01616 goto uurec1 ; size reached, next line 01617 01618 ; equal or less than 0584 0A84 01619 uurec8 incf FSR, F ; continue store 0585 0BA3 01620 decfsz VAR4, F 0586 2D6A 01621 goto uurec6 ; next byte 01622 0587 3004 01623 uurec9 movlw 4 0588 07B9 01624 addwf UASCP, F ; UASCP += 4 0589 30F0 01625 movlw LBUF + LBUFLEN 058A 0239 01626 subwf UASCP, W 058B 1C03 01627 btfss STATUS, C ; LBUF max reached? 058C 2D62 01628 goto uurec3 ; next char pack 01629 058D 34FF 01630 retlw 0xff ; LBUF overflow, exit 01631 01632 ; 01633 ; 01634 ; loading animation 058E 3008 01635 TurnC movlw 0x08 058F 27A1 01636 call PutC ; print BS 0590 0834 01637 movfw COLUMN 0591 1D03 01638 btfss STATUS, Z 0592 2D96 01639 goto tc1 0593 305C 01640 movlw '\\' ; \ | / - 0594 27A1 01641 call PutC 0595 2DAC 01642 goto tc5 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 27 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01643 0596 0834 01644 tc1 movfw COLUMN 0597 3C01 01645 sublw 1 0598 1D03 01646 btfss STATUS, Z 0599 2D9D 01647 goto tc2 059A 307C 01648 movlw '|' 059B 27A1 01649 call PutC 059C 2DAC 01650 goto tc5 01651 059D 0834 01652 tc2 movfw COLUMN 059E 3C02 01653 sublw 2 059F 1D03 01654 btfss STATUS, Z 05A0 2DA4 01655 goto tc3 05A1 302F 01656 movlw '/' 05A2 27A1 01657 call PutC 05A3 2DAC 01658 goto tc5 01659 05A4 0834 01660 tc3 movfw COLUMN 05A5 3C03 01661 sublw 3 05A6 1D03 01662 btfss STATUS, Z 05A7 2DAA 01663 goto tc4 05A8 302D 01664 movlw '-' 05A9 27A1 01665 call PutC 01666 05AA 01B4 01667 tc4 clrf COLUMN 05AB 0008 01668 return 01669 05AC 0AB4 01670 tc5 incf COLUMN, F 05AD 0008 01671 return 01672 01673 ; 01674 ; dump uuencode D_ADR to E_ADR 01675 ; 05AE 1207 01676 UUDump bcf PORTC, P_CTS ; CTS goes low flow restart 05AF 0847 01677 uud1 movfw D_ADRL ; CMP = E_ADR - D_ADR 05B0 0249 01678 subwf E_ADRL, W ; calc remain char 05B1 00C5 01679 movwf CMP_L 05B2 1803 01680 btfsc STATUS, C 05B3 2DB9 01681 goto uud1a 01682 05B4 3001 01683 movlw 1 05B5 0248 01684 subwf E_ADRH, W 05B6 00C4 01685 movwf CMP_H 05B7 1C03 01686 btfss STATUS, C 05B8 2DF9 01687 goto uud_r0 ; E_ADR < D_ADR 01688 05B9 3001 01689 uud1a movlw 1 ; CMP++ 05BA 07C5 01690 addwf CMP_L, F 05BB 1C03 01691 btfss STATUS, C 05BC 2DBE 01692 goto uud2 01693 05BD 0AC4 01694 incf CMP_H, F 01695 05BE 0846 01696 uud2 movfw D_ADRH ; MSB diff >= 0 05BF 0248 01697 subwf E_ADRH, W 05C0 00C4 01698 movwf CMP_H 05C1 1C03 01699 btfss STATUS, C 05C2 2DF9 01700 goto uud_r0 ; E_ADR < D_ADR 01701 05C3 0844 01702 movfw CMP_H ; remain < 45 ? 05C4 1D03 01703 btfss STATUS, Z 05C5 2DD0 01704 goto uud3 01705 05C6 302D 01706 movlw 45 05C7 0245 01707 subwf CMP_L, W 05C8 1803 01708 btfsc STATUS, C 05C9 2DD0 01709 goto uud3 01710 05CA 0845 01711 movfw CMP_L ; remain less than 45 byte. 05CB 1903 01712 btfsc STATUS, Z 05CC 2DF9 01713 goto uud_r0 ; remain zero 01714 05CD 26AF 01715 call UEncChP 05CE 0845 01716 movfw CMP_L ; column count 05CF 2DD3 01717 goto uud4 01718 05D0 304D 01719 uud3 movlw 'M' ; print line header 05D1 27A1 01720 call PutC ; 15 * 3 byte / line 05D2 302D 01721 movlw 45 ; column count 05D3 00A2 01722 uud4 movwf VAR3 01723 05D4 3036 01724 uud5 movlw UUDAT1 ; reset UUDAT pointer MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 28 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 05D5 0084 01725 movwf FSR 01726 05D6 27D9 01727 uud5b call GetCNP ; get char non blocking 05D7 39FF 01728 andlw 0xff 05D8 1903 01729 btfsc STATUS, Z 05D9 2DDD 01730 goto uud5c 01731 05DA 3C1B 01732 sublw 0x1b ; ESC inputed? 05DB 1903 01733 btfsc STATUS, Z 05DC 2DFB 01734 goto uud_r1 01735 05DD 0846 01736 uud5c movfw D_ADRH ; get ROM data 05DE 00AD 01737 movwf GBADRH 05DF 0847 01738 movfw D_ADRL 05E0 00AE 01739 movwf GBADRL 05E1 276C 01740 call GBread 05E2 082F 01741 movfw GBDATA 05E3 0080 01742 movwf INDF 01743 05E4 07CD 01744 addwf CKSUML, F ; add check sum 05E5 1803 01745 btfsc STATUS, C 05E6 0ACC 01746 incf CKSUMH, F 01747 05E7 3001 01748 movlw 1 ; addr += 1 05E8 07C7 01749 addwf D_ADRL, F 05E9 1C03 01750 btfss STATUS, C 05EA 2DEC 01751 goto uud6 ; non carry 05EB 0AC6 01752 incf D_ADRH, F 01753 05EC 0BA2 01754 uud6 decfsz VAR3, F ; column count-- 05ED 2DF1 01755 goto uud7 ; next char 01756 05EE 26BC 01757 call UEnc3 ; end reached, send chars 05EF 27DF 01758 call PutLF ; line feed 05F0 2DAF 01759 goto uud1 ; continue next line 01760 05F1 3001 01761 uud7 movlw 1 05F2 0784 01762 addwf FSR, F 05F3 3039 01763 movlw UUDAT3 + 1 ; FSR == UUDAT3 + 1? 05F4 0204 01764 subwf FSR, W 05F5 1D03 01765 btfss STATUS, Z 05F6 2DD6 01766 goto uud5b ; continue packing 01767 05F7 26BC 01768 call UEnc3 ; UUDAT full, send 4 chars 05F8 2DD4 01769 goto uud5 ; next char 01770 05F9 01771 uud_r0 05F9 1607 01772 uud9 bsf PORTC, P_CTS ; CTS goes high flow stop 05FA 3400 01773 retlw 0 01774 05FB 1607 01775 uud_r1 bsf PORTC, P_CTS ; CTS goes high flow stop 05FC 34FF 01776 retlw 0xff 01777 01778 01779 ; parse command line 05FD 3001 01780 cmdpar movlw 1 05FE 00AB 01781 movwf ARGC 05FF 30B0 01782 movlw LBUF 0600 00A8 01783 movwf LBUFP ; buffer pointer 0601 0084 01784 movwf FSR ; count argument 01785 0602 0800 01786 cmd1 movfw INDF 0603 1903 01787 btfsc STATUS, Z ; eol? 0604 2E15 01788 goto cmd2 01789 0605 3C20 01790 sublw 0x20 0606 1D03 01791 btfss STATUS, Z 0607 2E0A 01792 goto cmd1b 01793 0608 0A84 01794 incf FSR, F 0609 2E02 01795 goto cmd1 ; skip space char 01796 060A 0800 01797 cmd1b movfw INDF ; char != SP 060B 1903 01798 btfsc STATUS, Z ; end of line? 060C 2E15 01799 goto cmd2 01800 060D 3C20 01801 sublw 0x20 060E 1903 01802 btfsc STATUS, Z 060F 2E12 01803 goto cmd1c 01804 0610 0A84 01805 incf FSR, F ; search end of an argment 0611 2E0A 01806 goto cmd1b MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 29 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 01807 0612 0AAB 01808 cmd1c incf ARGC, F ; incriment argc, next arg 0613 0A84 01809 incf FSR, F ; search end of an argment 0614 2E02 01810 goto cmd1 01811 0615 30B0 01812 cmd2 movlw LBUF ; count done 0616 0084 01813 movwf FSR 0617 0800 01814 movfw INDF 0618 1D03 01815 btfss STATUS, Z ; no agument ? 0619 2E1B 01816 goto cmd3 061A 3400 01817 retlw 0 01818 061B 3004 01819 cmd3 movlw 4 061C 022B 01820 subwf ARGC, W 061D 1803 01821 btfsc STATUS, C ; argc > 3, error 061E 34FF 01822 retlw 0xff 01823 061F 1683 01824 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0620 0830 01825 movfw LBUF ; copy command string 0621 1283 01826 BANKSEL ARG0H 0622 00BA 01827 movwf ARG0H 0623 1683 01828 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0624 0831 01829 movfw LBUF + 1 0625 1283 01830 BANKSEL ARG0L 0626 00BB 01831 movwf ARG0L 0627 1903 01832 btfsc STATUS, Z ; is 2nd char null? 0628 3400 01833 retlw 0 01834 0629 30B2 01835 movlw LBUF + 2 062A 00A8 01836 movwf LBUFP ; buffer pointer 062B 303C 01837 movlw ARG1H 062C 00A9 01838 movwf ARGP ; argument pointer 01839 062D 082B 01840 movfw ARGC ; store ARGC 062E 00AC 01841 movwf ARGCT 01842 062F 01C3 01843 cmd4 clrf ARGT_L 0630 01C2 01844 clrf ARGT_H 0631 0828 01845 movfw LBUFP ; find next argument 0632 0084 01846 movwf FSR ; skip SP char 0633 0800 01847 movfw INDF 0634 1903 01848 btfsc STATUS, Z ; EOL expected, error 0635 34FF 01849 retlw 0xff 01850 0636 3C20 01851 sublw 0x20 0637 1D03 01852 btfss STATUS, Z 0638 2E3B 01853 goto cmd4a 01854 0639 0AA8 01855 incf LBUFP, F 063A 2E2F 01856 goto cmd4 01857 063B 0828 01858 cmd4a movfw LBUFP ; translate 4 digit ascii 063C 0084 01859 movwf FSR 063D 0800 01860 movfw INDF ; INDF = [LBUFP] 063E 1903 01861 btfsc STATUS, Z ; EOL expected? 063F 2E59 01862 goto cmd5 ; parse done 01863 0640 0800 01864 movfw INDF 0641 2666 01865 call atoi 0642 00A5 01866 movwf CONVT1 0643 3CFF 01867 sublw 0xff 0644 1903 01868 btfsc STATUS, Z 0645 34FF 01869 retlw 0xff ; non addressing char excepted 01870 0646 0825 01871 movfw CONVT1 0647 3CFE 01872 sublw 0xfe 0648 1903 01873 btfsc STATUS, Z 0649 2E59 01874 goto cmd5 ; space excepted 01875 01876 064A 1003 01877 bcf STATUS, C 064B 0DC3 01878 rlf ARGT_L, F ; shift left 4 bit 064C 0DC2 01879 rlf ARGT_H, F 064D 0DC3 01880 rlf ARGT_L, F 064E 0DC2 01881 rlf ARGT_H, F 064F 0DC3 01882 rlf ARGT_L, F 0650 0DC2 01883 rlf ARGT_H, F 0651 0DC3 01884 rlf ARGT_L, F 0652 0DC2 01885 rlf ARGT_H, F 0653 30F0 01886 movlw 0xf0 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 30 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0654 05C3 01887 andwf ARGT_L, F 0655 0825 01888 movfw CONVT1 0656 04C3 01889 iorwf ARGT_L, F 0657 0AA8 01890 incf LBUFP, F 0658 2E3B 01891 goto cmd4a 01892 0659 0829 01893 cmd5 movfw ARGP ; SP expected, copy argument 065A 0084 01894 movwf FSR 065B 0842 01895 movfw ARGT_H 065C 0080 01896 movwf INDF 065D 0A84 01897 incf FSR, F 065E 0843 01898 movfw ARGT_L 065F 0080 01899 movwf INDF 01900 0660 0AA8 01901 incf LBUFP, F ; skip space char 0661 3002 01902 movlw 2 0662 07A9 01903 addwf ARGP, F ; incriment argument pointer 01904 0663 0BAC 01905 decfsz ARGCT, F 0664 2E2F 01906 goto cmd4 ; try next argument 01907 0665 3400 01908 retlw 0 ; done parse 01909 01910 ; 01911 ; ASCII to integer(W -> W) 0666 00A5 01912 atoi movwf CONVT1 0667 3030 01913 movlw 0x30 0668 0225 01914 subwf CONVT1, W 0669 1C03 01915 btfss STATUS, C 066A 2E7F 01916 goto atoi1 ; W < 0x30 01917 066B 303A 01918 movlw 0x3a 066C 0225 01919 subwf CONVT1, W 066D 1C03 01920 btfss STATUS, C 066E 2E84 01921 goto atoi2 01922 066F 3041 01923 movlw 0x41 0670 0225 01924 subwf CONVT1, W 0671 1C03 01925 btfss STATUS, C 0672 2E7F 01926 goto atoi1 01927 0673 3047 01928 movlw 0x47 0674 0225 01929 subwf CONVT1, W 0675 1C03 01930 btfss STATUS, C 0676 2E87 01931 goto atoi3 01932 0677 3061 01933 movlw 0x61 0678 0225 01934 subwf CONVT1, W 0679 1C03 01935 btfss STATUS, C 067A 2E7F 01936 goto atoi1 01937 067B 3067 01938 movlw 0x67 067C 0225 01939 subwf CONVT1, W 067D 1C03 01940 btfss STATUS, C 067E 2E87 01941 goto atoi3 01942 067F 0825 01943 atoi1 movfw CONVT1 0680 3C20 01944 sublw 0x20 0681 1903 01945 btfsc STATUS, Z 0682 34FE 01946 retlw 0xfe ; SP 0683 34FF 01947 retlw 0xff ; not [0-9a-zA-Z] 01948 0684 3030 01949 atoi2 movlw 0x30 0685 0225 01950 subwf CONVT1, W ; [0-9] 0686 0008 01951 return 01952 0687 30DF 01953 atoi3 movlw b'11011111' 0688 05A5 01954 andwf CONVT1, F 0689 3037 01955 movlw 0x41 - 10 068A 0225 01956 subwf CONVT1, W ; [a-zA-Z] 068B 0008 01957 return 01958 01959 ; 01960 ;itoa(W) 068C 00A4 01961 itoa movwf VAR5 068D 300F 01962 movlw 0x0f 068E 05A4 01963 andwf VAR5, F 068F 300A 01964 movlw 10 0690 0224 01965 subwf VAR5, W 0691 1803 01966 btfsc STATUS, C 0692 2E96 01967 goto itoa1 0693 3030 01968 movlw 0x30 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 31 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0694 0724 01969 addwf VAR5, W ; 0 - 9 0695 0008 01970 return 01971 0696 3037 01972 itoa1 movlw 0x41 - 10 0697 0724 01973 addwf VAR5, W ; a - f 0698 0008 01974 return 01975 01976 ; 01977 ; print 2 hex(W) 0699 00A5 01978 hex2pr movwf CONVT1 069A 0DA5 01979 rlf CONVT1, F 069B 0DA6 01980 rlf CONVT2, F 069C 0DA5 01981 rlf CONVT1, F 069D 0DA6 01982 rlf CONVT2, F 069E 0DA5 01983 rlf CONVT1, F 069F 0DA6 01984 rlf CONVT2, F 06A0 0DA5 01985 rlf CONVT1, F 06A1 0D26 01986 rlf CONVT2, W 06A2 268C 01987 call itoa 06A3 27A1 01988 call PutC 06A4 0DA5 01989 rlf CONVT1, F 06A5 0DA6 01990 rlf CONVT2, F 06A6 0DA5 01991 rlf CONVT1, F 06A7 0DA6 01992 rlf CONVT2, F 06A8 0DA5 01993 rlf CONVT1, F 06A9 0DA6 01994 rlf CONVT2, F 06AA 0DA5 01995 rlf CONVT1, F 06AB 0D26 01996 rlf CONVT2, W 06AC 268C 01997 call itoa 06AD 27A1 01998 call PutC 06AE 0008 01999 return 02000 02001 ; 02002 ; uuencode 06AF 393F 02003 UEncChP andlw 0x3f ; print UUchar 06B0 1D03 02004 btfss STATUS, Z 06B1 2EB4 02005 goto uenc1 06B2 3060 02006 movlw '`' 06B3 2EB5 02007 goto uenc2 06B4 3E20 02008 uenc1 addlw 0x20 06B5 27A1 02009 uenc2 call PutC 06B6 0008 02010 return 02011 02012 ; 02013 ; uu char decode(W) -> (W) 06B7 00A4 02014 UDecChG movwf VAR5 06B8 3020 02015 movlw 0x20 ; decode char 06B9 0224 02016 subwf VAR5, W 06BA 393F 02017 andlw 0x3f 02018 06BB 0008 02019 return 02020 06BC 0836 02021 UEnc3 movfw UUDAT1 ; 3 byte -> 4 ascii char 06BD 00A0 02022 movwf VAR1 06BE 1003 02023 bcf STATUS, C 06BF 0CA0 02024 rrf VAR1, F 06C0 1003 02025 bcf STATUS, C 06C1 0C20 02026 rrf VAR1, W 06C2 26AF 02027 call UEncChP ; put 1st char 06C3 0836 02028 movfw UUDAT1 06C4 00A0 02029 movwf VAR1 06C5 0837 02030 movfw UUDAT2 06C6 00A1 02031 movwf VAR2 06C7 0CA0 02032 rrf VAR1, F 06C8 0CA1 02033 rrf VAR2, F 06C9 0CA0 02034 rrf VAR1, F 06CA 0CA1 02035 rrf VAR2, F 06CB 0CA1 02036 rrf VAR2, F 06CC 0C21 02037 rrf VAR2, W 06CD 26AF 02038 call UEncChP ; put 2nd char 06CE 0837 02039 movfw UUDAT2 06CF 00A0 02040 movwf VAR1 06D0 0838 02041 movfw UUDAT3 06D1 00A1 02042 movwf VAR2 06D2 0CA0 02043 rrf VAR1, F 06D3 0CA1 02044 rrf VAR2, F 06D4 0CA0 02045 rrf VAR1, F 06D5 0CA1 02046 rrf VAR2, F 06D6 0CA0 02047 rrf VAR1, F 06D7 0CA1 02048 rrf VAR2, F 06D8 0CA0 02049 rrf VAR1, F 06D9 0CA1 02050 rrf VAR2, F MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 32 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 06DA 0CA1 02051 rrf VAR2, F 06DB 0C21 02052 rrf VAR2, W 06DC 26AF 02053 call UEncChP ; put 3rd char 06DD 0838 02054 movfw UUDAT3 06DE 26AF 02055 call UEncChP ; put 4th char 02056 06DF 0008 02057 return 02058 02059 ; 02060 ; decode 4 char, LBUF[UASCP]:4 -> UUDAT, return got length. 02061 ; broken: W, FSR, VAR1, VAR2 06E0 0839 02062 UDec3 movfw UASCP 06E1 0084 02063 movwf FSR 02064 06E2 0800 02065 movfw INDF ; 1st byte 06E3 1903 02066 btfsc STATUS, Z 06E4 34FF 02067 retlw 0xff ; eol reached 02068 06E5 26B7 02069 call UDecChG ; ASCII -> BIN 06E6 00A0 02070 movwf VAR1 06E7 0A84 02071 incf FSR, F 06E8 0800 02072 movfw INDF ; 2nd byte 06E9 1903 02073 btfsc STATUS, Z 06EA 34FF 02074 retlw 0xff ; eol reached 02075 06EB 26B7 02076 call UDecChG 06EC 00A1 02077 movwf VAR2 06ED 0DA1 02078 rlf VAR2, F 06EE 0DA1 02079 rlf VAR2, F 06EF 0DA1 02080 rlf VAR2, F 06F0 0DA0 02081 rlf VAR1, F 06F1 0DA1 02082 rlf VAR2, F 06F2 0D20 02083 rlf VAR1, W 06F3 00B6 02084 movwf UUDAT1 02085 06F4 0800 02086 movfw INDF ; 2nd byte 06F5 26B7 02087 call UDecChG 06F6 00A0 02088 movwf VAR1 06F7 0A84 02089 incf FSR, F 06F8 0800 02090 movfw INDF ; 3rd byte 06F9 1903 02091 btfsc STATUS, Z 06FA 34FF 02092 retlw 0xff ; eol reached 02093 06FB 26B7 02094 call UDecChG 06FC 00A1 02095 movwf VAR2 06FD 0DA1 02096 rlf VAR2, F 06FE 0DA1 02097 rlf VAR2, F 06FF 0DA1 02098 rlf VAR2, F 0700 0DA0 02099 rlf VAR1, F 0701 0DA1 02100 rlf VAR2, F 0702 0DA0 02101 rlf VAR1, F 0703 0DA1 02102 rlf VAR2, F 0704 0DA0 02103 rlf VAR1, F 0705 0DA1 02104 rlf VAR2, F 0706 0D20 02105 rlf VAR1, W 0707 00B7 02106 movwf UUDAT2 02107 0708 0800 02108 movfw INDF ; 3nd byte 0709 26B7 02109 call UDecChG 070A 00A0 02110 movwf VAR1 070B 0A84 02111 incf FSR, F 070C 0800 02112 movfw INDF ; 4th byte 070D 1903 02113 btfsc STATUS, Z 070E 34FF 02114 retlw 0xff ; eol reached 02115 070F 26B7 02116 call UDecChG 0710 00A1 02117 movwf VAR2 0711 0DA1 02118 rlf VAR2, F 0712 0DA1 02119 rlf VAR2, F 0713 0CA0 02120 rrf VAR1, F 0714 0CA1 02121 rrf VAR2, F 0715 0CA0 02122 rrf VAR1, F 0716 0C21 02123 rrf VAR2, W 0717 00B8 02124 movwf UUDAT3 02125 0718 3400 02126 retlw 0 02127 02128 ; MBC activate 0719 01AE 02129 MBCact clrf GBADRL ; enable SRAM 071A 01AD 02130 clrf GBADRH 071B 300A 02131 movlw 0x0a 071C 00AF 02132 movwf GBDATA MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 33 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 071D 277D 02133 call GBwrite 071E 3060 02134 movlw 0x60 ; enable RAM BANK 071F 00AD 02135 movwf GBADRH 0720 3001 02136 movlw 0x01 0721 00AF 02137 movwf GBDATA 0722 277D 02138 call GBwrite 0723 0008 02139 return 02140 02141 ; MBC offline 0724 01AE 02142 MBCoff clrf GBADRL ; disable SRAM 0725 01AD 02143 clrf GBADRH 0726 01AF 02144 clrf GBDATA 0727 277D 02145 call GBwrite 0728 3060 02146 movlw 0x60 ; disable RAM BANK 0729 00AD 02147 movwf GBADRH 072A 277D 02148 call GBwrite 072B 0008 02149 return 02150 02151 ; bank select 072C 01AE 02152 ROMBank clrf GBADRL 072D 3021 02153 movlw 0x21 072E 00AD 02154 movwf GBADRH 072F 0831 02155 movfw GBBANK_L 0730 00AF 02156 movwf GBDATA 0731 277D 02157 call GBwrite 02158 0732 1DE4 02159 btfss CTYPEB, CT_MBC1 ; check MBC1 0733 2F43 02160 goto romb1 02161 0734 3005 02162 movlw CRS_4M + 1 ; if 4MB > ROM size 0735 0260 02163 subwf CRSIZE, W ; for MBC1 + 16,8MB ROM type. 0736 1C03 02164 btfss STATUS, C 0737 2F43 02165 goto romb1 02166 0738 0CAF 02167 rrf GBDATA, F ; translate rombank to rambank 0739 0CAF 02168 rrf GBDATA, F 073A 0CAF 02169 rrf GBDATA, F 073B 0CAF 02170 rrf GBDATA, F 073C 0C2F 02171 rrf GBDATA, W 073D 3903 02172 andlw b'00000011' 073E 00AF 02173 movwf GBDATA 073F 3040 02174 movlw 0x40 0740 00AD 02175 movwf GBADRH 0741 277D 02176 call GBwrite 0742 0008 02177 return 02178 0743 1F64 02179 romb1 btfss CTYPEB, CT_MBC5 ; Check MBC5 0744 0008 02180 return 02181 0745 0830 02182 movfw GBBANK_H ; Bank High Address availabe 0746 3030 02183 movlw 0x30 0747 00AD 02184 movwf GBADRH 0748 0830 02185 movfw GBBANK_H 0749 00AF 02186 movwf GBDATA 074A 277D 02187 call GBwrite 074B 0008 02188 return 02189 02190 074C 01AE 02191 RAMBank clrf GBADRL 074D 3040 02192 movlw 0x40 074E 00AD 02193 movwf GBADRH 074F 0831 02194 movfw GBBANK_L ; RAM bank width is 8bit 0750 00AF 02195 movwf GBDATA 0751 277D 02196 call GBwrite 0752 0008 02197 return 02198 02199 ; set address 0753 1005 02200 SetAdr bcf PORTA, 0 0754 1085 02201 bcf PORTA, 1 0755 1105 02202 bcf PORTA, 2 0756 1185 02203 bcf PORTA, 3 0757 1285 02204 bcf PORTA, 5 0758 0189 02205 clrf PORTE 02206 0759 182D 02207 btfsc GBADRH, 0 075A 1405 02208 bsf PORTA, 0 075B 18AD 02209 btfsc GBADRH, 1 075C 1485 02210 bsf PORTA, 1 075D 192D 02211 btfsc GBADRH, 2 075E 1505 02212 bsf PORTA, 2 075F 19AD 02213 btfsc GBADRH, 3 0760 1585 02214 bsf PORTA, 3 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 34 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0761 1A2D 02215 btfsc GBADRH, 4 0762 1685 02216 bsf PORTA, 5 0763 1AAD 02217 btfsc GBADRH, 5 0764 1409 02218 bsf PORTE, 0 0765 1B2D 02219 btfsc GBADRH, 6 0766 1489 02220 bsf PORTE, 1 0767 1BAD 02221 btfsc GBADRH, 7 0768 1509 02222 bsf PORTE, 2 0769 082E 02223 movfw GBADRL 076A 0088 02224 movwf PORTD 076B 0008 02225 return 02226 02227 ; 02228 ; memory read 076C 2753 02229 GBread call SetAdr ; set address 02230 076D 0197 02231 clrf CCP1CON ; stop PWM 076E 30E0 02232 movlw b'11100000' ; 0xa000 - 0xbfff, MREQ = 0 076F 052D 02233 andwf GBADRH, W 0770 3CA0 02234 sublw b'10100000' 0771 1903 02235 btfsc STATUS, Z 0772 1187 02236 bcf PORTC, P_MREQ ; MREQ = 0 02237 0773 1107 02238 bcf PORTC, P_CLK ; CLK goes low 0774 0000 02239 nop ; wait 544ns(at 14.7456MHz) 0775 0000 02240 nop 0776 0806 02241 movfw PORTB 0777 00AF 02242 movwf GBDATA ; read data 02243 0778 1507 02244 bsf PORTC, P_CLK ; CLK goes high 0779 1587 02245 bsf PORTC, P_MREQ ; MREQ = 1 077A 300C 02246 movlw BS(CCP1M3) | BS(CCP1M2) 077B 0097 02247 movwf CCP1CON ; PWM restart 02248 077C 0008 02249 return 02250 02251 ; 02252 ; memory write 077D 1487 02253 GBwrite bsf PORTC, P_RD ; RD = 1 077E 2753 02254 call SetAdr ; set address 02255 077F 0197 02256 clrf CCP1CON ; stop PWM 0780 30E0 02257 movlw b'11100000' ; 0xa000 - 0xbfff, MREQ = 0 0781 052D 02258 andwf GBADRH, W 0782 3CA0 02259 sublw b'10100000' 0783 1903 02260 btfsc STATUS, Z 0784 1187 02261 bcf PORTC, P_MREQ ; MREQ = 0 02262 0785 1683 02263 bsf STATUS, RP0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0786 0186 02264 clrf TRISB ; change direction output 0787 1283 02265 bcf STATUS, RP0 02266 0788 082F 02267 movfw GBDATA 0789 0086 02268 movwf PORTB ; write data 078A 1107 02269 bcf PORTC, P_CLK ; CLK goes low 078B 1007 02270 bcf PORTC, P_WR ; WE = 0 078C 0000 02271 nop ; wait 544ns(at 14.7456MHz) 078D 0000 02272 nop 078E 1407 02273 AccIdle bsf PORTC, P_WR ; set Idle Access cycle 078F 1507 02274 bsf PORTC, P_CLK ; CLK goes high 0790 1587 02275 bsf PORTC, P_MREQ ; MREQ = 1 0791 1683 02276 bsf STATUS, RP0 0792 30FF 02277 movlw b'11111111' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0793 0086 02278 movwf TRISB ; change direction input 0794 1283 02279 bcf STATUS, RP0 0795 1087 02280 bcf PORTC, P_RD ; RD = 0 0796 300C 02281 movlw BS(CCP1M3) | BS(CCP1M2) 0797 0097 02282 movwf CCP1CON ; PWM restart 02283 0798 0008 02284 return 02285 02286 ; line transmit 0799 30B0 02287 PutS movlw LBUF 079A 0084 02288 movwf FSR 079B 0800 02289 ps1 movfw INDF 079C 1903 02290 btfsc STATUS, Z 079D 0008 02291 return 02292 079E 27A1 02293 call PutC 079F 0A84 02294 incf FSR, F MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 35 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 07A0 2F9B 02295 goto ps1 02296 02297 ; byte transmit(W) 07A1 02298 PutC 02299 ifdef debug 02300 return 02301 endif 02302 07A1 1A87 02303 btfsc PORTC, P_RTS ; check RTS 07A2 2FA1 02304 goto PutC 07A3 1E0C 02305 btfss PIR1, TXIF ; wait buffer empty 07A4 2FA1 02306 goto PutC 07A5 0099 02307 movwf TXREG 07A6 0008 02308 return 02309 ; 02310 ; line receive 02311 ; DMODE.1 == 1 noecho, 0: echo 07A7 02312 GetS 02313 ifdef debug 02314 return 02315 endif 02316 07A7 1207 02317 bcf PORTC, P_CTS ; CTS goes low flow restart 07A8 30B0 02318 movlw LBUF 07A9 0084 02319 movwf FSR 07AA 27D3 02320 gs1 call GetC 07AB 0080 02321 movwf INDF 07AC 3C0D 02322 sublw 0x0d ; CR ? 07AD 1D03 02323 btfss STATUS, Z 07AE 2FB4 02324 goto gs2 02325 07AF 1607 02326 bsf PORTC, P_CTS ; CTS goes high flow stop 07B0 0180 02327 clrf INDF ; clear CR code 07B1 30B0 02328 movlw LBUF 07B2 0204 02329 subwf FSR, W ; return got count 07B3 0008 02330 return 02331 07B4 0800 02332 gs2 movfw INDF 07B5 3C1B 02333 sublw 0x1b ; ESC ? 07B6 1D03 02334 btfss STATUS, Z 07B7 2FBA 02335 goto gs2b 02336 07B8 1607 02337 bsf PORTC, P_CTS ; CTS goes high flow stop 07B9 34FF 02338 retlw 0xff ; return 0xff 02339 07BA 18A7 02340 gs2b btfsc DMODE, D_ECHO ; check echo mode 07BB 2FCE 02341 goto gs4 ; noecho 02342 07BC 0800 02343 movfw INDF 07BD 3C08 02344 sublw 0x08 ; BS ? 07BE 1D03 02345 btfss STATUS, Z 07BF 2FCC 02346 goto gs3 02347 07C0 30B0 02348 movlw LBUF 07C1 0204 02349 subwf FSR, W 07C2 1903 02350 btfsc STATUS, Z 07C3 2FAA 02351 goto gs1 ; can not back 02352 07C4 0384 02353 decf FSR, F ; backspace 07C5 3008 02354 movlw 0x08 07C6 27A1 02355 call PutC ; put BS 07C7 3020 02356 movlw 0x20 07C8 27A1 02357 call PutC ; put SP 07C9 3008 02358 movlw 0x08 07CA 27A1 02359 call PutC ; put BS 07CB 2FAA 02360 goto gs1 02361 07CC 0800 02362 gs3 movfw INDF 07CD 27A1 02363 call PutC ; echo char 02364 07CE 30EF 02365 gs4 movlw LBUF + LBUFLEN - 1 ; buffer max reached? 07CF 0204 02366 subwf FSR, W 07D0 1D03 02367 btfss STATUS, Z 07D1 0A84 02368 incf FSR, F ; incriment buffer 02369 07D2 2FAA 02370 goto gs1 ; buffer max, no incriment 02371 02372 02373 ; byte receive 07D3 02374 GetC 02375 ifdef debug 02376 return MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 36 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02377 endif 02378 07D3 1A87 02379 btfsc PORTC, P_RTS ; check RTS 07D4 2FD3 02380 goto GetC 02381 07D5 1E8C 02382 gc2 btfss PIR1, RCIF ; wait buffer empty 07D6 2FD5 02383 goto gc2 07D7 081A 02384 movfw RCREG 07D8 0008 02385 return 02386 02387 ; byte receive with non polling 07D9 1A87 02388 GetCNP btfsc PORTC, P_RTS ; check RTS 07DA 3400 02389 retlw 0 02390 07DB 1E8C 02391 btfss PIR1, RCIF ; wait buffer empty 07DC 3400 02392 retlw 0 02393 07DD 081A 02394 movfw RCREG 07DE 0008 02395 return 02396 ; 02397 ; print LineFeed 07DF 300D 02398 PutLF movlw 0x0d 07E0 27A1 02399 call PutC 07E1 300A 02400 movlw 0x0a 07E2 27A1 02401 call PutC 07E3 0008 02402 return 02403 02404 ; 02405 ; over PCLATCH fuctions 02406 ; 0800 02407 org (( $ + 0x100 ) & 0x0f00) 02408 0800 3001 02409 GetInfo movlw 0x01 ; get informations 0801 00AD 02410 movwf GBADRH 0802 3034 02411 movlw 0x34 ; set title addr 0803 00AE 02412 movwf GBADRL 0804 304E 02413 movlw CTITLE 0805 0084 02414 movwf FSR 02415 0806 02416 ginf2 0806 3007 008A 02417 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 0808 276C 02418 call GBread ; get title 0809 158A 02419 bsf PCLATH, 3 080A 082F 02420 movfw GBDATA 080B 0080 02421 movwf INDF ; copy title 080C 0A84 02422 incf FSR, F 080D 0AAE 02423 incf GBADRL, F 080E 082E 02424 movfw GBADRL 080F 3C44 02425 sublw 0x44 0810 1D03 02426 btfss STATUS, Z 0811 2806 02427 goto ginf2 02428 0812 304E 02429 movlw 0x4e 0813 00AE 02430 movwf GBADRL 0814 3007 008A 02431 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 0816 276C 02432 call GBread ; get SUM MSB 0817 158A 02433 bsf PCLATH, 3 0818 082F 02434 movfw GBDATA 0819 00E2 02435 movwf CSUM_H 02436 081A 304F 02437 movlw 0x4f 081B 00AE 02438 movwf GBADRL 081C 3007 008A 02439 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 081E 276C 02440 call GBread ; get SUM LSB 081F 158A 02441 bsf PCLATH, 3 0820 082F 02442 movfw GBDATA 0821 00E1 02443 movwf CSUM_L 02444 0822 01E3 02445 clrf CFUNC 0823 3043 02446 movlw 0x43 0824 00AE 02447 movwf GBADRL 0825 3007 008A 02448 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 0827 276C 02449 call GBread ; get CGB flag 0828 158A 02450 bsf PCLATH, 3 0829 082F 02451 movfw GBDATA 082A 3C80 02452 sublw 0x80 082B 1903 02453 btfsc STATUS, Z 082C 1563 02454 bsf CFUNC, CF_COLR ; set CGB flag to CFUNC MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 37 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 02455 082D 3046 02456 movlw 0x46 082E 00AE 02457 movwf GBADRL 082F 3007 008A 02458 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 0831 276C 02459 call GBread ; get CGB flag 0832 158A 02460 bsf PCLATH, 3 0833 082F 02461 movfw GBDATA 0834 3C03 02462 sublw 3 0835 1903 02463 btfsc STATUS, Z 0836 14E3 02464 bsf CFUNC, CF_SUPR 02465 0837 1463 02466 bsf CFUNC, CF_NORM ; alway is standard cartridge 02467 0838 3001 02468 movlw 0x01 ; clear return code 0839 00AD 02469 movwf GBADRH 083A 3047 02470 movlw 0x47 083B 00AE 02471 movwf GBADRL 083C 3007 008A 02472 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 083E 276C 02473 call GBread ; get cartridge type 083F 158A 02474 bsf PCLATH, 3 0840 082F 02475 movfw GBDATA 0841 00DE 02476 movwf CTYPE ; store cartridge type 02477 0842 01A0 02478 clrf VAR1 0843 02479 ginf3 0843 3009 008A 02480 PAGESEL type_t 0845 0820 02481 movfw VAR1 0846 215A 02482 call type_t 0847 0084 02483 movwf FSR 0848 3CFF 02484 sublw 0xff 0849 1903 02485 btfsc STATUS, Z 084A 2859 02486 goto ginf5 ; end of table reached 02487 084B 0AA0 02488 incf VAR1, F 084C 0804 02489 movfw FSR 084D 025E 02490 subwf CTYPE, W 084E 1D03 02491 btfss STATUS, Z 084F 2857 02492 goto ginf4 02493 0850 3009 008A 02494 PAGESEL type_t 0852 0820 02495 movfw VAR1 ; table index found 0853 215A 02496 call type_t 0854 00E4 02497 movwf CTYPEB 0855 0184 02498 clrf FSR ; clear result code 0856 285D 02499 goto ginf6 02500 0857 0AA0 02501 ginf4 incf VAR1, F 0858 2843 02502 goto ginf3 02503 0859 3001 02504 ginf5 movlw BS(C_CAR) 085A 0084 02505 movwf FSR ; unknown type, return C_CAR 085B 300F 02506 movlw BS(CT_ROM) | BS(CT_SRAM) | BS(CT_MBC1) | BS(CT_BATT) 085C 00E4 02507 movwf CTYPEB ; default type is ROM|SRAM|MBC1|BATT 02508 085D 3048 02509 ginf6 movlw 0x48 085E 00AE 02510 movwf GBADRL 085F 3007 008A 02511 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 0861 276C 02512 call GBread ; get cartridge ROM size 0862 158A 02513 bsf PCLATH, 3 0863 082F 02514 movfw GBDATA 0864 00E0 02515 movwf CRSIZE ; store ROM size 0865 3009 02516 movlw ROMMAX + 1 0866 0260 02517 subwf CRSIZE, W 0867 1803 02518 btfsc STATUS, C 0868 1484 02519 bsf FSR, C_ROM ; unknown size, return 2 02520 0869 3049 02521 movlw 0x49 086A 00AE 02522 movwf GBADRL 086B 3007 008A 02523 PAGESEL GBread Message[306]: Crossing page boundary -- ensure page bits are set. 086D 276C 02524 call GBread ; get cartridge SRAM size 086E 158A 02525 bsf PCLATH, 3 086F 082F 02526 movfw GBDATA 0870 00DF 02527 movwf CSSIZE ; store SRAM size 0871 3005 02528 movlw RAMMAX + 1 0872 025F 02529 subwf CSSIZE, W 0873 1803 02530 btfsc STATUS, C 0874 1504 02531 bsf FSR, C_RAM ; unknown size, return 4 02532 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 38 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0875 0804 02533 movfw FSR ; set return code 0876 0008 02534 return 02535 02536 02537 ; string tables 02538 ; 0877 0782 02539 prom_s addwf PCL, F 0878 340D 340A 3467 02540 dt "\r\ngbr>", 0 3462 3472 343E 3400 02541 087F 0782 02542 inf1_s addwf PCL, F 0880 3454 3469 3474 02543 dt "Title: ", 0 346C 3465 343A 3420 3400 0888 0782 02544 inf2_s addwf PCL, F 0889 3420 3454 3479 02545 dt " Type: ", 0 3470 3465 343A 3420 3400 0891 0782 02546 inf3_s addwf PCL, F 0892 3420 3420 3452 02547 dt " ROM: ", 0 344F 344D 343A 3420 3400 089A 0782 02548 inf4_s addwf PCL, F 089B 3420 3453 3452 02549 dt " SRAM: ", 0 3441 344D 343A 3420 3400 08A3 0782 02550 inf5_s addwf PCL, F 08A4 3420 3420 3453 02551 dt " Sum: ", 0 3475 346D 343A 3420 3400 08AC 0782 02552 inf6_s addwf PCL, F 08AD 3420 3446 3475 02553 dt " Func: ", 0 346E 3463 343A 3420 3400 02554 08B5 0782 02555 none_s addwf PCL, F 08B6 346E 346F 346E 02556 dt "none", 0 3465 3400 02557 08BB 0782 02558 func_s addwf PCL, F ; software extention type 08BC 3453 3474 3461 02559 dt "Standard", 0 346E 3464 3461 3472 3464 3400 08C5 3453 3475 3470 02560 dt "SuperGB", 0 ; bit 0 3465 3472 3447 3442 3400 08CD 3443 346F 346C 02561 dt "ColorGB", 0 ; bit 1 346F 3472 3447 3442 3400 08D5 3400 3400 02562 dt 0, 0 08D7 3400 3400 02563 dt 0, 0 08D9 3400 3400 02564 dt 0, 0 08DB 3400 3400 02565 dt 0, 0 08DD 3400 3400 02566 dt 0, 0 02567 08DF 0782 02568 rams_s addwf PCL, F ; c = 2 ^ (2 * (n + 1)) 08E0 346E 346F 346E 02569 dt "none\r\n", 0 3465 340D 340A 3400 08E7 3431 3436 344B 02570 dt "16K\r\n", 0 340D 340A 3400 08ED 3436 3434 344B 02571 dt "64K\r\n", 0 340D 340A 3400 08F3 3432 3435 3436 02572 dt "256K\r\n", 0 344B 340D 340A 3400 08FA 3431 344D 340D 02573 dt "1M\r\n", 0 340A 3400 02574 02575 0900 02576 org (( $ + 0x100 ) & 0x0f00) 02577 0900 0782 02578 roms_s addwf PCL, F ; c = 2 ^ (8 + n) 0901 3432 3435 3436 02579 dt "256K\r\n", 0 344B 340D 340A 3400 0908 3435 3431 3432 02580 dt "512K\r\n", 0 344B 340D 340A 3400 090F 3431 344D 340D 02581 dt "1M\r\n", 0 340A 3400 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 39 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0914 3432 344D 340D 02582 dt "2M\r\n", 0 340A 3400 0919 3434 344D 340D 02583 dt "4M\r\n", 0 340A 3400 091E 3438 344D 340D 02584 dt "8M\r\n", 0 340A 3400 0923 3431 3436 344D 02585 dt "16M\r\n", 0 340D 340A 3400 0929 3433 3432 344D 02586 dt "32M\r\n", 0 340D 340A 3400 092F 3436 3434 344D 02587 dt "64M\r\n", 0 340D 340A 3400 02588 0935 0782 02589 type_s addwf PCL, F 0936 3452 344F 344D 02590 dt "ROM", 0 ; bit 0 3400 093A 3453 3452 3441 02591 dt "SRAM", 0 ; bit 1 344D 3400 093F 3442 3461 3474 02592 dt "Batt", 0 ; bit 2 3474 3400 0944 344D 3442 3443 02593 dt "MBC1", 0 ; bit 3 3431 3400 0949 344D 3442 3443 02594 dt "MBC2", 0 ; bit 4 3432 3400 094E 344D 3442 3443 02595 dt "MBC3", 0 ; bit 5 3433 3400 0953 344D 3442 3443 02596 dt "MBC5", 0 ; bit 6 3435 3400 0958 3400 3400 02597 dt 0, 0 02598 02599 ; cartridge type table 02600 ; cartridge value, flag1, flag2 095A 0782 02601 type_t addwf PCL, F 095B 3400 3401 02602 dt 0x00, BS(CT_ROM) 095D 3401 3409 02603 dt 0x01, BS(CT_ROM) | BS(CT_MBC1) 095F 3402 340B 02604 dt 0x02, BS(CT_ROM) | BS(CT_MBC1) | BS(CT_SRAM) 0961 3403 340F 02605 dt 0x03, BS(CT_ROM) | BS(CT_MBC1) | BS(CT_SRAM) | BS(CT_BATT) 0963 3405 3411 02606 dt 0x05, BS(CT_ROM) | BS(CT_MBC2) 0965 3406 3415 02607 dt 0x06, BS(CT_ROM) | BS(CT_MBC2) | BS(CT_BATT) 0967 3408 3403 02608 dt 0x08, BS(CT_ROM) | BS(CT_SRAM) 0969 3409 3407 02609 dt 0x09, BS(CT_ROM) | BS(CT_SRAM) | BS(CT_BATT) 096B 340F 3425 02610 dt 0x0f, BS(CT_ROM) | BS(CT_MBC3) | BS(CT_BATT) 096D 3410 3427 02611 dt 0x10, BS(CT_ROM) | BS(CT_MBC3) | BS(CT_SRAM) | BS(CT_BATT) 096F 3411 3421 02612 dt 0x11, BS(CT_ROM) | BS(CT_MBC3) 0971 3412 3423 02613 dt 0x12, BS(CT_ROM) | BS(CT_MBC3) | BS(CT_SRAM) 0973 3413 3427 02614 dt 0x13, BS(CT_ROM) | BS(CT_MBC3) | BS(CT_SRAM) | BS(CT_BATT) 0975 3419 3441 02615 dt 0x19, BS(CT_ROM) | BS(CT_MBC5) 0977 341A 3443 02616 dt 0x1a, BS(CT_ROM) | BS(CT_MBC5) | BS(CT_SRAM) 0979 341B 3447 02617 dt 0x1b, BS(CT_ROM) | BS(CT_MBC5) | BS(CT_SRAM) | BS(CT_BATT) 097B 341C 3441 02618 dt 0x1c, BS(CT_ROM) | BS(CT_MBC5) 097D 341D 3443 02619 dt 0x1d, BS(CT_ROM) | BS(CT_MBC5) | BS(CT_SRAM) 097F 341E 3447 02620 dt 0x1e, BS(CT_ROM) | BS(CT_MBC5) | BS(CT_SRAM) | BS(CT_BATT) 0981 34FF 34FF 02621 dt 0xff, 0xff 02622 02623 0983 0782 02624 rom_t addwf PCL, F ; romt => N of bank table 0984 3400 3402 02625 dt 0x00, 0x02 ; 256k 0986 3400 3404 02626 dt 0x00, 0x04 ; 512k 0988 3400 3408 02627 dt 0x00, 0x08 ; 1M 098A 3400 3410 02628 dt 0x00, 0x10 ; 2M 098C 3400 3420 02629 dt 0x00, 0x20 ; 4M 098E 3400 3440 02630 dt 0x00, 0x40 ; 8M 0990 3400 3480 02631 dt 0x00, 0x80 ; 16M 0992 3401 3400 02632 dt 0x01, 0x00 ; 32M 0994 3402 3400 02633 dt 0x02, 0x00 ; 64M 02634 0996 0782 02635 ram_t addwf PCL, F ; ramt => N of bank table 0997 3400 3400 3401 02636 dt 0, 0, 1, 4, 16 3404 3410 02637 099C 0782 02638 only_s addwf PCL, F 099D 344E 346F 3420 02639 dt "No SRAM\r\n", 0 3453 3452 3441 344D 340D 340A 3400 02640 09A7 0782 02641 unknw_s addwf PCL, F 09A8 3455 346E 346B 02642 dt "Unknown cartridge type\r\n", 0 346E 346F 3477 346E 3420 3463 3461 3472 3474 3472 3469 3464 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 40 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 3467 3465 3420 3474 3479 3470 3465 340D 340A 3400 02643 09C1 0782 02644 begin_s addwf PCL, F 09C2 3462 3465 3467 02645 dt "begin 644 ", 0 3469 346E 3420 3436 3434 3434 3420 3400 02646 09CD 0782 02647 partf_s addwf PCL, F 09CE 3461 342E 346F 02648 dt "a.out\r\n", 0 3475 3474 340D 340A 3400 02649 09D6 0782 02650 end_s addwf PCL, F 09D7 3460 340D 340A 02651 dt "`\r\nend\r\n", 0 3465 346E 3464 340D 340A 3400 02652 09E0 0782 02653 err_s addwf PCL, F 09E1 3445 3472 3472 02654 dt "Error, 'h' for help\r\n", 0 346F 3472 342C 3420 3427 3468 3427 3420 3466 346F 3472 3420 3468 3465 346C 3470 340D 340A 3400 02655 02656 0A00 02657 org (( $ + 0x100 ) & 0x0f00) 02658 0A00 0782 02659 ver_s addwf PCL, F 0A01 3447 3442 3420 02660 dt "GB SerialReader V1.1\r\n" 3453 3465 3472 3469 3461 346C 3452 3465 3461 3464 3465 3472 3420 3456 3431 342E 3431 340D 340A 0A17 3443 346F 3470 02661 dt "Copyright(C)1998 By H.Kashima\r\n", 0 3479 3472 3469 3467 3468 3474 3428 3443 3429 3431 3439 3439 3438 3420 3442 3479 3420 3448 342E 344B 3461 3473 3468 3469 346D 3461 340D 340A 3400 02662 0A37 0782 02663 norom_s addwf PCL, F 0A38 3455 346E 346B 02664 dt "Unknown or no cartridge inserted.\r\n", 0 346E 346F 3477 346E 3420 346F 3472 3420 346E 346F 3420 3463 3461 3472 3474 3472 3469 3464 3467 3465 3420 3469 346E 3473 3465 3472 3474 3465 3464 342E 340D 340A 3400 02665 0A5C 0782 02666 wbeg_s addwf PCL, F 0A5D 340D 344C 346F 02667 dt "\rLoading.. ", 0 3461 3464 3469 346E 3467 342E 342E 3420 3400 02668 0A69 0782 02669 wend_s addwf PCL, F 0A6A 340D 3457 3461 02670 dt "\rWaiting end", 0 3469 3474 3469 346E 3467 3420 3465 346E 3464 3400 02671 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 41 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 0A77 0782 02672 done_s addwf PCL, F 0A78 340D 3464 346F 02673 dt "\rdone.", 0x1b, "[K\r\n", 0 346E 3465 342E 341B 345B 344B 340D 340A 3400 02674 0A84 0782 02675 disc_s addwf PCL, F 0A85 340D 340A 3443 02676 dt "\r\nCartridge disabled.\r\n", 0 3461 3472 3474 3472 3469 3464 3467 3465 3420 3464 3469 3473 3461 3462 346C 3465 3464 342E 340D 340A 3400 02677 0A9D 0782 02678 cenab_s addwf PCL, F 0A9E 340D 340A 3443 02679 dt "\r\nCartridge enabled.\r\n", 0 3461 3472 3474 3472 3469 3464 3467 3465 3420 3465 346E 3461 3462 346C 3465 3464 342E 340D 340A 3400 02680 0AB5 0782 02681 ninfo_s addwf PCL, F 0AB6 340D 340A 3449 02682 dt "\r\nInfo-table not found.", 0 346E 3466 346F 342D 3474 3461 3462 346C 3465 3420 346E 346F 3474 3420 3466 346F 3475 346E 3464 342E 3400 02683 02684 0B00 02685 org (( $ + 0x100 ) & 0x0f00) 02686 0B00 0782 02687 help1_s addwf PCL, F 0B01 3443 346F 346D 02688 dt "Commands:\r\n" 346D 3461 346E 3464 3473 343A 340D 340A 0B0C 3420 3468 3409 02689 dt " h\t\t\tHelp\r\n" 3409 3409 3448 3465 346C 3470 340D 340A 0B17 3420 3469 3409 02690 dt " i\t\t\tInfo\r\n" 3409 3409 3449 346E 3466 346F 340D 340A 0B22 3420 3469 3472 02691 dt " ir\t\t\tRefresh Info\r\n" 3409 3409 3409 3452 3465 3466 3472 3465 3473 3468 3420 3449 346E 3466 346F 340D 340A 0B36 3420 3464 3473 02692 dt " ds\t\t\tDownload SRAM by uue\r\n" 3409 3409 3409 3444 346F 3477 346E 346C 346F 3461 3464 3420 3453 3452 3441 344D 3420 3462 3479 3420 3475 3475 3465 340D 340A 0B52 3420 3475 3473 02693 dt " us\t\t\tUpload SRAM by uue\r\n" 3409 3409 3409 3455 3470 346C 346F 3461 3464 3420 3453 3452 3441 344D 3420 3462 3479 3420 3475 3475 3465 340D 340A 0B6C 3420 3462 3472 02694 dt " br BANK\t\tchange ROM Bank\r\n" 3420 3442 3441 344E 344B 3409 3409 3463 3468 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 42 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 3461 346E 3467 3465 3420 3452 344F 344D 3420 3442 3461 346E 346B 340D 340A 0B87 3420 3462 3473 02695 dt " bs BANK\t\tchange SRAM Bank\r\n", 0 3420 3442 3441 344E 344B 3409 3409 3463 3468 3461 346E 3467 3465 3420 3453 3452 3441 344D 3420 3442 3461 346E 346B 340D 340A 3400 02696 02697 0C00 02698 org (( $ + 0x100 ) & 0x0f00) 02699 0C00 0782 02700 help2_s addwf PCL, F 0C01 3420 3472 3464 02701 dt " rd ADDR\t\tRead Data\r\n" 3420 3441 3444 3444 3452 3409 3409 3452 3465 3461 3464 3420 3444 3461 3474 3461 340D 340A 0C16 3420 3477 3464 02702 dt " wd ADDR DATA\t\tWrite Data\r\n" 3420 3441 3444 3444 3452 3420 3444 3441 3454 3441 3409 3409 3457 3472 3469 3474 3465 3420 3444 3461 3474 3461 340D 340A 0C31 3420 3464 346D 02703 dt " dm {SADR} {EADR}\tDump Memory\r\n" 3420 347B 3453 3441 3444 3452 347D 3420 347B 3445 3441 3444 3452 347D 3409 3444 3475 346D 3470 3420 344D 3465 346D 346F 3472 3479 340D 340A 0C50 3420 3464 346C 02704 dt " dl {SADR} {EADR}\tDownLoad by uue\r\n" 3420 347B 3453 3441 3444 3452 347D 3420 347B 3445 3441 3444 3452 347D 3409 3444 346F 3477 346E 344C 346F 3461 3464 3420 3462 3479 3420 3475 3475 3465 340D 340A 0C73 3420 3475 3470 02705 dt " up {SADR} {EADR}\tUPload by uue\r\n" 3420 347B 3453 3441 3444 3452 347D 3420 347B 3445 3441 3444 3452 347D 3409 3455 3450 346C 346F 3461 3464 3420 3462 3479 3420 3475 3475 3465 340D 340A 0C94 3420 3463 3472 02706 dt " cr {SADR} {EADR}\tCalc ROM CheckSUM\r\n" 3420 347B 3453 3441 3444 3452 347D 3420 347B 3445 3441 3444 3452 347D 3409 3443 3461 346C 3463 3420 3452 344F 344D 3420 3443 3468 3465 3463 346B 3453 3455 344D 340D MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 43 gbread21 LOC OBJECT CODE LINE SOURCE TEXT VALUE 340A 0CB9 3420 3463 3473 02707 dt " cs \t\t\tCalc SRAM CheckSUM\r\n" 3420 3409 3409 3409 3443 3461 346C 3463 3420 3453 3452 3441 344D 3420 3443 3468 3465 3463 346B 3453 3455 344D 340D 340A 0CD4 3420 345B 3445 02708 dt " [ESC]\t\t\tDisable cartridge\r\n", 0 3453 3443 345D 3409 3409 3409 3444 3469 3473 3461 3462 346C 3465 3420 3463 3461 3472 3474 3472 3469 3464 3467 3465 340D 340A 3400 02709 0CF1 0782 02710 abort_s addwf PCL, F 0CF2 340D 340A 3461 02711 dt "\r\naborted.\r\n", 0 3462 346F 3472 3474 3465 3464 342E 340D 340A 3400 02712 02713 end MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 44 gbread21 SYMBOL TABLE LABEL VALUE ADCON0 0000001F ADCON1 0000009F ADCS0 00000006 ADCS1 00000007 ADIE 00000006 ADIF 00000006 ADON 00000000 ADRES 0000001E ARG0H 0000003A ARG0L 0000003B ARG1H 0000003C ARG1L 0000003D ARG2H 0000003E ARG2L 0000003F ARG3H 00000040 ARG3L 00000041 ARGC 0000002B ARGCT 0000002C ARGP 00000029 ARGPP 0000002A ARGT_H 00000042 ARGT_L 00000043 ASCBUF 000000A0 AccIdle 0000078E BAUDRATE 115200 BF 00000000 BRGH 00000002 BRGVALUE baud_l( BAUDRATE ) BS ( 1 << x ) C 00000000 CCP1CON 00000017 CCP1IE 00000002 CCP1IF 00000002 CCP1M0 00000000 CCP1M1 00000001 CCP1M2 00000002 CCP1M3 00000003 CCP1X 00000005 CCP1Y 00000004 CCP2CON 0000001D CCP2IE 00000000 CCP2IF 00000000 CCP2M0 00000000 CCP2M1 00000001 CCP2M2 00000002 CCP2M3 00000003 CCP2X 00000005 CCP2Y 00000004 CCPR1H 00000016 CCPR1L 00000015 CCPR2H 0000001C CCPR2L 0000001B CFUNC 00000063 CF_COLR 00000002 CF_NORM 00000000 CF_SUPR 00000001 CHS0 00000003 CHS1 00000004 CHS2 00000005 CKP 00000004 CKSUMH 0000004C CKSUML 0000004D CMP_H 00000044 CMP_L 00000045 COLUMN 00000034 CONVT1 00000025 CONVT2 00000026 CREN 00000004 CRSIZE 00000060 CRS_16M 00000006 CRS_1M 00000002 CRS_256 00000000 CRS_2M 00000003 CRS_32M 00000007 CRS_4M 00000004 CRS_512 00000001 CRS_64M 00000008 CRS_8M 00000005 CSRC 00000007 CSSIZE 0000005F CSUM_H 00000062 CSUM_L 00000061 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 45 gbread21 SYMBOL TABLE LABEL VALUE CTFLAG 00000035 CTITLE 0000004E CTYPE 0000005E CTYPEB 00000064 CT_BATT 00000002 CT_MBC1 00000003 CT_MBC2 00000004 CT_MBC3 00000005 CT_MBC5 00000006 CT_ROM 00000000 CT_SRAM 00000001 CUBANK_H 00000032 CUBANK_L 00000033 C_CAR 00000000 C_RAM 00000002 C_ROM 00000001 C_down 00000245 C_dump 00000475 C_help 0000011E C_info 00000143 C_read 0000045E C_sbR 00000467 C_sbS 0000046F C_up 00000342 C_wd 00000456 CalcSUM 000004C7 ChkCart 0000043A D 00000005 DATA_ADDRESS 00000005 DC 00000001 DMCURH 0000004A DMCURL 0000004B DMODE 00000027 D_A 00000005 D_ACT 00000003 D_ADRH 00000046 D_ADRL 00000047 D_CKSM 00000005 D_ECHO 00000001 D_INFO 00000006 D_MBC2 00000004 D_PROT 00000002 D_SRAM 00000000 Dump16 0000050E E_ADRH 00000048 E_ADRL 00000049 F 00000001 FERR 00000002 FSR 00000004 GBADRH 0000002D GBADRL 0000002E GBBANK_H 00000030 GBBANK_L 00000031 GBDATA 0000002F GBread 0000076C GBwrite 0000077D GIE 00000007 GO 00000002 GO_DONE 00000002 GenFN 000004EC GetC 000007D3 GetCNP 000007D9 GetInfo 00000800 GetS 000007A7 I2C_DATA 00000005 I2C_READ 00000002 I2C_START 00000003 I2C_STOP 00000004 IBF 00000007 IBOV 00000005 INDF 00000000 INTCON 0000000B INTE 00000004 INTEDG 00000006 INTF 00000001 IRP 00000007 LBUF 000000B0 LBUFLEN 64 LBUFP 00000028 MBCact 00000719 MBCoff 00000724 NOT_A 00000005 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 46 gbread21 SYMBOL TABLE LABEL VALUE NOT_ADDRESS 00000005 NOT_BO 00000000 NOT_BOR 00000000 NOT_DONE 00000002 NOT_PD 00000003 NOT_POR 00000001 NOT_RBPU 00000007 NOT_RC8 00000006 NOT_T1SYNC 00000002 NOT_TO 00000004 NOT_TX8 00000006 NOT_W 00000002 NOT_WRITE 00000002 OBF 00000006 OERR 00000001 OPTION_REG 00000081 P 00000004 PCFG0 00000000 PCFG1 00000001 PCFG2 00000002 PCL 00000002 PCLATH 0000000A PCON 0000008E PEIE 00000006 PIE1 0000008C PIE2 0000008D PIR1 0000000C PIR2 0000000D PORTA 00000005 PORTB 00000006 PORTC 00000007 PORTD 00000008 PORTE 00000009 PR2 00000092 PRINT PRINTP PRINTPB PS0 00000000 PS1 00000001 PS2 00000002 PSA 00000003 PSPIE 00000007 PSPIF 00000007 PSPMODE 00000004 P_CLK 00000002 P_CTS 00000004 P_MREQ 00000003 P_RD 00000001 P_RTS 00000005 P_WR 00000000 PutC 000007A1 PutLF 000007DF PutS 00000799 R 00000002 RAMBank 0000074C RAMMAX 4 RBIE 00000003 RBIF 00000000 RC8_9 00000006 RC9 00000006 RCD8 00000000 RCIE 00000005 RCIF 00000005 RCREG 0000001A RCSTA 00000018 READ_WRITE 00000002 ROMBank 0000072C ROMMAX 8 RP0 00000005 RP1 00000006 RTCLK ( XTAL / 4 ) RX9 00000006 RX9D 00000000 R_W 00000002 S 00000003 SPBRG 00000099 SPEN 00000007 SREN 00000005 SSPADD 00000093 SSPBUF 00000013 SSPCON 00000014 SSPEN 00000005 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 47 gbread21 SYMBOL TABLE LABEL VALUE SSPIE 00000003 SSPIF 00000003 SSPM0 00000000 SSPM1 00000001 SSPM2 00000002 SSPM3 00000003 SSPOV 00000006 SSPSTAT 00000094 STATUS 00000003 SYNC 00000004 SetAdr 00000753 T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000010 T1INSYNC 00000002 T1OSCEN 00000003 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000012 TMR0 00000001 TMR1CS 00000001 TMR1H 0000000F TMR1IE 00000000 TMR1IF 00000000 TMR1L 0000000E TMR1ON 00000000 TMR2 00000011 TMR2IE 00000001 TMR2IF 00000001 TMR2ON 00000002 TOUTPS0 00000003 TOUTPS1 00000004 TOUTPS2 00000005 TOUTPS3 00000006 TRISA 00000085 TRISB 00000086 TRISC 00000087 TRISD 00000088 TRISE 00000089 TRISE0 00000000 TRISE1 00000001 TRISE2 00000002 TRMT 00000001 TX8_9 00000006 TX9 00000006 TX9D 00000000 TXD8 00000000 TXEN 00000005 TXIE 00000004 TXIF 00000004 TXREG 00000019 TXSTA 00000098 TurnC 0000058E UA 00000001 UASCP 00000039 UDec3 000006E0 UDecChG 000006B7 UEnc3 000006BC UEncChP 000006AF UUDAT1 00000036 UUDAT2 00000037 UUDAT3 00000038 UUDump 000005AE UURecv 00000548 VAR1 00000020 VAR2 00000021 VAR3 00000022 VAR4 00000023 VAR5 00000024 W 00000000 WCOL 00000007 Wbegin 000003FA Wend 0000041A XTAL 14745600 Z 00000002 _BODEN_OFF 00003FBF _BODEN_ON 00003FFF _CP_50 00002AEF MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 48 gbread21 SYMBOL TABLE LABEL VALUE _CP_75 000015DF _CP_ALL 000000CF _CP_OFF 00003FFF _HS_OSC 00003FFE _LP_OSC 00003FFC _PWRTE_OFF 00003FFF _PWRTE_ON 00003FF7 _RC_OSC 00003FFF _WDT_OFF 00003FFB _WDT_ON 00003FFF _XT_OSC 00003FFD __16C74A 00000001 abort_s 00000CF1 atoi 00000666 atoi1 0000067F atoi2 00000684 atoi3 00000687 baud ( ((10 * XTAL / (16 * X)) + 5) / 10 - 1 ) baud_l ( ((10 * XTAL / (64 * X)) + 5) / 10 - 1 ) begin_s 000009C1 cabort 000003D7 cdmp0a 00000481 cdmp0b 0000048B cdmp0c 00000497 cdmp1 000004A3 cdmp2 000004AD cdmp2a 000004B5 cdmp3 000004C1 cenab_s 00000A9D cmd1 00000602 cmd1b 0000060A cmd1c 00000612 cmd2 00000615 cmd3 0000061B cmd4 0000062F cmd4a 0000063B cmd5 00000659 cmdpar 000005FD csum1 000004D2 csum2 000004E7 disc_s 00000A84 dmp0 0000051A dmp0a 00000521 dmp1 0000052C dmp2 0000052E dmp3 0000052F dmp3a 00000539 dmp4 00000541 done_s 00000A77 down0 0000025A down1 0000027C down3 00000289 down3b 000002A5 down4 000002BA down4b 000002EC down4d 000002F8 down5 000002FE down5a 0000030D down6 00000315 down6a 00000331 down6b 0000033D end_s 000009D6 err_s 000009E0 func_s 000008BB gc2 000007D5 genf0 000004F4 genf1 00000506 genf2 00000508 genf3 00000509 ginf1 00000447 ginf2 00000806 ginf3 00000843 ginf4 00000857 ginf5 00000859 ginf6 0000085D gs1 000007AA gs2 000007B4 gs2b 000007BA gs3 000007CC gs4 000007CE help1_s 00000B00 help2_s 00000C00 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 49 gbread21 SYMBOL TABLE LABEL VALUE hex2pr 00000699 inf1_s 0000087F inf2_s 00000888 inf3_s 00000891 inf4_s 0000089A inf5_s 000008A3 inf6_s 000008AC info1 00000152 info2 00000162 info3 0000016C info3a 00000181 info3b 0000019E info3c 000001B2 info3d 000001CA info3e 000001DE info3f 000001F6 itoa 0000068C itoa1 00000696 main 00000029 merror 00000111 mloop0b 0000003E mloop0c 00000057 mloop0d 00000069 mloop0e 0000006A mloop0f 0000007D mloop1 00000029 mloop1b 00000097 mloop1d 0000009C mloop1e 000000A7 mloop1f 000000B1 mloop2 000000BC mloop2b 000000C9 mloop2c 000000D2 mloop3 000000DB mloop4 00000111 mloop5 000000E8 mloop5b 000000F3 mloop5c 000000FD mloop5d 00000106 ninfo_s 00000AB5 none_s 000008B5 norom 00000145 norom_s 00000A37 nosram 00000267 only_s 0000099C partf_s 000009CD prom_s 00000877 prunknw 00000449 ps1 0000079B ram_t 00000996 rams_s 000008DF rom_t 00000983 romb1 00000743 roms_s 00000900 sram0 0000024E sram1 0000025F sram1b 00000274 sram2 00000291 sram3 00000292 sram3a 000002B3 sram3b 000002B9 sram3c 000002C6 sram3d 000002D0 sram4 000002D3 sram4a 000002E7 sram5 000002DF sram6 000002FC start 00000001 tc1 00000596 tc2 0000059D tc3 000005A4 tc4 000005AA tc5 000005AC type_s 00000935 type_t 0000095A uenc1 000006B4 uenc2 000006B5 unknown 00000258 unknw_s 000009A7 up1 00000353 up10 000003BF up11 000003C3 MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 50 gbread21 SYMBOL TABLE LABEL VALUE up12 000003D7 up13 000003E4 up2 00000355 up2a 0000035A up3 00000362 up4 0000036F up4a 0000037B up5 0000037C up5a 00000388 up5b 00000392 up6 00000395 up7 000003A1 up8 000003A9 up8b 000003B5 up9 000003BD uud1 000005AF uud1a 000005B9 uud2 000005BE uud3 000005D0 uud4 000005D3 uud5 000005D4 uud5b 000005D6 uud5c 000005DD uud6 000005EC uud7 000005F1 uud9 000005F9 uud_r0 000005F9 uud_r1 000005FB uurec1 0000054F uurec2 00000556 uurec3 00000562 uurec5 00000566 uurec6 0000056A uurec7 00000576 uurec8 00000584 uurec9 00000587 ver_s 00000A00 wbeg2 0000040E wbeg_s 00000A5C wend2 0000042E wend_s 00000A69 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0040 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0080 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 00C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0100 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0140 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0180 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 01C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0200 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0240 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0280 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 02C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0300 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0340 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0380 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 03C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0400 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0440 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0480 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 04C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0500 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0540 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0580 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 05C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0600 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0640 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0680 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 06C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0700 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0740 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX MPASM 02.15.06 Intermediate GBREAD21.ASM 11-19-1998 14:48:49 PAGE 51 gbread21 MEMORY USAGE MAP ('X' = Used, '-' = Unused) 0780 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 07C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXX------------ ---------------- 0800 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0840 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0880 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 08C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- 0900 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0940 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0980 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 09C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXX--------- 0A00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0A40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0A80 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0AC0 : XXXXXXXXXXXXXX-- ---------------- ---------------- ---------------- 0B00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0B40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0B80 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXX------------ ---------------- 0C00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0C40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0C80 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0CC0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 3147 Program Memory Words Free: 949 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 63 reported, 0 suppressed