10 ; SAVE #D1:DISKOPS.M65›20 ;›30 ;›40 ; LOAD #D1:PARALLEL.M65›50 ;›60 ;›70 ; *= $C58B›79 .PAGE "Disk Handler and Boot"›80 LIST ›90 .LOCAL ›050571 INITDOS LDA WARMST If a 0 here›050573 BEQ ?READD then try to boot›050575 LDA BOOT? Else on reset &›050577 AND #1 if no disk boot›050579 BEQ ?NODISK just rts; else›050581 JMP ?XPROG goto booted pgm›050584 ?READD LDA #1 Check status›050586 STA DUNIT on D1:›050589 LDA #'S›050591 STA DCOMND Change to›050594 JSR DSKINV check all›050597 BMI ?NODISK›050599 ?READ1 LDA #0 Read sector 1›050601 STA DAUX2›050604 LDA #1›050606 STA DAUX1›050609 LDA #0 into page 4›050611 STA DBUFLO›050614 LDA #4›050616 STA DBUFHI›050619 ?XREAD1 JSR ?GET1 Go read 1st›050622 BPL ?GOT1ST and exit if ok›050624 ?ERROR JSR ?NOBOOT›050627 LDA CASSBT If cassette go›050630 BEQ ?READ1 try it›050632 ?NODISK RTS ›050633 ?GOT1ST LDX #3›050635 ?COPY4 LDA $0400,X Copy first›050638 STA DFLAGS,X four bytes to›050641 DEX DFlags & Bootad›050642 BPL ?COPY4›050644 LDA BOOTAD Copy Bootad to›050647 STA RAMLO Ramlo/hi›050649 LDA BOOTAD+1›050652 STA RAMHI›050654 LDA $0404 Bytes 5 and 6›050657 STA DOSINI to Dosini›050659 LDA $0405›050662 STA DOSINI+1›050664 ?SAVBUF LDY #127 Boot secs SD›050666 ?SLOOP LDA $0400,Y ; Copy from›050669 STA (RAMLO),Y ; page4 to›050671 DEY ; address in›050672 BPL ?SLOOP ; Ramlo/hi›050674 CLC Bump pointer›050675 LDA RAMLO by 128›050677 ADC #$80›050679 STA RAMLO›050681 LDA RAMHI›050683 ADC #0›050685 STA RAMHI›050687 DEC DBSECT Dec sectors to›050690 BEQ ?DONE do and›050692 INC DAUX1 point to next›050695 ?NEXT JSR ?GET1 Get it and if›050698 BPL ?SAVBUF ok, move to Ram›050700 JSR ?NOBOOT Oops›050703 LDA CASSBT›050706 BNE ?ERROR›050708 BEQ ?NEXT Go always›050710 ?DONE LDA CASSBT›050713 BEQ ?NOTAPE›050715 JSR ?GET1›050718 ?NOTAPE JSR ?XBOOT›050721 BCS ?ERROR›050723 JSR ?XPROG›050726 INC BOOT?›050728 RTS ›050729 ?XBOOT CLC Exec boot loader›050730 LDA BOOTAD›050733 ADC #6›050735 STA RAMLO›050737 LDA BOOTAD+1›050740 ADC #0›050742 STA RAMHI›050744 JMP (RAMLO)›050747 ?XPROG JMP (DOSINI)›050750 ?NOBOOT LDX # MSGBERR boot error›050754 TXA message›050755 LDX #0›050757 STA ICBAL,X›050760 TYA ›050761 STA ICBAH,X›050764 LDA #9›050766 STA ICCOM,X›050769 LDA #$FF›050771 STA ICBLL,X›050774 JMP CIOV›050777 ?GET1 LDA CASSBT Get next›050780 BEQ ?GETSEC block or sector›050782 JMP RBLOKV›050785 ?GETSEC LDA #'R›050787 STA DCOMND›050790 LDA #1›050792 STA DUNIT›050795 JMP DSKINV›050798 BOOTTAPE LDA WARMST Attempt›050800 BEQ ?READC cassette boot›050802 LDA BOOT? If no tape›050804 AND #2 boot flagged›050806 BEQ ?CQUIT then exit›050808 JMP ?XTAPE›050811 ?READC LDA CKEY Start pressed?›050814 BEQ ?CQUIT No›050816 LDA #$80 Continuous›050818 STA FTYPE records›050820 INC CASSBT Flag tape boot›050823 JSR CSOPIV Open cassette›050826 JSR ?XREAD1 Read first block›050829 LDA #0›050831 STA CASSBT Clear›050834 STA CKEY these›050837 ASL BOOT? Make Boot?=2›050839 LDA DOSINI Set›050841 STA CASINI reset›050843 LDA DOSINI+1 vector›050845 STA CASINI+1›050847 ?CQUIT RTS ›050848 ?XTAPE JMP (CASINI)›050851 DSKINI LDA #160 Init Disk i/o›050853 STA DSKTIM›050856 LDA #$80 Single density›050858 STA DSCTLN sector size›050861 LDA #0›050863 STA DSCTLN+1›050866 RTS ›050867 DODISK LDA #$31 Disk i/o›050869 STA DDEVIC›050872 LDA DSKTIM›050875 LDX DCOMND This is why you›050878 CPX #'! can't use Dskinv›050880 BEQ ?TIME to format ED›050882 LDA #7 Read/Write time›050884 ?TIME STA DTIMLO›050887 LDX #$40 From disk›050889 LDA DCOMND›050892 CMP #'P›050894 BEQ ?ISPUT›050896 CMP #'W›050898 BNE ?STAT?›050900 ?ISPUT LDX #$80 To disk›050902 ?STAT? CMP #'S›050904 BNE ?NOTS›050906 LDA # DVSTAT›050913 STA DBUFHI›050916 LDY #4›050918 LDA #0›050920 BEQ ?XSIO go always›050922 ?NOTS LDY DSCTLN›050925 LDA DSCTLN+1›050928 ?XSIO STX DSTATS›050931 STY DBYTLO›050934 STA DBYTHI›050937 JSR SIOV›050940 BPL ?CONT›050942 RTS exit on error›050943 ?CONT LDA DCOMND›050946 CMP #'S›050948 BNE ?REPORT›050950 JSR ?SETBUF›050953 LDY #2 Get disk format›050955 LDA (BUFADR),Y time from›050957 STA DSKTIM status frame›050960 ?REPORT LDA DCOMND›050963 CMP #'!›050965 BNE ?ENDREP›050967 JSR ?SETBUF Format report,›050970 LDY #$FE Want zero so›050972 ?BUMP2 INY allow for pre-›050973 INY increment here.›050974 ?FF? LDA (BUFADR),Y Look for›050976 CMP #$FF two bytes of $FF›050978 BNE ?BUMP2›050980 INY Code designed›050981 LDA (BUFADR),Y for 810 drive›050983 INY which returns›050984 CMP #$FF bad sector list›050986 BNE ?FF? into buffer.›050988 DEY Point to byte›050989 DEY before the $FF's›050990 STY DBYTLO and report as›050993 LDA #0 sector size›050995 STA DBYTHI›050998 ?ENDREP LDY DSTATS›051001 RTS ›051002 ?SETBUF LDA DBUFLO Set buffer›051005 STA BUFADR address›051007 LDA DBUFHI›051010 STA BUFADR+1›051012 RTS ›