MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 1 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00001 ; 00002 ; gbread2c.asm GB Serial Reader V1.0c 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 ; 00018 ; 00019 ; PIN I/O 00020 ; 00021 ; RA0: a8 out 00022 ; 1: a9 out 00023 ; 2: a10 out 00024 ; 3: a11 out 00025 ; 4: LED out 00026 ; 5: a12 out 00027 ; RB0: d0 in/out 00028 ; 1: d1 in/out 00029 ; 2: d2 in/out 00030 ; 3: d3 in/out 00031 ; 4: d4 in/out 00032 ; 5: d5 in/out 00033 ; 6: d6 in/out 00034 ; 7: d7 in/out 00035 ; RC0: /we out 00036 ; 1: /rd out 00037 ; 2: clk out(PWM1), (/reset testver.) 00038 ; 3: /mreq out 00039 ; 4: DTE.CTS out 00040 ; 5: DTE.RTS in 00041 ; 6: DTE.RxD out(SCI) 00042 ; 7: DTE.TxD in(SCI) 00043 ; RD0: a0 out 00044 ; 1: a1 out 00045 ; 2: a2 out 00046 ; 3: a3 out 00047 ; 4: a4 out 00048 ; 5: a5 out 00049 ; 6: a6 out 00050 ; 7: a7 out 00051 ; RE0: a13 out 00052 ; 1: a14 out 00053 ; 2: a15 out MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 2 LOC OBJECT CODE LINE SOURCE TEXT VALUE 00054 00055 00056 title gbread2c 00057 processor 16c74a Warning[216]: Radix superceded by command line. 00058 radix dec 00059 list c = 110, n = 88 00060 00061 ;#define debug 1 00062 #include 00001 LIST 00002 ; P16C74A.INC Standard Header File, Version 1.01 Microchip Technology, Inc. 00323 LIST 00063 2007 3FF2 00064 __CONFIG _CP_OFF & _WDT_OFF & _HS_OSC & _PWRTE_ON 00065 00066 00067 #define BS(x) ( 1 << x ) ; bit set 00068 00069 ; supplyed clock 00070 #define XTAL 14745600 ; supplied clock 00071 #define RTCLK ( XTAL / 4 ) ; internal timer clock 00072 00073 ; baudrate 00074 #define baud(X) ( ((10 * XTAL / (16 * X)) + 5) / 10 - 1 ) 00075 #define baud_l(X) ( ((10 * XTAL / (64 * X)) + 5) / 10 - 1 ) 00076 00077 #define BAUDRATE 115200 ; comunication speed 00078 #define BRGVALUE baud_l( BAUDRATE ) 00079 00080 ; 00081 ; Receive buffer size 00082 #define LBUFLEN 64 00083 00084 ; 00085 ; maximum of autodetect memory size 00086 #define TYPEMAX 6 00087 #define ROMMAX 5 00088 #define RAMMAX 4 00089 00090 ; bit define 00091 ; 00000000 00092 P_WR equ 0 00000001 00093 P_RD equ 1 00000002 00094 P_CLK equ 2 00000003 00095 P_MREQ equ 3 00000004 00096 P_CTS equ 4 00000005 00097 P_RTS equ 5 00098 00099 ; DMODE flags 00000000 00100 D_SRAM equ 0 ; DL ROM: 0, DL SRAM:1 00000001 00101 D_ECHO equ 1 ; echo: 0, noecho: 1 00000002 00102 D_PROT equ 2 ; SRAM Protect(enable/disable) flag 00000003 00103 D_ACT equ 3 ; Cartridge detect 00000004 00104 D_MBC2 equ 4 ; flag for MBC2 RAM data filter 00000005 00105 D_CKSM equ 5 ; flag for calc CheckSum only 00000006 00106 D_INFO equ 6 ; infomation activated 00107 00108 ; CTFLAG contents 00000000 00109 C_CAR equ 0 ; 1: Unknown Cartridge 00000001 00110 C_ROM equ 1 ; 1: Unknown ROM type 00000002 00111 C_RAM equ 2 ; 1: Unknown SRAM type 00112 00113 00114 ; work area 00115 ; 00116 cblock 0x20 00000020 00117 VAR1, VAR2, VAR3, VAR4, VAR5 00000025 00118 CONVT1, CONVT2, DMODE 00000028 00119 LBUFP, ARGP, ARGPP, ARGC, ARGCT 0000002D 00120 GBADRH, GBADRL, GBDATA, GBBANK 00000031 00121 CUBANK, COLUMN, RAMTYPE, CTFLAG 00000035 00122 UUDAT1, UUDAT2, UUDAT3, UASCP ; binary temp for UUENCODE 00000039 00123 ARG0H, ARG0L, ARG1H, ARG1L ; argument values 0000003D 00124 ARG2H, ARG2L, ARG3H, ARG3L 00000041 00125 ARGT_H, ARGT_L, CMP_H, CMP_L 00000045 00126 D_ADRH, D_ADRL, E_ADRH, E_ADRL ; dump address 00000049 00127 DMCURH, DMCURL ; current dump address 0000004B 00128 CKSUMH, CKSUML 0000004D 00129 CTITLE:16 ; Cartridge Infotable 0000005D 00130 CTYPE, CSSIZE, CRSIZE 00000060 00131 CSUM_L, CSUM_H MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 3 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00132 endc 00133 00134 cblock 0xa0 000000A0 00135 ASCBUF:16 ; ASCII buffer for dump 000000B0 00136 LBUF:64 ; line buffer 64byte 00137 endc 00138 ; 00139 ; macros 00140 PRINT macro ptr ; print ptr string 00141 clrf VAR1 00142 PAGESEL ptr ; loop 00143 movfw VAR1 00144 call ptr 00145 clrf PCLATH ; reset PCL 00146 andlw 0xff 00147 btfsc STATUS, Z 00148 goto $ + 4 00149 call PutC 00150 incf VAR1, F 00151 goto $ - 10 00152 endm 00153 00154 PRINTP macro ptr, skip ; print ptr string table with skip 00155 clrf VAR1 ; pointer 00156 movfw skip 00157 movwf VAR2 ; skip count 00158 00159 PAGESEL ptr ; (l1) 00160 movfw VAR1 00161 call ptr ; string data 00162 clrf PCLATH ; reset PCL 00163 movwf VAR3 00164 incf VAR1, F ; incriment pointer 00165 00166 andlw 0xff 00167 btfss STATUS, Z 00168 goto $ + 6 ; char != null (goto l2) 00169 00170 movfw VAR2 ; char == null 00171 btfsc STATUS, Z 00172 goto $ + 9 ; skip == 0, exit. 00173 00174 decf VAR2, F ; decriment skip count(skip) 00175 goto $ - 14 ; goto l1 00176 00177 movfw VAR2 ; skip == 0 ? (l2) 00178 btfss STATUS, Z 00179 goto $ - 17 ; skip, next char 00180 00181 movfw VAR3 00182 call PutC ; print char 00183 goto $ - 20 ; goto l1 00184 00185 endm 00186 00187 ; 00188 ; reset vector 00189 ; 0000 00190 org 0x000 0000 2801 00191 goto start 00192 00193 ; interrupt vector 00194 ; 00195 ; org 0x004 00196 ; goto int_sub 00197 00198 ; 00199 ; cold start 00200 ; MCU initialize 00201 ; 0001 00202 start 0001 1683 00203 BANKSEL OPTION_REG ; bank select RP0 = 1 00204 0002 3007 00205 movlw BS(PS2) | BS(PS1) | BS(PS0) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0003 0081 00206 movwf OPTION_REG ; pullup PORTB, PS=1:256 00207 0004 30C0 00208 movlw b'11000000' ; initialize I/O port Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0005 0085 00209 movwf TRISA 0006 30FF 00210 movlw b'11111111' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 4 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0007 0086 00211 movwf TRISB 0008 30A0 00212 movlw b'10100000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0009 0087 00213 movwf TRISC 000A 3000 00214 movlw b'00000000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000B 0088 00215 movwf TRISD 000C 3000 00216 movlw b'00000000' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000D 0089 00217 movwf TRISE 00218 000E 3006 00219 movlw BS(PCFG2) | BS(PCFG1) Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 000F 009F 00220 movwf ADCON1 00221 0010 3001 00222 movlw BRGVALUE Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0011 0099 00223 movwf SPBRG 00224 00225 ; movlw BS(TXEN) | BS(BRGH) ; enable transmitter 0012 3020 00226 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 00227 movwf TXSTA 0014 3003 00228 movlw 3 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0015 0092 00229 movwf PR2 ; PWM freq = XTAL / 16 00230 0016 1283 00231 BANKSEL PORTA ; bank select RP0 = 0 0017 0185 00232 clrf PORTA ; initialize output 0018 0186 00233 clrf PORTB 0019 303F 00234 movlw b'00111111' 001A 0087 00235 movwf PORTC 001B 0188 00236 clrf PORTD 001C 0189 00237 clrf PORTE 00238 001D 3090 00239 movlw BS(SPEN) | BS(CREN) ; enable receiver 001E 0098 00240 movwf RCSTA 00241 001F 3002 00242 movlw 2 0020 0095 00243 movwf CCPR1L ; DC1:MSB = 2 0021 300C 00244 movlw BS(CCP1M3) | BS(CCP1M2) ; PWM1 setup, PWM on, DC1:LSB = 0 0022 0097 00245 movwf CCP1CON 00246 0023 3004 00247 movlw b'00000100' ; TMR2 control 0024 0092 00248 movwf T2CON 00249 0025 1207 00250 bcf PORTC, P_CTS ; CTS goes low 0026 01C9 00251 clrf DMCURH ; clear current dump 0027 01CA 00252 clrf DMCURL ; pointer 0028 01A7 00253 clrf DMODE ; clear mode flags 00254 00255 ; 00256 ; main loop 00257 ; 0029 00258 main 00259 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 2000 M call prom_s 002E 018A M clrf PCLATH ; reset PCL 002F 39FF M andlw 0xff 0030 1903 M btfsc STATUS, Z 0031 2835 M goto $ + 4 0032 276A M call PutC 0033 0AA0 M incf VAR1, F 0034 282A M goto $ - 10 0035 10A7 00260 bcf DMODE, D_ECHO ; echo on 0036 2770 00261 call GetS ; get line 0037 00A1 00262 movwf VAR2 ; push return code 00263 0038 1087 00264 bcf PORTC, P_RD ; CR or other, set access readable 0039 0805 00265 movfw PORTA 003A 0084 00266 movwf FSR ; push PORTA 003B 1605 00267 bsf PORTA, 4 ; LED active for read fixed code 00268 003C 23ED 00269 call ChkCart ; check cartridge 003D 00A2 00270 movwf VAR3 ; store condition 00271 003E 1E04 00272 mloop0b btfss FSR, 4 003F 1205 00273 bcf PORTA, 4 ; pull PORTA:4 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 5 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00274 0040 0821 00275 movfw VAR2 ; recall GetS return code 0041 3CFF 00276 sublw 0xff ; ESC inputed? 0042 1D03 00277 btfss STATUS, Z 0043 2857 00278 goto mloop0c 00279 0044 1E05 00280 btfss PORTA, 4 ; ESC inputed, already disactived? 0045 2829 00281 goto mloop1 00282 0046 1327 00283 bcf DMODE, D_INFO ; information disactive 0047 2706 00284 call MBCoff ; MBC disactive 0048 1487 00285 bsf PORTC, P_RD ; set access IDLE 0049 1205 00286 bcf PORTA, 4 ; disactive LED 00287 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 2200 M call disc_s 004F 018A M clrf PCLATH ; reset PCL 0050 39FF M andlw 0xff 0051 1903 M btfsc STATUS, Z 0052 2856 M goto $ + 4 0053 276A M call PutC 0054 0AA0 M incf VAR1, F 0055 284B M goto $ - 10 0056 2829 00288 goto mloop1 00289 0057 1A05 00290 mloop0c btfsc PORTA, 4 ; already actived? 0058 287A 00291 goto mloop0f 00292 0059 1FA2 00293 btfss VAR3, 7 ; check current condition 005A 2869 00294 goto mloop0d ; valid infomation 00295 00296 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 2231 M call ninfo_s 0060 018A M clrf PCLATH ; reset PCL 0061 39FF M andlw 0xff 0062 1903 M btfsc STATUS, Z 0063 2867 M goto $ + 4 0064 276A M call PutC 0065 0AA0 M incf VAR1, F 0066 285C M goto $ - 10 0067 1327 00297 bcf DMODE, D_INFO ; information disactive 0068 286A 00298 goto mloop0e 00299 0069 1727 00300 mloop0d bsf DMODE, D_INFO ; information active 00301 006A 1605 00302 mloop0e bsf PORTA, 4 ; cartridge inserted, LED active 00303 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 2219 M call cenab_s 0070 018A M clrf PCLATH ; reset PCL 0071 39FF M andlw 0xff 0072 1903 M btfsc STATUS, Z 0073 2877 M goto $ + 4 0074 276A M call PutC 0075 0AA0 M incf VAR1, F 0076 286C M goto $ - 10 0077 26FB 00304 call MBCact ; MBC active 0078 23FC 00305 call GetInfo ; get information 0079 00B4 00306 movwf CTFLAG ; store condition 00307 007A 0821 00308 mloop0f movfw VAR2 ; GetS return code 007B 39FF 00309 andlw 0xff 007C 1903 00310 btfsc STATUS, Z 007D 2829 00311 goto mloop1 ; non argument, only CR 00312 007E 27A8 00313 call PutLF ; line feed 007F 25DF 00314 call cmdpar ; parse command 00315 0080 16B9 00316 bsf ARG0H, 5 ; to lower 0081 16BA 00317 bsf ARG0L, 5 00318 0082 3001 00319 movlw 1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 6 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0083 022B 00320 subwf ARGC, W 0084 1D03 00321 btfss STATUS, Z 0085 28B6 00322 goto mloop2 00323 ; 1 arg 0086 0839 00324 movfw ARG0H 0087 3C69 00325 sublw 'i' ; information 0088 1D03 00326 btfss STATUS, Z 0089 2891 00327 goto mloop1b 008A 083A 00328 movfw ARG0L 008B 3C72 00329 sublw 'r' 008C 1D03 00330 btfss STATUS, Z 008D 293D 00331 goto C_info 00332 ; print info with update 008E 23FC 00333 call GetInfo ; get information 008F 00B4 00334 movwf CTFLAG ; store condition 0090 293D 00335 goto C_info 00336 0091 0839 00337 mloop1b movfw ARG0H ; help 0092 3C68 00338 sublw 'h' 0093 1D03 00339 btfss STATUS, Z 0094 2896 00340 goto mloop1d 0095 2918 00341 goto C_help 00342 0096 0839 00343 mloop1d movfw ARG0H ; download all of SRAM 0097 3C64 00344 sublw 'd' 0098 1D03 00345 btfss STATUS, Z 0099 28A1 00346 goto mloop1e 009A 083A 00347 movfw ARG0L 009B 3C73 00348 sublw 's' 009C 1D03 00349 btfss STATUS, Z 009D 28A1 00350 goto mloop1e 00351 009E 1427 00352 bsf DMODE, D_SRAM ; set SRAM mode 009F 12A7 00353 bcf DMODE, D_CKSM ; clear CheckSum flag 00A0 2A11 00354 goto C_down 00355 00A1 0839 00356 mloop1e movfw ARG0H ; download all of SRAM 00A2 3C75 00357 sublw 'u' 00A3 1D03 00358 btfss STATUS, Z 00A4 28AB 00359 goto mloop1f 00A5 083A 00360 movfw ARG0L 00A6 3C73 00361 sublw 's' 00A7 1D03 00362 btfss STATUS, Z 00A8 28AB 00363 goto mloop1f 00A9 1427 00364 bsf DMODE, D_SRAM ; set SRAM mode 00AA 2B02 00365 goto C_up 00366 00AB 0839 00367 mloop1f movfw ARG0H ; calc SRAM CheckSum 00AC 3C63 00368 sublw 'c' 00AD 1D03 00369 btfss STATUS, Z 00AE 28E2 00370 goto mloop5 00AF 083A 00371 movfw ARG0L 00B0 3C73 00372 sublw 's' 00B1 1D03 00373 btfss STATUS, Z 00B2 28E2 00374 goto mloop5 00375 00B3 1427 00376 bsf DMODE, D_SRAM ; set SRAM mode 00B4 16A7 00377 bsf DMODE, D_CKSM ; clear CheckSum flag 00B5 2A11 00378 goto C_down 00379 00B6 3002 00380 mloop2 movlw 2 00B7 022B 00381 subwf ARGC, W 00B8 1D03 00382 btfss STATUS, Z 00B9 28D5 00383 goto mloop3 00384 ; 2 args 00BA 0839 00385 movfw ARG0H ; read 00BB 3C72 00386 sublw 'r' 00BC 1D03 00387 btfss STATUS, Z 00BD 28C3 00388 goto mloop2b 00BE 083A 00389 movfw ARG0L 00BF 3C64 00390 sublw 'd' 00C0 1D03 00391 btfss STATUS, Z 00C1 28C3 00392 goto mloop2b 00C2 2C4A 00393 goto C_read 00394 00C3 0839 00395 mloop2b movfw ARG0H ; select ROM bank 00C4 3C62 00396 sublw 'b' 00C5 1D03 00397 btfss STATUS, Z 00C6 28CC 00398 goto mloop2c 00C7 083A 00399 movfw ARG0L 00C8 3C72 00400 sublw 'r' 00C9 1D03 00401 btfss STATUS, Z MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 7 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00CA 28CC 00402 goto mloop2c 00CB 2C53 00403 goto C_sbR 00404 00CC 0839 00405 mloop2c movfw ARG0H ; select SRAM bank 00CD 3C62 00406 sublw 'b' 00CE 1D03 00407 btfss STATUS, Z 00CF 28E2 00408 goto mloop5 00D0 083A 00409 movfw ARG0L 00D1 3C73 00410 sublw 's' 00D2 1D03 00411 btfss STATUS, Z 00D3 28E2 00412 goto mloop5 00D4 2C59 00413 goto C_sbS 00414 00D5 3003 00415 mloop3 movlw 3 00D6 022B 00416 subwf ARGC, W 00D7 1D03 00417 btfss STATUS, Z 00D8 28E2 00418 goto mloop5 00419 ; 3 args 00D9 0839 00420 movfw ARG0H ; write 00DA 3C77 00421 sublw 'w' 00DB 1D03 00422 btfss STATUS, Z 00DC 28E2 00423 goto mloop5 00DD 083A 00424 movfw ARG0L 00DE 3C64 00425 sublw 'd' 00DF 1D03 00426 btfss STATUS, Z 00E0 28E2 00427 goto mloop5 00E1 2C42 00428 goto C_wd 00429 00430 ; any args 00E2 0839 00431 mloop5 movfw ARG0H ; download 00E3 3C64 00432 sublw 'd' 00E4 1D03 00433 btfss STATUS, Z 00E5 28ED 00434 goto mloop5b 00E6 083A 00435 movfw ARG0L 00E7 3C6C 00436 sublw 'l' 00E8 1D03 00437 btfss STATUS, Z 00E9 28ED 00438 goto mloop5b 00439 00EA 1027 00440 bcf DMODE, D_SRAM ; set ROM mode 00EB 12A7 00441 bcf DMODE, D_CKSM ; clear CheckSum flag 00EC 2A11 00442 goto C_down 00443 00ED 0839 00444 mloop5b movfw ARG0H ; upload 00EE 3C75 00445 sublw 'u' 00EF 1D03 00446 btfss STATUS, Z 00F0 28F7 00447 goto mloop5c 00F1 083A 00448 movfw ARG0L 00F2 3C70 00449 sublw 'p' 00F3 1D03 00450 btfss STATUS, Z 00F4 28F7 00451 goto mloop5c 00F5 1027 00452 bcf DMODE, D_SRAM ; set ROM mode 00F6 2B02 00453 goto C_up 00454 00F7 0839 00455 mloop5c movfw ARG0H ; memory dump 00F8 3C64 00456 sublw 'd' 00F9 1D03 00457 btfss STATUS, Z 00FA 2900 00458 goto mloop5d 00FB 083A 00459 movfw ARG0L 00FC 3C6D 00460 sublw 'm' 00FD 1D03 00461 btfss STATUS, Z 00FE 2900 00462 goto mloop5d 00FF 2C5F 00463 goto C_dump 00464 0100 0839 00465 mloop5d movfw ARG0H ; calc ROM CheckSum 0101 3C63 00466 sublw 'c' 0102 1D03 00467 btfss STATUS, Z 0103 290B 00468 goto mloop4 0104 083A 00469 movfw ARG0L 0105 3C72 00470 sublw 'r' 0106 1D03 00471 btfss STATUS, Z 0107 290B 00472 goto mloop4 00473 0108 1027 00474 bcf DMODE, D_SRAM ; set ROM mode 0109 16A7 00475 bsf DMODE, D_CKSM ; set CheckSum flag 010A 2A11 00476 goto C_down 00477 010B 00478 merror 00479 mloop4 PRINT err_s ; error 010B 01A0 M clrf VAR1 010C 3009 008A M PAGESEL err_s ; loop 010E 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 8 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 010F 2159 M call err_s 0110 018A M clrf PCLATH ; reset PCL 0111 39FF M andlw 0xff 0112 1903 M btfsc STATUS, Z 0113 2917 M goto $ + 4 0114 276A M call PutC 0115 0AA0 M incf VAR1, F 0116 290C M goto $ - 10 0117 2829 00480 goto mloop1 00481 00482 ; 00483 ; command proc. 00484 ; 00485 ; "h" print help 00486 C_help PRINT ver_s ; print version 0118 01A0 M clrf VAR1 0119 3009 008A M PAGESEL ver_s ; loop 011B 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 011C 2170 M call ver_s 011D 018A M clrf PCLATH ; reset PCL 011E 39FF M andlw 0xff 011F 1903 M btfsc STATUS, Z 0120 2924 M goto $ + 4 0121 276A M call PutC 0122 0AA0 M incf VAR1, F 0123 2919 M goto $ - 10 00487 PRINT help1_s ; print help1 0124 01A0 M clrf VAR1 0125 300A 008A M PAGESEL help1_s ; loop 0127 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0128 224A M call help1_s 0129 018A M clrf PCLATH ; reset PCL 012A 39FF M andlw 0xff 012B 1903 M btfsc STATUS, Z 012C 2930 M goto $ + 4 012D 276A M call PutC 012E 0AA0 M incf VAR1, F 012F 2925 M goto $ - 10 00488 PRINT help2_s ; print help2 0130 01A0 M clrf VAR1 0131 300B 008A M PAGESEL help2_s ; loop 0133 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0134 2300 M call help2_s 0135 018A M clrf PCLATH ; reset PCL 0136 39FF M andlw 0xff 0137 1903 M btfsc STATUS, Z 0138 293C M goto $ + 4 0139 276A M call PutC 013A 0AA0 M incf VAR1, F 013B 2931 M goto $ - 10 013C 2829 00489 goto mloop1 00490 ; 00491 ; "i" print cartridge information 013D 1A05 00492 C_info btfsc PORTA, 4 ; LED is active? 013E 294C 00493 goto info1 00494 00495 norom PRINT norom_s ; print no ROM 013F 01A0 M clrf VAR1 0140 3009 008A M PAGESEL norom_s ; loop 0142 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0143 21A8 M call norom_s 0144 018A M clrf PCLATH ; reset PCL 0145 39FF M andlw 0xff 0146 1903 M btfsc STATUS, Z 0147 294B M goto $ + 4 0148 276A M call PutC 0149 0AA0 M incf VAR1, F 014A 2940 M goto $ - 10 014B 2829 00496 goto mloop1 00497 014C 1F27 00498 info1 btfss DMODE, D_INFO ; check information 014D 293F 00499 goto norom 00500 00501 PRINT inf1_s ; print title 014E 01A0 M clrf VAR1 014F 3008 008A M PAGESEL inf1_s ; loop 0151 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 9 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0152 2008 M call inf1_s 0153 018A M clrf PCLATH ; reset PCL 0154 39FF M andlw 0xff 0155 1903 M btfsc STATUS, Z 0156 295A M goto $ + 4 0157 276A M call PutC 0158 0AA0 M incf VAR1, F 0159 294F M goto $ - 10 00502 015A 304D 00503 movlw CTITLE 015B 0084 00504 movwf FSR 015C 0800 00505 info2 movfw INDF ; get title 015D 39FF 00506 andlw 0xff 015E 1903 00507 btfsc STATUS, Z 015F 2966 00508 goto info3 ; expected null char 00509 0160 276A 00510 call PutC ; print title char 0161 0A84 00511 incf FSR, F 0162 0804 00512 movfw FSR 0163 3C5D 00513 sublw CTITLE + 16 0164 1D03 00514 btfss STATUS, Z 0165 295C 00515 goto info2 00516 0166 27A8 00517 info3 call PutLF 00518 PRINT inf2_s 0167 01A0 M clrf VAR1 0168 3008 008A M PAGESEL inf2_s ; loop 016A 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 016B 2011 M call inf2_s 016C 018A M clrf PCLATH ; reset PCL 016D 39FF M andlw 0xff 016E 1903 M btfsc STATUS, Z 016F 2973 M goto $ + 4 0170 276A M call PutC 0171 0AA0 M incf VAR1, F 0172 2968 M goto $ - 10 0173 085D 00519 movfw CTYPE ; print type code 0174 267B 00520 call hex2pr 0175 302C 00521 movlw ',' 0176 276A 00522 call PutC 0177 1C34 00523 btfss CTFLAG, C_CAR ; check known cartridge 0178 297B 00524 goto info3a 0179 2435 00525 call prunknw 017A 2993 00526 goto info3b 00527 info3a PRINTP type_s, CTYPE ; print type 017B 01A0 M clrf VAR1 ; pointer 017C 085D M movfw CTYPE 017D 00A1 M movwf VAR2 ; skip count M 017E 3008 008A M PAGESEL type_s ; (l1) 0180 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0181 2096 M call type_s ; string data 0182 018A M clrf PCLATH ; reset PCL 0183 00A2 M movwf VAR3 0184 0AA0 M incf VAR1, F ; incriment pointer M 0185 39FF M andlw 0xff 0186 1D03 M btfss STATUS, Z 0187 298D M goto $ + 6 ; char != null (goto l2) M 0188 0821 M movfw VAR2 ; char == null 0189 1903 M btfsc STATUS, Z 018A 2993 M goto $ + 9 ; skip == 0, exit. M 018B 03A1 M decf VAR2, F ; decriment skip count(skip) 018C 297E M goto $ - 14 ; goto l1 M 018D 0821 M movfw VAR2 ; skip == 0 ? (l2) 018E 1D03 M btfss STATUS, Z 018F 297E M goto $ - 17 ; skip, next char M 0190 0822 M movfw VAR3 0191 276A M call PutC ; print char 0192 297E M goto $ - 20 ; goto l1 M 00528 00529 info3b PRINT inf3_s 0193 01A0 M clrf VAR1 0194 3008 008A M PAGESEL inf3_s ; loop 0196 0820 M movfw VAR1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 10 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE Message[306]: Crossing page boundary -- ensure page bits are set. 0197 201A M call inf3_s 0198 018A M clrf PCLATH ; reset PCL 0199 39FF M andlw 0xff 019A 1903 M btfsc STATUS, Z 019B 299F M goto $ + 4 019C 276A M call PutC 019D 0AA0 M incf VAR1, F 019E 2994 M goto $ - 10 019F 085F 00530 movfw CRSIZE ; print size code 01A0 267B 00531 call hex2pr 01A1 302C 00532 movlw ',' 01A2 276A 00533 call PutC 01A3 1CB4 00534 btfss CTFLAG, C_ROM ; check known cartridge 01A4 29A7 00535 goto info3c 01A5 2435 00536 call prunknw 01A6 29BF 00537 goto info3d 00538 info3c PRINTP roms_s, CRSIZE ; print ROM size 01A7 01A0 M clrf VAR1 ; pointer 01A8 085F M movfw CRSIZE 01A9 00A1 M movwf VAR2 ; skip count M 01AA 3008 008A M PAGESEL roms_s ; (l1) 01AC 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01AD 2061 M call roms_s ; string data 01AE 018A M clrf PCLATH ; reset PCL 01AF 00A2 M movwf VAR3 01B0 0AA0 M incf VAR1, F ; incriment pointer M 01B1 39FF M andlw 0xff 01B2 1D03 M btfss STATUS, Z 01B3 29B9 M goto $ + 6 ; char != null (goto l2) M 01B4 0821 M movfw VAR2 ; char == null 01B5 1903 M btfsc STATUS, Z 01B6 29BF M goto $ + 9 ; skip == 0, exit. M 01B7 03A1 M decf VAR2, F ; decriment skip count(skip) 01B8 29AA M goto $ - 14 ; goto l1 M 01B9 0821 M movfw VAR2 ; skip == 0 ? (l2) 01BA 1D03 M btfss STATUS, Z 01BB 29AA M goto $ - 17 ; skip, next char M 01BC 0822 M movfw VAR3 01BD 276A M call PutC ; print char 01BE 29AA M goto $ - 20 ; goto l1 M 00539 00540 info3d PRINT inf4_s 01BF 01A0 M clrf VAR1 01C0 3008 008A M PAGESEL inf4_s ; loop 01C2 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01C3 2023 M call inf4_s 01C4 018A M clrf PCLATH ; reset PCL 01C5 39FF M andlw 0xff 01C6 1903 M btfsc STATUS, Z 01C7 29CB M goto $ + 4 01C8 276A M call PutC 01C9 0AA0 M incf VAR1, F 01CA 29C0 M goto $ - 10 01CB 085E 00541 movfw CSSIZE ; print size code 01CC 267B 00542 call hex2pr 01CD 302C 00543 movlw ',' 01CE 276A 00544 call PutC 01CF 1D34 00545 btfss CTFLAG, C_RAM ; check known cartridge 01D0 29D3 00546 goto info3e 01D1 2435 00547 call prunknw 01D2 29EB 00548 goto info3f 00549 info3e PRINTP rams_s, CSSIZE ; print RAM size 01D3 01A0 M clrf VAR1 ; pointer 01D4 085E M movfw CSSIZE 01D5 00A1 M movwf VAR2 ; skip count M 01D6 3008 008A M PAGESEL rams_s ; (l1) 01D8 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01D9 2035 M call rams_s ; string data 01DA 018A M clrf PCLATH ; reset PCL 01DB 00A2 M movwf VAR3 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 11 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 01DC 0AA0 M incf VAR1, F ; incriment pointer M 01DD 39FF M andlw 0xff 01DE 1D03 M btfss STATUS, Z 01DF 29E5 M goto $ + 6 ; char != null (goto l2) M 01E0 0821 M movfw VAR2 ; char == null 01E1 1903 M btfsc STATUS, Z 01E2 29EB M goto $ + 9 ; skip == 0, exit. M 01E3 03A1 M decf VAR2, F ; decriment skip count(skip) 01E4 29D6 M goto $ - 14 ; goto l1 M 01E5 0821 M movfw VAR2 ; skip == 0 ? (l2) 01E6 1D03 M btfss STATUS, Z 01E7 29D6 M goto $ - 17 ; skip, next char M 01E8 0822 M movfw VAR3 01E9 276A M call PutC ; print char 01EA 29D6 M goto $ - 20 ; goto l1 M 00550 00551 info3f PRINT inf5_s 01EB 01A0 M clrf VAR1 01EC 3008 008A M PAGESEL inf5_s ; loop 01EE 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 01EF 202C M call inf5_s 01F0 018A M clrf PCLATH ; reset PCL 01F1 39FF M andlw 0xff 01F2 1903 M btfsc STATUS, Z 01F3 29F7 M goto $ + 4 01F4 276A M call PutC 01F5 0AA0 M incf VAR1, F 01F6 29EC M goto $ - 10 01F7 0861 00552 movfw CSUM_H ; get SUM MSB 01F8 00CB 00553 movwf CKSUMH 01F9 00C3 00554 movwf CMP_H 01FA 267B 00555 call hex2pr 00556 01FB 0860 00557 movfw CSUM_L ; get SUM LSB 01FC 00CC 00558 movwf CKSUML 01FD 00C4 00559 movwf CMP_L 00560 01FE 267B 00561 call hex2pr ; print sum 00562 01FF 3028 00563 movlw '(' ; print calc'ed sum 0200 276A 00564 call PutC 0201 084B 00565 movfw CKSUMH ; sum = sum + 0202 07C4 00566 addwf CMP_L, F ; sum_l + sum_h 0203 1803 00567 btfsc STATUS, C 0204 0AC3 00568 incf CMP_H, F 0205 084C 00569 movfw CKSUML 0206 07C4 00570 addwf CMP_L, F 0207 1803 00571 btfsc STATUS, C 0208 0AC3 00572 incf CMP_H, F 00573 0209 0843 00574 movfw CMP_H 020A 267B 00575 call hex2pr 020B 0844 00576 movfw CMP_L 020C 267B 00577 call hex2pr 020D 3029 00578 movlw ')' 020E 276A 00579 call PutC 020F 27A8 00580 call PutLF 00581 0210 2829 00582 goto mloop1 00583 00584 ; 00585 ; "dl {ADDR} {END}" download with UUENCODE 00586 ; "ds" download SRAM with UUENCODE in case of DMODE:D_SRAM == 1 00587 ; "cr {ADDR} {END}" caluculate ROM checksum DMODE:D_CKSM == 1 00588 ; "cs" caluculate SRAM checksum 0211 1E05 00589 C_down btfss PORTA, 4 ; LED is active? 0212 293F 00590 goto norom ; print no ROM 00591 0213 1F27 00592 btfss DMODE, D_INFO ; infomation active? 0214 293F 00593 goto norom 00594 0215 1EA7 00595 btfss DMODE, D_CKSM 0216 2A1A 00596 goto sram0 00597 0217 01B2 00598 clrf COLUMN ; calculate animation MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 12 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0218 3020 00599 movlw ' ' ; initialize 0219 276A 00600 call PutC 00601 021A 1827 00602 sram0 btfsc DMODE, D_SRAM ; check DMODE 021B 2A2B 00603 goto sram1 00604 021C 3003 00605 movlw 3 ; Check ABS DUMP 021D 022B 00606 subwf ARGC, W 021E 1903 00607 btfsc STATUS, Z 021F 2AD5 00608 goto down6 ; Absolute DUMP 00609 0220 0834 00610 movfw CTFLAG ; correct cartridge flag 0221 3902 00611 andlw BS(C_ROM) ; check known size ROM 0222 1903 00612 btfsc STATUS, Z 0223 2A26 00613 goto down0 00614 0224 2435 00615 unknown call prunknw ; print unknown type 0225 2829 00616 goto mloop1 00617 0226 3001 00618 down0 movlw 1 ; DMODE:0 == 0, download ROM 0227 022B 00619 subwf ARGC, W 0228 1903 00620 btfsc STATUS, Z 0229 2A50 00621 goto down1 022A 290B 00622 goto merror ; ARGC != [1|3], error 00623 022B 0834 00624 sram1 movfw CTFLAG ; correct cartridge flag 022C 3904 00625 andlw BS(C_RAM) ; check known size ROM,SRAM 022D 1D03 00626 btfss STATUS, Z 022E 2A24 00627 goto unknown ; reading with unknown SRAM 00628 022F 3001 00629 movlw 1 0230 00B3 00630 movwf RAMTYPE ; Unknown cartridge has SRAM, default 0231 1823 00631 btfsc VAR4, 0 ; check unknown type for call type_t 0232 2A49 00632 goto sram1b 00633 0233 3009 008A 00634 PAGESEL type_t 0235 085D 00635 movfw CTYPE Message[306]: Crossing page boundary -- ensure page bits are set. 0236 2100 00636 call type_t 0237 118A 00637 bcf PCLATH, 3 ; reset PCL 0238 00B3 00638 movwf RAMTYPE 0239 39FF 00639 andlw 0xff ; Check have SRAM, MBC2 023A 1D03 00640 btfss STATUS, Z 023B 2A49 00641 goto sram1b 00642 00643 nosram PRINT only_s ; haven't SRAM 023C 01A0 M clrf VAR1 023D 3009 008A M PAGESEL only_s ; loop 023F 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0240 2115 M call only_s 0241 018A M clrf PCLATH ; reset PCL 0242 39FF M andlw 0xff 0243 1903 M btfsc STATUS, Z 0244 2A48 M goto $ + 4 0245 276A M call PutC 0246 0AA0 M incf VAR1, F 0247 2A3D M goto $ - 10 0248 2829 00644 goto mloop1 00645 0249 00646 sram1b 0249 3009 008A 00647 PAGESEL ram_t ; translate SRAM bank 024B 085E 00648 movfw CSSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 024C 210F 00649 call ram_t 024D 00B1 00650 movwf CUBANK 024E 118A 00651 bcf PCLATH, 3 ; reset PCL 024F 2A56 00652 goto down3 ; all bank down only at SRAM mode 00653 0250 00654 down1 0250 3009 008A 00655 PAGESEL rom_t ; translate ROM bank 0252 085F 00656 movfw CRSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 0253 2108 00657 call rom_t 0254 00B1 00658 movwf CUBANK 0255 118A 00659 bcf PCLATH, 3 ; reset PCL 00660 0256 01CB 00661 down3 clrf CKSUMH ; clear check sum 0257 01CC 00662 clrf CKSUML 0258 01B0 00663 clrf GBBANK ; set bank 0 0259 1C27 00664 btfss DMODE, D_SRAM ; check DMODE 025A 2A5D 00665 goto sram2 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 13 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00666 025B 2715 00667 call RAMBank ; SRAM mode, reset BANK 025C 2A5E 00668 goto sram3 00669 025D 270E 00670 sram2 call ROMBank ; ROM mode, reset BANK 025E 1AA7 00671 sram3 btfsc DMODE, D_CKSM ; calc only? 025F 2A86 00672 goto down4 ; skip print header 00673 00674 PRINT begin_s ; print header 0260 01A0 M clrf VAR1 0261 3009 008A M PAGESEL begin_s ; loop 0263 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0264 213A M call begin_s 0265 018A M clrf PCLATH ; reset PCL 0266 39FF M andlw 0xff 0267 1903 M btfsc STATUS, Z 0268 2A6C M goto $ + 4 0269 276A M call PutC 026A 0AA0 M incf VAR1, F 026B 2A61 M goto $ - 10 026C 24D6 00675 call GenFN ; generate filename 026D 3008 00676 movlw 8 ; print filename 026E 00A0 00677 movwf VAR1 026F 30A0 00678 movlw ASCBUF 0270 0084 00679 movwf FSR 0271 0800 00680 down3b movfw INDF 0272 276A 00681 call PutC 0273 0A84 00682 incf FSR, F 0274 0BA0 00683 decfsz VAR1, F 0275 2A71 00684 goto down3b 00685 0276 302E 00686 movlw '.' ; add extention 0277 276A 00687 call PutC 00688 0278 1827 00689 btfsc DMODE, D_SRAM 0279 2A7F 00690 goto sram3a 00691 027A 3047 00692 movlw 'G' ; ROM mode 027B 276A 00693 call PutC 027C 3042 00694 movlw 'B' 027D 276A 00695 call PutC 027E 2A85 00696 goto sram3b 00697 027F 3053 00698 sram3a movlw 'S' ; SRAM mode 0280 276A 00699 call PutC 0281 3041 00700 movlw 'A' 0282 276A 00701 call PutC 0283 3056 00702 movlw 'V' 0284 276A 00703 call PutC 00704 0285 27A8 00705 sram3b call PutLF ; line feed 00706 0286 1C27 00707 down4 btfss DMODE, D_SRAM ; bank loop 0287 2A9D 00708 goto sram4 00709 0288 30A0 00710 movlw 0xa0 ; SRAM mode 0289 00C5 00711 movwf D_ADRH ; addr = 0xa000 to 0xbfff 00712 028A 1CB3 00713 btfss RAMTYPE, 1 ; type is MBC2? 028B 2A91 00714 goto sram3c 00715 028C 30A1 00716 movlw 0xa1 ; MBC2, addr = 0xa000 - 0xa1ff 028D 00C7 00717 movwf E_ADRH 028E 3001 00718 movlw 1 028F 00B1 00719 movwf CUBANK ; N of BANK = 1 0290 2AA6 00720 goto sram5 00721 0291 3001 00722 sram3c movlw 1 0292 025E 00723 subwf CSSIZE, W 0293 1D03 00724 btfss STATUS, Z ; SRAM size is 2KB? 0294 2A9A 00725 goto sram3d 00726 0295 30A7 00727 movlw 0xa7 ; at SRAM 2KB, - 0xa7ff 0296 00C7 00728 movwf E_ADRH 0297 3001 00729 movlw 1 0298 00B1 00730 movwf CUBANK ; N of BANK = 1 0299 2AA6 00731 goto sram5 00732 029A 30BF 00733 sram3d movlw 0xbf ; MBC1 and not 2KB SRAM, - 0xbfff 029B 00C7 00734 movwf E_ADRH 029C 2AA6 00735 goto sram5 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 14 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00736 029D 3040 00737 sram4 movlw 0x40 ; set ROM bank window 029E 00C5 00738 movwf D_ADRH ; addr = 0x4000 to 0x7fff 029F 307F 00739 movlw 0x7f 02A0 00C7 00740 movwf E_ADRH 00741 02A1 0830 00742 movfw GBBANK ; first bank? 02A2 1D03 00743 btfss STATUS, Z 02A3 2AA6 00744 goto sram5 00745 02A4 1345 00746 bcf D_ADRH, 6 ; if bank == 0, 02A5 1347 00747 bcf E_ADRH, 6 ; translate 0x0000 - 0x3fff 00748 02A6 01C6 00749 sram5 clrf D_ADRL 02A7 30FF 00750 movlw 0xff 02A8 00C8 00751 movwf E_ADRL 00752 02A9 1EA7 00753 btfss DMODE, D_CKSM ; calc mode? 02AA 2AAE 00754 goto sram4a 00755 02AB 2570 00756 call TurnC ; put loading animation 02AC 24B1 00757 call CalcSUM ; calc SUM(D_ADR to E_ADR) 02AD 2AB3 00758 goto down4b 00759 02AE 2590 00760 sram4a call UUDump ; start dump in UUENCODE 02AF 39FF 00761 andlw 0xff ; aborted? 02B0 1903 00762 btfsc STATUS, Z 02B1 2AB3 00763 goto down4b 00764 02B2 2B8A 00765 goto cabort ; print abort, done 00766 02B3 0AB0 00767 down4b incf GBBANK, F ; window dumped, incriment bank 02B4 0830 00768 movfw GBBANK ; incriment bank 02B5 0231 00769 subwf CUBANK, W 02B6 1903 00770 btfsc STATUS, Z 02B7 2ABE 00771 goto down5 ; end of bank 00772 02B8 1C27 00773 btfss DMODE, D_SRAM 02B9 2ABC 00774 goto sram6 00775 02BA 2715 00776 call RAMBank ; SRAM mode, set bank 02BB 2A86 00777 goto down4 00778 02BC 270E 00779 sram6 call ROMBank ; set bank 02BD 2A86 00780 goto down4 ; next bank 00781 02BE 1AA7 00782 down5 btfsc DMODE, D_CKSM ; check calc only 02BF 2ACD 00783 goto down5a ; skip print tailer 00784 00785 PRINT end_s ; print tailer 02C0 01A0 M clrf VAR1 02C1 3009 008A M PAGESEL end_s ; loop 02C3 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 02C4 214F M call end_s 02C5 018A M clrf PCLATH ; reset PCL 02C6 39FF M andlw 0xff 02C7 1903 M btfsc STATUS, Z 02C8 2ACC M goto $ + 4 02C9 276A M call PutC 02CA 0AA0 M incf VAR1, F 02CB 2AC1 M goto $ - 10 02CC 2829 00786 goto mloop1 ; dump done. 00787 02CD 3008 00788 down5a movlw 0x08 ; delete animation char 02CE 276A 00789 call PutC 02CF 084B 00790 movfw CKSUMH ; print check sum 02D0 267B 00791 call hex2pr 02D1 084C 00792 movfw CKSUML 02D2 267B 00793 call hex2pr 02D3 27A8 00794 call PutLF 02D4 2829 00795 goto mloop1 ; calc done. 00796 02D5 01CC 00797 down6 clrf CKSUML ; absolute dump 02D6 01CB 00798 clrf CKSUMH 02D7 1AA7 00799 btfsc DMODE, D_CKSM 02D8 2AF1 00800 goto down6a 00801 00802 PRINT begin_s ; print header 02D9 01A0 M clrf VAR1 02DA 3009 008A M PAGESEL begin_s ; loop 02DC 0820 M movfw VAR1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 15 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE Message[306]: Crossing page boundary -- ensure page bits are set. 02DD 213A M call begin_s 02DE 018A M clrf PCLATH ; reset PCL 02DF 39FF M andlw 0xff 02E0 1903 M btfsc STATUS, Z 02E1 2AE5 M goto $ + 4 02E2 276A M call PutC 02E3 0AA0 M incf VAR1, F 02E4 2ADA M goto $ - 10 00803 PRINT partf_s ; dummy file name 02E5 01A0 M clrf VAR1 02E6 3009 008A M PAGESEL partf_s ; loop 02E8 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 02E9 2146 M call partf_s 02EA 018A M clrf PCLATH ; reset PCL 02EB 39FF M andlw 0xff 02EC 1903 M btfsc STATUS, Z 02ED 2AF1 M goto $ + 4 02EE 276A M call PutC 02EF 0AA0 M incf VAR1, F 02F0 2AE6 M goto $ - 10 02F1 083B 00804 down6a movfw ARG1H 02F2 00C5 00805 movwf D_ADRH ; set start addr 02F3 083C 00806 movfw ARG1L 02F4 00C6 00807 movwf D_ADRL 02F5 083D 00808 movfw ARG2H 02F6 00C7 00809 movwf E_ADRH ; set end addr 02F7 083E 00810 movfw ARG2L 02F8 00C8 00811 movwf E_ADRL 02F9 1EA7 00812 btfss DMODE, D_CKSM 02FA 2AFD 00813 goto down6b 00814 02FB 24B1 00815 call CalcSUM ; calc checksum 02FC 2ACD 00816 goto down5a ; print sum 00817 02FD 2590 00818 down6b call UUDump 02FE 39FF 00819 andlw 0xff 02FF 1903 00820 btfsc STATUS, Z 0300 2ABE 00821 goto down5 ; print tailer, done 00822 0301 2B8A 00823 goto cabort ; print abort, done 00824 00825 ; 00826 ; "up" upload with UUDECODE 00827 ; "us" upload to SRAM with UUENCODE 0302 1E05 00828 C_up btfss PORTA, 4 ; LED is active? 0303 293F 00829 goto norom ; print no ROM 00830 0304 1F27 00831 btfss DMODE, D_INFO ; infomation active? 0305 293F 00832 goto norom 00833 0306 0834 00834 movfw CTFLAG ; correct cartridge flag 0307 3906 00835 andlw BS(C_ROM) | BS(C_RAM) ; check known size ROM, SRAM 0308 1D03 00836 btfss STATUS, Z 0309 2A24 00837 goto unknown ; unknown cartridge 00838 030A 3001 00839 movlw 1 030B 022B 00840 subwf ARGC, W 030C 1903 00841 btfsc STATUS, Z 030D 2B13 00842 goto up1 00843 030E 3002 00844 movlw 2 030F 022B 00845 subwf ARGC, W 0310 1903 00846 btfsc STATUS, Z 0311 2B97 00847 goto up13 0312 290B 00848 goto merror 00849 0313 1C27 00850 up1 btfss DMODE, D_SRAM ; check DMODE 0314 2B29 00851 goto up3 00852 0315 3001 00853 up2 movlw 1 0316 00B3 00854 movwf RAMTYPE ; unknown cartridge has SRAM, default 0317 1823 00855 btfsc VAR4, 0 ; check unknown type for call type_t 0318 2B22 00856 goto up2a 00857 0319 3009 008A 00858 PAGESEL type_t 031B 085D 00859 movfw CTYPE Message[306]: Crossing page boundary -- ensure page bits are set. 031C 2100 00860 call type_t 031D 118A 00861 bcf PCLATH, 3 ; reset PCL 031E 00B3 00862 movwf RAMTYPE MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 16 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 031F 39FF 00863 andlw 0xff ; Check have SRAM, MBC2 0320 1903 00864 btfsc STATUS, Z 0321 2A3C 00865 goto nosram 00866 0322 00867 up2a 0322 3009 008A 00868 PAGESEL ram_t ; translare SRAM bank 0324 085E 00869 movfw CSSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 0325 210F 00870 call ram_t 0326 00B1 00871 movwf CUBANK 0327 118A 00872 bcf PCLATH, 3 ; reset PCL 0328 2B2F 00873 goto up4 00874 ; all bank down 0329 00875 up3 0329 3009 008A 00876 PAGESEL rom_t ; translate ROM bank 032B 085F 00877 movfw CRSIZE Message[306]: Crossing page boundary -- ensure page bits are set. 032C 2108 00878 call rom_t 032D 00B1 00879 movwf CUBANK 032E 118A 00880 bcf PCLATH, 3 ; reset PCL 00881 032F 01CB 00882 up4 clrf CKSUMH ; clear check sum 0330 01CC 00883 clrf CKSUML 0331 23AD 00884 call Wbegin ; wait the begin 0332 39FF 00885 andlw 0xff 0333 1D03 00886 btfss STATUS, Z 0334 2B8A 00887 goto up12 00888 0335 01B0 00889 clrf GBBANK ; set bank 0 0336 1C27 00890 btfss DMODE, D_SRAM ; check DMODE 0337 2B3A 00891 goto up4a 00892 0338 2715 00893 call RAMBank 0339 2B3B 00894 goto up5 00895 033A 270E 00896 up4a call ROMBank 00897 033B 1C27 00898 up5 btfss DMODE, D_SRAM ; bank loop 033C 2B52 00899 goto up6 00900 033D 30A0 00901 movlw 0xa0 ; SRAM mode 033E 00C5 00902 movwf D_ADRH ; addr = 0xa000 to 0xbfff 00903 033F 1CB3 00904 btfss RAMTYPE, 1 ; type is MBC2? 0340 2B46 00905 goto up5a 00906 0341 30A1 00907 movlw 0xa1 ; MBC2, addr = 0xa000 - 0xa1ff 0342 00C7 00908 movwf E_ADRH 0343 3001 00909 movlw 1 0344 00B1 00910 movwf CUBANK ; N of BANK = 1 0345 2B5B 00911 goto up7 00912 0346 3001 00913 up5a movlw 1 0347 025E 00914 subwf CSSIZE, W 0348 1D03 00915 btfss STATUS, Z ; SRAM size is 2KB? 0349 2B4F 00916 goto up5b 00917 034A 30A7 00918 movlw 0xa7 ; at SRAM 2KB, - 0xa7ff 034B 00C7 00919 movwf E_ADRH 034C 3001 00920 movlw 1 034D 00B1 00921 movwf CUBANK ; N of BANK = 1 034E 2B52 00922 goto up6 00923 034F 30BF 00924 up5b movlw 0xbf ; MBC1 and SRAM not 2KB 0350 00C7 00925 movwf E_ADRH 0351 2B5B 00926 goto up7 00927 0352 3040 00928 up6 movlw 0x40 ; set ROM bank window 0353 00C5 00929 movwf D_ADRH ; addr = 0x4000 to 0x7fff 0354 307F 00930 movlw 0x7f 0355 00C7 00931 movwf E_ADRH 00932 0356 0830 00933 movfw GBBANK ; first bank? 0357 1D03 00934 btfss STATUS, Z 0358 2B5B 00935 goto up7 00936 0359 1345 00937 bcf D_ADRH, 6 ; if bank == 0, 035A 1347 00938 bcf E_ADRH, 6 ; translate 0x0000 - 0x3fff 00939 035B 01C6 00940 up7 clrf D_ADRL 035C 30FF 00941 movlw 0xff 035D 00C8 00942 movwf E_ADRL MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 17 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 00943 035E 252A 00944 call UURecv ; start receive 035F 39FF 00945 andlw 0xff ; aborted? 0360 1903 00946 btfsc STATUS, Z 0361 2B63 00947 goto up8 00948 0362 2B8A 00949 goto up12 ; abort exit. 00950 0363 0AB0 00951 up8 incf GBBANK, F ; window dumped, incriment bank 0364 0830 00952 movfw GBBANK ; incriment bank 0365 0231 00953 subwf CUBANK, W 0366 1903 00954 btfsc STATUS, Z 0367 2B72 00955 goto up10 ; end of bank 00956 0368 3008 00957 movlw 0x08 ; print bank meter 0369 276A 00958 call PutC 036A 306F 00959 movlw 'o' 036B 276A 00960 call PutC 00961 036C 1C27 00962 btfss DMODE, D_SRAM 036D 2B70 00963 goto up9 00964 036E 2715 00965 call RAMBank ; SRAM mode, set bank 036F 2B3B 00966 goto up5 00967 0370 270E 00968 up9 call ROMBank ; set bank 0371 2B3B 00969 goto up5 ; next bank 00970 0372 23CD 00971 up10 call Wend ; wait the end 0373 39FF 00972 andlw 0xff 0374 1D03 00973 btfss STATUS, Z 0375 2B8A 00974 goto up12 00975 00976 up11 PRINT done_s 0376 01A0 M clrf VAR1 0377 3009 008A M PAGESEL done_s ; loop 0379 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 037A 21E8 M call done_s 037B 018A M clrf PCLATH ; reset PCL 037C 39FF M andlw 0xff 037D 1903 M btfsc STATUS, Z 037E 2B82 M goto $ + 4 037F 276A M call PutC 0380 0AA0 M incf VAR1, F 0381 2B77 M goto $ - 10 0382 084B 00977 movfw CKSUMH ; print check sum 0383 267B 00978 call hex2pr 0384 084C 00979 movfw CKSUML 0385 267B 00980 call hex2pr 0386 302C 00981 movlw ',' 0387 276A 00982 call PutC 0388 16A7 00983 bsf DMODE, D_CKSM ; set calc mode 0389 2A11 00984 goto C_down ; calculate CheckSUM 00985 038A 00986 cabort 00987 up12 PRINT abort_s ; print abort 038A 01A0 M clrf VAR1 038B 300B 008A M PAGESEL abort_s ; loop 038D 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 038E 23F1 M call abort_s 038F 018A M clrf PCLATH ; reset PCL 0390 39FF M andlw 0xff 0391 1903 M btfsc STATUS, Z 0392 2B96 M goto $ + 4 0393 276A M call PutC 0394 0AA0 M incf VAR1, F 0395 2B8B M goto $ - 10 0396 2829 00988 goto mloop1 ; done. 00989 00990 ; absolute dump 0397 083B 00991 up13 movfw ARG1H 0398 00C5 00992 movwf D_ADRH ; set start addr 0399 083C 00993 movfw ARG1L 039A 00C6 00994 movwf D_ADRL 039B 083D 00995 movfw ARG2H 039C 00C7 00996 movwf E_ADRH ; set end addr 039D 083E 00997 movfw ARG2L 039E 00C8 00998 movwf E_ADRL 00999 039F 23AD 01000 call Wbegin ; wait the begin MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 18 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 03A0 39FF 01001 andlw 0xff 03A1 1903 01002 btfsc STATUS, Z ; aborted? 03A2 2B8A 01003 goto up12 01004 03A3 252A 01005 call UURecv ; get uudecode 03A4 39FF 01006 andlw 0xff 03A5 1D03 01007 btfss STATUS, Z ; aborted? 03A6 2B8A 01008 goto up12 01009 03A7 27A8 01010 call PutLF ; line feed 03A8 23CD 01011 call Wend ; wait the begin 03A9 39FF 01012 andlw 0xff 03AA 1903 01013 btfsc STATUS, Z ; aborted? 03AB 2B8A 01014 goto up12 01015 03AC 2B76 01016 goto up11 ; print sum, done 01017 01018 01019 ; wait "begin" 01020 ; 03AD 01021 Wbegin 03AD 1283 01022 BANKSEL 0 01023 PRINT wbeg_s ; print the waiting 03AE 01A0 M clrf VAR1 03AF 3009 008A M PAGESEL wbeg_s ; loop 03B1 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 03B2 21CD M call wbeg_s 03B3 018A M clrf PCLATH ; reset PCL 03B4 39FF M andlw 0xff 03B5 1903 M btfsc STATUS, Z 03B6 2BBA M goto $ + 4 03B7 276A M call PutC 03B8 0AA0 M incf VAR1, F 03B9 2BAF M goto $ - 10 01024 03BA 14A7 01025 bsf DMODE, D_ECHO ; set noecho 03BB 2770 01026 call GetS ; wait "begin" 03BC 3CFF 01027 sublw 0xff 03BD 1D03 01028 btfss STATUS, Z 03BE 2BC1 01029 goto wbeg2 01030 03BF 10A7 01031 bcf DMODE, D_ECHO ; echo 03C0 34FF 01032 retlw 0xff ; ESC expected, abort 03C1 01033 wbeg2 03C1 1683 01034 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 03C2 0830 01035 movfw LBUF 03C3 3C62 01036 sublw 'b' 03C4 1D03 01037 btfss STATUS, Z 03C5 2BAD 01038 goto Wbegin 01039 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 03C6 0831 01040 movfw LBUF + 1 03C7 3C65 01041 sublw 'e' 03C8 1D03 01042 btfss STATUS, Z 03C9 2BAD 01043 goto Wbegin 01044 03CA 1283 01045 BANKSEL 0 03CB 10A7 01046 bcf DMODE, D_ECHO ; echo 03CC 3400 01047 retlw 0 01048 01049 01050 ; wait "end" 01051 ; 03CD 01052 Wend 03CD 1283 01053 BANKSEL 0 01054 PRINT wend_s ; print the waiting 03CE 01A0 M clrf VAR1 03CF 3009 008A M PAGESEL wend_s ; loop 03D1 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 03D2 21DA M call wend_s 03D3 018A M clrf PCLATH ; reset PCL 03D4 39FF M andlw 0xff 03D5 1903 M btfsc STATUS, Z 03D6 2BDA M goto $ + 4 03D7 276A M call PutC 03D8 0AA0 M incf VAR1, F 03D9 2BCF M goto $ - 10 01055 03DA 14A7 01056 bsf DMODE, D_ECHO ; set noecho MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 19 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 03DB 2770 01057 call GetS ; wait the end 03DC 3CFF 01058 sublw 0xff 03DD 1D03 01059 btfss STATUS, Z 03DE 2BE1 01060 goto wend2 01061 03DF 10A7 01062 bcf DMODE, D_ECHO ; echo 03E0 34FF 01063 retlw 0xff ; ESC expected, abort 01064 03E1 01065 wend2 03E1 1683 01066 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 03E2 0830 01067 movfw LBUF 03E3 3C65 01068 sublw 'e' 03E4 1D03 01069 btfss STATUS, Z 03E5 2BCD 01070 goto Wend 01071 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 03E6 0831 01072 movfw LBUF + 1 03E7 3C6E 01073 sublw 'n' 03E8 1D03 01074 btfss STATUS, Z 03E9 2BCD 01075 goto Wend 01076 03EA 1283 01077 BANKSEL 0 03EB 10A7 01078 bcf DMODE, D_ECHO ; echo 03EC 3400 01079 retlw 0 01080 01081 ; 01082 ; get cartdidge information 01083 ; 03ED 3001 01084 ChkCart movlw 0x01 ; check cartridge 03EE 00AD 01085 movwf GBADRH 03EF 01AE 01086 clrf GBADRL 03F0 2735 01087 call GBread 03F1 082F 01088 movfw GBDATA 03F2 1D03 01089 btfss STATUS, Z ; ROM[0x0100] == 0x00 03F3 2BFA 01090 goto ginf1 03F4 3001 01091 movlw 0x01 03F5 00AE 01092 movwf GBADRL 03F6 2735 01093 call GBread 03F7 082F 01094 movfw GBDATA 03F8 3CC3 01095 sublw 0xc3 03F9 1D03 01096 btfss STATUS, Z ; ROM[0x0101] == 0xc3 03FA 34FF 01097 ginf1 retlw 0xff ; invalid cartridge, return 0x80 01098 03FB 3400 01099 retlw 0 01100 01101 03FC 3001 01102 GetInfo movlw 0x01 ; get informations 03FD 00AD 01103 movwf GBADRH 03FE 3034 01104 movlw 0x34 ; set title addr 03FF 00AE 01105 movwf GBADRL 0400 304D 01106 movlw CTITLE 0401 0084 01107 movwf FSR 01108 0402 2735 01109 ginf2 call GBread ; get title 0403 082F 01110 movfw GBDATA 0404 0080 01111 movwf INDF ; copy title 0405 0A84 01112 incf FSR, F 0406 0AAE 01113 incf GBADRL, F 0407 082E 01114 movfw GBADRL 0408 3C44 01115 sublw 0x44 0409 1D03 01116 btfss STATUS, Z 040A 2C02 01117 goto ginf2 01118 040B 304E 01119 movlw 0x4e 040C 00AE 01120 movwf GBADRL 040D 2735 01121 call GBread ; get SUM MSB 040E 082F 01122 movfw GBDATA 040F 00E1 01123 movwf CSUM_H 01124 0410 304F 01125 movlw 0x4f 0411 00AE 01126 movwf GBADRL 0412 2735 01127 call GBread ; get SUM LSB 0413 082F 01128 movfw GBDATA 0414 00E0 01129 movwf CSUM_L 01130 0415 0184 01131 clrf FSR ; clear return code 0416 3001 01132 movlw 0x01 0417 00AD 01133 movwf GBADRH 0418 3047 01134 movlw 0x47 0419 00AE 01135 movwf GBADRL 041A 2735 01136 call GBread ; get cartridge type MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 20 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 041B 082F 01137 movfw GBDATA 041C 00DD 01138 movwf CTYPE ; store cartridge type 041D 3007 01139 movlw TYPEMAX + 1 ; check detectable types 041E 025D 01140 subwf CTYPE, W 041F 1803 01141 btfsc STATUS, C 0420 1404 01142 bsf FSR, 0 ; unknown type, return 1 01143 0421 3048 01144 movlw 0x48 0422 00AE 01145 movwf GBADRL 0423 2735 01146 call GBread ; get cartridge ROM size 0424 082F 01147 movfw GBDATA 0425 00DF 01148 movwf CRSIZE ; store ROM size 0426 3006 01149 movlw ROMMAX + 1 0427 025F 01150 subwf CRSIZE, W 0428 1803 01151 btfsc STATUS, C 0429 1484 01152 bsf FSR, 1 ; unknown size return 2 01153 042A 3049 01154 movlw 0x49 042B 00AE 01155 movwf GBADRL 042C 2735 01156 call GBread ; get cartridge SRAM size 042D 082F 01157 movfw GBDATA 042E 00DE 01158 movwf CSSIZE ; store SRAM size 042F 3005 01159 movlw RAMMAX + 1 0430 025E 01160 subwf CSSIZE, W 0431 1803 01161 btfsc STATUS, C 0432 1504 01162 bsf FSR, 2 ; unknown size return 4 01163 0433 0804 01164 movfw FSR ; set return code 0434 0008 01165 return 01166 01167 ; 01168 ; print unknown 01169 prunknw PRINT unknw_s ; print unknown types 0435 01A0 M clrf VAR1 0436 3009 008A M PAGESEL unknw_s ; loop 0438 0820 M movfw VAR1 Message[306]: Crossing page boundary -- ensure page bits are set. 0439 2120 M call unknw_s 043A 018A M clrf PCLATH ; reset PCL 043B 39FF M andlw 0xff 043C 1903 M btfsc STATUS, Z 043D 2C41 M goto $ + 4 043E 276A M call PutC 043F 0AA0 M incf VAR1, F 0440 2C36 M goto $ - 10 0441 0008 01170 return 01171 01172 01173 ; 01174 ; "wd" write data 0442 083B 01175 C_wd movfw ARG1H 0443 00AD 01176 movwf GBADRH 0444 083C 01177 movfw ARG1L 0445 00AE 01178 movwf GBADRL 0446 083E 01179 movfw ARG2L 0447 00AF 01180 movwf GBDATA 0448 2746 01181 call GBwrite 01182 0449 2829 01183 goto mloop1 01184 ; 01185 ; "rd" read data 044A 083B 01186 C_read movfw ARG1H 044B 00AD 01187 movwf GBADRH 044C 083C 01188 movfw ARG1L 044D 00AE 01189 movwf GBADRL 044E 2735 01190 call GBread 044F 082F 01191 movfw GBDATA 0450 267B 01192 call hex2pr 0451 27A8 01193 call PutLF 01194 0452 2829 01195 goto mloop1 01196 ; 01197 ; "br" set ROM bank 0453 1E05 01198 C_sbR btfss PORTA, 4 ; LED is active? 0454 293F 01199 goto norom ; print no ROM 01200 0455 083C 01201 movfw ARG1L 0456 00B0 01202 movwf GBBANK 0457 270E 01203 call ROMBank 01204 0458 2829 01205 goto mloop1 01206 ; MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 21 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 01207 ; "bs" set SRAM bank 0459 1E05 01208 C_sbS btfss PORTA, 4 ; LED is active? 045A 293F 01209 goto norom ; print no ROM 01210 045B 083C 01211 movfw ARG1L 045C 00B0 01212 movwf GBBANK 045D 2715 01213 call RAMBank 01214 045E 2829 01215 goto mloop1 01216 01217 ; 01218 ; "dm" dump memory 045F 1207 01219 C_dump bcf PORTC, P_CTS ; CTS goes low restart flow 0460 3001 01220 movlw 1 ; no given address? 0461 022B 01221 subwf ARGC, W 0462 1D03 01222 btfss STATUS, Z 0463 2C6B 01223 goto cdmp0a 01224 0464 0849 01225 movfw DMCURH ; no given 0465 00C5 01226 movwf D_ADRH 0466 00C7 01227 movwf E_ADRH 0467 084A 01228 movfw DMCURL 0468 00C6 01229 movwf D_ADRL 0469 00C8 01230 movwf E_ADRL 046A 2C75 01231 goto cdmp0b 01232 046B 3002 01233 cdmp0a movlw 2 ; 1 set address ? 046C 022B 01234 subwf ARGC, W 046D 1D03 01235 btfss STATUS, Z 046E 2C81 01236 goto cdmp0c 01237 046F 083B 01238 movfw ARG1H ; 1 args 0470 00C5 01239 movwf D_ADRH 0471 00C7 01240 movwf E_ADRH 0472 083C 01241 movfw ARG1L 0473 00C6 01242 movwf D_ADRL 0474 00C8 01243 movwf E_ADRL 01244 0475 3080 01245 cdmp0b movlw 0x80 ; E_ADR = GBADR + 0x80 0476 07C8 01246 addwf E_ADRL, F 0477 1C03 01247 btfss STATUS, C 0478 2C8D 01248 goto cdmp1 01249 0479 3001 01250 movlw 1 ; carry, E_ADRH++ 047A 07C7 01251 addwf E_ADRH, F 047B 1C03 01252 btfss STATUS, C 047C 2C8D 01253 goto cdmp1 01254 047D 30FF 01255 movlw 0xff ; over 0xffff, set 0xffff 047E 00C8 01256 movwf E_ADRL 047F 00C7 01257 movwf E_ADRH 0480 2C8D 01258 goto cdmp1 01259 0481 3003 01260 cdmp0c movlw 3 ; 2 set address 0482 022B 01261 subwf ARGC, W 0483 1D03 01262 btfss STATUS, Z 0484 290B 01263 goto merror ; error 01264 0485 083B 01265 movfw ARG1H ; start address 0486 00C5 01266 movwf D_ADRH 0487 083C 01267 movfw ARG1L 0488 00C6 01268 movwf D_ADRL 0489 083D 01269 movfw ARG2H ; set end address 048A 00C7 01270 movwf E_ADRH 048B 083E 01271 movfw ARG2L 048C 00C8 01272 movwf E_ADRL 01273 048D 0845 01274 cdmp1 movfw D_ADRH ; set address 048E 00AD 01275 movwf GBADRH 048F 0846 01276 movfw D_ADRL 0490 00AE 01277 movwf GBADRL 0491 24F0 01278 call Dump16 ; 16byte dump, GBADR += 16 0492 39FF 01279 andlw 0xff 0493 1903 01280 btfsc STATUS, Z ; ESC expected, exit 0494 2C97 01281 goto cdmp2 01282 0495 1607 01283 bsf PORTC, P_CTS ; CTS goes high flow stop 0496 2B8A 01284 goto cabort ; print abort, return 01285 0497 3010 01286 cdmp2 movlw 16 ; D_ADR += 16 0498 07C6 01287 addwf D_ADRL, F 0499 1C03 01288 btfss STATUS, C MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 22 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 049A 2C9F 01289 goto cdmp2a 01290 049B 3001 01291 movlw 1 049C 07C5 01292 addwf D_ADRH, F 049D 1803 01293 btfsc STATUS, C 049E 2CAB 01294 goto cdmp3 ; over 0xffff, exit 01295 049F 0845 01296 cdmp2a movfw D_ADRH ; E_ADR >= D_ADR ? 04A0 0247 01297 subwf E_ADRH, W 04A1 1C03 01298 btfss STATUS, C 04A2 2CAB 01299 goto cdmp3 01300 04A3 1D03 01301 btfss STATUS, Z 04A4 2C8D 01302 goto cdmp1 01303 04A5 0846 01304 movfw D_ADRL 04A6 0248 01305 subwf E_ADRL, W 04A7 1903 01306 btfsc STATUS, Z 04A8 2CAB 01307 goto cdmp3 01308 04A9 1803 01309 btfsc STATUS, C 04AA 2C8D 01310 goto cdmp1 01311 04AB 0845 01312 cdmp3 movfw D_ADRH ; store current address 04AC 00C9 01313 movwf DMCURH 04AD 0846 01314 movfw D_ADRL 04AE 00CA 01315 movwf DMCURL 01316 04AF 1607 01317 bsf PORTC, P_CTS ; CTS goes high flow stop 04B0 2829 01318 goto mloop1 ; return main 01319 01320 01321 ; 01322 ; subroutines 01323 ; 01324 ; 01325 ; 01326 ; calculate CheckSUM, D_ADR to E_ADR 04B1 0847 01327 CalcSUM movfw E_ADRH ; D_ADR > E_ADR? 04B2 00C3 01328 movwf CMP_H 04B3 0846 01329 movfw D_ADRL ; E_ADR - D_ADR 04B4 0248 01330 subwf E_ADRL, W 04B5 1803 01331 btfsc STATUS, C 04B6 2CBC 01332 goto csum1 01333 04B7 3001 01334 movlw 1 ; borrow 04B8 0247 01335 subwf E_ADRH, W 04B9 00C3 01336 movwf CMP_H 04BA 1C03 01337 btfss STATUS, C 04BB 0008 01338 return 01339 04BC 0845 01340 csum1 movfw D_ADRH 04BD 0243 01341 subwf CMP_H, W 04BE 1C03 01342 btfss STATUS, C 04BF 0008 01343 return ; D_ADR > E_ADR 01344 04C0 0845 01345 movfw D_ADRH ; D_ADR =< E_ADR 04C1 00AD 01346 movwf GBADRH 04C2 0846 01347 movfw D_ADRL 04C3 00AE 01348 movwf GBADRL 04C4 2735 01349 call GBread ; read data 04C5 082F 01350 movfw GBDATA 04C6 07CC 01351 addwf CKSUML, F 04C7 1803 01352 btfsc STATUS, C 04C8 0ACB 01353 incf CKSUMH, F 01354 04C9 0845 01355 movfw D_ADRH ; D_ADR == E_ADR? 04CA 0247 01356 subwf E_ADRH, W 04CB 1D03 01357 btfss STATUS, Z 04CC 2CD1 01358 goto csum2 01359 04CD 0846 01360 movfw D_ADRL 04CE 0248 01361 subwf E_ADRL, W 04CF 1903 01362 btfsc STATUS, Z 04D0 0008 01363 return ; same, return 01364 04D1 3001 01365 csum2 movlw 1 ; D_ADR++ 04D2 07C6 01366 addwf D_ADRL, F 04D3 1803 01367 btfsc STATUS, C 04D4 0AC5 01368 incf D_ADRH, F 01369 04D5 2CB1 01370 goto CalcSUM MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 23 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 01371 01372 01373 ; 01374 ; generate filename for download from cartridge 04D6 30A0 01375 GenFN movlw ASCBUF 04D7 0084 01376 movwf FSR 04D8 3008 01377 movlw 8 04D9 00A0 01378 movwf VAR1 04DA 3001 01379 movlw 0x01 04DB 00AD 01380 movwf GBADRH 04DC 3034 01381 movlw 0x34 04DD 00AE 01382 movwf GBADRL 01383 04DE 2735 01384 genf0 call GBread 04DF 0AAE 01385 incf GBADRL, F 04E0 3020 01386 movlw ' ' 04E1 022F 01387 subwf GBDATA, W 04E2 1903 01388 btfsc STATUS, Z 04E3 2CE8 01389 goto genf1 01390 04E4 302E 01391 movlw '.' 04E5 022F 01392 subwf GBDATA, W 04E6 1D03 01393 btfss STATUS, Z 04E7 2CEA 01394 goto genf2 01395 04E8 305F 01396 genf1 movlw '_' 04E9 2CEB 01397 goto genf3 01398 04EA 082F 01399 genf2 movfw GBDATA 04EB 0080 01400 genf3 movwf INDF 04EC 0A84 01401 incf FSR, F 04ED 0BA0 01402 decfsz VAR1, F 04EE 2CDE 01403 goto genf0 01404 04EF 0008 01405 return 01406 ; 01407 ; print dump GBADR to +16 with ASCII 04F0 3010 01408 Dump16 movlw 16 04F1 00A1 01409 movwf VAR2 04F2 30A0 01410 movlw ASCBUF 04F3 0084 01411 movwf FSR 01412 04F4 082D 01413 movfw GBADRH ; print address 04F5 267B 01414 call hex2pr 04F6 082E 01415 movfw GBADRL 04F7 267B 01416 call hex2pr 04F8 3020 01417 movlw 0x20 ; two spaces 04F9 276A 01418 call PutC 04FA 3020 01419 movlw 0x20 04FB 276A 01420 call PutC 01421 04FC 27A2 01422 dmp0 call GetCNP ; get char non blocking 04FD 39FF 01423 andlw 0xff 04FE 1903 01424 btfsc STATUS, Z 04FF 2D03 01425 goto dmp0a 01426 0500 3C1B 01427 sublw 0x1b ; ESC inputed? 0501 1903 01428 btfsc STATUS, Z 0502 34FF 01429 retlw 0xff ; ESC expected, return 0xff 01430 0503 2735 01431 dmp0a call GBread ; read data 0504 082F 01432 movfw GBDATA 0505 267B 01433 call hex2pr ; print data 0506 3020 01434 movlw 0x20 0507 022F 01435 subwf GBDATA, W 0508 1C03 01436 btfss STATUS, C 0509 2D0E 01437 goto dmp1 050A 307E 01438 movlw 0x7e 050B 022F 01439 subwf GBDATA, W 050C 1C03 01440 btfss STATUS, C 050D 2D10 01441 goto dmp2 050E 302E 01442 dmp1 movlw '.' ; X >= 7f or X < 0x20 050F 2D11 01443 goto dmp3 0510 082F 01444 dmp2 movfw GBDATA 0511 0080 01445 dmp3 movwf INDF ; store ascii data 0512 0A84 01446 incf FSR, F 01447 0513 3020 01448 movlw 0x20 ; print one space 0514 276A 01449 call PutC 01450 0515 3001 01451 movlw 1 0516 07AE 01452 addwf GBADRL, F ; GBADRL++ MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 24 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0517 1C03 01453 btfss STATUS, C 0518 2D1B 01454 goto dmp3a 0519 3001 01455 movlw 1 051A 07AD 01456 addwf GBADRH, F 01457 051B 0BA1 01458 dmp3a decfsz VAR2, F 051C 2CFC 01459 goto dmp0 01460 051D 3020 01461 movlw 0x20 ; print one space 051E 276A 01462 call PutC 051F 3010 01463 movlw 16 ; print ascii chars 0520 00A1 01464 movwf VAR2 0521 30A0 01465 movlw ASCBUF 0522 0084 01466 movwf FSR 01467 0523 0800 01468 dmp4 movfw INDF 0524 276A 01469 call PutC 0525 0A84 01470 incf FSR, F 0526 0BA1 01471 decfsz VAR2, F 0527 2D23 01472 goto dmp4 01473 0528 27A8 01474 call PutLF ; line feed 0529 3400 01475 retlw 0 01476 01477 ; 01478 ; receive uudecode D_ADR to E_ADR 01479 ; 052A 0846 01480 UURecv movfw D_ADRL ; set top address 052B 00AE 01481 movwf GBADRL 052C 0845 01482 movfw D_ADRH 052D 00AD 01483 movwf GBADRH 052E 01B2 01484 clrf COLUMN ; reset LF counter 052F 3020 01485 movlw ' ' 0530 276A 01486 call PutC ; print SP for turn chars. 01487 0531 2570 01488 uurec1 call TurnC ; put loading animation 01489 0532 14A7 01490 bsf DMODE, D_ECHO ; noecho 0533 2770 01491 call GetS ; get 1 line 0534 10A7 01492 bcf DMODE, D_ECHO ; echo 0535 3CFF 01493 sublw 0xff 0536 1903 01494 btfsc STATUS, Z 0537 34FF 01495 retlw 0xff ; ESC expected, abort. return 0xff 01496 0538 30B0 01497 uurec2 movlw LBUF 0539 0084 01498 movwf FSR ; get size char 053A 0800 01499 movfw INDF 053B 1903 01500 btfsc STATUS, Z ; if buffer empty, reread 053C 2D31 01501 goto uurec1 01502 053D 2699 01503 call UDecChG ; translate 053E 00A2 01504 movwf VAR3 ; byte / line count 053F 39FF 01505 andlw 0xff 0540 1903 01506 btfsc STATUS, Z ; size == 0, end of all? 0541 3400 01507 retlw 0 ; normal exit 01508 0542 30B1 01509 movlw LBUF + 1 ; reset UASCP 0543 00B8 01510 movwf UASCP 01511 0544 26C2 01512 uurec3 call UDec3 ; get 4 char and translate 0545 3CFF 01513 sublw 0xff 0546 1903 01514 btfsc STATUS, Z 0547 2D31 01515 goto uurec1 ; length != 3, eol expected 01516 0548 3035 01517 uurec5 movlw UUDAT1 0549 0084 01518 movwf FSR ; reset UUDAT index 054A 3003 01519 movlw 3 054B 00A3 01520 movwf VAR4 01521 054C 0800 01522 uurec6 movfw INDF ; memory store loop 054D 00AF 01523 movwf GBDATA 054E 2746 01524 call GBwrite ; store data 01525 054F 0800 01526 movfw INDF 0550 07CC 01527 addwf CKSUML, F ; add check sum 0551 1803 01528 btfsc STATUS, C 0552 0ACB 01529 incf CKSUMH, F 01530 0553 3001 01531 movlw 1 ; addr += 1 0554 07AE 01532 addwf GBADRL, F 0555 1C03 01533 btfss STATUS, C 0556 2D58 01534 goto uurec7 ; non carry MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 25 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0557 0AAD 01535 incf GBADRH, F 01536 0558 082D 01537 uurec7 movfw GBADRH ; 16bit end address compare 0559 0247 01538 subwf E_ADRH, W 055A 1C03 01539 btfss STATUS, C 055B 3400 01540 retlw 0 ; grater than (GBADR > E_ADR), normal exit 01541 055C 1D03 01542 btfss STATUS, Z 055D 2D66 01543 goto uurec8 ; less than (GBADR < E_ADR) 01544 055E 082E 01545 movfw GBADRL 055F 0248 01546 subwf E_ADRL, W 0560 1C03 01547 btfss STATUS, C 0561 3400 01548 retlw 0 ; grater than, normal exit 01549 0562 3001 01550 movlw 1 0563 02A2 01551 subwf VAR3, F ; byte/line counter -= 1 0564 1903 01552 btfsc STATUS, Z 0565 2D31 01553 goto uurec1 ; size reached, next line 01554 01555 ; equal or less than 0566 0A84 01556 uurec8 incf FSR, F ; continue store 0567 0BA3 01557 decfsz VAR4, F 0568 2D4C 01558 goto uurec6 ; next byte 01559 0569 3004 01560 uurec9 movlw 4 056A 07B8 01561 addwf UASCP, F ; UASCP += 4 056B 30F0 01562 movlw LBUF + LBUFLEN 056C 0238 01563 subwf UASCP, W 056D 1C03 01564 btfss STATUS, C ; LBUF max reached? 056E 2D44 01565 goto uurec3 ; next char pack 01566 056F 34FF 01567 retlw 0xff ; LBUF overflow, exit 01568 01569 ; 01570 ; 01571 ; loading animation 0570 3008 01572 TurnC movlw 0x08 0571 276A 01573 call PutC ; print BS 0572 0832 01574 movfw COLUMN 0573 1D03 01575 btfss STATUS, Z 0574 2D78 01576 goto tc1 0575 305C 01577 movlw '\\' ; \ | / - 0576 276A 01578 call PutC 0577 2D8E 01579 goto tc5 01580 0578 0832 01581 tc1 movfw COLUMN 0579 3C01 01582 sublw 1 057A 1D03 01583 btfss STATUS, Z 057B 2D7F 01584 goto tc2 057C 307C 01585 movlw '|' 057D 276A 01586 call PutC 057E 2D8E 01587 goto tc5 01588 057F 0832 01589 tc2 movfw COLUMN 0580 3C02 01590 sublw 2 0581 1D03 01591 btfss STATUS, Z 0582 2D86 01592 goto tc3 0583 302F 01593 movlw '/' 0584 276A 01594 call PutC 0585 2D8E 01595 goto tc5 01596 0586 0832 01597 tc3 movfw COLUMN 0587 3C03 01598 sublw 3 0588 1D03 01599 btfss STATUS, Z 0589 2D8C 01600 goto tc4 058A 302D 01601 movlw '-' 058B 276A 01602 call PutC 01603 058C 01B2 01604 tc4 clrf COLUMN 058D 0008 01605 return 01606 058E 0AB2 01607 tc5 incf COLUMN, F 058F 0008 01608 return 01609 01610 ; 01611 ; dump uuencode D_ADR to E_ADR 01612 ; 0590 1207 01613 UUDump bcf PORTC, P_CTS ; CTS goes low flow restart 0591 0846 01614 uud1 movfw D_ADRL ; CMP = E_ADR - D_ADR 0592 0248 01615 subwf E_ADRL, W ; calc remain char 0593 00C4 01616 movwf CMP_L MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 26 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0594 1803 01617 btfsc STATUS, C 0595 2D9B 01618 goto uud1a 01619 0596 3001 01620 movlw 1 0597 0247 01621 subwf E_ADRH, W 0598 00C3 01622 movwf CMP_H 0599 1C03 01623 btfss STATUS, C 059A 2DDB 01624 goto uud_r0 ; E_ADR < D_ADR 01625 059B 3001 01626 uud1a movlw 1 ; CMP++ 059C 07C4 01627 addwf CMP_L, F 059D 1C03 01628 btfss STATUS, C 059E 2DA0 01629 goto uud2 01630 059F 0AC3 01631 incf CMP_H, F 01632 05A0 0845 01633 uud2 movfw D_ADRH ; MSB diff >= 0 05A1 0247 01634 subwf E_ADRH, W 05A2 00C3 01635 movwf CMP_H 05A3 1C03 01636 btfss STATUS, C 05A4 2DDB 01637 goto uud_r0 ; E_ADR < D_ADR 01638 05A5 0843 01639 movfw CMP_H ; remain < 45 ? 05A6 1D03 01640 btfss STATUS, Z 05A7 2DB2 01641 goto uud3 01642 05A8 302D 01643 movlw 45 05A9 0244 01644 subwf CMP_L, W 05AA 1803 01645 btfsc STATUS, C 05AB 2DB2 01646 goto uud3 01647 05AC 0844 01648 movfw CMP_L ; remain less than 45 byte. 05AD 1903 01649 btfsc STATUS, Z 05AE 2DDB 01650 goto uud_r0 ; remain zero 01651 05AF 2691 01652 call UEncChP 05B0 0844 01653 movfw CMP_L ; column count 05B1 2DB5 01654 goto uud4 01655 05B2 304D 01656 uud3 movlw 'M' ; print line header 05B3 276A 01657 call PutC ; 15 * 3 byte / line 05B4 302D 01658 movlw 45 ; column count 05B5 00A2 01659 uud4 movwf VAR3 01660 05B6 3035 01661 uud5 movlw UUDAT1 ; reset UUDAT pointer 05B7 0084 01662 movwf FSR 01663 05B8 27A2 01664 uud5b call GetCNP ; get char non blocking 05B9 39FF 01665 andlw 0xff 05BA 1903 01666 btfsc STATUS, Z 05BB 2DBF 01667 goto uud5c 01668 05BC 3C1B 01669 sublw 0x1b ; ESC inputed? 05BD 1903 01670 btfsc STATUS, Z 05BE 2DDD 01671 goto uud_r1 01672 05BF 0845 01673 uud5c movfw D_ADRH ; get ROM data 05C0 00AD 01674 movwf GBADRH 05C1 0846 01675 movfw D_ADRL 05C2 00AE 01676 movwf GBADRL 05C3 2735 01677 call GBread 05C4 082F 01678 movfw GBDATA 05C5 0080 01679 movwf INDF 01680 05C6 07CC 01681 addwf CKSUML, F ; add check sum 05C7 1803 01682 btfsc STATUS, C 05C8 0ACB 01683 incf CKSUMH, F 01684 05C9 3001 01685 movlw 1 ; addr += 1 05CA 07C6 01686 addwf D_ADRL, F 05CB 1C03 01687 btfss STATUS, C 05CC 2DCE 01688 goto uud6 ; non carry 05CD 0AC5 01689 incf D_ADRH, F 01690 05CE 0BA2 01691 uud6 decfsz VAR3, F ; column count-- 05CF 2DD3 01692 goto uud7 ; next char 01693 05D0 269E 01694 call UEnc3 ; end reached, send chars 05D1 27A8 01695 call PutLF ; line feed 05D2 2D91 01696 goto uud1 ; continue next line 01697 05D3 3001 01698 uud7 movlw 1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 27 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 05D4 0784 01699 addwf FSR, F 05D5 3038 01700 movlw UUDAT3 + 1 ; FSR == UUDAT3 + 1? 05D6 0204 01701 subwf FSR, W 05D7 1D03 01702 btfss STATUS, Z 05D8 2DB8 01703 goto uud5b ; continue packing 01704 05D9 269E 01705 call UEnc3 ; UUDAT full, send 4 chars 05DA 2DB6 01706 goto uud5 ; next char 01707 05DB 01708 uud_r0 05DB 1607 01709 uud9 bsf PORTC, P_CTS ; CTS goes high flow stop 05DC 3400 01710 retlw 0 01711 05DD 1607 01712 uud_r1 bsf PORTC, P_CTS ; CTS goes high flow stop 05DE 34FF 01713 retlw 0xff 01714 01715 01716 ; parse command line 05DF 3001 01717 cmdpar movlw 1 05E0 00AB 01718 movwf ARGC 05E1 30B0 01719 movlw LBUF 05E2 00A8 01720 movwf LBUFP ; buffer pointer 05E3 0084 01721 movwf FSR ; count argument 01722 05E4 0800 01723 cmd1 movfw INDF 05E5 1903 01724 btfsc STATUS, Z ; eol? 05E6 2DF7 01725 goto cmd2 01726 05E7 3C20 01727 sublw 0x20 05E8 1D03 01728 btfss STATUS, Z 05E9 2DEC 01729 goto cmd1b 01730 05EA 0A84 01731 incf FSR, F 05EB 2DE4 01732 goto cmd1 ; skip space char 01733 05EC 0800 01734 cmd1b movfw INDF ; char != SP 05ED 1903 01735 btfsc STATUS, Z ; end of line? 05EE 2DF7 01736 goto cmd2 01737 05EF 3C20 01738 sublw 0x20 05F0 1903 01739 btfsc STATUS, Z 05F1 2DF4 01740 goto cmd1c 01741 05F2 0A84 01742 incf FSR, F ; search end of an argment 05F3 2DEC 01743 goto cmd1b 01744 05F4 0AAB 01745 cmd1c incf ARGC, F ; incriment argc, next arg 05F5 0A84 01746 incf FSR, F ; search end of an argment 05F6 2DE4 01747 goto cmd1 01748 05F7 30B0 01749 cmd2 movlw LBUF ; count done 05F8 0084 01750 movwf FSR 05F9 0800 01751 movfw INDF 05FA 1D03 01752 btfss STATUS, Z ; no agument ? 05FB 2DFD 01753 goto cmd3 05FC 3400 01754 retlw 0 01755 05FD 3004 01756 cmd3 movlw 4 05FE 022B 01757 subwf ARGC, W 05FF 1803 01758 btfsc STATUS, C ; argc > 3, error 0600 34FF 01759 retlw 0xff 01760 0601 1683 01761 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0602 0830 01762 movfw LBUF ; copy command string 0603 1283 01763 BANKSEL ARG0H 0604 00B9 01764 movwf ARG0H 0605 1683 01765 BANKSEL LBUF Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 0606 0831 01766 movfw LBUF + 1 0607 1283 01767 BANKSEL ARG0L 0608 00BA 01768 movwf ARG0L 0609 1903 01769 btfsc STATUS, Z ; is 2nd char null? 060A 3400 01770 retlw 0 01771 060B 30B2 01772 movlw LBUF + 2 060C 00A8 01773 movwf LBUFP ; buffer pointer 060D 303B 01774 movlw ARG1H 060E 00A9 01775 movwf ARGP ; argument pointer 01776 060F 082B 01777 movfw ARGC ; store ARGC 0610 00AC 01778 movwf ARGCT MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 28 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 01779 0611 01C2 01780 cmd4 clrf ARGT_L 0612 01C1 01781 clrf ARGT_H 0613 0828 01782 movfw LBUFP ; find next argument 0614 0084 01783 movwf FSR ; skip SP char 0615 0800 01784 movfw INDF 0616 1903 01785 btfsc STATUS, Z ; EOL expected, error 0617 34FF 01786 retlw 0xff 01787 0618 3C20 01788 sublw 0x20 0619 1D03 01789 btfss STATUS, Z 061A 2E1D 01790 goto cmd4a 01791 061B 0AA8 01792 incf LBUFP, F 061C 2E11 01793 goto cmd4 01794 061D 0828 01795 cmd4a movfw LBUFP ; translate 4 digit ascii 061E 0084 01796 movwf FSR 061F 0800 01797 movfw INDF ; INDF = [LBUFP] 0620 1903 01798 btfsc STATUS, Z ; EOL expected? 0621 2E3B 01799 goto cmd5 ; parse done 01800 0622 0800 01801 movfw INDF 0623 2648 01802 call atoi 0624 00A5 01803 movwf CONVT1 0625 3CFF 01804 sublw 0xff 0626 1903 01805 btfsc STATUS, Z 0627 34FF 01806 retlw 0xff ; non addressing char excepted 01807 0628 0825 01808 movfw CONVT1 0629 3CFE 01809 sublw 0xfe 062A 1903 01810 btfsc STATUS, Z 062B 2E3B 01811 goto cmd5 ; space excepted 01812 01813 062C 1003 01814 bcf STATUS, C 062D 0DC2 01815 rlf ARGT_L, F ; shift left 4 bit 062E 0DC1 01816 rlf ARGT_H, F 062F 0DC2 01817 rlf ARGT_L, F 0630 0DC1 01818 rlf ARGT_H, F 0631 0DC2 01819 rlf ARGT_L, F 0632 0DC1 01820 rlf ARGT_H, F 0633 0DC2 01821 rlf ARGT_L, F 0634 0DC1 01822 rlf ARGT_H, F 0635 30F0 01823 movlw 0xf0 0636 05C2 01824 andwf ARGT_L, F 0637 0825 01825 movfw CONVT1 0638 04C2 01826 iorwf ARGT_L, F 0639 0AA8 01827 incf LBUFP, F 063A 2E1D 01828 goto cmd4a 01829 063B 0829 01830 cmd5 movfw ARGP ; SP expected, copy argument 063C 0084 01831 movwf FSR 063D 0841 01832 movfw ARGT_H 063E 0080 01833 movwf INDF 063F 0A84 01834 incf FSR, F 0640 0842 01835 movfw ARGT_L 0641 0080 01836 movwf INDF 01837 0642 0AA8 01838 incf LBUFP, F ; skip space char 0643 3002 01839 movlw 2 0644 07A9 01840 addwf ARGP, F ; incriment argument pointer 01841 0645 0BAC 01842 decfsz ARGCT, F 0646 2E11 01843 goto cmd4 ; try next argument 01844 0647 3400 01845 retlw 0 ; done parse 01846 01847 ; 01848 ; ASCII to integer(W -> W) 0648 00A5 01849 atoi movwf CONVT1 0649 3030 01850 movlw 0x30 064A 0225 01851 subwf CONVT1, W 064B 1C03 01852 btfss STATUS, C 064C 2E61 01853 goto atoi1 ; W < 0x30 01854 064D 303A 01855 movlw 0x3a 064E 0225 01856 subwf CONVT1, W 064F 1C03 01857 btfss STATUS, C 0650 2E66 01858 goto atoi2 01859 0651 3041 01860 movlw 0x41 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 29 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0652 0225 01861 subwf CONVT1, W 0653 1C03 01862 btfss STATUS, C 0654 2E61 01863 goto atoi1 01864 0655 3047 01865 movlw 0x47 0656 0225 01866 subwf CONVT1, W 0657 1C03 01867 btfss STATUS, C 0658 2E69 01868 goto atoi3 01869 0659 3061 01870 movlw 0x61 065A 0225 01871 subwf CONVT1, W 065B 1C03 01872 btfss STATUS, C 065C 2E61 01873 goto atoi1 01874 065D 3067 01875 movlw 0x67 065E 0225 01876 subwf CONVT1, W 065F 1C03 01877 btfss STATUS, C 0660 2E69 01878 goto atoi3 01879 0661 0825 01880 atoi1 movfw CONVT1 0662 3C20 01881 sublw 0x20 0663 1903 01882 btfsc STATUS, Z 0664 34FE 01883 retlw 0xfe ; SP 0665 34FF 01884 retlw 0xff ; not [0-9a-zA-Z] 01885 0666 3030 01886 atoi2 movlw 0x30 0667 0225 01887 subwf CONVT1, W ; [0-9] 0668 0008 01888 return 01889 0669 30DF 01890 atoi3 movlw b'11011111' 066A 05A5 01891 andwf CONVT1, F 066B 3037 01892 movlw 0x41 - 10 066C 0225 01893 subwf CONVT1, W ; [a-zA-Z] 066D 0008 01894 return 01895 01896 ; 01897 ;itoa(W) 066E 00A4 01898 itoa movwf VAR5 066F 300F 01899 movlw 0x0f 0670 05A4 01900 andwf VAR5, F 0671 300A 01901 movlw 10 0672 0224 01902 subwf VAR5, W 0673 1803 01903 btfsc STATUS, C 0674 2E78 01904 goto itoa1 0675 3030 01905 movlw 0x30 0676 0724 01906 addwf VAR5, W ; 0 - 9 0677 0008 01907 return 01908 0678 3037 01909 itoa1 movlw 0x41 - 10 0679 0724 01910 addwf VAR5, W ; a - f 067A 0008 01911 return 01912 01913 ; 01914 ; print 2 hex(W) 067B 00A5 01915 hex2pr movwf CONVT1 067C 0DA5 01916 rlf CONVT1, F 067D 0DA6 01917 rlf CONVT2, F 067E 0DA5 01918 rlf CONVT1, F 067F 0DA6 01919 rlf CONVT2, F 0680 0DA5 01920 rlf CONVT1, F 0681 0DA6 01921 rlf CONVT2, F 0682 0DA5 01922 rlf CONVT1, F 0683 0D26 01923 rlf CONVT2, W 0684 266E 01924 call itoa 0685 276A 01925 call PutC 0686 0DA5 01926 rlf CONVT1, F 0687 0DA6 01927 rlf CONVT2, F 0688 0DA5 01928 rlf CONVT1, F 0689 0DA6 01929 rlf CONVT2, F 068A 0DA5 01930 rlf CONVT1, F 068B 0DA6 01931 rlf CONVT2, F 068C 0DA5 01932 rlf CONVT1, F 068D 0D26 01933 rlf CONVT2, W 068E 266E 01934 call itoa 068F 276A 01935 call PutC 0690 0008 01936 return 01937 01938 ; 01939 ; uuencode 0691 393F 01940 UEncChP andlw 0x3f ; print UUchar 0692 1D03 01941 btfss STATUS, Z 0693 2E96 01942 goto uenc1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 30 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0694 3060 01943 movlw '`' 0695 2E97 01944 goto uenc2 0696 3E20 01945 uenc1 addlw 0x20 0697 276A 01946 uenc2 call PutC 0698 0008 01947 return 01948 01949 ; 01950 ; uu char decode(W) -> (W) 0699 00A4 01951 UDecChG movwf VAR5 069A 3020 01952 movlw 0x20 ; decode char 069B 0224 01953 subwf VAR5, W 069C 393F 01954 andlw 0x3f 01955 069D 0008 01956 return 01957 069E 0835 01958 UEnc3 movfw UUDAT1 ; 3 byte -> 4 ascii char 069F 00A0 01959 movwf VAR1 06A0 1003 01960 bcf STATUS, C 06A1 0CA0 01961 rrf VAR1, F 06A2 1003 01962 bcf STATUS, C 06A3 0C20 01963 rrf VAR1, W 06A4 2691 01964 call UEncChP ; put 1st char 06A5 0835 01965 movfw UUDAT1 06A6 00A0 01966 movwf VAR1 06A7 0836 01967 movfw UUDAT2 06A8 00A1 01968 movwf VAR2 06A9 0CA0 01969 rrf VAR1, F 06AA 0CA1 01970 rrf VAR2, F 06AB 0CA0 01971 rrf VAR1, F 06AC 0CA1 01972 rrf VAR2, F 06AD 0CA1 01973 rrf VAR2, F 06AE 0C21 01974 rrf VAR2, W 06AF 2691 01975 call UEncChP ; put 2nd char 06B0 0836 01976 movfw UUDAT2 06B1 00A0 01977 movwf VAR1 06B2 0837 01978 movfw UUDAT3 06B3 00A1 01979 movwf VAR2 06B4 0CA0 01980 rrf VAR1, F 06B5 0CA1 01981 rrf VAR2, F 06B6 0CA0 01982 rrf VAR1, F 06B7 0CA1 01983 rrf VAR2, F 06B8 0CA0 01984 rrf VAR1, F 06B9 0CA1 01985 rrf VAR2, F 06BA 0CA0 01986 rrf VAR1, F 06BB 0CA1 01987 rrf VAR2, F 06BC 0CA1 01988 rrf VAR2, F 06BD 0C21 01989 rrf VAR2, W 06BE 2691 01990 call UEncChP ; put 3rd char 06BF 0837 01991 movfw UUDAT3 06C0 2691 01992 call UEncChP ; put 4th char 01993 06C1 0008 01994 return 01995 01996 ; 01997 ; decode 4 char, LBUF[UASCP]:4 -> UUDAT, return got length. 01998 ; broken: W, FSR, VAR1, VAR2 06C2 0838 01999 UDec3 movfw UASCP 06C3 0084 02000 movwf FSR 02001 06C4 0800 02002 movfw INDF ; 1st byte 06C5 1903 02003 btfsc STATUS, Z 06C6 34FF 02004 retlw 0xff ; eol reached 02005 06C7 2699 02006 call UDecChG ; ASCII -> BIN 06C8 00A0 02007 movwf VAR1 06C9 0A84 02008 incf FSR, F 06CA 0800 02009 movfw INDF ; 2nd byte 06CB 1903 02010 btfsc STATUS, Z 06CC 34FF 02011 retlw 0xff ; eol reached 02012 06CD 2699 02013 call UDecChG 06CE 00A1 02014 movwf VAR2 06CF 0DA1 02015 rlf VAR2, F 06D0 0DA1 02016 rlf VAR2, F 06D1 0DA1 02017 rlf VAR2, F 06D2 0DA0 02018 rlf VAR1, F 06D3 0DA1 02019 rlf VAR2, F 06D4 0D20 02020 rlf VAR1, W 06D5 00B5 02021 movwf UUDAT1 02022 06D6 0800 02023 movfw INDF ; 2nd byte 06D7 2699 02024 call UDecChG MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 31 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 06D8 00A0 02025 movwf VAR1 06D9 0A84 02026 incf FSR, F 06DA 0800 02027 movfw INDF ; 3rd byte 06DB 1903 02028 btfsc STATUS, Z 06DC 34FF 02029 retlw 0xff ; eol reached 02030 06DD 2699 02031 call UDecChG 06DE 00A1 02032 movwf VAR2 06DF 0DA1 02033 rlf VAR2, F 06E0 0DA1 02034 rlf VAR2, F 06E1 0DA1 02035 rlf VAR2, F 06E2 0DA0 02036 rlf VAR1, F 06E3 0DA1 02037 rlf VAR2, F 06E4 0DA0 02038 rlf VAR1, F 06E5 0DA1 02039 rlf VAR2, F 06E6 0DA0 02040 rlf VAR1, F 06E7 0DA1 02041 rlf VAR2, F 06E8 0D20 02042 rlf VAR1, W 06E9 00B6 02043 movwf UUDAT2 02044 06EA 0800 02045 movfw INDF ; 3nd byte 06EB 2699 02046 call UDecChG 06EC 00A0 02047 movwf VAR1 06ED 0A84 02048 incf FSR, F 06EE 0800 02049 movfw INDF ; 4th byte 06EF 1903 02050 btfsc STATUS, Z 06F0 34FF 02051 retlw 0xff ; eol reached 02052 06F1 2699 02053 call UDecChG 06F2 00A1 02054 movwf VAR2 06F3 0DA1 02055 rlf VAR2, F 06F4 0DA1 02056 rlf VAR2, F 06F5 0CA0 02057 rrf VAR1, F 06F6 0CA1 02058 rrf VAR2, F 06F7 0CA0 02059 rrf VAR1, F 06F8 0C21 02060 rrf VAR2, W 06F9 00B7 02061 movwf UUDAT3 02062 06FA 3400 02063 retlw 0 02064 02065 ; MBC activate 06FB 01AE 02066 MBCact clrf GBADRL ; enable SRAM 06FC 01AD 02067 clrf GBADRH 06FD 300A 02068 movlw 0x0a 06FE 00AF 02069 movwf GBDATA 06FF 2746 02070 call GBwrite 0700 3060 02071 movlw 0x60 ; enable RAM BANK 0701 00AD 02072 movwf GBADRH 0702 3001 02073 movlw 0x01 0703 00AF 02074 movwf GBDATA 0704 2746 02075 call GBwrite 0705 0008 02076 return 02077 02078 ; MBC offline 0706 01AE 02079 MBCoff clrf GBADRL ; disable SRAM 0707 01AD 02080 clrf GBADRH 0708 01AF 02081 clrf GBDATA 0709 2746 02082 call GBwrite 070A 3060 02083 movlw 0x60 ; disable RAM BANK 070B 00AD 02084 movwf GBADRH 070C 2746 02085 call GBwrite 070D 0008 02086 return 02087 02088 ; bank select 070E 01AE 02089 ROMBank clrf GBADRL 070F 3021 02090 movlw 0x21 0710 00AD 02091 movwf GBADRH 0711 0830 02092 movfw GBBANK 0712 00AF 02093 movwf GBDATA 0713 2746 02094 call GBwrite 0714 0008 02095 return 02096 0715 01AE 02097 RAMBank clrf GBADRL 0716 3040 02098 movlw 0x40 0717 00AD 02099 movwf GBADRH 0718 0830 02100 movfw GBBANK 0719 00AF 02101 movwf GBDATA 071A 2746 02102 call GBwrite 071B 0008 02103 return 02104 02105 ; set address 071C 1005 02106 SetAdr bcf PORTA, 0 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 32 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 071D 1085 02107 bcf PORTA, 1 071E 1105 02108 bcf PORTA, 2 071F 1185 02109 bcf PORTA, 3 0720 1285 02110 bcf PORTA, 5 0721 0189 02111 clrf PORTE 02112 0722 182D 02113 btfsc GBADRH, 0 0723 1405 02114 bsf PORTA, 0 0724 18AD 02115 btfsc GBADRH, 1 0725 1485 02116 bsf PORTA, 1 0726 192D 02117 btfsc GBADRH, 2 0727 1505 02118 bsf PORTA, 2 0728 19AD 02119 btfsc GBADRH, 3 0729 1585 02120 bsf PORTA, 3 072A 1A2D 02121 btfsc GBADRH, 4 072B 1685 02122 bsf PORTA, 5 072C 1AAD 02123 btfsc GBADRH, 5 072D 1409 02124 bsf PORTE, 0 072E 1B2D 02125 btfsc GBADRH, 6 072F 1489 02126 bsf PORTE, 1 0730 1BAD 02127 btfsc GBADRH, 7 0731 1509 02128 bsf PORTE, 2 0732 082E 02129 movfw GBADRL 0733 0088 02130 movwf PORTD 0734 0008 02131 return 02132 02133 ; 02134 ; memory read 0735 271C 02135 GBread call SetAdr ; set address 02136 0736 0197 02137 clrf CCP1CON ; stop PWM 0737 30E0 02138 movlw b'11100000' ; 0xa000 - 0xbfff, MREQ = 0 0738 052D 02139 andwf GBADRH, W 0739 3CA0 02140 sublw b'10100000' 073A 1903 02141 btfsc STATUS, Z 073B 1187 02142 bcf PORTC, P_MREQ ; MREQ = 0 02143 073C 1107 02144 bcf PORTC, P_CLK ; CLK goes low 073D 0000 02145 nop ; wait 544ns(at 14.7456MHz) 073E 0000 02146 nop 073F 0806 02147 movfw PORTB 0740 00AF 02148 movwf GBDATA ; read data 02149 0741 1507 02150 bsf PORTC, P_CLK ; CLK goes high 0742 1587 02151 bsf PORTC, P_MREQ ; MREQ = 1 0743 300C 02152 movlw BS(CCP1M3) | BS(CCP1M2) 0744 0097 02153 movwf CCP1CON ; PWM restart 02154 0745 0008 02155 return 02156 02157 ; 02158 ; memory write 0746 1487 02159 GBwrite bsf PORTC, P_RD ; RD = 1 0747 271C 02160 call SetAdr ; set address 02161 0748 0197 02162 clrf CCP1CON ; stop PWM 0749 30E0 02163 movlw b'11100000' ; 0xa000 - 0xbfff, MREQ = 0 074A 052D 02164 andwf GBADRH, W 074B 3CA0 02165 sublw b'10100000' 074C 1903 02166 btfsc STATUS, Z 074D 1187 02167 bcf PORTC, P_MREQ ; MREQ = 0 02168 074E 1683 02169 bsf STATUS, RP0 Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 074F 0186 02170 clrf TRISB ; change direction output 0750 1283 02171 bcf STATUS, RP0 02172 0751 082F 02173 movfw GBDATA 0752 0086 02174 movwf PORTB ; write data 0753 1107 02175 bcf PORTC, P_CLK ; CLK goes low 0754 1007 02176 bcf PORTC, P_WR ; WE = 0 0755 0000 02177 nop ; wait 544ns(at 14.7456MHz) 0756 0000 02178 nop 0757 1407 02179 AccIdle bsf PORTC, P_WR ; set Idle Access cycle 0758 1507 02180 bsf PORTC, P_CLK ; CLK goes high 0759 1587 02181 bsf PORTC, P_MREQ ; MREQ = 1 075A 1683 02182 bsf STATUS, RP0 075B 30FF 02183 movlw b'11111111' Message[302]: Register in operand not in bank 0. Ensure that bank bits are correct. 075C 0086 02184 movwf TRISB ; change direction input 075D 1283 02185 bcf STATUS, RP0 075E 1087 02186 bcf PORTC, P_RD ; RD = 0 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 33 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 075F 300C 02187 movlw BS(CCP1M3) | BS(CCP1M2) 0760 0097 02188 movwf CCP1CON ; PWM restart 02189 0761 0008 02190 return 02191 02192 ; line transmit 0762 30B0 02193 PutS movlw LBUF 0763 0084 02194 movwf FSR 0764 0800 02195 ps1 movfw INDF 0765 1903 02196 btfsc STATUS, Z 0766 0008 02197 return 02198 0767 276A 02199 call PutC 0768 0A84 02200 incf FSR, F 0769 2F64 02201 goto ps1 02202 02203 ; byte transmit(W) 076A 02204 PutC 02205 ifdef debug 02206 return 02207 endif 02208 076A 1A87 02209 btfsc PORTC, P_RTS ; check RTS 076B 2F6A 02210 goto PutC 076C 1E0C 02211 btfss PIR1, TXIF ; wait buffer empty 076D 2F6A 02212 goto PutC 076E 0099 02213 movwf TXREG 076F 0008 02214 return 02215 ; 02216 ; line receive 02217 ; DMODE.1 == 1 noecho, 0: echo 0770 02218 GetS 02219 ifdef debug 02220 return 02221 endif 02222 0770 1207 02223 bcf PORTC, P_CTS ; CTS goes low flow restart 0771 30B0 02224 movlw LBUF 0772 0084 02225 movwf FSR 0773 279C 02226 gs1 call GetC 0774 0080 02227 movwf INDF 0775 3C0D 02228 sublw 0x0d ; CR ? 0776 1D03 02229 btfss STATUS, Z 0777 2F7D 02230 goto gs2 02231 0778 1607 02232 bsf PORTC, P_CTS ; CTS goes high flow stop 0779 0180 02233 clrf INDF ; clear CR code 077A 30B0 02234 movlw LBUF 077B 0204 02235 subwf FSR, W ; return got count 077C 0008 02236 return 02237 077D 0800 02238 gs2 movfw INDF 077E 3C1B 02239 sublw 0x1b ; ESC ? 077F 1D03 02240 btfss STATUS, Z 0780 2F83 02241 goto gs2b 02242 0781 1607 02243 bsf PORTC, P_CTS ; CTS goes high flow stop 0782 34FF 02244 retlw 0xff ; return 0xff 02245 0783 18A7 02246 gs2b btfsc DMODE, D_ECHO ; check echo mode 0784 2F97 02247 goto gs4 ; noecho 02248 0785 0800 02249 movfw INDF 0786 3C08 02250 sublw 0x08 ; BS ? 0787 1D03 02251 btfss STATUS, Z 0788 2F95 02252 goto gs3 02253 0789 30B0 02254 movlw LBUF 078A 0204 02255 subwf FSR, W 078B 1903 02256 btfsc STATUS, Z 078C 2F73 02257 goto gs1 ; can not back 02258 078D 0384 02259 decf FSR, F ; backspace 078E 3008 02260 movlw 0x08 078F 276A 02261 call PutC ; put BS 0790 3020 02262 movlw 0x20 0791 276A 02263 call PutC ; put SP 0792 3008 02264 movlw 0x08 0793 276A 02265 call PutC ; put BS 0794 2F73 02266 goto gs1 02267 0795 0800 02268 gs3 movfw INDF MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 34 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 0796 276A 02269 call PutC ; echo char 02270 0797 30EF 02271 gs4 movlw LBUF + LBUFLEN - 1 ; buffer max reached? 0798 0204 02272 subwf FSR, W 0799 1D03 02273 btfss STATUS, Z 079A 0A84 02274 incf FSR, F ; incriment buffer 02275 079B 2F73 02276 goto gs1 ; buffer max, no incriment 02277 02278 02279 ; byte receive 079C 02280 GetC 02281 ifdef debug 02282 return 02283 endif 02284 079C 1A87 02285 btfsc PORTC, P_RTS ; check RTS 079D 2F9C 02286 goto GetC 02287 079E 1E8C 02288 gc2 btfss PIR1, RCIF ; wait buffer empty 079F 2F9E 02289 goto gc2 07A0 081A 02290 movfw RCREG 07A1 0008 02291 return 02292 02293 ; byte receive with non polling 07A2 1A87 02294 GetCNP btfsc PORTC, P_RTS ; check RTS 07A3 3400 02295 retlw 0 02296 07A4 1E8C 02297 btfss PIR1, RCIF ; wait buffer empty 07A5 3400 02298 retlw 0 02299 07A6 081A 02300 movfw RCREG 07A7 0008 02301 return 02302 ; 02303 ; print LineFeed 07A8 300D 02304 PutLF movlw 0x0d 07A9 276A 02305 call PutC 07AA 300A 02306 movlw 0x0a 07AB 276A 02307 call PutC 07AC 0008 02308 return 02309 02310 02311 ; string tables 02312 ; 0800 02313 org (( $ + 0x100 ) & 0x0f00) 0800 0782 02314 prom_s addwf PCL, F 0801 340D 340A 3467 02315 dt "\r\ngbr>", 0 3462 3472 343E 3400 02316 0808 0782 02317 inf1_s addwf PCL, F 0809 3454 3469 3474 02318 dt "Title: ", 0 346C 3465 343A 3420 3400 0811 0782 02319 inf2_s addwf PCL, F 0812 3420 3454 3479 02320 dt " Type: ", 0 3470 3465 343A 3420 3400 081A 0782 02321 inf3_s addwf PCL, F 081B 3420 3420 3452 02322 dt " ROM: ", 0 344F 344D 343A 3420 3400 0823 0782 02323 inf4_s addwf PCL, F 0824 3420 3453 3452 02324 dt " SRAM: ", 0 3441 344D 343A 3420 3400 082C 0782 02325 inf5_s addwf PCL, F 082D 3420 3420 3453 02326 dt " Sum: ", 0 3475 346D 343A 3420 3400 02327 0835 0782 02328 rams_s addwf PCL, F 0836 346E 346F 346E 02329 dt "none\r\n", 0 3465 340D 340A 3400 083D 3431 3436 344B 02330 dt "16Kbit\r\n", 0 3462 3469 3474 340D 340A 3400 0846 3436 3434 344B 02331 dt "64Kbit\r\n", 0 3462 3469 3474 340D 340A 3400 084F 3432 3435 3436 02332 dt "256Kbit\r\n", 0 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 35 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 344B 3462 3469 3474 340D 340A 3400 0859 3431 344D 3462 02333 dt "1Mbit\r\n", 0 3469 3474 340D 340A 3400 02334 0861 0782 02335 roms_s addwf PCL, F 0862 3432 3435 3436 02336 dt "256Kbit\r\n", 0 344B 3462 3469 3474 340D 340A 3400 086C 3435 3431 3432 02337 dt "512Kbit\r\n", 0 344B 3462 3469 3474 340D 340A 3400 0876 3431 344D 3462 02338 dt "1Mbit\r\n", 0 3469 3474 340D 340A 3400 087E 3432 344D 3462 02339 dt "2Mbit\r\n", 0 3469 3474 340D 340A 3400 0886 3434 344D 3462 02340 dt "4Mbit\r\n", 0 3469 3474 340D 340A 3400 088E 3438 344D 3462 02341 dt "8Mbit\r\n", 0 3469 3474 340D 340A 3400 02342 0896 0782 02343 type_s addwf PCL, F 0897 3452 344F 344D 02344 dt "ROM ONLY\r\n", 0 3420 344F 344E 344C 3459 340D 340A 3400 08A2 3452 344F 344D 02345 dt "ROM+MBC1\r\n", 0 342B 344D 3442 3443 3431 340D 340A 3400 08AD 3452 344F 344D 02346 dt "ROM+MBC1+SRAM\r\n", 0 342B 344D 3442 3443 3431 342B 3453 3452 3441 344D 340D 340A 3400 08BD 3452 344F 344D 02347 dt "ROM+MBC1+SRAM+BATT\r\n", 0 342B 344D 3442 3443 3431 342B 3453 3452 3441 344D 342B 3442 3441 3454 3454 340D 340A 3400 08D2 3455 344E 344B 02348 dt "UNKNOWN\r\n", 0 344E 344F 3457 344E 340D 340A 3400 08DC 3452 344F 344D 02349 dt "ROM+MBC2\r\n", 0 342B 344D 3442 3443 3432 340D 340A 3400 08E7 3452 344F 344D 02350 dt "ROM+MBC2+BATT\r\n", 0 342B 344D 3442 3443 3432 342B 3442 3441 3454 3454 340D 340A 3400 02351 0900 02352 org (( $ + 0x100 ) & 0x0f00) 0900 0782 02353 type_t addwf PCL, F ; type => has RAM table 0901 3400 3400 3401 02354 dt 0, 0, 1, 1, 0, 2, 2 ; 0: none, 1:SRAM, 2:MBC2 3401 3400 3402 3402 02355 0908 0782 02356 rom_t addwf PCL, F ; romt => N of bank table 0909 3402 3404 3408 02357 dt 2, 4, 8, 16, 32, 64 3410 3420 3440 02358 090F 0782 02359 ram_t addwf PCL, F ; ramt => N of bank table 0910 3400 3400 3401 02360 dt 0, 0, 1, 4, 16 3404 3410 02361 0915 0782 02362 only_s addwf PCL, F 0916 344E 346F 3420 02363 dt "No SRAM\r\n", 0 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 36 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 3453 3452 3441 344D 340D 340A 3400 02364 0920 0782 02365 unknw_s addwf PCL, F 0921 3455 346E 346B 02366 dt "Unknown cartridge type\r\n", 0 346E 346F 3477 346E 3420 3463 3461 3472 3474 3472 3469 3464 3467 3465 3420 3474 3479 3470 3465 340D 340A 3400 02367 093A 0782 02368 begin_s addwf PCL, F 093B 3462 3465 3467 02369 dt "begin 644 ", 0 3469 346E 3420 3436 3434 3434 3420 3400 02370 0946 0782 02371 partf_s addwf PCL, F 0947 3461 342E 346F 02372 dt "a.out\r\n", 0 3475 3474 340D 340A 3400 02373 094F 0782 02374 end_s addwf PCL, F 0950 3460 340D 340A 02375 dt "`\r\nend\r\n", 0 3465 346E 3464 340D 340A 3400 02376 0959 0782 02377 err_s addwf PCL, F 095A 3445 3472 3472 02378 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 02379 0970 0782 02380 ver_s addwf PCL, F 0971 3447 3442 3420 02381 dt "GB SerialReader V1.0c\r\n" 3453 3465 3472 3469 3461 346C 3452 3465 3461 3464 3465 3472 3420 3456 3431 342E 3430 3463 340D 340A 0988 3443 346F 3470 02382 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 02383 09A8 0782 02384 norom_s addwf PCL, F 09A9 3455 346E 346B 02385 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 02386 09CD 0782 02387 wbeg_s addwf PCL, F 09CE 340D 344C 346F 02388 dt "\rLoading.. ", 0 3461 3464 3469 346E 3467 342E 342E 3420 3400 02389 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 37 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 09DA 0782 02390 wend_s addwf PCL, F 09DB 340D 3457 3461 02391 dt "\rWaiting end", 0 3469 3474 3469 346E 3467 3420 3465 346E 3464 3400 02392 09E8 0782 02393 done_s addwf PCL, F 09E9 340D 3464 346F 02394 dt "\rdone.", 0x1b, "[K\r\n", 0 346E 3465 342E 341B 345B 344B 340D 340A 3400 02395 02396 0A00 02397 org (( $ + 0x100 ) & 0x0f00) 0A00 0782 02398 disc_s addwf PCL, F 0A01 340D 340A 3443 02399 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 02400 0A19 0782 02401 cenab_s addwf PCL, F 0A1A 340D 340A 3443 02402 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 02403 0A31 0782 02404 ninfo_s addwf PCL, F 0A32 340D 340A 3449 02405 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 02406 0A4A 0782 02407 help1_s addwf PCL, F 0A4B 3443 346F 346D 02408 dt "Commands:\r\n" 346D 3461 346E 3464 3473 343A 340D 340A 0A56 3420 3468 3409 02409 dt " h\t\t\tHelp\r\n" 3409 3409 3448 3465 346C 3470 340D 340A 0A61 3420 3469 3409 02410 dt " i\t\t\tInfo\r\n" 3409 3409 3449 346E 3466 346F 340D 340A 0A6C 3420 3469 3472 02411 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 0A80 3420 3464 3473 02412 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 0A9C 3420 3475 3473 02413 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 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 38 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 3475 3475 3465 340D 340A 0AB6 3420 3462 3472 02414 dt " br BANK\t\tchange ROM Bank\r\n" 3420 3442 3441 344E 344B 3409 3409 3463 3468 3461 346E 3467 3465 3420 3452 344F 344D 3420 3442 3461 346E 346B 340D 340A 0AD1 3420 3462 3473 02415 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 02416 0B00 02417 org (( $ + 0x100 ) & 0x0f00) 0B00 0782 02418 help2_s addwf PCL, F 0B01 3420 3472 3464 02419 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 0B16 3420 3477 3464 02420 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 0B31 3420 3464 346D 02421 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 0B50 3420 3464 346C 02422 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 0B73 3420 3475 3470 02423 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 0B94 3420 3463 3472 02424 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 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 39 gbread2c LOC OBJECT CODE LINE SOURCE TEXT VALUE 344F 344D 3420 3443 3468 3465 3463 346B 3453 3455 344D 340D 340A 0BB9 3420 3463 3473 02425 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 0BD4 3420 345B 3445 02426 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 02427 0BF1 0782 02428 abort_s addwf PCL, F 0BF2 340D 340A 3461 02429 dt "\r\naborted.\r\n", 0 3462 346F 3472 3474 3465 3464 342E 340D 340A 3400 02430 02431 end MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 40 gbread2c SYMBOL TABLE LABEL VALUE ADCON0 0000001F ADCON1 0000009F ADCS0 00000006 ADCS1 00000007 ADIE 00000006 ADIF 00000006 ADON 00000000 ADRES 0000001E ARG0H 00000039 ARG0L 0000003A ARG1H 0000003B ARG1L 0000003C ARG2H 0000003D ARG2L 0000003E ARG3H 0000003F ARG3L 00000040 ARGC 0000002B ARGCT 0000002C ARGP 00000029 ARGPP 0000002A ARGT_H 00000041 ARGT_L 00000042 ASCBUF 000000A0 AccIdle 00000757 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 CHS0 00000003 CHS1 00000004 CHS2 00000005 CKP 00000004 CKSUMH 0000004B CKSUML 0000004C CMP_H 00000043 CMP_L 00000044 COLUMN 00000032 CONVT1 00000025 CONVT2 00000026 CREN 00000004 CRSIZE 0000005F CSRC 00000007 CSSIZE 0000005E CSUM_H 00000061 CSUM_L 00000060 CTFLAG 00000034 CTITLE 0000004D CTYPE 0000005D CUBANK 00000031 C_CAR 00000000 C_RAM 00000002 C_ROM 00000001 C_down 00000211 C_dump 0000045F C_help 00000118 C_info 0000013D C_read 0000044A C_sbR 00000453 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 41 gbread2c SYMBOL TABLE LABEL VALUE C_sbS 00000459 C_up 00000302 C_wd 00000442 CalcSUM 000004B1 ChkCart 000003ED D 00000005 DATA_ADDRESS 00000005 DC 00000001 DMCURH 00000049 DMCURL 0000004A DMODE 00000027 D_A 00000005 D_ACT 00000003 D_ADRH 00000045 D_ADRL 00000046 D_CKSM 00000005 D_ECHO 00000001 D_INFO 00000006 D_MBC2 00000004 D_PROT 00000002 D_SRAM 00000000 Dump16 000004F0 E_ADRH 00000047 E_ADRL 00000048 F 00000001 FERR 00000002 FSR 00000004 GBADRH 0000002D GBADRL 0000002E GBBANK 00000030 GBDATA 0000002F GBread 00000735 GBwrite 00000746 GIE 00000007 GO 00000002 GO_DONE 00000002 GenFN 000004D6 GetC 0000079C GetCNP 000007A2 GetInfo 000003FC GetS 00000770 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 000006FB MBCoff 00000706 NOT_A 00000005 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 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 42 gbread2c SYMBOL TABLE LABEL VALUE PEIE 00000006 PIE1 0000008C PIE2 0000008D PIR1 0000000C PIR2 0000000D PORTA 00000005 PORTB 00000006 PORTC 00000007 PORTD 00000008 PORTE 00000009 PR2 00000092 PRINT PRINTP 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 0000076A PutLF 000007A8 PutS 00000762 R 00000002 RAMBank 00000715 RAMMAX 4 RAMTYPE 00000033 RBIE 00000003 RBIF 00000000 RC8_9 00000006 RC9 00000006 RCD8 00000000 RCIE 00000005 RCIF 00000005 RCREG 0000001A RCSTA 00000018 READ_WRITE 00000002 ROMBank 0000070E ROMMAX 5 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 SSPIE 00000003 SSPIF 00000003 SSPM0 00000000 SSPM1 00000001 SSPM2 00000002 SSPM3 00000003 SSPOV 00000006 SSPSTAT 00000094 STATUS 00000003 SYNC 00000004 SetAdr 0000071C T0CS 00000005 T0IE 00000005 T0IF 00000002 T0SE 00000004 T1CKPS0 00000004 T1CKPS1 00000005 T1CON 00000010 T1INSYNC 00000002 T1OSCEN 00000003 T2CKPS0 00000000 T2CKPS1 00000001 T2CON 00000012 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 43 gbread2c SYMBOL TABLE LABEL VALUE 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 TYPEMAX 6 TurnC 00000570 UA 00000001 UASCP 00000038 UDec3 000006C2 UDecChG 00000699 UEnc3 0000069E UEncChP 00000691 UUDAT1 00000035 UUDAT2 00000036 UUDAT3 00000037 UUDump 00000590 UURecv 0000052A VAR1 00000020 VAR2 00000021 VAR3 00000022 VAR4 00000023 VAR5 00000024 W 00000000 WCOL 00000007 Wbegin 000003AD Wend 000003CD XTAL 14745600 Z 00000002 _BODEN_OFF 00003FBF _BODEN_ON 00003FFF _CP_50 00002AEF _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 00000BF1 atoi 00000648 atoi1 00000661 atoi2 00000666 atoi3 00000669 baud ( ((10 * XTAL / (16 * X)) + 5) / 10 - 1 ) baud_l ( ((10 * XTAL / (64 * X)) + 5) / 10 - 1 ) begin_s 0000093A cabort 0000038A cdmp0a 0000046B MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 44 gbread2c SYMBOL TABLE LABEL VALUE cdmp0b 00000475 cdmp0c 00000481 cdmp1 0000048D cdmp2 00000497 cdmp2a 0000049F cdmp3 000004AB cenab_s 00000A19 cmd1 000005E4 cmd1b 000005EC cmd1c 000005F4 cmd2 000005F7 cmd3 000005FD cmd4 00000611 cmd4a 0000061D cmd5 0000063B cmdpar 000005DF csum1 000004BC csum2 000004D1 disc_s 00000A00 dmp0 000004FC dmp0a 00000503 dmp1 0000050E dmp2 00000510 dmp3 00000511 dmp3a 0000051B dmp4 00000523 done_s 000009E8 down0 00000226 down1 00000250 down3 00000256 down3b 00000271 down4 00000286 down4b 000002B3 down5 000002BE down5a 000002CD down6 000002D5 down6a 000002F1 down6b 000002FD end_s 0000094F err_s 00000959 gc2 0000079E genf0 000004DE genf1 000004E8 genf2 000004EA genf3 000004EB ginf1 000003FA ginf2 00000402 gs1 00000773 gs2 0000077D gs2b 00000783 gs3 00000795 gs4 00000797 help1_s 00000A4A help2_s 00000B00 hex2pr 0000067B inf1_s 00000808 inf2_s 00000811 inf3_s 0000081A inf4_s 00000823 inf5_s 0000082C info1 0000014C info2 0000015C info3 00000166 info3a 0000017B info3b 00000193 info3c 000001A7 info3d 000001BF info3e 000001D3 info3f 000001EB itoa 0000066E itoa1 00000678 main 00000029 merror 0000010B mloop0b 0000003E mloop0c 00000057 mloop0d 00000069 mloop0e 0000006A mloop0f 0000007A mloop1 00000029 mloop1b 00000091 mloop1d 00000096 mloop1e 000000A1 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 45 gbread2c SYMBOL TABLE LABEL VALUE mloop1f 000000AB mloop2 000000B6 mloop2b 000000C3 mloop2c 000000CC mloop3 000000D5 mloop4 0000010B mloop5 000000E2 mloop5b 000000ED mloop5c 000000F7 mloop5d 00000100 ninfo_s 00000A31 norom 0000013F norom_s 000009A8 nosram 0000023C only_s 00000915 partf_s 00000946 prom_s 00000800 prunknw 00000435 ps1 00000764 ram_t 0000090F rams_s 00000835 rom_t 00000908 roms_s 00000861 sram0 0000021A sram1 0000022B sram1b 00000249 sram2 0000025D sram3 0000025E sram3a 0000027F sram3b 00000285 sram3c 00000291 sram3d 0000029A sram4 0000029D sram4a 000002AE sram5 000002A6 sram6 000002BC start 00000001 tc1 00000578 tc2 0000057F tc3 00000586 tc4 0000058C tc5 0000058E type_s 00000896 type_t 00000900 uenc1 00000696 uenc2 00000697 unknown 00000224 unknw_s 00000920 up1 00000313 up10 00000372 up11 00000376 up12 0000038A up13 00000397 up2 00000315 up2a 00000322 up3 00000329 up4 0000032F up4a 0000033A up5 0000033B up5a 00000346 up5b 0000034F up6 00000352 up7 0000035B up8 00000363 up9 00000370 uud1 00000591 uud1a 0000059B uud2 000005A0 uud3 000005B2 uud4 000005B5 uud5 000005B6 uud5b 000005B8 uud5c 000005BF uud6 000005CE uud7 000005D3 uud9 000005DB uud_r0 000005DB uud_r1 000005DD uurec1 00000531 uurec2 00000538 uurec3 00000544 uurec5 00000548 MPASM 02.15 Released GBREAD2C.ASM 9-30-1998 12:00:32 PAGE 46 gbread2c SYMBOL TABLE LABEL VALUE uurec6 0000054C uurec7 00000558 uurec8 00000566 uurec9 00000569 ver_s 00000970 wbeg2 000003C1 wbeg_s 000009CD wend2 000003E1 wend_s 000009DA 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 0780 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXX--- ---------------- 0800 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0840 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0880 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 08C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXX--------- 0900 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0940 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0980 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 09C0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXX----------- 0A00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0A40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0A80 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0AC0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXX-- ---------------- 0B00 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0B40 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0B80 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX 0BC0 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX- 2000 : -------X-------- ---------------- ---------------- ---------------- All other memory blocks unused. Program Memory Words Used: 2950 Program Memory Words Free: 1146 Errors : 0 Warnings : 1 reported, 0 suppressed Messages : 51 reported, 0 suppressed