KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 1 LINE LOC INSTR SOURCE CODE 1 ; 2 ;- - - - - - - - - - - - - - KIM.ASM - - - - - - - - - - - 3 ; COPYRIGHT MOS TECHNOLOGY, INC 4 ; DATE: OCT 18, 1975 REV-D 5 ;************************ 6530-003 I.C. ****************** 6 ; 6530-003 I.C. IS AN AUDIO CASSETTE TAPE RECORDER 7 ; EXTENSION OF THE BASIC KIM MONITOR. IT FEATURES 8 ; TWO ROUTINES: 9 ; LOADT - LOAD MEMORY FROM AUDIO TAPE 10 ; ID=00 IGNORE ID 11 ; ID=FF IGNORE ID, USE SA FOR START ADDR 12 ; ID=01-FE USE ADDRESS ON TAPE 13 ; 14 ; DUMPT - STORE MEMORY ONTO AUDIO TAPE 15 ; ID=00 SHOULD NOT BE USED 16 ; ID=FF SHOULD NOT BE USED 17 ; ID=01-FE NORMAL ID RANGE 18 ; SAL LSB STARTING ADDRESS OF PROGRAM 19 ; SAH MSB 20 ; EAL ENDING ADDRESS OF PROGRAM 21 ; EAH MSB 22 ; 23 *= $1800 24 SAD = $1740 6530 A DATA 25 PADD = $1741 6530 A DATA DIRECTION 26 SBD = $1742 6530 B DATA 27 PBDD = $1743 6530 B DATA DIRECTION 28 CLK1T = $1744 DIV BY 1 TIME 29 CLK8T = $1745 DIV BY 8 TIME 30 CLK64T = $1746 DIV BY 64 TIME 31 CLKKT = $1747 DIV BY 1024 TIME 32 CLKRDI = $1747 READ TIME OUT BIT 33 CLKRDT = $1746 READ TIME 34 ; ** MPU REG. SAVX AREA IN PAGE 0 ** 35 PCL = $EF PROGRAM CNT LOW 36 PCH = $F0 PROGRAM CNT HI 37 PREG = $F1 CURRENT STATUS REG 38 SPUSER = $F2 CURRENT STACK POINTER 39 ACC = $F3 ACCUMULATOR 40 YREG = $F4 Y INDEX 41 XREG = $F5 X INDEX 42 ; ** KIM FIXED AREA IN PAGE 0 ** 43 CHKHI = $F6 44 CHKSUM = $F7 45 INL = $F8 INPUT BUFFER 46 INH = $F9 INPUT BUFFER 47 POINTL = $FA LSB OF OPEN CELL 48 POINTH = $FB MSB OF OPEN CELL 49 TEMP = $FC 50 TMPX = $FD 51 CHAR = $FE 52 MODE = $FF 53 ; ** KIM FIXED AREA IN PAGE 23 ** 54 CHKL = $17E7 55 CHKH = $17E8 CHKSUM 56 SAVX = $17E9 (3-BYTES) 57 VEB = $17EC VOLATILE EXEC BLOCK (6-B)
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 1LINE LOC INSTR SOURCE CODE
1 ; 2 ;- - - - - - - - - - - - - - KIM.ASM - - - - - - - - - - - 3 ; COPYRIGHT MOS TECHNOLOGY, INC 4 ; DATE: OCT 18, 1975 REV-D 5 ;************************ 6530-003 I.C. ****************** 6 ; 6530-003 I.C. IS AN AUDIO CASSETTE TAPE RECORDER 7 ; EXTENSION OF THE BASIC KIM MONITOR. IT FEATURES 8 ; TWO ROUTINES: 9 ; LOADT - LOAD MEMORY FROM AUDIO TAPE 10 ; ID=00 IGNORE ID 11 ; ID=FF IGNORE ID, USE SA FOR START ADDR 12 ; ID=01-FE USE ADDRESS ON TAPE 13 ; 14 ; DUMPT - STORE MEMORY ONTO AUDIO TAPE 15 ; ID=00 SHOULD NOT BE USED 16 ; ID=FF SHOULD NOT BE USED 17 ; ID=01-FE NORMAL ID RANGE 18 ; SAL LSB STARTING ADDRESS OF PROGRAM 19 ; SAH MSB 20 ; EAL ENDING ADDRESS OF PROGRAM 21 ; EAH MSB
22 ; 23 *= $1800 24 SAD = $1740 6530 A DATA 25 PADD = $1741 6530 A DATA DIRECTION 26 SBD = $1742 6530 B DATA 27 PBDD = $1743 6530 B DATA DIRECTION 28 CLK1T = $1744 DIV BY 1 TIME 29 CLK8T = $1745 DIV BY 8 TIME 30 CLK64T = $1746 DIV BY 64 TIME 31 CLKKT = $1747 DIV BY 1024 TIME 32 CLKRDI = $1747 READ TIME OUT BIT 33 CLKRDT = $1746 READ TIME 34 ; ** MPU REG. SAVX AREA IN PAGE 0 **
35 PCL = $EF PROGRAM CNT LOW 36 PCH = $F0 PROGRAM CNT HI 37 PREG = $F1 CURRENT STATUS REG 38 SPUSER = $F2 CURRENT STACK POINTER 39 ACC = $F3 ACCUMULATOR 40 YREG = $F4 Y INDEX 41 XREG = $F5 X INDEX 42 ; ** KIM FIXED AREA IN PAGE 0 ** 43 CHKHI = $F6 44 CHKSUM = $F7 45 INL = $F8 INPUT BUFFER 46 INH = $F9 INPUT BUFFER 47 POINTL = $FA LSB OF OPEN CELL
48 POINTH = $FB MSB OF OPEN CELL 49 TEMP = $FC 50 TMPX = $FD 51 CHAR = $FE 52 MODE = $FF 53 ; ** KIM FIXED AREA IN PAGE 23 ** 54 CHKL = $17E7 55 CHKH = $17E8 CHKSUM 56 SAVX = $17E9 (3-BYTES) 57 VEB = $17EC VOLATILE EXEC BLOCK (6-B)
85 181C A9 2A LDA #$2A START CHAR 86 181E 20 7A 19 JSR OUTCHT 87 1821 AD F9 17 LDA ID OUTPUT ID88 1824 20 61 19 JSR OUTBT89 1827 AD F5 17 LDA SAL OUTPUT STARTING
90 182A 20 5E 19 JSR OUTBTC ADDRESS91 182D AD F6 17 LDA SAH
92 1830 20 5E 19 JSR OUTBTC 93 1833 AD ED 17 DUMPT2 LDA VEB+1 CHECK FOR LAST 94 1836 CD F7 17 CMP EAL DATA BYTE 95 1839 AD EE 17 LDA VEB+296 183C ED F8 17 SBC EAH97 183F 90 24 BCC DUMPT4
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 6LINE LOC INSTR SOURCE CODE 288 19DB A9 C3 LDA #195289 19DD 8D 44 17 STA CLK1T 290 19E0 A9 27 LDA #$27291 19E2 8D 42 17 STA SBD RESET PB7=0 292 19E5 CA DEX293 19E6 D0 DF BNE ZRO1 294 19E8 68 PLA RESTORE A 295 19E9 60 RTS 296 ; ** SUB TO INC VEB+1,2 ** 297 19EA EE ED 17 INCVEB INC VEB+1 19EA 298 19ED D0 03 BNE INCVE1 299 19EF EE EE 17 INC VEB+2 300 19F2 60 INCVE1 RTS301 ; ** SUB TO READ BYTE FROM TAPE ** 302 19F3 20 24 1A RDBYT JSR RDCHT 19F3 303 19F6 20 00 1A JSR PACKT 304 19F9 20 24 1A JSR RDCHT 305 19FC 20 00 1A JSR PACKT 306 19FF 60 RTS 307 ; ** PACK A=ASCII INTO SAVX AS HEX DATA **
308 1A00 C9 30 PACKT CMP #$30 1A00 309 1A02 30 1E BMI PACKT3 310 1A04 C9 47 CMP #$47 311 1A06 10 1A BPL PACKT3 312 1A08 C9 40 CMP #$40313 1A0A 30 03 BMI PACKT1 314 1A0C 18 CLC315 1A0D 69 09 ADC #$09316 1A0F 2A PACKT1 ROL A 317 1A10 2A ROL A 318 1A11 2A ROL A 319 1A12 2A ROL A 320 1A13 A0 04 LDY #$04
321 1A15 2A PACKT2 ROL A 322 1A16 2E E9 17 ROL SAVX 323 1A19 88 DEY324 1A1A D0 F9 BNE PACKT2 325 1A1C AD E9 17 LDA SAVX 326 1A1F A0 00 LDY #$00 Y=0 VALID HEX CHAR 327 1A21 60 RTS 328 1A22 C8 PACKT3 INY Y=1 NOT HEX 329 1A23 60 RTS 330 ; ** GET 1 CHAR FROM TAPE AND RETURN WITH331 ; CHAR IN A. USE SAVX+1 TO ASM CHAR ** 332 1A24 8E EB 17 RDCHT STX SAVX+2 1A24 333 1A27 A2 08 LDX #$08 READ 8 BITS
334 1A29 20 41 1A RDCHT1 JSR RDBIT GET NEXT DATA BIT 335 1A2C 4E EA 17 LSR SAVX+1 RIGHT SHIFT CHAR 336 1A2F 0D EA 17 ORA SAVX+1 OR IN SIGN BIT 337 1A32 8D EA 17 STA SAVX+1 REPLACE CHAR 338 1A35 CA DEX339 1A36 D0 F1 BNE RDCHT1 340 1A38 AD EA 17 LDA SAVX+1 MOVE CHAR INTO A 341 1A3B 2A ROL A SHIFT OFF PARITY 342 1A3C 4A LSR A 343 1A3D AE EB 17 LDX SAVX+2
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 8LINE 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 PLA433 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
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
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 BUFF687 1E17 A5 F8 LDA INL INL AND STORE IN LOC 688 1E19 91 FA STA (POINTL),Y SPECIFIED BY POINT
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 13LINE 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 #$07701 1E31 BD D5 1F PRTST LDA TOP,X702 1E34 20 A0 1E JSR OUTCH 703 1E37 CA DEX704 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 RTS717 1E4C 29 0F HEXTA AND #$0F MASK HI 4 BITS 718 1E4E C9 0A CMP #$0A 719 1E50 18 CLC720 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 GET6730 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 DEX740 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
KIM.ASM 6502 CROSS-ASSEMBLER ver 1.0rmb 12-17-1981 Page 15LINE 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 INX813 1F09 2D 40 17 AND SAD INPUT SEGMENTS 814 1F0C 88 DEY815 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 RTS821 ; ** 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 DEY854 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 **