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 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL