BRK TRAP.CBM
FILE INFORMATION
FILENAME(S): BRK TRAP.CBM
FILE TYPE(S): SEQ
FILE SIZE: 3.4K
FIRST SEEN: 2025-11-30 21:15:14
APPEARS ON: 1 disk(s)
FILE HASH
3d40176386149eb189e1395c7428a6d94fb5d0459d9c73c4bfeaff36a5d8cad8
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| TRANSACTOR DISK | BRK TRAP.CBM | SEQ | DuncanTwain | 10 | 9 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
00000000: 2E 4F 50 54 20 4E 4F 53 59 4D 0D 3B 50 55 54 22 |.OPT NOSYM.;PUT"| 00000010: 40 3A 53 2F 42 52 4B 22 0D 3B 2A 2A 2A 2A 2A 2A |@:S/BRK".;******| 00000020: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 00000030: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 0D 3B 2A 20 20 20 |**********.;* | 00000040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000050: 20 20 20 20 20 20 20 20 20 20 20 2A 0D 3B 2A 20 | *.;* | 00000060: 20 53 49 4D 55 4C 41 54 49 4E 47 20 41 20 54 52 | SIMULATING A TR| 00000070: 41 50 20 57 49 54 48 20 42 52 4B 20 20 2A 0D 3B |AP WITH BRK *.;| 00000080: 2A 20 20 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |* -------------| 00000090: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 20 20 2A |------------- *| 000000A0: 0D 3B 2A 20 20 20 20 20 20 20 20 20 20 20 20 20 |.;* | 000000B0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000000C0: 20 2A 0D 3B 2A 20 20 20 20 20 20 20 20 20 20 20 | *.;* | 000000D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000000E0: 20 20 20 2A 0D 3B 2A 20 42 52 4B 20 56 45 43 54 | *.;* BRK VECT| 000000F0: 4F 52 20 49 53 20 44 49 56 45 52 54 45 44 20 53 |OR IS DIVERTED S| 00000100: 4F 20 20 20 20 2A 0D 3B 2A 20 54 48 41 54 20 22 |O *.;* THAT "| 00000110: 49 4E 56 49 53 49 42 4C 45 22 20 53 55 42 52 4F |INVISIBLE" SUBRO| 00000120: 55 54 49 4E 45 53 20 2A 0D 3B 2A 20 43 41 4E 20 |UTINES *.;* CAN | 00000130: 42 45 20 43 41 4C 4C 45 44 2E 20 20 20 20 20 20 |BE CALLED. | 00000140: 20 20 20 20 20 20 20 20 20 2A 0D 3B 2A 20 20 20 | *.;* | 00000150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000160: 20 20 20 20 20 20 20 20 20 20 20 2A 0D 3B 2A 20 | *.;* | 00000170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00000180: 20 20 20 20 20 20 20 20 20 20 20 20 20 2A 0D 3B | *.;| 00000190: 2A 20 20 2D 20 42 59 20 54 4F 4D 20 48 55 47 48 |* - BY TOM HUGH| 000001A0: 45 53 20 20 56 30 32 32 32 38 37 20 2D 20 20 2A |ES V022287 - *| 000001B0: 0D 3B 2A 20 20 20 20 20 20 20 20 20 20 20 20 20 |.;* | 000001C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 000001D0: 20 2A 0D 3B 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A | *.;************| 000001E0: 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A 2A |****************| 000001F0: 2A 2A 2A 2A 0D 2E 53 4B 49 50 0D 3B 0D 3B 43 36 |****..SKIP.;.;C6| 00000200: 34 20 45 51 55 41 54 45 53 0D 3B 0D 43 42 49 4E |4 EQUATES.;.CBIN| 00000210: 56 20 3D 20 24 30 33 31 36 20 3B 42 52 4B 20 56 |V = $0316 ;BRK V| 00000220: 45 43 54 4F 52 20 28 32 29 0D 43 48 52 4F 55 54 |ECTOR (2).CHROUT| 00000230: 20 3D 20 24 46 46 44 32 20 3B 4F 55 54 50 55 54 | = $FFD2 ;OUTPUT| 00000240: 20 41 20 43 48 41 52 0D 43 4C 52 43 48 4E 20 3D | A CHAR.CLRCHN =| 00000250: 20 24 46 46 43 43 20 3B 49 2F 4F 20 54 4F 20 44 | $FFCC ;I/O TO D| 00000260: 45 46 41 55 4C 54 53 0D 47 45 54 49 4E 20 3D 20 |EFAULTS.GETIN = | 00000270: 24 46 46 45 34 20 3B 49 4E 50 55 54 20 41 20 43 |$FFE4 ;INPUT A C| 00000280: 48 41 52 0D 4D 45 4D 4F 52 59 20 3D 20 24 38 44 |HAR.MEMORY = $8D| 00000290: 20 3B 54 45 4D 50 20 53 54 4F 52 41 47 45 20 28 | ;TEMP STORAGE (| 000002A0: 32 29 0D 4F 4C 44 42 52 4B 20 3D 20 24 38 42 20 |2).OLDBRK = $8B | 000002B0: 3B 53 54 4F 52 41 47 45 20 46 4F 52 20 53 54 41 |;STORAGE FOR STA| 000002C0: 4E 44 41 52 44 20 42 52 4B 20 28 32 29 0D 53 54 |NDARD BRK (2).ST| 000002D0: 41 43 4B 20 3D 20 24 30 31 30 30 20 3B 36 35 58 |ACK = $0100 ;65X| 000002E0: 58 20 53 54 41 43 4B 20 4C 4F 43 41 54 49 4F 4E |X STACK LOCATION| 000002F0: 0D 54 49 44 59 55 50 20 3D 20 24 46 45 42 43 20 |.TIDYUP = $FEBC | 00000300: 3B 52 45 43 4F 56 45 52 20 46 52 4F 4D 20 49 4E |;RECOVER FROM IN| 00000310: 54 45 52 52 55 50 54 0D 2E 53 4B 49 50 0D 2A 20 |TERRUPT..SKIP.* | 00000320: 3D 20 24 38 30 30 30 20 3B 53 59 53 20 33 32 37 |= $8000 ;SYS 327| 00000330: 36 38 0D 2E 53 4B 49 50 0D 3B 2D 2D 2D 2D 2D 2D |68..SKIP.;------| 00000340: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00000350: 2D 2D 2D 2D 2D 2D 2D 2D 0D 3B 53 45 54 20 42 52 |--------.;SET BR| 00000360: 4B 20 56 45 43 54 4F 52 20 54 4F 20 4F 55 52 20 |K VECTOR TO OUR | 00000370: 52 4F 55 54 49 4E 45 0D 3B 2D 2D 2D 2D 2D 2D 2D |ROUTINE.;-------| 00000380: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00000390: 2D 2D 2D 2D 2D 2D 2D 0D 2E 53 4B 49 50 0D 3B 49 |-------..SKIP.;I| 000003A0: 4E 20 41 43 54 55 41 4C 20 55 53 45 2C 20 54 48 |N ACTUAL USE, TH| 000003B0: 49 53 20 57 4F 55 4C 44 20 42 45 20 41 20 53 55 |IS WOULD BE A SU| 000003C0: 42 52 4F 55 54 49 4E 45 0D 3B 43 41 4C 4C 45 44 |BROUTINE.;CALLED| 000003D0: 20 4F 4E 43 45 20 54 4F 20 44 49 56 45 52 54 20 | ONCE TO DIVERT | 000003E0: 54 48 45 20 42 52 4B 20 56 45 43 54 4F 52 2E 0D |THE BRK VECTOR..| 000003F0: 2E 53 4B 49 50 0D 20 4A 53 52 20 43 4C 52 43 48 |.SKIP. JSR CLRCH| 00000400: 4E 0D 20 53 45 49 20 3B 44 49 53 41 42 4C 45 20 |N. SEI ;DISABLE | 00000410: 49 4E 54 45 52 52 55 50 54 53 0D 20 4C 44 58 20 |INTERRUPTS. LDX | 00000420: 43 42 49 4E 56 0D 20 4C 44 59 20 43 42 49 4E 56 |CBINV. LDY CBINV| 00000430: 2B 31 0D 20 53 54 58 20 4F 4C 44 42 52 4B 20 3B |+1. STX OLDBRK ;| 00000440: 53 41 56 45 20 54 48 45 20 4F 4C 44 20 42 52 4B |SAVE THE OLD BRK| 00000450: 20 56 45 43 54 4F 52 0D 20 53 54 59 20 4F 4C 44 | VECTOR. STY OLD| 00000460: 42 52 4B 2B 31 0D 20 4C 44 58 20 23 3C 4E 45 57 |BRK+1. LDX #<NEW| 00000470: 42 52 4B 20 3B 54 48 45 4E 20 53 45 54 20 4E 45 |BRK ;THEN SET NE| 00000480: 57 20 56 45 43 54 4F 52 0D 20 4C 44 59 20 23 3E |W VECTOR. LDY #>| 00000490: 4E 45 57 42 52 4B 0D 20 53 54 58 20 43 42 49 4E |NEWBRK. STX CBIN| 000004A0: 56 0D 20 53 54 59 20 43 42 49 4E 56 2B 31 0D 20 |V. STY CBINV+1. | 000004B0: 43 4C 49 20 3B 45 4E 41 42 4C 45 20 49 4E 54 45 |CLI ;ENABLE INTE| 000004C0: 52 52 55 50 54 53 0D 2E 50 41 47 45 0D 3B 2D 2D |RRUPTS..PAGE.;--| 000004D0: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 000004E0: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 3B 44 45 |------------.;DE| 000004F0: 4D 4F 20 42 52 4B 20 48 41 4E 44 4C 45 52 0D 3B |MO BRK HANDLER.;| 00000500: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D |----------------| 00000510: 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 2E |--------------..| 00000520: 53 4B 49 50 0D 3B 54 48 49 53 20 49 53 20 4A 55 |SKIP.;THIS IS JU| 00000530: 53 54 20 41 4E 20 45 58 41 4D 50 4C 45 20 4F 46 |ST AN EXAMPLE OF| 00000540: 20 48 4F 57 20 59 4F 55 0D 3B 57 4F 55 4C 44 20 | HOW YOU.;WOULD | 00000550: 55 53 45 20 42 52 4B 20 46 52 4F 4D 20 57 49 54 |USE BRK FROM WIT| 00000560: 48 49 4E 20 41 20 50 52 4F 47 52 41 4D 2E 0D 2E |HIN A PROGRAM...| 00000570: 53 4B 49 50 0D 44 45 4D 4F 35 20 4C 44 59 20 23 |SKIP.DEMO5 LDY #| 00000580: 30 0D 44 45 4D 4F 31 30 20 4C 44 41 20 50 52 4F |0.DEMO10 LDA PRO| 00000590: 4D 50 54 2C 59 20 3B 50 52 49 4E 54 20 22 4E 55 |MPT,Y ;PRINT "NU| 000005A0: 4D 42 45 52 3F 22 0D 20 42 45 51 20 44 45 4D 4F |MBER?". BEQ DEMO| 000005B0: 32 30 0D 20 4A 53 52 20 43 48 52 4F 55 54 0D 20 |20. JSR CHROUT. | 000005C0: 49 4E 59 0D 20 42 4E 45 20 44 45 4D 4F 31 30 0D |INY. BNE DEMO10.| 000005D0: 44 45 4D 4F 32 30 20 4A 53 52 20 47 45 54 49 4E |DEMO20 JSR GETIN| 000005E0: 20 3B 43 48 45 43 4B 20 54 48 45 20 4B 45 59 42 | ;CHECK THE KEYB| 000005F0: 4F 41 52 44 0D 20 43 4D 50 20 23 33 20 3B 28 49 |OARD. CMP #3 ;(I| 00000600: 46 20 53 54 4F 50 20 4B 45 59 2C 20 51 55 49 54 |F STOP KEY, QUIT| 00000610: 29 0D 20 42 45 51 20 51 55 49 54 0D 20 43 4D 50 |). BEQ QUIT. CMP| 00000620: 20 23 27 31 20 20 20 20 20 20 20 20 20 3B 46 4F | #'1 ;FO| 00000630: 52 20 4E 55 4D 42 45 52 53 20 31 20 54 48 52 55 |R NUMBERS 1 THRU| 00000640: 20 33 0D 20 42 43 43 20 44 45 4D 4F 32 30 0D 20 | 3. BCC DEMO20. | 00000650: 43 4D 50 20 23 27 34 0D 20 42 43 53 20 44 45 4D |CMP #'4. BCS DEM| 00000660: 4F 32 30 0D 20 4A 53 52 20 43 48 52 4F 55 54 0D |O20. JSR CHROUT.| 00000670: 20 41 4E 44 20 23 25 30 30 30 30 31 31 31 31 20 | AND #%00001111 | 00000680: 3B 4D 41 4B 45 20 23 20 48 45 58 20 31 20 2D 20 |;MAKE # HEX 1 - | 00000690: 33 0D 20 53 54 41 20 54 52 50 4E 4D 20 3B 53 41 |3. STA TRPNM ;SA| 000006A0: 56 45 20 49 4E 20 4F 55 52 20 4F 57 4E 20 50 52 |VE IN OUR OWN PR| 000006B0: 4F 47 52 41 4D 0D 20 4C 44 41 20 23 31 33 20 3B |OGRAM. LDA #13 ;| 000006C0: 50 52 49 4E 54 20 41 20 43 41 52 52 49 41 47 45 |PRINT A CARRIAGE| 000006D0: 20 52 45 54 55 52 4E 0D 20 4A 53 52 20 43 48 52 | RETURN. JSR CHR| 000006E0: 4F 55 54 0D 20 42 52 4B 20 3B 45 58 45 43 55 54 |OUT. BRK ;EXECUT| 000006F0: 45 20 54 52 41 50 0D 54 52 50 4E 4D 20 2E 42 59 |E TRAP.TRPNM .BY| 00000700: 54 20 30 20 3B 28 54 52 41 50 20 23 29 0D 20 4A |T 0 ;(TRAP #). J| 00000710: 4D 50 20 44 45 4D 4F 35 20 3B 41 46 54 45 52 20 |MP DEMO5 ;AFTER | 00000720: 42 52 4B 2C 20 50 52 47 20 43 4F 4E 54 49 4E 55 |BRK, PRG CONTINU| 00000730: 45 53 20 48 45 52 45 0D 2E 53 4B 49 50 0D 51 55 |ES HERE..SKIP.QU| 00000740: 49 54 20 53 45 49 0D 20 4C 44 58 20 4F 4C 44 42 |IT SEI. LDX OLDB| 00000750: 52 4B 0D 20 4C 44 59 20 4F 4C 44 42 52 4B 2B 31 |RK. LDY OLDBRK+1| 00000760: 0D 20 53 54 58 20 43 42 49 4E 56 0D 20 53 54 59 |. STX CBINV. STY| 00000770: 20 43 42 49 4E 56 2B 31 0D 20 43 4C 49 0D 20 52 | CBINV+1. CLI. R| 00000780: 54 53 20 3B 42 41 43 4B 20 54 4F 20 42 41 53 49 |TS ;BACK TO BASI| 00000790: 43 0D 2E 53 4B 49 50 0D 50 52 4F 4D 50 54 20 2E |C..SKIP.PROMPT .| 000007A0: 42 59 54 20 31 33 2C 31 33 2C 27 4E 55 4D 42 45 |BYT 13,13,'NUMBE| 000007B0: 52 20 28 31 20 2D 20 33 29 3F 20 27 2C 30 0D 2E |R (1 - 3)? ',0..| 000007C0: 50 41 47 45 0D 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D |PAGE.;==========| 000007D0: 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D |================| 000007E0: 3D 3D 3D 3D 0D 3B 4E 45 57 20 42 52 4B 20 52 4F |====.;NEW BRK RO| 000007F0: 55 54 49 4E 45 0D 3B 3D 3D 3D 3D 3D 3D 3D 3D 3D |UTINE.;=========| 00000800: 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D 3D |================| 00000810: 3D 3D 3D 3D 3D 0D 2E 53 4B 49 50 0D 3B 45 4E 54 |=====..SKIP.;ENT| 00000820: 52 59 3A 20 28 31 29 20 49 4E 54 45 52 52 55 50 |RY: (1) INTERRUP| 00000830: 54 53 20 44 49 53 41 42 4C 45 44 20 28 45 58 43 |TS DISABLED (EXC| 00000840: 45 50 54 20 4E 4D 49 29 0D 3B 20 20 20 20 20 20 |EPT NMI).; | 00000850: 20 20 20 20 20 53 4F 20 4A 49 46 46 59 20 43 4C | SO JIFFY CL| 00000860: 4F 43 4B 20 49 53 20 4F 46 46 2E 0D 3B 0D 3B 20 |OCK IS OFF..;.; | 00000870: 20 20 20 20 20 20 28 32 29 20 4F 4E 20 45 4E 54 | (2) ON ENT| 00000880: 52 59 20 53 54 41 43 4B 20 4C 4F 4F 4B 53 20 4C |RY STACK LOOKS L| 00000890: 49 4B 45 20 54 48 49 53 2E 2E 2E 0D 3B 20 20 20 |IKE THIS....; | 000008A0: 20 20 20 20 20 20 20 20 28 41 53 53 55 4D 49 4E | (ASSUMIN| 000008B0: 47 20 4F 4C 44 20 53 50 20 57 41 53 20 41 54 20 |G OLD SP WAS AT | 000008C0: 24 46 36 29 0D 3B 0D 3B 20 20 20 20 20 20 20 20 |$F6).;.; | 000008D0: 20 20 20 24 30 31 46 36 20 20 20 20 20 20 3C 2D | $01F6 <-| 000008E0: 20 4F 4C 44 20 53 50 0D 3B 20 20 20 20 20 20 20 | OLD SP.; | 000008F0: 20 20 20 20 24 30 31 46 35 20 20 50 43 48 20 20 | $01F5 PCH | 00000900: 20 20 20 28 53 54 41 43 4B 2B 36 29 0D 3B 20 20 | (STACK+6).; | 00000910: 20 20 20 20 20 20 20 20 20 24 30 31 46 34 20 20 | $01F4 | 00000920: 50 43 4C 20 20 20 20 20 28 53 54 41 43 4B 2B 35 |PCL (STACK+5| 00000930: 29 0D 3B 20 20 20 20 20 20 20 20 20 20 20 24 30 |).; $0| 00000940: 31 46 33 20 20 20 53 52 20 20 20 20 20 28 53 54 |1F3 SR (ST| 00000950: 41 43 4B 2B 34 29 0D 3B 20 20 20 20 20 20 20 20 |ACK+4).; | 00000960: 20 20 20 24 30 31 46 32 20 20 20 2E 41 20 20 20 | $01F2 .A | 00000970: 20 20 28 53 54 41 43 4B 2B 33 29 0D 3B 20 20 20 | (STACK+3).; | 00000980: 20 20 20 20 20 20 20 20 24 30 31 46 31 20 20 20 | $01F1 | 00000990: 2E 58 20 20 20 20 20 28 53 54 41 43 4B 2B 32 29 |.X (STACK+2)| 000009A0: 0D 3B 20 20 20 20 20 20 20 20 20 20 20 24 30 31 |.; $01| 000009B0: 46 30 20 20 20 2E 59 20 20 20 20 20 28 53 54 41 |F0 .Y (STA| 000009C0: 43 4B 2B 31 29 0D 3B 20 20 20 20 20 20 20 20 20 |CK+1).; | 000009D0: 20 20 24 30 31 45 46 20 20 20 20 20 20 3C 2D 20 | $01EF <- | 000009E0: 43 55 52 52 45 4E 54 20 53 50 0D 3B 0D 3B 20 20 |CURRENT SP.;.; | 000009F0: 20 20 20 20 20 28 33 29 20 45 58 50 45 43 54 53 | (3) EXPECTS| 00000A00: 20 54 52 41 50 20 23 20 41 46 54 45 52 20 42 52 | TRAP # AFTER BR| 00000A10: 4B 20 49 4E 53 54 52 2E 0D 3B 20 20 20 20 20 20 |K INSTR..; | 00000A20: 20 20 20 20 20 28 54 48 49 53 20 4C 4F 43 41 54 | (THIS LOCAT| 00000A30: 49 4F 4E 20 43 41 4E 20 42 45 20 46 4F 55 4E 44 |ION CAN BE FOUND| 00000A40: 20 42 59 0D 3B 20 20 20 20 20 20 20 20 20 20 20 | BY.; | 00000A50: 55 53 49 4E 47 20 54 48 45 20 50 43 20 53 41 56 |USING THE PC SAV| 00000A60: 45 44 20 4F 4E 20 53 54 41 43 4B 20 2D 31 2E 29 |ED ON STACK -1.)| 00000A70: 0D 3B 0D 4E 45 57 42 52 4B 20 54 53 58 20 3B 47 |.;.NEWBRK TSX ;G| 00000A80: 45 54 20 43 55 52 52 45 4E 54 20 53 50 20 54 4F |ET CURRENT SP TO| 00000A90: 20 2E 58 0D 20 4C 44 41 20 53 54 41 43 4B 2B 36 | .X. LDA STACK+6| 00000AA0: 2C 58 20 3B 54 4F 20 46 49 4E 44 20 50 43 2D 48 |,X ;TO FIND PC-H| 00000AB0: 49 47 48 0D 20 53 54 41 20 4D 45 4D 4F 52 59 2B |IGH. STA MEMORY+| 00000AC0: 31 0D 20 4C 44 41 20 53 54 41 43 4B 2B 35 2C 58 |1. LDA STACK+5,X| 00000AD0: 20 3B 41 4E 44 20 50 43 2D 4C 4F 57 20 4F 4E 20 | ;AND PC-LOW ON | 00000AE0: 54 48 45 20 53 54 41 43 4B 0D 20 53 54 41 20 4D |THE STACK. STA M| 00000AF0: 45 4D 4F 52 59 20 3B 53 41 56 45 20 54 48 49 53 |EMORY ;SAVE THIS| 00000B00: 20 41 44 44 52 45 53 53 0D 20 42 4E 45 20 4E 45 | ADDRESS. BNE NE| 00000B10: 57 31 30 20 3B 41 4E 44 20 53 55 42 54 52 41 43 |W10 ;AND SUBTRAC| 00000B20: 54 20 2D 31 20 46 52 4F 4D 20 49 54 0D 20 44 45 |T -1 FROM IT. DE| 00000B30: 43 20 4D 45 4D 4F 52 59 2B 31 20 3B 53 4F 20 57 |C MEMORY+1 ;SO W| 00000B40: 45 20 43 41 4E 20 4C 4F 43 41 54 45 20 54 52 41 |E CAN LOCATE TRA| 00000B50: 50 20 23 0D 4E 45 57 31 30 20 44 45 43 20 4D 45 |P #.NEW10 DEC ME| 00000B60: 4D 4F 52 59 0D 20 4C 44 59 20 23 30 0D 20 4C 44 |MORY. LDY #0. LD| 00000B70: 41 20 28 4D 45 4D 4F 52 59 29 2C 59 20 3B 47 45 |A (MEMORY),Y ;GE| 00000B80: 54 20 54 52 41 50 20 23 0D 20 54 41 59 20 3B 41 |T TRAP #. TAY ;A| 00000B90: 44 4A 55 53 54 20 49 54 20 53 4F 20 31 2D 33 0D |DJUST IT SO 1-3.| 00000BA0: 20 44 45 59 20 3B 49 53 20 4E 4F 57 20 30 2D 32 | DEY ;IS NOW 0-2| 00000BB0: 0D 20 54 59 41 0D 20 41 53 4C 20 41 20 3B 4D 55 |. TYA. ASL A ;MU| 00000BC0: 4C 54 49 50 4C 59 20 54 48 49 53 20 23 20 42 59 |LTIPLY THIS # BY| 00000BD0: 20 32 0D 20 54 41 59 0D 20 4C 44 41 20 54 41 42 | 2. TAY. LDA TAB| 00000BE0: 4C 45 2C 59 20 3B 41 4E 44 20 55 53 45 20 49 54 |LE,Y ;AND USE IT| 00000BF0: 20 54 4F 20 4C 4F 4F 4B 20 55 50 0D 20 53 54 41 | TO LOOK UP. STA| 00000C00: 20 4D 45 4D 4F 52 59 20 3B 54 52 41 50 20 41 44 | MEMORY ;TRAP AD| 00000C10: 44 52 45 53 53 45 53 0D 20 49 4E 59 0D 20 4C 44 |DRESSES. INY. LD| 00000C20: 41 20 54 41 42 4C 45 2C 59 0D 20 53 54 41 20 4D |A TABLE,Y. STA M| 00000C30: 45 4D 4F 52 59 2B 31 0D 20 4A 4D 50 20 28 4D 45 |EMORY+1. JMP (ME| 00000C40: 4D 4F 52 59 29 20 3B 47 4F 20 54 4F 20 41 20 54 |MORY) ;GO TO A T| 00000C50: 52 41 50 20 52 4F 55 54 49 4E 45 0D 2E 53 4B 49 |RAP ROUTINE..SKI| 00000C60: 50 0D 3B 54 52 41 50 20 41 44 44 52 45 53 53 45 |P.;TRAP ADDRESSE| 00000C70: 53 0D 3B 0D 54 41 42 4C 45 20 2E 57 4F 52 44 20 |S.;.TABLE .WORD | 00000C80: 54 52 41 50 31 0D 20 2E 57 4F 52 44 20 54 52 41 |TRAP1. .WORD TRA| 00000C90: 50 32 0D 20 2E 57 4F 52 44 20 54 52 41 50 33 0D |P2. .WORD TRAP3.| 00000CA0: 2E 50 41 47 45 0D 3B 2F 2F 2F 2F 2F 2F 2F 2F 2F |.PAGE.;/////////| 00000CB0: 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F |////////////////| 00000CC0: 2F 2F 2F 2F 2F 0D 3B 44 45 4D 4F 20 54 52 41 50 |/////.;DEMO TRAP| 00000CD0: 20 52 4F 55 54 49 4E 45 53 0D 3B 2F 2F 2F 2F 2F | ROUTINES.;/////| 00000CE0: 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F 2F |////////////////| 00000CF0: 2F 2F 2F 2F 2F 2F 2F 2F 2F 0D 2E 53 4B 49 50 0D |/////////..SKIP.| 00000D00: 54 52 41 50 31 20 4C 44 41 20 23 27 31 0D 20 4A |TRAP1 LDA #'1. J| 00000D10: 53 52 20 43 48 52 4F 55 54 0D 20 4A 4D 50 20 54 |SR CHROUT. JMP T| 00000D20: 49 44 59 55 50 20 3B 4D 55 53 54 20 45 4E 44 20 |IDYUP ;MUST END | 00000D30: 57 49 54 48 20 54 48 49 53 0D 2E 53 4B 49 50 0D |WITH THIS..SKIP.| 00000D40: 54 52 41 50 32 20 4C 44 41 20 23 27 32 0D 20 4A |TRAP2 LDA #'2. J| 00000D50: 53 52 20 43 48 52 4F 55 54 0D 20 4A 4D 50 20 54 |SR CHROUT. JMP T| 00000D60: 49 44 59 55 50 0D 2E 53 4B 49 50 0D 54 52 41 50 |IDYUP..SKIP.TRAP| 00000D70: 33 20 4C 44 41 20 23 27 33 0D 20 4A 53 52 20 43 |3 LDA #'3. JSR C| 00000D80: 48 52 4F 55 54 0D 20 4A 4D 50 20 54 49 44 59 55 |HROUT. JMP TIDYU| 00000D90: 50 0D 2E 45 4E 44 0D |P..END. |
.OPT NOSYM.;PUT"@:S/BRK".;**************
******************.;*
*.;* SIMULATING A TRAP WITH
BRK *.;* -------------------------- *
.;* *.;*
*.;* BRK VECT
OR IS DIVERTED SO *.;* THAT "INVISIBL
E" SUBROUTINES *.;* CAN BE CALLED.
*.;*
*.;* *.;
* - BY TOM HUGHES V022287 - *.;*
*.;************
********************..SKIP.;.;C64 EQUATE
S.;.CBINV = $0316 ;BRK VECTOR (2).CHROUT
= $FFD2 ;OUTPUT A CHAR.CLRCHN = $FFCC ;
I/O TO DEFAULTS.GETIN = $FFE4 ;INPUT A C
HAR.MEMORY = $8D ;TEMP STORAGE (2).OLDBR
K = $8B ;STORAGE FOR STANDARD BRK (2).ST
ACK = $0100 ;65XX STACK LOCATION.TIDYUP
= $FEBC ;RECOVER FROM INTERRUPT..SKIP.*
= $8000 ;SYS 32768..SKIP.;--------------
----------------.;SET BRK VECTOR TO OUR
ROUTINE.;------------------------------.
.SKIP.;IN ACTUAL USE, THIS WOULD BE A SU
BROUTINE.;CALLED ONCE TO DIVERT THE BRK
VECTOR...SKIP. JSR CLRCHN. SEI ;DISABLE
INTERRUPTS. LDX CBINV. LDY CBINV+1. STX
OLDBRK ;SAVE THE OLD BRK VECTOR. STY OLD
BRK+1. LDX #<NEWBRK ;THEN SET NEW VECTOR
. LDY #>NEWBRK. STX CBINV. STY CBINV+1.
CLI ;ENABLE INTERRUPTS..PAGE.;----------
--------------------.;DEMO BRK HANDLER.;
------------------------------..SKIP.;TH
IS IS JUST AN EXAMPLE OF HOW YOU.;WOULD
USE BRK FROM WITHIN A PROGRAM...SKIP.DEM
O5 LDY #0.DEMO10 LDA PROMPT,Y ;PRINT "NU
MBER?". BEQ DEMO20. JSR CHROUT. INY. BNE
DEMO10.DEMO20 JSR GETIN ;CHECK THE KEYB
OARD. CMP #3 ;(IF STOP KEY, QUIT). BEQ Q
UIT. CMP #'1 ;FOR NUMBERS 1 THRU
3. BCC DEMO20. CMP #'4. BCS DEMO20. JSR
CHROUT. AND #%00001111 ;MAKE # HEX 1 -
3. STA TRPNM ;SAVE IN OUR OWN PROGRAM. L
DA #13 ;PRINT A CARRIAGE RETURN. JSR CHR
OUT. BRK ;EXECUTE TRAP.TRPNM .BYT 0 ;(TR
AP #). JMP DEMO5 ;AFTER BRK, PRG CONTINU
ES HERE..SKIP.QUIT SEI. LDX OLDBRK. LDY
OLDBRK+1. STX CBINV. STY CBINV+1. CLI. R
TS ;BACK TO BASIC..SKIP.PROMPT .BYT 13,1
3,'NUMBER (1 - 3)? ',0..PAGE.;==========
====================.;NEW BRK ROUTINE.;=
=============================..SKIP.;ENT
RY: (1) INTERRUPTS DISABLED (EXCEPT NMI)
.; SO JIFFY CLOCK IS OFF..;.;
(2) ON ENTRY STACK LOOKS LIKE THIS
....; (ASSUMING OLD SP WAS AT
$F6).;.; $01F6 <- OLD SP.
; $01F5 PCH (STACK+6).;
$01F4 PCL (STACK+5).;
$01F3 SR (STACK+4).;
$01F2 .A (STACK+3).;
$01F1 .X (STACK+2).; $01
F0 .Y (STACK+1).; $01EF
<- CURRENT SP.;.; (3) EXPECTS
TRAP # AFTER BRK INSTR..; (TH
IS LOCATION CAN BE FOUND BY.;
USING THE PC SAVED ON STACK -1.).;.NEWBR
K TSX ;GET CURRENT SP TO .X. LDA STACK+6
,X ;TO FIND PC-HIGH. STA MEMORY+1. LDA S
TACK+5,X ;AND PC-LOW ON THE STACK. STA M
EMORY ;SAVE THIS ADDRESS. BNE NEW10 ;AND
SUBTRACT -1 FROM IT. DEC MEMORY+1 ;SO W
E CAN LOCATE TRAP #.NEW10 DEC MEMORY. LD
Y #0. LDA (MEMORY),Y ;GET TRAP #. TAY ;A
DJUST IT SO 1-3. DEY ;IS NOW 0-2. TYA. A
SL A ;MULTIPLY THIS # BY 2. TAY. LDA TAB
LE,Y ;AND USE IT TO LOOK UP. STA MEMORY
;TRAP ADDRESSES. INY. LDA TABLE,Y. STA M
EMORY+1. JMP (MEMORY) ;GO TO A TRAP ROUT
INE..SKIP.;TRAP ADDRESSES.;.TABLE .WORD
TRAP1. .WORD TRAP2. .WORD TRAP3..PAGE.;/
/////////////////////////////.;DEMO TRAP
ROUTINES.;/////////////////////////////
/..SKIP.TRAP1 LDA #'1. JSR CHROUT. JMP T
IDYUP ;MUST END WITH THIS..SKIP.TRAP2 LD
A #'2. JSR CHROUT. JMP TIDYUP..SKIP.TRAP
3 LDA #'3. JSR CHROUT. JMP TIDYUP..END.
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL