OPT PAG CHARGEUR DOUBLE DENSITE BOOTDD.B 17-5-18 ASSEMBLEUR 6809 PAGE 1 * LECTURE D'UN SECTEUR * SIMPLE ET DOUBLE DENSITE * CONSTANTES C100 CMDADR EQU $C100 * EXTERNAL LABEL EQUATES E000 COMREG EQU $E000 FLOPPY CTLR E001 TRKREG EQU $E001 E002 SECREG EQU $E002 E003 DATREG EQU $E003 E080 DRVREG EQU COMREG+$80 C0FF STACK EQU $C0FF C300 SCTBUF EQU $C300 C100 ORG $C100 C100 20 0B START BRA START1 C102 00 00 FCB $00,$00 C104 00 FCB $00 C105 01 FLXTRK FCB $01 FILE START TRACK C106 01 FCB $01 FILE START SECTOR C107 00 DNS FCB $00 C108 C1 00 TADR FCB $C1,$00 C10A 00 LADR1 FCB $00 C10B 00 FCB $00 C10C 00 CURSID FCB $00 C10D 10CE C0FF START1 LDS #STACK SETUP STACK C111 FC C105 LDD FLXTRK GET TRANSFER ADDRESS C114 FD C300 STD SCTBUF SETUP STARTING TRK & SCT C117 108E C400 LDY #SCTBUF+256 * * PERFORM ACTUAL BOOT LOAD * C11B 8D 35 LOAD1 BSR GETCH GET A CHARACTER C11D 81 02 CMPA #2 DATA RECORD HEADER ? C11F 27 10 BEQ LOAD2 SKIP IF SO C121 81 16 CMPA #$16 XFR ADDRESS HEADER? C123 26 F6 BNE LOAD1 LOOP IF NEITHER C125 8D 2B BSR GETCH GET TRANSFER ADDRESS C127 B7 C108 STA TADR C12A 8D 26 BSR GETCH C12C B7 C109 STA TADR+1 C12F 20 EA BRA LOAD1 CONTINUE LOAD C131 8D 1F LOAD2 BSR GETCH GET LOAD ADDRESS C133 B7 C10A STA LADR1 C136 8D 1A BSR GETCH C138 B7 C10B STA LADR1+1 C13B 8D 15 BSR GETCH GET BYTE COUNT C13D 1F 89 TFR A,B PUT IN B C13F 4D TSTA C140 27 D9 BEQ LOAD1 LOOP IF COUNT = 0 C142 BE C10A LDX LADR1 GET LOAD ADDRESS C145 34 14 LOAD3 PSHS B,X C147 8D 09 BSR GETCH GET A DATA CHARACTER C149 35 14 PULS B,X C14B A7 80 STA 0,X+ PUT CHARACTER CHARGEUR DOUBLE DENSITE BOOTDD.B 17-5-18 ASSEMBLEUR 6809 PAGE 2 C14D 5A DECB END OF DATA IN RECORD? C14E 26 F5 BNE LOAD3 LOOP IF NOT C150 20 C9 BRA LOAD1 GET ANOTHER RECORD * * GET CHARACTER ROUTINE * C152 108C C400 GETCH CMPY #SCTBUF+256 OUT OF DATA? C156 26 0F BNE GETCH4 GO READ CHARACTER IF NOT C158 8E C300 LDX #SCTBUF POINT TO BUFFER C15B EC 84 LDD 0,X GET FORWARD LINK C15D 27 0B BEQ GO IF ZERO, FILE IS LOADED C15F 8D 0D BSR READ READ NEXT SECTOR C161 26 9D BNE START START OVER IF ERROR C163 108E C304 LDY #SCTBUF+4 POINT PAST LINK C167 A6 A0 GETCH4 LDA 0,Y+ ELSE GET A CHARACTER C169 39 RTS * * FILE IS LOADED, JUMP TO IT * C16A 6E 9F C108 GO JMP [TADR] * * READ SINGLE SECTOR * 00E0 SETDP $E0 C16E 34 0A READ PSHS DP,A C170 86 E0 LDA #$E0 C172 1F 8B TFR A,DP C174 35 02 PULS A C176 8D 3E BSR SEEK C178 7D C10C TST CURSID C17B 26 04 BNE SAUT1 C17D 86 8C LDA #$8C READ CMD 0 C17F 20 02 BRA SUIT1 C181 86 8E SAUT1 LDA #$8E READ CMD 1 C183 97 00 SUIT1 STA COMREG >C185 17 0065 LBSR DEL28 C188 5F CLRB C189 8E C300 LDX #SCTBUF C18C 96 00 READ3 LDA COMREG C18E 85 02 BITA #2 DRQ C190 26 08 BNE READ5 C192 85 01 BITA #1 BUSY C194 26 F6 BNE READ3 C196 1F 89 TFR A,B C198 20 09 BRA READ6 C19A 96 03 READ5 LDA DATREG C19C A7 80 STA 0,X+ C19E 5A DECB C19F 26 EB BNE READ3 C1A1 8D 0C BSR WAIT C1A3 C5 10 READ6 BITB #$10 C1A5 27 03 BEQ READ8 C1A7 73 C107 COM DNS C1AA C5 1C READ8 BITB #$1C CHARGEUR DOUBLE DENSITE BOOTDD.B 17-5-18 ASSEMBLEUR 6809 PAGE 3 C1AC 35 08 PULS DP C1AE 39 RTS * ATTENTE FIN DE COMMANDE C1AF D6 00 WAIT LDB COMREG C1B1 C5 01 BITB #1 C1B3 26 FA BNE WAIT C1B5 39 RTS * SEEK C1B6 7F C10C SEEK CLR CURSID C1B9 7D C107 TST DNS C1BC 27 0E BEQ SIMPLE C1BE 34 02 PSHS A C1C0 86 FA LDA #%11111010 C1C2 97 80 STA DRVREG C1C4 35 02 PULS A C1C6 C1 12 CMPB #18 C1C8 23 11 BLS SEEK1 C1CA 20 0C BRA SEEK2 C1CC 34 02 SIMPLE PSHS A C1CE 86 FE LDA #%11111110 C1D0 97 80 STA DRVREG C1D2 35 02 PULS A C1D4 C1 0A CMPB #10 C1D6 23 03 BLS SEEK1 C1D8 7A C10C SEEK2 DEC CURSID C1DB D7 02 SEEK1 STB SECREG C1DD 91 01 CMPA TRKREG C1DF 27 0C BEQ DEL28 C1E1 97 03 STA DATREG C1E3 8D 08 BSR DEL28 C1E5 86 1B LDA #$1B C1E7 97 00 STA COMREG C1E9 8D 02 BSR DEL28 C1EB 8D C2 BSR WAIT * BOUCLE DELAI >C1ED BD C1F0 DEL28 JSR DEL14 >C1F0 BD C1F3 DEL14 JSR DEL C1F3 39 DEL RTS * PROTECTION C1F5 ORG $C1F5 C1F5 50 56 FCB $50,$56 END START 0 ERREUR(S) DETECTEE(S) CHARGEUR DOUBLE DENSITE BOOTDD.B 17-5-18 ASSEMBLEUR 6809 PAGE 4 TABLE DES SYMBOLES : CMDADR C100 COMREG E000 CURSID C10C DATREG E003 DEL C1F3 DEL14 C1F0 DEL28 C1ED DNS C107 DRVREG E080 FLXTRK C105 GETCH C152 GETCH4 C167 GO C16A LADR1 C10A LOAD1 C11B LOAD2 C131 LOAD3 C145 READ C16E READ3 C18C READ5 C19A READ6 C1A3 READ8 C1AA SAUT1 C181 SCTBUF C300 SECREG E002 SEEK C1B6 SEEK1 C1DB SEEK2 C1D8 SIMPLE C1CC STACK C0FF START C100 START1 C10D SUIT1 C183 TADR C108 TRKREG E001 WAIT C1AF