; !IDE Initialize IDE interface ; mods 1/10/04 5/4/04 9/1/04 11/18/07 12/4/07 12/16/07 "Setting default IDE slot to 23" $PRINT CRLF OCTAL 274 23 PUT ;extras... ;note! this driver IPL must be loaded AFTER disk.ipl ;easier to swap drivers this way anyway "Loading ?DRV" $PRINT CRLF DEFINE ?DRV "IDE virtual drive " $PRINT DRV GET PNUM "offset: " $PRINT #0 #0 ;push total DRV GET IFNZ ;if not zero #1 DRV GET +DO 2 146 DADD +LOOP ;add 2 146 dn times ENDIF SWAP PNUM PNUM ;print high low offset END ;--------- "Loading !IDE" $PRINT CRLF ;note autostarting for default ;caution... rename !IDE to IDE if IDE drive not present or it hangs CREATE !IDE JMP IDEEN * slot assignment... (when assembled anyway) IDE EQU 23 configured for IDE interface in slot 23 * zero page vectors.... CMDVE EQU 240 command, >IDE code STAVE EQU 241 status, IDE etc commands, instead set * BLKAL(246) to block low, BLKAH(247) to block high, and call SEEKV ASEEK DEF *+1 SEEKC NOP * implementation of virtual drives * if drive 0 uses raw blkal/blkah * otherwise d-adds vdshi/vdslo drvnm times LDA BLKAL STA TBALO LDA BLKAH STA TBAHI LDA DRVNM SZA,RSS JMP SEEK1 no change if drive 0 CMA,INA STA 1 save -drive in B for counter DNMLP CLE CLO LDA TBALO ADA VDSLO STA TBALO 32-bit add LDA TBAHI SEZ INA ADA VDSHI STA TBAHI ISZ 1 done? JMP DNMLP no, keep looping SEEK1 LDA TBALO AND C377 IOR SB1 JSB CMDVE,I LDA TBALO AND C1774 ALF,ALF IOR SB2 JSB CMDVE,I LDA TBAHI AND C377 IOR SB3 JSB CMDVE,I LDA TBAHI AND C1774 ALF,ALF IOR SB4 JSB CMDVE,I JMP SEEKC,I C377 OCT 000377 C1774 OCT 177400 SB1 OCT 101000 SB2 OCT 102000 SB3 OCT 103000 SB4 OCT 104000 TBALO OCT 0 TBAHI OCT 0 * boot * can be called as a sub, but never returns * note! seek must already be set! * good idea to -IRQ etc before calling ABOOT DEF *+1 BOOT NOP LDA BOOTC STA FROM LDA DEST STA TO BOOTL LDA FROM,I STA TO,I ISZ TO LDA FROM CPA BOOTE JMP DEST,I INA STA FROM JMP BOOTL BOOTC DEF *+1 * IDE BOOTSTRAP LOADER: * modified 5/2/04 for LDFB * modified 12/16/07 to CLC 0, ORG 77600 * ORG 77600 OCT 063633 LDA TCNT OCT 073630 STA LCNT OCT 063631 LDA RDBW OCT 017614 JSB TIDE OCT 067632 LDB ADDR OCT 017622 LOOP JSB RIDE OCT 170001 STA 1,I OCT 006004 INB OCT 037630 ISZ LCNT OCT 027605 JMP LOOP OCT 106700 CLC 0B OCT 127632 JMP ADDR,I OCT 000000 TIDE NOP IPL11 OCT 102623 OTA 23B IPL12 OCT 103723 STC 23B,C IPL13 OCT 102323 SFS 23B OCT 027617 JMP *-1 OCT 127614 JMP TIDE,I OCT 000000 RIDE NOP IPL14 OCT 103723 STC 23B,C IPL15 OCT 102323 SFS 23B OCT 027624 JMP *-1 IPL16 OCT 102523 LIA 23B OCT 127622 JMP RIDE,I OCT 000000 LCNT OCT 0 OCT 110037 RDBW OCT 110037 OCT 000002 ADDR OCT 000002 OCT 102000 TCNT OCT 102000 * last addr 77633 BOOTE DEF *-1 DEST OCT 77600 FROM OCT 0 TO OCT 0 END ;--- end of IDE core driver code "Done" $PRINT CONSOLE