395 ;
396 ;******************* 6530-002 I.C. *****************
397 ; ** COPYRIGHT MOS TECHNOLOGY INC.
398 ; DATE OCT 13, 1975 REV E
399 ;
400 ; ** KIM **
401 ; TTY INTERFACE 6530-002
402 ; KEYBOARD INTERFACE,
403 ; 7-SEGMENT 6-DIGIT DISPLAY
404 ;
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 8
LINE LOC INSTR SOURCE CODE
405 ; TTY COMANDS:
406 ; G GOEXEC
407 ; CR OPEN NEXT CELL
408 ; LF OPEN PREVIOUS CELL
409 ; . MODIFY OPEN CELL
410 ; SP OPEN NEW CELL
411 ; L LOAD (OBJECT FORMAT)
412 ; Q DUMP FROM OPEN CELL ADDR TO HI LIMIT
413 ; RO RUB OUT - RETURN TO START KIM
414 ; (ALL ILLEGAL CHARS ARE IGNORED)
415 ;
416 ; KEYBOARD COMMANDS:
417 ; ADDR SETS MODE TO MODIFY CELL ADDRESS
418 ; DATA SETS MODE TO MODIFY DATA IN OPEN CELL
419 ; STEP INCREMENTS TO NEXT CELL
420 ; RST SYSTEM RESET
421 ; RUN GOEXEC
422 ; STOP $1C00 CAN BE LOADED INTO NMIV TO USE
423 ; PC DISPLAY PC (PROGRAM COUNTER)
424 ;
425 *= $1C00
426 1C00 85 F3 SAVE STA ACC KIM ENTRY VIA STOP (NMI) 1C00
427 1C02 68 PLA OR BRK (IRQ)
428 1C03 85 F1 STA PREG
429 1C05 68 PLA KIM ENTRY VIA JSR (A LOST) 1C05
430 1C06 85 EF STA PCL
431 1C08 85 FA STA POINTL
432 1C0A 68 PLA
433 1C0B 85 F0 STA PCH
434 1C0D 85 FB STA POINTH
435 1C0F 84 F4 STY YREG
436 1C11 86 F5 STX XREG
437 1C13 BA TSX
438 1C14 86 F2 STX SPUSER
439 1C16 20 88 1E JSR INITS
440 1C19 4C 4F 1C JMP START
441 ;
442 1C1C 6C FA 17 NMIT JMP (NMIV) NON-MASKABLE INTERRUPT TRAP 1C1C
443 1C1F 6C FE 17 IRQT JMP (IRQV) INTERRUPT TRAP 1C1F
444 1C22 A2 FF RST LDX #$FF KIM ENTRY VIA RST 1C22
445 1C24 9A TXS
446 1C25 86 F2 STX SPUSER
447 1C27 20 88 1E JSR INITS
448 1C2A A9 FF LDA #$FF COUNT START BIT
449 1C2C 8D F3 17 STA CNTH30 ZERO CNTH30
450 1C2F A9 01 LDA #$01 MASK HI ORDER BITS
451 1C31 2C 40 17 DET1 BIT SAD TEST 1C31
452 1C34 D0 19 BNE START KEYBD SSW TEST
453 1C36 30 F9 BMI DET1 START BIT TEST
454 1C38 A9 FC LDA #$FC
455 1C3A 18 DET3 CLC THIS LOOP COUNTS 1C3A
456 1C3B 69 01 ADC #$01 THE START BIT TIME
457 1C3D 90 03 BCC DET2
458 1C3F EE F3 17 INC CNTH30
459 1C42 AC 40 17 DET2 LDY SAD CHECK FOR END OF START BIT 1C42
460 1C45 10 F3 BPL DET3
461 1C47 8D F2 17 STA CNTL30
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 9
LINE LOC INSTR SOURCE CODE
462 1C4A A2 08 LDX #$08
463 1C4C 20 6A 1E JSR GET5 GET REST OF THE CHAR, TEST CHAR
464 ; ** MAKE TTY/KB SELECTION **
465 1C4F 20 8C 1E START JSR INIT1 1C4F
466 1C52 A9 01 LDA #$01
467 1C54 2C 40 17 BIT SAD
468 1C57 D0 1E BNE TTYKB
469 1C59 20 2F 1E JSR CRLF PRT CR LF
470 1C5C A2 0A LDX #$0A TYPE OUT KIM
471 1C5E 20 31 1E JSR PRTST
472 1C61 4C AF 1D JMP SHOW1
473 ;
474 1C64 A9 00 CLEAR LDA #$00
475 1C66 85 F8 STA INL CLEAR INPUT BUFFER
476 1C68 85 F9 STA INH
477 1C6A 20 5A 1E READ JSR GETCH GET CHAR
478 1C6D C9 01 CMP #$01
479 1C6F F0 06 BEQ TTYKB
480 1C71 20 AC 1F JSR PACK
481 1C74 4C DB 1D JMP SCAN
482 ; ** MAIN ROUTINE FOR KEYBOARD AND DISPLAY **
483 1C77 20 19 1F TTYKB JSR SCAND IF A=0 NO KEY 1C77
484 1C7A D0 D3 BNE START
485 1C7C A9 01 TTYKB1 LDA #$01
486 1C7E 2C 40 17 BIT SAD
487 1C81 F0 CC BEQ START
488 1C83 20 19 1F JSR SCAND
489 1C86 F0 F4 BEQ TTYKB1
490 1C88 20 19 1F JSR SCAND
491 1C8B F0 EF BEQ TTYKB1
492 1C8D 20 6A 1F JSR GETKEY
493 1C90 C9 15 CMP #$15
494 1C92 10 BB BPL START
495 1C94 C9 14 CMP #$14
496 1C96 F0 44 BEQ PCCMD DISPLAY PC
497 1C98 C9 10 CMP #$10 ADDR MODE=1
498 1C9A F0 2C BEQ ADDRM
499 1C9C C9 11 CMP #$11 DATA MODE=1
500 1C9E F0 2C BEQ DATAM
501 1CA0 C9 12 CMP #$12 STEP
502 1CA2 F0 2F BEQ STEP
503 1CA4 C9 13 CMP #$13 RUN
504 1CA6 F0 31 BEQ GOV
505 1CA8 0A ASL A SHIFT CHAR INTO HIGH
506 1CA9 0A ASL A ORDER NIBBLE
507 1CAA 0A ASL A
508 1CAB 0A ASL A
509 1CAC 85 FC STA TEMP STORE IN TEMP
510 1CAE A2 04 LDX #$04
511 1CB0 A4 FF DATA1 LDY MODE TEST MODE 1=ADDR
512 1CB2 D0 0A BNE ADDR MODE=0 DATA
513 1CB4 B1 FA LDA (POINTL),Y GET DATA
514 1CB6 06 FC ASL TEMP SHIFT CHAR
515 1CB8 2A ROL A SHIFT DATA
516 1CB9 91 FA STA (POINTL),Y STORE OUT DATA
517 1CBB 4C C3 1C JMP DATA2
518 ;
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 10
LINE LOC INSTR SOURCE CODE
519 1CBE 0A ADDR ASL A SHIFT CHAR
520 1CBF 26 FA ROL POINTL SHIFT ADDR
521 1CC1 26 FB ROL POINTH SHIFT ADDR HI
522 1CC3 CA DATA2 DEX
523 1CC4 D0 EA BNE DATA1 DO 4 TIMES
524 1CC6 F0 08 BEQ DATAM2 EXIT HERE
525 1CC8 A9 01 ADDRM LDA #$01
526 1CCA D0 02 BNE DATAM1
527 1CCC A9 00 DATAM LDA #$00
528 1CCE 85 FF DATAM1 STA MODE
529 1CD0 4C 4F 1C DATAM2 JMP START
530 ;
531 1CD3 20 63 1F STEP JSR INCPT 1CD3
532 1CD6 4C 4F 1C JMP START
533 ;
534 1CD9 4C C8 1D GOV JMP GOEXEC 1CD9
535 ; ** DISPLAY PC BY MOVING PC TO POINT **
536 1CDC A5 EF PCCMD LDA PCL 1CDC
537 1CDE 85 FA STA POINTL
538 1CE0 A5 F0 LDA PCH
539 1CE2 85 FB STA POINTH
540 1CE4 4C 4F 1C JMP START
541 ; ** LOAD PAPER TAPE FROM TTY **
542 1CE7 20 5A 1E LOAD JSR GETCH LOOK FOR FIRST CHAR 1CE7
543 1CEA C9 3B CMP #$3B SEMICOLON
544 1CEC D0 F9 BNE LOAD
545 1CEE A9 00 LDA #$00
546 1CF0 85 F7 STA CHKSUM
547 1CF2 85 F6 STA CHKHI
548 1CF4 20 9D 1F JSR GETBYT GET BYTE COUNT
549 1CF7 AA TAX SAVE IN X INDEX
550 1CF8 20 91 1F JSR CHK COMPUTE CHECKSUM
551 1CFB 20 9D 1F JSR GETBYT GET ADDRESS HI
552 1CFE 85 FB STA POINTH
553 1D00 20 91 1F JSR CHK
554 1D03 20 9D 1F JSR GETBYT GET ADDRESS LO
555 1D06 85 FA STA POINTL
556 1D08 20 91 1F JSR CHK
557 1D0B 8A TXA IF CNT=0 DONT
558 1D0C F0 0F BEQ LOAD3 GET ANY DATA
559 1D0E 20 9D 1F LOAD2 JSR GETBYT GET DATA
560 1D11 91 FA STA (POINTL),Y STORE DATA
561 1D13 20 91 1F JSR CHK
562 1D16 20 63 1F JSR INCPT NEXT ADDRESS
563 1D19 CA DEX
564 1D1A D0 F2 BNE LOAD2
565 1D1C E8 INX X=1 DATA RCD X=0 LAST RCD
566 1D1D 20 9D 1F LOAD3 JSR GETBYT COMPARE CHKSUM
567 1D20 C5 F6 CMP CHKHI
568 1D22 D0 17 BNE LOADE1
569 1D24 20 9D 1F JSR GETBYT
570 1D27 C5 F7 CMP CHKSUM
571 1D29 D0 13 BNE LOADER
572 1D2B 8A TXA X=0 LAST RECORD
573 1D2C D0 B9 BNE LOAD
574 1D2E A2 0C LDX #$0C X-OFF KIM
575 1D30 A9 27 LOAD8 LDA #$27
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 11
LINE LOC INSTR SOURCE CODE
576 1D32 8D 42 17 STA SBD DISABLE DATA IN
577 1D35 20 31 1E JSR PRTST
578 1D38 4C 4F 1C JMP START
579 ;
580 1D3B 20 9D 1F LOADE1 JSR GETBYT DUMMY
581 1D3E A2 11 LOADER LDX #$11 X-OFF ERR KIM
582 1D40 D0 EE BNE LOAD8
583 ; ** DUMP TO TTY FROM OPEN CELL ADDRESS TO
584 ; LIMHL, LIMHH **
585 1D42 A9 00 DUMP LDA #$00 1D42
586 1D44 85 F8 STA INL
587 1D46 85 F9 STA INH CLEAR RECORD COUNT
588 1D48 A9 00 DUMP0 LDA #$00
589 1D4A 85 F6 STA CHKHI CLEAR CHKSUM
590 1D4C 85 F7 STA CHKSUM
591 1D4E 20 2F 1E JSR CRLF PRINT CR LF
592 1D51 A9 3B LDA #$3B PRINT SEMICOLON
593 1D53 20 A0 1E JSR OUTCH
594 1D56 A5 FA LDA POINTL TEST POINT GT OR ET
595 1D58 CD F7 17 CMP EAL HI LIMIT GOTO EXIT
596 1D5B A5 FB LDA POINTH
597 1D5D ED F8 17 SBC EAH
598 1D60 90 18 BCC DUMP4
599 1D62 A9 00 LDA #$00 PRINT LAST RECORD
600 1D64 20 3B 1E JSR PRTBYT 0 BYTES
601 1D67 20 CC 1F JSR OPEN
602 1D6A 20 1E 1E JSR PRTPNT
603 1D6D A5 F6 LDA CHKHI PRINT CHKSUM
604 1D6F 20 3B 1E JSR PRTBYT FOR LAST RECORD
605 1D72 A5 F7 LDA CHKSUM
606 1D74 20 3B 1E JSR PRTBYT
607 1D77 4C 64 1C JMP CLEAR
608 ;
609 1D7A A9 18 DUMP4 LDA #$18 PRINT 24 BYTE COUNT 1D7A
610 1D7C AA TAX SAVE AS INDEX
611 1D7D 20 3B 1E JSR PRTBYT
612 1D80 20 91 1F JSR CHK
613 1D83 20 1E 1E JSR PRTPNT
614 1D86 A0 00 DUMP2 LDY #$00 PRINT 24 BYTES
615 1D88 B1 FA LDA (POINTL),Y GET DATA
616 1D8A 20 3B 1E JSR PRTBYT PRINT DATA
617 1D8D 20 91 1F JSR CHK COMPUTE CHKSUM
618 1D90 20 63 1F JSR INCPT INCREMENT POINT
619 1D93 CA DEX
620 1D94 D0 F0 BNE DUMP2
621 1D96 A5 F6 LDA CHKHI PRINT CHKSUM
622 1D98 20 3B 1E JSR PRTBYT
623 1D9B A5 F7 LDA CHKSUM
624 1D9D 20 3B 1E JSR PRTBYT
625 1DA0 E6 F8 INC INL INCR RECORD COUNT
626 1DA2 D0 02 BNE DUMP3
627 1DA4 E6 F9 INC INH
628 1DA6 4C 48 1D DUMP3 JMP DUMP0
629 ;
630 1DA9 20 CC 1F SPACE JSR OPEN OPEN NEW CELL 1DA9
631 1DAC 20 2F 1E SHOW JSR CRLF PRINT CR LF
632 1DAF 20 1E 1E SHOW1 JSR PRTPNT
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 12
LINE LOC INSTR SOURCE CODE
633 1DB2 20 9E 1E JSR OUTSP PRINT SPACE
634 1DB5 A0 00 LDY #$00 PRINT DATA SPECIFIED
635 1DB7 B1 FA LDA (POINTL),Y BY POINT AD=LDA EXT
636 1DB9 20 3B 1E JSR PRTBYT
637 1DBC 20 9E 1E JSR OUTSP PRINT SPACE
638 1DBF 4C 64 1C JMP CLEAR
639 ;
640 1DC2 20 63 1F RTRN JSR INCPT OPEN NEXT CELL 1DC2
641 1DC5 4C AC 1D JMP SHOW
642 ;
643 1DC8 A6 F2 GOEXEC LDX SPUSER 1DC8
644 1DCA 9A TXS
645 1DCB A5 FB LDA POINTH PROGRAM RUNS FROM
646 1DCD 48 PHA OPEN CELL ADDRESS
647 1DCE A5 FA LDA POINTL
648 1DD0 48 PHA
649 1DD1 A5 F1 LDA PREG
650 1DD3 48 PHA
651 1DD4 A6 F5 LDX XREG RESTORE REGS
652 1DD6 A4 F4 LDY YREG
653 1DD8 A5 F3 LDA ACC
654 1DDA 40 RTI
655 ;
656 1DDB C9 20 SCAN CMP #$20 OPEN CELL
657 1DDD F0 CA BEQ SPACE
658 1DDF C9 7F CMP #$7F RUB OUT (KIM)
659 1DE1 F0 1B BEQ STV
660 1DE3 C9 0D CMP #$0D NEXT CELL
661 1DE5 F0 DB BEQ RTRN
662 1DE7 C9 0A CMP #$0A PREV CELL
663 1DE9 F0 1C BEQ FEED
664 1DEB C9 2E CMP #'. MODIFY CELL
665 1DED F0 26 BEQ MODIFY
666 1DEF C9 47 CMP #'G GO EXEC
667 1DF1 F0 D5 BEQ GOEXEC
668 1DF3 C9 51 CMP #'Q DUMP FROM OPEN CELL TO HI LIMIT
669 1DF5 F0 0A BEQ DUMPV
670 1DF7 C9 4C CMP #'L LOAD TAPE
671 1DF9 F0 09 BEQ LOADV
672 1DFB 4C 6A 1C JMP READ IGNORE ILLEGAL CHAR
673 ;
674 1DFE 4C 4F 1C STV JMP START
675 1E01 4C 42 1D DUMPV JMP DUMP
676 1E04 4C E7 1C LOADV JMP LOAD
677 ;
678 1E07 38 FEED SEC 1E07
679 1E08 A5 FA LDA POINTL DEC DOUBLE BYTE
680 1E0A E9 01 SBC #$01 AT POINTL AND POINTH
681 1E0C 85 FA STA POINTL
682 1E0E B0 02 BCS FEED1
683 1E10 C6 FB DEC POINTH
684 1E12 4C AC 1D FEED1 JMP SHOW
685 ;
686 1E15 A0 00 MODIFY LDY #$00 GET CONTENTS OF INPUT BUFF
687 1E17 A5 F8 LDA INL INL AND STORE IN LOC
688 1E19 91 FA STA (POINTL),Y SPECIFIED BY POINT
689 1E1B 4C C2 1D JMP RTRN
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 13
LINE LOC INSTR SOURCE CODE
690 ;
691 ; ** SUBROUTINES FOLLOW **
692 1E1E A5 FB PRTPNT LDA POINTH PRINT POINTL, POINTH 1E1E
693 1E20 20 3B 1E JSR PRTBYT
694 1E23 20 91 1F JSR CHK
695 1E26 A5 FA LDA POINTL
696 1E28 20 3B 1E JSR PRTBYT
697 1E2B 20 91 1F JSR CHK
698 1E2E 60 RTS
699 ; **PRINT STRING OF ASCII CHARS FROM TOP+X TO TOP
700 1E2F A2 07 CRLF LDX #$07
701 1E31 BD D5 1F PRTST LDA TOP,X
702 1E34 20 A0 1E JSR OUTCH
703 1E37 CA DEX
704 1E38 10 F7 BPL PRTST STOP ON INDEX ZERO
705 1E3A 60 RTS
706 ; ** PRINT 1 HEX BYTE AS 2 ASCII CHARS **
707 1E3B 85 FC PRTBYT STA TEMP 1E3B
708 1E3D 4A LSR A SHIFT CHAR RIGHT 4 BITS
709 1E3E 4A LSR A
710 1E3F 4A LSR A
711 1E40 4A LSR A
712 1E41 20 4C 1E JSR HEXTA CONVERT TO HEX AND PRINT
713 1E44 A5 FC LDA TEMP GET OTHER HALF
714 1E46 20 4C 1E JSR HEXTA CONVERT TO HEX AND PRINT
715 1E49 A5 FC LDA TEMP RESTORE BYTE IN A AND RETURN
716 1E4B 60 RTS
717 1E4C 29 0F HEXTA AND #$0F MASK HI 4 BITS
718 1E4E C9 0A CMP #$0A
719 1E50 18 CLC
720 1E51 30 02 BMI HEXTA1
721 1E53 69 07 ADC #$07 ALPHA HEX
722 1E55 69 30 HEXTA1 ADC #$30 DEC HEX
723 1E57 4C A0 1E JMP OUTCH PRINT CHAR
724 ; ** GET 1 CHAR FROM TTY, CHAR IN A
725 1E5A 86 FD GETCH STX TMPX SAVE X REG 1E5A
726 1E5C A2 08 LDX #$08 SET UP 8-BIT COUNT
727 1E5E A9 01 LDA #$01
728 1E60 2C 40 17 GET1 BIT SAD
729 1E63 D0 22 BNE GET6
730 1E65 30 F9 BMI GET1 WAIT FOR START BIT
731 1E67 20 D4 1E JSR DELAY DELAY 1 BIT
732 1E6A 20 EB 1E GET5 JSR DEHALF DELAY 1/2 BIT TIME
733 1E6D AD 40 17 GET2 LDA SAD GET 8 BITS
734 1E70 29 80 AND #$80 MASK OFF LOW ORDER BITS
735 1E72 46 FE LSR CHAR SHIFT RIGHT CHAR
736 1E74 05 FE ORA CHAR
737 1E76 85 FE STA CHAR
738 1E78 20 D4 1E JSR DELAY DELAY 1 BIT TIME
739 1E7B CA DEX
740 1E7C D0 EF BNE GET2 GET NEXT CHAR
741 1E7E 20 EB 1E JSR DEHALF EXIT THIS ROUTINE
742 1E81 A6 FD LDX TMPX
743 1E83 A5 FE LDA CHAR
744 1E85 2A ROL A SHIFT OFF PARITY
745 1E86 4A LSR A
746 1E87 60 GET6 RTS
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 14
LINE LOC INSTR SOURCE CODE
747 ; ** INITIALIZATION FOR SIGMA **
748 1E88 A2 01 INITS LDX #$01 SET KB MODE TO ADDR 1E88
749 1E8A 86 FF STX MODE
750 1E8C A2 00 INIT1 LDX #$00
751 1E8E 8E 41 17 STX PADD FOR SIGMA USE SADD
752 1E91 A2 3F LDX #$3F
753 1E93 8E 43 17 STX PBDD FOR SIGMA USE SBDD
754 1E96 A2 07 LDX #$07 ENABLE DATA IN
755 1E98 8E 42 17 STX SBD OUTPUT
756 1E9B D8 CLD
757 1E9C 78 SEI
758 1E9D 60 RTS
759 ; ** PRINT ONE CHAR IN A **
760 1E9E A9 20 OUTSP LDA #$20 PRINT SPACE 1E9E
761 1EA0 85 FE OUTCH STA CHAR
762 1EA2 86 FD STX TMPX
763 1EA4 20 D4 1E JSR DELAY DELAY 10/11 BIT CODE SYNC
764 1EA7 AD 42 17 LDA SBD START BIT
765 1EAA 29 FE AND #$FE
766 1EAC 8D 42 17 STA SBD
767 1EAF 20 D4 1E JSR DELAY
768 1EB2 A2 08 LDX #$08
769 1EB4 AD 42 17 OUT1 LDA SBD DATA BIT
770 1EB7 29 FE AND #$FE
771 1EB9 46 FE LSR CHAR
772 1EBB 69 00 ADC #$00
773 1EBD 8D 42 17 STA SBD
774 1EC0 20 D4 1E JSR DELAY
775 1EC3 CA DEX
776 1EC4 D0 EE BNE OUT1
777 1EC6 AD 42 17 LDA SBD STOP BIT
778 1EC9 09 01 ORA #$01
779 1ECB 8D 42 17 STA SBD
780 1ECE 20 D4 1E JSR DELAY STOP BIT
781 1ED1 A6 FD LDX TMPX RESTORE INDEX
782 1ED3 60 RTS
783 ; ** DELAY 1 BIT TIME **
784 1ED4 AD F3 17 DELAY LDA CNTH30 1ED4
785 1ED7 8D F4 17 STA TIMH
786 1EDA AD F2 17 LDA CNTL30
787 1EDD 38 DE2 SEC
788 1EDE E9 01 DE4 SBC #$01
789 1EE0 B0 03 BCS DE3
790 1EE2 CE F4 17 DEC TIMH
791 1EE5 AC F4 17 DE3 LDY TIMH
792 1EE8 10 F3 BPL DE2
793 1EEA 60 RTS
794 ; ** DELAY 1/2 BIT TIME **
795 1EEB AD F3 17 DEHALF LDA CNTH30 1EEB
796 1EEE 8D F4 17 STA TIMH
797 1EF1 AD F2 17 LDA CNTL30
798 1EF4 4A LSR A
799 1EF5 4E F4 17 LSR TIMH
800 1EF8 90 E3 BCC DE2
801 1EFA 09 80 ORA #$80
802 1EFC B0 E0 BCS DE4
803 ; ** SUB TO DETERMINE IF KEY IS DEPRESSED OR
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 15
LINE LOC INSTR SOURCE CODE
804 ; CONDITION OF SSW KEY NOT DEPRESSED OR
805 ; TTY MODE A=0
806 ; KEY DEPRESSED OR KB MODE A NOT ZERO
807 1EFE A0 03 AK LDY #$03 3 ROWS
808 1F00 A2 01 LDX #$01 DIGIT 0
809 1F02 A9 FF ONEKEY LDA #$FF
810 1F04 8E 42 17 AK1 STX SBD OUTPUT DIGIT
811 1F07 E8 INX GET NEXT DIGIT
812 1F08 E8 INX
813 1F09 2D 40 17 AND SAD INPUT SEGMENTS
814 1F0C 88 DEY
815 1F0D D0 F5 BNE AK1
816 1F0F A0 07 LDY #$07
817 1F11 8C 42 17 STY SBD
818 1F14 09 80 ORA #$80
819 1F16 49 FF EOR #$FF
820 1F18 60 RTS
821 ; ** OUTPUT TO 7-SEGMENT DISPLAY **
822 1F19 A0 00 SCAND LDY #$00 GET DATA 1F19
823 1F1B B1 FA LDA (POINTL),Y SPECIFIED BY POINT
824 1F1D 85 F9 STA INH SET UP DISPLAY BUFFER
825 1F1F A9 7F LDA #$7F CHANGE SEG
826 1F21 8D 41 17 STA PADD TO OUTPUT
827 1F24 A2 09 LDX #$09 INIT DIGIT NUMBER
828 1F26 A0 03 LDY #$03 OUTPUT 3 BYTES
829 1F28 B9 F8 00 SCAND1 LDA INL,Y GET BYTE
830 1F2B 4A LSR A GET MSD
831 1F2C 4A LSR A
832 1F2D 4A LSR A
833 1F2E 4A LSR A
834 1F2F 20 48 1F JSR CONVD OUTPUT CHAR
835 1F32 B9 F8 00 LDA INL,Y GET BYTE AGAIN
836 1F35 29 0F AND #$0F GET LSD
837 1F37 20 48 1F JSR CONVD OUTPUT CHAR
838 1F3A 88 DEY SET UP FOR NEXT BYTE
839 1F3B D0 EB BNE SCAND1
840 1F3D 8E 42 17 STX SBD ALL DIGITS OFF
841 1F40 A9 00 LDA #$00 CHANGE SEGMENT
842 1F42 8D 41 17 STA PADD TO INPUTS
843 1F45 4C FE 1E JMP AK GET ANY KEY
844 ; ** CONVERT AND DISPLAY HEX (USED BY SCAND ONLY)**
845 1F48 84 FC CONVD STY TEMP
846 1F4A A8 TAY SAVE Y
847 1F4B B9 E7 1F LDA TABLE,Y USE CHAR AS INDEX
848 1F4E A0 00 LDY #$00 LOOKUP CONVERSION
849 1F50 8C 40 17 STY SAD TURN OFF SEGMENTS
850 1F53 8E 42 17 STX SBD OUTPUT DIGIT ENABLE
851 1F56 8D 40 17 STA SAD OUTPUT SEGMENTS
852 1F59 A0 7F LDY #$7F DELAY 500 CYCLES
853 1F5B 88 CONVD1 DEY
854 1F5C D0 FD BNE CONVD1
855 1F5E E8 INX GET NEXT DIGIT NUMBER
856 1F5F E8 INX ADD 2
857 1F60 A4 FC LDY TEMP RESTORE Y
858 1F62 60 RTS
859 ; ** INCREMENT POINT **
860 1F63 E6 FA INCPT INC POINTL
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 16
LINE LOC INSTR SOURCE CODE
861 1F65 D0 02 BNE INCPT2
862 1F67 E6 FB INC POINTH
863 1F69 60 INCPT2 RTS
864 ; ** GET KEY FROM KEYPAD A=KEYVALUE **
865 1F6A A2 21 GETKEY LDX #$21 START AT DIGIT 0 1F6A
866 1F6C A0 01 GETKE5 LDY #$01 GET 1 ROW
867 1F6E 20 02 1F JSR ONEKEY
868 1F71 D0 07 BNE KEYIN A=0 NO KEY
869 1F73 E0 27 CPX #$27 TEST FOR DIGIT 2
870 1F75 D0 F5 BNE GETKE5
871 1F77 A9 15 LDA #$15 15=NOKEY
872 1F79 60 RTS
873 1F7A A0 FF KEYIN LDY #$FF
874 1F7C 0A KEYIN1 ASL A SHIFT LEFT
875 1F7D B0 03 BCS KEYIN2 UNTIL Y=KEY NO
876 1F7F C8 INY
877 1F80 10 FA BPL KEYIN1
878 1F82 8A KEYIN2 TXA
879 1F83 29 0F AND #$0F MASK MSD
880 1F85 4A LSR A DIVIDE BY 2
881 1F86 AA TAX
882 1F87 98 TYA
883 1F88 10 03 BPL KEYIN4
884 1F8A 18 KEYIN3 CLC
885 1F8B 69 07 ADC #$07 MULT (X-1 TIMES A
886 1F8D CA KEYIN4 DEX
887 1F8E D0 FA BNE KEYIN3
888 1F90 60 RTS
889 ; ** COMPUTE CHECKSUM **
890 1F91 18 CHK CLC
891 1F92 65 F7 ADC CHKSUM
892 1F94 85 F7 STA CHKSUM
893 1F96 A5 F6 LDA CHKHI
894 1F98 69 00 ADC #$00
895 1F9A 85 F6 STA CHKHI
896 1F9C 60 RTS
897 ; ** GET 2 HEX CHARS AND PACK INTO INL AND INH **
898 1F9D 20 5A 1E GETBYT JSR GETCH
899 1FA0 20 AC 1F JSR PACK
900 1FA3 20 5A 1E JSR GETCH
901 1FA6 20 AC 1F JSR PACK
902 1FA9 A5 F8 LDA INL
903 1FAB 60 RTS
904 ; ** SHIFT CHAR IN A INTO INL AND INH **
905 1FAC C9 30 PACK CMP #$30 CHECK FOR HEX 1FAC
906 1FAE 30 1B BMI UPDAT2
907 1FB0 C9 47 CMP #$47 NOT HEX EXIT
908 1FB2 10 17 BPL UPDAT2
909 1FB4 C9 40 CMP #$40 CONVERT TO HEX
910 1FB6 30 03 BMI UPDATE
911 1FB8 18 CLC
912 1FB9 69 09 ADC #$09
913 1FBB 2A UPDATE ROL A
914 1FBC 2A ROL A
915 1FBD 2A ROL A
916 1FBE 2A ROL A
917 1FBF A0 04 LDY #$04 SHIFT INTO I/O BUFFER
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 17
LINE LOC INSTR SOURCE CODE
918 1FC1 2A UPDAT1 ROL A
919 1FC2 26 F8 ROL INL
920 1FC4 26 F9 ROL INH
921 1FC6 88 DEY
922 1FC7 D0 F8 BNE UPDAT1
923 1FC9 A9 00 LDA #$00 A=0 IF HEX NUM
924 1FCB 60 UPDAT2 RTS
925 ;
926 1FCC A5 F8 OPEN LDA INL MOVE I/O BUFFER TO POINT
927 1FCE 85 FA STA POINTL
928 1FD0 A5 F9 LDA INH TRANSFER INH- POINTH
929 1FD2 85 FB STA POINTH
930 1FD4 60 RTS
931 ;
932 ; ** TABLES **
933 1FD5 00 00 TOP .DBYTE $0000,$0000,$0000,$0A0D 1FD5
934 1FD7 00 00
935 1FD9 00 00
936 1FDB 0A 0D
938 1FDD 4D .BYTE 'M,'I,'K,$20,$13 KIM
939 1FDE 49
940 1FDF 4B
941 1FE0 20
942 1FE1 13
944 1FE2 52 .BYTE 'R,'R,'E,$20,$13 ERR
945 1FE3 52
946 1FE4 45
947 1FE5 20
948 1FE6 13
950 1FE7 BF 86 TABLE .DBYTE $BF86,$DBCF,$E6ED,$FD87 ;0-7 1FE7
951 1FE9 DB CF
952 1FEB E6 ED
953 1FED FD 87
955 1FEF FF EF .DBYTE $FFEF,$F7FC,$B9DE,$F9F1 ;8-F HEX TO 7-SEG
956 1FF1 F7 FC
957 1FF3 B9 DE
958 1FF5 F9 F1
960 ;
961 ; ** INTERRUPT VECTORS **
962 *= $1FFA
963 1FFA 1C 1C NMIENT .WORD NMIT
965 1FFC 22 1C RSTENT .WORD RST
967 1FFE 1F 1C IRQENT .WORD IRQT
969 .END
No Errors found above.
KIM.ASM SYMBOL TABLE DUMP
ACC 00F3 DET3 1C3A INTVEB 1932 OUT1 1EB4 SAH 17F6
ADDR 1CBE DUMP 1D42 IRQENT 1FFE OUTBT 1961 SAL 17F5
ADDRM 1CC8 DUMP0 1D48 IRQP27 1BFE OUTBTC 195E SAVE 1C00
AK 1EFE DUMP2 1D86 IRQT 1C1F OUTCH 1EA0 SAVX 17E9
AK1 1F04 DUMP3 1DA6 IRQV 17FE OUTCHT 197A SBD 1742
CHAR 00FE DUMP4 1D7A KEYIN 1F7A OUTSP 1E9E SCAN 1DDB
CHK 1F91 DUMPT 1800 KEYIN1 1F7C PACK 1FAC SCAND 1F19
CHKH 17E8 DUMPT1 1814 KEYIN2 1F82 PACKT 1A00 SCAND1 1F28
CHKHI 00F6 DUMPT2 1833 KEYIN3 1F8A PACKT1 1A0F SHOW 1DAC
CHKL 17E7 DUMPT3 1854 KEYIN4 1F8D PACKT2 1A15 SHOW1 1DAF
CHKSUM 00F7 DUMPT4 1865 LOAD 1CE7 PACKT3 1A22 SPACE 1DA9
CHKT 194C DUMPV 1E01 LOAD10 192B PADD 1741 SPUSER 00F2
CHT1 1982 EAH 17F8 LOAD11 18C2 PBDD 1743 START 1C4F
CHT2 198E EAL 17F7 LOAD12 190F PCCMD 1CDC STEP 1CD3
CHT3 1991 FEED 1E07 LOAD13 18FA PCH 00F0 STV 1DFE
CLEAR 1C64 FEED1 1E12 LOAD2 1D0E PCL 00EF SYNC 1891
CLK1T 1744 GET1 1E60 LOAD3 1D1D PLL1 1A75 SYNC1 1896
CLK64T 1746 GET2 1E6D LOAD8 1D30 PLL2 1A84 SYNC2 18AB
CLK8T 1745 GET5 1E6A LOADE1 1D3B PLLCAL 1A6B TAB 1871
CLKKT 1747 GET6 1E87 LOADER 1D3E POINTH 00FB TABLE 1FE7
CLKRDI 1747 GETBYT 1F9D LOADT 1873 POINTL 00FA TEMP 00FC
CLKRDT 1746 GETCH 1E5A LOADT4 18B5 PREG 00F1 TIMH 17F4
CNTH30 17F3 GETKE5 1F6C LOADT5 18D7 PRTBYT 1E3B TMPX 00FD
CNTL30 17F2 GETKEY 1F6A LOADT6 18EC PRTPNT 1E1E TOP 1FD5
CONVD 1F48 GOEXEC 1DC8 LOADT7 18F8 PRTST 1E31 TTYKB 1C77
CONVD1 1F5B GOV 1CD9 LOADT8 1915 RDBIT 1A41 TTYKB1 1C7C
CRLF 1E2F HEX1 1978 LOADT9 1929 RDBIT2 1A53 UPDAT1 1FC1
DATA1 1CB0 HEXOUT 196F LOADV 1E04 RDBIT3 1A50 UPDAT2 1FCB
DATA2 1CC3 HEXTA 1E4C MODE 00FF RDBIT4 1A63 UPDATE 1FBB
DATAM 1CCC HEXTA1 1E55 MODIFY 1E15 RDBYT 19F3 VEB 17EC
DATAM1 1CCE ID 17F9 NMIENT 1FFA RDCHT 1A24 XREG 00F5
DATAM2 1CD0 INCPT 1F63 NMIP27 1BFA RDCHT1 1A29 YREG 00F4
DE2 1EDD INCPT2 1F69 NMIT 1C1C READ 1C6A ZRO 19C4
DE3 1EE5 INCVE1 19F2 NMIV 17FA RST 1C22 ZRO1 19C7
DE4 1EDE INCVEB 19EA ONE 199E RSTENT 1FFC ZRO2 19D6
DEHALF 1EEB INH 00F9 ONE1 19A1 RSTP27 1BFC
DELAY 1ED4 INIT1 1E8C ONE2 19B0 RSTV 17FC
DET1 1C31 INITS 1E88 ONEKEY 1F02 RTRN 1DC2
DET2 1C42 INL 00F8 OPEN 1FCC SAD 1740
191 Labels listed