.MAIN. HCD65XX V3.1 10JULY87 PAGE 1 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 1 2 ;* ------------------------ * 3 ;* 1571 ÂÕÒÓÔ ÓÕÂÒÏÕÔÉÎÅÓ * 4 ;* ------------------------ * 5 ;* 6 ;* ÔHE FOLLOWING BURST SUBROUTINES HAVE BEEN DESIGNED FOR USE IN * 7 ;* ÂÁÓÉà AND MACHINE LANGUAGE PROGRAMS. * 8 ;* 9 ;* ÉF YOU ARE PROGRAMMING IN ASSEMBLY LANGUAGE, YOU CAN USE THESE * 10 ;* ROUTINES AS IS, OR YOU CAN USE THEM AS A FRAMEWORK TO BUILD UPON. * 11 ;* 12 ;* ÉF YOU ARE PROGRAMMING IN Ã128 ÂÁÓÉÃ, YOU SHOULD FOLLOW THE * 13 ;* PROCEDURE SHOWN BELOW. (ÎOTE: YOU CANNOT USE THE BURST COMMANDS * 14 ;* WITH THE Ã64.) * 15 ;* 16 ;* ÂÌÏÁÄ THE BINARY FILE CONTAINING THE BURST ROUTINES. * 17 ;* ÔHE FILE NAME IS "1571 ÂÕÒÓÔ.ÂÉÎ". * 18 ;* 19 ;* ÁSSIGN A LOGICAL FILE NUMBER TO THE COMMAND CHANNEL TO THE 1571. * 20 ;* 21 ;* ÏPEN THE COMMAND CHANNEL WITHIN YOUR ÂÁÓÉà PROGRAM. * 22 ;* 23 ;* ÅXECUTE THE ÂÁÎË 0 COMMAND. ÔHIS WILL TELL ÂÁÓÉà TO ÐÅÅË AND * 24 ;* ÐÏËÅ TO THE ÒÁÍ UNDER THE ÂÁÓÉà ÒÏÍ. * 25 ;* 26 ;* ÐÏËÅ THE LOGICAL FILE NUMBER TO ÌÆ. * 27 ;* 28 ;* ÐÏËÅ THE APPROPRIATE PARAMETERS INTO THE PROPER VARIABLE * 29 ;* LOCATIONS, AND ÓÙÓ TO THE DESIRED ROUTINE. * 30 ;* 31 ;* ÔHE ÂÕÒÓÔ PROTOCOL AND HANDSHAKING WILL BE DONE AUTOMATICALLY. * 32 ;* ÔHE ÂÁÓÉà PROGRAM CAN THEN ÐÅÅË ANY VALUES RETURNED. * 33 ;* 34 ;* ÉF YOU ARE USING A ÒÁÍ BUFFER, BE SURE THAT THE BUFFER USES ONLY THE * 35 ;* MEMORY BETWEEN THE END OF ÂÁÓÉà TEXT AND $Ã000. ÔHE ËÅÒÎÅÌ AND É/Ï * 36 ;* WILL NEED THE SPACE AFTER $Ã000. ÂÁÓÉà PROGRAMS NORMALLY START AT * 37 ;* $1Ã00. ÉF YOU ENABLE BIT-MAP GRAPHICS, THEN YOUR PROGRAM WILL START * 38 ;* AT $4000. ÔHE BINARY FILE CONTAINING THESE ÂÕÒÓÔ ROUTINES LOADS AT * 39 ;* $1300, SO THAT THEY ARE IN A SAFE PLACE BELOW THE ÂÁÓÉà TEXT AREA. * 40 ;* 41 ;* ÉF YOU WANT TO MAKE YOUR PROGRAM INTELLIGENT, THE POINTERS TO THE * 42 ;* EXACT BEGINNING AND END OF THE ÂÁÓÉà PROGRAM ARE IN LOCATIONS $002Ä * 43 ;* AND $1210 RESPECTIVELY. ÆOR THE MOST PART, HOWEVER, THERE IS NO NEED * 44 ;* TO LOOK AT THOSE VALUES. ÁS A GENERAL RULE, IF YOU USE MEMORY * 45 ;* BY WORKING BACKWARDS FROM $Ã000, YOU'LL BE ÏË. ×HEN YOU ÐÅÅË AND * 46 ;* ÐÏËÅ THIS MEMORY FROM ÂÁÓÉÃ, BE SURE TO EXECUTE THE ÂÁÎË 0 COMMAND. * 47 ;* ÔHIS TELLS ÂÁÓÉà TO ÐÅÅË AND ÐÏËÅ TO THE ÒÁÍ UNDER THE ÂÁÓÉà ÒÏÍ. * 48 ;* 49 ;* ÎÏÔÅ: ÔHERE IS NO ÂÕÒÓÔ ÆÏÒÍÁÔ ROUTINE PROVIDED HERE. ÉF YOU NEED * 50 ;* DO FORMATTING THEN USE ÂÁÓÉÃ. ÔHE FOLLOWING ÂÁÓÉà COMMAND * 51 ;* WILL FORMAT PHYSICAL TRACKS 10 THROUGH 20 OF THE DISK WITH 5 * 52 ;* 1024 BYTE ÍÆÍ SECTORS PER SIDE (SECTORS 1-5). * 53 ;* 54 ;* ÏÐÅÎ 1,8,15 * 55 ;* ÐÒÉÎÔ#1,"Õ0"ÃÈÒ$(38)ÃÈÒ$(129)ÃÈÒ$(0)ÃÈÒ$(3)ÃÈÒ$(10)ÃÈÒ$(5) * 56 ;* ÃÈÒ$(10)ÃÈÒ$(10); * 57 ;* .MAIN. HCD65XX V3.1 10JULY87 PAGE 2 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 58 ;* 59 ;* 60 ;* ÎOTE THE USE OF THE SEMICOLON (;) AT THE END OF THE STATEMENT. ÔHIS * 61 ;* IS VERY IMPORTANT! ÉF THERE WAS NO SEMICOLON, THE Ã128 WOULD * 62 ;* SEND A CARRIAGE RETURN AFTER THE LAST PARAMETER. ÓINCE THE 1571 * 63 ;* COUNTS THE NUMBER OF BYTES SENT TO DETERMINE THE NUMBER OF OPTIONAL * 64 ;* PARAMETERS THAT ARE BEING SENT, IT WOULD MISINTERPRET THE CARRIAGE * 65 ;* RETURN AS THE NEXT OPTIONAL PARAMETER. ÉN THIS CASE, IT WOULD BE * 66 ;* FILL BYTE. * 67 ;* * 68 69 ;********************************************************************* 70 ;* * 71 ;* ÖÁÒÉÁÂÌÅ ÄÅÃÌÁÒÁÔÉÏÎÓ * 72 ;* * 73 ;* ÔHESE VARIABLES ARE PARAMETERS PASSED BETWEEN A ÂÕÒÓÔ ROUTINE AND * 74 ;* ITS CALLING PROGRAM. * 75 ;* * 76 ;************************************************************************ 77 78 =1300 79 *=$1300 80 1300 00 81 ÓÔÁÔÕÓ .BYTE 0 ; STATUS BYTE 1301 08 82 ÄÅÖ .BYTE 8 ; DEVICE NUMBER 1302 08 83 ÌÆ .BYTE 8 ; LOGICAL FILE NUMBER 1303 =1304 84 ÔÒÁÃË *=*+1 ; TRACK 1304 =1305 85 ÓÅÃÔÏÒ *=*+1 ; SECTOR 1305 =1306 86 ÎÕÍÓÅà *=*+1 ; ÎUMBER OF SECTORS. 1306 =1308 87 ÂÕÆÌÏà *=*+2 ; ÐAGE # OF BUFFER TO GET/PUT DATA. 1308 =1309 88 ÓÅÃÓÉÚÅ *=*+1 ; ÓECTOR SIZE (1=256, 2=512, 4=1024) 1309 =130A 89 ÓÉÄÅ *=*+1 ; ÐHYSICAL SIDE OF THE DISK (0 OR 1). 130A =130B 90 ÍÉÎÓÅà *=*+1 ; ÍINIMUM LOGICAL SECTOR FOUND IN ÑÕÅÒÙ. 130B =130C 91 ÍÁØÓÅà *=*+1 ; ÍAXIMUM LOGICAL SECTOR FOUND IN ÑÕÅÒÙ. 130C =130D 92 ÉÎÔÌÖ *=*+1 ; ÐHYSICAL INTERLEAVE FOUND IN ÑÕÅÒÙ. 130D =130E 93 ÆÌÁÇ *=*+1 ; ÅMPTY TRACK FLAG. 94 ; ÔHIS FLAG IS USED TO INDICATE THAT THE 95 ; TRACK OR DATA JUST READ CONTAINS ALL 0'S. ÔHIS IS HANDY IN SOME CASES, 96 ; SUCH AS DURING A DISK COPY PROGRAM. ×HEN A DISK IS FORMATTED, THE 97 ; SECTORS ARE FILLED WITH 0'S. ÉF A SECTOR TO BE COPIED CONTAINS 98 ; ALL 0'S, THEN WE DON'T BOTHER TO WRITE IT TO THE DESTINATION DISK 99 100 101 ;****************************************************************** 102 ;* * 103 ;* ÈERE ARE OTHER VARIABLES USED INTERNALLY BY THE ÂÕÒÓÔ ROUTINES.* 104 ;* * 105 ;****************************************************************** 106 107 130E 108 CMDLINE 130E 55 30 109 .BYTE 'U0' =131A 110 *=*+10 ; ÐARAMETER SPACE FOR BURST COMMAND. 131A =131B 111 CMDLEN *=*+1 ; ÌENGTH OF THE COMMAND STRING (# OF BYTES). 131B =131C 112 OLDCLK *=*+1 ; ÓTATUS OF CLOCK LINE. 131C =131D 113 TEMP *=*+1 114 .MAIN. HCD65XX V3.1 10JULY87 PAGE 3 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 115 116 ;************************************************************************ 117 ;* * 118 ;* ÊÕÍРÔÁÂÌÅ * 119 ;* * 120 ;* ÔHIS JUMP TABLE GIVES THE LOCATIONS OF EACH OF THE ÂÕÒÓÔ ROUTINES. * 121 ;* ÔHE JUMP TABLE POSITIONS WILL NEVER CHANGE, EVEN IF THE ROUTINES * 122 ;* BELOW ARE MODIFIED. ÁLWAYS ÓÙÓ TO THIS TABLE FROM ÂÁÓÉÃ, OR ÊÓÒ OR * 123 ;* ÊÍÐ TO THIS TABLE FROM ASSEMBLY LANGUAGE. * 124 ;* * 125 ;************************************************************************ 126 =1340 127 *=$1340 128 1340 129 Ê_ÉÎÑÕÉÒÅ_ÆÏÒÍÁÔ 1340 4C 146A 130 JMP ÉÎÑÕÉÒÅ_ÆÏÒÍÁÔ 1343 131 Ê_ÐÈÙÓÉÃÁÌ_ÒÅÁÄ 1343 4C 1355 132 JMP ÐÒÅÁÄ 1346 133 Ê_ÐÈÙÓÉÃÁÌ_×ÒÉÔÅ 1346 4C 13D6 134 JMP Ð×ÒÉÔÅ 1349 135 Ê_ÑÕÅÒÙ_ÆÏÒÍÁÔ 1349 4C 1493 136 JMP ÑÕÅÒÙ_ÆÏÒÍÁÔ 134C 137 Ê_ÃÏÍÐÁÒÅ_ÍÅÍÏÒÙ 134C 4C 151B 138 JMP ÃÏÍÐÁÒÅ_ÍÅÍÏÒÙ 134F 139 Ê_ÓÅÎÄÃÍÄ 134F 4C 1555 140 JMP ÓÅÎÄÃÍÄ 1352 141 Ê_ÏÐÅÎ_ÃÈÁÎÎÅÌ 1352 4C 156E 142 JMP ÏÐÅÎ_ÃÈÁÎÎÅÌ 143 144 ;************************************************ 145 ;* * 146 ;* ËÅÒÎÁÌ ÅÑÕÁÔÅÓ * 147 ;* * 148 ;************************************************ 149 =FFC9 150 CHKOUT=$FFC9 ; KERNEL CHANNEL OUTPUT ROUTINE =FFCC 151 CLRCHN=$FFCC ; KERNEL CLEAR CHANNEL ROUTINE =FFBA 152 SETLFS=$FFBA ; KERNEL SET LOGICAL FILE # ROUTINE =FFBD 153 SETNAM=$FFBD ; KERNEL SET FILE NAME ROUTINE =FFD2 154 BSOUT =$FFD2 ; KERNEL BASIC I/O ROUTINE =FFC0 155 OPEN =$FFC0 ; KERNEL OPEN LOGICAL FILE FOR É/Ï ROUTINE =FF47 156 SPIN_OUT=$FF47 ; ÓET UP FAST SERIAL FOR INPUT OR OUTPUT 157 ; ÓÅà FOR OUTPUT, ÃÌà FOR INPUT. 158 159 ;************************************************************************ 160 ;* * 161 ;* ÔHESE ADDRESSES ARE MEMORY LOCATIONS USED BY THE ÂÕÒÓÔ SUBROUTINES. * 162 ;* * 163 ;************************************************************************ 164 =DD00 165 D2PRA =$DD00 ; Ã128 SERIAL PORT LOCATION =0010 166 CLKOUT=$10 ; SLOW SERIAL CLOCK OUTPUT BIT MASK =0040 167 CLKIN =$40 ; SLOW SERIAL CLOCK INPUT BIT MASK =DC0D 168 D1ICR =$DC0D ; 6526 ÃÉÁ INTERRUPT CONTROL REGISTER =DC0C 169 D1SDR =$DC0C ; 6526 ÃÉÁ SERIAL DATA REGISTER =00FA 170 BUFFER=$FA ; ZERO PAGE POINTER VARIABLE =00FC 171 BUFFER2=$FC ; ZERO PAGE POINTER VARIABLE .MAIN. HCD65XX V3.1 10JULY87 PAGE 4 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 172 173 174 ;*************************************************************** 175 ;* * 176 ;* ÂÕÒÓÔ ÃÏÍÍÁÎÄ ÐÒÉÍÉÔÉÖÅÓ * 177 ;* * 178 ;* ÔHESE ARE THE ÂÕÒÓÔ COMMANDS AS THE 1571 SEES THEM. * 179 ;* * 180 ;*************************************************************** 181 182 =0000 183 ÐÂÕÒÓÔÒÄ =$00 ; ÂURST READ. =0002 184 ÐÂÕÒÓÔ×Ò =$02 ; ÂURST WRITE. =0004 185 ÂÕÒÓÔ_ÉÎÑÕÉÒÅ =$04 ; ÂURST INQUIRE. =0086 186 ÂÕÒÓÔ_ÑÕÅÒÙ =$86 ; ÑUERY DISK FORMAT. 187 188 189 ;**************************************************************** 190 ;* * 191 ;* ÔÈÅ ÂÕÒÓÔ ÒÏÕÔÉÎÅÓ * 192 ;* * 193 ;**************************************************************** 194 195 1355 196 ÐÒÅÁÄ ;ÔHIS ÂÕÒÓÔ ROUTINE READS SECTORS FROM DEVICE ÌÆ. 197 ; 198 ; ÒEQUIRED ÐARAMETERS: 199 ; ÌÆ ÌOGICAL FILE NUMBER TO READ FROM. 200 ; ÔÒÁÃË ÔRACK TO BE READ FROM. 201 ; ÓÅÃÔÏÒ ÓECTOR TO BE READ FROM. 202 ; ÂÕÆÌÏà ÐOINTER TO THE STARTING LOCATION OF THE 203 ; BUFFER IN ÒÁÍ BANK 0. ÁS THE CHARACTERS 204 ; ARE READ, THEY ARE PUT IN THIS BUFFER. 205 ; ÓÅÃÓÉÚÅ ÐHYSICAL SECTOR SIZE (1=256, 2=512, 4=1024) 206 ; ÎÕÍÓÅà ÔHE NUMBER OF SECTORS TO BE READ. 207 ; ÓÉÄÅ ÐHYSICAL SIDE OF THE DISK TO READ FROM, 208 ; 0 OR 1. ÓÉÄÅ IS IGNORED IF THE DISK IS ÇÃÒ. 209 ; 210 ; ÒETURNED ÐARAMETERS: 211 ; ÓÔÁÔÕÓ ÓTATUS BYTE RETURNED AFTER READ IS ATTEMPTED. 212 213 1355 A9 00 214 LDA #ÐÂÕÒÓÔÒÄ ;ÐHYSICAL BURST READ COMMAND. 1357 AE 1309 215 LDX ÓÉÄÅ ; ÃHECK WHICH SIDE TO READ FROM. 135A F0 02 216 BEQ 1$ 135C 09 10 217 ORA #$10 ; ÉF SIDE 1, THEN SET BIT IN THE COMMAND BYTE. 135E 8D 1310 218 1$ STA CMDLINE+2 219 1361 220 ÒÅÁÄ 221 1361 AD FF00 222 LDA $FF00 ;ÓAVE OLD ÍÍÕ SETUP. 1364 48 223 PHA 224 1365 A9 0E 225 LDA #$0E ;ÓET ÍÍÕ FOR ÒÁÍ0,ËÅÒÎÅÌ,É/Ï. 1367 8D FF00 226 STA $FF00 227 136A 20 157A 228 JSR ÓÅÔÕ0 ;ÐUT "Õ0" AT START OF COMMAND STRING. .MAIN. HCD65XX V3.1 10JULY87 PAGE 5 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 229 230 136D AD 1303 231 LDA ÔÒÁÃË 1370 8D 1311 232 STA ÃÍÄÌÉÎÅ+3 ; TRACK 1373 AD 1304 233 LDA ÓÅÃÔÏÒ 1376 8D 1312 234 STA ÃÍÄÌÉÎÅ+4 ; SECTOR 1379 AD 1305 235 LDA ÎÕÍÓÅà 137C 8D 1313 236 STA ÃÍÄÌÉÎÅ+5 ; ÎUMBER OF SECTORS TO READ. 237 137F A9 06 238 LDA #$06 ; ÌENGTH OF COMMAND STRING. 1381 8D 131A 239 STA ÃÍÄÌÅÎ 1384 20 1555 240 JSR SENDCMD ; SEND CMD STRING 241 1387 AD 1306 242 LDA ÂÕÆÌÏà ; ÓET UP ZERO PAGE INDIRECT POINTER. 138A 85 FA 243 STA ÂÕÆÆÅÒ 138C AD 1307 244 LDA ÂÕÆÌÏÃ+1 138F 85 FB 245 STA ÂÕÆÆÅÒ+1 246 1391 A0 00 247 LDY #0 ; CLEAR THE 'EMPTY SECTOR(S)' FLAG. 1393 8C 130D 248 STY FLAG 249 1396 78 250 SEI ; ÎO IRQ'S ALLOWED DURING HANDSHAKE. 251 1397 2C DC0D 252 BIT D1ICR ; CLEAR PENDING 253 139A 20 1599 254 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK. 255 139D AE 1308 256 1$ LDX ÓÅÃÓÉÚÅ ; ÓECTOR SIZE GIVES # OF PAGES PER SECTOR. 257 13A0 20 15A2 258 JSR ×ÁÉÔ ;×AIT FOR FAST BYTE (1ST IS STATUS). 13A3 AD DC0C 259 LDA D1SDR ;ÇET STATUS BYTE. 13A6 8D 1300 260 STA ÓÔÁÔÕÓ 261 13A9 29 0F 262 AND #15 ;×AS THERE AN ERROR? 13AB C9 02 263 CMP #2 ; 13AD B0 21 264 BCS 5$ ; BRANCH IF ERROR OCCURED. 265 13AF 20 1599 266 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE CLOCK SO NEXT BYTE IS SENT. 267 13B2 20 15A2 268 3$ JSR ×ÁÉÔ ;×AIT FOR THE NEXT BYTE. 269 13B5 20 1599 270 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK SO NEXT BYTE IS SENT. 13B8 AD DC0C 271 LDA Ä1ÓÄÒ ;ÇET THE DATA BYTE 13BB 91 FA 272 STA (BUFFER),Y ; AND SAVE IT 273 ; WHILE NEXT BYTE IS BEING TRANSMITTED. 13BD 0D 130D 274 ORA FLAG 13C0 8D 130D 275 STA FLAG ;ÕPDATE 'ZERO' SECTOR FLAG. 276 13C3 C8 277 INY ;ÁNY MORE IN THIS PAGE? 13C4 D0 EC 278 BNE 3$ 279 13C6 E6 FB 280 INC ÂÕÆÆÅÒ+1 13C8 CA 281 DEX ;ÌOOP FOR THE # OF PAGES PER SECTOR. 13C9 D0 E7 282 BNE 3$ 283 13CB CE 1313 284 DEC ÃÍÄÌÉÎÅ+5 ;ÌOOP FOR THE NUMBER OF SECTORS. 13CE D0 CD 285 BNE 1$ .MAIN. HCD65XX V3.1 10JULY87 PAGE 6 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 286 287 13D0 58 288 5$ CLI 289 13D1 68 290 PLA ;ÒESTORE ÍÍÕ TO OLD CONFIGURATION. 13D2 8D FF00 291 STA $FF00 292 13D5 60 293 RTS 294 295 ;************************************************************* 296 13D6 297 Ð×ÒÉÔÅ ; ÔHIS ÂÕÒÓÔ SUBROUTINE WRITES PHYSICAL SECTORS TO DEVICE ÌÆ. 298 ; 299 ; ÒEQUIRED ÐARAMETERS: 300 ; ÌÆ ÌOGICAL FILE NUMBER TO WRITE TO. 301 ; ÔÒÁÃË ÔRACK TO BE WRITTEN TO. 302 ; ÓÅÃÔÏÒ ÓECTOR TO BE WRITTEN TO. 303 ; ÂÕÆÌÏà ÌOCATION OF THE BEGINNING OF THE Ã128 BUFFER 304 ; WHERE THE CHARACTERS ARE TO BE READ FROM. 305 ; ÓÅÃÓÉÚÅ ÐHYSICAL SECTOR SIZE (1=256, 2=512, 4=1024). 306 ; ÎÕÍÓÅà ÔHE NUMBER OF SECTORS TO BE WRITTEN. 307 ; ÓÉÄÅ ÐHYSICAL SIDE OF THE DISK TO WRITE TO, 308 ; 0 OR 1. ÓÉÄÅ IS IGNORED IF THE DISK IS ÇÃÒ. 309 ; 310 ; ÒETURNED ÐARAMETERS: 311 ; ÓÔÁÔÕÓ ÓTATUS BYTE RETURNED AFTER WRITE IS ATTEMPTED. 312 13D6 A9 02 313 LDA #ÐÂÕÒÓÔ×Ò ;ÐHYSICAL BURST WRITE COMMAND. 13D8 AE 1309 314 LDX ÓÉÄÅ ; ÃHECK WHICH SIDE TO WRITE TO. 13DB F0 02 315 BEQ 1$ 13DD 09 10 316 ORA #$10 ; ÉF SIDE 1, THEN SET BIT IN THE COMMAND BYTE. 13DF 8D 1310 317 1$ STA CMDLINE+2 318 319 13E2 320 ×ÒÉÔÅ 13E2 AD FF00 321 LDA $FF00 ;ÓAVE OLD ÍÍÕ SETUP. 13E5 48 322 PHA 323 13E6 A9 0E 324 LDA #$0E ;ÓET ÍÍÕ FOR ÒÁÍ0,ËÅÒÎÅÌ,É/Ï. 13E8 8D FF00 325 STA $FF00 326 13EB 20 157A 327 JSR ÓÅÔÕ0 ;ÐUT "Õ0" AT START OF COMMAND STRING. 13EE AD 1303 328 LDA ÔÒÁÃË 13F1 8D 1311 329 STA ÃÍÄÌÉÎÅ+3 ; TRACK 13F4 AD 1304 330 LDA ÓÅÃÔÏÒ 13F7 8D 1312 331 STA ÃÍÄÌÉÎÅ+4 ; SECTOR 13FA AD 1305 332 LDA ÎÕÍÓÅà 13FD 8D 1313 333 STA ÃÍÄÌÉÎÅ+5 ; ÎUMBER OF SECTORS TO WRITE. 334 1400 A9 06 335 LDA #$06 1402 8D 131A 336 STA ÃÍÄÌÅÎ ;ÃOMMAND LENGTH. 1405 20 1555 337 JSR SENDCMD ; SEND CMD STRING 338 1408 AD 1306 339 LDA ÂÕÆÌÏà ; ÓET UP ZERO PAGE INDIRECT POINTER. 140B 85 FA 340 STA ÂÕÆÆÅÒ 140D AD 1307 341 LDA ÂÕÆÌÏÃ+1 1410 85 FB 342 STA ÂÕÆÆÅÒ+1 .MAIN. HCD65XX V3.1 10JULY87 PAGE 7 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 343 344 1412 A9 40 345 LDA #CLKIN ;ÉNITIAL CLOCK STATUS. 1414 8D 131B 346 STA OLDCLK 347 1417 A0 00 348 LDY #0 1419 78 349 SEI ; NO IRQ'S DURING BURST HANDSHAKE 350 141A AE 1308 351 1$ LDX ÓÅÃÓÉÚÅ ; ÓECTOR SIZE GIVES # OF PAGES PER SECTOR. 141D 38 352 SEC ;ÔURN FAST SERIAL TO OUTPUT MODE. 141E 20 FF47 353 JSR SPIN_OUT 354 1421 AD DD00 355 2$ LDA D2PRA ;×AIT FOR STATE CHANGE. 1424 4D 131B 356 EOR OLDCLK 1427 29 40 357 AND #CLKIN 1429 F0 F6 358 BEQ 2$ 359 142B 4D 131B 360 EOR OLDCLK ;ÃHANGE STATUS OF ÏÌÄÃÌË. 142E 8D 131B 361 STA OLDCLK 362 1431 B1 FA 363 LDA (BUFFER),Y ; GET DATA 1433 8D DC0C 364 STA D1SDR ; & SEND IT 365 1436 20 15A2 366 JSR ×ÁÉÔ ;×AIT FOR THE BYTE TO BE TRANSMITTED. 367 1439 C8 368 INY 143A D0 E5 369 BNE 2$ ;ÁNY MORE LEFT IN THIS PAGE? 370 143C E6 FB 371 INC BUFFER+1 143E CA 372 DEX ;ÌOOP FOR THE # OF PAGES PER SECTOR. 143F D0 E0 373 BNE 2$ 374 1441 18 375 CLC ;ÔURN AROUND TO INPUT MODE TO GET ÓÔÁÔÕÓ. 1442 20 FF47 376 JSR SPIN_OUT 1445 2C DC0D 377 BIT D1ICR ; CLEAR PENDING 378 1448 20 1585 379 JSR CLKLO ; SET CLOCK LOW WHEN READY FOR STATUS 380 144B 20 15A2 381 JSR ×ÁÉÔ ;×AIT FOR THE BYTE TO BE SHIFTED IN. 144E AD DC0C 382 LDA D1SDR ;ÇET THE STATUS BYTE. 1451 8D 1300 383 STA ÓÔÁÔÕÓ ;ÓAVE IT. 1454 48 384 PHA 1455 20 1590 385 JSR CLKHI ;ÒELEASE THE SLOW CLOCK LINE. 1458 68 386 PLA 387 1459 29 0F 388 AND #15 ;ÃHECK FOR ANY ERROR. 145B C9 02 389 CMP #2 145D B0 05 390 BCS 7$ ; BRANCH IF THERE WAS AN ERROR. 391 145F CE 1313 392 DEC ÃÍÄÌÉÎÅ+5 ;ÌOOP FOR THE NUMBER OF SECTORS. 1462 D0 B6 393 BNE 1$ 394 1464 58 395 7$ CLI 396 1465 68 397 PLA ;ÒESTORE OLD MEMORY CONFIGURATION. 1466 8D FF00 398 STA $FF00 1469 60 399 RTS .MAIN. HCD65XX V3.1 10JULY87 PAGE 8 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 400 401 402 ;************************************************************** 403 146A 404 ÉÎÑÕÉÒÅ_ÆÏÒÍÁÔ ; ÔHIS ÂÕÒÓÔ SUBROUTINE SENDS AN ÉÎÑÕÉÒÅ ÄÉÓË COMMAND TO 405 ; DRIVE INDICATED BY ÌÆ. 406 ; 407 ; ÒEQUIRED ÐARAMETERS: 408 ; ÌÆ ÌOGICAL FILE NUMBER OF DEVICE TO INQUIRE. 409 ; ÓÉÄÅ ÐHYSICAL SIDE OF THE DISK TO INQUIRE ABOUT, 410 ; 0 OR 1. ÓÉÄÅ IS IGNORED IF THE DISK IS ÇÃÒ. 411 ; 412 ; ÒETURNED ÐARAMETERS: 413 ; ÓÔÁÔÕÓ ÓTATUS BYTE RETURNED. 414 146A 20 157A 415 JSR ÓÅÔÕ0 ;ÐUT "Õ0" AT START OF COMMAND STRING. 146D A9 04 416 LDA #ÂÕÒÓÔ_ÉÎÑÕÉÒÅ ; INQUIRE BURST COMMAND 146F 8D 1310 417 STA CMDLINE+2 418 1472 AE 1309 419 LDX ÓÉÄÅ ; ÃHECK WHICH SIDE TO CHECK. 1475 F0 02 420 BEQ 1$ 1477 09 10 421 ORA #$10 ; ÉF SIDE 1, THEN SET BIT IN THE COMMAND BYTE. 422 1479 A9 03 423 1$ LDA #$03 ; LENGTH OF COMMAND. 147B 8D 131A 424 STA ÃÍÄÌÅÎ 147E 20 1555 425 JSR SENDCMD ; SEND CMD STRING 1481 78 426 SEI ;ÄISABLE INTERRUPTS DURING HANDSHAKE. 1482 2C DC0D 427 BIT Ä1ÉÃÒ ;ÃLEAR ANY BYTE READY THAT'S PENDING. 428 1485 20 1599 429 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE CLOCK SO 1571 SENDS NEXT. 1488 20 15A2 430 JSR ×ÁÉÔ ;×AIT FOR THE BYTE TO BE SHIFTED IN. 148B AD DC0C 431 LDA Ä1ÓÄÒ ;ÇET THE STATUS BYTE. 148E 8D 1300 432 STA ÓÔÁÔÕÓ ;ÓAVE IT OFF. 433 1491 58 434 CLI 1492 60 435 RTS 436 437 ;********************************************************* 438 1493 439 ÑÕÅÒÙ_ÆÏÒÍÁÔ ; ÔHIS ÂÕÒÓÔ SUBROUTINE SENDS A ÑÕÅÒÙ ÄÉÓË ÆÏÒÍÁÔ 440 ; COMMAND TO DRIVE INDICATED BY ÌÆ. 441 ; 442 ; ÒEQUIRED ÐARAMETERS: 443 ; ÌÆ ÌOGICAL FILE NUMBER OF DEVICE TO QUERY. 444 ; ÔÒÁÃË ÐHYSICAL TRACK NUMBER TO QUERY. 445 ; ÓÉÄÅ ÐHYSICAL SIDE OF THE DISK TO QUERY, 446 ; 0 OR 1. ÓÉÄÅ IS IGNORED IF THE DISK IS ÇÃÒ. 447 ; 448 ; ÒETURNED ÐARAMETERS: 449 ; ÎÕÍÓÅà ÎUMBER OF SECTORS FOUND ON THE TRACK. 450 ; ÔÒÁÃË ÌOGICAL TRACK NUMBER FOUND IN THE SECTOR HEADERS. 451 ; ÍÉÎÓÅà ÍINIMUM LOGICAL SECTOR NO. FOUND IN SECTOR HEADERS. 452 ; ÍÁØÓÅà ÍAXIMUM LOGICAL SECTOR NO. FOUND IN SECTOR HEADERS. 453 ; ÉÎÔÌÖ ÐHYSICAL INTERLEAVE BETWEEN SECTORS. 454 ; ÓÔÁÔÕÓ ÔHIS IS THE BYTE THAT ÑÕÅÒÙ_ÆÏÒÍÁÔ RETURNS. 455 ; ÉF AN ERROR IS ENCOUNTERED, THEN NONE OF THE 456 ; RETURNED PARAMETERS ARE VALID EXCEPT ÓÔÁÔÕÓ. .MAIN. HCD65XX V3.1 10JULY87 PAGE 9 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 457 458 1493 20 157A 459 JSR ÓÅÔÕ0 ;ÐUT "Õ0" AT START OF COMMAND STRING. 460 1496 A9 86 461 LDA #ÂÕÒÓÔ_ÑÕÅÒÙ ;ÑÕÅÒÙ ÄÉÓË BURST COMMAND 462 1498 AE 1309 463 LDX ÓÉÄÅ ; ÓET THE SIDE BIT ACCORDINGLY. 149B D0 02 464 BNE 4$ 149D 09 10 465 ORA #$10 466 149F 8D 1310 467 4$ STA CMDLINE+2 468 14A2 AD 1303 469 LDA ÔÒÁÃË ; ÐHYSICAL TRACK OFFSET. 14A5 8D 1311 470 STA CMDLINE+3 14A8 A9 04 471 LDA #$04 ; LENGTH OF COMMAND. 14AA 8D 131A 472 STA ÃÍÄÌÅÎ 14AD 20 1555 473 JSR SENDCMD ; SEND CMD STRING 474 14B0 78 475 SEI ;ÄISABLE INTERRUPTS DURING HANDSHAKE. 14B1 2C DC0D 476 BIT Ä1ÉÃÒ ;ÃLEAR ANY BYTE READY THAT'S PENDING. 477 14B4 20 1599 478 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK SO 1571 SENDS NEXT. 14B7 20 15A2 479 JSR ×ÁÉÔ ;×AIT FOR THE FIRST STATUS BYTE. 14BA AD DC0C 480 LDA Ä1ÓÄÒ ;ÇET THE STATUS BYTE (STATUS OF TRACK 0). 14BD 8D 1300 481 STA ÓÔÁÔÕÓ ;ÓAVE IT OFF. 482 14C0 29 0F 483 AND #$0F ;×AS THERE AN ERROR? 14C2 C9 02 484 CMP #2 14C4 B0 53 485 BCS 5$ ; BRANCH IF THERE WAS AN ERROR. 486 14C6 AD 1300 487 LDA ÓÔÁÔÕÓ ;ÉS THE FORMAT ÇÃÒ (IF SO NO BYTES FOLLOW)? 14C9 10 4E 488 BPL 5$ 489 14CB 20 1599 490 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 14CE 20 15A2 491 JSR ×ÁÉÔ ;×AIT FOR NEXT STATUS BYTE TO BE READY. 14D1 AD DC0C 492 LDA Ä1ÓÄÒ ;ÇET IT (STATUS OF TRACK ÔÒÁÃË). 14D4 8D 1300 493 STA ÓÔÁÔÕÓ ;ÓAVE IT. 494 14D7 29 0F 495 AND #$0F ;×AS THERE AN ERROR IN COMPILING ÍÆÍ INFO? 14D9 C9 02 496 CMP #2 14DB B0 3C 497 BCS 5$ ; BRANCH IF AN ERROR. 498 14DD 20 1599 499 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 14E0 20 15A2 500 JSR ×ÁÉÔ ;×AIT FOR 'NUMBER OF SECTORS BYTE' TO BE READY 14E3 AD DC0C 501 LDA Ä1ÓÄÒ ;ÇET IT. 14E6 8D 1305 502 STA ÎÕÍÓÅà ;ÓAVE IT. 503 14E9 20 1599 504 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 14EC 20 15A2 505 JSR ×ÁÉÔ ;×AIT FOR 'LOGICAL TRACK #' BYTE TO BE READY. 14EF AD DC0C 506 LDA Ä1ÓÄÒ ;ÇET IT. 14F2 8D 1303 507 STA ÔÒÁÃË ;ÓAVE IT. 508 14F5 20 1599 509 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 14F8 20 15A2 510 JSR ×ÁÉÔ ;×AIT FOR 'MINIMUM SECTOR #' BYTE TO BE READY. 14FB AD DC0C 511 LDA Ä1ÓÄÒ ;ÇET IT. 14FE 8D 130A 512 STA ÍÉÎÓÅà ;ÓAVE IT. 513 .MAIN. HCD65XX V3.1 10JULY87 PAGE 10 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 514 1501 20 1599 515 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 1504 20 15A2 516 JSR ×ÁÉÔ ;×AIT FOR 'MAXIMUM SECTOR #' BYTE TO BE READY. 1507 AD DC0C 517 LDA Ä1ÓÄÒ ;ÇET IT. 150A 8D 130B 518 STA ÍÁØÓÅà ;ÓAVE IT. 519 150D 20 1599 520 JSR ÃÌË_ÃÈÎÇ ;ÃHANGE STATE OF CLOCK, SO 1571 SENDS NEXT. 1510 20 15A2 521 JSR ×ÁÉÔ ;×AIT FOR 'INTERLEAVE' BYTE TO BE READY. 1513 AD DC0C 522 LDA Ä1ÓÄÒ ;ÇET IT. 1516 8D 130C 523 STA ÉÎÔÌÖ ;ÓAVE IT. 524 1519 58 525 5$ CLI 151A 60 526 RTS 527 528 ;********************************************************* 529 151B 530 ÃÏÍÐÁÒÅ_ÍÅÍÏÒÙ ; ÔHIS SUBROUTINE COMPARES MEMORY BLOCKS IN Ã128 MEMORY. 531 ; 532 ; ÒEQUIRED ÐARAMETERS: 533 ; .Á ÎUMBER OF PAGES TO COMPARE 534 ; .Ø ÆIRST PAGE OF FIRST MEMORY BLOCK 535 ; .Ù ÆIRST PAGE OF SECOND MEMORY BLOCK 536 ; 537 ; ÒETURNED ÐARAMETERS: 538 ; ÓÔÁÔÕÓ ÔHIS IS THE BYTE THAT ÃÏÍÐÁÒÅ_ÍÅÍÏÒÙ 539 ; RETURNS, 0 IF THE TWO BLOCKS ARE EQUAL. 540 151B 8D 131C 541 STA TEMP 542 151E AD FF00 543 LDA $FF00 ;ÓAVE OLD ÍÍÕ SETUP. 1521 48 544 PHA 545 1522 A9 0E 546 LDA #$0E ;ÓET ÍÍÕ FOR ÒÁÍ0,ËÅÒÎÅÌ,É/Ï. 1524 8D FF00 547 STA $FF00 548 1527 86 FB 549 STX BUFFER+1 ;ÓET UP ÍÓ OF 1ST MEMORY POINTER. 1529 84 FD 550 STY BUFFER2+1 ;ÓET UP ÍÓ OF 2ND MEMORY POINTER. 152B AE 131C 551 LDX TEMP ;ÎUMBER OF PAGES TO COMPARE. 552 152E A9 00 553 LDA #0 ;ÓET UP ÌÓÂ'S OF MEMORY POINTERS. 1530 85 FA 554 STA BUFFER 1532 85 FC 555 STA BUFFER2 556 1534 8D 1300 557 STA ÓÔÁÔÕÓ ;ÉNITIALIZE ÓÔÁÔÕÓ. 558 1537 A0 00 559 LDY #0 1539 B1 FA 560 2$ LDA (BUFFER),Y 153B D1 FC 561 CMP (BUFFER2),Y 153D F0 07 562 BEQ 1$ 563 153F A9 FF 564 LDA #$FF ;ÎOT EQUAL! ÌOAD ÓÔÁÔÕÓ WITH NONZERO. 1541 8D 1300 565 STA ÓÔÁÔÕÓ 1544 D0 0A 566 BNE 99$ ; (BRANCH ALWAYS) 567 1546 C8 568 1$ INY 1547 D0 F0 569 BNE 2$ ;ÍORE IN THIS PAGE? 570 .MAIN. HCD65XX V3.1 10JULY87 PAGE 11 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 571 1549 E6 FB 572 INC BUFFER+1 154B E6 FD 573 INC BUFFER2+1 154D CA 574 DEX ;# OF PAGES COUNTER. 154E D0 E9 575 BNE 2$ 576 1550 68 577 99$ PLA ;ÒESTORE OLD MEMORY CONFIGURATION. 1551 8D FF00 578 STA $FF00 579 1554 60 580 RTS 581 582 ;********************************************************* 583 1555 584 ÓÅÎÄÃÍÄ ; ÔHIS ÂÕÒÓÔ SUBROUTINE SENDS A COMMAND TO LOGICAL FILE ÌÆ. 585 ; 586 ; ÒEQUIRED ÐARAMETERS: 587 ; ÌÆ ÌOGICAL FILE NUMBER TO SEND COMMAND TO. 588 ; ÃÍÄÌÉÎÅ ÃOMMAND STRING TO SEND. 589 ; ÃÍÄÌÅÎ ÌENGTH OF COMMAND STRING. 590 ; 591 ; ÎO PARAMETER IS RETURNED. 592 1555 AE 1302 593 LDX ÌÆ 1558 20 FFC9 594 JSR CHKOUT ; CHANNEL OUTPUT (POINTED TO BY .Ø) 155B A2 00 595 LDX #0 155D AC 131A 596 LDY CMDLEN ; SEND CMD 1560 BD 130E 597 1$ LDA CMDLINE,X 1563 20 FFD2 598 JSR BSOUT 1566 E8 599 INX 1567 88 600 DEY 1568 D0 F6 601 BNE 1$ 602 156A 20 FFCC 603 JSR CLRCHN ; SEND BUFFERED CHAR & EOI 156D 60 604 RTS 605 606 ;********************************************************* 607 156E 608 ÏÐÅÎ_ÃÈÁÎÎÅÌ ; ÔHIS ÂÕÒÓÔ SUBROUTINE OPENS UP A CHANNEL TO DEVICE .Ø 609 ; AND ASSIGNS IT A LOGICAL FILE NUMBER WITH AN OPTIONAL 610 ; SECONDARY ADDRESS. ÔHIS SUBROUTINE PERFORMS THE SAME 611 ; FUNCTION AS THE ÂÁÓÉà OPEN STATEMENT. 612 ; 613 ; ÒEQUIRED ÐARAMETERS: 614 ; .Ø ÄEVICE NUMBER 615 ; .Á ÌOGICAL FILE NUMBER 616 ; .Ù ÔHIS IS THE SECONDARY ADDRESS. ÔHIS 617 ; NUMBER SHOULD BE SET TO $ÆÆ IF NO 618 ; SECONDARY ADDRESS IS DESIRED. 619 ; 620 ; ÒETURNED ÐARAMETERS: 621 ; .Á ÔHIS IS THE BYTE THAT ÏÐÅÎ_ÃÈÁÎÎÅÌ RETURNS 622 ; 1 IF THE ROUTINE WAS SUCCESSFUL, 623 ; 0 OTHERWISE. ÉF AN ERROR WAS ENCOUNTERED, 624 ; THEN ÏÐÅÎ_ÃÈÁÎÎÅÌ WILL ALSO SET THE ÃÁÒÒÙ 625 ; BIT. 626 ; 627 .MAIN. HCD65XX V3.1 10JULY87 PAGE 12 0:X571 BURST.SRC,S,R ERROR ADDR CODE SEQ SOURCE STATEMENT 628 156E 20 FFBA 629 JSR ÓÅÔÌÆÓ ;ÓETUP THE LOGICAL FILE. 630 1571 A9 00 631 LDA #0 ;ÎO NAME/COMMAND STRING FOR ÏÐÅÎ (LENGTH=0). 1573 20 FFBD 632 JSR ÓÅÔÎÁÍ ;ÓETUP THE FILENAME/COMMAND STRING FOR ÏÐÅÎ. 633 1576 20 FFC0 634 JSR ÏÐÅÎ ;ÏPEN THE LOGICAL FILE. 635 1579 60 636 RTS 637 638 ;********************************************************* 639 157A A9 55 640 ÓÅÔÕ0 LDA #85 ;'Õ' 157C 8D 130E 641 STA ÃÍÄÌÉÎÅ 157F A9 30 642 LDA #48 ;'0' 1581 8D 130F 643 STA ÃÍÄÌÉÎÅ+1 1584 60 644 RTS 645 646 1585 647 ÃÌËÌÏ ; SET CLOCK LOW 1585 48 648 PHA 1586 AD DD00 649 LDA D2PRA 1589 09 10 650 ORA #CLKOUT 158B 8D DD00 651 STA D2PRA 158E 68 652 PLA 158F 60 653 RTS 654 1590 655 ÃÌËÈÉ ; SET CLOCK HIGH 1590 AD DD00 656 LDA D2PRA 1593 29 EF 657 AND #$FF-CLKOUT 1595 8D DD00 658 STA D2PRA 1598 60 659 RTS 660 1599 661 ÃÌË_ÃÈÎÇ ; CHANGE THE STATE OF THE CLOCK LINE OUTPUT. 1599 AD DD00 662 LDA Ä2ÐÒÁ 159C 49 10 663 EOR #CLKOUT 159E 8D DD00 664 STA Ä2ÐÒÁ 15A1 60 665 RTS 666 15A2 667 ×ÁÉÔ ; WAIT FOR THE SHIFT REGISTER TO BE FULL OR EMPTY. 15A2 A9 08 668 1$ LDA #8 15A4 2C DC0D 669 BIT Ä1ÉÃÒ 15A7 F0 F9 670 BEQ 1$ 15A9 60 671 RTS 672 673 674 .END 0 ERRORS DETECTED .MAIN. HCD65XX V3.1 10JULY87 PAGE 13 SYMBOL TABLE = LABEL, <=> = SYMBOL, <+>= MULTIBLY DEFINED BSOUT =FFD2 BUFFER =00FA BUFFER2 =00FC BUFLOC 1306 BURST_INQUIRE =0004 BURST_QUERY =0086 CHKOUT =FFC9 CLKHI 1590 CLKIN =0040 CLKLO 1585 CLKOUT =0010 CLK_CHNG 1599 CLRCHN =FFCC CMDLEN 131A CMDLINE 130E COMPARE_MEMORY 151B D1ICR =DC0D D1SDR =DC0C D2PRA =DD00 DEV 1301 FLAG 130D INQUIRE_FORMAT 146A INTLV 130C J_COMPARE_MEMORY 134C J_INQUIRE_FORMAT 1340 J_OPEN_CHANNEL 1352 J_PHYSICAL_READ 1343 J_PHYSICAL_WRITE 1346 J_QUERY_FORMAT 1349 J_SENDCMD 134F LF 1302 MAXSEC 130B MINSEC 130A NUMSEC 1305 OLDCLK 131B OPEN =FFC0 OPEN_CHANNEL 156E PBURSTRD =0000 PBURSTWR =0002 PREAD 1355 PWRITE 13D6 QUERY_FORMAT 1493 READ 1361 SECSIZE 1308 SECTOR 1304 SENDCMD 1555 SETLFS =FFBA SETNAM =FFBD SETU0 157A SIDE 1309 SPIN_OUT =FF47 STATUS 1300 TEMP 131C TRACK 1303 WAIT 15A2 WRITE 13E2