_  __   _  _         _ _     _      _           _           
  __| |/ /_ | || |     __| (_)___| | __ (_)_ __   __| | _____  __
 / _` | '_ \| || |_   / _` | / __| |/ / | | '_ \ / _` |/ _ \ \/ /
| (_| | (_) |__   _| | (_| | \__ \   <  | | | | | (_| |  __/>  < 
 \__,_|\___/   |_|    \__,_|_|___/_|\_\ |_|_| |_|\__,_|\___/_/\_\
                                                                 
            

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 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL