| The Datasheet Archive - 100 Million Datasheets from 7500 Manufacturers. |
Included this appendix complete lising monitor program support surouti
Top Searches for this datasheetMonitor Code Listing Included this appendix complete lising monitor program support suroutines located C16B. This code assembled using HASM 3.0, advanced optimizing assembler published Harris Semiconductor. C16BEVAL User's Guide Monitor Code Listing HARRIS Semiconductor (c)1990 1997 68HC05 Assembler Version 3.0.2 Filename: C16BEVAL.LST Source Created: 08/01/97, 06:54 Assembled: 09/08/97, 04:28 00005 00006 aaaaaaaaaaaaa 00007 aH""""HHHH""""Ha 00008 HHHH COPYRIGHT 1995,1996,1997 00009 HARRIS SEMICONDUCTOR 00010 00011 HHHH 00012 HHHH 00013 "HHHHHHHHHHHH" 00014 00015 File: C16BEVAL.S 00016 00017 Version: 00018 00131 C16B Eval Monitor 00132 00133 Christopher Mazzanti 00134 1997 Harris Semiconductor 00135 00145 00149 00150 $000D 00151 $000A 00152 $00C0 StackStart 00153 $001B ;escape character 00154 $003F memEnd ;end memory mask 00155 $002C comma 00156 $0005 ;scl=PD5 00157 $0007 ;sda=PD7 00158 $0007 ddrd ;i2c port DDRA 00159 $00A0 ctlByte ;control byte 24LC65 00160 $001F devMask ;EEPROM device address mask 00161 $001F memMask ;EEPROM device address mask 00162 $0003 eep_cs ;SPI EEPROM 00163 $0000 eep_csp porta ;SPI port port 00164 $0003 eep_port portd ;SPI connected port 00165 $0005 00166 $0004 00167 $0003 mosi 00168 $0002 miso 00169 $0003 spi_port portd 00170 00171 00172 00C0 section ramVars, 00173 00174 00C0 spiInt ;vector location interrupts 00175 00C3 sciInt ;vector location interrupts 00176 00C6 timerInt ;vector location timer interrupts 00177 00C9 irqInt ;vector location interrupts 00178 00179 00CC tempa ;temp location 00180 00CD tempx ;temp location 00181 00CE ramSub1 ;ramSub1-4 used build 00182 00CF ramSub2 ;subroutines accessing memory 00183 00D0 ramSub3 00184 00D1 ramSub4 00185 00D2 stackPtr Monitor Code Listing 00186 00187 00188 00189 00190 00191 00192 00193 00194 00195 00196 00197 00198 00199 00200 00201 00202 00203 00204 00205 00206 00207 00208 00209 00210 00211 00212 00213 00214 00215 00216 00217 00218 00219 00220 00221 00222 00223 00224 00225 00226 00227 00228 00229 00230 00231 00232 00233 00234 00235 00236 00237 00238 00239 00240 00241 00242 00243 00244 00245 00246 00247 00D3 00D4 00D5 00D6 00D7 00D8 00D9 temp1 temp2 temp3 temp4 copTemp flags step cr1st apost escFlag trace pcHi pcLo ;COP temp loc, ;flag register $0000 $0001 $0002 $0003 $0004 $0005 $0006 $0007 ;shows used ;shows current inst. relative branch ;used tracing ;High byte EEPROM data pointer ;Low byte EEPROM data pointer Macro Definitions #macro putString #%1/$100 #%1&$FF ;Display message putMes #endMacro #macro makeLoad #$C6 ramSub1 #$81 ramSub4 ;creates subroutine ;LDA ;RTS #endmacro #macro makeStore #endmacro #macro incRamSub ramSub3 noInc ramSub2 ;increments byte address #$C7 ramSub1 #$81 ramSub4 ;creates subroutine ;LDA ;RTS noInc #endmacro #macro decRamSub ramSub3 nodec ramSub2 #endmacro #macro showIN %1+4 ramSub3 ;decrements byte address nodec C16BEVAL User's Guide 00248 00249 00250 00251 00252 00253 00254 00255 00256 00257 00258 00259 00260 00261 00262 00263 00264 00265 00266 00267 01D8 00268 01D8 00269 01D9 00270 01DA 00271 01DC 00272 01DF 00273 01E2 00274 01E4 00275 01E7 00276 01E9 00277 00278 01EC 00279 [10] 01F3 00280 00281 01F4 00282 [10] 01FB 00283 00284 01FC 00285 01FF 00286 0202 00287 020A 00288 020D 00289 020F 00290 00291 0211 00292 0213 00293 0215 00294 0217 00295 0219 00296 021B 00297 021D 00298 021F 00299 0221 00300 0223 00301 0225 00302 0227 00303 0229 00304 00305 022B 00306 00307 022D 00308 0230 00309 0232 Monitor Code Listing coma #endmacro #macro temp1 showBits put4sp showOut %1+4 temp1 showBits put4sp #endmacro Eval Monitor Code section monitor, endJumpTable #$C0 ;turn option i2cInit ;init EEPROM interface #$30 ;set 19200 baud (8MHz) sciInit bclr trace,flags ;end tracing brclr copf,copcr,noCop ;check reset ;display message putString copMes ;enter monitor mode noCop putString signOn ;enter monitor mode swiVec findSP ;find stack Pointer brclr step,flags,dispRegs break, makeStore ;set subroutine brclr bp2,flags,onlyBP1 ;check temp4 ;temp4 instruction ramSub1 ;restore instruction onlyBP1 #$80 ;clear flags except trace flags flags temp1 ;temp1 high ramSub2 temp2 ;temp2 high ramSub3 temp3 ramSub1 ;temp3 instruction stackPtr ;adjust nodecPCHi ;set stack instruction back noDecPcHi ;see trace mode brclr trace,flags,dispregs pcHi ;dec trace counter traceDone trace complete A6C0 C73FDF CD127E A630 CD09A9 1FD8 091E08 CD0A23 01D840 0BD804 B6D6 BDCE A680 B4D8 B7D8 B6D3 B7CF B6D4 B7D0 B6D5 BDCE BED2 6D05 2602 6A04 6A05 0FD812 3AD9 2703 Monitor Code Listing 00310 00311 00312 00313 00314 00315 00316 00317 00318 00319 00320 00321 00322 00323 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 00337 00338 00339 00340 00341 00342 00343 00344 00345 00346 00347 00348 00349 00350 00351 00352 00353 00354 00355 00356 00357 00358 00359 00360 00361 00362 00363 00364 00365 00366 00367 00368 00369 00370 00371 0234 0237 0239 CC030A traceDone 1FD8 2007 showInfo bclr contTrace trace,flags dispRegs ;else continue trace ;trace done, clear flag ;display command info 023B dispRegs 0242 0244 0247 024A 024C 024F 0251 0253 0256 0257 0259 025C 025F 0262 0264 0267 0269 026C 026F 0271 0273 0275 0277 0279 027B 027D 027F 0281 0283 0285 0287 0289 028B 028D 028F 0291 0293 0295 0297 0299 029B 029D 029F 02A1 02A3 02A5 02A7 02A9 02AB 02AD 3FD8 CD08BC CD09A0 A604 CD0A1C B7D3 A605 CD0A1C B6D3 CD0A6A prompt CD09A0 CD09A0 A63E CD09F8 A62E CD09F8 getCommand CD09D7 A13F 27C8 A10D 27CB A143 2742 A144 2741 A147 2740 A145 2756 A149 27B0 A14C 2737 A14D 2736 A14E 2735 A150 2734 A152 2733 A153 2732 A154 2731 A155 2735 A156 272B getchar #'?' showInfo dispRegs #'C' jmpCont2break #'D' jmpDisassmble #'G' jmpGo #'E' jmpSaveEE #'I' showInfo #'L' jmpDownload #'M' jmpModify #'N' jmpEEMod #'P' jmpShowPorts #'R' jmpModRegs #'S' jmpSingleStep #'T' jmpTrace #'U' jmpUload #'V' jmpView ;get command from terminal show commands show registers breakpoint disassemble from address from address ;save program eeprom show commands download Modify memory crlf crlf #'>' putc #'.' putc flags showRegs crlf getStkA temp1 getStkA temp1 disassemble ;show registers putString infoMes ;dissassemble current instruction ;display command prompt show ports modify registers single step trace instructions view memory block C16BEVAL User's Guide 00372 00373 00374 00375 00376 00377 00378 00379 00380 00381 00382 00383 00384 00385 00386 00387 00388 00389 00390 00391 00392 00393 00394 00395 00396 00397 00398* 00399 00400 00401 00402 00403 00404 00405 00406 00407 00408 00409 00410 00411 00412 00413 00414 00415 00416 00417 00418 00419 00420 00421 00422 00423 00424 00425 00426 00427 00428 00429 00430 00431 00432 00433 02AF 02B1 02B3 02B5 02B8 02BB Monitor Code Listing A157 2730 A63F CD09F8 CD09A0 209F jmpCont2break jmpDisassmble jmpGo jmpDownload jmpModify jmpEEMod jmpShowPorts jmpModRegs jmpSingleStep jmpTrace jmpView jmpSaveEE jmpUload jmpeeview #'W' jmpEEview #'?' putc crlf prompt ;Command found ;display prompt 02BD 02C0 02C3 02C6 02C9 02CC 02CF 02D2 02D5 02D8 02DA 02DD 02E0 02E3 02E6 CC0434 CC0566 CC064F CC05AB CC0682 CC0F1F CC03AA CC06F6 CC0463 2011 CC07B5 CC101C CC10F8 CC0F6B 20FE cont2break Disasm Download Modify EEModify ShowPorts ModRegs SingleStep TraceIt View saveEE uloadEE EEview 02E8 CC025C Trace Traces through instructions. This part trace logic. Here number instructions trace received, stored user registers displayed. Note trace counter uses extra byte pcHi. This because monitor modified singleStep. Trace uses singleStep user program. Returns: None Registers altered: altered: pcHi, flags, tempX Calls: putMes, getAddr, putByte, put4sp, crlf, getStkA, putc Jumps into SingleStep quitTrace prompt ;quit vector traceIt 02EB 02ED 02F4 02F7 1ED8 bset trace,flags ;set trace flag ;show trace prompt CD0867 06D8EE CD09A0 putString traceMes getAddr ;get number inst. trace brset escFlag,flags,quitTrace crlf next line Monitor Code Listing 00434 00435 00436 00437 00438 00439 00440 00441 00442 00443 00444 00445 00446 00447 00448 00449 00450 00451 00452 00453 00454 00455 00456 00457 00458 00459 00460 00461 00462 00463 00464 00465 00466 00467 00468 00469 00470 00471 00472 00473 00474 00475 00476 00477 00478 00479 00480 00481 00482 00483 00484 00485 00486 00487 00488 00489 00490 00491 00492 00493 00494 00495 02FD 02FF 0301 0303 030A 030D 030F 0312 0314 0317 031A 031C 031F 0322 0324 0327 032A 032C 032F 0331 0334 0336 0338 033A 033D 033F 0342 0344 0347 0349 034C 034F 0351 0354 0356 0359 035B 035E 0361 0363 0366 0368 036B 036D 0370 0372 0374 0377 0379 037C 037E 0381 0383 0386 0388 038B 038D 0390 0392 0395 0397 B6D4 27E7 B7D9 contTrace CD09A0 B6D9 CD09B8 A63A CD09F8 CD098F A604 CD0A1C CD09B8 A605 CD0A1C CD09B8 A620 CD09F8 A620 CD09F8 B6D2 AB05 AAC0 CD09B8 A620 CD09F8 A620 CD09F8 A602 CD0A1C CD09B8 A620 CD09F8 A620 CD09F8 A603 CD0A1C CD09B8 A620 CD09F8 A620 CD09F8 A601 CD0A1C B7CD A648 08CD02 A62E CD09F8 A649 06CD02 A62E CD09F8 A64E 04CD02 A62E CD09F8 A65A 02CD02 A62E CD09F8 temp2 quitTrace pcHi putString traceHead brset brset brset brset crlf pcHi putByte #':' putc put4sp getStkA putByte getStkA putByte #$20 putc #$20 putc stackPtr #$c0 putByte #$20 putc #$20 putc getStkA putByte #$20 putc #$20 putc getStkA putByte #$20 putc #$20 putc getStkA tempX #'H' 4,tempX,br25x #'.' putc #'I' 3,tempX,br26x #'.' putc #'N' 2,tempX,br27x #'.' putc #'Z' 1,tempX,br28x #'.' putc ;get number next line ;get trace counter ;and display ;four spaces ;the user regs ;show user ;show user ;show user ;show user ;show user bits br25x br26x br27x br28x C16BEVAL User's Guide 00496 00497 00498 00499 00500 00501 00502 00503 00504 00505 00506 00507 00508 00509 00510 00511 00512 00513 00514 00515 00516 00517 00518 00519 00520 00521 00522 00524 00525 00526 00527 00528 00529 00530 00531 00532 00533 00534 00535 00536 00537 00538 00539 00540 00541 00542 00543 00544 00545 00546 00547 00548 00549 00550 00551 00552 00553 00554 00555 00556 00557 00558 039A 039C 039F 03A1 03A4 03A7 Monitor Code Listing A643 00CD02 A62E CD09F8 CD098F CC0463 br29x brset #'C' 0,tempX,br29x #'.' putc put4sp SingleStep ;single step (shows opcode) 03AA 03AD 03B4 03C0 03CC 03D8 03E4 03EB 03F6 0401 040C 0417 CD09A0 CC025C ShowPorts Displays state ports Returns: None Registers altered: altered: temp1:2 Calls: putMes, put4sp, crlf, showBits ShowPorts crlf next line putString portViewMes showIn porta showIn portb showIn portc showIn portd putString port2mes showOut porta showOut portb showOut portc showOut portd prompt ;and done showBits Local subroutine showPorts. displays byte sent discrete bits, LSB, using character temp1 bits=0 temp2 bits=1. Returns: None Registers altered: altered: tempA Calls: putc showBits temp2 #$08 ;set counter Bitloop #'.' ;load space temp1 ;check rotating through bitIs0 C=0, bit=0 #'0' temp2 ;get port data #$00 bitIs0 putc ;send terminal decx ;dec counter Bitloop Cont2Break breakpoint from user Returns: BP1: address temp1:2, opcode temp3 Registers altered: altered: ramSub1:4, temp1:3 Calls: putMes, getAddr, putByte, put4sp, crlf 041A 041C 041E 0420 0422 0424 0426 0428 042A 042D 042E 0430 B7D4 AE08 A62E 39D3 2406 A630 39D4 A900 CD09F8 26EE Monitor Code Listing 00559 00560 00561 00562 00563 00564 00565 00566 00567 00568 00569 00570 00571 00572 00573 00574 00575 00576 00577 00578 00579 00580 00581 00582 00583 00584 00585 00586 00587 00588 00589 00590 00591 00592 00593 00594 00595 00596 00597 00598 00599 00600 00601 00602 00603 00604 00605 00606 00607 00608 00609 00610 00611 00612 00613 00614 00615 00616 00617 00618 00619 00620 0431 0434 0437 043E 0441 0444 044C 044E 0450 0452 0454 0456 0458 045A 045C 045E 0460 0462 CC025C CD09A0 CD0867 06D8ED B6D3 B7CF B6D4 B7D0 BDCE B7D5 A683 3CCE BDCE 10D8 1BD8 BreakDone prompt cont2break crlf putString breakMes getAddr ;get address from user brset escFlag,flags,breakDone makeLoad ;make subroutine temp1 ;put user address sub. ramSub2 temp2 ramSub3 ramSub1 ;get byte user breakpoint temp3 ;and save #$83 ramSub1 ;lda ramSub1 ;stuff bset step,flags ;set step flag bclr bp2,flags Single Step Single step through program current location This routine uses breakpoints user instructions have least (next location) Branch instructions have (next inst branch loc). address stored temp1:2, opcode replaced stored temp3. address stored ramSub2:3, opcode replaced stored temp4. step flag notify monitor that current breakpoint. set, flag set. Since this routine used part Trace, trace flag should altered. Returns: BP1: address temp1:2, opcode temp3 BP2: address ramSub2:3, opcode temp4 Registers altered: altered: ramSub1:4, temp1:4, tempA, tempX Calls: disassemble SingleStep bset step,flags ;set step flag bclr bp2,flags ;get current instruction info getStkA temp1 getStkA temp1 disassemble ramSub2 ramSub3 tempx ramSub1 temp1 temp2 current (end) current (end) branch relBranch opcode bytecount incRamSub ramSub1 ;inc current inst 0463 0465 0467 0469 046C 046E 0470 0473 0474 0476 10D8 1BD8 A604 CD0A1C B7D3 A605 CD0A1C B6D3 CD0A6 0479 047F B6CE C16BEVAL User's Guide 00621 00622 00623 00624 00625 00626 00627 00628 00629 00630 00631 00632 00633 00634 00635 00636 00637 00638 00639 00640 00641 00642 00643 00644 00645 00646 00647 00648 00649 00650 00651 00652 00653 00654 00655 00656 00657 00658 00659 00660 00661 00662 00663 00664 00665 00666 00667 00668 00669 00670 00671 00672 00673 00674 00675 00676 00677 00678 00679 00680 00681 00682 0481 0483 0485 0487 0489 048B 048D 048F 0491 0493 0495 0497 0499 049B 049D 04A5 04A7 04AA B7D6 A6C6 B7CE BDCE B7D5 3CCE A683 BDCE B6D3 B7CC B6CF B7D3 B6D0 B7D4 Monitor Code Listing A603 CD0A1C temp4 #$C6 ramSub1 ramSub1 temp3 ramSub1 #$83 ramSub1 temp1 tempA ramSub2 temp1 ramSub3 temp2 decRamSub getStkA ;preserve branch location ;get next instruction ;next instruction temp3 ;lda ;force ;move opcode ;get next inst. location ;temp1:2 loc, temp3 inst. ;back last byte current ;get user user ;ramSub1 (STA) ;ramSub2 last byte current inst (HI) ;ramSub3 last byte current inst (LOW) ;ramSub4 (RTI) ;tempA opcode ;tempX byte branch inst returned from disassemble ;temp1 byte next inst ;temp2 byte next inst ;temp3 next inst ;temp4 byte branch inst returned from disassemble user 04AB 04AE 04B1 04B3 04B5 04B7 04B9 04BB 04BD 04BF 04C1 04C3 04C5 04C7 04C9 04CB 04CD 04CF 04D1 04D2 04D4 04D6 04D8 04DA 04DC 0DD803 CC055C noRel B6CC A180 2727 A181 2717 A4FE A1BC 2777 A1CC 275D A1DC 273E A1EC 2729 A1FC 2719 rtsStep 3ACE BED2 E606 B7CF E607 2060 rtiStep 04DE 04E0 04E2 3ACE BED2 E609 ramSub1 stackPtr ;sta ;get return location ;get high byte return ramSub1 stackPtr ramSub2 stepIn1 ;sta ;get return location ;get high byte return ;build subroutine ;get byte return ;and finish tempA #$80 rtiStep #$81 rtsStep #$FE #$BC jdirect #$CC jext #$DC jix2 #$EC jix1 #$FC ;check branch inst. ;RTI ;RTS ;mask ;jmp/jsr direct ;jmp/jsr ;jmp/jsr ;jmp/jsr ;jmp/jsr ;otherwise, brclr rel,flags,noRel calcRel Monitor Code Listing 00683 00684 00685 00686 00687 00688 00689 00690 00691 00692 00693 00694 00695 00696 00697 00698 00699 00700 00701 00702 00703 00704 00705 00706 00707 00708 00709 00710 00711 00712 00713 00714 00715 00716 00717 00718 00719 00720 00721 00722 00723 00724 00725 00726 00727 00728 00729 00730 00731 00732 00733 00734 00735 00736 00737 00738 00739 00740 00741 00742 00743 00744 04E4 04E6 04E8 B7CF E60A 2054 ramSub2 10,x stepIn1 ;build subroutine ;get byte return ;and finish 04EA 04EB 04ED 04EF 04F1 04F3 04F4 04F6 04F8 04FA 04FC 04FE 04FF 0501 0503 B7D6 3FCF BFD0 A683 2063 jix1 3ACE BDCE B7D0 3FCF BBD0 2402 3CCF noInc1 2037 jix2 temp4 ramSub2 ramSub3 #$83 stepIn2 ramSub1 ramSub1 ramSub3 ramSub2 ramSub3 noInc1 ramSub2 stepIn1 ;get ;BP2 ;BP2 ;BP2 ;jam user instruction inst temp4 ramSub2 ramSub3 ;sta ;get offset byte ;put offset ;clear ;move offset ;add offset ;check carry byte 0505 0507 0509 050B 050D 0515 0517 0519 051A 051C 051E 3ACE BDCE B7CD BDCE B7CF BBCD 2402 3CCF noIncTempA2 201C jext ramSub1 ramSub1 tempX decRamSub ramSub1 ramSub2 tempX noIncTempa2 ramSub2 stepIn1 ;sta ;get ;put ;get offset byte offset High offset byte ;store ramSub2 ;move offset ;add offset ;check carry byte 0520 0522 0524 0526 0528 0530 0532 0534 0536 3ACE BDCE B7CD BDCE B7CF B6CD 2006 jdirect ramSub1 ramSub1 tempx decRamSub ramSub1 ramSub2 tempx stepIn1 ;sta ;get ;put ;get addr jump byte tempX High addr jump ;build subroutine ;move tempx into ramSub3 0538 053A 053C 053E 0540 0542 0544 0546 0548 054A 054C 054E 3ACE BDCE 3FCF stepIn1 B7D0 BDCE B7D6 3CCE BED2 E604 B1CF 2607 E605 ramSub1 ramSub1 ramSub2 ramSub3 ramSub1 temp4 ramSub1 stackPtr ramSub2 stuffSWI ;sta ;get addr jump ;high byte branch ;next created ;get user instruction ;store temp4 ;lda ;check branch branch don't stuff C16BEVAL User's Guide 00745 00746 00747 00748 00749 00750 00751 00752 00753 00754 00755 00756 00757 00758 00759 00760 00761 00762 00763 00764 00765 00766 00767 00768 00769 00770 00771 00772 00773 00774 00775 00776 00777 00778 00779 00780 00781 00782 00783 00784 00785 00786 00787 00788 00789 00790 00791 00792 00793 00794 00795 00796 00797 00798 00799 00800 00801 00802 00803 00804 00805 00806 0550 0552 0554 0555 0557 0559 055B B1D0 2601 Monitor Code Listing stuffSWI stepIn2 bset calcRel ramSub3 stuffSWI A683 BDCE 1AD8 #$83 ramSub1 bp2,flags ;force ;set flag 055C 055E 0560 0562 0564 3ACE B6CD B7CF B6D6 20D8 ramSub1 tempx ramSub2 temp4 stepIn1 ;sta ;get ;put ;get high byte branch branch location 0566 0569 0570 0573 0576 0579 057B 057E 0580 0583 0586 0588 058A 058D 0590 0592 0594 0596 0598 059E 05A0 05A2 05A4 05A6 CD09A0 CD0867 06D832 CD09A0 B6D3 CD09B8 B6D4 CD09B8 CD098F B6D3 BED4 CD0A6A CD09D7 A11B 2714 A120 2710 B6CF B7D3 B6D0 B7D4 20CE CC025C 05A8 Disassemble disassembles instructions from input address Returns: None Registers altered: altered: ramSub1:4, temp1:4 Calls: putMes, getAddr, crlf, putByte, put4sp, disassemble disasm crlf putString stAddrmes getAddr ;get start address brset escFlag,flags,doneDisAsm disasmloop crlf temp1 putbyte ;display temp2 ;get addresses putbyte ;display put4sp temp1 temp2 disassemble getChar #esc ;esc quit doneDisasm #$20 doneDisasm incRamSub ;else next address ramSub2 temp1 ramSub3 temp2 disasmLoop doneDisAsm prompt Download download S-record file into Returns: None Registers altered: altered: ramSub1:4, temp1:4 Calls: putMes, getChar, getByte, putc Monitor Code Listing 00807 00808 00809 00810 00811 00812 00813 00814 00815 00816 00817 00818 00819 00820 00821 00822 00823 00824 00825 00826 00827 00828 00829 00830 00831 00832 00833 00834 00835 00836 00837 00838 00839 00840 00841 00842 00843 00844 00845 00846 00847 00848 00849 00850 00851 00852 00853 00854 00855 00856 00857 00858 00859 00860 00861 00862 00863 00864 00865 00866 00867 00868 05AB 05B2 05BA 05BC 05BF 05C2 05C4 05C6 05C8 05CA 05CC 05CE 05D0 05D3 05D5 05D7 05D9 05DB 05DE 05E0 05E2 05E4 A60A CD09F8 CD09D7 A153 270A A10D 27F0 A11B 26F1 205D CD09D7 A131 2719 A139 26E4 CD09D7 A10D 2704 A11B 26F5 05E6 05ED 05F0 05F2 05F4 05F6 05F8 05FA 05FC 05FE 0600 0602 0604 0606 060C 060E 0610 0612 0614 0616 0618 061B 061D 061F 0622 0624 CC025C 3FD3 AD43 A003 27C7 B7D6 AD3B B7CF AD37 B7D0 AD33 BDCE 3AD6 26F2 AD25 33D3 2602 20A7 CD09D7 A153 26F9 CD09D7 A139 26F2 CD09D7 A10D 26F9 0626 0629 062B Download putString dwnLoadMes makeStore ;built store routine sendLF putc sloop getChar ;wait characters #'S' ;all lines begin with checkNext sendLF #esc esc, quit sloop abortS checkNext getChar ;next should #'1' getFrame receive frame #'9' sloop loop waitForEnd getChar ;done, wait doneRec then quit #esc waitForEnd doneRec putString dwnFinMes prompt ;quit getFrame temp1 ;temp1 checksum getByte ;get byte count ;adjust checksum address sloop result zero, quit temp4 ;temp4 byte count getByte ;get high byte address ramSub2 ;store subroutine getByte ;get byte address ramSub3 ;store subroutine FrameLoop getByte ;get data byte ramSub1 ;store memory incRamSub ;increment macro temp4 ;dec byte counter frameLoop ;when zero, frame done getByte ;get checksum byte temp1 ;checksum should recError not, error sloop recError getChar ;wait file #'S' recError getChar #'9' recError lastCR getChar lastCR C16BEVAL User's Guide 00869 00870 00871 00872 00873 00874 00875 00876 00877 00878 00879 00880 00881 00882 00883 00884 00885 00886 00887 00888 00889 00890 00891 00892 00893 00894 00895 00896 00897 00898 00899 00900 00901 00902 00903 00904 00905 00906 00907 00908 00909 00910 00911 00912 00913 00914 00915 00916 00917 00918 00919 00920 00921 00922 00923 00924 00925 00926 00927 00928 00929 00930 062D 0634 Monitor Code Listing abortS CC025C putString dwnFailMes prompt 0637 063A 063C 063F 0641 0643 0646 0648 064A 064C 064E CD09D7 B7D4 CD09D7 B7D5 AED4 CD096F B7D4 BBD3 B7D3 B6D4 getByte local subroutine used Download. gets ASCII chars from terminal, converts them byte updates checksum temp1. Returns: byte temp2, updated checksum temp1 Registers altered: altered: temp1, temp2 Calls: asc2hex getByte getChar ;get character from terminal temp2 ;store conversion getChar ;get next character temp3 #temp2 ;convert asc2hex temp2 ;preserve checksum temp1 ;temp1 checksum temp1 temp2 ;restore byte 064F 0656 0658 065B 065E 0660 0663 0666 0669 066C 066F 0672 0674 0676 0678 067A 067C A604 CD0A1C CD09B8 A605 CD0A1C CD09B8 CD098F CD0867 02D80F 06D80D BED2 B6D3 A43F E704 B6D4 E705 CC025C 067E 067F address. Prompts user address. first, this will execute from current user Returns: None Registers altered: altered: Calls: putMes, getAddr, putByte, put4sp putString goMes ;show current getStkA putbyte getStkA putbyte put4sp getAddr ;get brset cr1st,flags,goNow from current address esc, prompt brset escFlag,flags,quitGo stackPtr temp1 ;else modify #memEnd temp2 goNow user mode quitGo prompt ;quit Monitor Code Listing 00931 00932 00933 00934 00935 00936 00937 00938 00939 00940 00941 00942 00943 00944 00945 00946 00947 00948 00949 00950 00951 00952 00953 00954 00955 00956 00957 00958 00959 00960 00961 00962 00963 00964 00965 00966 00967 00968 00969 00970 00971 00972 00973 00974 00975 00976 00977 00978 00979 00980 00981 00982 00983 00984 00985 00986 00987 00988 00989 00990 00991 00992 0682 0689 068C 068F 0691 0693 0695 0697 069A 069C 069E 06A1 06A3 06A5 06A8 06AB 06B3 06B5 06B8 CD0867 06D832 B6D3 B7D5 B6D4 B7D6 CD09A0 B6D5 B7CF CD09B8 B6D6 B7D0 CD09B8 CD098F BDCE CD09B8 CD098F CD0867 07D803 Modify modify memory locations Returns: None Registers altered: altered: ramSub1:4, temp1:4 Calls: putMes, getAddr, putByte, put4sp, crlf Modify putString stAddrMes getAddr ;get start address brset escFlag,flags,quitMod temp1 ;put addresses temp3:4 temp3 temp2 temp4 modLoop crlf ;next line temp3 ;display address ramSub2 putbyte temp4 ramSub3 putbyte put4sp spaces makeLoad ;built store routine ramSub1 ;get current memory putbyte ;and display put4sp brclr quitMod br80 getAddr escFlag,flags,br80 prompt 1st, next previous ;built store routine ;get data escFlag, quit 06BB 06BE 06C1 06C4 06C7 06CA 06D2 06D4 06D6 06D8 06DA 06DC CC025C 02D817 04D822 B6D5 B7CF B6D6 B7D0 B6D4 BDCE incNext 3CD6 26B5 3CD5 finishMod B6D5 A43F B7D5 20AB decNext 3DD6 2602 3AD5 NoDecHigh 3AD6 20EE brset cr1st,flags,incNext brset apost,flags,decNext makeStore temp3 ramSub2 temp4 ramSub3 temp2 ramSub1 temp4 modLoop temp3 temp3 #memEnd temp3 modLoop temp4 noDecHigh temp3 temp4 finishMod ;get value store ;and execute ;inc next address ;loop byte 06DE 06E0 06E2 06E4 06E6 06E8 ;mask memory ;and loop 06EC 06EE 06F0 06F2 06F4 C16BEVAL User's Guide 00993 00994 00995 00996 00997 00998 00999 01000 01001 01002 01003 01004 01005 01006 01007 01008 01009 01010 01011 01012 01013 01014 01015 01016 01017 01018 01019 01020 01021 01022 01023 01024 01025 01026 01027 01028 01029 01030 01031 01032 01033 01034 01035 01036 01037 01038 01039 01040 01041 01042 01043 01044 01045 01046 01047 01048 01049 01050 01051 01052 01053 01054 Monitor Code Listing 06F6 06F9 0700 0703 0705 0707 0709 070B 070D 070F 0711 0713 0715 0717 071A 0721 0723 0726 0729 072B 072E 0731 0734 0737 073A 073D 073F 0741 0743 0745 0747 0749 074B 0752 0754 0757 075A 075D 0760 0763 0766 0768 076A 076C 076E 0775 0777 077A 077D CD08BC CD09D7 A150 2713 A141 2740 A158 275F A143 277E A11B 26DF CC025C A604 CD0A1C CD09B8 A605 CD0A1C CD09B8 CD098F CD0867 07D803 CC025C BED2 B6D3 A43F E704 B6D4 E705 2067 A602 CD0A1C CD09B8 CD098F CD0867 07D803 CC025C BED2 B6D4 E702 2044 A603 CD0A1C CD09B8 CD098F ModRegs modify user registers Returns: None Registers altered: altered: User stack locations Calls: putMes, getAddr, getChar, putByte, getStkA modRegs showRegs ;display registers putString regMes getchar ;get register modify #'P' ;modify modPC #'A' ;modify modA #'X' ;modify modX #'C' ;modify modCC #esc esc, quit modRegs other, prompt again prompt modPC putString pcModMes ;show current getStkA putbyte getStkA putbyte put4sp getAddr ;get brclr escFlag,flags,br89 prompt br89 stackPtr temp1 ;modify #memEnd temp2 regModDone ;and done modA putString AModMes ;show current getStkA putbyte put4sp getAddr ;get brclr escFlag,flags,br90 prompt br90 stackPtr temp2 regModDone ;and done modX putString XModMes ;show current getStkA putbyte put4sp Monitor Code Listing 01055 01056 01057 01058 01059 01060 01061 01062 01063 01064 01065 01066 01067 01068 01069 01070 01071 01072 01073 01074 01075 01076 01077 01078 01079 01080 01081 01082 01083 01084 01085 01086 01087 01088 01089 01090 01091 01092 01093 01094 01095 01096 01097 01098 01099 01100 01101 01102 01103 01104 01105 01106 01107 01108 01109 01110 01111 01112 01113 01114 01115 01116 0780 0783 0786 0789 078B 078D 078F 0791 0798 079A 079D 07A0 07A3 07A6 07A9 CD0867 07D803 CC025C br91 BED2 B6D4 E703 2021 modCC A601 CD0A1C CD09B8 CD098F CD0867 07D803 CC025C br92 BED2 B6D4 E701 regModDone CC0242 brclr getAddr escFlag,flags,br91 prompt stackPtr temp2 regModDone ;get ;and done putString CCModMes getStkA putbyte put4sp getAddr brclr escFlag,flags,br92 prompt stackPtr temp2 dispRegs ;show current ;get 07AC 07AE 07B0 07B2 07B5 07BC 07BF 07C2 07C5 07C7 07C9 07CB 07CD 07CF 07D1 07D8 CD0867 07D803 CC025C B6D3 A43F B7D5 B6D4 A4F0 B7D6 CD0867 07D803 CC025C 07DB 07DE 07E1 07E8 07EA 07EC 07EE 07F0 07F2 07F4 B6D3 A43F B7D3 B6D5 B7CF B6D6 B7D0 CD09A0 07F6 View diplays block memory, bytes time Returns: None Registers altered: altered: ramSub1:4, temp1:4, tempX Calls: putMes, getAddr, putByte, put4sp, putc, crlf View putString stAddrMes getAddr ;get start address ;check escFlagape flag brclr escFlag,flags,viewOn prompt viewOn temp1 ;move start address from #memEnd ;mask memory boundary temp3 ;temp1:2 temp3:4 temp2 #$F0 ;mask boundary temp4 putString fiAddrMes getAddr ;get final address ;check escFlagape flag brclr escFlag,flags,viewOn2 prompt viewOn2 putString viewMes temp1 #memEnd ;mask address memory temp1 temp3 ramSub2 ;build load subroutine temp4 ramSub3 viewLine crlf C16BEVAL User's Guide 01117 01118 01119 01120 01121 01122 01123 01124 01125 01126 01127 01128 01129 01130 01131 01132 01133 01134 01135 01136 01137 01138 01139 01140 01141 01142 01143 01144 01145 01146 01147 01148 01149 01150 01151 01152 01153 01154 01155 01156 01157 01158 01159 01160 01161 01162 01163 01164 01165 01166 01167 01168 01169 01170 01171 01172 01173 01174 01175 01176 01177 01178 07F9 07FB 07FD 07FF 0802 0804 0807 080A 080C 080F 0811 0814 081A 081C 081E 0820 0822 0824 0826 0828 082A 082D 082F 0831 0833 0835 0837 Monitor Code Listing A610 B7CD B6CF CD09B8 B6D0 CD09B8 CD098F viewLoop A620 CD09F8 BDCE CD09B8 3ACD 26EC dispASCII B6D5 B7CF B6D6 B7D0 A610 B7CD CD098F viewASCII BDCE A120 2506 A17F 2202 2002 ASCmask A62E noASCmask CD09F8 3ACD 26E5 B6CF B7D5 B6D0 B7D6 B6D3 B1CF 22A0 2506 B6D4 B1D0 2498 viewDone CD09A0 CC025C CC025C #$10 tempX ramSub2 putbyte ramSub3 putByte put4sp ;use tempX counter ;display address, begin line #$20 putc ramSub1 putByte incRamSub tempX viewLoop temp3 ramSub2 temp4 ramSub3 #$10 tempX put4sp ramSub1 #$20 ASCmask #$7F ASCmask noASCmask #'.' ;put space ;get byte from memory ;and display ;increment subroutine ;decrement counter ;loop full line ;load beginning address again ;use tempX counter ;put four spaces ;get byte from memory <$20, send period >$7F, send period 0839 083B 083E 0844 0846 0848 084A 084C 084E 0850 0852 0854 0856 0858 085A 085C putc incRamSub tempX viewASCII ramSub2 temp3 ramSub3 temp4 temp1 ramSub2 viewLine viewDone temp2 ramSub3 viewLine crlf prompt prompt ;and display ascii ;increment subroutine ;decrement counter ;loop full line ;store start line temp3:4 ;check block range ;compare against temp1 ramSub2, loop temp1 ramSub2, quit ;compare lower bytes temp2 ramSub3, loop 085E 0861 0864 getAddr gets numeric data from terminal. This routine will take last four characters entered from terminal. checking done invalid characters. first data entered), cr1st flag will set. <esc> time apost flags will set, respectively. Monitor Code Listing 01179 01180 01181 01182 01183 01184 01185 01186 01187 01188 01189 01190 01191 01192 01193 01194 01195 01196 01197 01198 01199 01200 01201 01202 01203 01204 01205 01206 01207 01208 01209 01210 01211 01212 01213 01214 01215 01216 01217 01218 01219 01220 01221 01222 01223 01224 01225 01226 01227 01228 01229 01230 01231 01232 01233 01234 01235 01236 01237 01238 01239 01240 0867 B6D8 0869 A4F1 086B B7D8 086D 18D8 086F A630 0871 B7CE 0873 B7CF 0875 B7D0 0877 B7D1 0879 087C 087E 0880 0882 0884 0886 0888 088A 088C 088E 0890 0892 0894 0896 0898 089A 089C 089E CD09D7 A10D 2720 A11B 2732 A127 2731 13D8 B7CC B6CF B7CE B6D0 B7CF B6D1 B7D0 B6CC B7D1 19D8 20D9 09D802 12D8 AECE CD096F B7D3 AED0 CD096F B7D4 19D8 16D8 14D8 08A0 08A3 08A5 08A7 08AA 08AC 08AE 08B1 08B3 08B5 08B6 08B8 08B9 08BB Returns: Address from terminal temp1:temp2 Registers altered: altered: temp1:2, ramSub1:4, tempA, flags Calls: asc2hex getAddr flags ;clear escFlag, cr1st apost flags #~(2!escFlag+2!cr1st+2!apost) flags bset gp,flags first char #$30 ;pad with ramSub1 ;temp storage addresses ramSub2 ramSub3 ramSub4 getNextAddr getchar ;get character ;check carriage return calcAddr calc return #esc escHit escFlag, quit #$27 apostHit apost, return bclr cr1st,flags tempA ;store char ramSub ramSub2 ;shift chars ramSub1 ramSub3 ramSub2 ramSub4 ramSub3 tempA ramSub4 bclr gp,flags ;clear first time flag getNextAddr ;loop again calcAddr brclr gp,flags,notFirst ;check first char bset cr1st,flags char notFirst #ramSub1 ;calculate high byte asc2hex temp1 ;store return #ramSub3 ;calculate byte asc2hex temp2 bclr gp,flags escHit bset escFlag,flags ;set flag return apostHit bset apost,flags ;set flag return showRegs Displays internal registers 6805. registers displayed user's registers stacked from monitor SWI. Returns: None Registers altered: altered: tempX C16BEVAL User's Guide 01241 01242 01243 01244 01245 01246 01247 01248 01249 01250 01251 01252 01253 01254 01255 01256 01257 01258 01259 01260 01261 01262 01263 01264 01265 01266 01267 01268 01269 01270 01271 01272 01273 01274 01275 01276 01277* 01278 01279 01280 01281 01282 01283 01284 01285* 01286 01287 01288 01289 01290 01291 01292 01293 01294 01295 01296 01297 01298 01299 01300 01301 01302 Monitor Code Listing 08BC 08BF 08C2 08C4 08C7 08C9 08CC 08CE 08D1 08D3 08D6 08D9 08DB 08DE 08E1 08E4 08E6 08E9 08EB 08EE 08F0 08F3 08F5 08F7 08F9 08FC 08FF 0901 0904 0906 0909 090B 090E 0911 0913 0915 0918 091A 091D 091F 0922 0925 0927 0929 092C 092E 0931 0933 0936 0938 093B 093D 093F 0942 0944 0947 0949 094C 094E CD09A0 CD09A0 A650 CD09F8 A643 CD09F8 A63D CD09F8 A604 CD0A1C CD09B8 A605 CD0A1C CD09B8 CD098F A653 CD09F8 A650 CD09F8 A63D CD09F8 B6D2 AB05 AAC0 CD09B8 CD098F A641 CD09F8 A63D CD09F8 A602 CD0A1C CD09B8 AD7C A658 CD09F8 A63D CD09F8 A603 CD0A1C CD09B8 AD68 A643 CD09F8 A643 CD09F8 A63D CD09F8 A601 CD0A1C B7CD A648 08CD02 A62E CD09F8 A649 06CD02 A62E CD09F8 Calls: crlf, getStkA, putByte, putc, put4sp showRegs crlf crlf #'P' ;display program counter putc #'C' putc #'=' putc getStkA putbyte getStkA putbyte put4sp #'S' ;display stack pointer putc #'P' putc #'=' putc stackPtr #$05 ;adjust monitor #$c0 ;mask stack space putbyte put4sp #'A' ;display register putc #'=' putc getStkA putbyte put4sp #'X' ;display register putc #'=' putc getStkA putbyte put4sp #'C' ;display putc #'C' putc #'=' putc getStkA tempX #'H' brset 4,tempX,br25 #'.' br25 putc #'I' brset 3,tempX,br26 #'.' br26 putc Monitor Code Listing 01303 01304 01305 01306 01307 01308 01309 01310 01311 01312 01313 01314 01315 01316 01317 01318 01319 01320 01321 01322 01323 01324 01325 01326 01327 01328 01329 01330 01331 01332 01333 01334 01335 01336 01337 01338 01339 01340 01341 01342 01343 01344 01345 01346 01347 01348 01349 01350 01351 01352 01353 01354 01355 01356 01357 01358* 01359 01360* 01361 01362* 01363 01364* 0951 0953 0956 0958 095B 095D 0960 0962 0965 0967 096A 096C A64E 04CD02 A62E CD09F8 A65A 02CD02 A62E CD09F8 A643 00CD02 A62E CC09F8 br27 br28 br29 brset brset brset #'N' 2,tempX,br27 #'.' putc #'Z' 1,tempX,br28 #'.' putc #'C' 0,tempX,br29 #'.' putc 096F 0971 0973 0975 0977 0979 097B 097D 097E 0980 0982 0984 0986 0988 0989 098A 098B 098C 098E E601 A030 A10A 2502 A007 A40F B7CC A030 A10A 2502 A007 A40F BBCC asc2hex converts ASCII bytes located into byte, returned Returns: Registers altered: altered: tempA Calls: None asc2hex ;get #$30 ;subtract #$0A 0-9, more subtracting lsnDone #$07 ;else subrtact another lsnDone #$0F tempA ;get #$30 ;subtract #$0A 0-9, more subtracting msnDone #$07 ;else subrtact another msnDone #$0F ;mask nibble lsla lsla lsla lsla ;shift high nibble tempA ;put nibbles together put4sp sends four spaces terminal Returns: None Registers altered: altered: None Calls: None put4sp #$20 putc #$20 putc #$20 putc #$20 putc 098F 0991 0993 0995 0997 0999 099B 099D A620 AD65 A620 AD61 A620 AD5D A620 AD59 C16BEVAL User's Guide 01365 01366 01367 01368 01369 01370 01371 01372 01373 01374 01375 01376 01377* 01378 01379* 01380 01381 01382 01383 01384 01385 01386 01387 01388 01389 01390 01391 01392 01393 01394 01395 01396 01397 01398 01399 01400 01401 01402 01403 01404 01405 01406 01407 01408 01409 01410 01411 01412 01413 01414 01415 01416 01417 01418 01419 01420 01421 01422* 01423 01424 01425 01426 099F Monitor Code Listing CRLF sends carriage return line feed terminal Returns: None Registers altered: altered: None Calls: None crlf ;print cr/lf putc putc sciInit This subroutine initializes SCI. value when called used BAUD rate register. character returned Returns: None Registers altered: scsr, scdat, sccr1, sccr2 altered: None Calls: None sciInit baud ;set baud scsr ;set scdat sccr1 sccr2 bset te,sccr2 ;set transmitter bset re,sccr2 ;set receiver putByte puts byte sent terminal ASCII characters. Returns: None Registers altered: altered: tempA Calls: putc putByte tempA ;preserve value lsra lsra lsra lsra ;shift upper nibble lower #$30 ;shift (ASCII $30) #$3A ascDone 0-9, quit #$07 ;else ascDone putc ;send high nibble terminal tempA ;get byte (agian) #$0F ;mask nibble #$30 ;shift (ASCII $30) 09A0 09A2 09A4 09A6 09A8 A60D AD54 A60A AD50 09A9 09AB 09AD 09AF 09B1 09B3 09B5 09B7 B70D B610 B611 3F0E 3F0F 160F 140F 09B8 09BA 09BB 09BC 09BD 09BE 09C0 09C2 09C4 09C6 09C8 09CA 09CC 09CE B7CC AB30 A13A 2502 AB07 AD30 B6CC A40F AB30 Monitor Code Listing 01427 01428 01429 01430* 01431 01432 01433 01434 01435 01436 01437 01438 01439 01440 01441 01442 01443 01444 01445 01446 01447 01448 01449 01450 01451 01452 01453 01454 01455 01456* 01457 01458 01459 01460 01461 01462 01463 01464 01465 01466 01467 01468 01469 01470 01471 01472 01473 01474 01475 01476 01477 01478 01479 01480 01481 01482 01483 01484 01485 01486 01487 01488 09D0 09D2 09D4 09D6 2502 AB07 ascDone2 AD22 ascDone2 #$07 putc 0-9, quit ;else ;send high nibble terminal 09D7 09DA 09DD 09DF 09E1 09E3 09E5 CD1AE6 0B10FA B610 A40E 2604 B611 2004 B610 B611 AD0B A161 2506 A17A 2202 A020 09E7 09E9 09EB 09ED 09EF 09F1 09F3 09F5 09F7 getchar getchar gets ASCII character from terminal. character converted uppercase, echoed term returned Returns: Charcter received Registers altered: altered: None Calls: None getChar clrCop ;reset watchdog brclr rdrf,scsr,getChar ;wait received byte scsr ;check error #$0E txError scdat error, byte toUpper txerror scsr scdat toUpper putc #$61 ;see tudone lower, quit #$7A ;see tudone higher, quit #$20 ;otherwise, subtract tudone 09F8 09FA 09FD 0A00 B711 CD1AE6 0F10FA putc putc sends ASCII character sent terminal SCI. Returns: None Registers altered: scdat altered: None Calls: None putc scdat waitTx clrCop brclr tdre,scsr,waitTx ;wait tx'ed putMes putMes sends string characters terminal address message sent putMes A:X, where upper byte message address lower byte. message must with $00. C16BEVAL User's Guide 01489 01490 01491 01492 01493 01494 01495 01496 01497 01498 01499 01500 01501 01502* 01503 01504 01505 01506 01507 01508 01509 01510 01511 01512 01513 01514 01515 01516 01517 01518 01519 01520 01521 01522 01523 01524 01525 01526 01527 01528 01529 01530 01531 01532 01533 01534 01535 01536 01537 01538 01539 01540 01541 01542 01543 01544 01545 01546 01547 01548 01549 01550 Monitor Code Listing Returns: None Registers altered: altered: ramSub1-4 Calls: putc putMes 0A01 0A03 0A05 0A0D 0A0F 0A11 0A13 0A19 B7CF BFD0 mesLoop BDCE 270A ADE5 20F2 putMesDone 0A1B getStkA given offset getStkA returns address byte stack value value stack pointer should found before hand stored stackPtr before calling Returns: Registers altered: altered: None Calls: None getStkA stackPtr ;add offset StkPtr #$c0 ;adjust wrap findSP Finds current stack pointer returns stackPtr Returns: Stack pointer stackPtr Registers altered: altered: stackPtr Calls: None findSP #StackStart ;set point beginning ;the stack ;get value stack stackPtr CallSub ;read value ;write CheckByte ;call CheckByte subroutine ;return from CheckByte SubRet ;restore value incx overwritten, advance CallSub ;repeat search CheckByte value still ramSub1 putMesDone putc incRamSub mesLoop ;get message character $00, message ;else send ;increment subroutine ;loop until message ramSub2 ramSub3 makeLoad ;build subroutine ;message data ;built store routine 0A1C 0A1E 0A20 0A21 0A22 BBD2 AAC0 0A23 0A25 0A27 0A29 0A2B 0A2C 0A2D AEC0 B6FF B7D2 3FFF AD04 0A2F 0A30 0A31 0A33 20F8 Monitor Code Listing 01551 01552 01553 01554 01555 01556 01557 01558 01559 01560 01561 01562 01563 01564 01565 01566 01567 01568 01569 01570 01571 01572 01573 01574 01575 01576 01577 01578 01579 01580 01581 01582 01583 01584 01585 01586 01587 01588 01589 01590 01591 01592 01593 01594 01595 01596 01597 01598 0A34 0A36 0A37 0A39 0A3B 0A3D 0A3F 2601 FoundSP A3FE 2406 3DFF 2702 AEFF B6D2 B7FF doneWrapCheck incx endFindSP FoundSP ;was overwritten `bsr'? ;try again #$FE doneWrapCheck doneWrapCheck #$ff stackPtr #endFindSP/256 ;check stack wrap 0A41 0A43 0A45 ;restore 0A47 0A48 0A49 0A4A AAC0 0A4C 0A4D A651 0A4F 0A50 found replace ;return address which stack ;(CallSub+2) with address #$c0 #endFindSP&255 ;EndFindSP ;the effectively call ;EndFindSP 0A51 0A52 0A54 0A56 0A57 0A59 AB02 AAC0 B7D2 #$c0 stackPtr disassemble opcode disassembly look tables. This routine disassembles instruction pointed A:X. disassembled instruction sent terminal. Returns: ramSub1 relative branch address (low) ramSub2 address last byte current inst. (hi) ramSub3 address last byte current inst. (low) tempX relative branch address (hi) temp1 opcode temp2 number bytes instruction Registers altered: altered: ramSub1:4, temp1:4, tempA, tempX Calls: putByte, putc 0A5A 0A5E 0A62 0A66 03020202 byteCounts 01010201 01010202 03030201 disassemble 0A6A 0A6C 0A6E 0A70 0A72 0A74 0A7C 0A7E 0A80 1DD8 B7CF BFD0 A65B AD84 BDCE B7D3 CD09B8 bclr rel,flags ramSub2 ramSub3 #'[` putc makeLoad ramSub1 temp1 putbyte ;clear addrssing flags high 3,2,2,2,1,1,2,1,1,1,2,2,3,3,2,1 01599 01600 01601 01602 01603 01604 01605* 01606 01607 01608 01609 ;built load subroutine ;get opcode ;temp1 opcode ;write opcode screen C16BEVAL User's Guide 01610 01611 01612 01613 01614 01615 01616 01617 01618 01619 01620 01621 01622 01623 01624 01625 01626 01627 01628 01629 01630 01631 01632 01633 01634 01635 01636 01637 01638 01639 01640 01641 01642 01643 01644 01645 01646 01647 01648 01649 01650 01651 01652 01653 01654 01655 01656 01657 01658 01659 01660 01661 01662 01663 01664 01665 01666 01667 01668 01669 01670 01671 0A83 0A85 0A86 0A87 0A88 0A89 0A8B 0A8C 0A8F 0A91 0A93 0A95 0A97 0A99 0A9B Monitor Code Listing B6D3 B7D6 D60A5A B7D4 A303 2736 A306 2732 A30A 272E resumeop lsra lsra lsra lsra temp1 temp4 byteCounts,x temp2 illop illop illop ;store upper nibble opcode ;opcode upper nibble tempA ;get byte count ;temp2 byteNum ;test illegal opcode illegal, make byte code 0A9D 0A9F 0AA1 0AA3 0AA5 0AAB 0AAD 0AB0 B6D4 B7D5 disLoop3 3AD5 270D BDCE CD09B8 20EF disOpcode temp2 temp3 ;set temp3 counter temp3 disOpcode incRamSub ramSub1 putbyte disLoop3 ;temp3 counter ;inc subroutine ;get next byte ;send screen 0AB2 0AB4 0AB7 0AB9 0ABA 0ABB 0ABD 0ABF 0AC1 0AC4 0AC6 0AC9 0ACB 0ACD 0AD0 0AD2 0AD4 0AD6 A65D CD09F8 BED4 spaceLoop A105 2719 A620 CD09F8 A620 CD09F8 20EE illop BED3 D60CA7 A1F8 26C9 3AD4 20C5 decByteNum incx #']' putc temp2 ;add spaces decByteNum #$20 putc #$20 putc spaceLoop temp1 optable1,x #_ill-first4 resumeOp temp2 resumeop ;undo bumps displaying ;hex opcode ;get opcode ;test illegal opcode ;not illegal, loop ;dec byte number ;restore pointer opcode+1 temp2 0AD8 0ADA 0ADB 0ADD 0AE5 BED4 decNumLoop 270A 20F3 donDec BED3 D60CA7 decx donDec decRamSub decNumLoop temp1 optable1,x ;get opcode opcode offset ;into optable1 ;get location four ;use index into first4 table 0AE7 0AE9 0AEC Monitor Code Listing 01672 01673 01674 01675 01676 01677 01678 01679 01680 01681 01682 01683 01684 01685 01686 01687 01688 01689 01690 01691 01692 01693 01694 01695 01696 01697 01698 01699 01700 01701 01702 01703 01704 01705 01706 01707 01708 01709 01710 01711 01712 01713 01714 01715 01716 01717 01718 01719 01720 01721 01722 01723 01724 01725 01726 01727 01728 01729 01730 01731 01732 01733 0AED 0AEF 0AF1 0AF4 0AF7 0AF8 0AFA 0AFC 0AFE 0B01 0B02 0B04 0B06 0B09 0B0C 0B0D 0B0F 0B11 0B13 0B15 0B17 0B19 0B1B 0B1D A604 B7D5 D60BAB CD09F8 3AD5 26F5 BED3 D60E1F A604 B7D5 D60DA7 CD09F8 3AD5 26F5 B6D3 A1AD 2749 B6D6 2735 A102 2741 B6D4 B7D5 loopt1 loopt2 incx incx temp3 first4,x putc temp3 loopt1 temp1 optable2,x temp3 second4,x putc temp3 loopt2 temp1 #$AD relBranch temp4 bitRelBranch #$02 relBranch temp2 temp3 ;set counter ;get first characters ;send characters ;reload opcode ;look location next ;load counter ;get second characters ;send characters ;reload opcode again ;test ;get upper nibble opcode ;test test branch ;test other branch instructions 0B1F 0B21 0B23 0B25 0B27 0B2D 0B2F 0B32 ;get byte number ;make counter dispLoop 3AD5 270D BDCE CD09B8 20EF temp3 endShowBrkVal incRamSub ramSub1 putbyte disploop endShowBrkVal IndexMode ;get next byte ;and display 0B34 0B36 0B38 0B3A 0B3C 0B3E 0B40 0B42 0B44 0B46 0B49 0B4B 0B4E B6D6 A10D 270A A10E 2706 A106 2702 2066 A62C CD09F8 A658 CD09F8 temp4 #$0D IndexMode #$0E IndexMode #$06 IndexMode disDone #comma putc #'X' putc disDone ;load upper nibble instruction ;test index mode ;test index mode index mode, display 0B50 0B56 0B58 0B5B 0B5D BDCE CD09B8 A62C CD09F8 1CD8 A628 CD09F8 0B60 0B62 0B64 bitRelBranch incRamSub ramSub1 putbyte #comma putc relBranch bset rel,flags #'(` putc ;get next byte ;and display ;display comma before offset ;set relative addr flag C16BEVAL User's Guide 01734 01735 01736 01737 01738 01739 01740 01741 01742 01743 01744 01745 01746 01747 01748 01749 01750 01751 01752 01753 01754 01755 01756 01757 01758 01759 01760 01761 01762 01763 01764 01765 02383 02384 02385 02386 02387 02388 02389 02390 02391 02392 02393 02394 02395 02396 02397 02398 02399 02400 02401 02402 02403 02404 02405 02406 02407 02408 02409 02410 02411 02412 0B67 0B6D 0B6F 0B71 0B77 0B79 0B7B 0B7D 0B7F 0B81 0B83 0B85 0B87 BDCE B7CD B6CF B7CC B6CD BBD0 2408 3DCD 2B0A 3CCC 2006 Monitor Code Listing incRamSub ramSub1 tempX incRamSub ramSub2 tempA tempX ramSub3 nocarry tempx testdone tempA testdone nocarry testdone tempx testdone temp ;get next byte ;store temp. ;inc past insruction ;preserve current address offset ;check sign opcode offset carry page 0B89 0B8B 0B8D 3DCD 2A02 3ACC ;check sign opcode carry -offset page 0B8F 0B91 0B93 0B95 0B98 0B9A 0B9D 0B9F 0BA2 B7CE B6CC B7CD CD09B8 B6CE CD09B8 A629 CD09F8 disDone ramSub1 tempA tempX putbyte ramSub1 putbyte #')' putc decRamSub #nolist #list #endif ;temp storage ;retrun pointer last byte ;don't list disassemble look tables 0F1F 0F26 0F29 0F2C 0F2E 0F30 0F32 0F34 0F37 0F39 0F3C 0F3E 0F41 0F44 0F47 0F4A 0F4D CD0867 06D827 B6D3 B7D9 B6D4 B7DA CD09A0 B6D9 CD09B8 B6DA CD09B8 CD098F CD1246 CD09B8 CD098F CD0867 EEModify modify EEPROM memory locations Returns: None Registers altered: altered: ramSub1:4, temp1:4 Calls: putMes, getAddr, putByte, put4sp, crlf, eeRead EEModify putString stAddrMes getAddr ;get start address brset escFlag,flags,quitEEmod temp1 ;put addresses temp3:4 pcHi temp2 pcLo EEmodLoop crlf ;next line pcHi ;display address putbyte pcLo putbyte put4sp spaces eeRead ;get current memory putbyte ;and display put4sp getAddr ;get data Monitor Code Listing 02413 02414 02415 02416 02417 02419 02420 02421 02422 02423 02424 02425 02426 02427 02428 02429 02430 02432 02433 02434 02435 02436 02437 02438 02439 02440 02441 02442 02443 02444 02445 02446 02447 02448 02449 02450 02451 02452 02453 02454 02455 02456 02457 02458 02459 02460 02461 02462 02463 02464 02465 02466 02467 02468 02469 02470 02471 02472 02473 02474 02475 02476 escFlag, quit 0F50 0F53 0F56 0F59 0F5C 0F5E 0F61 0F64 0F66 0F69 07D803 quitEEMod CC025C EEbr80 02D808 04D80A B6D4 CD1218 EEincNext CD11FC 20CE EEdecNext CD1209 20C9 decData EEModLoop ;and loop incData EEmodLoop ;and loop brset brset prompt 1st, next cr1st,flags,EEincNext previous apost,flags,EEdecNext temp2 ;get value store eeWrite brclr escFlag,flags,EEbr80 0F6B 0F72 0F75 0F78 0F7B 0F7D 0F7F 0F81 0F83 0F85 0F87 0F8E CD0867 07D803 CC025C B6D3 A41F B7D5 B6D4 A4F0 B7D6 CD0867 07D803 CC025C 0F91 0F94 0F97 0F9E 0FA0 0FA2 0FA4 0FA6 0FA8 0FAA 0FAC 0FAF 0FB1 0FB3 0FB5 0FB8 0FBA 0FBD B6D3 A41F B7CE B6D5 B7D9 B6D6 B7DA CD09A0 A610 B7CD B6D9 CD09B8 B6DA CD09B8 CD098F A620 0FC0 EEModify modify EEPROM memory locations Returns: None Registers altered: altered: ramSub1:4, temp1:4 Calls: putMes, getAddr, putByte, put4sp, crlf, eeRead EEView putString stAddrMes getAddr ;get start address brclr escFlag,flags,EEviewOn prompt EEviewOn temp1 ;move start address from #memMask ;mask memory boundary temp3 ;temp1:2 temp3:4 temp2 #$F0 ;mask boundary temp4 putString fiAddrMes getAddr ;get final address ;check escFlagape flag brclr escFlag,flags,EEviewOn2 prompt EEviewOn2 putString viewMes temp1 #memMask ;mask address memory ramSub1 temp3 pcHi ;build load subroutine temp4 pcLo EEviewLine crlf #$10 ;use tempX counter tempX pcHi ;display address, begin line putbyte pcLo putByte put4sp EEviewLoop #$20 ;put space C16BEVAL User's Guide 02477 02478 02479 02480 02481 02482 02483 02484 02485 02486 02487 02488 02489 02490 02491 02492 02493 02494 02495 02496 02497 02498 02499 02500 02501 02502 02503 02504 02505 02506 02507 02508 02509 02510 02511 02512 02513 02514 02515 02516 02517 02518 02519 02520 02521 02522 02525 02526 02527 02528 02529 02530 02531 02532 02533 02534 02535 02536 02537 02538 02539 02540 0FC2 0FC5 0FC8 0FCB 0FCE 0FD0 0FD2 0FD4 0FD6 0FD8 0FDA 0FDC 0FDE 0FE1 0FE4 0FE6 0FE8 0FEA 0FEC Monitor Code Listing CD09F8 CD1246 CD09B8 CD11FC 3ACD 26EE EEdispASCII B6D5 B7D9 B6D6 B7DA A610 B7CD CD098F EEviewASCII CD1246 A120 2506 A17F 2202 2002 EEASCmask A62E EEnoASCmask CD09F8 3CDA 2602 3CD9 EEdoneInc 3ACD 26E4 B6D9 B7D5 B6DA B7D6 B6CE B1D9 22A1 2506 B6D4 B1DA 2499 EEviewDone CD09A0 CC025C putc eeRead putByte incData tempX EEviewLoop temp3 pcHi temp4 pcLo #$10 tempX put4sp eeRead #$20 EEASCmask #$7F EEASCmask EEnoASCmask #'.' putc pcLo EEdoneInc pcHi tempX EEviewASCII pcHi temp3 pcLo temp4 ramSub1 pcHi EEviewLine EEviewDone temp2 pcLo EEviewLine crlf prompt ;and display ;decrement counter ;loop full line ;load beginning address again ;use tempX counter ;put four spaces ;get byte from memory <$20, send period >$7F, send period 0FEE 0FF0 0FF3 0FF5 0FF7 0FF9 0FFB 0FFD 0FFF 1001 1003 1005 1007 1009 100B 100D 100F 1011 ;and display ascii ;inc byte counter ;end pcLo carry, high byte ;decrement counter ;loop full line ;store start line temp3:4 ;check block range ;compare against temp1 pcHi, loop temp1 pcHi, quit ;compare lower bytes temp2 pcLo, loop 1013 1016 1019 101C 1023 CC025C saveEE This routine saves program currently user space EEPROM. This routine will prompt user name program start location. This routine jumped into saveEE, which must pcHi:pcLo this routine Returns: EEPROM prog location pcHi:pcLo, start temp3:4 Registers altered: altered: ramSub1:4, temp2:4 Calls: eeWrite, putMes doneSave prompt prompt saveEE putString saveQues putString progType Monitor Code Listing 02541 02542 02543 02544 02545 02546 02547 02548 02549 02550 02551 02552 02553 02554 02555 02556 02557 02558 02559 02560 02561 02562 02563 02564 02565 02566 02567 [11] 02568 02569 02570 02571 02572* 02573 02574 02575 02576 02577 02578 02579 02580 02581 02582 02583 02584 02585 02586 02587 02588 02589 02590 02591 02592 02593 02594 02595 02596 02597 02598 02599 02600 02601 02602 getTypeSave 102A 102D 102F 1031 1033 1035 1037 1039 103C 103E 1040 1042 1044 104B 104E 1051 1053 1054 1056 1058 105A 105C 105E 1060 1061 1063 1065 1067 1069 106B 1072 1075 1078 107A 107D 1080 1083 1085 1088 108B 108E 1090 1092 1094 1096 1098 109A CD09D7 A11B 27E8 B7D4 A630 B7D3 AED3 CD096F B7CD 27DC A102 22D8 numPrompt CD0867 06D8C8 B6CD 2702 38D4 doneShiftA B6D4 A135 22E6 AE97 BFD9 B7DA 3ACD 2602 202B allST CD0867 06D8A1 B6D3 wr00 CD1218 09D8FA CD11FC B6D4 wr01 CD1218 09D8FA CD11FC A620 B7D6 3FD5 2006 saveTopEE A601 B7D5 3FD6 saveAllEE 109C 10A3 10AB 10AD 10AF 10B1 putString saving makeLoad temp3 ramSUb2 temp4 ramSub3 ;make subroutine ;using starting address #$01 temp3 temp4 brclr eeWrite gp,flags,wr01 incData #$20 temp4 temp3 saveAllEE brclr eeWrite gp,flags,wr00 incdata temp2 putString startLoc getAddr ;get prog start address brset escFlag,flags,doneSave temp1 ;temp1:2 start locations temp2 #$35 numPrompt #$97 pcHi pcLo tempX allSt saveTopEE putString progNum getAddr ;get prog. number brset escFlag,flags,doneSave tempX tempX=1, shift deca doneShiftA temp2 type=2, prog#*2 getChar #esc doneSave temp2 #$30 temp1 #temp1 asc2hex tempX saveEE saveEE ;get character, convert ;1=top half, 2=all again higher than hex, error ;mul ($97) ;calculate pcHi:pcLo tempX=1 half save ;first locs start address ;set start start $0020 ;set start address $0100 B6D5 B7CF B6D6 B7D0 C16BEVAL User's Guide 02603 02604 02605 02606 02607 02608 02609 02610 02611 02612 02613 02614 02615 02616 02617 02618 02619 02620 02621 02622 02623 02624 02625 02626 02627 02628 02629 02630 02631 02632 02633 02634 02635 02636 02637 02638 02639 02640 02641 02642 02643 02644 02645 02646 02647 02648 02649 02650 02651 02652 02653 02654 02655 02656 02657 02658 02659 02660 02661 02662 02663 02664 10B3 10B5 10B7 10B9 10BC 10BF 10C5 10C8 10CA 10CC 10CE 10D0 10D2 10D4 10D6 10D8 A60A B7D5 Monitor Code Listing reLoadCnt nextEEByte BDCE writeIt CD1218 09D8FA CD11FC 3DCF 260E B6D0 A1CC 250E A601 B7CF 3FD0 2006 chkUadd 10DA 10DC 10DE 10E0 10E2 10E4 10E6 10E9 B6D0 A17F 220B writeMore 3AD5 26D3 A62A CD09F8 20C8 eeSaveDone 10EB 10F2 CC025C putString doneSaving prompt uloadEE This routine saves program currently user space EEPROM. This routine will prompt user program type (program subroutine), Returns: EEPROM prog location pcHi:pcLo, start temp3:4 Registers altered: altered: ramSub1:4, temp2:4 Calls: eeWrite, putMes doneLoad prompt uloadEE 10F8 10FF getTypeload 1106 1109 110B 110D 110F 1111 1113 1115 1118 111A 111C 111E CD09D7 A11B 27E8 B7D4 A630 B7D3 AED3 CD096F B7CD 27DC A102 22D8 getChar #esc doneLoad temp2 #$30 temp1 #temp1 asc2hex tempX uloadEE uloadEE putString loadQues putString progType temp3 nextEEbyte #'*' putc reloadCnt ;show display counter ramSub3 #$7F eeSaveDone ;check $017F ;upper address byte. $01, quit higher, quit eeWrite brclr gp,flags,writeIt incRamSub incData ramSub2 chkUadd ramSub3 #$CC writeMore #$01 ramSub2 ramSub3 writeMore ;write EEPROM clear, write failed ;increment address ;increment EEPROM adderess ;check $00xx $01xx ramSub1 ;get first byte #$0A temp3 ;set display counter <$00CC, continue greater than address $100 10F5 CC025C ;get character, convert ;1=top half, 2=all again Monitor Code Listing 02665 02666 02667 02668 02669 02670 02671 02672 02673 02674 02675 02676 02677 02678 [11] 02679 02680 02681 02682 02683 02684 02685 02686 02687 02688 02689 02690 02691 02692 02693 02694 02695 02696 02697 02698 02699 02700 02701 02702 02703 02704 02705 02706 02707 02708 02709 02710 02711 02712 02713 02714 02715 02716 02717 02718 02719 02720 02721 [11] 02722 02723 02724 02725 02726* numPrompt2 1120 1127 112A 112D 112F 1130 1132 1134 1136 1138 113A 113C 113D 113F 1141 1148 1150 1152 1154 1156 1158 115A 115C 115F 1161 1163 1166 1169 116B 116D 1170 1172 1174 1176 1178 117F CD0867 06D8C8 B6CD 2702 38D4 doneShiftB B6D4 A135 22E6 AE97 BFD9 ;1=upper, 2=all putString progNum getAddr ;get prog. number brset escFlag,flags,doneLoad tempX tempX=1, shift deca doneShiftB temp2 prog type=2, prog#=prog#*2 temp2 #$35 numPrompt2 #$97 pcHi pcLo putString loadnmes makeStore tempX allSt1 #$01 ramSub2 ramSub3 loadNow ;A=prog# higher than hex, error ;mul ($97) ;calculate pcHi:pcLo should have program number 3ACD 2608 A601 B7CF 3FD0 201A allSt1 CD1246 BED2 E704 CD11FC CD1246 BED2 E705 CD11FC A620 B7D0 3FCF loadNow AD5F upLoadDone CC025C ;make subroutine tempX=1 half load ;load half ;RAM start location $100 eeRead stackPtr incData eeRead stackPtr incData #$20 ramSub3 ramSub2 upLoad ;get starting address ;store stack ;inc next address ;start location defined ;load whole program ;RAM start location $0020 ;upLoad program putString doneLoadMes prompt loadRun This routine loads program stored EEPROM into user memory runs from predefined starting address. number program must passed Returns: EEPROM prog location pcHi:pcLo, start temp3:4 Registers altered: altered: ramSub1:4, temp2:4 Calls: eeWrite, putMes loadRun lsla ;prog number #$97 ;mul ($97) ;calculate pcHi:pcLo pcHi should have program number pcLo eeRead ;get starting address temp3 ;store here jump later incData ;inc next address 1182 1183 1185 1186 1188 118A 118D 118F AE97 BFD9 B7DA CD1246 B7D5 AD6B C16BEVAL User's Guide 02727 02728 02729* 02730 02731 02732 02733 02734 02735 02736 02737 02738 02739 02740 02741 02742 02743 02744 02745 02746 02747 02748 02749 02750 02751 02752 [11] 02753 02754 02755 02756 02757 02758 02759 02760 02761 02762* 02763 02764 02765 02766 02767 02768 02769 02770 02771 02772 02773 02774 02775 02776 02777 02778 02779 02780 02781 02782* 02783 02784* 02785 02786 02787 02788 1191 1194 1196 1198 11A0 11A2 11A4 11A6 11A8 11AA 11AC Monitor Code Listing CD1246 B7D6 AD64 A620 B7D0 3FCF loadRNow AD2F A6CC B7D4 BCD4 eeRead temp4 incData makeStore #$20 ramSub3 ramSub2 upLoad #$CC temp2 temp2 ;start location defined ;load whole program ;RAM start location $0020 ;upLoad program ;temp2:3:4 start 11AE 11B0 11B1 11B3 11B5 11BD 11BF 11C1 11C3 11C6 11C8 11CA 11D0 11D2 11D4 11D6 AE97 B7DA BFD9 A601 B7CF 3FD0 CD1246 BDCE AD32 B6D0 A180 26ED loadTop This subroutine loads pre-stored EEPROM subroutine into user locations $100-$17F. subroutine number ($00 $35) passed this routine Returns: EEPROM subroutine loaded into $100-$17F Registers altered: altered: ramSub1:4, pcHi, pcLo Calls: eeRead loadTop #$97 ;calculate EEPROM address pcLo pcHi makeStore ;built subroutine #$01 ramSub2 ramSub3 ;set address $100 topLoop eeRead ;get byte from EEPROM ramSub1 ;and store incData ;increment EEPROM address incRamSub ramSub3 ;check #$80 topLoop ;when next address xx80, done upload This routine uploads program from serial EEPROM stores into RAM. This routine simple loads user space from EEPROM starting. EERPOM starting address should pcHi:pcLo prior calling; address should ramSub2:3 Returns: Registers altered: altered: Calls: upLoad eeRead ;read byte from current EEPROM ramSub1 ;store byte incData ;increment EEPROM address incRamSub ;increment address ramSub2 ;check $00xx $01xx chkUadd2 ramSub3 11D7 11D9 11DB 11DD 11E3 11E5 11E7 AD6D BDCE AD1F 3DCF 260E B6D0 Monitor Code Listing 02789 02790 02791 02792 02793 02794 02795 02796 02797 02798 02799 02800 02801 02802 02803 02804 02805 02806 02807 02808 02809 02810 02811 02812 02813 02814 02815 02816 02817 02818 02819 02820 02821 02822 02823 02824 02825 02826 02827 02828 02829 02830 02831 02832 02833 02834 02835 02836 02837 02838 02839 02840 02841 02842 02843 02844 02845 02846 02847 02848 02849 02850 11E9 11EB 11ED 11EF 11F1 11F3 A1CC 25EA A601 B7CF 3FD0 20E2 chkUadd2 B6D0 A180 25DC uloadDone #$CC upLoad #$01 ramSub2 ramSub3 upLoad ramSub3 #$80 upLoad <$00CC, continue greater than address $100 11F5 11F7 11F9 11FB ;check $017F ;upper address byte. $01, quit higher, quit 11FC 11FE 1200 1202 1204 1206 3CDA 2608 3CD9 B6D9 A41F B7D9 1208 incData This routine increments data pointer pcHi:pcLo next location. after incrementing, high byte exceeds eeprom memory available (determined memMask) data pointer masked physical eeprom memory. Returns: ACCA-unchanged, IX-unchanged Calls: none Altered: pcHi, pcLo, temp1 incData pcLo ;inc byte counter doneInc ;end pcLo pcHi carry, high byte pcHi ;mask physical eeprom #memMask pcHi doneInc decData This routine decrements data pointer pcHi:pcLo previous location. After decrementing, high byte poniter will masked physical eeprom memory. Returns: ACCA-unchanged, IX-unchanged Calls: none Altered: pcHi, pcLo decData pcLo ;test pcHi needs dec. onlyPcLo only pcLo pcHi pcHi ;mask physical eeprom #memMask pcHi onlyPcLo pcLo eeWrite This routine take value writes EEPROM location specified data pointers pcHi:pcLo upper three bits this address used address EEPROM. This routine returns flag write sucessful clear write failed. This routine will fail eeprom middle write cycle. 1209 120B 120D 120F 1211 1213 3DDA 2608 3AD9 B6D9 A41F B7D9 3ADA 1215 1217 C16BEVAL User's Guide 02851 02852 02853 02854 02855 02856 02857 02858* 02859 02860 02861 02862 02863 02864 02865 02866* 02867 02868 02869 02870* 02871 02872 02873* 02874 02875 02876* 02877 02878 02879 02880 02881 02882 02883 02884 02885 02886 02887 02888 02889 02890 02891 02892 02893 02894 02895 02896 02897 02898 02899 02900 02901 02902 02903 02904 02905 02906 02907 02908 02909 02910 02911 02912 Monitor Code Listing 1218 121B 121D 121F 1221 1222 1223 1224 1225 1227 1229 122B 122E 1230 1232 1234 1237 1239 123B 123E 1240 CD1AE6 B7D3 AD6A B6D9 ABA0 A4FE AD76 09D814 B6D9 A41F AD6D 09D80B B6DA AD66 09D804 B6D3 AD5F B6D3 2050 1242 1244 Returns: ACCA-unchanged, IX-unchanged Calls: sendStart, sendByte, getByte, sendStop Altered: i2cTemp, temp1, i2c_reg eeWrite clrCop temp1 ;preserve ACCA sendStart ;send start condition pcHi ;make address lsra lsra lsra lsra #ctlByte ;add control byte #$FE ;clear sendi2cByte ;send address brclr gp,flags,abrtWrite acknowledge, abort pcHi ;send high byte data #devMask ;mask device physical sendi2cByte brclr gp,flags,abrtWrite acknowledge, abort pcLo ;send byte data sendi2cByte brclr gp,flags,abrtWrite acknowledge, abort temp1 ;get data sendi2cByte ;send data abrtWrite temp1 ;restore sendStop eeRead This routine reads byte EEPROM from address specified pcHi:pcLo returns upper three bits this pcHi:pcLo used address EEPROM. This routine returns carry clear read sucessful read failed. This routine will fail eeprom middle write cycle. Returns: byte received flag=1 success, fail Registers Altered: Altered: None Calls: delay, sendi2cbyte, getI2cByte eeRead clrCop sendStart ;send start condition pcHi ;make address lsra ;get upper three bits lsra pcHi:pcLo lsra ;addressing lsra #ctlByte ;add EEPROM byte #$FE ;clear temp1 ;store next address send sendi2cByte ;send address brclr gp,flags,abrtRead acknowledge, abort pcHi ;send high byte address #devMask ;mask device limits sendi2cByte ;and send brclr gp,flags,abrtRead acknowledge, abort pcLo ;send byte address 1246 1249 124B 124D 124E 124F 1250 1251 1253 1255 1257 1259 125C 125E 1260 1262 1265 CD1AE6 AD3E B6D9 ABA0 A4FE B7D3 AD48 09D820 B6D9 A41F AD3F 09D817 Monitor Code Listing 02913 02914 02915 02916 02917 02918 02919 02920 02921 02922 02923 02924 02925 02926 02927 02928 02929 02930 02931 02932 02933 02934 02935 02936 02937 02938 02939 02940 02941 02942 02943 02944 02945 02946 02947 02948 02949 02950 02951 02952 02953 02954 02955 02956 02957 02958 02959 02960 02961 02962 02963 02964 02965 02966 02967 02968 02969 02970 02971 02972 02973 02974 1267 1269 126C 126E 1270 1271 1273 1276 1278 AD38 09D810 AD1B B6D3 AD2E 09D806 19D8 AD4B 18D8 abrtRead 2018 brclr inca brclr bclr bset sendi2cByte gp,flags,abrtRead sendStart temp1 sendi2cByte gp,flags,abrtRead gp,flags geti2cByte gp,flags sendStop acknowledge, abort ;repeated start condition ;get address again ;set ;send add/control byte acknowledge, abort master byte only) ;get byte from eeprom ;set flag ;send stop condition 127C 127E 1280 1282 1284 1286 1288 1B07 1F07 B603 A45F B703 Initialization, i2cInit This routine sets 6805 interface bus. successful, released. This routine hand multi-master system. Returns: ACCA-unchanged, IX-unchanged Registers Altered: Calls: delay Altered: i2c_reg i2cInit bclr scl,i2c bclr sda,i2c i2c-4 release lines #~(2!sda+2!scl) i2c-4 SendStart These routines send either start condition repeated start condition onto bus. successful, held upon return. Returns: None Registers altered: None altered: None Calls: delay SendStart bclr sda,i2c ;release line bclr scl,i2c ;release line delay ;call delay, free time tbuf bset sda,i2c ;pull while high delay ;call delay, start cond. setup time bset scl,i2c ;pull SendStop This routine sends stop condition onto bus. successful, released. line should calling this routine. Returns: None Registers Altered: altered: None Calls: delay SendStop 1289 128B 128D 128F 1291 1293 1295 1F07 1B07 AD59 1E07 AD55 1A07 C16BEVAL User's Guide 02975 02976 02977 02978 02979 02980 02981 02982 02983 02984 02985 02986 02987 02988 02989 02990 02991 02992 02993 02994 02995 02996 02997 02998 02999 03000 03001 03002 03003 03004 03005 03006 03007 03008 03009 03010 03011 03012 03013 03014 03015 03016 03017 03018 03019 03020 03021 03022 03023 03024 03025 03026 03027 03028 03029 03030 03031 03032 03033 03034 03035 03036 1296 1298 129A 129C 129E 12A0 1E07 AD4E 1B07 AD4A 1F07 Monitor Code Listing bset bclr bclr sda,i2c delay scl,i2c delay sda,i2c ;pull line ;call delay, free time tbuf ;release ;call delay, start cond. setup time ;and release 12A1 12A3 12A5 12A6 12A8 12AA 12AC 12AE 12B0 12B2 12B4 12B5 12B7 12B9 12BB 12BD 12C0 19D8 AE08 1E07 2402 1F07 1B07 AD38 1A07 AD34 26EE 1F07 1B07 AD2B 0E0302 18D8 1A07 12C2 12C4 sendI2cByte This routine sends byte data contained bus. This routine will check slave acknowledge carry acknowledge detected. Returns: flag slave ack, clear Registers Altered Altered: None Calls: delay sendI2cByte bclr gp,flags ;clear ;set counter bytLoop lsla ;get next bset sda,i2c ;pull sendbit bclr sda,i2c ;release sendbit bclr scl,i2c ;release delay bset scl,i2c ;pull delay ;use only fosc>4MHz decx ;dec counter bytLoop ;send bits getAck bclr sda,i2c ;release bclr scl,i2c ;release delay ;call thigh delay brset sda,i2c-4,doneByte SDA=1, bset gp,flags ;set flag doneByte bset scl,i2c ;pull getI2cByte This routine gets byte data master transmitter returns byte This routine will generate acknowledge flags when this routine called. This routine assumes that low. Returns: byte received Registers Altered: Altered: None Calls: delay GetI2cByte 12C5 12C7 12C9 12CB 1F07 AE08 bytLoop2 AD1D 1B07 bclr bclr sda,i2c delay scl,i2c ;release ;set counter ;send high Monitor Code Listing 03037 03038 03039 03040 03041 03042 03043 03044 03045 03046 03047 03048 03049 03050 03051 03052 03053 03054 03055 03056 03057 03058 03059 03060 03061 03062 03063 03064 03065 03066 03067 03068 03069 03070 03071 03072 03073 03074 03075 03076 03077 03079 03080 03081 03082 03083 03084 03085 03086 03087 03088 03089 03090 03091 03092 03093 03094 03095 03096 03097 03098 03099 12CD 12CF 12D0 12D3 12D4 12D5 12D7 12D8 12DA 12DC 12DF 12E1 12E3 12E5 12E7 AD19 0F0301 shiftByte 1A07 26EF AD0C 09D802 1E07 noAck 1B07 AD03 1A07 brclr rola bset decx brclr bset bclr bset delay sda,i2c-4,shiftByte ;Thigh ;clear carry shifting scl,i2c bytLoop2 delay gp,flags,noAck sda,i2c scl,i2c delay scl,i2c ;rotate byte through carry ;pull ;decriment byte counter ;Tlow ;check acknowledgment ;send ;release ;ninth clock pulse delay This delay routine timing transitions bus. length this delay controlled crystal speed, should ~6000ns. 100kHz protocol, thigh 4000ns tlow 4700ns. this routine called bsr, total execution time will 6000ns. called JSR, total execution time will 5500ns. crystal speeds higher than 4MHz, extra delay will need added. important that altered this routine. Returns: None Registers Altered: None Altered: None Calls: None Delay 12E8 12E9 12EA 12EB 12EC Three Wire Serial EEPROM Interface Routines following soubroutines included interface 9346, 9356 9366 series serial EEPROMs. Included routines interface C16B through port "bit-banging" fashion. seven basic commands (READ, EWEN, ERASE, ERAL, WRITE, WRAL, EWDS) both configurations each EEPROM bit) included. Note that commands 9356 9366 identical have been included only once both types. nameing following subroutines such fully describe their function: i.e.: subroutine that executes write command 9356 using byte org) transfers write_56_8_spi. subroutine that executes ewen command 9346 bit-banging using word org) transfers ewen_46_16_bb Since 9356 9366 routine have been combined, they interfaced such: C16BEVAL User's Guide 03100 03101 03102 03103 03104 03105 03106 03107 03108 03109 03110 03111 03112 03113 03114 03115 03116 03117 03118 03119 03120 03121 03122 03123 03124 03125 03126 03127 03128 03129 03130 03131 03132 03133 03134 03135 03136 03137 03138 03139 03140 03141 03142 03143 03144 03145 03146 03147 03148 03149 03150 03151 03152 03153 03154 03155 03156 03157 03158 03159 03160 03161 Monitor Code Listing 12ED 12F0 12F2 12F4 12F6 12F8 12FA 12FC 12FE 1300 1302 1305 1308 CD169F 1603 1803 1903 1603 1803 1903 B6DA A47F AE08 CD16B2 CD16C3 1700 subroutine that executes read command 9356 9366 bit-banging using word org) transfers read_566_16_bb 93LC46 banging routines read_46_8_bb eep_su ;set interface with eeprom bset mosi,eep_port ;send start condition bset sck,eep_port ;bset/bclr=5 cycles (fosc/10) bclr sck,eep_port bset mosi,eep_port ;send opcode bset sck,eep_port ;bset/bclr=5 cycles (fosc/10) bclr sck,eep_port pclo ;get EEPROM address #$7F ;mask bits, MSB=0 #$08 BBsend ;bit bang BBrecv ;get data bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_46_8_bb bset bset bclr bclr bset bclr bclr erase_46_8_bb bset bset bclr bset bset bclr bclr eral_46_8_bb bset bset bclr bclr bset 130B 130E 1310 1312 1314 1316 1318 131A 131C 131E 1321 1323 CD169F 1603 1803 1903 1703 1803 1903 A660 AE08 CD16B2 1700 eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port sck,eep_port #%01100000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) ;ewen opcode, part ;bit bang ;disable eeprom 1324 1327 1329 132B 132D 132F 1331 1333 1335 1337 1339 133C 133E CD169F 1603 1803 1903 1603 1803 1903 B6DA AA80 AE08 CD16B2 1700 CC16D3 eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port sck,eep_port pclo #$80 #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) ;get EEPROM address ;mask bits, MSB=0 ;bit bang ;disable eeprom 1341 1344 1346 1348 134A 134C CD169F 1603 1803 1903 1703 1803 eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) Monitor Code Listing 03162 03163 03164 03165 03166 03167 03168 03169 03170 03171 03172 03173 03174 03175 03176 03177 03178 03179 03180 03181 03182 03183 03184 03185 03186 03187 03188 03189 03190 03191 03192 03193 03194 03195 03196 03197 03198 03199 03200 03201 03202 03203 03204 03205 03206 03207 03208 03209 03210 03211 03212 03213 03214 03215 03216 03217 03218 03219 03220 03221 03222 03223 134E 1350 1352 1354 1357 1359 1903 A640 AE08 CD16B2 1700 CC16D3 bclr bclr write_46_8_bb bset bset bclr bclr bset bclr bclr wral_46_8_bb bset bset bclr bclr bset bclr bclr ewds_46_8_bb bset bset bclr bclr bset bclr bclr sck,eep_port #%01000000 #$08 BBsend eep_cs,eep_csp waitBB ;eral opcode, part ;bit bang ;disable eeprom 135C 135E 1361 1363 1365 1367 1369 136B 136D 136F 1371 1373 1376 1378 137A 137D 137F B7CC CD169F 1603 1803 1903 1703 1803 1903 B6DA AA80 AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port sck,eep_port pcLo #$80 #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) ;get address ;MSB=1 (part opcode) ;bit bang ;send data ;bit bang ;disable eeprom 1382 1384 1387 1389 138B 138D 138F 1391 1393 1395 1397 139A 139C 139E 13A1 13A3 B7CC CD169F 1603 1803 1903 1703 1803 1903 A620 AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port sck,eep_port #%00100000 #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) ;bit bang ;send data ;bit bang ;disable eeprom 13A6 13A9 13AB 13AD 13AF 13B1 13B3 13B5 13B7 13B9 13BC 13BE CD169F 1603 1803 1903 1703 1803 1903 A600 AE08 CD16B2 1700 eep_su mosi,eep_port sck,eep_port sck,eep_port mosi,eep_port sck,eep_port sck,eep_port #%00000000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;send opcode ;bset/bclr=5 cycles (fosc/10) ;ewds opcode, part ;bit bang ;disable eeprom 93LC46 bit-banging routines C16BEVAL User's Guide 03224 03225 03226 03227 03228 03229 03230 03231 03232 03233 03234 03235 03236 03237 03238 03239 03240 03241 03242 03243 03244 03245 03246 03247 03248 03249 03250 03251 03252 03253 03254 03255 03256 03257 03258 03259 03260 03261 03262 03263 03264 03265 03266 03267 03268 03269 03270 03271 03272 03273 03274 03275 03276 03277 03278 03279 03280 03281 03282 03283 03284 03285 13BF 13C2 13C4 13C6 13C8 13CA 13CC 13CE 13D0 13D3 13D6 13D8 13DB 13DC 13DE 13E0 Monitor Code Listing CD169F 1603 1803 1903 B6DA A43F AA80 AE08 CD16B2 CD16C3 B7CC CD16C3 B6CC 1700 read_46_16_bb eep_su ;set interface with eeprom bset mosi,eep_port ;send start condition bset sck,eep_port ;bset/bclr=5 cycles (fosc/10) bclr sck,eep_port pclo ;get EEPROM address #$3F ;mask bits, MSB=10 #$80 #$08 bbsend ;bit bang bbrecv ;get byte data tempA bbrecv ;get byte data byte returned tempA byte returned bclr eep_cs,eep_csp ;and return ewen_46_16_bb bset bset bclr bclr erase_46_16_bb bset bset bclr bclr eral_46_16_bb bset bset bclr bclr write_46_16_bb bset bset bclr 13E1 13E4 13E6 13E8 13EA 13EC 13EE 13F1 13F3 CD169F 1603 1803 1903 A630 AE08 CD16B2 1700 eep_su mosi,eep_port sck,eep_port sck,eep_port #%00110000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;ewen opcode, part ;bit bang ;disable eeprom 13F4 13F7 13F9 13FB 13FD 13FF 1401 1403 1406 1408 CD169F 1603 1803 1903 B6DA AAC0 AE08 CD16B2 1700 CC16D3 eep_su mosi,eep_port sck,eep_port sck,eep_port pclo #$C0 #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;get EEPROM address ;mask bits, MSB=11 ;bit bang ;disable eeprom 140B 140E 1410 1412 1414 1416 1418 141B 141D CD169F 1603 1803 1903 A620 AE08 CD16B2 1700 CC16D3 eep_su mosi,eep_port sck,eep_port sck,eep_port #%00100000 #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;eral opcode, part ;bit bang ;disable eeprom 1420 1422 1424 1427 1429 142B 142D 142F B7CC BFCD CD169F 1603 1803 1903 B6DA A43F tempA tempX eep_su mosi,eep_port sck,eep_port sck,eep_port pcLo #$3F ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;get address ;mask bits Monitor Code Listing 03286 03287 03288 03289 03290 03291 03292 03293 03294 03295 03296 03297 03298 03299 03300 03301 03302 03303 03304 03305 03306 03307 03308 03309 03310 03311 03312 03313 03314 03315 03316 03317 03318 03319 03320 03321 03322 03323 03324 03325 03326 03327 03328 03329 03330 03331 03332 03333 03334 03335 03336 03337 03338 03339 03340 03341 03342 03343 03344 03345 03346 03347 1431 1433 1435 1438 143A 143C 143F 1441 1443 1446 1448 AA40 AE08 CD16B2 B6CC AE08 CD16B2 B6CD AE08 CD16B2 1700 CC16D3 bclr wral_46_16_bb bset bset bclr bclr ewds_46_16_bb bset bset bclr bclr #$40 #$08 BBsend tempA #$08 BBsend tempX #$08 BBsend eep_cs,eep_csp waitBB ;MSB=01 (part opcode) ;bit bang ;send data ;bit bang high byte ;bit bang byte ;disable eeprom 144B 144D 144F 1452 1454 1456 1458 145A 145C 145F 1461 1463 1466 1468 146A 146D 146F B7CC BFCD CD169F 1603 1803 1903 A610 AE08 CD16B2 B6CC AE08 CD16B2 B6CD AE08 CD16B2 1700 CC16D3 tempA tempX eep_su mosi,eep_port sck,eep_port sck,eep_port #%00010000 #$08 BBsend tempA #$08 BBsend tempX #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;bit bang ;send data ;bit bang high byte ;bit bang byte ;disable eeprom 1472 1475 1477 1479 147B 147D 147F 1482 1484 CD169F 1603 1803 1903 A600 AE08 CD16B2 1700 eep_su mosi,eep_port sck,eep_port sck,eep_port #%00000000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send start condition ;bset/bclr=5 cycles (fosc/10) ;ewds opcode, part ;bit bang ;disable eeprom 1485 1488 148A 148C 148F 1491 1493 1496 1499 149B CD169F A6C0 AE04 CD16B2 B6DA AE08 CD16B2 CD16C3 1700 93LC56 bit-banging routines read_56_8_bb eep_su ;set interface with eeprom #%11000000 ;send read opcode dummy #$04 ;only send bits BBsend pclo ;get EEPROM address #$08 BBsend ;bit bang BBrecv ;get data bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_56_8_bb 149C 149F CD169F A690 eep_su #%10010000 ;set interface with eeprom ;send four bits ewen opcode C16BEVAL User's Guide 03348 03349 03350 03351 03352 03353 03354 03355 03356 03357 03358 03359 03360 03361 03362 03363 03364 03365 03366 03367 03368 03369 03370 03371 03372 03373 03374 03375 03376 03377 03378 03379 03380 03381 03382 03383 03384 03385 03386 03387 03388 03389 03390 03391 03392 03393 03394 03395 03396 03397 03398 03399 03400 03401 03402 03403 03404 03405 03406 03407 03408 03409 14A1 14A3 14A6 14A8 14AA 14AD 14AF Monitor Code Listing AE04 CD16B2 A680 AE08 CD16B2 1700 bclr erase_56_8_bb bclr eral_56_8_bb bclr write_56_8_bb bclr wral_56_8_bb bclr ewds_56_8_bb #$04 BBsend #%10000000 #$08 BBsend eep_cs,eep_csp ;only send bits ;ewen opcode, part ;bit bang ;disable eeprom 14B0 14B3 14B5 14B7 14BA 14BC 14BE 14C1 14C3 CD169F A6E0 AE04 CD16B2 B6DA AE08 CD16B2 1700 CC16D3 eep_su #%11100000 #$04 BBsend pclo #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send erase opcode dummy ;only send bits ;get EEPROM address ;bit bang ;disable eeprom 14C6 14C9 14CB 14CD 14D0 14D2 14D4 14D7 14D9 CD169F A690 AE04 CD16B2 A600 AE08 CD16B2 1700 CC16D3 eep_su #%10010000 #$04 BBsend #%00000000 #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send eral opcode, part ;only send bits ;eral opcode, part ;bit bang ;disable eeprom 14DC 14DE 14E1 14E3 14E5 14E8 14EA 14EC 14EF 14F1 14F3 14F6 14F8 B7CC CD169F A6A0 AE04 CD16B2 B6DA AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su #%10100000 #$04 BBsend pcLo #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send write opcode part ;only send bits ;get address ;bit bang ;send data ;bit bang ;disable eeprom 14FB 14FD 1500 1502 1504 1507 1509 150B 150E 1510 1512 1515 1517 B7CC CD169F A680 AE04 CD16B2 A680 AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su #%10000000 #$04 BBsend #%10000000 #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send wral opcode part ;only send bits ;bit bang ;send data ;bit bang ;disable eeprom CD169F eep_su ;set interface with eeprom Monitor Code Listing 03410 03411 03412 03413 03414 03415 03416 03417 03418 03419 03420 03421 03422 03423 03424 03425 03426 03427 03428 03429 03430 03431 03432 03433 03434 03435 03436 03437 03438 03439 03440 03441 03442 03443 03444 03445 03446 03447 03448 03449 03450 03451 03452 03453 03454 03455 03456 03457 03458 03459 03460 03461 03462 03463 03464 03465 03466 03467 03468 03469 03470 03471 151D 151F 1521 1524 1526 1528 152B 152D A680 AE04 CD16B2 A600 AE08 CD16B2 1700 bclr #%10000000 #$04 BBsend #%00000000 #$08 BBsend eep_cs,eep_csp ;send ewds opcode part ;only send bits ;ewds opcode, part ;bit bang ;disable eeprom 152E 1531 1533 1535 1536 1537 1538 1539 153B 153D 1540 1542 1544 1547 154A 154C CD169F B6D9 A401 ABC0 AE04 CD16B2 B6DA AE08 CD16B2 CD16C3 1700 93LC66 bit-banging routines read_66_8_bb eep_su ;set interface with eeprom pcHi ;get address #$01 ;mask lsla lsla lsla lsla #%11000000 ;send read opcode dummy #$04 ;only send bits BBsend pclo ;get EEPROM address #$08 BBsend ;bit bang BBrecv ;get data bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_66_8_bb bclr erase_66_8_bb lsla lsla lsla lsla bclr eral_66_8_bb 154D 1550 1552 1554 1557 1559 155B 155E 1560 CD169F A690 AE04 CD16B2 A680 AE08 CD16B2 1700 eep_su #%10010000 #$04 BBsend #%10000000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send four bits ewen opcode ;only send bits ;ewen opcode, part ;bit bang ;disable eeprom 1561 1564 1566 1568 1569 156A 156B 156C 156E 1570 1573 1575 1577 157A 157C CD169F B6D9 A401 ABE0 AE04 CD16B2 B6DA AE08 CD16B2 1700 CC16D3 eep_su pcHi #$01 ;set interface with eeprom ;get address ;mask #%11100000 #$04 BBsend pclo #$08 BBsend eep_cs,eep_csp waitBB ;send erase opcode dummy ;only send bits ;get EEPROM address ;bit bang ;disable eeprom 157F CD169F eep_su ;set interface with eeprom C16BEVAL User's Guide 03472 03473 03474 03475 03476 03477 03478 03479 03480 03481 03482 03483 03484 03485 03486 03487 03488 03489 03490 03491 03492 03493 03494 03495 03496 03497 03498 03499 03500 03501 03502 03503 03504 03505 03506 03507 03508 03509 03510 03511 03512 03513 03514 03515 03516 03517 03518 03519 03520 03521 03522 03523 03524 03525 03526 03527 03528 03529 03530 03531 03532 03533 1582 1584 1586 1589 158B 158D 1590 1592 Monitor Code Listing A690 AE04 CD16B2 A600 AE08 CD16B2 1700 CC16D3 bclr write_66_8_bb lsla lsla lsla lsla bclr wral_66_8_bb bclr #%10010000 #$04 BBsend #%00000000 #$08 BBsend eep_cs,eep_csp waitBB ;send eral opcode, part ;only send bits ;eral opcode, part ;bit bang ;disable eeprom 1595 1597 159A 159C 159E 159F 15A0 15A1 15A2 15A4 15A6 15A9 15AB 15AD 15B0 15B2 15B4 15B7 15B9 B7CC CD169F B6D9 A401 ABA0 AE04 CD16B2 B6DA AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su pcHi #$01 ;set interface with eeprom ;get address ;mask #%10100000 #$04 BBsend pcLo #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;send write opcode part ;only send bits ;get address ;bit bang ;send data ;bit bang ;disable eeprom 15BC 15BE 15C1 15C3 15C5 15C8 15CA 15CC 15CF 15D1 15D3 15D6 15D8 B7CC CD169F A680 AE04 CD16B2 A680 AE08 CD16B2 B6CC AE08 CD16B2 1700 CC16D3 tempA eep_su #%10000000 #$04 BBsend #%10000000 #$08 BBsend tempA #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send wral opcode part ;only send bits ;bit bang ;send data ;bit bang ;disable eeprom 15DB 15DE 15E0 15E2 15E5 15E7 15E9 15EC 15EE CD169F A680 AE04 CD16B2 A600 AE08 CD16B2 1700 15EF CD169F ewds_66_8_bb eep_su ;set interface with eeprom #%10000000 ;send ewds opcode part #$04 ;only send bits BBsend #%00000000 ;ewds opcode, part #$08 BBsend ;bit bang bclr eep_cs,eep_csp ;disable eeprom 93LC56 93LC66 bit-banging routines read_566_16_bb eep_su ;set interface with eeprom Monitor Code Listing 03534 03535 03536 03537 03538 03539 03540 03541 03542 03543 03544 03545 03546 03547 03548 03549 03550 03551 03552 03553 03554 03555 03556 03557 03558 03559 03560* 03561 03562 03563 03564 03565 03566 03567 03568 03569 03570 03571* 03572 03573 03574* 03575 03576 03577* 03578 03579 03580 03581 03582 03583 03584* 03585 03586 03587* 03588 03589 03590* 03591 03592 03593* 03594 03595 15F2 15F4 15F6 15F9 15FB 15FD 1600 1603 1605 1608 1609 160B 160D A6C0 AE03 CD16B2 B6DA AE08 CD16B2 CD16C3 B7CC CD16C3 B6CC 1700 bclr ewen_566_16_bb bclr erase_566_16_bb bclr eral_566_16_bb bclr write_566_16_bb #%11000000 #$03 BBsend pclo #$08 BBsend bbrecv tempA bbrecv tempA eep_cs,eep_csp ;send read opcode ;only send bits ;get EEPROM address ;bit bang ;get byte data ;get byte data byte returned byte returned ;and return 160E 1611 1613 1615 1618 161A 161C 161F 1621 CD169F A680 AE03 CD16B2 A6C0 AE08 CD16B2 1700 eep_su #%10000000 #$03 BBsend #%11000000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send ewen opcode ;only send bits ;ewen opcode, part ;bit bang ;disable eeprom 1622 1624 1626 1628 162B 162D 162F 1632 1634 AD7B A6E0 AE03 CD16B2 B6DA AE08 CD16B2 1700 CC16D3 eep_su #%11100000 #$03 BBsend pclo #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send erase opcode ;only send bits ;get EEPROM address ;bit bang ;disable eeprom 1637 1639 163B 163D 163F 1641 1643 1645 1647 AD66 A680 AE03 AD73 A680 AE08 AD6D 1700 CC16D3 eep_su #%10000000 #$03 BBsend #%10000000 #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send eral opcode ;only send bits ;eral opcode, part ;bit bang ;disable eeprom 164A 164C 164E 1650 1652 1654 1656 1658 165A 165C 165E 1660 1662 1664 B7CC BFCD AD4F A6A0 AE03 AD5C B6DA AE08 AD56 B6CC AE08 AD50 B6CD AE08 tempA tempX eep_su #%10100000 #$03 BBsend pcLo #$08 BBsend tempA #$08 BBsend tempX #$08 ;set interface with eeprom ;send write opcode ;only send bits ;get address ;bit bang ;send data ;bit bang high byte C16BEVAL User's Guide 03596* 03597 03598* 03599 03600 03601 03602 03603* 03604 03605 03606* 03607 03608 03609* 03610 03611 03612* 03613 03614 03615* 03616 03617* 03618 03619 03620* 03621 03622 03623* 03624 03625 03626* 03627 03628 03629 03630 03631 03632 03633 03634 03635 03636 03637 03638 03639 03640 03641 03642 03643 03644 03645 03646 03647 03648 03649 03650 03651 03652 03653 03654 03655 03656 03657 1666 1668 166A AD4A 1700 2067 Monitor Code Listing bclr wral_566_16_bb bclr ewds_566_16_bb bclr BBsend eep_cs,eep_csp waitBB ;bit bang byte ;disable eeprom 166C 166E 1670 1672 1674 1676 1678 167A 167C 167E 1680 1682 1684 1686 1688 168A 168C B7CC BFCD AD2D A680 AE03 AD3A A640 AE08 AD34 B6CC AE08 AD2E B6CD AE08 AD28 1700 2045 tempA tempX eep_su #%10000000 #$03 BBsend #%01000000 #$08 BBsend tempA #$08 BBsend tempX #$08 BBsend eep_cs,eep_csp waitBB ;set interface with eeprom ;send erase opcode ;only send bits ;bit bang ;send data ;bit bang high byte ;bit bang byte ;disable eeprom 168E 1690 1692 1694 1696 1698 169A 169C 169E AD0F A680 AE03 AD1C A600 AE08 AD16 1700 eep_su #%10000000 #$03 BBsend #%00000000 #$08 BBsend eep_cs,eep_csp ;set interface with eeprom ;send erase opcode ;only send bits ;ewds opcode, part ;bit bang ;disable eeprom 169F 16A1 16A3 16A5 16A7 16A9 16AB 16AD 16AF 16B1 3F0A B607 AA18 A4FB B707 B603 A4E7 B703 1600 Serial Three Wire EEPROM Banging support routines eep_su spcr eep_port+4 ;set port interface #(2!sck+2!mosi) ;set MOSI (EEP output #~(2!miso) ;set MISO input eep_port+4 eep_port #~(2!sck+2!mosi) ;data pins eep_port bset eep_cs,eep_csp ;send high bbSend 16B2 16B4 16B5 16B7 16B9 16BB 16BD 16BE 16C0 1703 2402 1603 clockIt 1803 1903 26F2 1703 bclr rola bset bset bclr decx bclr mosi,eep_port clockIt mosi,eep_port sck,eep_port sck,eep_port BBsend mosi,eep_port ;rotate through carry carry clear, skip ;clock data ;loop eight bits Monitor Code Listing 03658 03659 03660 03661 03662 03663 03664 03665 03666 03667 03668 03669 03670 03671 03672 03673 03674 03675 03676 03677 03678 03679 03680 03681 03682 03683 03684 03685 03686 03687 03688 03689 03690 03691 03692 03693 03694 03695 03696 03697 03698 03699 03700 03701 03702 03703 03704 03705 03706 03707 03708 03709 03710 03711 03712 03713 03714 03715 03716 03717 03718 03719 16C2 bbrecv 16C3 16C5 16C6 16C8 16CA 16CD 16CE 16CF 16D0 16D2 AE08 BBrxloop 1803 1903 050301 itsLow 26F3 waitBB bset bclr brclr rola decx ;receive data ;clear carry ;send clock high ;data comes falling edge ;read data sck,eep_port sck,eep_port miso,eep_port,itsLow BBrxloop ;rotate through ;dec counter ;get bits 16D3 16D5 16D8 1600 0503FD 1700 bset brclr bclr eep_cs,eep_csp miso,eep_port,* eep_cs,eep_csp ;select eeprom ;wait until line goes 16DB 16DE 16E0 16E2 16E5 16E7 16E9 16EB 16EE 16F0 16F2 16F5 16F7 16F9 CD1AC5 A603 B70C 0F0BFD B6DA A47F B70C 0F0BFD 140A B70C 0F0BFD B60C 1700 93LC46 routines read_46_8_spi spi_init ;init #%00000011 ;read opcode dummy spdr ;send through brclr spif,spsr,* ;loop until done pclo ;get EEPROM address #$7F ;mask bits, MSB=0 spdr ;and send brclr spif,spsr,* ;loop until done bset cpha,spcr ;set phase spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_46_8_spi brclr brclr bclr erase_46_8_spi brclr 16FA 16FD 16FF 1701 1704 1706 1708 170B 170D 170F CD1AC5 A602 B70C 0F0BFD A660 B70C 0F0BFD B60C 1700 spi_init #%00000010 spdr spif,spsr,* #%01100000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewen opcode, part ;wait ;ewen opcode, part ;wait ;clear SPIF ;disable eeprom 1710 1713 1715 1717 CD1AC5 A603 B70C 0F0BFD spi_init #%00000011 spdr spif,spsr,* pcLo ;init ;erase opcode ;wait ;erase address C16BEVAL User's Guide 03720 03721 03722 03723 03724 03725 03726 03727 03728 03729 03730 03731 03732 03733 03734 03735 03736 03737 03738 03739 03740 03741 03742 03743 03744 03745 03746 03747 03748 03749 03750 03751 03752 03753 03754 03755 03756 03757 03758 03759 03760 03761 03762 03763 03764 03765 03766 03767 03768 03769 03770 03771 03772 03773 03774 03775 03776 03777 03778 03779 03780 03781 171C 171E 1720 1723 1725 1727 Monitor Code Listing AA80 B70C 0F0BFD B60C 1700 CC1AD8 brclr bclr eral_46_8_spi brclr brclr bclr write_46_8_spi brclr brclr brclr bclr wral_46_8_spi brclr brclr brclr bclr ewds_46_8_spi brclr brclr #$80 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;set (part opcode) ;wait ;clear SPIF ;disable eeprom 172A 172D 172F 1731 1734 1736 1738 173B 173D 173F CD1AC5 A602 B70C 0F0BFD A640 B70C 0F0BFD B60C 1700 CC1AD8 spi_init #%00000010 spdr spif,spsr,* #%01000000 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;eral opcode, part ;wait ;eral opcode, part ;wait ;clear SPIF ;disable eeprom 1742 1744 1747 1749 174B 174E 1750 1752 1754 1757 1759 175B 175E 1760 1762 1764 B7CC CD1AC5 A602 B70C 0F0BFD B6DA AA80 B70C 0F0BFD B6CC B70C 0F0BFD B60C B6CC 1700 CC1AD8 tempA spi_init #%00000010 spdr spif,spsr,* pclo #$80 spdr spif,spsr,* tempA spdr spif,spsr,* spdr tempA eep_cs,eep_csp wait ;init ;write opcode dummy ;send through ;loop until done ;get EEPROM address ;set MSB=1 (part opcode) ;and send ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;return same data sent ;disable eeprom 1767 1769 176C 176E 1770 1773 1775 1777 177A 177C 177E 1781 1783 1785 1787 B7CC CD1AC5 A602 B70C 0F0BFD A620 B70C 0F0BFD B6CC B70C 0F0BFD B60C B6CC 1700 CC1AD8 tempA spi_init #%00000010 spdr spif,spsr,* #%00100000 spdr spif,spsr,* tempA spdr spif,spsr,* spdr tempA eep_cs,eep_csp wait ;init ;wral opcode part ;send through ;loop until done ;wral opcode, part ;and send ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;return same data sent ;disable eeprom 178A 178D 178F 1791 1794 1796 1798 CD1AC5 A602 B70C 0F0BFD A600 B70C 0F0BFD spi_init #%00000010 spdr spif,spsr,* #%00000000 spdr spif,spsr,* ;init ;ewds opcode, part ;wait ;ewds opcode, part ;wait Monitor Code Listing 03782 03783 03784 03785 03786 03787 03788 03789 03790 03791 03792 03793 03794 03795 03796 03797 03798 03799 03800 03801 03802 03803 03804 03805 03806 03807 03808 03809 03810 03811 03812 03813 03814 03815 03816 03817 03818 03819 03820 03821 03822 03823 03824 03825 03826 03827 03828 03829 03830 03831 03832 03833 03834 03835 03836 03837 03838 03839 03840 03841 03842 03843 179B 179D 179F B60C 1700 bclr spdr eep_cs,eep_csp ;clear SPIF ;disable eeprom 17A0 17A3 17A5 17A7 17AA 17AC 17AE 17B0 17B2 17B5 17B7 17B9 17BC 17BE 17C0 17C3 17C5 17C7 CD1AC5 A601 B70C 0F0BFD B6DA A43F AB80 B70C 0F0BFD 140A B70C 0F0BFD B60C B70C 0F0BFD BE0C 1700 93LC46 routines read_46_16_spi spi_init ;init #%00000001 ;read opcode spdr ;send through brclr spif,spsr,* ;loop until done pclo ;get EEPROM address #$3F ;mask bits #%10000000 ;add rest opcode spdr ;and send brclr spif,spsr,* ;loop until done bset cpha,spcr ;set phase spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_46_16_spi brclr brclr bclr erase_46_16_spi brclr brclr bclr eral_46_16_spi brclr brclr 17C8 17CB 17CD 17CF 17D2 17D4 17D6 17D9 17DB 17DD CD1AC5 A601 B70C 0F0BFD A630 B70C 0F0BFD B60C 1700 spi_init #%00000001 spdr spif,spsr,* #%00110000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewen opcode, part ;wait ;ewen opcode, part ;wait ;clear SPIF ;disable eeprom 17DE 17E1 17E3 17E5 17E8 17EA 17EC 17EE 17F1 17F3 17F5 CD1AC5 A601 B70C 0F0BFD B6DA AAC0 B70C 0F0BFD B60C 1700 CC1AD8 spi_init #%00000001 spdr spif,spsr,* pcLo #$C0 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;erase opcode ;wait ;erase address ;set bits opcode ;wait ;clear SPIF ;disable eeprom 17F8 17FB 17FD 17FF 1802 1804 1806 CD1AC5 A601 B70C 0F0BFD A620 B70C 0F0BFD spi_init #%00000001 spdr spif,spsr,* #%00100000 spdr spif,spsr,* ;init ;eral opcode, part ;wait ;eral opcode, part ;wait C16BEVAL User's Guide 03844 03845 03846 03847 03848 03849 03850 03851 03852 03853 03854 03855 03856 03857 03858 03859 03860 03861 03862 03863 03864 03865 03866 03867 03868 03869 03870 03871 03872 03873 03874 03875 03876 03877 03878 03879 03880 03881 03882 03883 03884 03885 03886 03887 03888 03889 03890 03891 03892 03893 03894 03895 03896 03897 03898 03899 03900 03901 03902 03903 03904 03905 1809 180B 180D Monitor Code Listing B60C 1700 CC1AD8 bclr write_46_16_spi brclr brclr brclr brclr bclr wral_46_16_spi brclr brclr brclr brclr bclr ewds_46_16_spi brclr brclr bclr spdr eep_cs,eep_csp wait ;clear SPIF ;disable eeprom 1810 1812 1815 1817 1819 181C 181E 1820 1822 1824 1827 1829 182B 182E 1830 1833 1835 1837 B7CC CD1AC5 A601 B70C 0F0BFD B6DA A43F AB40 B70C 0F0BFD B6CC B70C 0F0BFD BF0C 0F0BFD B60C 1700 CC1AD8 tempA spi_init #%00000001 spdr spif,spsr,* pclo #$3F #%01000000 spdr spif,spsr,* tempA spdr spif,spsr,* spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;write opcode dummy ;send through ;loop until done ;get EEPROM address ;mask ;add rest opcode ;and send ;loop until done ;write data EEPROM ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;disable eeprom 183A 183C 183F 1841 1843 1846 1848 184A 184D 184F 1851 1854 1856 1859 185B 185D B7CC CD1AC5 A601 B70C 0F0BFD A610 B70C 0F0BFD B6CC B70C 0F0BFD BF0C 0F0BFD B60C 1700 CC1AD8 tempA spi_init #%00000001 spdr spif,spsr,* #%00010000 spdr spif,spsr,* tempA spdr spif,spsr,* spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;wral opcode part ;send through ;loop until done ;wral opcode, part ;and send ;loop until done ;write data EEPROM ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;disable eeprom 1860 1863 1865 1867 186A 186C 186E 1871 1873 1875 CD1AC5 A601 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 spi_init #%00000001 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewds opcode, part ;wait ;ewds opcode, part ;wait ;clear SPIF ;disable eeprom 1876 CD1AC5 93LC56 routines read_56_8_spi spi_init ;init Monitor Code Listing 03906 03907 03908 03909 03910 03911 03912 03913 03914 03915 03916 03917 03918 03919 03920 03921 03922 03923 03924 03925 03926 03927 03928 03929 03930 03931 03932 03933 03934 03935 03936 03937 03938 03939 03940 03941 03942 03943 03944 03945 03946 03947 03948 03949 03950 03951 03952 03953 03954 03955 03956 03957 03958 03959 03960 03961 03962 03963 03964 03965 03966 03967 1879 187B 187D 1880 1882 1884 1887 1889 188B 188E 1890 1892 A60C B70C 0F0BFD B6DA B70C 0F0BFD 140A B70C 0F0BFD B60C 1700 brclr brclr bset brclr bclr ewen_56_8_spi brclr brclr bclr erase_56_8_spi brclr brclr bclr eral_56_8_spi brclr brclr bclr write_56_8_spi brclr brclr brclr #%00001100 spdr spif,spsr,* pclo spdr spif,spsr,* cpha,spcr spdr spif,spsr,* spdr eep_cs,eep_csp ;read opcode dummy ;send through ;loop until done ;get EEPROM address ;and send ;loop until done ;set phase ;dummy write receive data ;loop until done ;get returned data from EEPROM ;disable eeprom ;and return 1893 1896 1898 189A 189D 189F 18A1 18A4 18A6 18A8 CD1AC5 A609 B70C 0F0BFD A680 B70C 0F0BFD B60C 1700 spi_init #%00001001 spdr spif,spsr,* #%10000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewen opcode, part ;wait ;ewen opcode, part ;wait ;clear SPIF ;disable eeprom 18A9 18AC 18AE 18B0 18B3 18B5 18B7 18BA 18BC 18BE CD1AC5 A60E B70C 0F0BFD B6DA B70C 0F0BFD B60C 1700 CC1AD8 spi_init #%00001110 spdr spif,spsr,* pcLo spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;erase opcode ;wait ;erase address ;wait ;clear SPIF ;disable eeprom 18C1 18C4 18C6 18C8 18CB 18CD 18CF 18D2 18D4 18D6 CD1AC5 A609 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 CC1AD8 spi_init #%00001001 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;eral opcode, part ;wait ;eral opcode, part ;wait ;clear SPIF ;disable eeprom 18D9 18DB 18DE 18E0 18E2 18E5 18E7 18E9 18EC 18EE 18F0 18F3 B7CC CD1AC5 A60A B70C 0F0BFD B6DA B70C 0F0BFD B6CC B70C 0F0BFD B60C tempA spi_init #%00001010 spdr spif,spsr,* pclo spdr spif,spsr,* tempA spdr spif,spsr,* spdr ;init ;write opcode dummy ;send through ;loop until done ;get EEPROM address ;and send ;loop until done ;write data EEPROM ;loop until done ;clear SPIF C16BEVAL User's Guide 03968 03969 03970 03971 03972 03973 03974 03975 03976 03977 03978 03979 03980 03981 03982 03983 03984 03985 03986 03987 03988 03989 03990 03991 03992 03993 03994 03995 03996 03997 03998 03999 04000 04001 04002 04003 04004 04005 04006 04007 04008 04009 04010 04011 04012 04013 04014 04015 04016 04017 04018 04019 04020 04021 04022 04023 04024 04025 04026 04027 04028 04029 18F5 18F7 18F9 Monitor Code Listing B6CC 1700 CC1AD8 bclr wral_56_8_spi brclr brclr brclr bclr ewds_56_8_spi brclr brclr bclr tempA eep_cs,eep_csp wait ;return same data sent ;disable eeprom 18FC 18FE 1901 1903 1905 1908 190A 190C 190F 1911 1913 1916 1918 191A 191C B7CC CD1AC5 A608 B70C 0F0BFD A680 B70C 0F0BFD B6CC B70C 0F0BFD B60C B6CC 1700 CC1AD8 tempA spi_init #%00001000 spdr spif,spsr,* #%10000000 spdr spif,spsr,* tempA spdr spif,spsr,* spdr tempA eep_cs,eep_csp wait ;init ;wral opcode part ;send through ;loop until done ;wral opcode, part ;and send ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;return same data sent ;disable eeprom 191F 1922 1924 1926 1929 192B 192D 1930 1932 1934 CD1AC5 A608 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 spi_init #%00001000 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewds opcode, part ;wait ;ewds opcode, part ;wait ;clear SPIF ;disable eeprom 1935 1938 193A 193C 193E 1940 1943 1945 1947 194A 194C 194E 1951 1953 1955 CD1AC5 B6D9 A401 AB0C B70C 0F0BFD B6DA B70C 0F0BFD 140A B70C 0F0BFD B60C 1700 93LC66 routines read_66_8_spi spi_init ;init pcHi ;get from pcHi #$01 ;mask #%00001100 ;read opcode dummy spdr ;send through brclr spif,spsr,* ;loop until done pclo ;get EEPROM address spdr ;and send brclr spif,spsr,* ;loop until done bset cpha,spcr ;set phase spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_66_8_spi brclr 1956 1959 195B 195D 1960 1962 CD1AC5 A609 B70C 0F0BFD A680 B70C spi_init #%00001001 spdr spif,spsr,* #%10000000 spdr ;init ;ewen opcode, part ;wait ;ewen opcode, part Monitor Code Listing 04030 04031 04032 04033 04034 04035 04036 04037 04038 04039 04040 04041 04042 04043 04044 04045 04046 04047 04048 04049 04050 04051 04052 04053 04054 04055 04056 04057 04058 04059 04060 04061 04062 04063 04064 04065 04066 04067 04068 04069 04070 04071 04072 04073 04074 04075 04076 04077 04078 04079 04080 04081 04082 04083 04084 04085 04086 04087 04088 04089 04090 04091 1964 1967 1969 196B 0F0BFD B60C 1700 brclr bclr erase_66_8_spi brclr brclr bclr eral_66_8_spi brclr brclr bclr write_66_8_spi brclr brclr brclr bclr wral_66_8_spi brclr brclr brclr spif,spsr,* spdr eep_cs,eep_csp ;wait ;clear SPIF ;disable eeprom 196C 196F 1971 1973 1975 1977 197A 197C 197E 1981 1983 1985 CD1AC5 B6D9 A401 AB0E B70C 0F0BFD B6DA B70C 0F0BFD B60C 1700 CC1AD8 spi_init pcHi #$01 #%00001110 spdr spif,spsr,* pcLo spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;get from pcHi ;mask ;erase opcode ;wait ;erase address ;wait ;clear SPIF ;disable eeprom 1988 198B 198D 198F 1992 1994 1996 1999 199B 199D CD1AC5 A609 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 CC1AD8 spi_init #%00001001 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;eral opcode, part ;wait ;eral opcode, part ;wait ;clear SPIF ;disable eeprom 19A0 19A2 19A5 19A7 19A9 19AB 19AD 19B0 19B2 19B4 19B7 19B9 19BB 19BE 19C0 19C2 19C4 B7CC CD1AC5 B6D9 A401 AB0A B70C 0F0BFD B6DA B70C 0F0BFD B6CC B70C 0F0BFD B60C B6CC 1700 CC1AD8 tempA spi_init pcHi #$01 #%00001010 spdr spif,spsr,* pclo spdr spif,spsr,* tempA spdr spif,spsr,* spdr tempA eep_cs,eep_csp wait ;init ;get from pcHi ;mask ;write opcode dummy ;send through ;loop until done ;get EEPROM address ;and send ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;return same data sent ;disable eeprom 19C7 19C9 19CC 19CE 19D0 19D3 19D5 19D7 19DA 19DC 19DE B7CC CD1AC5 A608 B70C 0F0BFD A680 B70C 0F0BFD B6CC B70C 0F0BFD tempA spi_init #%00001000 spdr spif,spsr,* #%10000000 spdr spif,spsr,* tempA spdr spif,spsr,* ;init ;wral opcode part ;send through ;loop until done ;wral opcode, part ;and send ;loop until done ;write data EEPROM ;loop until done C16BEVAL User's Guide 04092 04093 04094 04095 04096 04097 04098 04099 04100 04101 04102 04103 04104 04105 04106 04107 04108 04109 04110 04111 04112 04113 04114 04115 04116 04117 04118 04119 04120 04121 04122 04123 04124 04125 04126 04127 04128 04129 04130 04131 04132 04133 04134 04135 04136 04137 04138 04139 04140 04141 04142 04143 04144 04145 04146 04147 04148 04149 04150 04151 04152 04153 19E1 19E3 19E5 19E7 Monitor Code Listing B60C B6CC 1700 CC1AD8 bclr ewds_66_8_spi brclr brclr bclr spdr tempA eep_cs,eep_csp wait ;clear SPIF ;return same data sent ;disable eeprom 19EA 19ED 19EF 19F1 19F4 19F6 19F8 19FB 19FD 19FF CD1AC5 A608 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 spi_init #%00001000 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewds opcode, part ;wait ;ewds opcode, part ;wait ;clear SPIF ;disable eeprom 1A00 1A03 1A05 1A07 1A0A 1A0C 1A0E 1A11 1A13 1A15 1A18 1A1A 1A1C 1A1F 1A21 1A23 CD1AC5 A606 B70C 0F0BFD B6DA B70C 0F0BFD 140A B70C 0F0BFD B60C B70C 0F0BFD BE0C 1700 93LC56 93LC66 routines NOTE: These routines work both 9356 9366 equally without modification. read_566_16_spi spi_init ;init #%00000110 ;read opcode dummy spdr ;send through brclr spif,spsr,* ;loop until done pclo ;get EEPROM address spdr ;and send brclr spif,spsr,* ;loop until done bset cpha,spcr ;set phase spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM spdr ;dummy write receive data brclr spif,spsr,* ;loop until done spdr ;get returned data from EEPROM bclr eep_cs,eep_csp ;disable eeprom ;and return ewen_566_16_spi brclr brclr bclr erase_566_16_spi brclr brclr 1A24 1A27 1A29 1A2B 1A2E 1A30 1A32 1A35 1A37 1A39 CD1AC5 A604 B70C 0F0BFD A6C0 B70C 0F0BFD B60C 1700 spi_init #%00000100 spdr spif,spsr,* #%11000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewen opcode, part ;wait ;ewen opcode, part ;wait ;clear SPIF ;disable eeprom 1A3A 1A3D 1A3F 1A41 1A44 1A46 1A48 CD1AC5 A607 B70C 0F0BFD B6DA B70C 0F0BFD spi_init #%00000111 spdr spif,spsr,* pcLo spdr spif,spsr,* ;init ;erase opcode ;wait ;erase address ;wait Monitor Code Listing 04154 04155 04156 04157 04158 04159* 04160 04161 04162 04163 04164 04165 04166 04167 04168* 04169 04170 04171 04172* 04173 04174 04175 04176 04177 04178 04179 04180 04181 04182 04183 04184 04185 04186* 04187 04188 04189 04190* 04191 04192 04193 04194 04195 04196 04197 04198 04199 04200 04201 04202 04203 04204* 04205 04206 04207* 04208 04209 04210 04211 04212 04213 04214 04215 1A4B 1A4D 1A4F B60C 1700 CC1AD8 bclr eral_566_16_spi brclr brclr bclr write_566_16_spi brclr brclr brclr brclr bclr wral_566_16_spi brclr brclr brclr brclr bclr ewds_566_16_spi brclr brclr bclr spdr eep_cs,eep_csp wait ;clear SPIF ;disable eeprom 1A52 1A54 1A56 1A58 1A5B 1A5D 1A5F 1A62 1A64 1A66 AD71 A604 B70C 0F0BFD A680 B70C 0F0BFD B60C 1700 2070 spi_init #%00000100 spdr spif,spsr,* #%10000000 spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;eral opcode, part ;wait ;eral opcode, part ;wait ;clear SPIF ;disable eeprom 1A68 1A6A 1A6C 1A6E 1A70 1A73 1A75 1A77 1A7A 1A7C 1A7E 1A81 1A83 1A86 1A88 B7CC AD59 A605 B70C 0F0BFD B6DA B70C 0F0BFD B6CC B70C 0F0BFD BF0C 0F0BFD B60C 1700 204C tempA spi_init #%00000101 spdr spif,spsr,* pclo spdr spif,spsr,* tempA spdr spif,spsr,* spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;write opcode dummy ;send through ;loop until done ;get EEPROM address ;and send ;loop until done ;write data EEPROM ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;disable eeprom 1A8C 1A8E 1A90 1A92 1A94 1A97 1A99 1A9B 1A9E 1AA0 1AA2 1AA5 1AA7 1AAA 1AAC 1AAE B7CC AD35 A604 B70C 0F0BFD A640 B70C 0F0BFD B6CC B70C 0F0BFD BF0C 0F0BFD B60C 1700 2028 tempA spi_init #%00000100 spdr spif,spsr,* #%01000000 spdr spif,spsr,* tempA spdr spif,spsr,* spdr spif,spsr,* spdr eep_cs,eep_csp wait ;init ;wral opcode part ;send through ;loop until done ;wral opcode, part ;and send ;loop until done ;write data EEPROM ;loop until done ;write data EEPROM ;loop until done ;clear SPIF ;disable eeprom 1AB0 1AB2 1AB4 1AB6 1AB9 1ABB 1ABD 1AC0 1AC2 AD13 A604 B70C 0F0BFD A600 B70C 0F0BFD B60C 1700 spi_init #%00000100 spdr spif,spsr,* #%00000000 spdr spif,spsr,* spdr eep_cs,eep_csp ;init ;ewds opcode, part ;wait ;ewds opcode, part ;wait ;clear SPIF ;disable eeprom C16BEVAL User's Guide 04216 04217 04218 04219 04220 04221 04222 04223 04224 04225 04226 04227 04228 04229 04230 04231 04232 04233 04234 04235 04236 04237 04238 04239 04240 04241 04242 04243 04244 04245 04246 04247 04248 04249 04250 04251 04252 04253 04254 04255 04256 04257 04258 04259 04260 04261 04262 04263 04264 04265 04266 04267 04268 04269 04270 04271 04272 04273 04274 04275 04276 04277 1AC4 Monitor Code Listing Serial EEPROM support routines spi_init spi_port+4 ;set port ddr's ;SS, SCK, MOSI outputs #(2!ss+2!sck+2!mosi) spi_port+4 bset ss,spi_port ;drive high #(2!spe+2!mstr+1) ;Master mode, spcr spsr spdr bset eep_cs,eep_csp wait 1AC5 1AC7 1AC9 1ACB 1ACD 1ACF 1AD1 1AD3 1AD5 1AD7 B607 AA38 B707 1A03 A651 B70A B60B B60C 1600 1AD8 1ADA 1ADC 1ADF 1AE1 1AE3 1AE5 1600 3F0C 0F0BFD B60C 27F5 1700 bset brclr bclr eep_cs,eep_csp spdr spif,spsr,* spdr wait eep_cs,eep_csp ;select eeprom ;send eeprom ;wait 1AE6 1AE8 1AEA 1AEC 1AEE 1AF0 1AF2 B7D7 A655 B71D A6AA B71D B6D7 clrCop This short routine reset watchdog timer. contents register preserved called from anywhere. Returns: None Registers Altered: None Altered: copTemp Calls: None clrCop copTemp #$55 coprr #$AA coprr copTemp RunPgm This section code executed directly after reset when port configuration 0011. This routine will load routine from 24LC65 serial EEPROM start executing from starting address. number ($00-$1A) program loaded from EEPROM should contained last byte ($1FFF) EEPROM. Numbers this location larger than will result load program $00. Returns: None Registers Altered: None Altered: None Calls: None Monitor Code Listing 04278 04279 04280 04281 04282 04283 04284 04285 04286 04287 04288 04289 04290 04291 04292 04293 04294 04295 04296 04297 04298 04299 04300 04301 04302 1AF3 1AF6 1AF8 1AFB 1AFD 1AFF 1B01 1B03 1B06 1B08 CD127E A6C0 C73FDF A61F B7D9 A6FF B7DA CD1246 A11B 2501 CC1182 1B0B RunPgm i2cInit ;set #$C0 option ;enable #$1F ;get program number from EEPROM pcHi ;stored location $1FFF #$FF pcLo eeRead #$1B ;test range pgmNumOK $00-$1A, clra ;else load program pgmNumOk loadRun ;load program Messages 1B0E 1B12 1B16 1B1A 1B1E 1B22 1B23 1B27 1B2B 1B2F 1B33 1B37 1B3B 1B3F 1B43 1B47 1B4B 1B4F 1B53 1B57 1B5B 1B5F 1B63 1B65 1B69 1B6D 1B71 1B75 1B79 1B7D 1B81 1B85 1B89 1B8D 1B8F 1B93 1B97 1B9B 0D0A0A20 signOn 20206161 61616161 61616161 6161610D 20206148 22222222 48484848 22222222 48610D0A 20614848 20202020 48484848 20202020 48486120 20202020 48617272 69732053 656D6963 6F6E6475 63746F72 0D0A 20202020 2C2D2C20 202C2D2C 20202C2D 2C202020 20202020 20202043 44503638 48433035 43313642 0D0A 205F5F2F 20207C5F 2F20207C 5F2F2020 CR,LF,LF," aaaaa Other recent searchesuPD75048 - uPD75048 uPD75048 Datasheet SIN-346 - SIN-346 SIN-346 Datasheet MK1581-01 - MK1581-01 MK1581-01 Datasheet BTA312B-600CT - BTA312B-600CT BTA312B-600CT Datasheet AN2533 - AN2533 AN2533 Datasheet ADR291W - ADR291W ADR291W Datasheet 2SD894 - 2SD894 2SD894 Datasheet
Privacy Policy | Disclaimer |