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

1581.BUD

FILE INFORMATION

FILENAME(S): 1581.BUD

FILE TYPE(S): SEQ

FILE SIZE: 2.1K

FIRST SEEN: 2025-11-30 21:12:51

APPEARS ON: 1 disk(s)

FILE HASH

fada84c74ae2cb41ab02451140353f9acbc5c5496574f0cc05c509d93d3cda3f

FOUND ON DISKS (1 DISKS)

DISK TITLE FILENAME FILE TYPE COLLECTION TRACK SECTOR ACTIONS
TRANSACTOR DISK 1581.BUD SEQ DuncanTwain 11 14 DOWNLOAD FILE

FILE CONTENT & ANALYSIS

00000000: 3B 20 31 35 38 31 20 44  49 53 50 4C 41 59 20 54  |; 1581 DISPLAY T|
00000010: 26 53 20 42 55 52 53 54  20 4D 4F 44 45 20 53 4F  |&S BURST MODE SO|
00000020: 55 52 43 45 20 43 4F 44  45 0D 3B 0D 3B 20 3C 43  |URCE CODE.;.; <C|
00000030: 3E 20 4D 2E 20 47 41 52  41 4D 53 5A 45 47 48 59  |> M. GARAMSZEGHY|
00000040: 20 31 39 38 37 0D 3B 0D  3B 0D 50 4E 54 52 20 20  | 1987.;.;.PNTR  |
00000050: 20 3D 20 24 46 41 20 20  20 20 20 20 20 20 20 3B  | = $FA         ;|
00000060: 20 5A 45 52 4F 20 50 41  47 45 20 50 4F 49 4E 54  | ZERO PAGE POINT|
00000070: 45 52 0D 53 49 5A 45 20  20 20 3D 20 24 46 43 20  |ER.SIZE   = $FC |
00000080: 20 20 20 20 20 20 20 20  3B 20 4E 55 4D 42 45 52  |        ; NUMBER|
00000090: 20 4F 46 20 42 4C 4F 43  4B 53 20 54 4F 20 52 45  | OF BLOCKS TO RE|
000000A0: 41 44 0D 4D 4D 55 20 20  20 20 3D 20 24 46 46 30  |AD.MMU    = $FF0|
000000B0: 30 20 20 20 20 20 20 20  3B 20 4D 4D 55 20 43 4F  |0       ; MMU CO|
000000C0: 4E 46 49 47 20 52 45 47  0D 44 41 54 41 20 20 20  |NFIG REG.DATA   |
000000D0: 3D 20 24 31 33 30 30 20  20 20 20 20 20 20 3B 20  |= $1300       ; |
000000E0: 53 54 41 52 54 20 4F 46  20 44 41 54 41 20 42 55  |START OF DATA BU|
000000F0: 46 46 45 52 0D 43 4F 4E  46 20 20 20 3D 20 24 30  |FFER.CONF   = $0|
00000100: 44 30 30 20 20 20 20 20  20 20 3B 20 53 54 41 52  |D00       ; STAR|
00000110: 54 20 4F 46 20 44 49 53  4B 20 54 59 50 45 20 42  |T OF DISK TYPE B|
00000120: 55 46 46 45 52 0D 43 4C  4F 43 4B 20 20 3D 20 24  |UFFER.CLOCK  = $|
00000130: 44 44 30 30 20 20 20 20  20 20 20 3B 20 42 55 52  |DD00       ; BUR|
00000140: 53 54 20 43 4C 4F 43 4B  20 4C 49 4E 45 0D 43 31  |ST CLOCK LINE.C1|
00000150: 44 52 20 20 20 3D 20 24  44 43 30 43 20 20 20 20  |DR   = $DC0C    |
00000160: 20 20 20 3B 20 42 55 52  53 54 20 44 41 54 41 20  |   ; BURST DATA |
00000170: 52 45 47 49 53 54 45 52  0D 43 31 49 43 52 20 20  |REGISTER.C1ICR  |
00000180: 3D 20 24 44 43 30 44 20  20 20 20 20 20 20 3B 20  |= $DC0D       ; |
00000190: 42 55 52 53 54 20 49 4E  54 45 52 52 55 50 54 20  |BURST INTERRUPT |
000001A0: 52 45 47 49 53 54 45 52  0D 3B 0D 3B 0D 20 20 2A  |REGISTER.;.;.  *|
000001B0: 3D 20 24 30 42 30 30 20  20 20 20 20 20 20 20 3B  |= $0B00        ;|
000001C0: 20 44 45 43 49 4D 41 4C  20 32 38 31 36 0D 20 20  | DECIMAL 2816.  |
000001D0: 2E 4F 50 54 20 4F 4F 20  20 20 20 20 20 20 20 20  |.OPT OO         |
000001E0: 3B 20 41 53 53 45 4D 42  4C 45 20 54 4F 20 4D 45  |; ASSEMBLE TO ME|
000001F0: 4D 4F 52 59 0D 3B 0D 4A  4D 50 54 41 42 4C 45 20  |MORY.;.JMPTABLE |
00000200: 3D 2A 0D 20 20 20 20 20  20 4A 4D 50 20 54 45 53  |=*.      JMP TES|
00000210: 54 44 53 4B 20 20 3B 20  41 4E 41 4C 59 5A 45 20  |TDSK  ; ANALYZE |
00000220: 44 49 53 4B 0D 20 20 20  20 20 20 4A 4D 50 20 52  |DISK.      JMP R|
00000230: 45 41 44 44 41 54 41 20  3B 20 42 55 52 53 54 20  |EADDATA ; BURST |
00000240: 4D 45 4D 4F 52 59 20 52  45 41 44 0D 3B 0D 53 45  |MEMORY READ.;.SE|
00000250: 54 42 4E 4B 20 3D 2A 20  20 20 3B 20 53 45 54 20  |TBNK =*   ; SET |
00000260: 54 4F 20 42 41 4E 4B 20  31 35 0D 20 20 20 20 20  |TO BANK 15.     |
00000270: 20 4C 44 41 20 23 30 0D  20 20 20 20 20 20 53 54  | LDA #0.      ST|
00000280: 41 20 4D 4D 55 0D 20 20  20 20 20 20 52 54 53 0D  |A MMU.      RTS.|
00000290: 3B 0D 54 4F 47 47 4C 45  20 3D 2A 20 20 20 3B 20  |;.TOGGLE =*   ; |
000002A0: 54 4F 47 47 4C 45 20 44  41 54 41 20 4C 49 4E 45  |TOGGLE DATA LINE|
000002B0: 0D 20 20 20 20 20 20 4C  44 41 20 23 38 0D 54 4F  |.      LDA #8.TO|
000002C0: 47 31 20 20 42 49 54 20  43 31 49 43 52 0D 20 20  |G1  BIT C1ICR.  |
000002D0: 20 20 20 20 42 45 51 20  54 4F 47 31 20 20 20 20  |    BEQ TOG1    |
000002E0: 20 3B 20 57 41 49 54 20  46 4F 52 20 49 43 52 0D  | ; WAIT FOR ICR.|
000002F0: 20 20 20 20 20 20 4C 44  41 20 43 4C 4F 43 4B 0D  |      LDA CLOCK.|
00000300: 20 20 20 20 20 20 45 4F  52 20 23 24 31 30 20 20  |      EOR #$10  |
00000310: 20 20 20 3B 20 54 4F 47  47 4C 45 20 43 4C 4F 43  |   ; TOGGLE CLOC|
00000320: 4B 0D 20 20 20 20 20 20  53 54 41 20 43 4C 4F 43  |K.      STA CLOC|
00000330: 4B 0D 20 20 20 20 20 20  4C 44 41 20 43 31 44 52  |K.      LDA C1DR|
00000340: 20 20 20 20 20 3B 20 47  45 54 20 41 20 44 41 54  |     ; GET A DAT|
00000350: 41 20 42 59 54 45 0D 20  20 20 20 20 20 52 54 53  |A BYTE.      RTS|
00000360: 0D 3B 0D 52 45 53 45 54  20 3D 2A 20 20 20 3B 20  |.;.RESET =*   ; |
00000370: 49 4E 49 54 20 20 42 55  52 53 54 20 4D 4F 44 45  |INIT  BURST MODE|
00000380: 0D 20 20 20 20 20 20 53  45 49 0D 20 20 20 20 20  |.      SEI.     |
00000390: 20 42 49 54 20 43 31 49  43 52 0D 20 20 20 20 20  | BIT C1ICR.     |
000003A0: 20 4C 44 41 20 43 4C 4F  43 4B 0D 20 20 20 20 20  | LDA CLOCK.     |
000003B0: 20 45 4F 52 20 23 24 31  30 20 20 20 20 20 3B 20  | EOR #$10     ; |
000003C0: 54 4F 47 47 4C 45 20 43  4C 4F 43 4B 0D 20 20 20  |TOGGLE CLOCK.   |
000003D0: 20 20 20 53 54 41 20 43  4C 4F 43 4B 0D 20 20 20  |   STA CLOCK.   |
000003E0: 20 20 20 52 54 53 0D 3B  0D 54 45 53 54 44 53 4B  |   RTS.;.TESTDSK|
000003F0: 20 3D 2A 20 3B 20 42 55  52 53 54 20 4D 4F 44 45  | =* ; BURST MODE|
00000400: 20 51 55 45 52 59 20 44  49 53 4B 20 46 4F 52 4D  | QUERY DISK FORM|
00000410: 41 54 0D 20 20 20 20 20  20 53 54 41 20 50 4E 54  |AT.      STA PNT|
00000420: 52 20 20 20 20 20 3B 20  53 41 56 45 20 4F 46 46  |R     ; SAVE OFF|
00000430: 53 45 54 20 49 4E 54 4F  20 46 4F 52 4D 41 54 20  |SET INTO FORMAT |
00000440: 42 55 46 46 45 52 0D 20  20 20 20 20 20 4A 53 52  |BUFFER.      JSR|
00000450: 20 53 45 54 42 4E 4B 20  20 20 3B 20 47 4F 20 54  | SETBNK   ; GO T|
00000460: 4F 20 42 41 4E 4B 20 31  35 0D 20 20 20 20 20 20  |O BANK 15.      |
00000470: 4C 44 41 20 23 3E 43 4F  4E 46 20 20 20 3B 20 48  |LDA #>CONF   ; H|
00000480: 49 47 48 20 42 59 54 45  20 4F 46 20 46 4F 52 4D  |IGH BYTE OF FORM|
00000490: 41 54 20 42 55 46 46 45  52 0D 20 20 20 20 20 20  |AT BUFFER.      |
000004A0: 53 54 41 20 50 4E 54 52  2B 31 0D 20 20 20 20 20  |STA PNTR+1.     |
000004B0: 20 4A 53 52 20 52 45 53  45 54 20 20 20 20 3B 20  | JSR RESET    ; |
000004C0: 53 54 41 52 54 20 42 55  52 53 54 20 4D 4F 44 45  |START BURST MODE|
000004D0: 0D 20 20 20 20 20 20 4C  44 59 20 23 30 0D 54 45  |.      LDY #0.TE|
000004E0: 53 31 20 20 4A 53 52 20  54 4F 47 47 4C 45 20 20  |S1  JSR TOGGLE  |
000004F0: 20 3B 20 47 45 54 20 46  49 52 53 54 20 53 54 41  | ; GET FIRST STA|
00000500: 54 55 53 20 42 59 54 45  0D 20 20 20 20 20 20 53  |TUS BYTE.      S|
00000510: 54 41 20 28 50 4E 54 52  29 2C 59 20 3B 20 41 4E  |TA (PNTR),Y ; AN|
00000520: 44 20 53 54 41 53 48 20  49 54 0D 20 20 20 20 20  |D STASH IT.     |
00000530: 20 41 4E 44 20 23 24 30  45 20 20 20 20 20 3B 20  | AND #$0E     ; |
00000540: 43 48 45 43 4B 20 46 4F  52 20 45 52 52 4F 52 53  |CHECK FOR ERRORS|
00000550: 0D 20 20 20 20 20 20 42  4E 45 20 45 58 49 54 54  |.      BNE EXITT|
00000560: 45 53 54 0D 20 20 20 20  20 20 49 4E 59 0D 20 20  |EST.      INY.  |
00000570: 20 20 20 20 43 50 59 20  23 32 20 20 20 20 0D 20  |    CPY #2    . |
00000580: 20 20 20 20 20 42 4E 45  20 54 45 53 31 20 20 20  |     BNE TES1   |
00000590: 20 20 3B 20 47 45 54 20  4E 45 58 54 20 53 54 41  |  ; GET NEXT STA|
000005A0: 54 55 53 20 42 59 54 45  0D 54 45 53 32 20 20 4A  |TUS BYTE.TES2  J|
000005B0: 53 52 20 54 4F 47 47 4C  45 20 20 20 3B 20 47 45  |SR TOGGLE   ; GE|
000005C0: 54 20 44 41 54 41 20 42  59 54 45 0D 20 20 20 20  |T DATA BYTE.    |
000005D0: 20 20 53 54 41 20 28 50  4E 54 52 29 2C 59 20 3B  |  STA (PNTR),Y ;|
000005E0: 20 41 4E 44 20 53 41 56  45 20 49 54 0D 20 20 20  | AND SAVE IT.   |
000005F0: 20 20 20 49 4E 59 0D 20  20 20 20 20 20 43 50 59  |   INY.      CPY|
00000600: 20 23 37 20 20 20 20 20  20 20 3B 20 43 48 45 43  | #7       ; CHEC|
00000610: 4B 20 46 4F 52 20 41 4C  4C 20 44 4F 4E 45 0D 20  |K FOR ALL DONE. |
00000620: 20 20 20 20 20 42 4E 45  20 54 45 53 32 0D 45 58  |     BNE TES2.EX|
00000630: 49 54 54 45 53 54 20 3D  2A 20 20 3B 20 45 58 49  |ITTEST =*  ; EXI|
00000640: 54 20 44 49 53 4B 20 54  45 53 54 20 52 4F 55 54  |T DISK TEST ROUT|
00000650: 49 4E 45 0D 20 20 20 20  20 20 43 4C 49 20 20 20  |INE.      CLI   |
00000660: 20 20 20 20 20 20 20 3B  20 52 45 53 54 4F 52 45  |       ; RESTORE|
00000670: 20 49 4E 54 45 52 52 55  50 54 53 0D 20 20 20 20  | INTERRUPTS.    |
00000680: 20 20 52 54 53 0D 3B 0D  52 45 41 44 44 41 54 41  |  RTS.;.READDATA|
00000690: 20 3D 2A 20 20 3B 20 42  55 52 53 54 20 4D 4F 44  | =*  ; BURST MOD|
000006A0: 45 20 4D 45 4D 4F 52 59  20 52 45 41 44 0D 20 20  |E MEMORY READ.  |
000006B0: 20 20 20 20 53 54 41 20  53 49 5A 45 20 20 20 20  |    STA SIZE    |
000006C0: 20 3B 20 4E 55 4D 42 45  52 20 4F 46 20 50 41 47  | ; NUMBER OF PAG|
000006D0: 45 53 20 54 4F 20 52 45  41 44 0D 20 20 20 20 20  |ES TO READ.     |
000006E0: 20 4C 44 41 20 23 3C 44  41 54 41 0D 20 20 20 20  | LDA #<DATA.    |
000006F0: 20 20 53 54 41 20 50 4E  54 52 20 20 20 20 20 3B  |  STA PNTR     ;|
00000700: 20 53 45 54 20 50 4F 49  4E 54 45 52 20 54 4F 20  | SET POINTER TO |
00000710: 44 41 54 41 20 42 55 46  46 45 52 0D 20 20 20 20  |DATA BUFFER.    |
00000720: 20 20 4C 44 41 20 23 3E  44 41 54 41 0D 20 20 20  |  LDA #>DATA.   |
00000730: 20 20 20 53 54 41 20 50  4E 54 52 0D 20 20 20 20  |   STA PNTR.    |
00000740: 20 20 4A 53 52 20 53 45  54 42 4E 4B 20 20 20 3B  |  JSR SETBNK   ;|
00000750: 20 53 45 54 20 42 41 4E  4B 20 54 4F 20 31 35 0D  | SET BANK TO 15.|
00000760: 20 20 20 20 20 20 4A 53  52 20 52 45 53 45 54 20  |      JSR RESET |
00000770: 20 20 20 3B 20 53 54 41  52 54 20 42 55 52 53 54  |   ; START BURST|
00000780: 20 4D 4F 44 45 0D 20 20  20 20 20 20 4C 44 59 20  | MODE.      LDY |
00000790: 23 30 0D 52 45 41 31 20  20 4A 53 52 20 54 4F 47  |#0.REA1  JSR TOG|
000007A0: 47 4C 45 20 20 20 3B 20  47 45 54 20 44 41 54 41  |GLE   ; GET DATA|
000007B0: 20 42 59 54 45 20 0D 20  20 20 20 20 20 53 54 41  | BYTE .      STA|
000007C0: 20 28 50 4E 54 52 29 2C  59 20 3B 20 41 4E 44 20  | (PNTR),Y ; AND |
000007D0: 53 41 56 45 20 49 54 0D  20 20 20 20 20 20 49 4E  |SAVE IT.      IN|
000007E0: 59 0D 20 20 20 20 20 20  42 4E 45 20 52 45 41 31  |Y.      BNE REA1|
000007F0: 20 20 20 20 20 3B 20 45  4E 44 20 4F 46 20 50 41  |     ; END OF PA|
00000800: 47 45 3F 0D 20 20 20 20  20 20 44 45 43 20 53 49  |GE?.      DEC SI|
00000810: 5A 45 0D 20 20 20 20 20  20 42 45 51 20 45 58 49  |ZE.      BEQ EXI|
00000820: 54 54 45 53 54 20 3B 20  4C 41 53 54 20 50 41 47  |TTEST ; LAST PAG|
00000830: 45 3F 0D 20 20 20 20 20  20 49 4E 43 20 50 4E 54  |E?.      INC PNT|
00000840: 52 2B 31 0D 20 20 20 20  20 20 4A 4D 50 20 52 45  |R+1.      JMP RE|
00000850: 41 31 20 20 20 20 20 3B  20 47 4F 20 47 45 54 20  |A1     ; GO GET |
00000860: 4E 45 58 54 20 50 41 47  45 0D 3B 0D              |NEXT PAGE.;.    |
; 1581 DISPLAY T&S BURST MODE SOURCE COD
E.;.; <C> M. GARAMSZEGHY 1987.;.;.PNTR  
 = $FA         ; ZERO PAGE POINTER.SIZE 
  = $FC         ; NUMBER OF BLOCKS TO RE
