ENTRY POINTS FOR HARD DRIVE SUPPORT IN ADFS 1.50 ================================================ This lists the code in ADFS 1.50 that accesses hard drives via the SCSI interface. This code can be replaced to access other devices, such as an IDE interface or a ROM card. This document is currently incomplete, and should therefore be taken as a guide, and not as a definitive text. DRIVE ACCESS ROUTINES ===================== This is the SCSI subsystem. Access to drives 4 to 7 access floppy drives 0 to 3 with the 1770 FDC. Access to drives 0 to 3 access SCSI devices 0 to 3 if a SCSI interface is present. If there is no SCSI interface, access to drives 0 to 3 accesses floppy drives 0 to 3. Read hard drive status. Waits for status value to settle before returning ------------------------------------------------------------------------- 806F 08 . PHP 8070 AD 41 FC ­Aü LDA &FC41 Get SCSI status 8073 85 CC .Ì STA &CC Save this value 8075 AD 41 FC ­Aü LDA &FC41 Get SCSI status 8078 C5 CC ÅÌ CMP &CC Compare with previous status 807A D0 F4 Ðô BNE &8070 Loop until status stays same 807C 28 ( PLP 807D 60 ` RTS Set SCSI to command mode? ------------------------- 807E A0 00  . LDY #&00 Useful place to set Y=0 8080 A9 01 ©. LDA #&01 8082 48 H PHA Save data value 8083 20 6F 80 o. JSR &806F Get SCSI status 8086 29 02 ). AND #&02 BUSY? 8088 D0 F9 Ðù BNE &8083 Loop until not BUSY 808A 68 h PLA Get data value back 808B 8D 40 FC .@ü STA &FC40 Write to SCSI data 808E 8D 42 FC .Bü STA &FC42 Write to SCSI select to strobe it 8091 20 6F 80 o. JSR &806F Get SCSI status 8094 29 02 ). AND #&02 BUSY? 8096 F0 F9 ðù BEQ &8091 Loop until not BUSY 8098 60 ` RTS Initialise retries value ------------------------ 8099 AD 00 C2 ­. LDA &C200 Get default retries 809C 85 CE .Î STA &CE Set current retries 809E 60 ` RTS 809F 4C C9 82 LÉ. JMP &82C9 Access a drive using SCSI protocol ================================== Transfer up to &FF00 bytes at a time XY=>control block: XY+ 0 Returned result XY+ 1 Addr0 XY+ 2 Addr1 XY+ 3 Addr2 XY+ 4 Addr3 XY+ 5 Command XY+ 6 Drive+Sector b16-19 XY+ 7 Sector b8-b15 XY+ 8 Sector b0-b7 XY+ 9 Sector Count XY+10 - XY+11 Length0 XY+12 Length1 XY+13 Length2 XY+14 Length3 XY+15 On exit: A=result. 0=OK, <>0=error, with ADFS error block filled in 80A2 20 28 83 (. JSR &8328 Wait for ensuring to complete 80A5 86 B0 .° STX &B0 80A7 84 B1 .± STY &B1 &B0/1=>control block 80A9 20 FD A6 ý¦ JSR &A6FD Check if directory loaded 80AC A0 05  . LDY #&05 80AE B1 B0 ±° LDA (&B0),Y Get Command 80B0 C9 2F É/ CMP #&2F (Format?) 80B2 F0 2B ð+ BEQ &80DF Jump directly to do it 80B4 C9 1B É. CMP #&1B (Seek?) 80B6 F0 27 ð' BEQ &80DF Jump directly to do it 80B8 20 99 80 .. JSR &8099 Set number of retries 80BB 10 1A .. BPL &80D7 Jump into middle of retry loop This loop tries to access a drive. If the action fails it retries a number of times, allowing interuption by an Escape event. 80BD 20 DF 80 ß. JSR &80DF Do the specified command 80C0 F0 D6 ðÖ BEQ &8098 Exit if ok 80C2 C9 04 É. CMP #&04 80C4 D0 11 Ð. BNE &80D7 Jump if result<>&04 80C6 A0 19  . LDY #&19 Loop 25*256*256 times 80C8 24 FF $. BIT &FF Escape pressed? 80CA 30 D3 0Ó BMI &809F Abort with Escape error 80CC 38 8 SEC 80CD E9 01 é. SBC #&01 80CF D0 F7 Ð÷ BNE &80C8 Loop 256 times with A 80D1 CA Ê DEX 80D2 D0 F4 Ðô BNE &80C8 Loop 256 times with X 80D4 88 . DEY 80D5 D0 F1 Ðñ BNE &80C8 Loop 25 times with Y 80D7 C9 40 É@ CMP #&40 Initial retries=&40? 80D9 F0 04 ð. BEQ &80DF Try to access once only 80DB C6 CE ÆÎ DEC &CE Dec number of retries 80DD 10 DE .Þ BPL &80BD Jump to try again Drop through to try once more Try to access a drive --------------------- 80DF A0 04  . LDY #&04 80E1 B1 B0 ±° LDA (&B0),Y Get Addr3 80E3 AA ª TAX X=Addr3 - I/O or Language 80E4 88 . DEY 80E5 B1 B0 ±° LDA (&B0),Y Get Addr2 - Screen bank 80E7 20 53 80 S. JSR &8053 Set I/O and Screen settings No hard drive present, drive 0 to 7 map onto floppies 0 to 3. When hard drives are present, drives 4 to 7 map onto floppies 0 to 3. 80EA A5 CD ¥Í LDA &CD Get ADFS I/O status 80EC 29 20 ) AND #&20 Hard drive present? 80EE D0 21 Ð! BNE &8111 Jump when hard drive present Access a floppy drive --------------------- 80F0 20 4B BA Kº JSR &BA4B Do floppy operation 80F3 F0 1B ð. BEQ &8110 Completed ok 80F5 48 H PHA Save result 80F6 A0 06  . LDY #&06 Update ADFS error infomation 80F8 B1 B0 ±° LDA (&B0),Y Get Drive+Sector b16-b19 80FA 0D 17 C3 ..à ORA &C317 OR with current drive 80FD 8D D2 C2 .Ò STA &C2D2 Store 8100 C8 È INY 8101 B1 B0 ±° LDA (&B0),Y Get Sector b8-b15 8103 8D D1 C2 .Ñ STA &C2D1 8106 C8 È INY 8107 B1 B0 ±° LDA (&B0),Y Get Sector b0-b7 8109 8D D0 C2 .РSTA &C2D0 810C 68 h PLA Restore result 810D 8D D3 C2 .Ó STA &C2D3 Store 8110 60 ` RTS ADFS Error Information: &C2D0 Sector b0-b7 &C2D1 Sector b8-b15 &C2D2 Sector b16-b19 and Drive &C2D3 SCSI error number &C2D4 Channel number if &C2D3.b7=1 Hard drive hardware is present. Check what drive is being accessed. 8111 A0 06  . LDY #&06 8113 B1 B0 ±° LDA (&B0),Y Get drive 8115 0D 17 C3 ..à ORA &C317 OR with current drive 8118 30 D6 0Ö BMI &80F0 Jump back with 4,5,6,7 as floppies Access a hard drive via the SCSI interface ------------------------------------------ 811A 20 7E 80 ~. JSR &807E Write &01 to SCSI Put SCSI in command mode? 811D C8 È INY Y=1 811E B1 B0 ±° LDA (&B0),Y Get Addr0 8120 85 B2 .² STA &B2 8122 C8 È INY 8123 B1 B0 ±° LDA (&B0),Y Get Addr1 8125 85 B3 .³ STA &B3 &B2/3=address b0-b15 8127 C8 È INY 8128 B1 B0 ±° LDA (&B0),Y Get Addr2 812A C9 FE Éþ CMP #&FE 812C 90 06 .. BCC &8134 Addr<&FFFE0000, language space 812E C8 È INY 812F B1 B0 ±° LDA (&B0),Y Get Addr3 8131 1A . INC A 8132 F0 03 ð. BEQ &8137 Not &FFxxxxxx, use I/O memory 8134 20 20 80 . JSR &8020 Claim Tube 8137 A0 05  . LDY #&05 8139 B1 B0 ±° LDA (&B0),Y Get Command 813B 20 3E 83 >. JSR &833E Send to SCSI data port 813E C8 È INY 813F B1 B0 ±° LDA (&B0),Y Get Drive 8141 0D 17 C3 ..à ORA &C317 OR with current drive 8144 8D 33 C3 .3à STA &C333 8147 4C 4C 81 LL. JMP &814C 814A B1 B0 ±° LDA (&B0),Y 814C 20 3E 83 >. JSR &833E Send to SCSI data port 814F 20 32 83 2. JSR &8332 Wait until SCSI busy 8152 10 05 .. BPL &8159 8154 70 03 p. BVS &8159 8156 C8 È INY 8157 D0 F1 Ðñ BNE &814A 8159 A0 05  . LDY #&05 815B B1 B0 ±° LDA (&B0),Y Get Command 815D 29 FD )ý AND #&FD Lose bit 1 815F 49 08 I. EOR #&08 Is Command &08 or &0A? 8161 F0 78 ðx BEQ &81DB Jump if not Read or Write 8163 20 32 83 2. JSR &8332 Wait until SCSI busy 8166 18 . CLC CC=Read 8167 50 01 P. BVC &816A Jump past with Read 8169 38 8 SEC CS=Write 816A A0 00  . LDY #&00 Initialise Y to 0 816C 24 CD $Í BIT &CD Accessing Tube? 816E 50 0C P. BVC &817C No, jump ahead to do the transfer 8170 A2 27 ¢' LDX #&27 8172 A0 C2  Â LDY #&C2 XY=>Tube address 8174 A9 00 ©. LDA #&00 A=0 8176 08 . PHP Save CC/CS state 8177 2A * ROL A A=0/1 for Read/Write 8178 20 13 82 .. JSR &8213 Claim the Tube 817B 28 ( PLP Restore CC/CS state Do a data transfer to/from SCSI device -------------------------------------- 817C 20 32 83 2. JSR &8332 Check SCSI status 817F 30 2C 0, BMI &81AD Transfer finished 8181 24 CD $Í BIT &CD Check Tube/Direction flags 8183 70 16 p. BVS &819B Jump for Tube transfer 8185 B0 07 °. BCS &818E Jump for I/O read 8187 B1 B2 ±² LDA (&B2),Y Get byte from memory 8189 8D 40 FC .@ü STA &FC40 Write to SCSI data 818C 80 05 .. BRA &8193 Jump to update address 818E AD 40 FC ­@ü LDA &FC40 Read byte from SCSI data port 8191 91 B2 .² STA (&B2),Y Store byte in memory 8193 C8 È INY Point to next byte 8194 D0 E6 Ðæ BNE &817C Loop for 256 bytes 8196 E6 B3 æ³ INC &B3 Increment address high byte 8198 4C 7C 81 L|. JMP &817C Loop for next 256 bytes 819B B0 08 °. BCS &81A5 Jump for Tube read 819D AD E5 FE ­åþ LDA &FEE5 Get byte from Tube 81A0 8D 40 FC .@ü STA &FC40 Write byte to SCSI data port 81A3 80 D7 .× BRA &817C Loop for next byte 81A5 AD 40 FC ­@ü LDA &FC40 Get byte from SCSI data port 81A8 8D E5 FE .åþ STA &FEE5 Write to Tube 81AB 80 CF .Ï BRA &817C Loop for next byte 81AD 20 3A 80 :. JSR &803A Release Tube and restore screen 81B0 20 32 83 2. JSR &8332 Check SCSI status 81B3 AD 40 FC ­@ü LDA &FC40 Get 81B6 20 32 83 2. JSR &8332 81B9 A8 ¨ TAY 81BA 20 6F 80 o. JSR &806F 81BD 29 01 ). AND #&01 81BF F0 EF ðï BEQ &81B0 81C1 98 . TYA 81C2 AE 40 FC ®@ü LDX &FC40 81C5 F0 03 ð. BEQ &81CA 81C7 4C A5 82 L¥. JMP &82A5 Return result=&7F 81CA AA ª TAX 81CB 29 02 ). AND #&02 81CD F0 03 ð. BEQ &81D2 Jump to exit with OK 81CF 4C 5D 82 L]. JMP &825D 81D2 A9 00 ©. LDA #&00 A=0 - OK 81D4 A6 B0 ¦° LDX &B0 Restore XY pointer 81D6 A4 B1 ¤± LDY &B1 81D8 29 7F ). AND #&7F Lose bit 7 81DA 60 ` RTS Return with result in A &CD ADFS status flag -------------------- b7 Tube present b6 Tube being used b5 Hard Drive present b4 - b3 - b2 *OPT1 setting b1 Bad Free Space Map b0 Files being ensured Not Read or Write ----------------- 81DB A0 00  . LDY #&00 81DD 24 CD $Í BIT &CD 81DF 70 3E p> BVS &821F 81E1 20 32 83 2. JSR &8332 81E4 30 C7 0Ç BMI &81AD 81E6 70 0C p. BVS &81F4 81E8 B1 B2 ±² LDA (&B2),Y 81EA 8D 40 FC .@ü STA &FC40 81ED C8 È INY 81EE D0 F8 Ðø BNE &81E8 81F0 E6 B3 æ³ INC &B3 81F2 80 ED .í BRA &81E1 81F4 AD 40 FC ­@ü LDA &FC40 81F7 91 B2 .² STA (&B2),Y 81F9 C8 È INY 81FA D0 F8 Ðø BNE &81F4 81FC E6 B3 æ³ INC &B3 81FE 80 E1 .á BRA &81E1 8200 EE 28 C2 î( INC &C228 8203 D0 08 Ð. BNE &820D 8205 EE 29 C2 î) INC &C229 8208 D0 03 Ð. BNE &820D 820A EE 2A C2 î* INC &C22A 820D A2 27 ¢' LDX #&27 820F A0 C2  Â LDY #&C2 8211 60 ` RTS 8212 78 x SEI 8213 20 06 04 .. JSR &0406 8216 A0 00  . LDY #&00 8218 20 1B 82 .. JSR &821B 821B 20 1E 82 .. JSR &821E 821E 60 ` RTS 821F A2 27 ¢' LDX #&27 8221 A0 C2  Â LDY #&C2 8223 20 32 83 2. JSR &8332 8226 10 03 .. BPL &822B 8228 4C AD 81 L­. JMP &81AD 822B 70 18 p. BVS &8245 822D 08 . PHP 822E A9 06 ©. LDA #&06 8230 20 12 82 .. JSR &8212 8233 EA ê NOP 8234 EA ê NOP 8235 EA ê NOP 8236 AD E5 FE ­åþ LDA &FEE5 8239 8D 40 FC .@ü STA &FC40 823C C8 È INY 823D D0 F4 Ðô BNE &8233 823F 20 00 82 .. JSR &8200 8242 28 ( PLP 8243 80 DE .Þ BRA &8223 8245 08 . PHP 8246 A9 07 ©. LDA #&07 8248 20 12 82 .. JSR &8212 824B EA ê NOP 824C EA ê NOP 824D EA ê NOP 824E AD 40 FC ­@ü LDA &FC40 8251 8D E5 FE .åþ STA &FEE5 8254 C8 È INY 8255 D0 F4 Ðô BNE &824B 8257 20 00 82 .. JSR &8200 825A 28 ( PLP 825B 80 C6 .Æ BRA &8223 Read result from SCSI and return it as a result ----------------------------------------------- 825D 20 7E 80 ~. JSR &807E Set SCSI to command mode 8260 A9 03 ©. LDA #&03 8262 AA ª TAX 8263 A8 ¨ TAY 8264 20 3E 83 >. JSR &833E Send &03 to SCSI 8267 AD 33 C3 ­3à LDA &C333 826A 29 E0 )à AND #&E0 826C 20 3E 83 >. JSR &833E Send drive to SCSI 826F 20 3E 83 >. JSR &833E Send &00 to SCSI 8272 88 . DEY 8273 10 FA .ú BPL &826F Send 4 zeros: sends &03 dd &00 &00 &00 &00 8275 20 32 83 2. JSR &8332 Wait for SCSI 8278 AD 40 FC ­@ü LDA &FC40 Get byte from SCSI 827B 9D D0 C2 .РSTA &C2D0,X Store in error block 827E CA Ê DEX 827F 10 F4 .ô BPL &8275 Loop to fetch four bytes, err, sec.hi, sec.mid, sec.lo 8281 AD 33 C3 ­3à LDA &C333 8284 29 E0 )à AND #&E0 8286 0D D2 C2 .Ò ORA &C2D2 ORA drive number with current drive 8289 8D D2 C2 .Ò STA &C2D2 828C 20 32 83 2. JSR &8332 Wait for SCSI 828F AE D3 C2 ®Ó LDX &C2D3 Get returned error number 8292 AD 40 FC ­@ü LDA &FC40 Get a byte from SCSI 8295 20 32 83 2. JSR &8332 Wait for SCSI 8298 AC 40 FC ¬@ü LDY &FC40 Get another byte from SCSI 829B D0 08 Ð. BNE &82A5 Second byte is non-zero, jump to return &7F 829D 29 02 ). AND #&02 Test bit 1 of first byte 829F D0 04 Ð. BNE &82A5 If set, jump to return &7F 82A1 8A . TXA 82A2 4C D4 81 LÔ. JMP &81D4 Return returned SCSI result 82A5 A9 FF ©. LDA #&FF Result=&FF 82A7 4C D4 81 LÔ. JMP &81D4 Jump to return result Do a predefined SCSI operation ------------------------------ 82AA A2 15 ¢. LDX #&15 Point to &C215 82AC A0 C2  Â LDY #&C2 82AE 20 A2 80 ¢. JSR &80A2 Do a disk operation 82B1 D0 0A Ð. BNE &82BD Jump ahead with error 82B3 60 ` RTS Exit if OK Do a disk access ---------------- 82B4 AD 2F C2 ­/ LDA &C22F 82B7 8D 17 C3 ..à STA &C317 82BA 4C E2 8B Lâ. JMP &8BE2 82BD C9 25 É% CMP #&25 Error &25? 82BF F0 F3 ðó BEQ &82B4 82C1 C9 65 Ée CMP #&65 82C3 F0 EF ðï BEQ &82B4 82C5 C9 6F Éo CMP #&6F 82C7 D0 13 Ð. BNE &82DC If no, report a disk error 82C9 20 9A 84 .. JSR &849A 82CC A9 7E ©~ LDA #&7E 82CE 20 F4 FF ô. JSR &FFF4 Acknowledge Escape state 82D1 20 6B 83 k. JSR &836B Generate an error 82D4 11 . EQUB &11 ERR=17 82D5 45 73 63 61 Esca EQUS "Escape" REPORT="Escape" 82D9 70 65 pe 82DA 00 . EQUB &00 82DC C9 04 É. CMP #&04 Error 'Not ready'? 82DE D0 14 Ð. BNE &82F4 No, try other errors 82E0 20 6B 83 k. JSR &836B Generate an error 82E3 CD 44 72 ÍDr CMP &7244 Error "Drive not ready" 82E6 69 76 iv ADC #&76 82E8 65 20 e ADC &20 82EA 6E 6F 74 not ROR &746F 82ED 20 72 65 re JSR &6572 82F0 61 64 ad ADC (&64,X) 82F2 79 00 y. ADC &C900,Y 82F4 C9 40 .@ CMP #&40 Error 'Write protected'? 82F6 F0 13 ð. BEQ &830B Jump to report "Disk protected" All other results, give generic error message 82F8 20 D8 89 Ø. JSR &89D8 82FB AA ª TAX 82FC 20 74 83 t. JSR &8374 82FF C7 44 ÇD CPY &44 Error "Disk error" 8301 69 73 is ADC #&73 8303 63 c EQUB &63 8304 20 65 72 er JSR &7265 8307 72 6F ro ADC (&6F) 8309 72 00 r. ADC (&00) 830B 20 4E 83 N. JSR &834E Generate an error 830E C9 44 ÉD CMP #&44 Error "Disc protected" 8310 69 73 is ADC #&73 8312 63 c EQUB &63 8313 20 70 72 pr JSR &7270 8316 6F 74 65 ote BBR 6,&74,&837E 8319 63 c EQUB &63 831A 74 65 te STZ &65,X 831C 64 00 d. STZ &00 831E 20 24 83 $. JSR &8324 8321 D0 9A Ð. BNE &82BD 8323 60 ` RTS 8324 20 3E 83 >. JSR &833E 8327 60 ` RTS Wait until any ensuring completed ================================= 8328 A9 01 ©. LDA #&01 Looking at bit 0 832A 08 . PHP Save IRQ disable 832B 58 X CLI Enable IRQs for a moment 832C 28 ( PLP Restore IRQ disable 832D 24 CD $Í BIT &CD Check Ensure 832F D0 F7 Ð÷ BNE &8328 Loop back if set 8331 60 ` RTS Check something --------------- 8332 48 H PHA Save A 8333 20 6F 80 o. JSR &806F Get SCSI status 8336 29 20 ) AND #&20 BUSY? 8338 F0 F9 ðù BEQ &8333 Loop until BUSY 833A 68 h PLA Restore A 833B 24 CC $Ì BIT &CC 833D 60 ` RTS 833E 20 32 83 2. JSR &8332 Wait until SCSI busy 8341 70 06 p. BVS &8349 8343 8D 40 FC .@ü STA &FC40 8346 A9 00 ©. LDA #&00 8348 60 ` RTS 8349 68 h PLA 834A 68 h PLA 834B 4C AD 81 L­. JMP &81AD 834E AE 2F C2 ®/ LDX &C22F 8351 E8 è INX 8352 D0 17 Ð. BNE &836B 8354 AE 2E C2 ®. LDX &C22E 8357 E8 è INX 8358 D0 0B Ð. BNE &8365 835A A0 02  . LDY #&02 835C B9 14 C3 ¹.à LDA &C314,Y 835F 99 2C C2 ., STA &C22C,Y 8362 88 . DEY 8363 10 F7 .÷ BPL &835C 8365 AD 17 C3 ­.à LDA &C317 8368 8D 2F C2 ./ STA &C22F 836B 20 D8 89 Ø. JSR &89D8 836E A9 10 ©. LDA #&10 8370 14 CD .Í TRB &CD 8372 A2 00 ¢. LDX #&00 8374 68 h PLA 8375 85 B2 .² STA &B2 8377 68 h PLA 8378 85 B3 .³ STA &B3 837A A9 10 ©. LDA #&10 837C 14 CD .Í TRB &CD 837E A0 00  . LDY #&00 8380 C8 È INY 8381 B1 B2 ±² LDA (&B2),Y 8383 99 00 01 ... STA &0100,Y 8386 D0 F8 Ðø BNE &8380 8388 8A . TXA 8389 F0 4F ðO BEQ &83DA 838B A9 20 © LDA #&20 838D 99 00 01 ... STA &0100,Y 8390 8A . TXA 8391 C9 30 É0 CMP #&30 8393 B0 06 °. BCS &839B 8395 20 51 84 Q. JSR &8451 8398 4C A2 83 L¢. JMP &83A2 Some hard drive stuff --------------------- 8B4F AD 33 C3 ­3à LDA &C333 8B52 30 D8 0Ø BMI &8B2C 8B54 20 7E 80 ~. JSR &807E 8B57 AD 16 C2 ­. LDA &C216 8B5A 85 B2 .² STA &B2 8B5C AD 17 C2 ­. LDA &C217 8B5F 85 B3 .³ STA &B3 8B61 AD 18 C2 ­. LDA &C218 8B64 C9 FE Éþ CMP #&FE 8B66 90 06 .. BCC &8B6E 8B68 AD 19 C2 ­. LDA &C219 8B6B 1A . INC A 8B6C F0 03 ð. BEQ &8B71 8B6E 20 20 80 . JSR &8020 8B71 AD 1E C2 ­. LDA &C21E 8B74 AA ª TAX 8B75 A9 01 ©. LDA #&01 8B77 8D 1E C2 .. STA &C21E 8B7A A9 08 ©. LDA #&08 8B7C 8D 1A C2 .. STA &C21A 8B7F A0 00  . LDY #&00 8B81 B9 1A C2 ¹. LDA &C21A,Y 8B84 20 3E 83 >. JSR &833E 8B87 C8 È INY 8B88 C0 06 À. CPY #&06 8B8A D0 F5 Ðõ BNE &8B81 8B8C 24 CD $Í BIT &CD 8B8E 50 0B P. BVC &8B9B 8B90 DA Ú PHX 8B91 A2 27 ¢' LDX #&27 8B93 A0 C2  Â LDY #&C2 8B95 A9 01 ©. LDA #&01 8B97 20 06 04 .. JSR &0406 8B9A FA ú PLX 8B9B A0 00  . LDY #&00 8B9D 20 32 83 2. JSR &8332 8BA0 30 19 0. BMI &8BBB 8BA2 AD 40 FC ­@ü LDA &FC40 8BA5 E0 00 à. CPX #&00 8BA7 F0 0F ð. BEQ &8BB8 8BA9 24 CD $Í BIT &CD 8BAB 50 08 P. BVC &8BB5 8BAD 20 1B 82 .. JSR &821B 8BB0 8D E5 FE .åþ STA &FEE5 8BB3 70 02 p. BVS &8BB7 8BB5 91 B2 .² STA (&B2),Y 8BB7 CA Ê DEX 8BB8 C8 È INY 8BB9 D0 E7 Ðç BNE &8BA2 8BBB 4C AD 81 L­. JMP &81AD Check if hard drive hardware present ==================================== On entry: none On exit: EQ - hard drive present NE - no hard drive present X,Y - preserved A - corrupted 9A6C A9 5A ©Z LDA #&5A 9A6E 20 75 9A u. JSR &9A75 9A71 D0 0B Ð. BNE &9A7E 9A73 A9 A5 ©¥ LDA #&A5 9A75 8D 40 FC .@ü STA &FC40 9A78 9C 43 FC .Cü STZ &FC43 9A7B CD 40 FC Í@ü CMP &FC40 9A7E 60 ` RTS Some more hard drive stuff -------------------------- AAD9 48 H PHA AADA 20 28 83 (. JSR &8328 AADD 20 80 80 .. JSR &8080 Set SCSI to command mode AAE0 68 h PLA AAE1 20 1E 83 .. JSR &831E AAE4 BD 03 C2 ½. LDA &C203,X AAE7 8D 33 C3 .3à STA &C333 AAEA 20 1E 83 .. JSR &831E AAED BD 02 C2 ½. LDA &C202,X AAF0 20 1E 83 .. JSR &831E AAF3 BD 01 C2 ½. LDA &C201,X AAF6 20 1E 83 .. JSR &831E AAF9 A9 01 ©. LDA #&01 AAFB 20 1E 83 .. JSR &831E AAFE A9 00 ©. LDA #&00 AB00 4C 1E 83 L.. JMP &831E Some more hard drive stuff -------------------------- AB76 B1 BC ±¼ LDA (&BC),Y AB78 8D 40 FC .@ü STA &FC40 AB7B C8 È INY AB7C D0 F8 Ðø BNE &AB76 AB7E A9 01 ©. LDA #&01 AB80 04 CD .Í TSB &CD AB82 88 . DEY AB83 8C 43 FC .Cü STY &FC43 AB86 A6 C1 ¦Á LDX &C1 AB88 60 ` RTS