AD.MMU    = $FF00       ; MMU CONFIG REG
.DATA   = $1300       ; START OF DATA BU
FFER.CONF   = $0D00       ; START OF DIS
K TYPE BUFFER.CLOCK  = $DD00       ; BUR
ST CLOCK LINE.C1DR   = $DC0C       ; BUR
ST DATA REGISTER.C1ICR  = $DC0D       ; 
BURST INTERRUPT REGISTER.;.;.  *= $0B00 
       ; DECIMAL 2816.  .OPT OO         
; ASSEMBLE TO MEMORY.;.JMPTABLE =*.     
 JMP TESTDSK  ; ANALYZE DISK.      JMP R
EADDATA ; BURST MEMORY READ.;.SETBNK =* 
  ; SET TO BANK 15.      LDA #0.      ST
A MMU.      RTS.;.TOGGLE =*   ; TOGGLE D
ATA LINE.      LDA #8.TOG1  BIT C1ICR.  
    BEQ TOG1     ; WAIT FOR ICR.      LD
A CLOCK.      EOR #$10     ; TOGGLE CLOC
K.      STA CLOCK.      LDA C1DR     ; G
ET A DATA BYTE.      RTS.;.RESET =*   ; 
INIT  BURST MODE.      SEI.      BIT C1I
CR.      LDA CLOCK.      EOR #$10     ; 
TOGGLE CLOCK.      STA CLOCK.      RTS.;
.TESTDSK =* ; BURST MODE QUERY DISK FORM
AT.      STA PNTR     ; SAVE OFFSET INTO
 FORMAT BUFFER.      JSR SETBNK   ; GO T
O BANK 15.      LDA #>CONF   ; HIGH BYTE
 OF FORMAT BUFFER.      STA PNTR+1.     
 JSR RESET    ; START BURST MODE.      L
DY #0.TES1  JSR TOGGLE   ; GET FIRST STA
TUS BYTE.      STA (PNTR),Y ; AND STASH 
IT.      AND #$0E     ; CHECK FOR ERRORS
.      BNE EXITTEST.      INY.      CPY 
#2    .      BNE TES1     ; GET NEXT STA
TUS BYTE.TES2  JSR TOGGLE   ; GET DATA B
YTE.      STA (PNTR),Y ; AND SAVE IT.   
   INY.      CPY #7       ; CHECK FOR AL
L DONE.      BNE TES2.EXITTEST =*  ; EXI
T DISK TEST ROUTINE.      CLI          ;
 RESTORE INTERRUPTS.      RTS.;.READDATA
 =*  ; BURST MODE MEMORY READ.      STA 
SIZE     ; NUMBER OF PAGES TO READ.     
 LDA #<DATA.      STA PNTR     ; SET POI
NTER TO DATA BUFFER.      LDA #>DATA.   
   STA PNTR.      JSR SETBNK   ; SET BAN
K TO 15.      JSR RESET    ; START BURST
 MODE.      LDY #0.REA1  JSR TOGGLE   ; 
GET DATA BYTE .      STA (PNTR),Y ; AND 
SAVE IT.      INY.      BNE REA1     ; E
ND OF PAGE?.      DEC SIZE.      BEQ EXI
TTEST ; LAST PAGE?.      INC PNTR+1.    
  JMP REA1     ; GO GET NEXT PAGE.;.
C64 Preview

> CLICK IMAGE PREVIEW FOR FULL MODAL